NEWS
Test Withings v0.0.x
-
@ammawel sagte in Test Withings v0.0.x:
fhem wieder zu installieren oder zu HomeAssistant zu wechseln.
Warte mal noch ...

Ich habe mir den Code mal angeschaut, es gab schon mal den vorsichtigen Versuch zu sortieren. Dieser Teil wurde aber wieder auskommentiert.
Darum habe ich jetzt eine Sortierung eingebaut (primär nach Datum/Zeit der Messung), sekundär nach Erstell-/bzw. Änderungsdatum.
Wenn du mutig bist, kannst du mal von Github testen:
https://github.com/Marc-Berg/ioBroker.withings
Wenn das funktioniert, kann ich einen PR einreichen, der Programmierer ist ja noch aktiv.
EDIT: da ich nur ca. einmal im Quartal auf die Waage steige, habe ich zu wenige Messwerte, um selbst zu testen.
@marc-berg
Das hört sich ja super an! Da warte ich sehr gerne und freue mich auf das Testen.
Schon vorab ganz herzlichen Dank für Deine Mühen! -
Ich habe mit der Waage Body-Smart und Adapterversion 0.0.16 / 0.0.13 auch das Problem der total chaotisch in verschiedenen Unterordnern vom Typ measuregrpsXX abgelegten Werte. Die Datenpunkte "date" passen oft nicht zu den in dem jeweiligen Unterordner abgelegten Werte und die Eigenschaft "letzte Änderung" der Messwerte ist oft in allen Ordnern identisch.
@prorun hat dazu im März 2024 ein issue auf github erstellt - bis heute leider ohne jede Reaktion.
Da auch auf andere issues keine Reaktion erfolgt, befürchte ich, dass der Adapter tot ist. Dann sollte er auch aus dem Repository genommen werden.
Oder hat jemand einen workaround, um stabil aktuelle Messwerte zu erhalten?Für jede Hilfe bin ich dankbar.
@ammawel sagte in Test Withings v0.0.x:
total chaotisch in verschiedenen Unterordnern vom Typ measuregrpsXX abgelegten Werte. Die Datenpunkte "date" passen oft nicht zu den in dem jeweiligen Unterordner abgelegten Werte und die Eigenschaft "letzte Änderung" der Messwerte ist oft in allen Ordnern identisch.
Hast du noch ein paar Beispiele als Screenshots oder Export des Objektbaums, gern ohne die Messwerte? Mit meinen wenigen Daten kann ich es noch nicht nachstellen. Und erfasst du auch andere Daten als nur mit der Waage?
-
@ammawel sagte in Test Withings v0.0.x:
total chaotisch in verschiedenen Unterordnern vom Typ measuregrpsXX abgelegten Werte. Die Datenpunkte "date" passen oft nicht zu den in dem jeweiligen Unterordner abgelegten Werte und die Eigenschaft "letzte Änderung" der Messwerte ist oft in allen Ordnern identisch.
Hast du noch ein paar Beispiele als Screenshots oder Export des Objektbaums, gern ohne die Messwerte? Mit meinen wenigen Daten kann ich es noch nicht nachstellen. Und erfasst du auch andere Daten als nur mit der Waage?
@marc-berg
Mit vielen Messwerten kann ich leider nicht dienen.
Die Waage ist neu, ich bin noch in der Testphase, habe gestern nach Frust alles zurückgesetzt und wahrscheinlich auch ein anderes Ziel.Es geht nicht um den Verlauf der weihnachtlichen Plätzchen-Diät.
Vielmehr muss ich das Gewicht morgens und abends für einige Zeit dokumentieren. Zur Zeit erfolgt das mit alter Waage, Zettel mit Bleistift und manuellem Übertrag in eine Excel-Tabelle.
Mein Ziel ist es, "date" als Trigger zu verwenden und dann den aktuellen Gewichtswert bei Wägung in einem definierten Zeitfenster in die passende Spalte einer Zeile einer csv-Datei zu schreiben. Pro Tag eine Zeile mit zwei Werten und Zeit, automatisch gepflegt.Und da tauchten gestern schon bei mehr als einer Wägung die Probleme auf.
Meistens enthielt grps01 wie im Forum beschrieben die aktuellen Werte, manchmal waren die aktuellen Werte aber auch in grps02 - auch das wurde hier im Forum schon als aktuelle Gruppe beschrieben. Und hin und wieder lief alles durcheinander, da war das Datum in grps02 aktuell, das Gewicht dazu in grps01 oder umgekehrt oder auch in grps03. Die Anzahl der abzurufenden Tage steht im Adapter auf 1, da ich nur den aktuellen Wert benötige.Bei normaler Nutzung fällt es vielleicht gar nicht auf, wenn ein Gewicht zwischendurch vom Vortag ist, bei der Überwachung mit Dokumentation geht das aber nicht.
Ich danke Dir nochmal und werde nachher weiter testen. Bis jetzt sieht es sehr gut aus!
-
@ammawel sagte in Test Withings v0.0.x:
total chaotisch in verschiedenen Unterordnern vom Typ measuregrpsXX abgelegten Werte. Die Datenpunkte "date" passen oft nicht zu den in dem jeweiligen Unterordner abgelegten Werte und die Eigenschaft "letzte Änderung" der Messwerte ist oft in allen Ordnern identisch.
Hast du noch ein paar Beispiele als Screenshots oder Export des Objektbaums, gern ohne die Messwerte? Mit meinen wenigen Daten kann ich es noch nicht nachstellen. Und erfasst du auch andere Daten als nur mit der Waage?
@marc-berg
Guten Morgen,
ich habe gestern noch weiter getestet - die Werte sind ja nicht in der Waage gespeichert sondern auf den Withings-Servern in Frankreich.Zusätzlich zu den wenigen vorhandenen "echten" Werten kann man in der Smartphone-App auch manuelle Messungen hinzufügen. Solche manuellen Eingaben habe ich ans Ende der tatsächlichen Messungen gehängt, an den Anfang und irgendwo zwischendrin willkürlich eingeschoben.
Das Ergebnis: Perfekt - in allen Fällen waren die Messungen im Adapter (Anzahl der abzufragenden Tage anpassen
) nach der nächsten Synchronisation in der richtigen Reihenfolge; Datum und Messwert passten in allen Fälen immer zu einander. Ich konnte keinen Fehler finden. -
@marc-berg
Guten Morgen,
ich habe gestern noch weiter getestet - die Werte sind ja nicht in der Waage gespeichert sondern auf den Withings-Servern in Frankreich.Zusätzlich zu den wenigen vorhandenen "echten" Werten kann man in der Smartphone-App auch manuelle Messungen hinzufügen. Solche manuellen Eingaben habe ich ans Ende der tatsächlichen Messungen gehängt, an den Anfang und irgendwo zwischendrin willkürlich eingeschoben.
Das Ergebnis: Perfekt - in allen Fällen waren die Messungen im Adapter (Anzahl der abzufragenden Tage anpassen
) nach der nächsten Synchronisation in der richtigen Reihenfolge; Datum und Messwert passten in allen Fälen immer zu einander. Ich konnte keinen Fehler finden.@ammawel sagte in Test Withings v0.0.x:
Ich konnte keinen Fehler finden.
PR erstellt: https://github.com/TA2k/ioBroker.withings/pull/44
-
Hallo,
ich habe mal chatGPT gefragt ob er nicht die letzten Messwerte in einem eigenen Datenpunkt speichern kann. Dabei ist das rausgekommen:
Es wurden 2 Blöcke hinzugefügt und eine Zeile geändert. Wer es Testen möchte hier ist die main.js
Gruß Tino
-
Hallo,
ich habe mal chatGPT gefragt ob er nicht die letzten Messwerte in einem eigenen Datenpunkt speichern kann. Dabei ist das rausgekommen:
Es wurden 2 Blöcke hinzugefügt und eine Zeile geändert. Wer es Testen möchte hier ist die main.js
Gruß Tino
hier ist noch eine Version mit lastActivity und lastSleep
PS: es war noch ein Fehler in der Reihenfolge bei lastActivity drin, ich habe die main.js aktualisiert.
PS2: es ist jetzt bei lastMeasures zusätzlich das update Datum mit drin
PS3: jetzt mit deutschem Datumsformat
PS4: jetzt mit update + timestamp
PS5: _update ist wieder raus
Gruß Tino
-
@Tino-0
Hallo,
mindestens ebenso spannend wie das Ergebnis finde ich den Weg, eine Korrektur durch ChatGPT machen zu lassen.Bis vor ein paar Tagen dachte ich, dass nach der Anpassung durch Marc Berg die aktuellen Werte zuverlässig im Ordner measuregrps01 liegen, aber nach hinzufügen der Herzfrequenz zu den Messungen der Body-Smart-Waage fing das Chaos wieder an: aktuelle Herzfrequenz in 01 und aktuelles Gewicht in 02, dann mal beides in 01 u.s.w.. Das Entfernen der Herzfrequenzmessung brachte wieder Ordnung ins Chaos.
Zwei Fragen zu Deiner Lösung:
- Basiert Deine Modifikation auf der bereits geänderten main.js vom github-Verzeichnis des ursprünglichen Ersteller TA2K (https://github.com/TA2k/ioBroker.withings)? In dieser Version wurde die Sortierung von Marc Berg ja bereits eingepflegt.
- Wirst Du auch ein pull-request erstellen, sodass Deine Änderungen eingepflegt werden können und hoffentlich eine stabil funktionierende Version des Adapters entsteht?
Danke für Deine Mühen,
vG, Achim -
@Tino-0
Problem: Was nimmt man als Trigger? Eine Aktualisierung der Werte in lastMeasures tritt bei jedem refresh des eingestellten Updateintervalls auf, eine Änderung der Werte scheidet auch aus...
Bisher habe ich auf eine Änderung von date in measuregrp01 getriggert - so 100%ig verlässlich ist das aber auch nicht mehr nach den Erfahrungen mit der Herzfrequenz (s.o.). -
@Tino-0
Problem: Was nimmt man als Trigger? Eine Aktualisierung der Werte in lastMeasures tritt bei jedem refresh des eingestellten Updateintervalls auf, eine Änderung der Werte scheidet auch aus...
Bisher habe ich auf eine Änderung von date in measuregrp01 getriggert - so 100%ig verlässlich ist das aber auch nicht mehr nach den Erfahrungen mit der Herzfrequenz (s.o.).Hallo,
ChatGPT hat es so implementiert, wobei bei lastActivity noch ein Fehler drin war und es ist oben eine neue Version drin.
Zitat von ChatGPT
Fazit: Woher kommt der „letzte Wert“? – Kurzfassung-
lastMeasures
Die Withings-API liefert measuregrps ungeordnet.
Dein Adapter sortiert sie zuerst nach Zeit absteigend (date → created → modified).
Danach ist Index 0 immer die neueste Messung.
writeLastMeasures() geht von oben nach unten durch und nimmt pro Mess-Typ nur den ersten Treffer.
→ Ergebnis: Der neueste Wert pro Typ. -
lastActivity
Der Adapter sortiert activities nach modified absteigend.
Danach ist activities[0] die neueste Aktivität.
writeLastActivity() schreibt genau diesen Eintrag.
→ Ergebnis: Immer die aktuellste Aktivität. -
lastSleep / lastSleepSummary
Sleep-Daten (series) werden nach startdate oder modified absteigend sortiert.
Dadurch ist series[0] die neueste Nacht.
writeLastSleepSummary() nimmt genau diesen Eintrag.
→ Ergebnis: Immer die aktuellste Sleep-Summary.
Ultrakurz:
Sortierung entscheidet, nicht Withings.
Alles wird neueste zuerst sortiert.
Der Adapter nimmt immer das erste Element [0] nach der Sortierung.
Deshalb bekommst du überall den wirklich letzten Wert.Zitat Ende:
Wenn morgen das Sleep durchläuft, werde morgen mal den pull-request erstellen.
Gruß Tino
-
-
@Tino-0
Ja, der Algorithmus von ChatGPT ist schön und liefert die neuesten Werte. Genau das, was man braucht.
Aber woran erkenne ich, dass der Wert erneuert wurde - das z.B. eine neue Wägung stattgefunden hat - und dass das neue Gewicht irgendwo gespeichert, verrechnet oder sonst was werden soll? Bei mir wird es z.B. mit anderen Parametern in eine csv-Datei geschrieben.
Das Gewicht muss sich gegenüber der letzten Wägung nicht ändern und aktualisiert wird der Wert in lastMeasures immer, wenn das im Adapter eingestellte Updateintervall auslöst, bei mir alle 10 Minuten. Diese beiden Eigenschaften scheiden als Trigger also aus. -
@Tino-0
Ja, der Algorithmus von ChatGPT ist schön und liefert die neuesten Werte. Genau das, was man braucht.
Aber woran erkenne ich, dass der Wert erneuert wurde - das z.B. eine neue Wägung stattgefunden hat - und dass das neue Gewicht irgendwo gespeichert, verrechnet oder sonst was werden soll? Bei mir wird es z.B. mit anderen Parametern in eine csv-Datei geschrieben.
Das Gewicht muss sich gegenüber der letzten Wägung nicht ändern und aktualisiert wird der Wert in lastMeasures immer, wenn das im Adapter eingestellte Updateintervall auslöst, bei mir alle 10 Minuten. Diese beiden Eigenschaften scheiden als Trigger also aus.Es ist oben wieder eine neue Version jetzt mit Update Datum:
....lastMeasures.1
....lastMeasures.1_update
....lastMeasures.5
....lastMeasures.5_updateAls Datum wurden "date" ausgewählt.
Zitat CharGPT
Welchen Zeitstempel willst du als „Update“-Zeit für lastMeasures verwenden?
Die Withings-Measure-Group enthält drei mögliche Zeitfelder:
date
→ Der eigentliche Messzeitpunkt (Unix)
created
→ Wann die Messung auf dem Server erstellt wurde (Unix)
modified
→ Wann die Messung zuletzt geändert wurde (Unix)Gruß Tino
-
@Tino-0
Super, fast perfekt. "Fast" weil die Zeit als String im ioBroker erscheint.
Konkret:
lastMeasures.1_update sagt 2025-11-18T06:06:05.000Z als String,
die Messung war zur Zeit 1763445965000, entsprechend 18.11.2025 07:06:05
Natürlich kann man das im Script umbasteln, aber vlt. kann ChatGPT das direkt in eine "normale" Zeitangabe ändern.Vielen Dnk für "eure" Mühen,
vG Achim -
@Tino-0
Super, fast perfekt. "Fast" weil die Zeit als String im ioBroker erscheint.
Konkret:
lastMeasures.1_update sagt 2025-11-18T06:06:05.000Z als String,
die Messung war zur Zeit 1763445965000, entsprechend 18.11.2025 07:06:05
Natürlich kann man das im Script umbasteln, aber vlt. kann ChatGPT das direkt in eine "normale" Zeitangabe ändern.Vielen Dnk für "eure" Mühen,
vG Achim -
@Tino-0
die Zeitangabe ist immer noch vom Typ String, jetzt allerdings in einem ISO-Format.
Sollte das nicht wie für Datum-/Zeit-Werte in Javascript und ioBroker üblich eine Zahl sein, die die Millisekunden seit dem 1.1.1970 angibt (Unix-Angabe)?
Die date-Angaben der measuregrpsXX sind doch auch vom Typ Number und geben die Millisekunden an. -
@Tino-0
die Zeitangabe ist immer noch vom Typ String, jetzt allerdings in einem ISO-Format.
Sollte das nicht wie für Datum-/Zeit-Werte in Javascript und ioBroker üblich eine Zahl sein, die die Millisekunden seit dem 1.1.1970 angibt (Unix-Angabe)?
Die date-Angaben der measuregrpsXX sind doch auch vom Typ Number und geben die Millisekunden an.die war im ISO Format 2025-11-18T06:06:05.000Z jetzt ist sie in .toLocaleString("de-DE")
- ISO-8601 (der Standard für alles, ideal fürs Logging & ioBroker)
new Date(ts * 1000).toISOString() Format: 2025-02-19T10:32:55.000Z ✓ Maschinentauglich ✓ Sortierbar ✓ Universell ✓ ioBroker liebt es- Lokales Datum + Zeit (z.B. „2025-02-19 11:32:55“)
new Date(ts * 1000).toLocaleString("de-DE") Beispiel: 19.02.2025, 11:32:55- Nur Datum
new Date(ts * 1000).toLocaleDateString("de-DE") Ergebnis: 19.02.2025- Nur Uhrzeit
new Date(ts * 1000).toLocaleTimeString("de-DE") Ergebnis: 11:32:55- UNIX Timestamp
Wenn du den Rohwert willst: ts // Sekunden Date.now() // MillisekundenWas willst du haben?
Gruß Tino
-
"Was willst du haben?"
ja ja, hab verstanden 
ernsthaft: auf keinen Fall einen String, ganz normal die Millisekunden seit dem 1.1.1970 als Typ Number,
also z.B. 1763502691926 für jetzt, damit kann man problemlos jedes gewünschte Anwenderformat erzeugenGruß Achim
-
"Was willst du haben?"
ja ja, hab verstanden 
ernsthaft: auf keinen Fall einen String, ganz normal die Millisekunden seit dem 1.1.1970 als Typ Number,
also z.B. 1763502691926 für jetzt, damit kann man problemlos jedes gewünschte Anwenderformat erzeugenGruß Achim
-
uff...
- XX_timestamp hat den richtigen Zahlenwert
- wenn die Eigenschaft "role" für XX_timestamp nicht "value" sondern "date" ist, erhält man im Objektbaum des ioBrokers auch eine Darstellung als Datum, obwohl es immer noch eine Zahl ist, nach der man sortieren kann, Differenzen bilden kann, in jedem beliebigen Datums- / Zeitformat anzeigen lassen kann etc.
Dann ist ein zusätzlicher Datenpunkt mit dem Datum als String nicht mehr erforderlich, eher verwirrend, und XX_update könnte entfallen.
Vorschlag: Entweder XX_timestamp (würde ich bevorzugen) oder XX_updateIch habe das mal im Objektbaum für 1_timestamp geändert:


-
uff...
- XX_timestamp hat den richtigen Zahlenwert
- wenn die Eigenschaft "role" für XX_timestamp nicht "value" sondern "date" ist, erhält man im Objektbaum des ioBrokers auch eine Darstellung als Datum, obwohl es immer noch eine Zahl ist, nach der man sortieren kann, Differenzen bilden kann, in jedem beliebigen Datums- / Zeitformat anzeigen lassen kann etc.
Dann ist ein zusätzlicher Datenpunkt mit dem Datum als String nicht mehr erforderlich, eher verwirrend, und XX_update könnte entfallen.
Vorschlag: Entweder XX_timestamp (würde ich bevorzugen) oder XX_updateIch habe das mal im Objektbaum für 1_timestamp geändert:

