Hallo,
ich hab da mal ne Verständnisfrage:
Ich hab ein Device das mir folgendes in dessen log schreibt:
2013-10-31_23:58:12 myVBUSDevice T1: 10.9 T2: 52.8 T3: 54.6 T4: 56.9 V1: 0
Nun möchte ich den Wert z.B. T3 auslesen und wegschreiben, was ich hiermit gemacht habe
define ez_Warm_Wasser_schreiben notify myVBUSDevice:T1:.* \
{ system(" echo %EVTPART5 > ./log/warmwasser-temperature.txt") }
das funktioniert auch.
Nun aber möchte ich den Wert in einer Floorplan seite darstellen, eigentlich müßte das doch auch mit einem Devicereading oder userreading machbar sein?
define myhotwater dummy
attr myhotwater userReadings { (ReadingsVal("myVBUSDevice","T1:.* { system(" echo %EVTPART5")",0)}
gibt mir immer nur ??? zurück.
Ich versuch das nun sporadisch seit 2 Tagen hinzubekommen, scheitere aber kläglich.
Könntet Ihr mich denkmäßig bitte in die richtige Richtung schubsen?
Herzliche Grüße
Frank
der system aufruf aus ez_Warm_Wasser_schreiben ruft per fork/exec eine shell auf um dann mit echo einen wert ins log file zu schreiben.
in deiner userReadings version verwendest du system um einen nicht existierenden wert per echo ins nirvana zu schreiben. also etwas völlig sinnloses. der system aufruf liefert dir hier als ergebniss 0 zurück und das ist der wert der dann in deinem user reading steht. aber noch nicht mal das weil die syntax auch noch falsch ist.
was du möchtest ist aus dem original reading einen teil extrahieren und diesen dann in ein neues reading schreiben. das geht z.b. so wenn der original wert in state steht:attr myhotwater userReadings T3 {(ReadingsVal("myVBUSDevice","state","")=~m/T3:\s(\d+)/)[0];}
mehr zu perl regulären ausdrücken findest du z.b. hier:http://www.troubleshooters.com/codecorn/littperl/perlreg.htm (http://www.troubleshooters.com/codecorn/littperl/perlreg.htm).
hat dein device wirklich keine getrennten readings für die unterschiedlichen temperaturen?
ansonsten verstehe ich nicht genau warum du werte die eh schon in einem log file stehen noch mal mit ez_Warm_Wasser_schreiben schreibst. wenn du das wirklich brauchst solltest du gleich mit über das user reading machen.
gruss
andre
Hallo Andre,
naja, das ganze hat folgenden Hintergrund:
ich möchte in der angehängten grafik in floorplan die einzelnen WErte aus dem devicelog zu den komponenten zuordnen. Da floorplan aber nur ein reading pro device zuläßt, dachte ich ich könnte/müsste/sollte das mit readings machen können......., da ich damit nicht klarkam, dachte ich, erstmal andersweitig separieren, was ja auch geht, ist aber laufzeittechnisch ungünstig, testweise hatte ich das minutlich gemacht und da brauchte fhem ganz schön lange um ne seite zu laden, was auch immer, im 5 min rythmus ist das problmelos.
Wie auch immer, ich versuch mal mit deinem vorschlag rumzuexperimentieren und sehe mal wie weit ich komme.
Herzlichen Dank
Frank
schau dir mal readingsGroup an.
damit kannst du ein oder mehrere readings von ein oder mehreren devices zusammen fassen und die anzeige wird automatisch per longpoll aktualisiert wenn sich an einem reading etwas ändert.
ein ansatz das über irgend ein log zu machen ist denke ich schon falsch. es gibt keinen grund im floorplan etwas anderes als die aktuellen readings direkt aus dem device anzuzeigen.
gruss
andre
ps: im angehängten screenshot siehst du drei readings von drei unterschiedlichen devices zu einem zusammen gefasst. im screenshot hier http://forum.fhem.de/index.php/topic,15190.msg98470.html#msg98470 (http://forum.fhem.de/index.php/topic,15190.msg98470.html#msg98470) siehst du pro device zwei readings und das state icon das anklickbar ist. wenn du nach readingsGroup suchst wirst du noch mehr beispiele für die möglichkeiten und die formatierung finden.
Hi Andre,
es will mir nicht einleuchten: der Ausdruck myVBUSDevice:T1:.* { system(" echo %EVTPART5 > ./log/warmwasser-temperature.txt") } schreibt wunderbar den Wert in der 5. Spalte in das textfile.
im fhem.log bekomme ich folgende WErte rein:
2013.11.03 14:45:33 4: myVBUSDevice: COLLECTOR: 34.9 (Celsius)
2013.11.03 14:45:33 4: myVBUSDevice: STORAGE: 41.1 (Celsius)
2013.11.03 14:45:33 4: myVBUSDevice: FRESHWATER: 56.8 (Celsius)
2013.11.03 14:45:33 4: myVBUSDevice: HEATING: 28.1 (Celsius)
2013.11.03 14:45:33 4: myVBUSDevice: THROUGHPUT: 0 (l/min)
2013.11.03 14:45:33 4: myVBUSDevice: VENT_STORAGE: 0 (Umin
2013.11.03 14:45:33 4: myVBUSDevice: VENT_HEATING: 0
ich möchte nun ausschliesslich den Wert "Freshwater" in dem Plot anzeigen.
Das wäre nach meinem Verständnis ein Userreading und keine Gruppe?!?
Nur, Dein Vorschlag zeigt mir gar nicht an:
attr myhotwater userReadings T3 {(ReadingsVal("myVBUSDevice","state","")=~m/T3:\s(\d+)/)[0];}
So langsam glaub ich schon dass ich für fhem nicht intelligent genug bin....
Herzliche Grüße
Frank
ich glaube du schmeisst gerade einiges durcheinander.
vielleicht beschreibst und zeigst du mal genau welche readings dein device hat, welche du aus welchem grund selber dazu gebaut hast, was du mit 'im floorplan anzeigen' genau meinst.
- wenn du ein reading in ein log file bekommen möchtest brauchst du kein userReading und kein notify sondern des geht über FileLog.
- wenn du ein logfile hast kannst du jeden wert daraus plotten. egal in welcher zeile oder spalte. egal ob nur einen bestimmten oder alle.
- die logfiles zum plotten müssen ein bestimmtes format haben. da reicht ein einfaches echo nicht aus.
- wenn du eine zahl im floorplan anzeigen möchtest geht das nicht über log files.
gruss
andre
Hi Andre,
ich hab zunächst ein FileLog wie im Anhang.
Nun möchte ich quasi "in" der Zeichnung den Wert und nur den, des jeweiligen Logwertes neben/über/unter dem Namen anzeigen.
T1: ist meine Kollektortemperatur
T2: ist meine Schichspeicher unten Temperatur
T3: .......usw
Der beautycontest könnte dann beim klick auf den Wert die History des Wertes aufzurufen, z.B 24h/7T/xW
Herzliche Grüße
wenn du nur einen wert in die zeichnung einblenden willst ist der umweg über das log falsch. die werte sind doch schon als reading irgendwo in einem device. die musst du dich nicht erst raus schreiben und dann später wieder einlesen nur um sie anzuzeigen.
schau dir z.b. die readingsGroup an und meinen screenshot von oben.
gruss
andre
genau das hab ich versucht,
define myhotwater readingsGroup Type=myVBUSDevice:state,temperature {(ReadingsVal("myVBUSDevice","state","")=~ m/T3:\s(\d+)/)[0]}
aber angezeigt wird nichts.
gut möglich, dass ich das nicht richtig einlese, wegen der Leerzeichen etwa?
Herzliche Grüße
Frank
das user reading beispiel von oben ist dafür ein T3 reading zu erzeugen wenn es das nicht schon gibt.
attr myhotwater userReadings T3 {(ReadingsVal("myVBUSDevice","state","")=~m/T3:\s(\d+)/)[0];}
die passende readingsGroup schaut dann z.b. so aus:define myhotwater readingsGroup Type=myVBUSDevice:state,temperature,T3
oder zum testen vielleicht erst mal so: define myhotwater readingsGroup Type=myVBUSDevice:.*
du schmeisst immer noch einige begriffe durcheinander. vielleicht schaust du dir mal das einsteiger pdf http://fhem.de/Heimautomatisierung-mit-fhem.pdf (http://fhem.de/Heimautomatisierung-mit-fhem.pdf) und dann die jeweiligen abschnitte in der command ref an um die begriffe auseinander zu bekommen.
gruss
andre
Hallo Andre,
das mag sein, ic hbin ja noch recht unbedarft was fhem angeht. Danke für die Hinweise.
Leider geht das immernoch nicht, ich glaub da sind noch andere Fehler drin
ich hab das groupReading angelegt, im Screenshot sieht du beide readings, aus dem vbus reading brauche ich ja nur einen wert.
wenn ich aber myVBUSDevice anklicke dann schmiert mir fhem ab mit der fehlermeldung:
Undefined subroutine &main::VBUS_Get called at fhem.pl line 2601.
Sonst könnte ich ja da nachsehen.......
Herzliche Grüße
Frank
was ist das vbus ding für ein device? wo kommst das modul dafür her? ich würde sage es ist unvollständig.
ich denke du solltest schrittweise vorgehen:
- zuerst sollte das vbus device richtig funktionieren
- wenn dort readings fehlen solltest du sie dort hinzufügen
- danach kannst du z.b. mit readingsGroup ein oder mehere der readings im floorplan einblenden
- wenn alles was du möchtest im log file ist kannst du etwas plotten
gruss
andre
Sodale,
nun ist es in dem Format, wie ich es haben wollte, noch ein paar Kosmetiksachen zu machen, aber im Groben steht es.
Nochmal meinen ausdrücklichen Dank an Andre für seine Hilfe. Als ich dann endlich ein funktionierendes OS hatte, ging auch alles, was er meinte ;-)
Herzliche Grüße
Frank
Irgendwie ist die Suchfunktion optimierungsbedürftig. Ohne Wildcards kommt kaum ein ergebnis oderje nachdem wo die wildcard steht unterschiedliche......
Ich wollte nun die Werte meiner beiden EM1000s in einem reading am besten gleich addieren.
Gibts dazu evtl ein Beispiel?
Herzliche GRüße
Frank