Hallo,
wie kann ich die derzeitigen Werte (on/off) meines PIR im SVG-Plot als 0/1 ausgeben lasen ohne mit zusätzlichen Dummies/Notifys bzw. die Werte im PIR Device neu zu vergeben?
Gibt es da so eine Art Mappingfunktion? If PIR eq "on " plot 1 sozusagen. :-)
Viele Grüße
Thomas
Wenn ich die Frage richtig verstanden habe, reicht es
$fld[3]=~"On,"?1:0
in das Feld "Function" zu packen. Ggf. musst Du die "3" anpassen auf die Spalte in der die Werte "on/off" stehen.
Grüße
Oder eventMap:
attr PIR eventMap on:1 off:0
Dann steht im Log 1 und 0 statt on bzw. off...
(vors. das regex passt dann noch/wieder)
Gruß, Joachim
@alanblack:
kannst du mir bitte kurz erklären, was der Ausdruck macht? Wird da in ein Arraywert entweder 0 oder 1 geschrieben?
Als ich den in der ersten Zeile hinzugefügt hatte, ist nach dem Speichern der identische Wert/Ausdruck in die Funktionzelle in Zeile 3 kopiert worden. Muss da so?
@Joachim: Muss ich dann auch meine DOIF's etc. anpassen auf 0/1 ?
Viele Grüße & Danke
Thomas
Hi Thomas,
Zitat von: tklein am 14 April 2017, 00:42:30
@Joachim: Muss ich dann auch meine DOIF's etc. anpassen auf 0/1 ?
Ich schätze JA.
Da die Events die vom Modul/Kanal kommen nun statt on/off eben 0/1 sind, zumindest bei mir so.
Habe einen Gewitterwarner mit Homematic-Sensoren gekoppelt, die open/closed senden und ich hab das dann auf 0/1 gemapped um es eben besser plotten zu können.
Im Eventmonitor kommt jetzt 0 bzw. 1 statt open/closed, daher müssen dann auch notify/DOIF etc. auf 0/1 matchen...
Andere Möglichkeiten:
readingsProxy https://wiki.fhem.de/wiki/ReadingsProxy (habe ich noch nicht verwendet), ist aber nicht so viel anders als dummy bzw. halt ebenfalls ein zusätzliches Device...
userReadings https://wiki.fhem.de/wiki/UserReadings bzw. https://fhem.de/commandref.html#readingFnAttributes dadurch bleiben die "originalen Events" erhalten und es sollte/müsste dann eben die zusätzlichen (zum jeweiligen angelegten userReadings) geben, die dann für's Plotten verwendet werden können...
Gruß, Joachim
Eventmap halte ich für den ungeschicktesten der vorgeschlagenen Wege. Userreading oder Readingsproxy erzeugen zusätzliche Logeinträge. Ein Mapping im gplot file dagegen erzeugt keinen zusätzlichen overhead und plottet auch alte Werte richtig...
Zitat von: KernSani am 14 April 2017, 10:29:11
Ein Mapping im gplot file dagegen erzeugt keinen zusätzlichen overhead und plottet auch alte Werte richtig...
Wie würde das dann aussehen??
EDIT: plotReplace?
Danke, Joachim
Bei Verwendung von Dblog z.B so:
#fhemDbLog EG_PIR:state:::$val=~s/(on|off)(\d*).*/$1eq"on"?1:0/eg
Zitat von: tklein am 14 April 2017, 00:42:30
Zitat$fld[3]=~"On,"?1:0
@alanblack:
kannst du mir bitte kurz erklären, was der Ausdruck macht? Wird da in ein Arraywert entweder 0 oder 1 geschrieben?
Nee, da wird nichts in ein Array geschrieben. Kennst Du "IIF" aus irgendeiner Programmiersprache? Das hier ist das gleiche nur eine andere Syntax. Als IIF sähe das ungefähr so aus:
iif($fld[3]=="On", "1", "0")
$fld[] ist dabei ein Array, das SVG aus jeder Zeile des Logfiles erzeugt; quasi wie ein "split" mit dem Leerzeichen als Trenner.
Dabei sind dann in $fld[0] Datum und Uhrzeit, in $fld[1] das Gerät und ab $fld[2] die geloggten Infos.
Zitat
Als ich den in der ersten Zeile hinzugefügt hatte, ist nach dem Speichern der identische Wert/Ausdruck in die Funktionzelle in Zeile 3 kopiert worden. Muss da so?
Das habe ich nicht verstanden.
Grüße
Nachtrag: Eventmap und Userreadings habe ich auch mal ausprobiert. Kostet zu viel Grundlast auf dem System, ist unzuverlässig und macht den Code unleserlicher ("DOIF <Fenster> = 1 ...")
@ alanblack
Wenn ich den Functioneintrag speichern möchte (Zeile 1)
wird der identische Inhalt in die Zelle in der 3. Zeile kopiert.
Zitat von: tklein am 14 April 2017, 14:11:02
@ alanblack
Wenn ich den Functioneintrag speichern möchte (Zeile 1)
wird der identische Inhalt in die Zelle in der 3. Zeile kopiert.
Ja, das habe ich gerade nachvollziehen können. Keine Ahnung, ob das ein Bug oder ein Feature ist. Wäre ein komisches Feature, weil es nur in der ersten Zeile so passiert.
Ist aber egal, weil hier Deine 3. Zeile hier noch unbenutzt ist. Solange das Feld "Diagram label" - also das erste in jeder Zeile - leer ist, wird die Zeile ignoriert. Wenn Du einen dritten Wert plotten willst, muss Du halt das Feld leeren oder ändern.
Grüße
Zitat von: MadMax-FHEM am 14 April 2017, 00:14:16
Oder eventMap:
attr PIR eventMap on:1 off:0
Dann steht im Log 1 und 0 statt on bzw. off...
(vors. das regex passt dann noch/wieder)
Gruß, Joachim