Personenwaage / 50g Auflösung

In unserem Gäste Bad befindet sich eine Personenwaage A&D UC-321P.
Diese präzise Waage mit einem Ziffernschritt von 50g kann selbst kleinste Körpergewichtsveränderungen feststellen.
Sie besitzt eine serielle Schnittstelle - ggf. gibt es Mittlerweile auch Bluetooth Geräte.
Wie man diese auswertet zeigt nachfolgendes Skript:

  1. „Serial Port“ mit den entsprechenden Settings hinzufügen
  2. „Cutter“ mit CRLF HEX 0C0A hinzufügen > Trenner der einzelnen Datensätze
  3. „Register Variable“ mit u.g. Ziel-Skript hinzufügen
  4. Skript hinzufügen

Was passiert hier?
Die Waage verschickt fortlaufend das Gewicht in Kg an den Serial Port.
Dieser leitet es weiter an den Cutter, der die einzelnen Datensätze „aufbereitet“.
Die Register Variable hat als übergeordnete Instanz o.g. Cutter und triggert das Skript.
Die Waage erkennt automatisch, wenn die Person ruhig steht - also der angezeigte Wert stabil ist > dann wird „ST“ gesendet.
Mit derPHP-Funktion [b]substr[/b] wird danach gesucht dann „abgeschnitten“ und mit floatval in eine Variable geschrieben.
Da dies nur einmal passieren soll (die Waage sendet weiterhin), wird mit Hilfe von VariableUpdated das erneute Ausführen des Skript für 30 Sekunden unterdrückt.
Die IF-Anweisung: if (($gewicht > $kg_px - $kg_tol)) liefert eine „intelligente“ Erkennung welche Person sich gerade auf der Waage bewindet.
Die Daten können als CSV-Datei (EXCEL) oder in eine SQL-Datenbank abgespeichert und später ausgewertet werden.
Auch eine Ansage: „Herzlichen Glückwunsch: Sie haben schon 560 Gramm abgenommen!“ ist über die „TTS_GenerateFile“ Funktion möglich …

MST

$inbuf = Trim($IPS_VALUE);

$data =  IPS_GetVariable(27927 /*[0 OG\Bad\Waage\aktuelles Gewicht]*/);
$last_up = time()-($data['VariableUpdated']);
//echo "Delta- T: $last_up
";

$kg_tol = 1;
$kg_p1 = GetValue(59986 /*[0 OG\Bad\Waage\Gewicht]*/);
$kg_p2 = GetValue(26934 /*[0 OG\Bad\Waage\Gewicht]*/);

if ((substr($inbuf, 0, 4)=="ST,+") and ($last_up > 30)) {	// Gewicht ist stabil
	$gewicht = substr($inbuf, 4, 6);                			// Gibt einen Teil eines Strings zurück
	$gewicht = floatval($gewicht);                  			// Konvertiert einen Wert nach Float
   $person = "unbekannt";
	if (($gewicht > $kg_p1-$kg_tol) and($gewicht < $kg_p1+$kg_tol)	){
	   $person = "horst";
	   SetValue(59986 /*[0 OG\Bad\Waage\Gewicht]*/, $gewicht);
 	}
 	if (($gewicht > $kg_p2 - $kg_tol) and($gewicht < $kg_p1 + $kg_tol)	){                            			
	   $person = "erna";
	   SetValue(26934 /*[0 OG\Bad\Waage\Gewicht]*/, $gewicht);
  	}

	if ($gewicht > 50) {       // nur bei Personen
		SetValue(27927 /*[0 OG\Bad\Waage\aktuelles Gewicht]*/, $gewicht);
   	$handle = fopen("d:\\Daten\\Biometrik\\".$person."_gewicht.txt", "a");
		fwrite($handle, date("d.m.y").";". date("H:i:s").";".$gewicht."
");
		fclose($handle);

   	$id_sound = 35352 /*[Media IR\Media Player Teufel]*/;
		TTS_GenerateFile(38200 /*[Media IR\Text To Speech]*/, $gewicht, IPS_GetKernelDir()."sounds\\gewicht_aktuell.wav", 19); // 16kHz, 16Bit, Stereo
		IPS_Sleep(2000);
		WAC_SetVolume($id_sound ,50);
		WAC_PlayFile($id_sound , IPS_GetKernelDir()."sounds\\gewicht_aktuell.wav");
	}
}

Hi,

den Kommentar möchte ich bei meiner Gewichtsklasse lieber nicht hören! :o :confused: :slight_smile: :stuck_out_tongue:

mfg

Bernd

PS: kann man die Statistik irgendwo im Web sehen?, könnte man als Katalysator für Scheidungsanbahnung vermarkten.

Bei mir würde kommen:

Bitte nicht in Gruppen auf die Waage treten…

Aber gutes Beispiel für Cutter und Co

Bei entsprechender Zunahme könnte man automatisch den Kühlschrank verriegeln! :slight_smile: