Hier die Definitionen:
#
# Kostal PV Inverter PIKO
#
define PV KOSTALPIKO inverter.site pvserver kost42naut
attr PV delay 60
attr PV userReadings generator.1.power,generator.2.power
attr PV event-on-change-reading .*
#
# String #1: compute the Power W out of current I and voltage U
#
define Trigger.PV.Power1 notify PV:generator.1.(voltage|current).* { \
Log 1,"Trigger.PV.Power1: NAME=$NAME EVENT=$EVENT";; \
my $U = ReadingsVal($NAME,"generator.1.voltage",0);; \
my $I = ReadingsVal($NAME,"generator.1.current",0);; \
my $P = $U * $I;; \
Log 1,"Trigger.PV.Power1: NAME=$NAME generator.1.power=$P";; \
readingsSingleUpdate($defs{$NAME},"generator.1.power",$P,1);; \
}
Und hier mal ein Log:
2020-12-14 17:37:37 InfluxDBLogger InfluxDB.PV succeeded_writes: 167
2020-12-14 17:37:37 InfluxDBLogger InfluxDB.PV Statistics: t=992 s=167 f=0
2020-12-14 17:37:43 InfluxDBLogger InfluxDB.PV total_writes: 993
2020-12-14 17:37:43 InfluxDBLogger InfluxDB.PV Statistics: t=993 s=167 f=0
2020-12-14 17:37:43 KOSTALPIKO PV generator.1.voltage: 10
2020-12-14 17:37:43 InfluxDBLogger InfluxDB.PV total_writes: 994
2020-12-14 17:37:43 InfluxDBLogger InfluxDB.PV Statistics: t=994 s=167 f=0
2020-12-14 17:37:43 KOSTALPIKO PV generator.1.current: 0.2
2020-12-14 17:37:43 KOSTALPIKO PV generator.1.power: 2
2020-12-14 17:37:43 InfluxDBLogger InfluxDB.PV succeeded_writes: 168
2020-12-14 17:37:43 InfluxDBLogger InfluxDB.PV Statistics: t=994 s=168 f=0
2020-12-14 17:37:43 InfluxDBLogger InfluxDB.PV succeeded_writes: 169
2020-12-14 17:37:43 InfluxDBLogger InfluxDB.PV Statistics: t=994 s=169 f=0
Da die Sonne mittlerweile untergegangen ist, setze ich zum Testen PV generator.1.voltage und PV generator.1.current manuell.
Mein Trigger berechnet daraus PV generator.1.power.
Eigentlich würde man erwarten, dass PV generator.1.power zweimal geloggt wird, da der Trigger auf Updates von Voltage und Current reagiert. Da aber im obigen Szenario beide Readings auf Null sind, ist Power auch bei voltage=10 noch Null und wird damit noch nicht geloggt, weil keine Änderung. Erst wenn auch Current von Null verschieden ist, ändert sich Power -- und wird dadurch geloggt.