devicereading oder userreading?

Begonnen von mahlzeit24/7, 01 November 2013, 09:42:27

Vorheriges Thema - Nächstes Thema

mahlzeit24/7

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

justme1968

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.

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

mahlzeit24/7

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

justme1968

#3
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 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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

mahlzeit24/7

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

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

mahlzeit24/7

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


justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

mahlzeit24/7

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

justme1968

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 und dann die jeweiligen abschnitte in der command ref an um die begriffe auseinander zu bekommen.

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

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

mahlzeit24/7

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

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

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

mahlzeit24/7

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

mahlzeit24/7

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