Hallo
Bei meinem Umbau hab ich alles von der Schnittstelle genommen.
Hallo
Bei meinem Umbau hab ich alles von der Schnittstelle genommen.
Ich wollte es zuerst auch so machen aber das funktioniert mit meinem Xbee board nicht.
Ich komme erst nächste Woche wieder an meine Roomba ran.
Bräuchte Hilfestellung wegen den Variablen und Skripts in Ips.
Wie z.b. sende ich einen einfachen Befehl um den Roomba starten zulassen?
MFG Franz
Vielleicht hilft dir das hier weiter
$ID=29958;
XBee_SendBuffer($ID, chr(131)); //Safe Mode
IPS_Sleep(200);
XBee_SendBuffer($ID, chr(128)); //Passive Mode
XBee_SendBuffer($ID, chr(135)); //CLEAN
Ist denke ich selbsterkärend, was der Roomba da machen soll
Übrigens denke ich immer noch, das du ein Verkabelungsfehler hast, das geht alles über die Schnittstelle, auch die Spannungsversorgung.
Grüße,
Doc
Danke Doc,
$ID=29958;
XBee_SendBuffer($ID, chr(131)); //Safe Mode
IPS_Sleep(200);
XBee_SendBuffer($ID, chr(128)); //Passive Mode
XBee_SendBuffer($ID, chr(135)); //CLEAN
blöde Frage $ID das ist die Register Variable oder?
Den Befehl XBee_SendBuffer will er bei mir nicht nehmen.
Sorry aber PHP ist noch nicht ganz meins…
Ich werde das mit den Kabeln nächste Woche nochmal überprüfen.
… ähm, ist wohl noch ein Relikt aus IPS1.0 Zeiten.
Sollte bei dir dann wohl eher so aussehen:
$ID=xxxxx;
RegVar_SendText($ID, chr(131)); //Safe Mode
IPS_Sleep(200);
RegVar_SendText($ID, chr(128)); //Passive Mode
RegVar_SendText($ID, chr(135)); //CLEAN
Sorry,
Doc
Super Danke Doc,
wie kann ich z.b. meinen Akkustand im Webfront visualisieren?
Geht das überhaubt…
Danke
MFG Franz
Ja das geht.
Man kann alle Sensoren etc. einlesen und damit auch ausgeben.
Regelmaessige Abfrage des Roomba ( zB alle 10s ).
Ich lese wenn der Roomba auf der Ladestation steht alle 10s alle Infos.
Beim Fahren alle 2s.
Damit sieht man auch zB ob er einen „Turm“ sieht etc.
Man kann auch eigenen ( kurze Lieder ) reinladen und
abspielen.
Hi 1007,
danke für das Bild und die Erklärung.
Ich habe nun versucht mit deinen skripts (Input, Funcpool, Output) etwas zu spielen aber ich verstehe es leider nicht.
Wohin muss der skript Input,Output und Funcpool?
b.z.w. ist der Funcpool der skript den ich von meiner Register Variable einlesen lasse?
MFG Franz
Ja.
Das waren meine Anfaenge.
Aktuelle Scripts ( V2 ) hab ich nicht hochgeladen.
Werd nachher ,nach der Arbeit, mal was schicken.
das wäre super:) Danke
Schreib dir bis morgen mal ein kleines Testprogramm
nur um die Verbindung zu testen. Da werden wir schon
rauskriegen an was es liegt.
So hier mal ein Testprogramm fuerden Roomba
$instance =53848 ; // Xbee-Splitter
$xbee_id = 2;
$string = "";
$command[0] = 149;
$command[1] = 1;
$command[2] = 100;
for ( $x = 0 ; $x< sizeof($command) ; $x++)
{
$c = chr($command[$x]);
$string = $string . $c ;
}
XBee_SendBuffer($instance,$xbee_id,$string);
danach muesste der Roomba mit einem 80 Byte langen Telegramm
antworten,
Ruf mal von der Xbee Register Variable das Debug-Fenster auf.
Dort kann man die Daten sehen die reinkommen vom Roomba.
Also,
wenn ich deine skript ausführe, dann kommt bei mir nur
Warning: xbee_sendbuffer: Instance #11189 not found!
Ich habe als Instanz Id die Register Variable versucht und den Splitter direkt. Bei allen beiden kommt diese Fehlermeldung. (Natürlich mit unterschiedlicher ID)
MFG Franz
Mach mal ,
RegVar_SendText(ID der Registervariable, $string);
das andere ist wohl ein Bug, es geht gar nichts von XBee direkt.
Habs als Bug gemeldet!
Oh man, und ich dachte, ich wäre ein schwieriger Fall
Sende mal das hier zum Roomba:
$ID=xxxxx;
RegVar_SendText($ID, chr(128)); //Start Command
RegVar_SendText($ID, chr(149)); //Opcode 149
RegVar_SendText($ID, chr(1)); //Number of packets
RegVar_SendText($ID, chr(100)); //Packet ID 100
Die Antwort vom Roomba ist dann ein 80 Byte langes Datenpaket, welches du mit diesem Script hier weiter auswerten kannst. (evtl. noch den Datenweg abändern, stammt noch aus IPS1.0)
Die Frage ist aber immer noch, funktioniert deine Funkstrecke überhaubt?
Warum willst du schon solche komplexen Sachen machen, wenn du nicht einmal den einfachen „Clean“-Befehl ans laufen bekommst?
//Daten als dez-String auslesen
$instr=GetValueString("WallE.RX");
//raus wenn nicht 80 Bytes
$strlen = strlen($instr);
if ($strlen <> 80) return;
//String auflösen und prüfen der Daten
$datenstr="";
for($i=0; $i<strlen($instr); $i++) {
$datenstr.=strtoupper(ord($instr{$i}))." ";
}
SetValueString("WallE.Daten",$datenstr); //String ausgeben
$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 = (INT)$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 = (INT)$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;
}
// Anzeige des Stasis-Sensors
SetValueBoolean("StasisSensor", (bool)$Byte[80]);
//Berechnung der Batteriespannung
$BatteryVoltage = ($Byte[17]<<8)+($Byte[18]);
$BatteryVoltage=round(($BatteryVoltage / 1000), 1);
SetValueFloat("BatteryVoltage", $BatteryVoltage);
SetValueString("BatteryVoltage.Designer", $BatteryVoltage." Volt");
//Berechnung des Stroms aus Akku
$BatteryCurrent = ($Byte[19]<<8) + $Byte[20];
if ($BatteryCurrent > 0x7fff) $BatteryCurrent |= 0xffff0000;
SetValueInteger("BatteryCurrent", $BatteryCurrent);
SetValueString("BatteryCurrent.Designer", $BatteryCurrent." mA");
//Berechnung der Restbatteriekapazität
$BatteryCharge = ($Byte[22]<<8)+($Byte[23]);
SetValueInteger("BatteryCharge", $BatteryCharge);
SetValueString("BatteryCharge.Designer", $BatteryCharge." mAh");
//Berechnung der Batteriekapazität
$BatteryCapacity = ($Byte[24]<<8)+($Byte[25]);
SetValueInteger("BatteryCapacity", $BatteryCapacity);
SetValueString("BatteryCapacity.Designer", $BatteryCapacity." mAh");
//Berechnung der Restbatteriekapazität in %
$BatteryChargePercent = $BatteryCharge / $BatteryCapacity * 100;
$BatteryChargePercent = round($BatteryChargePercent,1);
SetValueFloat("BatteryChargePercent", $BatteryChargePercent);
SetValueString("BatteryChargePercent.Designer", $BatteryChargePercent." %");
//Berechnung der Batterietemperatur
$BatteryTemperature = (int)$Byte[21];
SetValueInteger("BatteryTemperature", $BatteryTemperature);
SetValueString("BatteryTemperature.Designer", $BatteryTemperature." °C");
//Berechnung des zurückgelegten Weges seit letzter Abfrage in mm
$Way = ($Byte[12]<<8) + $Byte[13];
if ($Way > 0x7fff) $Way |= 0xffff0000;
// Kompletter Weg
//SetValueFloat("WayComplete", (GetValueFloat("WayComplete") + ($Way /1000)));
SetValueFloat("WayComplete", $Way);
//Berechnung des WallSensors (Analog)
$WallSensorAnalog = ($Byte[26]<<8)+($Byte[27]);
SetValueInteger("WallSensorAnalog", $WallSensorAnalog);
//Berechnung des DirtSensors
$DirtSensor = (int)$Byte[8];
SetValueInteger("DirtSensor", $DirtSensor);
Da stecken noch mehr Daten in diesem Paket, schau dir mal die Beschreibung an, was du noch alles auswerten kannst.
Grüße,
Doc
Dann haben wir wohl Hardwareproblem
Adend,
zu Doc: Ich komme erst nächste Woche wieder an meine Roomba ran. Deshalb möchte ich so viel wie möglich an Software Vorarbeit leisten.
zu 1007: Das verstehe ich jetzt leider nicht:( das mir dem Hardwareproblem.
Danke
Guten Nacht
Aehm Relikt ?
Ich benutze die Version 2.2 Beta und da laeuft es mit
XBee_Sendbuffer.
Lies mal das :
http://www.ip-symcon.de/forum/f33/xbee-series-2-betrieb-9345/
Hast du Series 2 Module ?
@ 1007,
leg dir mal einen neuen XBee an und probier es dann noch mal.
Müssten ja bei mir 8 Stück kaputt sein. Zumal ich nur RegVar_SendText verwende seit ich auf 2xx bin und das funktioniert einwandfrei.