diff --git a/packages/modules/smarthome/idm/smartidm.py b/packages/modules/smarthome/idm/smartidm.py index dc6afd334..1c1163938 100644 --- a/packages/modules/smarthome/idm/smartidm.py +++ b/packages/modules/smarthome/idm/smartidm.py @@ -11,6 +11,8 @@ def __init__(self) -> None: super().__init__() self._device_idmnav = '2' self.device_nummer = 0 + self._device_idmueb = 'UZ' + self._device_maxueb = 0 def updatepar(self, input_param: Dict[str, str]) -> None: super().updatepar(input_param) @@ -18,10 +20,18 @@ def updatepar(self, input_param: Dict[str, str]) -> None: self.device_nummer = int(self._smart_paramadd.get('device_nummer', '0')) for key, value in self._smart_paramadd.items(): + try: + valueint = int(value) + except Exception: + valueint = 0 if (key == 'device_nummer'): pass elif (key == 'device_idmnav'): self._device_idmnav = value + elif (key == 'device_idmueb'): + self._device_idmueb = value + elif (key == 'device_maxueb'): + self._device_maxueb = valueint else: log.info("(" + str(self.device_nummer) + ") " + " IDM überlesen " + key + @@ -33,7 +43,10 @@ def getwatt(self, uberschuss: int, uberschussoffset: int) -> None: argumentList = ['python3', self._prefixpy + 'idm/watt.py', str(self.device_nummer), str(self._device_ip), str(self.devuberschuss), str(self._device_idmnav), - str(self.pvwatt), str(forcesend)] + str(self.pvwatt), + str(self._device_idmueb), + str(self._device_maxueb), + str(forcesend)] try: self.callpro(argumentList) self.answer = self.readret() diff --git a/packages/modules/smarthome/idm/watt.py b/packages/modules/smarthome/idm/watt.py index 5f72c153e..bb4a1c8a0 100644 --- a/packages/modules/smarthome/idm/watt.py +++ b/packages/modules/smarthome/idm/watt.py @@ -13,7 +13,9 @@ uberschuss = int(sys.argv[3]) navvers = str(sys.argv[4]) pvwatt = int(sys.argv[5]) -forcesend = int(sys.argv[6]) +uberschussvz = str(sys.argv[6]) +maxpower = int(sys.argv[7]) +forcesend = int(sys.argv[8]) # forcesend = 0 default time period applies # forcesend = 1 default overwritten send now # forcesend = 9 default overwritten no send @@ -72,12 +74,25 @@ # logik nur schicken bei pvmodus if pvmodus == 1: modbuswrite = 1 - # Nur positiven Uberschuss schicken, nicht aktuelle Leistung neupower = uberschuss - if neupower < 0: - neupower = 0 - if neupower > 40000: - neupower = 40000 + # uberschuss begrenzung ? + if (maxpower > 0): + neupower = maxpower - aktpower + # maximaler überschuss berechnet ? + if (neupower > uberschuss): + neupower = uberschuss + if (uberschussvz == 'UZ'): + # + # + if neupower < 0: + neupower = 0 + if neupower > 65535: + neupower = 65535 + else: + if neupower < -32767: + neupower = -32767 + if neupower > 32767: + neupower = 32767 # wurde IDM gerade ausgeschaltet ? (pvmodus == 99 ?) # dann 0 schicken wenn kein pvmodus mehr # und pv modus ausschalten @@ -105,7 +120,7 @@ if count1 < 3: log.info(" %d ipadr %s ueberschuss %6d Akt Leistung %6d Pv %6d" % (devicenumber, ipadr, uberschuss, aktpower, pvwatt)) - log.info(" %d ipadr %s ueberschuss %6d pvmodus %1d modbusw %1d" + log.info(" %d ipadr %s ueberschuss send %6d pvmodus %1d modbusw %1d" % (devicenumber, ipadr, neupower, pvmodus, modbuswrite)) # modbus write if modbuswrite == 1: diff --git a/runs/mqttsub.py b/runs/mqttsub.py index de123e943..26a7e9a7e 100755 --- a/runs/mqttsub.py +++ b/runs/mqttsub.py @@ -190,6 +190,7 @@ def map_run(message: str, device_number: int, option: str): "device_shusername": create_topic_handler(), "device_shpassword": create_topic_handler(), "device_manwatt": create_topic_handler(int_range_validator(0, 30000)), + "device_maxueb": create_topic_handler(int_range_validator(0, 30000)), "device_measureshusername": create_topic_handler(), "device_measureshpassword": create_topic_handler(), "device_actor": create_topic_handler(), @@ -198,6 +199,7 @@ def map_run(message: str, device_number: int, option: str): "device_measureavmactor": create_topic_handler(), "device_acthortype": create_topic_handler(equals_one_of_validator("M1", "M3", "9s", "9s18")), "device_lambdaueb": create_topic_handler(equals_one_of_validator("UP", "UN", "UZ")), + "device_idmueb": create_topic_handler(equals_one_of_validator("UP", "UZ")), "device_acthorpower": create_topic_handler(int_range_validator(0, 18000)), "device_finishTime": create_topic_handler(regex_match_validator(r"^([01]{0,1}\d|2[0-3]):[0-5]\d$")), "device_onTime": create_topic_handler(regex_match_validator(r"^([01]{0,1}\d|2[0-3]):[0-5]\d$")), diff --git a/web/settings/smarthomeconfig.php b/web/settings/smarthomeconfig.php index 004d779ba..421397a7c 100644 --- a/web/settings/smarthomeconfig.php +++ b/web/settings/smarthomeconfig.php @@ -378,6 +378,26 @@ +
+ + -