Roomba 980

Hallo Zusammen,

nach dem mein alter Roomba langsam am Ende ist, habe ich mir denn neuen 980 und ein Vorwerk Kobolt VR200 besorgt. Kurz und knapp, der Vorwerk geht wieder zurück :).

Allerdings konnte ich denn Vorwerk in IPS Integrieren, was mir beim Roomba 980 leider noch nicht gelungen ist.

Es gibt auch schon was:

GitHub - six0r/tobira980: unofficial PHP library for iRobot Roomba 980

Hat es vielleicht jemand geschafft einen 980 einzubunden (Ohne etwas dazu zu Bauen, da er schon ein Wifi Modul hat)?

Ein Modul wäre natürlich klasse, aber dass wäre etwas viel verlangt :).

Vielen Dank mal

Gruß

Moin Moin,

hat sich hier was ergeben ?

Leider nicht :frowning:

Habt ihr denn mal die Klasse s.o. ausprobiert? Funktioniert die nicht?

Ich wollte es testen, habe aber ein Problem. Das PHP-Skript will auf der Konsole ausgeführt werden. Unter Windows müsste man es mit „php.exe skriptname.php“ ausführen. Eine PHP.EXE habe ich in der IPS-Installtion nicht gefunden. Wie komme ich da weiter?

Ich verstehe nicht was Du da genau machst? Das ist doch ein ganz normales PHP Skript das Du in ein IP-Symcon Skript kopierst und dann ausführst. Ob das dann funktioniert kannst nur Du testen ich besitzte ja so ein Romba nicht.

Also:

[ol]
[li]Objekt hinzufügen -> Skript[/li][li]Inhalt von tobira980.php in das Skript kopieren und speichern[/li][li]bei Bedarf das Skript umbenennen[/li][li]zweites Skript erstellen mit dem Befehl der ausgeführt werden soll[/li][li]in dem zweiten Skript das erste Skript einbinden und Objekt erstellen[/li][/ol]

Skript Romba erstellen


$scriptID = 12345 /*[Geräte\Romba	obira980]*/;
requireScript($scriptID);

function requireScript($scriptID)
{
    $s = IPS_GetScript($scriptID);
    require($s['ScriptFile']);
}

// Connect to the robot using its IP address

$robot = new Tobira980\Robot("192.168.0.12");

Der Dokumenation folgen zum Befehle absetzten.

z.B. start


includeScript(23456 /*[Geräte\Romba\Romba erstellen]*/);  
 
function includeScript($scriptID)
{
    $s = IPS_GetScript($scriptID);
    include($s['ScriptFile']);
}

// Start cleaning cycle
$robot->start();

Wenn was nicht klappt dann schreib mal an welcher Stelle es denn hängt?

Die Skripte sind wohl direkt für php (nicht für IPS) geschrieben worden und ich wollte sie auch „einfach“ mal auf diesem Wege vortesten. Dazu habe ich diese nach „c:\IP-Symcon\webfront\user“ kopiert und im Browser ausgeführt. Dabei kam dann eine Meldung das diese auf der Konsole ausgeführt werden müssen. Ich habe gelernt, dass das am Eintrag „#!/usr/bin/env php“ zu Beginn liegt.


#!/usr/bin/env php
<?php declare(strict_types=1);

require __DIR__ . "/../lib/tobira980.php";

$opts = getopt("h:");
if (!isset($opts["h"])) {
	echo "usage: {$argv[0]} -h <ip_address_of_robot>
";
	exit(1);
}

try {
	echo "Trying to get password, please long-press the home button on the robot until you hear a signal .";
	$pass = (new Tobira980\Robot($opts["h"]))->getPassword(120, function() { echo " ."; });
	echo "
";
	echo "Got password : {$pass}
";
} catch (Exception $e) {
	echo "
";
	echo "error: {$e->getMessage()}
";
	exit(1);
}

Vielen Dank für die ausführliche Hilfestellung… ich probiere das dann mal direkt in IPS.

#!/usr/bin/env php
<?php declare(strict_types=1);

require __DIR__ . "/../lib/tobira980.php";

$opts = getopt("h:");
if (!isset($opts["h"])) {
	echo "usage: {$argv[0]} -h <ip_address_of_robot>
";
	exit(1);
}

try {
	echo "Trying to get password, please long-press the home button on the robot until you hear a signal .";
	$pass = (new Tobira980\Robot($opts["h"]))->getPassword(120, function() { echo " ."; });
	echo "
";
	echo "Got password : {$pass}
";
} catch (Exception $e) {
	echo "
";
	echo "error: {$e->getMessage()}
";
	exit(1);
}

Mit dieser Funktion soll das Passwort ausgelesen werden. Das kriege ich noch nicht hin.

#Roomba erstellen

<?
$scriptID = 26029 /*[Gebäude\EG\Wohn\Roomba 960	obira980]*/;
requireScript($scriptID);

function requireScript($scriptID)
{
    $s = IPS_GetScript($scriptID);
    require($s['ScriptFile']);
}


$robot = new Tobira980\Robot("10.0.0.43");
$pass = $robot->getPassword();

