Hallo HJH,
ich habe das jetzt so gelöst. Wenn ich das so überschauen kann, müsste das doch das gleiche sein, oder? Nur vermutlich umständlicher :o
//Berechnung des Stroms aus Akku
$BatteryCurrent = ($Byte[20])+($Byte[19]*256);
if ($BatteryCurrent >= 32768) {
$BatteryCurrent = $BatteryCurrent - 65536;
}
SetValueInteger("BatteryCurrent", $BatteryCurrent);
Die Werte aus dem RX-String sehen bei mir so aus:
„0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 62 242 255 92 41 10 47 10 136 0 0 10 215 10 236 10 236 10 218 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 246 247 15 186 0 0 0 0 0 0 2 0 0 0 5 0 1 0 0 0 0 0 0 0 0 0 0 0“
Das Script zum Auswerten sieht in der Zwischenzeit nun so aus.
Allerdings fehlt noch die Abfrage, ob tatsächlich 80 bytes enpfangen wurden.
Ich merke schon, ich muss mich noch intensiver mit PHP auseinander setzten.
<?
/*
*******************************
IP-SYMCON Event Scripting
*******************************
File : XBee.Daten.ips.php
Trigger :
Interval :
*/
//Daten als dez-String auslesen
$instr=GetValueString("XBee.RX");
$datenstr="";
for($i=0; $i<strlen($instr); $i++) {
$datenstr.=strtoupper(ord($instr{$i}))." ";
}
SetValueString("XBee.Daten",$datenstr); //String ausgeben
//String auflösen und prüfen der Daten
$Byte="";
$Byte = explode(" ",$datenstr);
//=========================================================================
//Anzeige Charging State
$ChargingState = $Byte[16];
switch ($ChargingState) {
case 0:
SetValueString("ChargingState", "Not Charging");
break;
case 1:
SetValueString("ChargingState", "Reconditioning Charging");
break;
case 2:
SetValueString("ChargingState", "Full Charging");
break;
case 3:
SetValueString("ChargingState", "Trickle Charging");
break;
case 4:
SetValueString("ChargingState", "Waiting");
break;
case 5:
SetValueString("ChargingState", "Charging Fault Condition");
break;
}
//Anzeige Charging Source
$ChargingSource = $Byte[39];
switch ($ChargingSource) {
case 0:
SetValueString("ChargingSource", "No Charging Source");
break;
case 1:
SetValueString("ChargingSource", "Internal Charger");
break;
case 2:
SetValueString("ChargingSource", "Home Base");
break;
}
//Anzeige OI Mode
$OIMode = $Byte[40];
switch ($OIMode) {
case 0:
SetValueString("OIMode", "Off");
break;
case 1:
SetValueString("OIMode", "Passive");
break;
case 2:
SetValueString("OIMode", "Safe");
break;
case 3:
SetValueString("OIMode", "Full");
break;
}
//Berechnung der Batteriespannung
$BatteryVoltage = ($Byte[18])+($Byte[17]*256);
$BatteryVoltage=$BatteryVoltage / 1000;
$BatteryVoltage = round($BatteryVoltage,1);
SetValueFloat("BatteryVoltage", $BatteryVoltage);
//Berechnung des Stroms aus Akku
$BatteryCurrent = ($Byte[20])+($Byte[19]*256);
if ($BatteryCurrent >= 32768) {
$BatteryCurrent = $BatteryCurrent - 65536;
}
SetValueInteger("BatteryCurrent", $BatteryCurrent);
//Berechnung der Restbatteriekapazität
$BatteryCharge = ($Byte[23])+($Byte[22]*256);
SetValueInteger("BatteryCharge", $BatteryCharge);
//Berechnung der Batteriekapazität
$BatteryCapacity = ($Byte[25])+($Byte[24]*256);
SetValueInteger("BatteryCapacity", $BatteryCapacity);
//Berechnung der Restbatteriekapazität in %
$BatteryChargePercent = $BatteryCharge / $BatteryCapacity * 100;
$BatteryChargePercent = round($BatteryChargePercent,1);
SetValueFloat("BatteryChargePercent", $BatteryChargePercent);
//Berechnung der Batterietemperatur
$BatteryTemperature = ($Byte[21])+($Byte[21]*0);
SetValueInteger("BatteryTemperature", $BatteryTemperature);
?>
Achso, gesendet zur Abfrage wird übrigens das hier:
$ID=30045;
XBee_SendBuffer($ID, chr(128)); //Start Command
XBee_SendBuffer($ID, chr(149)); //Opcode 149
XBee_SendBuffer($ID, chr(1)); //Number of packets
XBee_SendBuffer($ID, chr(100)); //Packet ID 100