logProxy modul zum manipulieren und ergänzen von SVG plots

Begonnen von justme1968, 26 August 2014, 22:47:55

Vorheriges Thema - Nächstes Thema

justme1968

@igami: ich bin leider noch nicht dazu gekommen. habe immer noch ein hardware problem.

@DerFrickler:ich bin nicht ganz sicher was du meinst. du kannst mit zwei ConstY linien einen horizontalen streifen zeigen. du kannst ihn nur nicht einfärben. wenn du ein bisschen bastelst kannst du mit Func ein geschlossenes gefülltes rechteck zeichnen.


gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

DerFrickler

Zitat von: justme1968 am 09 Juni 2015, 23:55:46
@DerFrickler:ich bin nicht ganz sicher was du meinst. du kannst mit zwei ConstY linien einen horizontalen streifen zeigen. du kannst ihn nur nicht einfärben. wenn du ein bisschen bastelst kannst du mit Func ein geschlossenes gefülltes rechteck zeichnen.

ja, dieses eingefärbte Rechteck meinte ich, hatte es halt nur als Wertebereich bezeichnet.

Gruß!

justme1968

ab morgen gibt es eine logProxy_values2Plot funktion mit der es einfach möglich so etwas zu machen.

#logProxy Func:logProxy_values2Plot([[$from,19],[$to,19],[$to,21],[$from,21]])

das komplette beispiel ist im wiki: http://www.fhemwiki.de/wiki/LogProxy#Einf.C3.BCgen_von_Zonen

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968


daschauher

Hallo Zusammen,

in einem Logfile logge ich die Zustände meiner Fenstersensoren mit, damit ich sie in einem Plot darstellen kann.
Soweit so gut. Seit ich ein bischen rumgebastellt habe und meine Fenstersensoren (5 Stück im Problemraum) mit einem einzigen Wandthermostat gepeert habe, damit z.B. im Winter beim öffnen eines Fensters die Solltemperatur automatisch runter gestellt wird, funktioniert einwandfrei, seitdem habe ich im Logfile folgende Einträge:
2015-08-03_15:12:20 EG_Kontakt_Tuere_mitte open
2015-08-03_15:12:20 EG_Temp_WZ_WindowRec trigLast: EG_Kontakt_Tuere_mitte:open

Die erste Zeile ist in Ordnung und auch so gewollt, aber die zweite Zeile stört ungemein. Bei einer Logproxy abfrage wie folgend, führt die zweite Zeile zu einer Fehldarstellung.
#MyLogProxy FileLog:Fenster_FileLog,predict:3:EG_Kontakt_Tuere_mitte.*::$fld[2]=~"closed"?16:17
habe auch schon versucht das ganze abzufangen mit einer erweiterten abfrage wie:
#MyLogProxy FileLog:Fenster_FileLog,predict:3:EG_Kontakt_Tuere_mitte.*::$fld[2]=~"closed"?16:$fld[2]=~"open"?17:$fld[2]=~"tilted"?17:0
aber so funktioniert das leider nicht.

Hat jemand eine idee was ich hier machen kann?
oder warum überhaupt dieses "EG_Temp_WZ_WindowRec" im Log steht wenn meine definition so aussieht:
define Fenster_FileLog FileLog ./log/Fenster-%Y-%m.log EG_Kontakt_Tuere_mitte:(closed|open|tilted)|EG_Kontakt_Tuere_rechts:(closed|open|tilted)|EG_Kontakt_Tuere_links:(closed|open|tilted)|EG_Kontakt_Fenster_links:(closed|open|tilted)|EG_Kontakt_Fenster_rechts:(closed|open|tilted)
so wie es aussieht kommt das WindowRec auch nur bei dem Kontakt mit dem namen "EG_Kontakt_Tuere_mitte", aber nicht bei den anderen 4 Stück.

tut mir leid, aber ich weiß nicht weiter, bin um jeden tipp dankbar

gruss
markus

frank

das liegt am filelog-modul. dort gibt es ja 2 methoden eine regex zu bauen. entweder 1. "device:reading" oder 2. eine echte regex auf das reale event. bei komplexeren regex, so wie bei dir, habe ich auch manchmal seltsame ergebnisse, wenn ich beide methoden "mische". seitdem ich konsequent die 2. methode nutze, funktioniert es eigentlich immer.

also mach mal aus dem doppelpunkt im filelog def einen einfachen punkt (für das reale leerzeichen), denn ein doppelpunkt gibt es im event nicht.

