Anlegen von Readings basierend auf anderen, wechselnden Readings

Begonnen von stobor, 15 Juni 2023, 10:51:54

Vorheriges Thema - Nächstes Thema

stobor

Unser Wechselrichter liefert für jeden Monat ein Reading, welches die Produktionsdaten eines Monats beinhaltet. Bspw:
  • JAN_PV_Energy_Yield
  • FEB_PV_Energy_Yield
  • ...

Gibt es eine Möglichkeit, zwei weitere Readings hinzuzufügen, die immer die Daten des aktuellen und letzten Monats beinhalten?
Wie legt man solche Readings an und konfiguriert sie, dass sie automatisch die Werte des aktuellen bzw. Vor-Monats übernehmen?

Danke für eure Hilfe
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

betateilchen

#1
Entweder userReadings in den devices anlegen oder die gewünschten Werte einfach regelmäßig in das DbLog schreiben, das funktioniert sogar ohne in device vorhandenen readings. Meistens braucht man solche Werte ja nur für Auswertungen, deshalb reicht es i.d.R. aus, auf diese Werte im Log zugreifen zu können.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

stobor

Wie lege ich denn aber userReadings an? Wie bekomme ich da Werte aus anderen Attributen hinein, deren Namen sich ändern?
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

betateilchen

Da gibt es ungefähr 728 Möglichkeiten. Zuerst könntest Du prüfen, ob Du nicht mit statistics schon weiterkommst, da werden Werte automatisch anhand verschiedener Zeiträume kumuliert.

Alternativ könntest Du per at um ultimo einfach den Wert des laufenden Monats automatisch in das reading für den Vormonat übertragen - der Wert verändert sich ja nicht mehr. Den Wert für den laufenden Monat zu ermitteln, dürfte vermutlich die leichteste Übung sein - den musst Du doch nur aufaddieren.

Vermutlich denkst Du einfach viel zu kompliziert.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

stobor

Das Device hält für jeden Monat ein eigenes Attribut vor. Ich würde mir im Frontend immer die Werte des laufenden und vorherigen Monats anzeigen lassen. Dafür muss ich also immer auf verschiedene Attribute zugreifen:
  • im Juni wären das die Attribute JUN_PV_Energy_Yield bzw. MAI_PV_Energy_Yield
  • im Mai wären das MAI_PV_Energy_Yield bzw. APR_PV_Energy_Yield
  • ...
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

betateilchen

#5
Schreibe bitte nicht immer von Attributen, wenn Du eigentlich Readings meinst.

Das Prinzip habe ich schon verstanden. Aber Du scheinst die Einfachheit Deiner Anforderung noch nicht zu erkennen:

  • Im Juni ist 30 Tage lang der Wert des Vormonats unverändert der kumulierte Wert des Monats Mai vom 31.05. Also kannst Du am 31.05. um 23:59 Uhr den Wert des Monats Mai einfach in das reading "vormonat" übernehmen. Von 23:59 bis 24:00 wird sich der PV Ertrag bei Dunkelheit nicht mehr wesentlich verändern.
  • Deine Aufgabe ist es also nur, täglich den Wert des laufenden Monats zu ermitteln und falls erforderlich in ein reading "laufendermonat" zu schreiben.

Zu 1:

define at_transfer_month at *{at_ultimo()} setreading <pv_device> vormonat [<pv_device>:laufendermonat]; setreading <pv_device> laufendermonat 0
Zu 2:

define at_transfer_day at *23:55 setreading <pv_device> laufendermonat <WertDesLaufendenMonats>
Wo ist jetzt genau Dein Problem?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

stobor

#6
Das Problem ist, dass sich der Name des laufenden Monats immer ändert. Ich muss also irgendwie auf sich ändernde Reading-Namen zugreifen.

Oder sollte ich hier in der myUtils eine Prozedur schreiben, die einfach stumpf den aktuellen Monat ermittelt und dass bspw. je nachaktuellem Monat eine andere Zuweisung ausführt (also auscodieren für jeden Monat)?
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

betateilchen

Dein Problem verstehe ich immer noch nicht. Wo ist denn die Schwierigkeit, den Namen eines readings zu ermitteln?

Bitte poste mal ein komplettes "list -r" des devices.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: stobor am 15 Juni 2023, 15:52:39dass sich der Name des laufenden Monats immer ändert

Der Name des laufenden Monats ändert sich höchstwahrscheinlich nur einmal pro Monat...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

stobor

