Xbee will nicht!

Hallo
Bei meinem Umbau hab ich alles von der Schnittstelle genommen.

http://www.inisnet.de/inisnet/roomba/DSCN4286_small.jpg

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 :slight_smile:


$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 :wink:

Ü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.

Hier ein Ausschnitt :

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

Kann das sein das deine Skripts noch für die V1 IPS sind?

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 :smiley:

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. :confused: Zumal ich nur RegVar_SendText verwende seit ich auf 2xx bin und das funktioniert einwandfrei.