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
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
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
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.
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
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.