Robonect (Mähroboter auslesen)

Hallo,

wenn ich diese URL aufrufe:

http://192.168.1.80/json?cmd=status&user=***&pass=****

bekomme ich das zurück:

{"name": "Alfred", "id": "84A1E3", "status": {"status": 17, "distance": 0, "stopped": false, "duration": 153, "mode": 0, "battery": 100, "hours": 2341}, "timer": {"status": 2, "next": {"date": "2019-09-23", "time": "09:00:00", "unix": 1569229200}}, "wlan": {"signal": -73}, "clock": {"date": "2019-09-21", "time": "08:32:41", "unix": 1569054761}, "successful": true}

Wie kann ich diese Ergebnisse jetzt in Variablen bekommen?

Moin,

das dürfte dir weiterhelfen:

$json  = file_get_contents('http://user:passwd@192.168.1.80/json?cmd=status');
$array = json_decode($json,true);

LG Tom

Danke,

Ich versuche das nachher mal, muss jetzt erstmal in den Garten.

Gesendet von meinem SM-T835 mit Tapatalk

Hallo Horst,
geht auch ganz einfach über MQTT einschl. Steuerung

Hallo,

@Tom, die zwei Zeilen laufen ohne Fehler durch, aber ich habe keine Ausgabe der Rückgabe.

@Biwo, MQTT, habe ich nur von gelesen aber überhaupt keine Ahnung, aber trotzdem den für den Hinweis.

Da ist ja auch kein Befehl für eine Ausgabe im Script :wink:
Hänge einfach ein var_dump($array) am Ende an.
Michael

Danke Nall-chan,

jetzt sehe ich die Ausgabe.
Natürlich bin ich jetzt nicht wirklich weiter da ich nicht weiß wie ich die einzelnen Werte der Ausgabe jetzt in Variable geschrieben bekomme. :o

Hallo,

soweit habe ich es hinbekommen.

<?php

$json  = file_get_contents('http://horst:evelyn48@192.168.1.81/json?cmd=status');
$array = json_decode($json,true); 
var_dump($array);

//SetValue(24028,["name"]); //geht nicht
SetValue(24639,$array["status"]["stopped"]); //ist richtig
SetValue(39442, $array["status"]["status"]);//ist Richtig
SetValue(54056, $array["status"]["battery"]); //Ist richtig

SetValue(59837, $array["timer"]["status"]["next"]["date"]); //geht nicht
SetValue(59837, $array["timer"]["status"]["next"]["time"]); //geht nicht

SetValue(55157, $array["wlan"]["signal"]);//ist richtig



?>

aber date und Time muß noch was falsch sein.

Das war das array was zurückkommt:

array(8) {
  ["name"]=>
  string(6) "Alfons"
  ["id"]=>
  string(6) "9BC678"
  ["status"]=>
  array(7) {
    ["status"]=>
    int(17)
    ["distance"]=>
    int(0)
    ["stopped"]=>
    bool(false)
    ["duration"]=>
    int(4920)
    ["mode"]=>
    int(0)
    ["battery"]=>
    int(100)
    ["hours"]=>
    int(1391)
  }
  ["timer"]=>
  array(2) {
    ["status"]=>
    int(2)
    ["next"]=>
    array(3) {
      ["date"]=>
      string(10) "2019-09-23"
      ["time"]=>
      string(8) "09:00:00"
      ["unix"]=>
      int(1569229200)
    }
  }
  ["wlan"]=>
  array(1) {
    ["signal"]=>
    int(-71)
  }
  ["health"]=>
  array(2) {
    ["temperature"]=>
    int(25)
    ["humidity"]=>
    int(29)
  }
  ["clock"]=>
  array(3) {
    ["date"]=>
    string(10) "2019-09-22"
    ["time"]=>
    string(8) "10:15:44"
    ["unix"]=>
    int(1569147344)
  }
  ["successful"]=>
  bool(true)
}

Kann mir da evtl. noch jemand sagen was verkehrt ist.

