Vermutlich...
Es gibt in github ein Projekt:
https://github.com/keptenkurk/BS440.
Wie erwähnt nutze ich eine Medisana BS444. Es gibt noch diverse andere Körperanalysewaagen bei der Firma Medisana, und es ist durchaus möglich, dass alle Geräte der connect-Klasse (also mit eingebautem Bluetooth) das gleiche Kommunikationsprotokoll verwenden. Sicher funktioniert die Software aber auf jeden Fall mit dem Modell BS440 und BS444 (Erstere, weil sie dafür entwickelt wurde, Letztere, weil ich diese Waage nutze...)
Die Software habe ich bei mir auf einem Pi zero W installiert, der zusammen mit einem Netzteilmodul (hlk-5m05) im Spiegelschrank verbaut ist (ich habe im Spiegelschrank Dauerstrom). Auf dem Pi ist die Software installiert und als Dienst gestartet. Sobald die Software läuft, scannt sie alle 10 Sekunden nach Bluetooth Geräten. Findet sie ein Gerät mit passender ID, baut sie eine Verbindung auf und ruft die Analysedaten ab.
Anschließend sendet sie den letzten gültigen Datensatz an die konfigurierten Plugins (z.B. Daten irgendwohin schreiben, auf einer einfachen Webseite anzeigen, an ein mqtt Topic senden - diesen Weg nutze ich).
Man kann in der Waage bis zu zehn Personen definieren. Die Waage wählt (anhand des aktuellen Gewichts) automatisch den passenden Speicherplatz aus (natürlich kann man das auch manuell tun... soll ja Familien geben, in denen mehrere Personen ein sehr ähnliches Gewicht haben...)
Die Speicherplätze können über die Konfiguration auf dem Pi mit einem Namen versehen werden, so dass im Topic anschließend die Datensätze eindeutig zuzuordnen sind - die Speicherplatznummer wird aber immer auch mit ausgewiesen.
Ein übertragener Datensatz sieht dann so aus:
Code: Alles auswählen
{
"valid": true,
"weight": 12.3,
"timestamp": 1733904474,
"person": 1,
"bmi": 45.6,
"kcal": 7890,
"fat": 12.3,
"tbw": 45.6,
"muscle": 78.9,
"bone": 1.2,
"gender": "male",
"age": 11,
"size": 299,
"activity": "normal",
"model": "BS444",
"name": "Udo",
"date": "2024-12-11T09:08:40.397"
}
Aus nachvollziehbaren Gründen

sind das natürlich keine echten Daten...
In openHAB benötige ich also nur ein passendes mqtt Thing:
Code: Alles auswählen
Thing topic bs444 "Medisana Waage" {
Type string : json "Json" [ stateTopic="bs444/udo/" ]
Type number : weight "Gewicht" [ stateTopic="bs444/udo/", transformationPattern="JSONPATH:$.weight", unit="kg" ]
Type number : bmi "BMI" [ stateTopic="bs444/udo/", transformationPattern="JSONPATH:$.bmi" ]
Type number : kcal "kCal" [ stateTopic="bs444/udo/", transformationPattern="JSONPATH:$.kcal", unit="kcal" ]
Type number : fat "Fett" [ stateTopic="bs444/udo/", transformationPattern="JSONPATH:$.fat", unit="%" ]
Type number : tbw "Wasser" [ stateTopic="bs444/udo/", transformationPattern="JSONPATH:$.tbw", unit="%" ]
Type number : muscle "Muskel" [ stateTopic="bs444/udo/", transformationPattern="JSONPATH:$.muscle", unit="%" ]
Type number : bone "Knochen" [ stateTopic="bs444/udo/", transformationPattern="JSONPATH:$.bone", unit="kg" ]
Type number : timestamp "Zeitstempel" [ stateTopic="bs444/udo/", transformationPattern="JSONPATH:$.timestamp", unit="s" ]
}
wobei ich wegen der Einheiten im Thing direkt die Daten in einzelne Channel zerlege. Wahlweise könnte man das auch im Link zwischen json-string Channel und diversen Number Items unterbringen, dann halt ohne vollständige UoM Unterstützung. Das json ist bei mir nur der Vollständigkeit halber konfiguriert, aber das kann auch bei der Fehlersuche praktisch sein.
Im json sind einige weitere Datenpunkte enthalten, die sich jedoch nicht ändern und somit auch nicht ausgewertet werden müssen.
Möchte man weitere Personen berücksichtigen, so müssen entsprechend weitere Channel nach obigem Schema angelegt werden, mit anderem stateTopic.
Die Waage überträgt stets die letzten 30 Datensätze der gemessenen Person an den Bluetooth Empfänger, die Software leitet den letzten Datensatz weiter.
Ab und zu kommt es vor, dass die Datenübertragung nicht richtig funktioniert, dann kann man beim nächsten Wiegevorgang (nach dem Wiegen) das Log des Dienstes öffnen und dort auf alle 30 Datensätze zugreifen. Ich habe mir ein Excel Arbeitsblatt angelegt, mit dem ich die Daten bequem in ein passendes Zielformat bringen kann (InfluxDB) so dass ich die Daten dann immer noch mit vertretbarem Aufwand nachpflegen kann.
Da die Waage ausschließlich über die zugehörige App konfiguriert werden kann, muss man ab und zu den Dienst mal anhalten, damit man die Waage mit dem Smartphone verbinden kann. Nur so kann man Körpergröße, Alter und Körpertyp (sportlich oder ich...) anpassen. Da die Waage kein Geburtsdatum kennt und auch keine richtige Uhr hat, wird das Alter nicht automatisch angepasst, das muss also auf jeden Fall über die zugehörige App geschehen. Wie so oft kann man an dieser Stelle nicht vermeiden, mit der Cloud in Berührung zu kommen, aber irgendwas ist ja immer...
Die Software hat außerdem noch eine "Macke", das macht sich bemerkbar, wenn sie mehrere Tage am Stück läuft. Mein Workaround hierfür ist, dass ich in der service Datei den Parameter RuntimeMaxSec auf 1d gesetzt habe, das bedeutet, dass der Dienst nach spätestens 24 Stunden automatisch erneut gestartet wird. Dabei wird auch die log-Datei neu initialisiert, so dass hier einigermaßen Platz gespart wird - natürlich hat das auch Nachteile

weil man nicht weit in die Vergangenheit schauen kann...
Fragen? Fragen!