Grundsätzlich funktioniert das ohne probleme.
Damit xbee sich nicht totsendet vor lauter analogen Werten , messe ich pro Minute 5 samples. Reicht , um zu erfahren, ob die Waschmaschiene Strom zieht, oder nicht. Hier mal ein kleines Script, wo auf zwei Kanäle 5 Samples eingelesen werden, . 5 Samples deshalb, sollte er einmal einen falschen wert liefern, ist das hier nicht so schlimm, das script nimmt den Durchschnitt. Wollte , auch nur Kund tun, das ich serielle, digitale und analoge Werte mit xbee problemlos einlesen kann. Ist nur eine Sache des scripts, wie ich das auswerte.
if ($IPS_SENDER == "Execute")
{
echo "Dieses Script kann nicht von Hand ausgeführt werden.";
return;
}
$daten = $IPS_VALUE; // Daten von Registervariable
IPS_LogMessage($IPS_SELF, $IPS_VALUE); // Daten im Meldungsfenster ausgeben
//-----------------------------------------------------------------------------
/*
$handle = fopen("c:/analog.txt", "wb");
fwrite($handle,$daten,$strg_lenght."
");
fclose($handle);
RegVar_SendText(59099 /*[XBee Splitter_10_Waschmasch\Register Variable]*/,"");
*/
$strl=strlen($daten);
//Den ganzen Binären String umwandel in ASCII um die HEX Werte anzuzeigen
//Byte für Byte
for ($i = 0;$i < $strl; $i++)
{
$char = bin2hex(substr($daten,$i,1));
$gesdaten .=$char;
}
//$file = "C:\\analog.txt";
//file_put_contents($file,$gesdaten);
// Die Stringlänge ist 33 bei 5 Sampels
// daraus wird dann der Durchschnitt ermittelt
$Byte1_Trockner = "0x".substr($gesdaten, -5,3);
$Byte2_Trockner = "0x".substr($gesdaten, -17,3);
$Byte3_Trockner = "0x".substr($gesdaten, -29,3);
$Byte4_Trockner = "0x".substr($gesdaten, -41,3);
$Byte5_Trockner = "0x".substr($gesdaten, -53,3);
$Byte1_Waschm = "0x".substr($gesdaten, -9,3);
$Byte2_Waschm = "0x".substr($gesdaten, -21,3);
$Byte3_Waschm = "0x".substr($gesdaten, -33,3);
$Byte4_Waschm = "0x".substr($gesdaten, -45,3);
$Byte5_Waschm = "0x".substr($gesdaten, -57,3);
$wert1="0x".dechex($Byte1_Trockner + $Byte2_Trockner + $Byte3_Trockner + $Byte4_Trockner + $Byte5_Trockner);
$wert2="0x".dechex($Byte1_Waschm + $Byte2_Waschm + $Byte3_Waschm + $Byte4_Waschm + $Byte5_Waschm);
// Daraus der Durchschnittswert
$durchn_wert1 = ($wert1 / 5);
$durchn_wert2 = ($wert2 / 5);
SetValuestring(45748 /*[Analog_Wert_Waschmaschine]*/,$durchn_wert2);
SetValuestring(40600 /*[Analog_Wert_Trockner]*/,$durchn_wert1);