@@ -460,7 +460,7 @@ def fetch_url(self, url, try_number=1):
460460 # check for response
461461 if not json_str :
462462 logging .info ("No Response from DTU" )
463- raise ConnectionError ("No response from DTU - " , self .host )
463+ raise ConnectionError ("No valid response from DTU - " , self .host )
464464
465465 json = None
466466 try :
@@ -537,6 +537,7 @@ def sign_of_life(self):
537537 logging .debug ("Last inverter #%d _update() call: %s" , self .pvinverternumber , self ._last_update )
538538 logging .info ("[%s] Last inverter #%d '/Ac/Power': %s" , self ._servicename ,
539539 self .pvinverternumber , self ._dbusservice ["/Ac/Power" ])
540+ #self.check_dbus_connectionproblem()
540541 return True
541542
542543 def update (self ):
@@ -558,7 +559,8 @@ def update(self):
558559 Attributes:
559560 successful (bool): Indicates whether the update was successful.
560561 """
561- logging .debug ("_update" )
562+ logging .debug ("_update: last update: %s" , time .strftime ("%Y-%m-%d %H:%M:%S" , time .localtime (self ._last_update )))
563+
562564 successful = False
563565 try :
564566 # update data from DTU once per _update call:
@@ -569,20 +571,23 @@ def update(self):
569571 logging .info ("DRY RUN. No data is sent!!" )
570572 else :
571573 self .set_dbus_values ()
572- self ._update_index ()
574+ self ._update_index ()
573575 successful = True
574576 except requests .exceptions .RequestException as exception :
575577 if self .last_update_successful :
576578 logging .warning (f"HTTP Error at _update for inverter "
577579 f"{ self .pvinverternumber } ({ self ._get_name ()} ): { str (exception )} " )
580+ self .check_dbus_connectionproblem ()
578581 except ValueError as error :
579582 if self .last_update_successful :
580583 logging .warning (f"Error at _update for inverter "
581584 f"{ self .pvinverternumber } ({ self ._get_name ()} ): { str (error )} " )
585+ self .check_dbus_connectionproblem ()
582586 except Exception as error : # pylint: disable=broad-except
583587 if self .last_update_successful :
584588 logging .warning (f"Error at _update for inverter "
585589 f"{ self .pvinverternumber } ({ self ._get_name ()} )" , exc_info = error )
590+ self .check_dbus_connectionproblem ()
586591 finally :
587592 if successful :
588593 if not self .last_update_successful :
@@ -689,6 +694,8 @@ def set_dbus_values(self):
689694 logging .debug (f"Inverter #{ self .pvinverternumber } Current (/State): { state } " )
690695 logging .debug ("---" )
691696 else :
697+ self ._dbusservice ["/StatusCode" ] = 7 # 0=Startup 0; 1=Startup 1; 2=Startup 2; 3=Startup 3; 4=Startup 4; 5=Startup 5; 6=Startup 6; 7=Running; 8=Standby; 9=Boot loading; 10=Error
698+
692699 # three-phase inverter: split total power equally over all three phases
693700 if "3P" == self .pvinverterphase :
694701 powerthird = power / 3
@@ -734,3 +741,59 @@ def set_dbus_values(self):
734741 logging .debug (f"Inverter #{ self .pvinverternumber } Power (/Ac/Power): { power } " )
735742 logging .debug (f"Inverter #{ self .pvinverternumber } Energy (/Ac/Energy/Forward): { pvyield } " )
736743 logging .debug ("---" )
744+
745+ def check_dbus_connectionproblem (self ):
746+ '''zero power data and cleat connection status and set dbus values'''
747+ update_age = (time .time () - self ._last_update )
748+ logging .debug ("Last update %d s ago" , update_age )
749+
750+ if (update_age > constants .CONNECTION_TIMEOUT ):
751+ # This will be refactored later in classes
752+ if self ._servicename == "com.victronenergy.inverter" :
753+ # see https://github.com/victronenergy/venus/wiki/dbus#inverter
754+ self ._dbusservice ["/Ac/Out/L1/V" ] = 0
755+ self ._dbusservice ["/Ac/Out/L1/I" ] = 0
756+ self ._dbusservice ["/Ac/Out/L1/P" ] = 0
757+ self ._dbusservice ["/Dc/0/Voltage" ] = 0
758+ self ._dbusservice ["/Ac/Power" ] = 0
759+
760+ #self._dbusservice["/State"] = 2 # 2=Fault
761+ #self._dbusservice["/Mode"] = 2 # Switch position: 2=Inverter on; 4=Off; 5=Low Power/ECO
762+
763+ self ._dbusservice ["/Ac/L1/Current" ] = 0
764+ self ._dbusservice ["/Ac/L1/Power" ] = 0
765+ self ._dbusservice ["/Ac/L1/Voltage" ] = 0
766+
767+ logging .debug (f"Inverter #{ self .pvinverternumber } Voltage (/Ac/Out/L1/V): { voltage } " )
768+ logging .debug (f"Inverter #{ self .pvinverternumber } Current (/Ac/Out/L1/I): { current } " )
769+
770+ logging .debug (f"Inverter #{ self .pvinverternumber } Current (/Dc/0/Voltage): { dc_voltage } " )
771+ logging .debug (f"Inverter #{ self .pvinverternumber } Voltage (/Ac/Power): { power } " )
772+ logging .debug (f"Inverter #{ self .pvinverternumber } Current (/State): { state } " )
773+ logging .debug ("---" )
774+ else :
775+ self ._dbusservice ["/StatusCode" ] = 10 # 0=Startup 0; 1=Startup 1; 2=Startup 2; 3=Startup 3; 4=Startup 4; 5=Startup 5; 6=Startup 6; 7=Running; 8=Standby; 9=Boot loading; 10=Error
776+
777+ # three-phase inverter: split total power equally over all three phases
778+ if "3P" == self .pvinverterphase :
779+
780+ self ._dbusservice ["/Ac/L1/Voltage" ] = 0
781+ self ._dbusservice ["/Ac/L1/Current" ] = 0
782+ self ._dbusservice ["/Ac/L1/Power" ] = 0
783+ self ._dbusservice ["/Ac/L2/Voltage" ] = 0
784+ self ._dbusservice ["/Ac/L2/Current" ] = 0
785+ self ._dbusservice ["/Ac/L2/Power" ] = 0
786+ self ._dbusservice ["/Ac/L3/Voltage" ] = 0
787+ self ._dbusservice ["/Ac/L3/Current" ] = 0
788+ self ._dbusservice ["/Ac/L3/Power" ] = 0
789+ self ._dbusservice ["/Ac/Power" ] = 0
790+
791+ else :
792+ pre = "/Ac/" + self .pvinverterphase
793+ self ._dbusservice [pre + "/Voltage" ] = 0
794+ self ._dbusservice [pre + "/Current" ] = 0
795+ self ._dbusservice [pre + "/Power" ] = 0
796+ self ._dbusservice ["/Ac/Power" ] = 0
797+
798+ logging .debug (f"Inverter #{ self .pvinverternumber } Power (/Ac/Power): 0" )
799+ logging .debug ("---" )
0 commit comments