https://www.bosch-garden.com/de/de/bosch-gartengeraete/indego-home.jsp

 

Durch das ich meine Hausautomatisierung mit fhem betreibe, suchte ich nach einer Lösung meinen Rasenmäher Roboter Bosch Indego Connect 1200 an fhem anzubinden. Im Bosch Forum habe ich dann eine Lösung gefunden, mit dem Indego-Service zu kommunizieren (http://www.roboter-forum.com/showthread.php?10567-Bosch-Indego-connect-Anbindung-an-Portal-IFTTT). Mit dieser Lösung wird gezeigt, wie man den Status vom Mäher abfragen und Befehle zum Mäher senden kann.

Mit Hilfe dieser Beschreibung war es nun einfach möglich, eine eigene Software zu schreiben, die mit dem Bosch-Indego-Service kommuniziert und Statusinformationen zum fhem System und Befehle von fhem an den Mäher sendet.

Mit meiner Lösung wird der Bosch-Indego-Mäher im fhem als Dummy Device angelegt, so sind keine Anpassungen am fhem erforderlich.

Das ganze sieht dann im fhem folgendermaßen aus:

 

r

Bei meiner Lösung BoschIndego2fhem handelt es sich um ein Dot-Net-Programm das sowohl unter Windows wie auch unter Linux (Raspberry / Cubietruck) unter Mono lauffähig ist. BoschIndego2fhem läuft als eigenständiges Programm auf der Console bzw. unter Linux im Hintergrund und fragt in regelmäßigen Abständen den Status vom Indego ob und sendet diesen dann als userreadings über tcp/ip an fhem (siehe oben im Bild unter Readings). Mit "set [devicename] state" können dann dem Indego Befehle wie MOW, PAUSE oder RETURN übermittelt werden. Hierzu wird aus einem Notify zum Dummy-Device die set state Befehle über tcp/ip an BoschIndego2fhem übermittelt und dort asynchon abgearbeitet, so dass es auf Seiten von fhem zu keinen Verzögerungen bei der Abarbeitung kommt.

Meine Software liegt in der Version 0.3.0.0 vor und kann von hier heruntergeladen und getestet werden:

http://dh1fr.de/Software/BoschIndego2fhem_V0.3.0.0.zip

Unter Linux muss Mono >= V3.1xx installiert sein. Das geht normalerweise mit "sudo apt-get install mono-complete".

Gestartet wird die Software dann mit "mono ./BoschIndego2fhem.exe" (zum Testen mit Statusausgabe auf der Console)

Im Hintergrund ohne Ausgabe von Informationen mit "mono ./BoschIndego2fhem.exe >/dev/null &"

 

 

In der beiliegenden BoschIndego2fhem.exe.config wird die Konfiguration eingestellt. Hier ein Beispiel:

    <applicationSettings>

        <BoschIndego2fhem.Properties.Settings>

            <setting name="IndegoUser" serializeAs="String">

                <value>This email address is being protected from spambots. You need JavaScript enabled to view it.</value>

            </setting>

            <setting name="IndegoPassword" serializeAs="String">

                <value>geheim</value>

            </setting>

            <setting name="fhemIPAddress" serializeAs="String">

                <value>127.0.0.1</value>

            </setting>

            <setting name="fhemIPPort" serializeAs="String">

                <value>7072</value>

            </setting>

            <setting name="fhemDummyDeviceName" serializeAs="String">

                <value>BoschIndego</value>

            </setting>

            <setting name="CommandPort" serializeAs="String">

                <value>7099</value>

            </setting>

            <setting name="CommandIPAddress" serializeAs="String">

                <value>127.0.0.1</value>

            </setting>

        </BoschIndego2fhem.Properties.Settings>

    </applicationSettings>

Die Konfiguration kann unter Linux mit "pico BoschIndego2fhem.exe.config" editiert werden!

 

In meinem Beispiel liegt im fhem ein dummy Device mit dem Namen BoschIndego vor.

Das Dummy-Device kann wie folgt angelegt werden:

define BoschIndego dummy
attr BoschIndego setList state:SETMOW,SETPAUSE,SETRETURN
attr BoschIndego icon scene_robo_lawnmower

Die Readings werden nach dem ersten Start von BoschIndego2fhem eigenständig angelegt.

 

Hier noch das zum Senden von Befehlen erforderliche Notify:

define BoschIndego_Notify notify BoschIndego.SETMOW.*|BoschIndego.SETRETURN.*|BoschIndego.SETPAUSE.* {

 my $addr = "127.0.0.1:7099";

 my $client = IO::Socket::INET->new(PeerAddr => $addr); # $addr format: hostname:port

  syswrite($client, "$EVENT\n");

  #sysread($client, $answer, 256);

  $client->close();

}

Bei mir läuft die Software jetzt seit ein paar Tagen problemlos. 

 

Update auf Version V0.3.0.0: Optimierung beim Versenden von Befehlen an den Indego. Achtung wer von Version 0.2.0.0 kommt muss DummyDevice und Notify anpassen!