SVG Plot eines Schalter zeigt nur Spitzen

Begonnen von aaameyer, 09 Februar 2018, 09:56:10

Vorheriges Thema - Nächstes Thema

aaameyer

Seit ein paar Tagen versuche ich einen Plot eines Schalters zu zeichnen und habe mich schon durch diverse Einträge durchgelesen komme aber trotzdem nicht richtig weiter:

Das LogFile des Schalters generiert immer nur "on change" einen neuen Eintrag, so dass ich den letzten Zustand solange gezeichnet bekommen möchte bis ein neuer Zustand eintritt. Es werden aber immer nur beim Zustand "open" kurze Peaks / Spitzen gezeichnet.

Wenn ich andere Beiträge lese, scheint man das mit logProxy und predcit lösen zu können, siehe z.B.: https://forum.fhem.de/index.php/topic,39232.0.html

In der Hoffung das jemand das Problem nachvollziehen kann und es nicht doch schon in einem anderen Beitrag gelöst wurde, starte ich mal dieses Thema.

Mein gplot File:

# Created by FHEM/98_SVG.pm, 2018-02-09 09:32:35
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<TL>'
set ytics ("closed" 0, "open" 1)
set y2tics ("closed" 0, "open" 1)
set grid
set ylabel "Status"
set y2label ""
set yrange [-0.1:1.1]
set y2range [-0.1:1.1]

#lp FileLog:FileLog_HM-SCI-3-FM_Sw_01,extend=24*60*60,predict:3:HM-SCI-3-FM_Sw_01.*::$fld[2]=~"open"?1:$fld[2]=~"closed"?0:0

plot "<IN>" using 1:2 axes x1y2 notitle ls l0 lw 1 with steps


Mein FileLog:

2018-02-07_19:11:38 HM-SCI-3-FM_Sw_01 open
2018-02-07_19:11:38 HM-SCI-3-FM_Sw_01 trigger_cnt: 57
2018-02-07_19:11:41 HM-SCI-3-FM_Sw_01 contact: closed (to CUL_0)
2018-02-07_19:11:41 HM-SCI-3-FM_Sw_01 closed
2018-02-07_19:11:41 HM-SCI-3-FM_Sw_01 trigger_cnt: 58
2018-02-07_19:11:44 HM-SCI-3-FM_Sw_01 contact: open (to CUL_0)
2018-02-07_19:11:44 HM-SCI-3-FM_Sw_01 open
2018-02-07_19:11:44 HM-SCI-3-FM_Sw_01 trigger_cnt: 59
2018-02-07_21:04:28 HM-SCI-3-FM_Sw_01 contact: closed (to CUL_0)
2018-02-07_21:04:28 HM-SCI-3-FM_Sw_01 closed
2018-02-07_21:04:28 HM-SCI-3-FM_Sw_01 trigger_cnt: 60
2018-02-07_21:04:41 HM-SCI-3-FM_Sw_01 contact: open (to CUL_0)
2018-02-07_21:04:41 HM-SCI-3-FM_Sw_01 open
2018-02-07_21:04:41 HM-SCI-3-FM_Sw_01 trigger_cnt: 61
2018-02-07_22:11:16 HM-SCI-3-FM_Sw_01 contact: closed (to CUL_0)
2018-02-07_22:11:16 HM-SCI-3-FM_Sw_01 closed
2018-02-07_22:11:16 HM-SCI-3-FM_Sw_01 trigger_cnt: 62
2018-02-07_22:11:16 HM-SCI-3-FM_Sw_01 contact: open (to CUL_0)
2018-02-07_22:11:16 HM-SCI-3-FM_Sw_01 open
2018-02-07_22:11:16 HM-SCI-3-FM_Sw_01 trigger_cnt: 63
2018-02-08_17:39:14 HM-SCI-3-FM_Sw_01 contact: closed (to CUL_0)
2018-02-08_17:39:14 HM-SCI-3-FM_Sw_01 closed
2018-02-08_17:39:14 HM-SCI-3-FM_Sw_01 trigger_cnt: 64
2018-02-08_17:39:14 HM-SCI-3-FM_Sw_01 contact: open (to CUL_0)
2018-02-08_17:39:14 HM-SCI-3-FM_Sw_01 open
2018-02-08_17:39:14 HM-SCI-3-FM_Sw_01 trigger_cnt: 65
2018-02-08_21:43:04 HM-SCI-3-FM_Sw_01 contact: closed (to CUL_0)
2018-02-08_21:43:04 HM-SCI-3-FM_Sw_01 closed
2018-02-08_21:43:04 HM-SCI-3-FM_Sw_01 trigger_cnt: 66


