Hallo
Bei mir gibt es da seit 3-4 Tagen ein Problem und ich komme nicht so recht weiter.
Habe schon vor ein paar Wochen den Roomba erfolgreich über Xbee in IPS integriert.
Daten senden und auslesen war kein Problem.
Jetzt bin ich damit auf meinen neuen Server umgezogen und hab von Hand die Skripts kopiert und die Variablen neu angelegt.
Clever wie ich war hab ich immer das was ich rüber gezogen habe vom alten Server gelöcht. Dabei hat sich wohl ein Fehler eingestellt den ich nicht finde.
An der Hardware hat sich nichts geändert!
Auf dem neuen Server habe ich jetzt das Problem das ich zwar Kommandos zum Roomba senden kann aber keine Sensor Daten lesen.
Ich sende zum lesen:
RegVar_SendText(58359 /*[iRobot\Register Variable]*/ ,chr(128));
RegVar_SendText(58359 /*[iRobot\Register Variable]*/ ,chr(149));
RegVar_SendText(58359 /*[iRobot\Register Variable]*/ ,chr(1));
RegVar_SendText(58359 /*[iRobot\Register Variable]*/ ,chr(100));
und die Daten sollten hier landen:
if ($IPS_SENDER == "Execute")
{
echo "Dieses Script kann nicht von Hand ausgeführt werden.";
return;
}
$daten = $IPS_VALUE; // Daten von Registervariable
function Str2Dec($daten)
{
$Dec = "";
for($i=0; $i<strlen($daten); $i++)
{
$Dec .= sprintf("%03d ", ord($daten[$i]));
}
return $Dec;
}
$Dec = Str2Dec($daten);
$instr=$daten;
$ChargingState = $instr[16];
switch ($ChargingState) {
case 0:
SetValueString(54468 /*[iRobot\ChargingState]*/, "Not Charging");
break;
case 1:
SetValueString(54468 /*[iRobot\ChargingState]*/, "Reconditioning Charging");
break;
case 2:
SetValueString(54468 /*[iRobot\ChargingState]*/, "Full Charging");
break;
case 3:
SetValueString(54468 /*[iRobot\ChargingState]*/, "Trickle Charging");
break;
case 4:
SetValueString(54468 /*[iRobot\ChargingState]*/, "Waiting");
break;
case 5:
SetValueString(54468 /*[iRobot\ChargingState]*/, "Charging Fault Condition");
break;
}
$ChargerAvailable = $instr[40];
switch ($ChargerAvailable){
case 0:
SetValueString(24149 /*[iRobot\ChargerAvaible]*/, "No Charger");
break;
case 1:
SetValueString(24149 /*[iRobot\ChargerAvaible]*/, "Internal Charger");
break;
case 2:
SetValueString(24149 /*[iRobot\ChargerAvaible]*/, "Home Base Charger");
break;
};
$BumpsWheeldrops = (ord($instr[1])<<8);
setvalue(10311 /*[iRobot\BumpsWheeldrops]*/ ,$BumpsWheeldrops);
$BatteryVoltage = (ord($instr[17])<<8) + ord($instr[18]);
setvalue(11643 /*[iRobot\BatteryVoltage]*/,$BatteryVoltage);
$BatteryCurrent = (ord($instr[19])<<8) + ord($instr[20]);
if ($BatteryCurrent > 0x7fff) $BatteryCurrent |= 0xffff0000;
setvalue(53327 /*[iRobot\BatteryCurrent]*/,$BatteryCurrent);
$BatteryCharge = (ord($instr[22])<<8) + ord($instr[23]);
setvalue(25681 /*[iRobot\BatteryCharge]*/ ,$BatteryCharge);
$BatteryCapacity = (ord($instr[24])<<8) + ord($instr[25]);
setvalue(37577 /*[iRobot\BatteryCapacity]*/ ,$BatteryCapacity);
$ChargerAvailale=(ord($instr[1])<<8);
IPS_LogMessage($IPS_SELF, $Dec); // Daten im Meldungsfenster ausgeben
IPS_LogMessage($IPS_SELF, $BatteryCurrent); // Daten im Meldungsfenster ausgeben
Im Debug der Register Variable sehe ich auch die vier zeilen vom Senden aber kein Antwort darauf.
Wahrscheinlich nur ein kleiner Fehler aber ich komme nicht drauf.
Hat jemand eine Idee oder einen wink mit dem Zaunpfahl?
Bin für jede Hilfe dankbar.
Gruß
René
dump.txt (204 Bytes)