var_dump($pass, $robot);

?>

Wenn „Roomba erstellen“ ausgeführt wird, erscheint diese Meldung:

Notice: Undefined variable: http_response_header in C:\IP-Symcon\scripts\26029.ips.php on line 284

Fatal error: Uncaught Tobira980\HttpNoResponseException: no answer from 10.0.0.43 in C:\IP-Symcon\scripts\26029.ips.php:285
Stack trace:
#0 C:\IP-Symcon\scripts\26029.ips.php(308): Tobira980\Robot->request(‚get‘, ‚passwd‘)
#1 C:\IP-Symcon\scripts\39632.ips.php(13): Tobira980\Robot->getPassword()
#2 {main}
thrown in C:\IP-Symcon\scripts\26029.ips.php on line 285

In der Dokumentation ist im Aufruf das Kennwort offenbar enthalten:

Then you may use the password to send commands and request information from the robot :

require "tobira980.php";

// Connect to the robot using its IP address and password
$r = new Tobira980\Robot("192.168.0.12", "_my_password_");

Ja entweder Du übergibst das Passwort mit beim Erstellen des Objects oder eben später


$scriptID = 12345 /*[Geräte\Romba	obira980]*/;
requireScript($scriptID);

function requireScript($scriptID)
{
    $s = IPS_GetScript($scriptID);
    require($s['ScriptFile']);
}

// Connect to the robot using its IP address

$robot = new Tobira980\Robot("192.168.0.12", "mysecretpassword");  

oder

$scriptID = 12345 /*[Geräte\Romba	obira980]*/;
requireScript($scriptID);

function requireScript($scriptID)
{
    $s = IPS_GetScript($scriptID);
    require($s['ScriptFile']);
}

// Connect to the robot using its IP address

$robot = new Tobira980\Robot("192.168.0.12"); 
$robot->password = "secretpassword";
 
 $pass = (new Tobira980\Robot($opts["h"]))->getPassword(120, function() { echo " ."; });

Ein Passwort habe ich nie eingetragen müssen, dass wird scheinbar automatisch im Hintergrund beim Koppeln des Roomba an die Handy-App vergeben. Deshalb ist wohl auch das Skript „get_passwort.php“ enthalten. Das kriege ich nicht in IPS ausgeführt, bzw. bekomme dort kein Ergebnis angezeigt.

Ich vermute genau dieses Skript müsste (wohl einmalig) in der PHP-Konsole aufgerufen werden. Bleibt das Eingangsproblem: eine php.exe ist im IPS-Ordner nicht zu finden. Kann man da manuell eine einfügen?

Ich stehe glaube ich auf dem Schlauch, ich weis nicht was Du immer mit den php.exe willst, IP-Symcon selber führt doch das Skript einfach aus, bzw. vergiss doch einfach die Skriptvorlage auf Github, Du must doch lediglich die Methode wie in der Dokumenation angegeben aufrufen.


$scriptID = 12345 /*[Geräte\Romba	obira980]*/; 
requireScript($scriptID); 

function requireScript($scriptID) 
{ 
    $s = IPS_GetScript($scriptID); 
    require($s['ScriptFile']); 
} 

// Connect to the robot using its IP address 

$robot = new Tobira980\Robot("192.168.0.12");
$password = $robot->getPassword();
var_dump($password);  

Im Post #8 habe ich das ja so schon probiert und auch die Meldung dazu gepostet. Wie verstehst du die Meldung? Für mich liest sich das so, als ob ein Passwort erwartet wird.

Das vorhandensein des zusätzlichen Skripts in der Doku, mit dem das Passwort separat aus dem Roomba geholt werden soll scheint mir die Lösung zu sein -> und genau deshalb „reite“ ich auf der PHP.EXE rum, denn dieses extra Skript soll da wohl ausgeführt werden. - Ich lasse mich aber gerne auf eine andere Lösung ein :slight_smile:

Ich interpretiere das so das einfach keine Antwort kommt. Er versucht ja mit file_get_contents was zu verschicken und bekommt eben ein false als Antwort, deshalb der Aufruf der HttpNoResponseException.

file_get_contents ist da aber wenig hilfreich um da irgendwas näher zu analysieren. Wenn müste man das über curl verschicken, dann könnte man vielleicht über curl Error zumindest mehr rausbekommen was nun genau schiefgelaufen ist bzw. was eventuell die Antwort von dem Sauger war. Ob das jetzt am Passwort liegt oder nicht lässt sich nur spekulieren zumindest kommt auf den Versuch das so über flie_get_contents zu senden ein false als Response.

So viel ich das sehe ruft das Skript doch aber auch nur die Methode getpassword auf
Wichtig ist wohl das ein Knopf gedrückt wird das schreibt es dann ja in ein Echo
please long-press the home button on the robot until you hear a signal .

Hast Du das denn gemacht und dann versucht das Passwort abzurufen?

Guter Hinweis… werde es damit versuchen…

Hi,

ich habs mal mit meinem roomba (980) probiert. Folgende Meldung kommt:

