FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: tfriedrich85 am 24 Februar 2022, 15:15:32

Titel: Syntax von User Readings
Beitrag von: tfriedrich85 am 24 Februar 2022, 15:15:32
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;; }
Titel: Antw:Syntax von User Readings
Beitrag 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?).
Titel: Antw:Syntax von User Readings
Beitrag von: tfriedrich85 am 24 Februar 2022, 16:47:51
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

Titel: Antw:Syntax von User Readings
Beitrag 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

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!
Titel: Antw:Syntax von User Readings
Beitrag von: tfriedrich85 am 24 Februar 2022, 23:00:56
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!
Titel: Antw:Syntax von User Readings
Beitrag 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...).

- 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!
Titel: Antw:Syntax von User Readings
Beitrag von: tfriedrich85 am 25 Februar 2022, 12:40:09
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.

Titel: Antw:Syntax von User Readings
Beitrag 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...
Titel: Antw:Syntax von User Readings
Beitrag von: tfriedrich85 am 25 Februar 2022, 14:50:13
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
Titel: Antw:Syntax von User Readings
Beitrag von: Beta-User am 25 Februar 2022, 14:59:14
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
[...]
Titel: Antw:Syntax von User Readings
Beitrag von: tfriedrich85 am 25 Februar 2022, 15:04:40
Richtig cool, vielen Dank!
Ich schau mir das im Detail an und melde mich!
Titel: Antw:Syntax von User Readings
Beitrag von: Beta-User am 25 Februar 2022, 15:13:47
 :) 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 .