Nimm SetValue(ID, $array[„timer“][„next“][„unix“]); auf eine Variable Integer mit Profil ~UnixTimestamp.
Du kannst auch, um dich an so etwas ranzutasten, var_dump($array[„timer“]) nutzen.
Und dich so mit der Funktion von Arrays vertraut machen.
Michael

Danke Michael,

das hat mir schon weitergeholfen.

Wie kann ich dem Mäher jetzt befehle erteilen? Wie hast du das gelöst?

Hallo Andy,

so setzte ich z.B. den Feierabend Modus:

$json = file_get_contents (‚http://xxxx:xxxxx@192.168.x.x/json?cmd=mode&mode=2‘);

Hallo,

wie kann ich nun z.b. den Zeitplan aus einer json in ein Wochenplan überführen? Sodass ich es visuell anzeigen kann?

Hallo,

ich habe das Modul von Robonect installiert, nutze das aber überhaupt nicht.

Ich möchte eigentlich ganz einfache funktionen haben. Evlt. hat das schon mal jemand gebaut?

Einige Knöpfe für 1 Stunde, 2 Stunden, 3 Stunden.
Stop (bei z.B. Regen oder Sunset).

Hat da schon jemand was gebastelt?

danke

ich empfehle Dir dich mit mqtt auseinderzusetzen.
Hier : https://forum.robonect.de/viewtopic.php?f=10&t=1740 findest Du die Topics dazu.
Das ganze ist eigentlich kein Hexenwerk.

  • Server in IPS einrichten
  • Server + Topic in Robonocht eintragen.

Die Status Topics werden dann im MQTT Konifugrator angezeigt und DU kanst direkt die Variablen erstellen lassen.
Um befehle zu senden musst Du zwei Device erstellen.

Für setzen von Start und Stop eine mit dem Thema /control
Für Setzen des Modus eine mit dem Thema /control/mode

ich habe mir dann ein entsprechendes Script geschrieben um aus dem Webfront den Mäher zu steuern:



<?php

$varid = IPS_GetParent($_IPS['SELF']);
$control=54279;
$mode=36231;

if ($_IPS['SENDER'] == 'Execute')
	{
    exit(0);
	}

if ($_IPS['SENDER'] == 'WebFront')

    {

        switch ($_IPS['VALUE']) 
        {

            case 0:
            SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
            IPS_SetScriptTimer($_IPS['SELF'], 0);  // Timer deaktivieren
            break;

            case 1:
            SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
            RequestAction($control, 'start');       // Mower Start
            IPS_SetScriptTimer($_IPS['SELF'], 5);   // Timer auf 5 Sekunden
            break;

            case 2:
            SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
            RequestAction($control, 'stop');        // Mower Stop
            IPS_SetScriptTimer($_IPS['SELF'], 5);   // Timer nochma auf 5 Sekunden
            break;

            case 3:
            SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
            RequestAction($mode, 'home');           // Mäher zurück in die Ladestation
            IPS_SetScriptTimer($_IPS['SELF'], 5);   // Timer nochma auf 5 Sekunden
            break;

            case 4:
            SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
            RequestAction($mode, 'auto');           // Auto-Modus, mähen nach Zeitplan
            IPS_SetScriptTimer($_IPS['SELF'], 5);   // Timer nochma auf 5 Sekunden
            break;

            case 5:
            SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
            RequestAction($mode, 'eod');            // Mäher zurück in die Ladestation, Morgen dann wieder nach Zeitplan
            IPS_SetScriptTimer($_IPS['SELF'], 5);   // Timer nochma auf 5 Sekunden
            break;

            case 6:
            SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
            RequestAction($mode, 'man');            // Mäher fährt vors Haus, manueller Start bis Acku leer
            IPS_SetScriptTimer($_IPS['SELF'], 5);   // Timer nochma auf 5 Sekunden
            break;
        }
    }

if ($_IPS['SENDER'] == 'TimerEvent')
	{
        SetValueInteger($varid, 0);
        IPS_SetScriptTimer($_IPS['SELF'], 0);  // Timer deaktivieren
    }


Da Du nur start und stop senden kannst musst Du dann für die Zeiträume ( 1h, 2h usw ) mit den Timern für Symcon arbeiten.
also zum start dann


RequestAction($control, 'start');

und um zurückzufahren dann


RequestAction($mode, 'home'); 

Ich persönlich lasse den Mäher autark laufen und nutze fast nur die Statusanzeigen.

Mit dem Senden über Json habe ich keine guten Erfahrungen, wenn der Mäher während der Abfrage das Wlan Signal verliert
hängen die PHP Threads, mit einer der Gründe warum mein Mäher von Worx mein Grundstück verlassen musste.

Hier kannst Du mal sehen, wieweit ich aktuell bin:

https://www.symcon.de/forum/threads/43661-MQTT-und-Robonect?p=427371#post427371

Loerdy

Hallo zusammen,
ich habe mir auch das Robonect modul eingebaut und bin begeistert.

Man kann quasi beide Bedienmöglichkeiten (MQTT, JSON) nutzen. Die Dokumentation ist nicht perfekt aber ich habe alles gefunden was ich gebraucht habe.

Wenn man den Mäher für eine gewisse Zeit starten möchte, dann muss man ein JSON Command schicken. Per MQTT kann man nur Starten (Mäher mäht bis Batterie leer) und Stoppen.

Es gibt auch manchmal Verbindungsprobleme die ich mit einem timeout abfange. Die Funktion versucht 10 mal den befehl zu senden und meldet danach (wenn nicht erfolgreich) ein false.

Funktion zum Mäher starten. In diesem Fall startet der Mäher für 90 Minuten (…duration=090…) .

function RobonectStart() {
     $Retry = 10;
    $context = stream_context_create(array(
        'http' => array(
            'timeout' => 2
            )
        )
    );    
    for ($x = 1; $x <= $Retry; $x++) {
        $json = file_get_contents('http://USER:PASSWORD@192.168.XXX.XXX/json?cmd=mode&mode=job&duration=090&after=home', false, $context);
        if ($json <> false):
            $array = json_decode($json, true);
            if(isset($array['successful']))
                if ($array['successful'] == true)
                    return true;
        endif;
    }
    return false;

}

Funktion um den Mäher frühzeitig in die Ladestation zu schicken

function RobonectHome() {
   $Retry = 10;
    $context = stream_context_create(array(
        'http' => array(
            'timeout' => 2
            )
        )
    );    
    for ($x = 1; $x <= $Retry; $x++) {
        $json = file_get_contents('http://USER:PASSWORD@192.168.XXX.XXX/json?cmd=mode&mode=home', false, $context);
        if ($json <> false):
            $array = json_decode($json, true);
            if(isset($array['successful']))
                if ($array['successful'] == true)
                    return true;
        endif;
    }
    return false;

}

HI @luar ,

ich habe das gerade mal hoffnungsvoll versucht, leider passiert bei beiden Skripten bei mir nichts :frowning:

läuft das bei Dir noch?

Hi @Dustin723,
bei mir läuft immer noch folgender code (zum starten für 90 Minuten)

$MowingTime = 90;

$Result = RobonectCommand('mode&mode=job&duration=0'.strval($MowingTime).'&after=home',3);

function RobonectCommand ($Command,$Retry) {
    $context = stream_context_create(array(
        'http' => array(
            'timeout' => 8
            )
        )
    );    
    for ($x = 1; $x <= $Retry; $x++) {
        $json = file_get_contents('http://USER:PASS@192.168.178.XXX/json?cmd='.$Command, false, $context);
        if ($json <> false):
            $array = json_decode($json, true);
            if(isset($array['successful']))
                if ($array['successful'] == true)
                    return true;
        endif;
    }
    return false;
}

Für die API kommunikation muss der User und das Password vom normalen Robonect Login verwendet werden. Unter dem Menüpunkt Robonect/Benutzer können die zugangsdaten geändert werden.

Und die IP Adresse muss natürlich auch angepasst werden!

hi, damit geht es!
mit dem ersten ging es nicht.

magst Du mir noch mal dein Go-Home Skript geben.

Nach sowas suche ich schon fast zwei Jahre!!! danke!!

Die function bleibt die gleiche, nur der aufruf ändert sich.

$Result = RobonectCommand('mode&mode=home',3);