gruss frank
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

justme1968

das liegt nicht am logProxy modul sondern an der art wie fhem die column-spec zeile parsed. es wird an jedem : gesplittet. d.h. der : darf ausser zum trennen der column-spec komponenten nirgendwo auftauchen.

wie frank geschrieben hat kannst du einen . verwenden oder falls das mal nicht reicht geht auch \x3a anstelle des :

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

daschauher

#277
Hallo und vielen Dank gleich mal für die schnelle Hilfe und gute Erklärung, hört sich soweit alles logisch an.

Habe es sofort ausprobiert, aber irgendwie ändert sich nicht viel. Vermutlich habe ich etwas falsch verstanden :)
Wenn ich die Änderung im def vom filelog mach, dürfte es doch dort eigentlich gar nicht mehr gelogt werden.
Das tut es aber noch.
Hier ist nochmal meine geänderte komplette def:
define Fenster_FileLog FileLog ./log/Fenster-%Y-%m.log OG_Kontakt_Ki_Sud.(closed|open|tilted)|OG_Kontakt_Ki_Nord.(closed|open|tilted)|OG_Kontakt_SZ.(closed|open|tilted)|EG_Kontakt_WC.(closed|open|tilted)|EG_Kontakt_Tuere_mitte.(closed|open|tilted)|EG_Kontakt_Tuere_rechts.(closed|open|tilted)|EG_Kontakt_Tuere_links.(closed|open|tilted)|EG_Kontakt_Fenster_links.(closed|open|tilted)|EG_Kontakt_Fenster_rechts.(closed|open|tilted)|OG_Kontakt_Flur.(closed|open|tilted)|XX_Reserve_Kontakt.(closed|open|tilted)
attr Fenster_FileLog room Logfile

im Logfile selber steht dann immer noch:
2015-08-04_18:00:40 EG_Temp_WZ_WindowRec trigLast: EG_Kontakt_Tuere_links:tilted
2015-08-04_18:00:41 EG_Temp_WZ_WindowRec trigLast: EG_Kontakt_Tuere_links:tilted
2015-08-04_18:00:54 EG_Kontakt_Tuere_links closed
2015-08-04_18:00:54 EG_Temp_WZ_WindowRec trigLast: EG_Kontakt_Tuere_links:closed
2015-08-04_18:00:54 EG_Temp_WZ_WindowRec trigLast: EG_Kontakt_Tuere_links:closed
2015-08-04_18:03:53 EG_Kontakt_Tuere_links closed
2015-08-04_18:06:42 EG_Kontakt_Tuere_mitte closed
2015-08-04_18:06:42 EG_Temp_WZ_WindowRec trigLast: EG_Kontakt_Tuere_mitte:closed
2015-08-04_18:07:04 EG_Kontakt_Tuere_mitte open
2015-08-04_18:07:04 EG_Temp_WZ_WindowRec trigLast: EG_Kontakt_Tuere_mitte:open
2015-08-04_18:07:24 EG_Kontakt_Tuere_mitte closed
2015-08-04_18:07:24 EG_Temp_WZ_WindowRec trigLast: EG_Kontakt_Tuere_mitte:closed
2015-08-04_18:08:00 EG_Kontakt_Tuere_mitte open
2015-08-04_18:08:00 EG_Temp_WZ_WindowRec trigLast: EG_Kontakt_Tuere_mitte:open

im event Monitor kommen folgende Meldungen an:
2015-08-04 18:07:24 CUL_HM EG_Kontakt_Tuere_mitte closed
2015-08-04 18:07:24 CUL_HM EG_Temp_WZ_WindowRec trigLast: EG_Kontakt_Tuere_mitte:closed
2015-08-04 18:07:24 CUL_HM EG_Temp_WZ_WindowRec trig_EG_Kontakt_Tuere_mitte: closed


Bedeutet ein . wirklich ein Leerzeichen oder ist es ein Platzhalter für irgendein Zeichen incl. dem Leerzeichen?
Und was sagt \x3a aus, ist das dann ein Platzhalter ausschließlich für ein Leerzeichen?

gruss
markus

justme1968

. ist platzhalter für irgendein zeichen. \x3a für einen :

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

daschauher

ok, danke  :)
und was habe ich jetzt für möglichkeiten?
wenn ich den punkt ganz weglasse geht es auch nicht.

