FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: netpirat am 09 November 2022, 22:12:04

Titel: Trigger DOIF
Beitrag von: netpirat am 09 November 2022, 22:12:04
HAllo,

ich möchte, das sich ein Wert des DOIF (Zum BeispielSUM_EG_KU_AktuellerTagesStromverbrauch) aktualisiert wenn sich der Wert Stromwert des zugehörigen Raumes ändert. WIe kann ich das machen? Ich habe schon ein wenig probiert. Das ganze ist aktuell ein DOIF ich würde aber auch ein Notify nehmen, habe aber bislang nichts gutes gefunden. ICh möchte am Ende das Reading in SmartVisu anzeigen.

   

IF (ReadingNum('STK_.*_STW','Stromwert', '') .*)or (ReadingNum('LIC_.*_STW','Stromwert', '') .*)or (ReadingNum('TRH_.*_STW','Stromwert', '') .*) or (ReadingNum('DIM_.*_WIZ','Stromwert', '') .*)

{
set_Reading("SUM_EG_KU_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_KU_.*_STW|LIC_EG_KU_.*_STW|DIM_EG_KU_.*_STW|TRH_EG_KU_.*_STW)":Stromwert]);
set_Reading("SUM_EG_EZ_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_EZ_.*_STW|LIC_EG_EZ_.*_STW|DIM_EG_EZ_.*_STW|TRH_EG_EZ_.*_STW)":Stromwert]);
set_Reading("SUM_EG_WZ_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_WZ_.*_STW|LIC_EG_WZ_.*_STW|DIM_EG_WZ_.*_STW|TRH_EG_WZ_.*_STW)":Stromwert]);
set_Reading("SUM_EG_EL_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_EL_.*_STW|LIC_EG_EL_.*_STW|DIM_EG_EL_.*_STW|TRH_EG_EL_.*_STW)":Stromwert]);
set_Reading("SUM_EG_KI_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_KI_.*_STW|LIC_EG_KI_.*_STW|DIM_EG_KI_.*_STW|TRH_EG_KI_.*_STW)":Stromwert]);
set_Reading("SUM_EG_BA_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_BA_.*_STW|LIC_EG_BA_.*_STW|DIM_EG_BA_.*_STW|TRH_EG_BA_.*_STW)":Stromwert]);
set_Reading("SUM_EG_BU_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_BU_.*_STW|LIC_EG_BU_.*_STW|DIM_EG_BU_.*_STW|TRH_EG_BU_.*_STW)":Stromwert]);
set_Reading("SUM_EG_GW_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_GW_.*_STW|LIC_EG_GW_.*_STW|DIM_EG_GW_.*_STW|TRH_EG_GW_.*_STW)":Stromwert]);
set_Reading("SUM_EG_FL_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_FL_.*_STW|LIC_EG_FL_.*_STW|DIM_EG_FL_.*_STW|TRH_EG_FL_.*_STW)":Stromwert]);
}


Gruß
Titel: Antw:Trigger DOIF
Beitrag von: Damian am 09 November 2022, 22:44:05
Dafür gibt es das Attribut DOIF_Readings oder mit Event event_Readings.
Titel: Antw:Trigger DOIF
Beitrag von: netpirat am 10 November 2022, 18:00:34
Hallo,
ich weiß hier nicht weiter...

Ich habe  ein event_reading angelegt

Attributes  event_Readings kueche:[STK_.*_STW:Rechenwert]

das wie folgt eingebau:

if { ([$SELF:kueche] > 0); {set_Reading("SUM_EG_KU_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_KU_.*_STW|LIC_EG_KU_.*_STW|DIM_EG_KU_.*_STW|TRH_EG_KU_.*_STW)":Rechenwert]);
set_Reading("SUM_EG_EZ_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_EZ_.*_STW|LIC_EG_EZ_.*_STW|DIM_EG_EZ_.*_STW|TRH_EG_EZ_.*_STW)":Rechenwert]);
set_Reading("SUM_EG_WZ_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_WZ_.*_STW|LIC_EG_WZ_.*_STW|DIM_EG_WZ_.*_STW|TRH_EG_WZ_.*_STW)":Rechenwert]);
set_Reading("SUM_EG_EL_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_EL_.*_STW|LIC_EG_EL_.*_STW|DIM_EG_EL_.*_STW|TRH_EG_EL_.*_STW)":Rechenwert]);
set_Reading("SUM_EG_KI_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_KI_.*_STW|LIC_EG_KI_.*_STW|DIM_EG_KI_.*_STW|TRH_EG_KI_.*_STW)":Rechenwert]);
set_Reading("SUM_EG_BA_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_BA_.*_STW|LIC_EG_BA_.*_STW|DIM_EG_BA_.*_STW|TRH_EG_BA_.*_STW)":Rechenwert]);
set_Reading("SUM_EG_BU_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_BU_.*_STW|LIC_EG_BU_.*_STW|DIM_EG_BU_.*_STW|TRH_EG_BU_.*_STW)":Rechenwert]);
set_Reading("SUM_EG_GW_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_GW_.*_STW|LIC_EG_GW_.*_STW|DIM_EG_GW_.*_STW|TRH_EG_GW_.*_STW)":Rechenwert]);
set_Reading("SUM_EG_FL_AktuellerTagesStromverbrauch",[?#sum:"^(STK_EG_FL_.*_STW|LIC_EG_FL_.*_STW|DIM_EG_FL_.*_STW|TRH_EG_FL_.*_STW)":Rechenwert])
}}



Wenn ich das If triggere (manuell) ist alles ok. Eine Wertänderung von 0 auf 120mA triggert das DOIF aber nicht. Was mache ich denn falsch?
   
Ich erhalte bei manuellem Start folgende Readings:

Readings
SUM_EG_BA_AktuellerTagesStromverbrauch 278.96 2022-11-10 17:58:35
SUM_EG_BU_AktuellerTagesStromverbrauch 0 2022-11-10 17:58:35
SUM_EG_EL_AktuellerTagesStromverbrauch 580.88 2022-11-10 17:58:35
SUM_EG_EZ_AktuellerTagesStromverbrauch 118.96 2022-11-10 17:58:35
SUM_EG_FL_AktuellerTagesStromverbrauch 94.96 2022-11-10 17:58:35
SUM_EG_GW_AktuellerTagesStromverbrauch 0 2022-11-10 17:58:35
SUM_EG_KI_AktuellerTagesStromverbrauch 61 2022-11-10 17:58:35
SUM_EG_KU_AktuellerTagesStromverbrauch 156.96 2022-11-10 17:58:35
SUM_EG_WZ_AktuellerTagesStromverbrauch 144 2022-11-10 17:58:35
block_if executed 2022-11-10 17:58:35
warning condition c01: Argument "" isn't numeric in numeric gt (>) 2022-11-10 17:58:35


Titel: Antw:Trigger DOIF
Beitrag von: Damian am 10 November 2022, 18:58:05
Zunächst gehört das Semikolon:

if { ([$SELF:kueche] > 0);

nicht dahin.

event_Readings erzeugen Events auf die das Modul selbst reagieren soll - das funktioniert nicht gut (Selbsttriggerung), daher DOIF_Readings verwenden, die erzeugen keine Events nach außen triggern aber das eigene Modul.

aber was du willst, ist eher:

Attribute event_Readings SUM_EG_EZ_AktuellerTagesStromverbrauch:[#sum:"^(STK_EG_EZ_.*_STW|LIC_EG_EZ_.*_STW|DIM_EG_EZ_.*_STW|TRH_EG_EZ_.*_STW)":Rechenwert],
SUM_EG_WZ_AktuellerTagesStromverbrauch:[#sum:"^(STK_EG_WZ_.*_STW|LIC_EG_WZ_.*_STW|DIM_EG_WZ_.*_STW|TRH_EG_WZ_.*_STW)":Rechenwert],
...


set_Readings und das if kannst du dir dann sparen.

Titel: Antw:Trigger DOIF
Beitrag von: netpirat am 10 November 2022, 21:03:12
Hallo Damian,

danke funktioniert perfekt. Eine Frage noch, wie kann ich das reading so akualsieren, dass auch SmartVisu das mitbekommt. Muss ich da nicht ein setrading haben? Das reading aktualisiert sich jetzt zwar aber nur wenn ich die Seite neu lade.

Gruß

Titel: Antw:Trigger DOIF
Beitrag von: Damian am 10 November 2022, 22:57:21
Deine Readings sollten ein Event nach außen produzieren, das kannst du im Eventmonitor sehen, daher sollte es kein Problem sein, Änderung wo anders mitzubekommen.
Titel: Antw:Trigger DOIF
Beitrag von: netpirat am 11 November 2022, 21:36:04
Hallo Damian,

klar hast Du recht. Ich hatte das DOIF Reaing genommen. Geht nicht, Event-Reading klappt ohne Probleme. Wieder etwas gelernt. Vielen lieben Dank!
Titel: Antw:Trigger DOIF
Beitrag von: Damian am 11 November 2022, 21:50:59
Zitat von: netpirat am 11 November 2022, 21:36:04
Hallo Damian,

klar hast Du recht. Ich hatte das DOIF Reaing genommen. Geht nicht, Event-Reading klappt ohne Probleme. Wieder etwas gelernt. Vielen lieben Dank!

ja, wie schon geschrieben, DOIF_Readings ruft rekursiv die notify-Routine des eigenen Devices auf, daher arbeitet es nach außen Ressourcen schonend ohne Event - das ist Absicht.

Da es keine Wiederholung des Aufrufs vornimmt, wenn sich das Reading nicht ändert, arbeitet es, wie DOIF im FHEM-Modus, zustandsorientiert, das kann man sich insbesondere im DOIF-Perlmodus zunutze machen.