Trying to get password, please long-press the home button on the robot until you hear a signal ...

Notice:  Undefined variable: http_response_header in C:\IP-Symcon\scripts	obira980.php on line 241

Fatal error:  Uncaught Tobira980\HttpNoResponseException: no answer from 192.168.178.29 in C:\IP-Symcon\scripts	obira980.php:242
Stack trace:
#0 C:\IP-Symcon\scripts	obira980.php(265): Tobira980\Robot->request('get', 'passwd')
#1 C:\IP-Symcon\scripts\32809.ips.php(10): Tobira980\Robot->getPassword()
#2 {main}
  thrown in C:\IP-Symcon\scripts	obira980.php on line 242
Abort Processing during Fatal-Error: Uncaught Tobira980\HttpNoResponseException: no answer from 192.168.178.29 in C:\IP-Symcon\scripts	obira980.php:242
Stack trace:
#0 C:\IP-Symcon\scripts	obira980.php(265): Tobira980\Robot->request('get', 'passwd')
#1 C:\IP-Symcon\scripts\32809.ips.php(10): Tobira980\Robot->getPassword()
#2 {main}
  thrown
   Error in Script C:\IP-Symcon\scripts	obira980.php on Line 242

Wenn ich die „home taste“ drücke bis ein Ton kommt, schaltet sich der roomba aus. Sonst tut sich leider nichts.

Gruß
hardlog

Ich habe mit eine PHP7.1 auf einen anderen Rechner installiert. Der Aufruf muss dann so aussehen…

get_password.php -h 10.0.0.43

Bei meinem kam diese Antwort:

php.exe get_password.php -h 10.0.0.43
Trying to get password, please long-press the home button on the robot until you hear a signal .

Es ist also wohl richtig, dass die HOME-Taste eine bestimmte Zeit bis zu einem Ton gedrückt werden muss. Am besten setze ich mit dem Laptop direkt danach und versuche es dann noch mal…

Hi,

ist jemand schon weiter gekommen?

Ich hab auf einem RaspPi gemäß der Anleitung unter GitHub/dorita980 mit etwas Gefummele das Passwort auslesen können.
Wenn ich das in folgendem Script einsetzte kommt leider auch die bereits zitierte Fehlermeldung :frowning:

$scriptID = 57819; 

requireScript($scriptID); 

function requireScript($scriptID) 
{ 
    $s = IPS_GetScript($scriptID); 
    require($s['ScriptFile']); 
} 

$robot = new Tobira980\Robot("192.168.178.29", "xxxxxxxxxxxxxxxxxxxxxxxxxxx");  

// Start cleaning cycle
$robot->start();
Notice:  Undefined variable: http_response_header in C:\IP-Symcon\scripts\57819.ips.php on line 241

Fatal error:  Uncaught Tobira980\HttpNoResponseException: no answer from 192.168.178.29 in C:\IP-Symcon\scripts\57819.ips.php:242
Stack trace:
#0 C:\IP-Symcon\scripts\57819.ips.php(322): Tobira980\Robot->request('set', 'cmd', Array)
#1 C:\IP-Symcon\scripts\32809.ips.php(25): Tobira980\Robot->start()
#2 {main}
  thrown in C:\IP-Symcon\scripts\57819.ips.php on line 242
Abort Processing during Fatal-Error: Uncaught Tobira980\HttpNoResponseException: no answer from 192.168.178.29 in C:\IP-Symcon\scripts\57819.ips.php:242
Stack trace:
#0 C:\IP-Symcon\scripts\57819.ips.php(322): Tobira980\Robot->request('set', 'cmd', Array)
#1 C:\IP-Symcon\scripts\32809.ips.php(25): Tobira980\Robot->start()
#2 {main}
  thrown
   Error in Script C:\IP-Symcon\scripts\57819.ips.php on Line 242

Kann da jemand helfen?

hardlog

Ich bin bislang schon am Passwort gescheitert. Kannst du beschreiben, wie du das Passwort schließlich bekommen hast?

Hi, klar.

(1) RaspPi mit Raspbian Stretch neu aufgesetzt…
(2) node und npm ist in den aktuellen Versionen von Raspbian Stretch enthalten, sonst ggf. nachinstallieren
(3) dorita980 installieren (auf den Pi) mit npm install dorita980 --save, bei mir gabs ne menge Warnungen, hat dennoch funktioniert.
(4) mit node --harmony ./bin/getpassword.js „192.168.1.104“ (IP an deinen roomba anpassen) ausgelesen. Ging
(4) die anderen Beispiele in der Doku von dorita980gingen auch (Start, stop ,…) nur wie ich das in IPS bzw. php bekommen weiß ich noch nicht

Meld dich wenns nicht geht, bzw. wenn DU weiter kommst als ich

Gruß
hardlog

Hallo,

Ich weiss nicht ob euch das weiterhelfen kann aber ich habe rest980 auf einer Debian VM installiert und mit folgendem script kann ich zB den Roomba Starten

$info_json = file_get_contents(„http://ip:port/api/local/action/start“);
$info = json_decode($info_json);

Gruss,