Preprocessed Output vom gplot-Editor:

get lp CURRENT INT 2018-02-07_00:00:00 2018-02-08_00:00:01 FileLog:FileLog_HM-SCI-3-FM_Sw_01,extend=24*60*60,predict:3:HM-SCI-3-FM_Sw_01.*::$fld[2]=~"open"?1:$fld[2]=~"closed"?0:0

2018-02-07_19:11:38 0
2018-02-07_19:11:38 1
2018-02-07_19:11:38 0
2018-02-07_19:11:41 0
2018-02-07_19:11:41 0
2018-02-07_19:11:41 0
2018-02-07_19:11:44 0
2018-02-07_19:11:44 1
2018-02-07_19:11:44 0
2018-02-07_21:04:28 0
2018-02-07_21:04:28 0
2018-02-07_21:04:28 0
2018-02-07_21:04:41 0
2018-02-07_21:04:41 1
2018-02-07_21:04:41 0
2018-02-07_22:11:16 0
2018-02-07_22:11:16 0
2018-02-07_22:11:16 0
2018-02-07_22:11:16 0
2018-02-07_22:11:16 1
2018-02-07_22:11:16 0
2018-02-08_00:00:01 0
#3:HM-SCI-3-FM_Sw_01.*::$fld[2]=~"open"?1:$fld[2]=~"closed"?0:0

Tomili

Hallo ,

zunächst nebenbei
$fld[2]=~"open"?1:$fld[2]=~"closed"?0:0
reicht auch
$fld[2]=~"open"?1:0

Der Ansatz für Dein Problem (welches ich auch hatte): Das Ergebnis stimmt mit Deinem Log überein.
Das log muss nicht nur geschrieben werden, wenn sich etwas ändert (event-on-change-reading),
sondern immer wenn die Readings gelesen werden (event-on-update-reading).

Konkret heisst das:
attr <dein device> event-on-change-reading state

Ich kann das nicht gut erklären, da ich noch Anfänger bin. Siehe hier:
https://wiki.fhem.de/wiki/Event-on-change-reading

Gruss,
Thomas

rudolfkoenig

Das Problem ist, dass der Filter (HM-SCI-3-FM_Sw_01.*) alle Zeilen zurueckliefert (inkl trigger), aber man will nur open und closed auswerten. Das kann man mit
HM-SCI-3-FM_Sw_01.(open|closed)
erreichen (achtung, ungetestet).
Meiner Ansicht nach ist logProxy in diesem Fall nicht notwendig.

fiedel

#3
2018-02-08_17:39:14 HM-SCI-3-FM_Sw_01 open
2018-02-08_21:43:04 HM-SCI-3-FM_Sw_01 closed


Wenn lange Zeit kein Event kommt, hilft "event-on-update-reading" natürlich auch nicht.
Dann muss man Pseudoevents erzeugen um das ordentlich zu plotten. Das Zauberwort
dafür heißt "addlog".

LogProxy mit predict kann das wohl auch ohne Pseudoevents, aber das kannte ich auch
noch nicht.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

DarkT

Zitat von: rudolfkoenig am 09 Februar 2018, 20:31:33
Das Problem ist, dass der Filter (HM-SCI-3-FM_Sw_01.*) alle Zeilen zurueckliefert (inkl trigger), aber man will nur open und closed auswerten. Das kann man mit
HM-SCI-3-FM_Sw_01.(open|closed)
erreichen (achtung, ungetestet).
Meiner Ansicht nach ist logProxy in diesem Fall nicht notwendig.

Das kannst du übrigens auch an deinem SVG Output sehen, denn da stehen für jeden Zeitstempel 3 Einträge
1. für open/close -> wird korrekt ausgewertet
2. die CUL meldung -> wird fehlerhaft zu 0 ausgewertet
3. die triffstCnt Meldubg -> fehlerhaft zu 0

Hast also nach jeder 1 direkt 2x 0 => nur Spitzen in der Ausgabe

aaameyer

Vielen Dank für die zielführenden Antworten, als kurze Rückmeldung und für alle die auch das gleiche Problem haben und auf diesen Beitrag stoßen:

Das Problem gelöst hat die Antwort von @rudolfkoenig, jedoch ist die Erklärung von @DarkT sehr gut, da ich jetzt auch verstanden habe warum das so ist.

Die Problemelösung mit "event-on-update-reading" konnte ich noch nicht ausprobieren, da der Schalter tatsächlich bei mir sehr selten betätigt wird. Pseudoevents brauche ich aber nicht, da hier logProxy mit predict und extend sehr gut funktioniert.

