Und wieder was neues…
Status Byte wird in Bit’s zerlegt.
Wasserstand geht jetzt richtig.
<?
//host = '192.168.1.15'
//port = 2081
$ID= IPS_GetParent($_IPS['SELF']);
if ($_IPS['SENDER'] == "RegisterVariable")
{
$data = RegVar_GetBuffer($_IPS['INSTANCE']);
$data .= $_IPS['VALUE'];
GetStatus($ID,$data);
}
function GetStatus($ID,$data)
{
//var_dump($data);
$byte0 = ord(substr($data,0,1));// immer 0x32 - 50 Startbyte
$status = ord(substr($data,1,1));//(carafe << 0) + (grind << 1) + (ready << 2) + (grinder << 3) + (heater << 4) + (hotplate << 6) + (working << 5) + (timer << 7))
$waterlevel = ord(substr($data,2,1)); 1te Stelle Wasser genug für Tassen !, 2te Stelle voll, halb, wenig, leer.
$byte3 = ord(substr($data,3,1));// immer 0x00 - 0
$strength = ord(substr($data,4,1));
$cups = dechex (ord(substr($data,5,1))); // 1te Stelle die Anzahl die gekocht würden(werden), 2te Stelle Sollwert
$byte6 = ord(substr($data,6,1));// immer 0x7E - 126 Endbyte
if ($byte0 == 50){//0x32
$cups =str_pad($cups, 2 ,'0', STR_PAD_LEFT);
$arr=str_split($cups, 1);
$cups = hexdec($arr[0]);
$cups_soll = hexdec($arr[1]);
$waterlevel = dechex($waterlevel);
$waterlevel =(str_pad($waterlevel, 2 ,'0', STR_PAD_LEFT));
$arr =str_split($waterlevel, 1);
$genugwasser = hexdec($arr[0]);
$waterlevel = (hexdec($arr[1]));
$id = IPS_GetObjectIDByName("Status",$ID);
SetValue($id,$status);
$id = IPS_GetObjectIDByName("Wasserstand",$ID);
SetValue($id,$waterlevel);
$id = IPS_GetObjectIDByName("genug Wasser?",$ID);
SetValue($id,$genugwasser);
$id = IPS_GetObjectIDByName("Stärke",$ID);
SetValue($id,$strength);
$id = IPS_GetObjectIDByName("Tassen",$ID);
SetValue($id,$cups);
$id = IPS_GetObjectIDByName("Tassen Soll",$ID);
SetValue($id,$cups_soll);
$stat =(str_pad(decbin($status), 8 ,'0', STR_PAD_LEFT));
$id = IPS_GetObjectIDByName("Filter/Bohnen",$ID);
SetValue($id, substr($stat,6,1));
$id = IPS_GetObjectIDByName("Kanne in Maschine ?",$ID);
SetValue($id, substr($stat,7,1));
$id = IPS_GetObjectIDByName("Heizplatte",$ID);
SetValue($id, substr($stat,1,1));
$id = IPS_GetObjectIDByName("Kaffee fertig",$ID);
SetValue($id, substr($stat,5,1));
}
}
?>