Syntax für das Eingabefeld Function im Ploteditor?

Begonnen von to-ka, 04 Januar 2018, 12:38:10

Vorheriges Thema - Nächstes Thema

to-ka

Hallo,

ich suche erfolglos nach einer Beschreibung der Syntax für das Function-Feld im Ploteditor.
Ich möchte meine FHT80b darstellen und finde Hinweise, die ich nicht verstehe.
Teilweise funktionieren sie, teilweise nicht.
Beispiel:
$fld[3]=~"open"?5:0 als Function für den Fenster-Sensor.
Es funktioniert, $fld[3] bezeichnet die Spalte 4, sowie ok,
= ist eine Zuweisung, was aber bedeutet die Tilde und das Fragezeichen? Wo kann ich Infos dazu finden? Im Wiki bin ich dazu nicht fündig geworden.


Ratlos, aber mit Grüßen
Thomas

JoWiemann

Das Ganze kann so gelesen werden:
Prüfe, ob ,,open" in $fld[3] enthalten ist =~ und wenn ja ? dann gib die Zahl 5 zurück, wenn nein : dann die Zahl 2.
Das Ganze ist eine regular Expression =~ verknüpft mit dem ? Operator - Bedingung?Ja:Nein

Gesendet von iPhone mit Tapatalk

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

rudolfkoenig

Ergaenzung:
- die "Doku" dafuer gibt es in http://fhem.de/commandref.html#FileLogget, das ist je nach Quelle (FileLog/DbLog) unterschiedlich. Da die FileLog-Get Parameter mit Leerzeichen getrennt werden, darf "fn" keins enthalten.
- dein Beispiel ist ein Perl-Ausdruck, und die Doku dafuer findet man in der Perl Dokumentation (bzw. ein perl Buch).
- in diesem Ausdruck kann man auf die Variablen in der FileLog_Get Routine zugreifen, die aktuelle & zerhackte Zeile findet man in @fld.

Domin2000

Hallo Zusammen,

welche Funktion muss ich im FHEM Ploteditor eingeben um den Wert 1.8 aus
{"value": {"value": 1.8}}
rauszufiltern? Komme da nicht weiter...

Mit einem regulärem Ausdruck wäre ja so: "value":\s*\{\s*"value":\s*([0-9.]+)\s*\}

Prof. Dr. Peter Henning

Nicht doch...

\D*(\d*\.\d)\D*

wenn immer eine Nachkommastelle vorhanden ist.

LG

pah

Domin2000

#5
Zitat von: Prof. Dr. Peter Henning am 14 November 2025, 11:21:18Nicht doch...

\D*(\d*\.\d)\D*

wenn immer eine Nachkommastelle vorhanden ist.

LG

pah


Wo müsste der Teil dann rein? Wi sehen der Ausdruck dann komplett aus? So: "value":\D*(\d*\.\d)\D* ?

Prof. Dr. Peter Henning

Bitte die Anfänger-Doku und CommandRef lesen.

LG

pah

rudolfkoenig

#7
Zitatwelche Funktion muss ich im FHEM Ploteditor eingeben um den Wert 1.8 aus
{"value": {"value": 1.8}}
rauszufiltern?

Es gibt viele Loesungen, mir fallen Folgende ein:
  • $l=~/.*value":\s*(\d+\.\d+)/;;$1
    verwendet $l (die ganze aktuelle Zeile), und hofft, dass nur ein "value" im String vorkommt.
  • numberFromString($fld[4],0)
    verwendet die numberFromString Funktion aus fhem.pl, und die Tatsache, dass FileLog_Get in @fld die aktuelle Zeile getrennt nach Leerzeilen speichert.
    Funktioniert nur, wenn die Leerzeichen wie oben gezeigt vorkommen.
  • $l=~/({.*)/;;json2nameValue($1)->{value_value}
    der Ausdruck ab dem ersten { in der Zeile wird als JSON interpretiert, und value aus value extrahiert.
    Ist vmtl. langsamer, als die obigen Varianten


ZitatWo müsste der Teil dann rein?
Jeweils die erste Zeile aus den obigen Abschnitten in dem SVG-Editor in dem "Function" Feld einfuegen, und "Write .gplot file" klicken.
Die abgespeicherte .gplot Datei enthaelt danach eine Zeile wie
#tLog 4:.*::$l=~/({.*)/;;json2nameValue($1)->{value_value}
wobei tLog der Name meines Test-FileLogs ist und 4 (Wert der Column Spalte im Editor) egal ist, da wir eine Funktion verwenden.


ZitatBitte die Anfänger-Doku und CommandRef lesen.
Das schadet sicher nicht, ich wuesste aber nicht, wo diese Details da beschrieben sind.