Hallo zusammen,
ich möchte gerne einen Sensorwert um 2 °C nach unten korrigieren. Das geht mit UserReadings - offset, aber die Syntax stimmt irgenwie nicht, kann mir da jemand kurz helfen?
Internals:
CFGFN
DEF MQTT2_Arduino_1:Kueche/Temp
DEVICE MQTT2_Arduino_1
FUUID 62172d3e-f33f-aed9-7af1-9c66e70b2914e6ef
NAME Temperatur_Kueche
NOTIFYDEV global,MQTT2_Arduino_1
NR 9131
NTFY_ORDER 50-Temperatur_Kueche
READING Kueche/Temp
STATE 26.3
TYPE readingsProxy
CONTENT:
MQTT2_Arduino_1 1
Helper:
DBLOG:
state:
logdb:
TIME 1645686078.14164
VALUE on
READINGS:
2022-02-24 15:12:01 state 26.3
Attributes:
DbLogExclude .*
group Inputs
room Küche
userReadings Temperatur offset { ReadingsVal("Temperatur_Kueche","state",0)-2;; }
Bin nicht sicher, ob userReadings in einem readingsProxy gehen, eigentlich ist das Modul nicht dafür gemacht. Der hier sieht sowieso "komisch" aus (DEF: Kueche/Temp?), und für Korrekturen gibt es da eigene Mechanismen (ValueFn?).
Zitat von: Beta-User am 24 Februar 2022, 15:21:25
Bin nicht sicher, ob userReadings in einem readingsProxy gehen, eigentlich ist das Modul nicht dafür gemacht. Der hier sieht sowieso "komisch" aus (DEF: Kueche/Temp?), und für Korrekturen gibt es da eigene Mechanismen (ValueFn?).
Wenn es im Modul ReadingsProxy nicht geht, kann ich auch noch das MQTT Device direkt anzubieten. Das ist in diesem Fall ein Arduino mit vielen Sensoren, deren Werte in diesem Device ankommen und jeweis verschiedene Offsets haben. Dahinter stecken mehrer DHT22 Module und die haben alle eine kleine Differenz zur Realtemperatur.
Internals:
CFGFN
CID Arduino_1
DEF Arduino_1
DEVICETOPIC Arduino_1:Arduino_1/Kueche/Temp:.*
FUUID 6214c348-f33f-aed9-fccc-957f47a295dad7c8
IODev MQTTServer
LASTInputDev MQTTServer
MQTTServer_CONN MQTTServer_192.168.178.220_49515
MQTTServer_MSGCNT 28799
MQTTServer_TIME 2022-02-24 16:44:43
MSGCNT 29206
NAME MQTT2_Arduino_1
NR 1608
STATE online
TYPE MQTT2_DEVICE
m2s_CONN m2s_192.168.178.220_49164
m2s_MSGCNT 407
m2s_TIME 2022-02-22 12:13:17
Helper:
DBLOG:
AZ/Temp:
logdb:
TIME 1645654398.09052
VALUE Sensorfehler
Kueche/Temp:
logdb:
TIME 1645717382.19045
VALUE 26.4
READINGS:
2022-02-24 16:42:52 AZ/Hum Sensorfehler
2022-02-24 16:42:52 AZ/Temp Sensorfehler
2022-02-24 16:44:43 Arduino_1 online
2022-02-24 16:43:42 Bad/Hum Sensorfehler
2022-02-24 16:43:42 Bad/Temp Sensorfehler
2022-02-22 12:23:44 Hum Sensorfehler
2022-02-22 12:04:40 IODev m2s
2022-02-24 16:43:32 Kiz/Hum Sensorfehler
2022-02-24 16:43:32 Kiz/Temp Sensorfehler
2022-02-24 16:43:02 Kueche/Hum 33.4
2022-02-24 16:43:02 Kueche/Temp 26.4
2022-02-24 16:43:22 SZ/Hum Sensorfehler
2022-02-24 16:43:22 SZ/Temp Sensorfehler
2022-02-22 12:23:44 Temp Sensorfehler
2022-02-24 16:43:12 WZ/Hum Sensorfehler
2022-02-24 16:43:12 WZ/Temp Sensorfehler
Attributes:
DbLogExclude .*
DbLogInclude Kueche/Temp
devicetopic Arduino_1:Arduino_1/Kueche/Temp:.*
group MQTT
readingList Arduino_1:Arduino_1/AZ/Hum:.* AZ/Hum
Arduino_1:Arduino_1/AZ/Temp:.* AZ/Temp
Arduino_1:Arduino_1/Kueche/Hum:.* Kueche/Hum
Arduino_1:Arduino_1/Kueche/Temp:.* Kueche/Temp
Arduino_1:Arduino_1/WZ/Hum:.* WZ/Hum
Arduino_1:Arduino_1/WZ/Temp:.* WZ/Temp
Arduino_1:Arduino_1/SZ/Hum:.* SZ/Hum
Arduino_1:Arduino_1/SZ/Temp:.* SZ/Temp
Arduino_1:Arduino_1/Kiz/Hum:.* Kiz/Hum
Arduino_1:Arduino_1/Kiz/Temp:.* Kiz/Temp
Arduino_1:Arduino_1/Bad/Hum:.* Bad/Hum
Arduino_1:Arduino_1/Bad/Temp:.* Bad/Temp
Arduino_1:Arduino_1:.* Arduino_1
room System
stateFormat Arduino_1
Benenn' mal diese Readings um, das ist grausam und eigentlich unzulässig! (Unterstrich statt Schrägstrich ist ok).
Und die CID kannst du auch aus dem devicetopic löschen (bzw. das Attribut ist nutzlos), löschen dto. für die readingList.
Also z.B.:
Arduino_1/AZ/Temp:.* AZ_Temp
Und dann: mit valueFn geht das im readingsProxy schon, du kannst aber auch direkt readingList verwenden und mußt nicht mit zusätzlichen userReadings "rumkaspern". In etwa so:
Arduino_1/AZ/Temp:.* { return if !looks_like_number($EVENT); $EVENT = $EVENT - 2; {AZ_Temp => $EVENT} }
PS: Glückwunsch, dass das mit dem Publishen aus https://forum.fhem.de/index.php/topic,126226.0.html (https://forum.fhem.de/index.php/topic,126226.0.html) geklappt hat!
Zitat von: Beta-User am 24 Februar 2022, 16:57:08
Benenn' mal diese Readings um, das ist grausam und eigentlich unzulässig! (Unterstrich statt Schrägstrich ist ok).
Und die CID kannst du auch aus dem devicetopic löschen (bzw. das Attribut ist nutzlos), löschen dto. für die readingList.
Also z.B.:
Arduino_1/AZ/Temp:.* AZ_Temp
Verstehe ich! Ist noch ein Relikt aus der MQTT Welt, hab ich geändert, sieht besser aus.
Zitat von: Beta-User am 24 Februar 2022, 16:57:08
Und dann: mit valueFn geht das im readingsProxy schon, du kannst aber auch direkt readingList verwenden und mußt nicht mit zusätzlichen userReadings "rumkaspern". In etwa so:
Arduino_1/AZ/Temp:.* { return if !looks_like_number($EVENT); $EVENT = $EVENT - 2; {AZ_Temp => $EVENT} }
Ich finds auch besser weniger Devices zu haben, die Option mit der readingList sieht gut aus, funktioniert aber so noch nicht.
So funktionierts:
Arduino_1:Arduino_1/Kueche/Temp:.* { $EVTPART0 = $EVTPART0 - 2; {Kueche_Temp => $EVTPART0} }
Brauche ich das return if !looks_number ($Event) nur für den "Sensorfehler?"
Zitat von: Beta-User am 24 Februar 2022, 16:57:08
PS: Glückwunsch, dass das mit dem Publishen aus https://forum.fhem.de/index.php/topic,126226.0.html (https://forum.fhem.de/index.php/topic,126226.0.html) geklappt hat!
Auf jeden Fall, bin da schon seit ein paar Wochen dran, und die Zielgeraden schaffe ich auch noch!
Vielleicht noch ein paar Anmerkungen...
- Es wäre nett, wenn du deinen Code auf dem Arduino im anderen Post zeigen könntest (er mag nicht perfekt sein, aber es gibt Leute, die ggf. froh sind, erst mal eine Basis gesehen zu haben. Vielleicht kommt dann eine Weiterentwicklung, von der du auch wieder profitieren kannst; ich hätte z.B. die Anregung, temp+hum jeweils paarweise (s.u.) in einen JSON zu packen, das verringert die Zahl der Events in FHEM...).
- Prinzipiell würde ich hier kein "Einheitsdevice" mit "speziellen Readingsnnamen" bauen, sondern die Sensoren je paarweise auf ein jeweils separates FHEM-Device (TYPE=MQTT2_DEVICE) zusammenfassen.
- Da kannst du dann die Readingnamen generisch mit "humidity" und "temperature" belegen. Falls du eine Sprachsteuerung oder fhemApp im Einsatz hast, wird dir vermutlich direkt klar sein, welchen Vorteil das hat ;) .
Nachtrag zu obigem noch: auch event-on-change-reading (mit Hysteresen) und event-min-interval kann man dann einfacher einheitlich und ohne große Mühe setzen (z.B. über archetype).
Zitat
Brauche ich das return if !looks_number ($Event) nur für den "Sensorfehler?"
Jein. Du "brauchst" es (oder was ähnliches) eigentlich v.a., um Warnings im FHEM-log zu unterbinden wegen "kann nicht mit einem Text rechnen"... ;)
Zitat
Auf jeden Fall, bin da schon seit ein paar Wochen dran, und die Zielgeraden schaffe ich auch noch!
Daumen hoch, gute Leistung! Das Thema insgesamt ist nicht einfach, insbesondere, wenn man im Prinzip an allen Stellschrauben selbst festlegen kann und muss, wie die aussehen sollen!
Zitat von: Beta-User am 25 Februar 2022, 09:07:24
Vielleicht noch ein paar Anmerkungen...
- Es wäre nett, wenn du deinen Code auf dem Arduino im anderen Post zeigen könntest (er mag nicht perfekt sein, aber es gibt Leute, die ggf. froh sind, erst mal eine Basis gesehen zu haben. Vielleicht kommt dann eine Weiterentwicklung, von der du auch wieder profitieren kannst; ich hätte z.B. die Anregung, temp+hum jeweils paarweise (s.u.) in einen JSON zu packen, das verringert die Zahl der Events in FHEM...).
...
Daumen hoch, gute Leistung! Das Thema insgesamt ist nicht einfach, insbesondere, wenn man im Prinzip an allen Stellschrauben selbst festlegen kann und muss, wie die aussehen sollen!
Danke für den Hinweis! Den Code hab ich auf Github hochgeladen. Mal sehen ob sich jemand findet, der daran weiterentwickeln möchte.
https://github.com/tfriedrich85/temperature-Sensors-to-MQTT
Ich werd mir deine Tipps bzgl. der Einbindung in Fhem zu Herzen nehmen und schauen wie ich am besten je sensor gleich ein Device in Fhem anlegen kann. Bisher hat das der MQTT Server in Fhem automatisch alles zusammen geholt, perspektivisch macht ein Trennung aber Sinn.
wenn du ein raw-list nimmst, ist das mit dem "Vereinzeln" ziemlich schnell erledigt. Du läßt einfach einen Raum in dem Device drin (samt dem, was sich auf den Arduino bezieht, (=die letzte Zeile)) und machst bei den übrigen in der DEF die CID raus...
Ggf. hier das raw einstellen, dann ist das schnell gezeigt, aber aus einen normalen list will ich das nicht zusammenstupfen ;) .
EDIT: Bitte ggf. noch ein [gelöst] vor den Thread-Titel machen und irgendwie ist das grade auch sehr weit weg vom ursprünglichen Titel...
Zitat von: Beta-User am 25 Februar 2022, 12:52:41
wenn du ein raw-list nimmst, ist das mit dem "Vereinzeln" ziemlich schnell erledigt. Du läßt einfach einen Raum in dem Device drin (samt dem, was sich auf den Arduino bezieht, (=die letzte Zeile)) und machst bei den übrigen in der DEF die CID raus...
Ggf. hier das raw einstellen, dann ist das schnell gezeigt, aber aus einen normalen list will ich das nicht zusammenstupfen ;) .
EDIT: Bitte ggf. noch ein [gelöst] vor den Thread-Titel machen und irgendwie ist das grade auch sehr weit weg vom ursprünglichen Titel...
Du sprichst in Rätseln, deswegen hier das RAW, ich bin gespannt, was man damit machen kann... Hab RAW noch nie verwendet :-(
defmod MQTT2_Arduino_1 MQTT2_DEVICE Arduino_1
attr MQTT2_Arduino_1 DbLogExclude .*
attr MQTT2_Arduino_1 DbLogInclude Kueche_Temp,Kueche_Hum
attr MQTT2_Arduino_1 autocreate 1
attr MQTT2_Arduino_1 devicetopic Arduino_1:Arduino_1/Kueche/Temp:.*
attr MQTT2_Arduino_1 group MQTT
attr MQTT2_Arduino_1 readingList Arduino_1:Arduino_1/AZ/Hum:.* AZ_Hum\
Arduino_1:Arduino_1/AZ/Temp:.* AZ_Temp\
Arduino_1:Arduino_1/Kueche/Hum:.* Kueche_Hum\
Arduino_1:Arduino_1/Kueche/Temp:.* { $EVTPART0 = $EVTPART0 - 2;; {Kueche_Temp => $EVTPART0} }\
Arduino_1:Arduino_1/WZ/Hum:.* WZ_Hum\
Arduino_1:Arduino_1/WZ/Temp:.* WZ_Temp\
Arduino_1:Arduino_1/SZ/Hum:.* SZ_Hum\
Arduino_1:Arduino_1/SZ/Temp:.* SZ_Temp\
Arduino_1:Arduino_1/Kiz/Hum:.* Kiz_Hum\
Arduino_1:Arduino_1/Kiz/Temp:.* Kiz_Temp\
Arduino_1:Arduino_1/Bad/Hum:.* Bad_Hum\
Arduino_1:Arduino_1/Bad/Temp:.* Bad_Temp\
Arduino_1:Arduino_1:.* Arduino_1
attr MQTT2_Arduino_1 room System
attr MQTT2_Arduino_1 stateFormat Arduino_1
setstate MQTT2_Arduino_1 online
setstate MQTT2_Arduino_1 2022-02-24 22:48:56 AZ/Hum Sensorfehler
setstate MQTT2_Arduino_1 2022-02-24 22:48:56 AZ/Temp Sensorfehler
setstate MQTT2_Arduino_1 2022-02-25 14:47:42 AZ_Hum Sensorfehler
setstate MQTT2_Arduino_1 2022-02-25 14:47:42 AZ_Temp Sensorfehler
setstate MQTT2_Arduino_1 2022-02-25 14:48:22 Arduino_1 online
setstate MQTT2_Arduino_1 2022-02-24 22:47:45 Bad/Hum Sensorfehler
setstate MQTT2_Arduino_1 2022-02-24 22:47:45 Bad/Temp Sensorfehler
setstate MQTT2_Arduino_1 2022-02-25 14:48:32 Bad_Hum Sensorfehler
setstate MQTT2_Arduino_1 2022-02-25 14:48:32 Bad_Temp Sensorfehler
setstate MQTT2_Arduino_1 2022-02-22 12:23:44 Hum Sensorfehler
setstate MQTT2_Arduino_1 2022-02-22 12:04:40 IODev m2s
setstate MQTT2_Arduino_1 2022-02-24 22:47:35 Kiz/Hum Sensorfehler
setstate MQTT2_Arduino_1 2022-02-24 22:47:35 Kiz/Temp Sensorfehler
setstate MQTT2_Arduino_1 2022-02-25 14:48:22 Kiz_Hum 35.2
setstate MQTT2_Arduino_1 2022-02-25 14:48:22 Kiz_Temp 22.4
setstate MQTT2_Arduino_1 2022-02-24 23:10:20 Kueche/Hum 31.5
setstate MQTT2_Arduino_1 2022-02-24 22:44:03 Kueche/Temp 25.7
setstate MQTT2_Arduino_1 2022-02-25 14:47:52 Kueche_Hum 29.9
setstate MQTT2_Arduino_1 2022-02-25 14:47:52 Kueche_Temp 24
setstate MQTT2_Arduino_1 2022-02-24 22:47:25 SZ/Hum Sensorfehler
setstate MQTT2_Arduino_1 2022-02-24 22:47:25 SZ/Temp Sensorfehler
setstate MQTT2_Arduino_1 2022-02-25 14:48:12 SZ_Hum Sensorfehler
setstate MQTT2_Arduino_1 2022-02-25 14:48:12 SZ_Temp Sensorfehler
setstate MQTT2_Arduino_1 2022-02-24 22:47:05 Temp 25.7
setstate MQTT2_Arduino_1 2022-02-24 22:47:15 WZ/Hum Sensorfehler
setstate MQTT2_Arduino_1 2022-02-24 22:47:15 WZ/Temp Sensorfehler
setstate MQTT2_Arduino_1 2022-02-25 14:48:02 WZ_Hum Sensorfehler
setstate MQTT2_Arduino_1 2022-02-25 14:48:02 WZ_Temp Sensorfehler
here you are (ab dem Klammerteil bist du dann dran, und genericDeviceType läßt sich nur setzen, wenn du eine Sprachsteuerung hast, sonst muss das raus...):
rename MQTT2_Arduino_1 Temp_AZ
deleteattr Temp_AZ devicetopic
attr Temp_AZ readingList Arduino_1:.* LWT\
Arduino_1/AZ/Hum:.* humidity\
Arduino_1/AZ/Temp:.* temperature
attr Temp_AZ genericDeviceType thermometer
attr Temp_AZ room Arbeitszimmer
attr Temp_AZ stateFormat T: temperature°C, H: humidity%rH
attr Temp_AZ event-min-interval temperature:300,humidity:900
attr Temp_AZ event-on-change-reading temperature:0.2,humidity:0.5
attr Temp_AZ icon temperature_humidity
defmod Temp_Kueche MQTT2_DEVICE
attr Temp_Kueche genericDeviceType thermometer
attr Temp_Kueche readingList Arduino_1/Kueche/Hum:.* humidity\
Arduino_1/Kueche/Temp:.* { $EVTPART0 = $EVTPART0 - 2;; {temperature => $EVTPART0} }
attr Temp_Kueche icon temperature_humidity
[...]
Richtig cool, vielen Dank!
Ich schau mir das im Detail an und melde mich!
:) Gerne.
PS: das mit dem looks_like... solltest du dir trotzdem nochmal ansehen, und mit userReadings hat das hier wirklich nicht mehr viel gemein ;D .