Die regex mit "$fld[2]=~"open"?1:0" ist natürlich ausreichend, meine Variante im ersten Post war mehr eine Verzweifelungstat bei der Fehlersuche.

Raspitti

#6
Hallo,

habe nach einem fhem update von v5.7 auf v5.9 das selbe Problem wie aaameyer, dass der Plot alle 3 Einträge
pro Zeitstempel auswertet, aber nur der erste relevant ist.

rudolfkoenig hat geschrieben, dass "HM-SCI-3-FM_Sw_01.(open|closed)" den Filter einschränkt.

Nur wo kann ich das auswählen? Im Ploteditor habe ich bei Input:....,Regexp,... per Dropdown-Menü nur die Auswahl:
xx.* / xx.open / xx.closed usw. aber keine Möglichkeit, xx.(open|closed) direkt einzugeben.

Gibt es eine Möglichkeit, das direkt zu editieren?

Vielen Dank!

rudolfkoenig

Zitatrudolfkoenig hat geschrieben, dass "HM-SCI-3-FM_Sw_01.(open|closed)" den Filter einschränkt.
Nur wo kann ich das auswählen? Im Ploteditor habe ich bei Input:....,Regexp,...
In der Regexp Spalte

ZitatGibt es eine Möglichkeit, das direkt zu editieren?
Weiss nicht genau, was mit "das" gemeint ist, die .gplot Dateien sind in www/gplot zu finden.

Raspitti

Hallo rudolfkoenig,

danke für Deine Antwort; ich komme aber trotzdem noch nicht weiter.

hier der Ploteditor:
https://drive.google.com/open?id=1kyO7Z_IiBkBSJ9ybsDi5qZwMisw12FR_

In der Regexp Spalte habe ich nur die Auswahlmöglichkeiten:
Regen.*
Regen.GetG1:
Regen.last-sender:
Regen.off
Regen.on

jedoch nicht das von dir beschriebene:
Regen.(open|closed)  bzw.  Regen.(on|off)

die zugehörige gplot Datei ist hier (in txt umbenannt):
https://drive.google.com/open?id=192w0snBM-TCnOB4Q0QNmrDCdWs7B8xLu

An welcher Stelle könnte ich den Filter "Regen.(on|off)" eintragen?

Vielen Dank!

rudolfkoenig

Sorry, habe wohl nicht aufmerksam gelesen: Im Plot-Editor kann man nur die einfachen Regexps auswaehlen.
Am besten einen bestimmten auswaehlen, speichern, die erstellte/modifizierte .gplot Datei editieren (entweder per Editor im /opt/fhem/www/gplot/ Verzeichnis, oder in FHEMWEB unter "Edit files"), in der Datei die FileLog-Zeile suchen, und den aus dem Plot-Editor bekannten Regep ersetzen.

Raspitti

Hallo rudolfkoenig,

danke für die Mühe; ich sehe aber wohl den Wald vor lauter Bäumen nicht;
hier die gplot Datei:


# Created by FHEM/98_SVG.pm, 2018-12-28 17:14:22
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title '<TL>'
set ytics ("nass" 1, "trocken" 0)
set y2tics
set grid ytics
set ylabel "Humidity"
set y2label "Temperature"
set yrange [-0.1:1.1]

#FileLog_Regen 3:Regen.*:0:$fld[2]=~"on"?1:0

plot "<IN>" using 1:2 axes x1y1 title 'Regen' ls l0 lw 1 with step


An welcher Stelle könnte ich den Filter "Regen.(on|off)" eintragen?

Vielen Dank!

rudolfkoenig

Du musst die FileLog Zeile aendern, in etwa so:#FileLog_Regen 3:Regen.*(open|closed):0:$fld[2]=~"open"?1:0

Der PlotEditor bietet dir die Moeglichkeit, die durch : getrennte Werte einzeln einzugeben, die ersten 6 Eingabefelder pro Linie setzen diese Zeile.
Die anderen Felder ersetzen Werte in der plot Zeile.

Raspitti

Hallo rudolfkoenig,

der Stern nach 3:Regen.* musste noch weg, nun passt es,
prima.

Mit # beginnen aber doch eigentlich Kommentarzeilen...?

Wie schon gesagt, habe ich das Problem seit fhem Update von v5.7
mit allen Plots, welche digitale Ereignisse (0/1) auswerten,
weil ja jetzt pro Ereignis bzw. Zeitstempel 3 Einträge geschrieben werden.

Wird es da noch eine Änderung im Ploteditor geben, um nicht die gplot
Datei direkt editieren zu müssen?

Übrigens noch vielen Dank überhaupt für das Projekt fhem; tolle Arbeit!