Ich könnte vielleicht im EG_Temp_WZ_WindowRec ein attribut mit event-on-change state setzen, da state immer unknown ist würde das trigLast keine event mehr auslösen und somit vielleicht keinen eintrag mehr im logfile machen. die frage die ich mir dabei stelle ist ob das noch im bereich einer schönen lösung ist, wenn man die events unterbindet.

was mir auf meiner wissenebene noch einfällt wäre ein dummy das über ein notify die logeinträge schreibt, wobei sich mir auch hier die frage stellt ob es nicht nur die umgehung des problems anhand mangelnden wissens meinerseits ist und es eine viel simplere lösung gibt.

als dritten lösungsansatz, der auch nicht funktioniert hat, habe ich versucht die zeile im gplot zu verändern.also aus der if else eine if elseif else abfrage versucht zu machen. hier wurde aus dieser zeile:
#MyLogProxy FileLog:Fenster_FileLog,predict:3:EG_Kontakt_Tuere_mitte.*::$fld[2]=~"closed"?16:17
diese:
#MyLogProxy FileLog:Fenster_FileLog,predict:3:EG_Kontakt_Tuere_mitte.*::$fld[2]=~"closed"?16:$fld[2]=~"open"?17:$fld[2]=~"tilted"?17:0

in welche richtung würdet ihr gehen um zum ziel zu kommen?

gruss markus

frank

ich würde im filelog mal probieren "[\s]" statt dem punkt. in der hoffnung, dass es ein leerzeichen beschreibt. vielleicht kann man auch vor jedem devicenamen das anfangzeichen "^" setzen. dann sollten die triggerdaten auch verschwinden, falls fhem es schluckt.
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

daschauher

coole sache...es geht...vielen vielen dank!!

mit "[\s]" ging nicht viel bis gar nichts, aber "^" funktioniert top. dann muss ich jetzt quasi hoffen dass sich irgendwann nicht mal was in fhem ändert und es dann nicht mehr funktioniert. ich lass mich mal überraschen...

danke frank und auch andre

grüsse
markus

Bartimaus

Zitat von: justme1968 am 09 November 2014, 21:40:01
ein kurzes update zwischendurch: ich denke/hoffe das ich nächste woche eine version so weit habe bei der die werte die rechts und links über den plotbereich hinaus gehen sauber abgeschnitten werden und der plotabriss dann ohne addLog sauber vermieden werden kann.

bis dahin noch eine kurze spielerei mit der idee von hier: http://forum.fhem.de/index.php/topic,23912.0.html zum plotten der sonnenauf- und -untergangszeit. aber ohne zu loggen sondern 'live' berechnet.

dahinter steckt eine logProxy_Func2Plot funktion der man beliebige andere funktionen übergeben kann die dann wiederholt für die einzelnen punkte in einem plot aufgerufen wird. die anzahl der aufrufe ist konfigurierbar und hängt im default fall vom zoomfaktor ab. d.h. bei einem jahres- und monatsplot wird der wert täglich bestimmt, bei wochen- und tagesplot stündlich, usw.

die relevante teil der plot definition sieht dann so aus:

#logProxy Func:logProxy_Func2Plot($from,$to,'{hms2dec(sunrise_abs_dat($sec))}')
#logProxy Func:logProxy_Func2Plot($from,$to,'{hms2dec(sunset_abs_dat($sec))}')
                                                             
plot "<IN>" using 1:2 axes x1y1 title 'Sonnenaufgang' ls l2 lw 1 with steps,\
plot "<IN>" using 1:2 axes x1y2 title 'Somnnenuntergang' ls l0 lw 1 with steps

gruss
  andre

edit: die aktuelle Version ist im wiki beschrieben: http://www.fhemwiki.de/wiki/LogProxy#Sonnenauf-_und_-untergangszeiten_plotten

Danke, tolle Sache. Habe ich jetzt auch so hinbekommen, bis auf das "Label". Könntest Du mir hierzu nen Tip geben ?
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

justme1968

was genau geht denn nicht?

schau in die aktuelle fhem.cfg.demo. da ist das beispiel komplett mit drin.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Bartimaus

Du hast hier in dem Beispiel die Überschrift mit dem frühesten Sonnenaufgang nebst Datum sowie Sonnenuntergang definiert.
Da brauche ich nen Tip wie ich das Attribut "Label" befülle.

Mit fhem.cfg.demo weiss ich grad nicht genau was Du meinst. Noch nie von gehört...
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly