userreading korrekt? Wie anzeigen lassen?

Begonnen von Dodger, 22 November 2021, 08:54:27

Vorheriges Thema - Nächstes Thema

Dodger

Hi,

ich habe echt ziemlich Verständnis-Probleme bei der Erstellung der FHEM Konfiguration....
Ich hab zwar bereits mehrere Räume, lese Daten aus der Wärmepumpe, den FritzDect-Elementen, dem Wechselrichter und habe MQTT am Laufen, aber irgendwie habe ich das Gefühl, es war immer nur Glück....

Aktuell hänge ich an dem Problem, dass ich ein userReading erstellen möchte.
Die FritzDect-Steckdosen geben die Temperatur folgendermaßen aus:
18.0 C (measured)

Ich woll jetzt das "(measured)" loswerden bzw. nur den Temperaturwert haben.
Dazu habe ich folgendes userReading Attribut angelegt:
attr  FBDECT_FritzBox_08761_0095798 userReadings FritzDect_WaMa_Temp:(temperature) {substr(ReadingsVal("FBDECT_FritzBox_08761_0095798","temperature","00.0),0,4) ." °C"}
wenn ich alles richtig verstanden haben, dann bedeutet:

  • FBDECT_Fritz.... ist der Device-Name
  • FritzDect_WaMa_Temp ist der NAme des neuen Attributs
  • :(temperature) da bin ich  mir unsicher. Das neue Attribut wird nur dann berechnet, wenn sich dieser Wert ändert?!?
  • substr(xxxx,0,4) liefert mir 4 Zeichen ab Position 0 des Strings xxxx
  • ReadingVal("Device", "Attribut", "Ersatzwert") sollte mir die Temperatur zurückgeben aus dem Device im Format "xx.x C (measured)"
  • ." °C" packt hinter den String eben  °C

Stimmt das so?

Wie kann man das prüfen? Wo wird der Wert des Attributs angezeigt?
Im Device taucht das zwar als userReading auf, aber ich sehe nirgends ein Ergebnis....

Gruß
Dodger

TomLee

Nimm einfach ReadingsNum:

ZitatReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)
Gibt die erste Zahl aus dem Readingswert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet und ggf. mit 0 aufgefüllt, wenn <round> größer ist als die Anzahl der Dezimalstellen.

Und der trigger in Klammern ist meiner Meinung nach nicht richtig:

attr  FBDECT_FritzBox_08761_0095798 userReadings FritzDect_WaMa_Temp:temperature {ReadingsNum($name,'temperature','00.0').' °C'}

Gruß

Thomas

Dodger

Super, das hilft mir schonmal weiter.
Das userReading wird nun auch angezeigt.

Aber noch eine Frage:
wann wird es aktualisiert?
Eigentlich doch, wenn das Reading FBDECT_FritzBox_08761_0095798.temperature aktualisiert wird?
Oder nur, wenn sich der Wert dieses Readings ändert?
Wenn ich den Parameter ":temperature" weglasse, wird das userReading dann jedesmal aktualisiert, wenn ein reading von diesem device stattfindet?

Gruß
Dodger

TomLee

ZitatEigentlich doch, wenn das Reading FBDECT_FritzBox_08761_0095798.temperature aktualisiert wird?
Oder nur, wenn sich der Wert dieses Readings ändert?

Es wird aktualisiert wenn es ein Event bei temperature gibt und das ist wiederum abhängig wie oft FBDECT_FritzBox das sendet, mit den event-on-.* Attributen kann man das beeinflussen, falls die Hardware es zu gut meint.

ZitatWenn ich den Parameter ":temperature" weglasse, wird das userReading dann jedesmal aktualisiert, wenn ein reading von diesem device stattfindet?

Korrekt.

Dodger

Hoffentlich letzte Frage dazu:
wenn ich mir das Ganze jetzt als Werte Anzeigenlassen will, dann habe ich dafür folgendes define erzeugt:
defmod FritzTemp readingsGroup FBDECT_FritzBox_.*:<%temp_temperature>,<hier sollen die Namen rein>,FritzDect_WaMa_Temp|FritzDect_Wohnzimmer_Temp|FritzDect_Kind1_Temp|FritzDect_Kind2_Temp

Die Anzeige ist dann eine Liste, die in etwa so aussieht:
TempIcon 25,2°C
TempIcon 28,2°C
TempIcon 22,2°C
TempIcon 24,2°C

Ich hätte gerne, dass die so aussieht:
TempIcon WaMa 25,2°C
TempIcon Wohnzimmer 28,2°C
TempIcon Kind1 22,2°C
TempIcon Kind2 24,2°C

Ich hab jetzt schon ganz viele Sachen mit dem Teil <hier sollen die Namen rein> ausprobiert, aber ich bekomme den Namen immer an allen Zeile angezeigt.

Wie kann ich die Namen pro Zeile definieren?

Gruß
Dodger

ph1959de

Ich glaube, du machst es dir unnötig schwer dadurch, dass Du in den Namen Deines userReading den Devicenamen mit reingenommen hast. Nenn das Ding überall gleich (meineTemp oder sonstwas), dann sollest Du in der readingsGroup mit

defmod FritzTemp readingsGroup <Name>,<Temperatur> FBDECT_FritzBox_.*:name,meineTemp

Dein gewünschtes Ergebnis bekommen.
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"