From 475a3e1a88f693633c02afebd74dc423ac25977d Mon Sep 17 00:00:00 2001 From: ndrsnhs Date: Tue, 14 Apr 2026 14:24:15 +0200 Subject: [PATCH] add tasmota types --- .../modules/devices/tasmota/tasmota/bat.py | 33 +++++++++++-------- .../devices/tasmota/tasmota/counter.py | 14 ++++++++ .../devices/tasmota/tasmota/inverter.py | 29 +++++++++------- 3 files changed, 52 insertions(+), 24 deletions(-) diff --git a/packages/modules/devices/tasmota/tasmota/bat.py b/packages/modules/devices/tasmota/tasmota/bat.py index 72bd620c94..c40824ec5f 100644 --- a/packages/modules/devices/tasmota/tasmota/bat.py +++ b/packages/modules/devices/tasmota/tasmota/bat.py @@ -48,24 +48,31 @@ def update(self): imported = float(response['StatusSNS']['ENERGY']['Total']*1000) imported, _ = self.peak_filter.check_values(power, imported, None) _, exported = self.sim_counter.sim_count(power) - - bat_state = BatState( - power=power, - currents=currents, - imported=imported, - exported=exported - ) - else: + elif 'Itron' in response['StatusSNS']: power = float(response['StatusSNS']['Itron']['Power']) imported = float(response['StatusSNS']['Itron']['E_in']*1000) exported = float(response['StatusSNS']['Itron']['E_out']*1000) imported, exported = self.peak_filter.check_values(power, imported, exported) + elif 'MT681' in response['StatusSNS']: + power = float(response['StatusSNS']['MT681']['Watt_summe']) + imported = float(response['StatusSNS']['MT681']['Total_in']*1000) + exported = float(response['StatusSNS']['MT681']['Total_out']*1000) + imported, exported = self.peak_filter.check_values(power, imported, exported) + elif 'eBZ' in response['StatusSNS']: + power = float(response['StatusSNS']['eBZ']['Power']) + imported = float(response['StatusSNS']['eBZ']['E_in']*1000) + exported = float(response['StatusSNS']['eBZ']['E_out']*1000) + imported, exported = self.peak_filter.check_values(power, imported, exported) + else: + raise ValueError("Nicht unterstützter Tasmota Zählertyp. Bitte an den Support wenden.") - bat_state = BatState( - power=power, - imported=imported, - exported=exported - ) + bat_state = BatState( + power=power, + imported=imported, + exported=exported + ) + if 'currents' in locals(): + bat_state.currents = currents self.store.set(bat_state) diff --git a/packages/modules/devices/tasmota/tasmota/counter.py b/packages/modules/devices/tasmota/tasmota/counter.py index 3c4a940ef4..92618093bf 100644 --- a/packages/modules/devices/tasmota/tasmota/counter.py +++ b/packages/modules/devices/tasmota/tasmota/counter.py @@ -64,6 +64,20 @@ def update(self): imported = float(response['StatusSNS']['MT681']['Total_in']*1000) exported = float(response['StatusSNS']['MT681']['Total_out']*1000) imported, exported = self.peak_filter.check_values(power, imported, exported) + elif 'eBZ' in response['StatusSNS']: + powers = [0.0, 0.0, 0.0] + power = float(response['StatusSNS']['eBZ']['Power']) + imported = float(response['StatusSNS']['eBZ']['E_in']*1000) + exported = float(response['StatusSNS']['eBZ']['E_out']*1000) + imported, exported = self.peak_filter.check_values(power, imported, exported) + if ( + '36_7_0' in response['StatusSNS']['eBZ'] and + '56_7_0' in response['StatusSNS']['eBZ'] and + '76_7_0' in response['StatusSNS']['eBZ'] + ): + powers = [float(response['StatusSNS']['eBZ']['36_7_0']), + float(response['StatusSNS']['eBZ']['56_7_0']), + float(response['StatusSNS']['eBZ']['76_7_0'])] else: raise ValueError("Nicht unterstützter Tasmota Zählertyp. Bitte an den Support wenden.") diff --git a/packages/modules/devices/tasmota/tasmota/inverter.py b/packages/modules/devices/tasmota/tasmota/inverter.py index 0ab3e2ad8f..117900b7cd 100644 --- a/packages/modules/devices/tasmota/tasmota/inverter.py +++ b/packages/modules/devices/tasmota/tasmota/inverter.py @@ -47,20 +47,27 @@ def update(self): currents[self.__phase-1] = (response['StatusSNS']['ENERGY']['Current']), 0.0, 0.0 self.peak_filter.check_values(power) _, exported = self.sim_counter.sim_count(power) - - inverter_state = InverterState( - power=power, - currents=currents, - exported=exported - ) - else: + elif 'Itron' in response['StatusSNS']: power = float(response['StatusSNS']['Itron']['Power']) * -1 exported = float(response['StatusSNS']['Itron']['E_out']*1000) _, exported = self.peak_filter.check_values(power, None, exported) - inverter_state = InverterState( - power=power, - exported=exported - ) + elif 'MT681' in response['StatusSNS']: + power = float(response['StatusSNS']['MT681']['Watt_summe']) + exported = float(response['StatusSNS']['MT681']['Total_out']*1000) + _, exported = self.peak_filter.check_values(power, None, exported) + elif 'eBZ' in response['StatusSNS']: + power = float(response['StatusSNS']['eBZ']['Power']) + exported = float(response['StatusSNS']['eBZ']['E_out']*1000) + _, exported = self.peak_filter.check_values(power, None, exported) + else: + raise ValueError("Nicht unterstützter Tasmota Zählertyp. Bitte an den Support wenden.") + + inverter_state = InverterState( + power=power, + exported=exported + ) + if 'currents' in locals(): + inverter_state.currents = currents self.store.set(inverter_state)