Den/Die Namen kenne die ch natürlich. Die ch dachte, man könnte einen etwas generischeren Ansatz verfolgen.
Hier das Ergebnis des list -r:
define SH10rt_Fast ModbusAttr 1 10 192.168.178.26:502 TCP
attr SH10rt_Fast userattr obj-i13000-polldelay obj-i5010-polldelay obj-i5011-polldelay obj-i5012-polldelay obj-i5013-polldelay obj-i5018-polldelay obj-i5019-polldelay obj-i5020-polldelay
attr SH10rt_Fast dev-type-S16-unpack s>
attr SH10rt_Fast dev-type-S32-len 2
attr SH10rt_Fast dev-type-S32-revRegs 1
attr SH10rt_Fast dev-type-S32-unpack l>
attr SH10rt_Fast dev-type-U32-len 2
attr SH10rt_Fast dev-type-U32-revRegs 1
attr SH10rt_Fast dev-type-U32-unpack N
attr SH10rt_Fast event-on-change-reading .*
attr SH10rt_Fast icon inverter
attr SH10rt_Fast obj-h12999-map 170:Maintenancen, 0:No_Opperation
attr SH10rt_Fast obj-h12999-poll 1
attr SH10rt_Fast obj-h12999-polldelay x240
attr SH10rt_Fast obj-h12999-reading Battery_Maintenance
attr SH10rt_Fast obj-h12999-set 1
attr SH10rt_Fast obj-h13001-map 0:Timing_Mode, 1:On_Off_Mode, 2:Optimized_Mode
attr SH10rt_Fast obj-h13001-poll 1
attr SH10rt_Fast obj-h13001-polldelay x240
attr SH10rt_Fast obj-h13001-reading Load_1_Adjustment_Mode
attr SH10rt_Fast obj-h13001-set 1
attr SH10rt_Fast obj-h13049-map 0:Self-consumption, 1:Forced, 2:External EMS
attr SH10rt_Fast obj-h13049-poll 1
attr SH10rt_Fast obj-h13049-polldelay x240
attr SH10rt_Fast obj-h13049-reading EMS_Mode_Selection
attr SH10rt_Fast obj-h13050-map 170:Charge, 187:Discharge, 204:Stop
attr SH10rt_Fast obj-h13050-poll 1
attr SH10rt_Fast obj-h13050-polldelay x240
attr SH10rt_Fast obj-h13050-reading Battery_Charge_Discharge_Comand
attr SH10rt_Fast obj-h13050-set 1
attr SH10rt_Fast obj-h13051-poll 1
attr SH10rt_Fast obj-h13051-polldelay x3600
attr SH10rt_Fast obj-h13051-reading Battery_Charge_Discharge_Power
attr SH10rt_Fast obj-h13051-set 1
attr SH10rt_Fast obj-h13054-poll 1
attr SH10rt_Fast obj-h13054-polldelay x3600
attr SH10rt_Fast obj-h13054-reading Battery_Type
attr SH10rt_Fast obj-h13057-expr $val / 10
attr SH10rt_Fast obj-h13057-poll 1
attr SH10rt_Fast obj-h13057-polldelay x3600
attr SH10rt_Fast obj-h13057-reading Battery_Max_SOC
attr SH10rt_Fast obj-h13057-set 1
attr SH10rt_Fast obj-h13057-setexpr $val * 10
attr SH10rt_Fast obj-h13058-expr $val / 10
attr SH10rt_Fast obj-h13058-poll 1
attr SH10rt_Fast obj-h13058-polldelay x3600
attr SH10rt_Fast obj-h13058-reading Battery_Min_SOC
attr SH10rt_Fast obj-h13058-set 1
attr SH10rt_Fast obj-h13058-setexpr $val * 10
attr SH10rt_Fast obj-h13073-poll 1
attr SH10rt_Fast obj-h13073-polldelay x3600
attr SH10rt_Fast obj-h13073-reading Export_Power_Limitation
attr SH10rt_Fast obj-h13073-set 1
attr SH10rt_Fast obj-h13074-map 170:Enable, 85:Disable
attr SH10rt_Fast obj-h13074-poll 1
attr SH10rt_Fast obj-h13074-polldelay x3600
attr SH10rt_Fast obj-h13074-reading Off_Grid_Option
attr SH10rt_Fast obj-h13074-set 1
attr SH10rt_Fast obj-h13083-poll 1
attr SH10rt_Fast obj-h13083-polldelay x3600
attr SH10rt_Fast obj-h13083-reading Battery_Start_Charging_Power
attr SH10rt_Fast obj-h13083-set 1
attr SH10rt_Fast obj-h13084-poll 1
attr SH10rt_Fast obj-h13084-polldelay x3600
attr SH10rt_Fast obj-h13084-reading Battery_Start_Discharging_Power
attr SH10rt_Fast obj-h13084-set 1
attr SH10rt_Fast obj-h13099-poll 1
attr SH10rt_Fast obj-h13099-polldelay x3600
attr SH10rt_Fast obj-h13099-reading Battery_Reserved_Backup_SOC
attr SH10rt_Fast obj-h13099-set 1
attr SH10rt_Fast obj-h4999-poll 1
attr SH10rt_Fast obj-h4999-polldelay x3600
attr SH10rt_Fast obj-h4999-reading System_Clock_Vear
attr SH10rt_Fast obj-h4999-set 1
attr SH10rt_Fast obj-h5000-poll 1
attr SH10rt_Fast obj-h5000-polldelay x3600
attr SH10rt_Fast obj-h5000-reading System_Clock_Month
attr SH10rt_Fast obj-h5001-poll 1
attr SH10rt_Fast obj-h5001-polldelay x3600
attr SH10rt_Fast obj-h5001-reading System_Clock_Day
attr SH10rt_Fast obj-h5001-set 1
attr SH10rt_Fast obj-h5002-poll 1
attr SH10rt_Fast obj-h5002-polldelay x720
attr SH10rt_Fast obj-h5002-reading System_Clock_Hour
attr SH10rt_Fast obj-h5002-set 1
attr SH10rt_Fast obj-h5003-poll 1
attr SH10rt_Fast obj-h5003-polldelay x12
attr SH10rt_Fast obj-h5003-reading System_Clock_Minute
attr SH10rt_Fast obj-h5003-set 1
attr SH10rt_Fast obj-i12999-poll 1
attr SH10rt_Fast obj-i12999-polldelay x12
attr SH10rt_Fast obj-i12999-reading System_State
attr SH10rt_Fast obj-i13000-poll 1
attr SH10rt_Fast obj-i13000-reading Running_State
attr SH10rt_Fast obj-i13001-expr $val / 10
attr SH10rt_Fast obj-i13001-poll 1
attr SH10rt_Fast obj-i13001-polldelay x60
attr SH10rt_Fast obj-i13001-reading Daily_PV_Generation
attr SH10rt_Fast obj-i13002-expr $val / 10
attr SH10rt_Fast obj-i13002-poll 1
attr SH10rt_Fast obj-i13002-polldelay x225
attr SH10rt_Fast obj-i13002-reading Total_PV_Generation
attr SH10rt_Fast obj-i13002-type U32
attr SH10rt_Fast obj-i13004-expr $val / 10
attr SH10rt_Fast obj-i13004-poll 1
attr SH10rt_Fast obj-i13004-polldelay x60
attr SH10rt_Fast obj-i13004-reading Daily_Export_Power_PV
attr SH10rt_Fast obj-i13005-expr $val / 10
attr SH10rt_Fast obj-i13005-poll 1
attr SH10rt_Fast obj-i13005-polldelay x240Daily
attr SH10rt_Fast obj-i13005-reading Total_Export_Energy
attr SH10rt_Fast obj-i13005-type U32
attr SH10rt_Fast obj-i13007-poll 1
attr SH10rt_Fast obj-i13007-reading Load_Power
attr SH10rt_Fast obj-i13007-type S32
attr SH10rt_Fast obj-i13009-poll 1
attr SH10rt_Fast obj-i13009-reading Export_Power
attr SH10rt_Fast obj-i13009-type S32
attr SH10rt_Fast obj-i13011-expr $val / 10
attr SH10rt_Fast obj-i13011-poll 1
attr SH10rt_Fast obj-i13011-polldelay x60
attr SH10rt_Fast obj-i13011-reading Daily_Battery_Charge_Energy_PV
attr SH10rt_Fast obj-i13012-expr $val / 10
attr SH10rt_Fast obj-i13012-poll 1
attr SH10rt_Fast obj-i13012-polldelay x240
attr SH10rt_Fast obj-i13012-reading Total_Battery_Charge_Energy_PV
attr SH10rt_Fast obj-i13012-type U32
attr SH10rt_Fast obj-i13014-expr $val / 10
attr SH10rt_Fast obj-i13014-poll 1
attr SH10rt_Fast obj-i13014-polldelay x3600
attr SH10rt_Fast obj-i13014-reading CO2_Reduction
attr SH10rt_Fast obj-i13014-type U32
attr SH10rt_Fast obj-i13016-expr $val / 10
attr SH10rt_Fast obj-i13016-poll 1
attr SH10rt_Fast obj-i13016-polldelay x60
attr SH10rt_Fast obj-i13016-reading Daily_direct_Energy_Consumption
attr SH10rt_Fast obj-i13017-expr $val / 10
attr SH10rt_Fast obj-i13017-poll 1
attr SH10rt_Fast obj-i13017-polldelay x240
attr SH10rt_Fast obj-i13017-reading Total_direct_Energy_Consumption
attr SH10rt_Fast obj-i13017-type U32
attr SH10rt_Fast obj-i13019-expr $val / 10
attr SH10rt_Fast obj-i13019-poll 1
attr SH10rt_Fast obj-i13019-reading Battery_Voltage
attr SH10rt_Fast obj-i13020-expr $val / 10
attr SH10rt_Fast obj-i13020-poll 1
attr SH10rt_Fast obj-i13020-reading Battery_Current
attr SH10rt_Fast obj-i13021-poll 1
attr SH10rt_Fast obj-i13021-reading Battery_Power
attr SH10rt_Fast obj-i13022-expr $val / 10
attr SH10rt_Fast obj-i13022-poll 1
attr SH10rt_Fast obj-i13022-reading Battery_Level
attr SH10rt_Fast obj-i13023-expr $val / 10
attr SH10rt_Fast obj-i13023-poll 1
attr SH10rt_Fast obj-i13023-polldelay x240
attr SH10rt_Fast obj-i13023-reading Battery_State_Of_Healthy
attr SH10rt_Fast obj-i13024-expr $val / 10
attr SH10rt_Fast obj-i13024-poll 1
attr SH10rt_Fast obj-i13024-polldelay x12
attr SH10rt_Fast obj-i13024-reading Battery_Temperature
attr SH10rt_Fast obj-i13024-type S16
attr SH10rt_Fast obj-i13025-expr $val / 10
attr SH10rt_Fast obj-i13025-poll 1
attr SH10rt_Fast obj-i13025-polldelay x60
attr SH10rt_Fast obj-i13025-reading Daily_Battery_Discharge_Energy
attr SH10rt_Fast obj-i13026-expr $val / 10
attr SH10rt_Fast obj-i13026-poll 1
attr SH10rt_Fast obj-i13026-polldelay x480
attr SH10rt_Fast obj-i13026-reading Total_Battery_Discharge_Energy
attr SH10rt_Fast obj-i13026-type U32
attr SH10rt_Fast obj-i13028-expr $val / 10
attr SH10rt_Fast obj-i13028-poll 1
attr SH10rt_Fast obj-i13028-polldelay x60
attr SH10rt_Fast obj-i13028-reading Self_Consumtion_of_Today
attr SH10rt_Fast obj-i13029-poll 1
attr SH10rt_Fast obj-i13029-polldelay x12
attr SH10rt_Fast obj-i13029-reading Grid_State
attr SH10rt_Fast obj-i13030-expr $val / 10
attr SH10rt_Fast obj-i13030-poll 1
attr SH10rt_Fast obj-i13030-reading L1_Current
attr SH10rt_Fast obj-i13030-type S16
attr SH10rt_Fast obj-i13031-expr $val / 10
attr SH10rt_Fast obj-i13031-poll 1
attr SH10rt_Fast obj-i13031-reading L2_Current
attr SH10rt_Fast obj-i13031-type S16
attr SH10rt_Fast obj-i13032-expr $val / 10
attr SH10rt_Fast obj-i13032-poll 1
attr SH10rt_Fast obj-i13032-reading L3_Current
attr SH10rt_Fast obj-i13032-type S16
attr SH10rt_Fast obj-i13033-poll 1
attr SH10rt_Fast obj-i13033-reading Total_Active_Power
attr SH10rt_Fast obj-i13033-type S32
attr SH10rt_Fast obj-i13035-expr $val / 10
attr SH10rt_Fast obj-i13035-poll 1
attr SH10rt_Fast obj-i13035-polldelay x60
attr SH10rt_Fast obj-i13035-reading Daily_Import_Energy
attr SH10rt_Fast obj-i13036-expr $val / 10
attr SH10rt_Fast obj-i13036-poll 1
attr SH10rt_Fast obj-i13036-polldelay x480
attr SH10rt_Fast obj-i13036-reading Total_Import_Energy
attr SH10rt_Fast obj-i13036-type U32
attr SH10rt_Fast obj-i13038-expr $val / 10
attr SH10rt_Fast obj-i13038-poll 1
attr SH10rt_Fast obj-i13038-polldelay x3600
attr SH10rt_Fast obj-i13038-reading Battery_Capacity
attr SH10rt_Fast obj-i13039-expr $val / 10
attr SH10rt_Fast obj-i13039-poll 1
attr SH10rt_Fast obj-i13039-polldelay x60
attr SH10rt_Fast obj-i13039-reading Daily_Battery_Charge_Energie
attr SH10rt_Fast obj-i13040-expr $val / 10
attr SH10rt_Fast obj-i13040-poll 1
attr SH10rt_Fast obj-i13040-polldelay x480
attr SH10rt_Fast obj-i13040-reading Total_Battery_Charge_Energie
attr SH10rt_Fast obj-i13040-type U32
attr SH10rt_Fast obj-i13044-expr $val / 10
attr SH10rt_Fast obj-i13044-poll 1
attr SH10rt_Fast obj-i13044-polldelay x12
attr SH10rt_Fast obj-i13044-reading Daily_Export_Energy
attr SH10rt_Fast obj-i13045-expr $val / 10
attr SH10rt_Fast obj-i13045-poll 1
attr SH10rt_Fast obj-i13045-polldelay x12
attr SH10rt_Fast obj-i13045-reading Total_Export_Energy
attr SH10rt_Fast obj-i13045-type U32
attr SH10rt_Fast obj-i13049-poll 1
attr SH10rt_Fast obj-i13049-polldelay x12
attr SH10rt_Fast obj-i13049-reading Inverter_Alarm
attr SH10rt_Fast obj-i13049-type U32
attr SH10rt_Fast obj-i13051-poll 1
attr SH10rt_Fast obj-i13051-polldelay x12
attr SH10rt_Fast obj-i13051-reading Grid_Side_Fault
attr SH10rt_Fast obj-i13051-type U32
attr SH10rt_Fast obj-i13053-poll 1
attr SH10rt_Fast obj-i13053-polldelay x12
attr SH10rt_Fast obj-i13053-reading System_Fault_1
attr SH10rt_Fast obj-i13053-type U32
attr SH10rt_Fast obj-i13055-poll 1
attr SH10rt_Fast obj-i13055-polldelay x12
attr SH10rt_Fast obj-i13055-reading System_Fault_2
attr SH10rt_Fast obj-i13055-type U32
attr SH10rt_Fast obj-i13057-poll 1
attr SH10rt_Fast obj-i13057-polldelay x12
attr SH10rt_Fast obj-i13057-reading DC_Side_Fault
attr SH10rt_Fast obj-i13057-type U32
attr SH10rt_Fast obj-i13059-poll 1
attr SH10rt_Fast obj-i13059-polldelay x12
attr SH10rt_Fast obj-i13059-reading Permanent_Fault
attr SH10rt_Fast obj-i13059-type U32
attr SH10rt_Fast obj-i13065-poll 1
attr SH10rt_Fast obj-i13065-polldelay x12
attr SH10rt_Fast obj-i13065-reading Battery_Fault
attr SH10rt_Fast obj-i13065-type U32
attr SH10rt_Fast obj-i13067-poll 1
attr SH10rt_Fast obj-i13067-polldelay x12
attr SH10rt_Fast obj-i13067-reading Battery_Alarm
attr SH10rt_Fast obj-i13067-type U32
attr SH10rt_Fast obj-i13069-poll 1
attr SH10rt_Fast obj-i13069-polldelay x12
attr SH10rt_Fast obj-i13069-reading BMS_Alarm
attr SH10rt_Fast obj-i13069-type U32
attr SH10rt_Fast obj-i13071-poll 1
attr SH10rt_Fast obj-i13071-polldelay x12
attr SH10rt_Fast obj-i13071-reading BMS_Protection
attr SH10rt_Fast obj-i13071-type U32
attr SH10rt_Fast obj-i13073-poll 1
attr SH10rt_Fast obj-i13073-polldelay x12
attr SH10rt_Fast obj-i13073-reading BMS_Fault_1
attr SH10rt_Fast obj-i13073-type U32
attr SH10rt_Fast obj-i13075-poll 1
attr SH10rt_Fast obj-i13075-polldelay x12
attr SH10rt_Fast obj-i13075-reading BMS_Fault_2
attr SH10rt_Fast obj-i13075-type U32
attr SH10rt_Fast obj-i13077-poll 1
attr SH10rt_Fast obj-i13077-polldelay x12
attr SH10rt_Fast obj-i13077-reading BMS_Alarm_2
attr SH10rt_Fast obj-i13077-type U32
attr SH10rt_Fast obj-i13099-poll 1
attr SH10rt_Fast obj-i13099-polldelay x12
attr SH10rt_Fast obj-i13099-reading BMS_Status
attr SH10rt_Fast obj-i13106-poll 1
attr SH10rt_Fast obj-i13106-polldelay x12
attr SH10rt_Fast obj-i13106-reading Bat_SOC
attr SH10rt_Fast obj-i13107-poll 1
attr SH10rt_Fast obj-i13107-polldelay x12
attr SH10rt_Fast obj-i13107-reading Bat_SOH
attr SH10rt_Fast obj-i4949-poll 1
attr SH10rt_Fast obj-i4949-polldelay x3600
attr SH10rt_Fast obj-i4949-reading Protocol_Nummer
attr SH10rt_Fast obj-i4949-type U32
attr SH10rt_Fast obj-i4951-poll 1
attr SH10rt_Fast obj-i4951-polldelay x3600
attr SH10rt_Fast obj-i4951-reading Protocol_Version
attr SH10rt_Fast obj-i4951-type U32
attr SH10rt_Fast obj-i4999-poll 1
attr SH10rt_Fast obj-i4999-polldelay x3600
attr SH10rt_Fast obj-i4999-reading Device_Type
attr SH10rt_Fast obj-i5000-poll 1
attr SH10rt_Fast obj-i5000-polldelay x3600
attr SH10rt_Fast obj-i5000-reading Nominal_Output_Power
attr SH10rt_Fast obj-i5001-poll 1
attr SH10rt_Fast obj-i5001-polldelay x3600
attr SH10rt_Fast obj-i5001-reading Output_Type
attr SH10rt_Fast obj-i5002-expr $val / 10000
attr SH10rt_Fast obj-i5002-poll 1
attr SH10rt_Fast obj-i5002-polldelay x240
attr SH10rt_Fast obj-i5002-reading Daily_Output_Energy
attr SH10rt_Fast obj-i5003-poll 1
attr SH10rt_Fast obj-i5003-polldelay x240
attr SH10rt_Fast obj-i5003-reading Total_Output_Energy
attr SH10rt_Fast obj-i5003-type U32
attr SH10rt_Fast obj-i5007-expr $val / 10
attr SH10rt_Fast obj-i5007-poll 1
attr SH10rt_Fast obj-i5007-polldelay x240
attr SH10rt_Fast obj-i5007-reading Inside_Temperature
attr SH10rt_Fast obj-i5007-type S16
attr SH10rt_Fast obj-i5010-expr $val / 10
attr SH10rt_Fast obj-i5010-poll 1
attr SH10rt_Fast obj-i5010-reading MPPT_1_Voltage
attr SH10rt_Fast obj-i5011-expr $val / 10
attr SH10rt_Fast obj-i5011-poll 1
attr SH10rt_Fast obj-i5011-reading MPPT_1_Current
attr SH10rt_Fast obj-i5012-expr $val / 10
attr SH10rt_Fast obj-i5012-poll 1
attr SH10rt_Fast obj-i5012-reading MPPT_2_Voltage
attr SH10rt_Fast obj-i5013-expr $val / 10
attr SH10rt_Fast obj-i5013-poll 1
attr SH10rt_Fast obj-i5013-reading MPPT_2_Current
attr SH10rt_Fast obj-i5016-poll 1
attr SH10rt_Fast obj-i5016-reading Total_DC_Power
attr SH10rt_Fast obj-i5016-type U32
attr SH10rt_Fast obj-i5018-expr $val / 10
attr SH10rt_Fast obj-i5018-poll 1
attr SH10rt_Fast obj-i5018-reading L1_Voltage
attr SH10rt_Fast obj-i5019-expr $val / 10
attr SH10rt_Fast obj-i5019-poll 1
attr SH10rt_Fast obj-i5019-reading L2_Voltage
attr SH10rt_Fast obj-i5020-expr $val / 10
attr SH10rt_Fast obj-i5020-poll 1
attr SH10rt_Fast obj-i5020-reading L3_Voltage
attr SH10rt_Fast obj-i5032-poll 1
attr SH10rt_Fast obj-i5032-polldelay x12
attr SH10rt_Fast obj-i5032-reading Reactive_Power
attr SH10rt_Fast obj-i5032-type S32
attr SH10rt_Fast obj-i5034-expr $val / 1000
attr SH10rt_Fast obj-i5034-poll 1
attr SH10rt_Fast obj-i5034-polldelay x240
attr SH10rt_Fast obj-i5034-reading Power_Factor
attr SH10rt_Fast obj-i5034-type S16
attr SH10rt_Fast obj-i5035-expr $val / 10
attr SH10rt_Fast obj-i5035-poll 1
attr SH10rt_Fast obj-i5035-polldelay x12
attr SH10rt_Fast obj-i5035-reading Grid_Frequency
attr SH10rt_Fast obj-i5621-expr $val * 10
attr SH10rt_Fast obj-i5621-poll 1
attr SH10rt_Fast obj-i5621-polldelay x3600
attr SH10rt_Fast obj-i5621-reading Export_Limit_Min
attr SH10rt_Fast obj-i5622-expr $val * 10
attr SH10rt_Fast obj-i5622-poll 1
attr SH10rt_Fast obj-i5622-polldelay x3600
attr SH10rt_Fast obj-i5622-reading Export_Limit_Max
attr SH10rt_Fast obj-i5634-poll 1
attr SH10rt_Fast obj-i5634-polldelay x3600
attr SH10rt_Fast obj-i5634-reading Max_Charging_Current
attr SH10rt_Fast obj-i5635-poll 1
attr SH10rt_Fast obj-i5635-polldelay x3600
attr SH10rt_Fast obj-i5635-reading Max_Discharging_Current
attr SH10rt_Fast obj-i6226-expr $val / 10
attr SH10rt_Fast obj-i6226-poll 1
attr SH10rt_Fast obj-i6226-polldelay x3600
attr SH10rt_Fast obj-i6226-reading JAN_PV_Energy_Yield
attr SH10rt_Fast obj-i6227-expr $val / 10
attr SH10rt_Fast obj-i6227-poll 1
attr SH10rt_Fast obj-i6227-polldelay x3600
attr SH10rt_Fast obj-i6227-reading FEB_PV_Energy_Yield
attr SH10rt_Fast obj-i6228-expr $val / 10
attr SH10rt_Fast obj-i6228-poll 1
attr SH10rt_Fast obj-i6228-polldelay x3600
attr SH10rt_Fast obj-i6228-reading MRZ_PV_Energy_Yield
attr SH10rt_Fast obj-i6229-expr $val / 10
attr SH10rt_Fast obj-i6229-poll 1
attr SH10rt_Fast obj-i6229-polldelay x3600
attr SH10rt_Fast obj-i6229-reading APR_PV_Energy_Yield
attr SH10rt_Fast obj-i6230-expr $val / 10
attr SH10rt_Fast obj-i6230-poll 1
attr SH10rt_Fast obj-i6230-polldelay x3600
attr SH10rt_Fast obj-i6230-reading MAI_PV_Energy_Yield
attr SH10rt_Fast obj-i6231-expr $val / 10
attr SH10rt_Fast obj-i6231-poll 1
attr SH10rt_Fast obj-i6231-polldelay x3600
attr SH10rt_Fast obj-i6231-reading JUN_PV_Energy_Yield
attr SH10rt_Fast obj-i6232-expr $val / 10
attr SH10rt_Fast obj-i6232-poll 1Daily
attr SH10rt_Fast obj-i6232-polldelay x3600
attr SH10rt_Fast obj-i6232-reading JUL_PV_Energy_Yield
attr SH10rt_Fast obj-i6233-expr $val / 10
attr SH10rt_Fast obj-i6233-poll 1
attr SH10rt_Fast obj-i6233-polldelay x3600
attr SH10rt_Fast obj-i6233-reading AUG_PV_Energy_Yield
attr SH10rt_Fast obj-i6234-expr $val / 10
attr SH10rt_Fast obj-i6234-poll 1
attr SH10rt_Fast obj-i6234-polldelay x3600
attr SH10rt_Fast obj-i6234-reading SEPT_PV_Energy_Yield
attr SH10rt_Fast obj-i6235-expr $val / 10
attr SH10rt_Fast obj-i6235-poll 1
attr SH10rt_Fast obj-i6235-polldelay x3600
attr SH10rt_Fast obj-i6235-reading OKT_PV_Energy_Yield
attr SH10rt_Fast obj-i6236-expr $val / 10
attr SH10rt_Fast obj-i6236-poll 1
attr SH10rt_Fast obj-i6236-polldelay x3600
attr SH10rt_Fast obj-i6236-reading NOV_PV_Energy_Yield
attr SH10rt_Fast obj-i6237-expr $val / 10
attr SH10rt_Fast obj-i6237-poll 1
attr SH10rt_Fast obj-i6237-polldelay x3600
attr SH10rt_Fast obj-i6237-reading DEZ_PV_Energy_Yield
attr SH10rt_Fast room Aussen,ModBus,PV-Anlage
attr SH10rt_Fast userReadings Power_MPPT_1 {sprintf("%.1f", (ReadingsNum ("SH10rt_Fast","MPPT_1_Voltage", 0) * ReadingsNum ("SH10rt_Fast","MPPT_1_Current", 0)));;},\
Power_MPPT_2 {sprintf("%.1f", (ReadingsNum ("SH10rt_Fast","MPPT_2_Voltage", 0) * ReadingsNum ("SH10rt_Fast","MPPT_2_Current", 0)));;},\
Complete_DC_Power {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Power_MPPT_1", 0) + ReadingsNum ("SH10rt_Fast","Power_MPPT_2", 0)));;},\
L1_Power {sprintf("%.1f", (ReadingsNum ("SH10rt_Fast","L1_Current", 0) * ReadingsNum ("SH10rt_Fast","L1_Voltage", 0)));;},\
L2_Power {sprintf("%.1f", (ReadingsNum ("SH10rt_Fast","L2_Current", 0) * ReadingsNum ("SH10rt_Fast","L2_Voltage", 0)));;},\
L3_Power {sprintf("%.1f", (ReadingsNum ("SH10rt_Fast","L3_Current", 0) * ReadingsNum ("SH10rt_Fast","L3_Voltage", 0)));;},\
Monthly_Yield {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_PV_Generation", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Yield_alt", 0)));;},\
Monthly_Import_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_Import_Energy", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Import_Energy_alt", 0)));;},\
Monthly_Export_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_Export_Energy", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Export_Energy_alt", 0)));;},\
Monthly_PV_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Monthly_Yield", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Export_Energy", 0)));;},\
Monthly_Gesamt_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Monthly_Import_Energy", 0) + ReadingsNum ("SH10rt_Fast","Monthly_PV_Energy", 0)));;},\
Monthly_Battery_Discharge_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_Battery_Discharge_Energy", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Battery_Discharge_Energy_alt", 0)));;} ,\
Monthly_Battery_Charge_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_Battery_Charge_Energie", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Battery_Charge_Energie_alt", 0)));;} ,\
Yearly_Yield {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_PV_Generation", 0) - ReadingsNum ("SH10rt_Fast","Yearly_Yield_alt", 0)));;},\
Yearly_Export_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_Export_Energy", 0) - ReadingsNum ("SH10rt_Fast","Yearly_Export_Energy_alt", 0)));;},\
Yearly_Import_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_Import_Energy", 0) - ReadingsNum ("SH10rt_Fast","Yearly_Import_Energy_alt", 0)));;},\
Yearly_PV_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Yearly_Yield", 0) - ReadingsNum ("SH10rt_Fast","Yearly_Export_Energy", 0)));;},\
Yearly_Gesamt_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Yearly_Import_Energy", 0) + ReadingsNum ("SH10rt_Fast","Yearly_PV_Energy", 0)));;},\
Total_PV_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_PV_Generation", 0) - ReadingsNum ("SH10rt_Fast","Total_Export_Energy", 0)));;},\
Complete_Total_Consumption {sprintf("%.1f", (ReadingsNum ("SH10rt_Fast","Total_Import_Energy", 0) + ReadingsNum ("SH10rt_Fast","Total_PV_Energy", 0)));;},\
Complete_Total_Kosten_KWh {sprintf("%.3f", (ReadingsNum ("SH10rt_Fast","Complete_Total_Kosten", 0) / ReadingsNum ("SH10rt_Fast","Complete_Total_Grid_Consumption", 0) * 100));;},\
Batterie_Nutzkapazitaet {sprintf("%.1f", (ReadingsNum ("SH10rt_Fast","Battery_Capacity", 0) * ReadingsNum ("SH10rt_Fast","Battery_Level", 0)  / 100));;},\
Batterie_Energie {sprintf("%.1f", (ReadingsNum ("SH10rt_Fast","Battery_Nettokapazitaet", 0) - ReadingsNum ("SH10rt_Fast","Batterie_Nutzkapazitaet", 0)  / 100));;},\
Running_State_Bit_0 {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Running_State", 0) & 1));;},\
Running_State_Bit_1 {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Running_State", 0) & 2));;},\
Running_State_Bit_2 {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Running_State", 0) & 4));;},\
Running_State_Bit_3 {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Running_State", 0) & 8));;},\
Running_State_Bit_4 {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Running_State", 0) & 16));;},\
Running_State_Bit_5 {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Running_State", 0) & 32));;},\
Running_State_Bit_6 {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Running_State", 0) & 64));;},\
Running_State_Bit_7 {sprintf("%.0f", (ReadingsNum ("SH10rt_Fast","Running_State", 0) & 128));;},\
Data4FileLog {"Total_DC_Power: ". ReadingsNum("SH10rt_Fast","Total_DC_Power", 0,0) ."  Load_Power: ". ReadingsNum("SH10rt_Fast","Load_Power", 0,0) ."  Export_Power: ". ReadingsNum("SH10rt_Fast","Export_Power", 0,0) ."  Battery_Power: " .sprintf("%s%.1f", (ReadingsNum("SH10rt_Fast","Running_State_Bit_2",0,1) != 0) ? (ReadingsNum("SH10rt_Fast","Running_State_Bit_2",0) == 4) ? "-" : "" :"",ReadingsNum("SH10rt_Fast","Battery_Power",0,0)) ."  Battery_Level: ". ReadingsNum("SH10rt_Fast","Battery_Level", 0,0)},\
ProduktionVormonat {},\
ProduktionAktuellerMonat{}\
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

betateilchen

#10
Zitat von: stobor am 15 Juni 2023, 10:51:54Gibt es eine Möglichkeit, zwei weitere Readings hinzuzufügen, die immer die Daten des aktuellen und letzten Monats beinhalten?
Wie legt man solche Readings an und konfiguriert sie, dass sie automatisch die Werte des aktuellen bzw. Vor-Monats übernehmen?

Zitat von: stobor am 15 Juni 2023, 18:41:00Die ch dachte, man könnte einen etwas generischeren Ansatz verfolgen.

define at_transfer_day at *23:55 { my $curmon=uc(strftime("%b",localtime))."_PV_Energy_Yield";; fhem("setreading SH10rt_Fast laufendermonat ".ReadingsNum("SH10rt_Fast",$curmon,0)) }

define at_transfer_month at *{at_ultimo()} setreading SH10rt_Fast vormonat [SH10rt_Fast:laufendermonat]; setreading SH10rt_Fast laufendermonat 0

Generisch genug?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Torxgewinde

Hallo,
Nur mit UserReadings sollte es wie folgt klappen:

NOW_PV_Energy_Yield {
    my @month_names = qw(JAN FEB MRZ APR MAI JUN JUL AUG SEPT OKT NOV DEZ);
    my $month = (localtime())[4];
    my $reading_name = $month_names[$month]."_PV_Energy_Yield";
    return ReadingsVal($name, $reading_name, "???");
},
PREV_PV_Energy_Yield {
    my @month_names = qw(JAN FEB MRZ APR MAI JUN JUL AUG SEPT OKT NOV DEZ);
    my $month = ((localtime())[4] - 1) % 12;
    my $reading_name = $month_names[$month]."_PV_Energy_Yield";
    return ReadingsVal($name, $reading_name, "???");
}


Hier das ganze Dummy-Device womit ich es getestet habe. Ich habe den Wechselrichter ja nicht, deswegen habe ich ihn durch ein Dummy Device nachgebildet:
defmod meinTest dummy
attr meinTest readingList wert
attr meinTest setList wert
attr meinTest userReadings JAN_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
FEB_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
MRZ_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
APR_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
MAI_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
JUN_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
JUL_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
AUG_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
SEPT_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
OKT_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
NOV_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
DEZ_PV_Energy_Yield {\
    my $wert = ReadingsVal($name, "wert", 0);;\
    return "Wert ist: $wert, ich bin Reading: $reading";;\
},\
NOW_MONTH {\
my @month_names = qw(JAN FEB MRZ APR MAI JUN JUL AUG SEPT OKT NOV DEZ);;\
my $month = (localtime())[4];;\
    return $month_names[ $month ];;\
},\
PREV_MONTH {\
my @month_names = qw(JAN FEB MRZ APR MAI JUN JUL AUG SEPT OKT NOV DEZ);;\
my $month = ((localtime())[4] - 1) % 12;;\
    return $month_names[ $month ];;\
},\
NOW_PV_Energy_Yield {\
my @month_names = qw(JAN FEB MRZ APR MAI JUN JUL AUG SEPT OKT NOV DEZ);;\
my $month = (localtime())[4];;\
    my $reading_name = $month_names[$month]."_PV_Energy_Yield";;\
return ReadingsVal($name, $reading_name, "???");;\
},\
PREV_PV_Energy_Yield {\
my @month_names = qw(JAN FEB MRZ APR MAI JUN JUL AUG SEPT OKT NOV DEZ);;\
my $month = ((localtime())[4] - 1) % 12;;\
    my $reading_name = $month_names[$month]."_PV_Energy_Yield";;\
return ReadingsVal($name, $reading_name, "???");;\
}

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Torxgewinde

@Udo: Bitte konkretisiere die Kritik, was ist daran nicht generisch?

RalfRog

Als interessierter Mitleser.
Das sind ja unendlich viele Attribute bei so einem Modus-DEVICE.

Wenn ich so in die UserReadings schaue, stehen da nicht schon die Monatswerte (ohne Kürzel des Monats) zur Verfügung?

Monthly_Yield {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_PV_Generation", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Yield_alt", 0)));;},\
Monthly_Import_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_Import_Energy", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Import_Energy_alt", 0)));;},\
Monthly_Export_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_Export_Energy", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Export_Energy_alt", 0)));;},\
Monthly_PV_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Monthly_Yield", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Export_Energy", 0)));;},\
Monthly_Gesamt_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Monthly_Import_Energy", 0) + ReadingsNum ("SH10rt_Fast","Monthly_PV_Energy", 0)));;},\
Monthly_Battery_Discharge_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_Battery_Discharge_Energy", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Battery_Discharge_Energy_alt", 0)));;} ,\
Monthly_Battery_Charge_Energy {sprintf("%.1f", ( ReadingsNum ("SH10rt_Fast","Total_Battery_Charge_Energie", 0) - ReadingsNum ("SH10rt_Fast","Monthly_Battery_Charge_Energie_alt", 0)));;} ,\

Reicht es da nicht den Monthly_Yield per Ultimo auf die gewünschten UserReadings zu schreiben bzw. gleich mit dem Ursprungsreading "Total_PV_Generation" zu arbeiten.  ::)
FHEM auf Proxmox VM Bookworm (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen