Hauptmenü

Trigger DOIF

Begonnen von netpirat, 09 November 2022, 22:12:04

Vorheriges Thema - Nächstes Thema

netpirat

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ß

Damian

Dafür gibt es das Attribut DOIF_Readings oder mit Event event_Readings.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

netpirat

#2
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



Damian

#3
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.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

netpirat

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ß


Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

netpirat

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!

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF