Hallo,
es ist zwar kein spezifisches HM-Problem aber ich frage es mal hier ...
wie kann ich ein Reading (power) verschiedener Devices (HM-ES-PMSw1-Pl) addieren und als Reading in einem Dummy-Device darstellen?
Ich habe jetzt alles mögliche durchsucht hat aber nichts gefunden
Alternativ zur Berechnung im FHEM wäre die Summation auch im FTUI möglich, da ich die Werte auf einer FTUI-Seite darstelle
Danke für jeden Tipp, Nobby
Notify erstellen. Alle Devices mit Reading power als Regex im Trigger benennen und dann im Notify die Berechnung ausführen in dem man alle Devices mit ReadingsVal ab fragt.
Wäre meine erste Idee.
Hi,
set dummy {([dev1:power]+[dev2:power])}
Gruß Otto
hi,
ich glaube mit perl?
$WLicht = ($SLicht+$HLicht)/2;
SLicht = Lichtsensor => Straße
HLicht = Lichtsensor => Hof
WLicht = gesamt wert /2 => wird ins dummy geschrieben
gruss
Zitat von: eisman am 29 März 2018, 13:40:01
SLicht = Lichtsensor => Straße
HLicht = Lichtsensor => Hof
WLicht = gesamt wert /2 => wird ins dummy geschrieben
Falsche Baustelle? Die Addition zweiter power-Readings war gefragt.
Ansonsten bin ich ganz bei CoolTux und Otto: Während innerhalb eines Gerätes die Zusammenfassung mehrerer Readings in ein Userreading ideal ist, empfiehlt sich hier ganz klar, auf die Änderungen aller drei Werte entsprechend mit Notify zu reagieren und das abzuspeichern - entweder als State wie Otto schreibt, alternativ mit setreading in ein spezielles Reading des Dummys (etwa falls man mehrere Werte dort bunkern möchte).
Zitat von: Pfriemler am 29 März 2018, 15:38:15
Falsche Baustelle? Die Addition zweiter power-Readings war gefragt.
Ansonsten bin ich ganz bei CoolTux und Otto: Während innerhalb eines Gerätes die Zusammenfassung mehrerer Readings in ein Userreading ideal ist, empfiehlt sich hier ganz klar, auf die Änderungen aller drei Werte entsprechend mit Notify zu reagieren und das abzuspeichern - entweder als State wie Otto schreibt, alternativ mit setreading in ein spezielles Reading des Dummys (etwa falls man mehrere Werte dort bunkern möchte).
hi, nicht ganz
op licht oder power, es ging um Readings
da ich es früher mal als Userreading hatte (öfter mal Probleme mit der Aktualisierung)
habe ich mir erlaubt, die meisten Sachen in einer sub() auszulagern.
da hat man mehr Möglichkeiten und weniger Probleme.
(oben war nur ein beispiel)
gruss
Ich habe mir mal das Thema notify im Wiki angesehen und teste jetzt schon eine ganze Zeit rum ... aber irgendwie scheint auch in der jetzt reduzierten Version mit nur 2 Eingängen kein notify erzeugt zu werden
Zitat von: Nobby1805 am 29 März 2018, 18:09:28
Ich habe mir mal das Thema notify im Wiki angesehen und teste jetzt schon eine ganze Zeit rum ... aber irgendwie scheint auch in der jetzt reduzierten Version mit nur 2 Eingängen kein notify erzeugt zu werden
Was genau meinst Du? :o :o :o
Warum triggerst Du auf powerwerte und setzt den ActionDetector auf update?
Wolltest Du nicht addieren?
Von mir aus schreib doch jetzt in den Ausführungsteil an statt set ActionDetector
setreading PowerNotify SummPower {([Aqua_Pwr:power]+[Buero_Pwr:power])}
Und poste bitte keine Screenshots sonders list ....
Gruß Otto
Auf jeden Fall hat das Notify angeschlagen.
Zitat von: CoolTux am 29 März 2018, 18:23:01
Auf jeden Fall hat das Notify angeschlagen.
Woran siehst du das? Im Event-Monitor wird nichts angezeigt
Zitat von: Otto123 am 29 März 2018, 18:18:15
Was genau meinst Du? :o :o :o
Warum triggerst Du auf powerwerte und setzt den ActionDetector auf update?
Wolltest Du nicht addieren?
Von mir aus schreib doch jetzt in den Ausführungsteil an statt set ActionDetector
setreading PowerNotify SummPower {([Aqua_Pwr:power]+[Buero_Pwr:power])}
Und poste bitte keine Screenshots sonders list ....
Gruß Otto
Den Actiondetector auf Update habe ich dann wieder gesetzt nachdem die Summation nicht geklappt hat ... Ch versuche es jetzt später nochmal mit deinem setreading
Zitat von: Nobby1805 am 29 März 2018, 18:34:59
Woran siehst du das? Im Event-Monitor wird nichts angezeigt
Dein STATE hat ein Timestamp
Zitat von: CoolTux am 29 März 2018, 18:42:11
Dein STATE hat ein Timestamp
Den hat er m.E. Bei der Letzten Änderung der Einstellung erhalten und danach auch bei einer Veränderung der Eingangswerte nicht mehr verändert
Steht jetzt um 18:51 immer noch auf 18:00
Probier den Ausführungsteil auch gerne ohne notify einfach in der FHEM Kommandozeile.
Zitat von: Nobby1805 am 29 März 2018, 18:50:46
Den hat er m.E. Bei der Letzten Änderung der Einstellung erhalten und danach auch bei einer Veränderung der Eingangswerte nicht mehr verändert
Steht jetzt um 18:51 immer noch auf 18:00
Dann bitte ein list vom Notify
hi,
userReadings powersume {ReadingsVal("ST01C2","power",0) + ReadingsVal("ST01C2","power",0)}
oder notify
defmod nPower notify ST01C2:power:.*|ST01C2:power:.* {\
my $power1 = ReadingsVal("ST01C2","power",0);;\
my $power2 = ReadingsVal("ST01C2","power",0);;\
my $power = 0;;\
$power = $power1 + $power2;;\
fhem("set Power " . $power . ";;");;\
ST01C2 device
Power dummy
bei mir gehts (aufwand 1min)
gruss
Zitat von: Otto123 am 29 März 2018, 18:18:15
Von mir aus schreib doch jetzt in den Ausführungsteil an statt set ActionDetector
setreading PowerNotify SummPower {([Aqua_Pwr:power]+[Buero_Pwr:power])}
Und poste bitte keine Screenshots sonders list ....
Ich meine zwar, dass mein 2. oder 3. Versuch genau so aussah ... aber jetzt klappt es
Danke an alle Helferlein ;D
Moin,
schon ein älteres Thema, aber ich greife es nochmal auf.
Folgende Definition:
defmod SolarPower notify Shelly_Gartenhaus:power:.*|Shelly_Solar_Garage:power:.*|solax:pv_total_power:.*|solax:home_power:.*|solax:battery_remain_capacity:.*|solax:grid_feed_in_power:.* {
my $power1 = ReadingsVal("Shelly_Gartenhaus","power",0);;
my $power2 = ReadingsVal("Shelly_Solar_Garage","power",0);;
my $power3 = ReadingsVal("solax","pv_total_power",0);;
my $power = 0;;
$power = $power1 + $power2 + $power3;;
my $consumption1 = ReadingsVal("solax","home_power",0);;
my $consumption2 = ReadingsVal("Shelly_Solar_Garage","power",0);;
my $consumption3 = ReadingsVal("Shelly_Gartenhaus","power",0);;
my $houseConsumption = 0;;
$houseConsumption = $consumption1 + $consumption2 + $consumption3;;
my $batteryPower = ReadingsVal("solax","battery_power",0);;
my $battery_remain_capacity = ReadingsVal("solax","battery_remain_capacity",0);;
my $inverter_powerexported = ReadingsVal("solax","grid_feed_in_power",0);;
$consumption1 = "Test";;
fhem("setreading virtualSolar home_power" . "$consumption1");;
fhem("setreading virtualSolar pv_total_power" . $power . ";;");;
fhem("setreading virtualSolar battery_remain_capacity" . $battery_remain_capacity . ";;");;
fhem("setreading virtualSolar battery_power" . $batteryPower . ";;");;
fhem("setreading virtualSolar grid_feed_in_power" . $inverter_powerexported . ";;");;
fhem("setreading virtualSolar test 12345678");;
}
In meinem Zieldevice wird das Reading test mit 12345678 richtig geschrieben. Das auch bei jedem Notify. Aber: alle andere kommt nicht an. Sprich: das setreading wird nicht ausgeführt.
Das Log schmeisst zudem folgendes:
2022.11.22 09:21:46 1: PERL WARNING: "my" variable $consumption1 masks earlier declaration in same scope at (eval 478) line 1.
2022.11.22 09:21:46 1: PERL WARNING: Use of uninitialized value $consumption1 in concatenation (.) or string at (eval 478) line 1.
Wo ist mein (Denk-) Fehler?
Danke :-)
da fehlen leerzeichen zwischen readingname und value.
bsp:
fhem("setreading virtualSolar pv_total_power $power");;
Danke, hat geklappt. Lässt sich ja auch einfacher / schöner darstellen:
defmod SolarPower notify Shelly_Gartenhaus:power:.*|Shelly_Solar_Garage:power:.*|solax:pv_total_power:.*|solax:home_power:.*|solax:battery_remain_capacity:.*|solax:grid_feed_in_power:.* {
my $power1 = ReadingsVal("Shelly_Gartenhaus","power",0);;
my $power2 = ReadingsVal("Shelly_Solar_Garage","power",0);;
my $power3 = ReadingsVal("solax","pv_total_power",0);;
my $power = 0;;
$power = $power1 + $power2 + $power3;;
my $hausverbrauch1 = ReadingsVal("solax","home_power",0);;
my $hausverbrauch2 = ReadingsVal("Shelly_Solar_Garage","power",0);;
my $hausverbrauch3 = ReadingsVal("Shelly_Gartenhaus","power",0);;
my $houseConsumption = 0;;
$houseConsumption = $hausverbrauch1 + $hausverbrauch2 + $hausverbrauch3;;
my $batteryPower = ReadingsVal("solax","battery_power",0);;
my $battery_remain_capacity = ReadingsVal("solax","battery_remain_capacity",0);;
my $inverter_powerexported = ReadingsVal("solax","grid_feed_in_power",0);;
fhem("setreading virtualSolar home_power $houseConsumption");;
fhem("setreading virtualSolar pv_total_power $power");;
fhem("setreading virtualSolar battery_remain_capacity $battery_remain_capacity");;
fhem("setreading virtualSolar battery_power $batteryPower");;
fhem("setreading virtualSolar grid_feed_in_power $inverter_powerexported ");;
}
Jetzt hab ich alles korrekt in meinem Dummy Device :-)
Guten Morgen,
ich hoffe, es ist ok, wenn ich hier frage:
Zitat von: Otto123 am 29 März 2018, 13:39:24Hi,
set dummy {([dev1:power]+[dev2:power])}
Gruß Otto
Wie kann ich die Summe des dummy aktuell halten? Einmal erstellt, bleibt sie Summe so und aktualisiert sich nicht.
Besten Dank
Guten Morgen,
diesen Befehl immer wieder ausführen: ein at Zeitgesteuert, ein notify Event gesteuert.
Gruß Otto
Anbei eine weitere Alternative:
https://fhem.de/commandref_DE.html#DOIF_aggregation
Viele Grüße
Jürgen