Hallo zusammen,
ich scheitere gerade an einem Split!!! :'(
Ich habe ein Reading (senrows_13_status) mit folgendem Inhalt: {WEB_MSG_DEGREE}21.45{WEB_MSG_HUMI}50
Nun wollte ich es "kurz" mit split in zwei userReadings aufteilen. Da die klassische Variante nicht mit digit (\d) funktioniert, habe ich mich auf die Suche gemacht und
bin auf Posts gestossen, die Damians Methodik anwenden. Kurzum, kann man das so überhaupt machen:
attr <device> userReadings SZ_Temp {[<device>:senrows_13_status:"(\d).(\d)":$0]}
Viele Grüße!
Du musst komplett in Perl arbeiten. Damit ist auch das Perl split gemeint. Also die Funktion
... und Klammersetzung üben...
(Ich werde den Eindruck nicht los, dass die Syntax mancher Module die User komplett aus der Bahn wirft, wenn sie mal was anderes brauchen, und set magic scheint das auch nicht besser zu machen...)
Zur Abwechslung mal kompletter Code-Versuch - ganz ohne split, nur regex:
attr <device> userReadings SZ_Temp:senrows_13_status.* { $event =~ m/.WEB_MSG_DEGREE.([\d.]+)/;;$1}, SZ_Hum:senrows_13_status.* { $event =~ m/.WEB_MSG_HUMI.([\d.]+)/;;$1}
Wenn du wissen willst, was das im Detail macht, sieh auf https://regexr.com/ nach.
Ein paar Anmerkungen noch: userReadings ohne Trigger sind nicht optimal, und auch die Benennung der userReadings würde ich überdenken, es sei denn, das Device kennt wirklich andere Temperatur- und Humidity-Werte. Wenn nicht, würde ich "temperature" und "humidity" nehmen - das fügt sich nämlich erfahrungsgemäß am besten in die "allgemeine Landschaft" ein.
Hallo ihr 2,
danke für die klärenden Worte.
Ganz ehrlich, manchmal hauen mich die verschiedenen Syntaxen und Module, die es in FHEM gibt, aus der Bahn!
Ich mache mich nochmal an die klassische Variante, dann gerne auch die Lösung von Beta-User, auf die ich evtl. irgendwann nächstes Jahr gekommen wäre. ;)
@Beta-User:
Zitat... und Klammersetzung üben...
Wegen ..."(\d.\d)"...?
ZitatuserReadings ohne Trigger sind nicht optimal
Warum? Wegen der automatisierten Ausführung?
Zitat von: twinFHEM am 19 Februar 2020, 16:46:48
@Beta-User:Wegen ..."(\d.\d)"...?
Nein, wegen der eckigen Klammern. Die hatten da nichts verloren (jedenfalls an der Stelle ziemlich außen).
ZitatWarum? Wegen der automatisierten Ausführung?
Yep. Es macht keinen Sinn, alle userReadings immer neu zu berechnen, wenn sich irgendein völlig irrelevantes Reading ändert. Ist egal, wenn es nur ein Reading gibt, aber wenn es viele sind, die dann auch noch nacheinander aktualisiert werden und nicht zusammen, erhöht es völlig unnötig die Systemlast. Ganz prinzipiell gesagt, ist es einfach unsauber (aber leider weit verbreitete Praxis, aber das macht es ja nicht besser)...
(Viel Spaß noch beim split lernen ;) ).