(userReadings) Überprüfen ob Wert mit einem "T" beginnt.

Begonnen von skyline, 11 November 2018, 19:24:48

Vorheriges Thema - Nächstes Thema

skyline

Hallo,

ich möchte ein UserReadings (statevalue) das bei state "error" den Wert "nok" und bei state "T:xxxxxxx" (T: 21.6 H: 64.0) den Wert "ok" einnimmt.

Bekomme es aber irgendwie nicht hin.

Vielleicht hat ja jemand einen Tipp für mich.

EG_WE_TF userReadings statevalue {if(ReadingsVal($name,"state","") eq "error") {sprintf("nok")} elsif (split(":",ReadingsVal($name,"state","")))[0] eq "T") {sprintf("ok")}}


Danke!

Otto123

Hi,

also wenn ich zumindest den ersten Teil einfach mal teste funktioniert das wie gewollt.

Was geht denn nicht?

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

skyline

Er zeigt mir einen Fehler im Userreadings an.

ZitatError evaluating EG_WE_TF userReading statevalue: syntax error at (eval 14261) line 1, near ")["
syntax error at (eval 14261) line 1, near "}}"

Otto123

Da fehlt wo eine Klammer ( im zweiten Teil.
((split(":",ReadingsVal($name,"state","")))[0] eq "T") {sprintf("ok")}}

Ich bin mir über den Syntax mit dem ersten Element nicht sicher (split...)[0]
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

Christoph Morrison

Du machst dir das ziemlich kompliziert mit dem split usw.

{
    my $state = ReadingsVal("$name", 'state', undef);
    return 'nok' if $state eq 'error';
    return 'ok' if substr($state, 0, 1) eq 'T';
    return '';
}


Ansonsten hast du in deinem Code eine Klammer falsch gesetzt. Wenn du den Code ordentlich formatierst, siehst du auch direkt wo diese falsch ist.

skyline

@Christoph Morrison:
Danke, das funktioniert schon mal ;D ;D ;D


EG_WE_TF userReadings statevalue {
If (ReadingsVal($name,"state","") eq "error") {sprintf("nok")}
elsif (split(":",ReadingsVal($name,"state","")))[0] eq "T") {sprintf("ok")}
}

Aber auch wenn ich es mir so anschaue, finde ich den Fehler nicht.

Otto123

#6
Schaust Du in meine Antwort 3 oder Du kopierst die Zeile in einen Code Editor der Dir die Klammern zeigt. Eigentlich zeigt auch der FHEm Editor wo die Klammer fehlt.

Oder einfach zählen auf: 123 zu:1234  ::) ;D

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

skyline

ZitatOder einfach zählen auf: 123 zu:1234  ::) ;D

Hatte ich eigentlich auch so gemacht... aber manchmal hat man was an den Augen  ;)