... ich schon wieder ...
Ich habe mich jetzt zwei Tage durch diverse HowTo's gewühlt, Einsteiger- Info's gewälzt und Kommando- Refferenzen gelesen, aber weiter hat mich das nicht gebracht; ich bekomme es nicht hin, weil ich es einfach nicht verstehe...
Wärend meiner Einsteigerphase und dem Rumprobieren ist (wie in einem anderen Thread zu lesen) der längst vergessene Aussensensor wieder in den Fokus gerückt. Und da der nun mal da ist, würde ich dessen daten natürlich gerne in FHEM darstellen und loggen. Dazu gibt es ja auch reichlich HowTo's, aber funktioniert hat hier tatsächlich nichts.
Im Eventlog zeigt FHEM den Sensor wie folgt an, wobei diese Sequenz ca. alle 60 Sekunden kommt:
2015-11-18 09:41:35 CUL_TX CUL_TX_86 temperature: 9.4
2015-11-18 09:41:37 CUL_TX CUL_TX_86 T: 9.4 H: 80.0
2015-11-18 09:41:37 CUL_TX CUL_TX_86 humidity: 81.0
Ich habe den dann in "AS.TH.1" umbenannt (AussenSensor.TempHum.1), da ich meine, ich habe irgendwo noch welche davon... Das sieht dann erst einmal so aus:
define AS.TH.1 CUL_TX 86
attr AS.TH.1 alias Wetter.1
attr AS.TH.1 group Temperaturen
attr AS.TH.1 icon temperature_humidity
attr AS.TH.1 room Temperaturen
Im Eventlog wird das jetzt schon mal mit dem neuen Namen angezeigt; immerhin ^^ Im Raum "Temperaturen" ist er nun auch zu finden und "Internals / Readings" schauen aus wie im beigefügten Bildchen.
Wenn ich jetzt nun eine vernünftige Anzeige haben möchte und einen Graphen, dann muss ich ja zumindest für den Graphen ein Logfile generieren, in dem die gelieferten Daten gespeichert werden. Und genau daran scheitere ich mangels Verständnis der vermeintlich notwendigen Funktion "ReadingsVal".
Ich habe schon bestimmt 30 verschiedene Konstrukte aus diversen HowTo's verwendet, alle ohne Ergebnis. Das letzte Konstrukt, dach dessen Fehlschlag ich erst mal aufgegeben habe, schaut so aus:
define Aussensensor1 dummy
define THdummy at +*00:01:00 { my $d= ReadingsVal("AS.TH.1","state",0);; fhem("set TH1 $d")}
define FileLog_Aussensensor1 FileLog ./log/Aussensensor1-%Y-%m-%d.log Aussensensor1
attr FileLog_Aussensensor1 logtype text
attr Aussensensor1 event-on-change-reading state
Auch hier, wie in so vielen anderen Versuchen, erhalte ich gerade mal eine 0byte- Logdatei, die aber nicht gefüllt wird.
Könnte mir da mal wer weiter helfen?
Was ich mal zum Thema "Hilfe zur Selbsthilfe" loswerden möchte:
Alles was ich bisher habe lesen können bietet diverse Codeschnippsel an, die natürlich oft sehr hilfreich sind, um zu sehen, wie andere eine Aufgabe gelöst haben. Was ich aber nigends finden konnte ist, z.B. zu solch m.E. grundlegenden Funktionen wie oben, wie genau die funktionieren, welchse Variable von wem und wohin gehen, wie genau die empfangenen Daten "abgegriffen" werden, um auch das zu erhalten, was man möchte und all diese Dinge.
Natürlich haben die Anwesenden, die sich vorher und aktuell sowieso schon mit PERL beschäftigen damit viel weniger Verständnisprobleme wie einer wie ich, für den das alles Neuland ist. Ich für meinen Teil komme oft ganz alleine weiter, wenn ich denn irgendwie eine Möglichkeit finde, das im Einzelnen von der Basis aus zu verstehen. Durch die vielen HowTo's stöbern und nach dem Try&Error Prinzip per Copy&Past&Edit zum Ergebnis kommen hilft ja manchmal weiter, aber die gewonnenen Erkenntnisse bleiben dabei meisst ganz an der Oberfläche; mir geht es zumindest so...
Was ich auch als Problem ansehe ist, das dieses Forum hier täglich so extrem viele Beiträge generiert, das man ganz schnell den Überblick verliert. Im Umkehrschluss ist natürlich zu verstehen, das die anwesenden Profis auf Grund der Masse kaum noch mit Hilfestellungen hinterher kommen, an der Masse ebenso ersticken und keine Lust mehr haben, die immer wieder auftauchenden und sich i.d.R. ähnelnden Anfängerfragen aufzulösen. Auch entwickeln sich ehemalige Anfänger weiter zu Profis und sind dann nur noch unter Ihresgleichen unterwegs, so das auch da nicht mehr (so oft) Zeit und Lust über ist, den Anfängern zu helfen. Aber diese Abläufe finden sich in jedem Forum wieder.
Daher erachte ich es als enorm wichtig, nicht nur die Kommandorefferenzen und vorhandenen Einsteigerinfos zu generieren, sondern vor allem Erklärungen der Zusammenhänge zu zumindest den wichtigen Kommandos und Funktionen abzulegen, damit eben die Anfänger in der Lage sind, sich selber zu helfen und somit auch das Forum entlasten.
Man möge das bitte nicht als Mecker oder einen sonstwie gearteten Angriff werten. Das ist von mir als Anregung und hoffentlich konstruktive Kritik gedacht und stellt lediglich meine derzeitige Sicht der Dinge dar; jeder Leser mag das anders sehen...
Zitat von: M_I_B am 19 November 2015, 08:38:48
define AS.TH.1 CUL_TX 86
attr AS.TH.1 alias Wetter.1
attr AS.TH.1 group Temperaturen
attr AS.TH.1 icon temperature_humidity
attr AS.TH.1 room Temperaturen
Wenn ich jetzt nun eine vernünftige Anzeige haben möchte und einen Graphen, dann muss ich ja zumindest für den Graphen ein Logfile generieren, in dem die gelieferten Daten gespeichert werden. Und genau daran scheitere ich mangels Verständnis der vermeintlich notwendigen Funktion "ReadingsVal".
define FileLog_AS.TH.1 FileLog ./log/AS.TH.1-%Y.log AS.TH.1
Mehr brauchst Du erstmal nicht, damit die Events von AS.TH.1 geloggt werden.
Wenn Du Dir eine bessere/andere Dokumentation wünscht, dann würde ich vorschlagen, dass Du damit selbst anfänst und Deine Erkenntnisse in Doku/Wiki einfließen läßt.
Zitatdefine FileLog_AS.TH.1 FileLog ./log/AS.TH.1-%Y.log AS.TH.1
Jupp, dat geit! Habe ich zu kompliziert gedacht?
Ok, damit ich das verstehe:
Ich definiere "FileLog_AS.TH.1". Sind das nun zwingende Schreibweisen, oder könnte da alles mögliche stehen und stellt nur einen Namen dar?
Dahinter kommt "FileLog", was der Definiton beibiegt, was genau gemacht werden soll (ein Log schreiben)?
... Pfad und Dateiname is klar ...
Und ganz am Schluss "AS.TH.1" als Vorgabe, woher die Daten kommen sollen?
Also: define [Name] [Funktion[Datei]] [Quelle] ???
Jetzt habe ich im Log folgendes stehen:
...
2015-11-19_09:08:01 AS.TH.1 humidity: 68.0
2015-11-19_09:09:07 AS.TH.1 T: 10.3 H: 68.0
2015-11-19_09:09:07 AS.TH.1 temperature: 10.4
2015-11-19_09:09:09 AS.TH.1 T: 10.4 H: 68.0
2015-11-19_09:09:09 AS.TH.1 humidity: 67.0
2015-11-19_09:10:15 AS.TH.1 T: 10.4 H: 67.0
2015-11-19_09:10:15 AS.TH.1 temperature: 10.4
2015-11-19_09:10:17 AS.TH.1 T: 10.4 H: 67.0
...
Ich benötige allerdings nur die Zeile "T: 10.4 H: 67.0". Der Rest bläht das Log ja nur unnötig auf, erst recht, wenn weitere Sensoren dazu kommen. Dann müsste ich diese Zeile von Dir um einen Filter (wie?) erweitern?
ZitatWenn Du Dir eine bessere/andere Dokumentation wünscht, dann würde ich vorschlagen, dass Du damit selbst anfänst und Deine Erkenntnisse in Doku/Wiki einfließen läßt.
Das mache ich sehr gerne (und tue es schon in anderen Zusammenhängen). Aber dazu muss ich erst einmal so weit sein, das ich auch was Schreiben kann, was auch anderen Hilfesuchenden von Nutzen sein kann. Derzeit könnte ich höchstens was darüber schreiben, wie's nicht geht ;)
Zitat von: M_I_B am 19 November 2015, 09:20:10
[Quelle] ???
http://fhem.de/commandref.html#FileLog
Zitat von: M_I_B am 19 November 2015, 09:20:10
Ich benötige allerdings nur die Zeile "T: 10.4 H: 67.0".
Normalerweise mit:
define FileLog_AS.TH.1 FileLog ./log/AS.TH.1-%Y.log AS.TH.1:T.*
Aber glaube mich daran zu erinnern, dass diese "T" Zeile irgendwie ein Sonderfall ist/war. Wenns nicht tut, dann kannst Du noch mal folgendes versuchen:
define FileLog_AS.TH.1 FileLog ./log/AS.TH.1-%Y.log AS.TH.1:state.*
Wenn Dir diese ganzen Schreibweisen nichts sagen, dann kannst Du dir mal Reguläre Ausdrücke (https://wiki.selfhtml.org/wiki/Perl/Regul%C3%A4re_Ausdr%C3%BCcke) ansehen.
... erst mal vielen Dank! Das hilft mir enorm weiter; so langsam finde ich einen Faden, dem ich folgen kann...
Also... Ich habe es gerade mal durchprobiert. Mit :T.* funktioniert es, auch wenn ich die Einträge dann jeweils doppelt habe (weil er die doppelt sendet), mit :state.* funktioniert es nicht. Da bleibt das Log leer. Also genau umgekehrt zu Deiner Vermutung...
An RegEx bin ich vor Jahren schon mal gescheitert in Verbindung mit PHP. Aber offensichtlich komme ich da nicht drum rum; ich werde mich damit noch mal intensiv auseinander setzen müssen...
Zitat von: M_I_B am 19 November 2015, 20:52:48
Mit :T.* funktioniert es, auch wenn ich die Einträge dann jeweils doppelt habe (weil er die doppelt sendet)
Dann schau Dir mal folgende Attribute an:
Events nur generieren, wenn eine Änderung vorliegt:
event-on-change-reading
Und, in Kombination mit event-on-change-reading, Events auch nach x Sekunden generieren, auch wenn keine Änderung vorliegt:
event-min-interval
Alternativ gibt es auch: event-aggregator
Ich rate Dir die Einsteigerdokus (nochmals) und zu lesen und Dich mit der Commandref vertraut zu machen.
Hier findest du leichtverdauliches zu Regulären Ausdrücken:
https://www.danielfett.de/internet-und-opensource,artikel,regulaere-ausdruecke
Im Netz gibt es auch diverse Seiten mit Regex-Testern, dort kannst du online deine Regex prüfen.
VG
Frank
... super Leute! So langsam komme ich weiter und verstehe tatsächlich auch mal nicht nur Bahnhof Kofferklau'n ;) Nun fehlt nur noch reichlich Übung, bis ich auf das nächste Problem stoße... huch! Hätte ich wohl nicht von sprechen dürfen... da ist es schon :(
Nachdem ich das Log mit Eurer Hilfe so hinbekommen und ich auch ein bisschen mit RegEx rumgemacht habe, wollte ich nun mal versuchen, da so einen schicken Graphen hinzuzaubern. Sollte ja nicht so schwer sein, da der Editor dazu ja an vielen Stellen erklärt ist... Denkste... Ich bekomme den gar nicht erst aufgerufen. Ich erhalte sofort ein ...SVG_FileLog_AS.TH.1_1 already defined, delete it first
this is already a unique gplot file
Ok, also suche ich mal überall danach, da ich ganz sicher bin, sowas noch nie deklariert zu haben. In den CFG's ist nix, Dateien gleichen Namens gibt es auch nicht... komisch :o
Also habe ich FHEM mal angehalten, mit "attr eventTypes disable 0" erstmal die EventList ausgehebelt, selbige Liste manuell gelöscht. Zusätzlich habe ich alle Dateien aus /www/gplot mal in Sicherheit gebracht und aus dem Verzeichnis gelöscht. Nun zur Sicherheit noch mal den ganzen PI neu gestartet und FHEM...
Error messages while initializing FHEM:
statefile: Please define SVG_FileLog_AS.TH.1_1 first
Hääää???? Den sollte er doch nun gar nicht mehr kennen?!? Ok, "shutdown restart... wech isser... Also Klich auf "unsortet / FileLog_AS.TH.1 / Create SVG Plot" ...
... und schwups... wieder da der ganze Trum >:(
Und witzig dabei ist auch, das sofort "Save Config ?" zusammen mit der Fehlermelung auftaucht...
Wie geht denn sowas? Aber noch viel wichtiger die Frage, wie man sowas weg bekommt und vor allem in Zukunft vermeidet? Ich habe nämlich nicht die geringste Ahnung, wo FHEM sich das noch herholt; es steht definitiv nirgends mehr...
ZitatSVG_FileLog_AS.TH.1_1 already defined, delete it first
this is already a unique gplot file
Der erste Teil "SVG_FileLog_AS.TH.1_1" in obiger Meldung ist ein anklickbarer Weblink mit dem man im Ploteditor landet. Klick mal darauf.
Ansonsten ist es ein derzeitige "Unschönheit", die ich auch habe und bei der ich kein System entdecken kann.
Gruß, Christian
... stimmt, is ja'n Link ^^ Ok... draufgeklickt habe ich, aber dann kommt zwar der Editor, aber darüber "Cannot read ./www/gplot/SVG_FileLog_AS.TH.1_1.gplot". KLar, kann er ja nicht finden, weil er ja vorher nicht existiert hat und zu Testzwecken das Verzeichnis eh geräumt ist... Und nun?
Gib oben in die Befehlszeile mal:
list TYPE=SVG
ein. Poste mal das Ergebnis.
Mmm. Also bei mir kommt nach Klick auf "Create SVG Plot" die obige Meldung, dann den Link anklicken und ich habe das Gesuchte. Deine Fehlermeldung "Vannot read.." kann ich leider nicht nachvollziehen. Das die SVGs angelegt werden, sehe ich beim ? neben "save config". Meine einzige Idee für Dich: Sind die Rechte im Filesystem richtig gesetzt?
@franky: Kannst Du das "...already defined, delete it first this is already a unique gplot file" evtl. nachvollziehen?
Kommt eigentlich nur, wenn das device noch im state File steht und kein save config ausgeführt wurde sondern ein shutdown restart.
Zitat von: franky08 am 20 November 2015, 21:16:47
Kommt eigentlich nur, wenn das device noch im state File steht und kein save config ausgeführt wurde sondern ein shutdown restart.
Eben nicht. Habe das gerade testweise mal für ein neues Device mit neuen Filelog probiert und passiert bei mir auch dann beim ersten Klick auf "Create SVG Plot". Denke ich muss das mal auf einem Testsystem probieren.
Mmh, kann ich iMo nicht testen habe DbLog bei mir laufen und auf dem Testsystem ist z.Zt. ein anderes OS zum testen drauf.
Zitat... stimmt, is ja'n Link ^^ Ok... draufgeklickt habe ich, aber dann kommt zwar der Editor, aber darüber "Cannot read ./www/gplot/SVG_FileLog_AS.TH.1_1.gplot". KLar, kann er ja nicht finden, weil er ja vorher nicht existiert hat und zu Testzwecken das Verzeichnis eh geräumt ist... Und nun?
Du hast da doch hoffentlich nicht sämtliche gplot Definitionen gelöscht :o
Richtig wäre ja auch:
define <name> FileLog ./log/<name>-%Y-%m.log <Reading>:Regex
VG
Frank
@Frank: Nein, die habe ich natürlich vorher gesichert ;) Ganz so'ne Napfsülze bin ich nun doch nicht ;)
... also ... ich habe es einfach ignoriert, die Überschrift eingetragen und ein gPlot- File erzeugt. Danach war die Meldung weg.
Internals:
CFGFN
DEF FileLog_AS.TH.1:SVG_FileLog_AS.TH.1_1:CURRENT
GPLOTFILE SVG_FileLog_AS.TH.1_1
LOGDEVICE FileLog_AS.TH.1
LOGFILE CURRENT
NAME SVG_FileLog_AS.TH.1_1
NR 90
STATE initialized
TYPE SVG
Attributes:
LogDevice ist ok, aber die SVG_FileLog_AS.TH.1_1.gplot hat er ja gerade erst angelegt (Zeitstempel) und war vorher nie vorhanden. Dennoch war ja das lt. FHEM schon deklariert... nicht von mir zumindest...
Nun gut, es funktioniert ja nun, aus welchen Gründen auch immer^^
EInen habe ich aber noch:
Wie stelle ich die Farbe der Linien ein? Ich möchte ja zwei Linien haben (habe ich inzwischen auch). Aber beide in rot ist doof ^^
Hallo,
wenn Du das SVG aufmachst, sind für die Daten in der Zeile ganz rechts die Einstellungen für rechts / links (man kann rechts und links unterschiedliche Einheiten / Wertebereiche machen) sowie Linie, Steps ...
Darunter die Felder bestimmen die Farbe und das Ausfüllen unterhalb der Linie.
Gruß Christoph
Die Farben stellst du im Ploteditor ein.
Thats what I mean :)
... hauaha, da kommt ja kein Schwein drauf; ich sowieso nicht ^^ Hätte man da nicht einfach den Farbnamen angeben können? ::)
Jetzt muss ich nur noch rausfinden, was man mit "Range as [min:max]" (Skalierung?) und "Tics as ("Txt" val, ...)" (gar keine Ahnung, für was...) macht...
Habe gerade den Screenshot gemacht als du geschrieben hast :)
Hallo,
ZitatRange as [min:max]" (Skalierung?)
korrekt - ich habe z.B. 990:1034 für Luftdruck eingestellt, damit man die Unterschiede besser sieht. Für Feuchtigkeit könnte man z.B. 30:85 für Innenräume nehmen. Wenn da über 85 % ... ist das eher ein Terarium ;)
Gruß Christoph
Zitat von: M_I_B am 20 November 2015, 21:36:23
... hauaha, da kommt ja kein Schwein drauf; ich sowieso nicht ^^ Hätte man da nicht einfach den Farbnamen angeben können? ::)
Jetzt muss ich nur noch rausfinden, was man mit "Range as [min:max]" (Skalierung?) und "Tics as ("Txt" val, ...)" (gar keine Ahnung, für was...) macht...
Beispiele, Erläuterungen werden hier verlinkt: http://www.fhemwiki.de/wiki/Plots_erzeugen
Und die Farben stehen in der zuständigen svg.css
.SVGplot.l0 { stroke:red; }
.SVGplot.l1 { stroke:green; }
.SVGplot.l2 { stroke:blue; }
.SVGplot.l3 { stroke:magenta; }
.SVGplot.l4 { stroke:brown; }
.SVGplot.l5 { stroke:black; }
.SVGplot.l6 { stroke:olive; }
.SVGplot.l7 { stroke:gray; }
.SVGplot.l8 { stroke:yellow; }
Ich bin auch ein Anfänger mit FHEM, nur dass ich im Gegensatz zu M_I_B einen JeeLink und TX-29 DT HT habe, um Temperatur und Feuchte zu messen.
Auch bei mir werden alle 3 Sekunden Messwerte, wie bei M_I_B beschrieben, in das entsprechende Log File geschrieben.
Und so wie er bin ich auch auf ähnlichen Wegen herum geirrt, um diese Flut zu stoppen, damit ich dann einen SVGplot zu erstellen, der nicht Ewig dauert.
Gott sein Dank bin ich dann hier auf diesen Forumsbeitrag gestossen.
Danke an M_I_B für diesen Beitrag und für die, die Geantwortet haben.
mfg
audax