Ich habe eine "withings Waage" von der ich mir täglich die entsprechenden Daten hole, tabellarisch darstelle und grafisch darstelle. Da ich auch immer noch die Vortagswerte haben möchte, hole ich mir diese über "OldReadingsVal".
bmi_old { OldReadingsVal("Waage_Norbert","bmi",0) },...........usw
Das nach jedem Neustart die OldReadingsVal leer sind sind ist mir schon klar, da sie nicht dauerhaft gespeichert sind. Zusätzlich aktualisiert das "withings Modul" alle 30min die Werte und dadurch werden auch die bmi_old Werte neu erstellt aus den leeren OldReadingVal Werten. Dadurch entsteht der Wert ,,0" beim Anlegen des userReading bmi_old.
Ziel meiner Überlegung ist, das nur dann ein neues userReading (z.b. bmi_old) aus den OldReadingsVal Werten erstellt werden soll, wenn der Wert von bmi_old nicht ,,0" ist. Damit müsste eigentlich immer der letzte Wert des bmi_old erhalten bleiben.
Ich habe folgendes probiert.
bmi_old { if (OldReadingsVal("Waage_Norbert","bmi",0) > 0 ) { fhem ("set bmi_old (OldReadingsVal("Waage_Norbert","bmi",""))") }}
bmi_old { if ((OldReadingsVal("Waage_Norbert","bmi",0)) = 0) return }
bmi_old { if (OldReadingsVal("Waage_Norbert","bmi",0)) = 0 } {fhem("set bmi_old (Value(bmi_old))") }
Nicht gleich die Hände überm Kopf zusammenschlagen....ich weiß, das einiges vom Ansatz her an diesen Versuchen falsch ist, aber vielleicht kann mir doch einer sagen, wie ich es dann richtiger machen kann.
Gruß aus Köln
Norbert
- Vergleichsoperator ist == und nicht =
- Wenn oldreadingsval(bmi) nicht 0 musst Du doch den Wert zurückgeben.
- kein set in einem userReading
bmi_old { if (OldReadingsVal("Waage_Norbert","bmi",0) > 0) {OldReadingsVal("Waage_Norbert","bmi",0)} else {return}}
oder
bmi_old {OldReadingsVal("Waage_Norbert","bmi",0) > 0 ? OldReadingsVal("Waage_Norbert","bmi",0) : return}
Anmerkungen:
- Da das wohl ein userReading ist und vermutlich einige Readings mehr vorhanden sind, die regelmäßig aktualisiert werden: trigger nicht vergessen ;) ;
- Wenn der Rückgabewert direkt als Wahrheitswert interpretiert werden kann (0=false, alles andere ist true), kann man sich den Vergleich auch sparen.
Demnach sollte das hier auch funktionieren:
bmi_old:bmi.* {OldReadingsVal("Waage_Norbert","bmi",0) ? OldReadingsVal("Waage_Norbert","bmi",0) : return}
Oder sogar das:
bmi_old:bmi.* {OldReadingsVal("Waage_Norbert","bmi",undef)}
@amenomade
@Beta-User
Vielen Dank, ich werde mal alle vier Vorschläge zusätzlich eingeben und mit "shutdown restart" und "sudo reboot" morgen mal testen was danach noch davon da ist:
bmi_old { OldReadingsVal("Waage_Norbert","bmi",0) }, bmi_old_Test:bmi.* {OldReadingsVal("Waage_Norbert","bmi",undef)}, bmi_old_Test1:bmi.* {OldReadingsVal("Waage_Norbert","bmi",0) ? OldReadingsVal("Waage_Norbert","bmi",0) : return}, bmi_old_Test2 { if (OldReadingsVal("Waage_Norbert","bmi",0) > 0) {OldReadingsVal("Waage_Norbert","bmi",0)} else {return}}, bmi_old_Test3 {OldReadingsVal("Waage_Norbert","bmi",0) > 0 ? OldReadingsVal("Waage_Norbert","bmi",0) : return}
Ich werde mich dann mal mit dem Ergebniss melden.
Gruß
Norbert
Mein Ergebniss:
Alle vier Vorschläge funktionieren einwandfrei auch nach "shutdown restart" und nach "sudo reboot".
Jetzt muß ich mal sehen welche Version ich nehme, da ja 12 Werte aus der Waage ausgelesen werden und dementsprechend viele userReadings angelegt und umgewandelt werden müßen.
Danke für die schnelle Hilfe.
Gruß aus "Kölle"
Norbert