[GELÖST] Aktion abhängig vom Reading

Begonnen von fhemthom, 15 November 2022, 18:49:51

Vorheriges Thema - Nächstes Thema

fhemthom

Hallo,

ich habe hier ein Device mit mehreren Readings und versuche verzweifelt abhänging vom Wert eines Readings einfach mit if darauf zu prüfen und in Abhängingkeit darauf eine Aktion auszuführen. Ich finde ganz viele verschiedene Artikel und bekomme jeweils die lustigsten Fehlermeldungen - ich mache da grundsätzlich etwas falsch nehme ich an. Daher:

ich möchte etwas haben das in etwa "wenn Reading 'bla' "1" ist, dann mach 'blubb'" macht.
Hat da mal jemand ein funktionierendes  Beispiel für mich?

vielen Dank!

betateilchen

kommt drauf an, von welcher Stelle aus Du die Aktion auslösen willst.

Reiner perl Code:

if (ReadingsNum(<device>,'bla','-1') == 1) {blub}

Das Ganze geht auch als notify:

define test_notify_1 notify wz_office_Kyocera:Wifi_Signal:.-47 {blub}

wenn also das reading "Wifi_Signal" im device "wz_office_Kyocera" den Wert -47 hat, wird blub ausgeführt.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee


fhemthom

Zitat von: betateilchen am 15 November 2022, 18:57:31

Reiner perl Code:

if (ReadingsNum(<device>,'bla','-1') == 1) {blub}


Ich möchte das eigentlich mit dem if machen... Ich bekomme dann:


2022.11.15 19:07:00 1: ERROR evaluating my $SELF=   $evalSpecials->{'%SELF'};{ if ( (ReadingsNum(Nachttischlampe_C,'onoff','0') eq 0) && !($we) && ($wday == 1) && !(Value("Urlaubstag")) ) { Nachttischlampe_C_20_447 if (Value("Sonos_Timer") eq "on") } }: Bareword "Nachttischlampe_C" not allowed while "strict subs" in use at (eval 1718) line 1.


die ganze Zeile sieht so aus:

define Nachttischlampe_C_On_Mo at *19:07:00 { if ( (ReadingsNum(Nachttischlampe_C,'onoff','0') eq 0) && !($we) && ($wday == 1) && !(Value("Urlaubstag")) ) { Nachttischlampe_C_20_447 if (Value("Sonos_Timer") eq "on") } }


warum Bareword "Nachttischlampe_C" not allowed while "strict subs" in use at (eval 1718) line 1. ?

betateilchen

Mehrere Fehler...

ReadingsNum(Nachttischlampe_C,'onoff','0') eq 0)

'0' ist falsch. ReadingsNum() liefert einen numerischen Wert zurück, also muss da 0 stehen.
eq ist falsch. eq ist für den Vergleich von Strings (alphanumerisch) nicht für Zahlen. Deshalb stand in meinem Beispiel == und nicht eq.
Nachttischlampe_C ist falsch. Das ist ein Name, der muss genauso in Anführungszeichen stehen wie der Name des readings 'onoff'.

if (ReadingsNum('Nachttischlampe_C','onoff',0) == 0)

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Am besten fängst Du mal damit an, Dir die Basics von FHEM anzulesen, damit solche Grundlagen Dich nicht weiter vor unüberwindbare Hürden stellen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

fhemthom

Zitat von: betateilchen am 15 November 2022, 19:30:21
Mehrere Fehler...

ReadingsNum(Nachttischlampe_C,'onoff','0') eq 0)

'0' ist falsch. ReadingsNum() liefert einen numerischen Wert zurück, also muss da 0 stehen.
eq ist falsch. eq ist für den Vergleich von Strings (alphanumerisch) nicht für Zahlen. Deshalb stand in meinem Beispiel == und nicht eq.
Nachttischlampe_C ist falsch. Das ist ein Name, der muss genauso in Anführungszeichen stehen wie der Name des readings 'onoff'.

if (ReadingsNum('Nachttischlampe_C','onoff',0) == 0)

Besten Dank für die Erklärung, damit funktioniert es jetzt!