doif trigger funktioniert nicht

Begonnen von rhoffm34, 14 April 2019, 22:40:15

Vorheriges Thema - Nächstes Thema

rhoffm34

Hallo zusammen. Zwei Stunden probiert aber es will nicht funktionieren. Zu wenig Perl Erfahrung....

Ich habe folgendes doif geschrieben:

(
my $Brightness=Value("P_setValue_Brightness_Terasse");
{
if (ReadingsVal("HM_BM_Terasse","brightness",0) > $Brightness)
{fhem("set Status_Brightness_Terasse_TAGvsNACHT 1");}
if (ReadingsVal("HM_BM_Terasse","brightness",0) < $Brightness)
{fhem("set Status_Brightness_Terasse_TAGvsNACHT 0");}
})


Ich möchte in Abh. der Helligkeit am HM Bewegungsmelder
"(ReadingsVal("HM_BM_Terasse","brightness",0)"
verglichen mit einem Parameter
"my $Brightness=Value("P_setValue_Brightness_Terasse")"
einen Status
"("set Status_Brightness_Terasse_TAGvsNACHT 0")"
zwischen 1 uns 0 einstellen.

Das Problem:

Wenn zB. die Bedingung
if (ReadingsVal("HM_BM_Terasse","brightness",0) > $Brightness)
erfüllt ist wird das doif nicht ausgeführt.

Drücke ich hingegen

"set checkall" wird das doif richtig ausgeführt.

Kann jemand helfen? Anscheinen funktioniert so der trigger nicht...


Otto123

#1
Und einfach normales DOIF? Ohne Perl Erfahrung  ;)
define di_nudel DOIF
([HM_BM_Terasse:brightness] > [P_setValue_Brightness_Terasse])(set Status_Brightness_Terasse_TAGvsNACHT 1)
DOELSEIF
([HM_BM_Terasse:brightness] < [P_setValue_Brightness_Terasse])(set Status_Brightness_Terasse_TAGvsNACHT 0)


Du solltes noch überlegen was bei [HM_BM_Terasse:brightness] = [P_setValue_Brightness_Terasse] passieren soll.
Das hier ist die Umsetzung deiner Vorstellung/Idee. Das geht mit anderen Mittel noch viel einfacher. Ich würde ein userReadings machen. Das wäre auch mit Perl :)
attr HM_BM_Terasse userReadings Tag {ReadingsVal($name,"brightness",0) > Value("P_setValue_Brightness_Terasse") ? "1" : "0"}
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rhoffm34

So geht es auch, ich wollte mich aber auch mal weiter an perl versuchen. Was ist denn an meinem Code falsch, das es nicht funktioniert?

Otto123

#3
Dann mach kein DOIF :)

Ich weiß nicht was an Deinem Code falsch ist, weil ich das, was Du geschrieben hast und was mit Perl bei DOIF geht - einfach nicht verstehe.  :-[
Vielleicht ist es auch zu spät für verstehendes lesen  ::)

Wenn Du da Hilfe willst, poste ein list von deinem DOIF und nicht bloß Code Teile. Aus einem list kann und will vielleicht jemand was erkennen.

Wie gesagt, wenn Du eigentlich Perl machen wolltest nimm mein Vorschlag fürs userReadings  8)

Gruß Otto

P.S. DOIF wurde ursprünglich auch mit dem Ansatz gemacht einfache Funktionen für jedermann umsetzbar zu machen. Und das geht  :D
Da jetzt einen einfachen Sachverhalt ausgerechnet mit DOIF kompliziert mit Perl umsetzen zu wollen ... :-X  ::)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rhoffm34

Danke Otto, ich versuche morgen mal userReadings...

Ellert

Zitat von: rhoffm34 am 14 April 2019, 23:42:24
Danke Otto, ich versuche morgen mal userReadings...
Wenn Du DOIF_Readings oder event_Readings nimmst , kannst Du die DOIF-Syntax [...] verwenden.

Otto123

Zitat von: Ellert am 15 April 2019, 06:19:00
Wenn Du DOIF_Readings oder event_Readings nimmst , kannst Du die DOIF-Syntax [...] verwenden.
Moin,
er wollte ja gerne Perl machen  ;)
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ellert

Zitat von: Otto123 am 15 April 2019, 09:05:42
Moin,
er wollte ja gerne Perl machen  ;)
Gruß Otto

Bei den DOIF_Readings werden keine zusätzlichen Events durchs System gejagt und nur intern getriggert, auch Perl kann verwendet werden, (internes)event-on-change-reading ist inklusive und es würde auch bei der Parameteränderung ausgelöst ;);) Mit Perl zu experimentieren ist aber auch nicht verkehrt.

rhoffm34

Mit userReadings hats geklappt, danke Otto, schöne Ostertage.