Meine FHEM Anbindung

Du möchtest Deinen Automower in Deine Hausautomatisierung einbinden oder eine eigene App entwicklen?
Hier wird diese offene Schnittstelle zum Robonect Hx Modul beschrieben.
Antworten
Det20
Beiträge: 131
Registriert: Mo 6. Feb 2017, 16:08
Wohnort: Detmold
Mäher: Gardena R40Li
Firmware des Mähers (MSW): MSW 5.xx.xx
Herstellungsjahr: 2012
Robonect-Modul: Robonect Hx (Rev.3)
Robonect Firmware: 0.9e

Meine FHEM Anbindung

Beitrag von Det20 » Di 2. Mai 2017, 15:10

Mit Hilfe von duese51 fährt mein Gardena mit der größeren Battiere nun deutlich länger. Das Feature soll zwar bald in die Firmware vom Robonect eingepflegt werden, an dieser Stelle trotzdem ein wenig Copy&Paste für FHEM, um das Feature schon vorher zu realieren:

1.
Zunächst das Device im FHEM anlegen. Dafür wird das FHEM Device "Robonect" genutzt.

Code: Alles auswählen

define Gardena Robonect x.x.x.x
attr Gardena basicAuth xxxxxxxxxx==
attr Gardena event-on-change-reading .*
attr Gardena icon scene_robo_lawnmower
attr Gardena pollInterval 60
Statt x.x.x.x die Ziel-IP vom Mäher. Statt "basicAuth" die eigenen Login-Daten.

2.
Ein Hilfsobjekt für den Battiere-Status anlegen. Eine direkte Abfrage über das Robonect Device ist leider (noch) nicht möglich.

Code: Alles auswählen

define Gardena_Batt HTTPMOD http://user:pass@ip/xml?cmd=battery 0
attr Gardena_Batt userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex
attr Gardena_Batt enableControlSet 1
attr Gardena_Batt reading01Name voltage
attr Gardena_Batt reading01Regex <voltage>([-\d]+)
attr Gardena_Batt reading02Name charge
attr Gardena_Batt reading02Regex <charge>([-\d]+)
attr Gardena_Batt reading03Name current
attr Gardena_Batt reading03Regex <current>([-\d]+)
attr Gardena_Batt reading04Name temperature
attr Gardena_Batt reading04Regex <temperature>([-\d]+)
attr Gardena_Batt reading05Name full
attr Gardena_Batt reading05Regex <full>([-\d]+)
attr Gardena_Batt reading06Name remaining
attr Gardena_Batt reading06Regex <remaining>([-\d]+)
attr Gardena_Batt room Roboter,Aussen
attr Gardena_Batt stateFormat voltage
Statt user/pass/ip in der ersten Zeile bitte die echten Daten eingeben

3.
Damit das Hilfsobjekt (Batterie) akualisiert wird, wird ein DOIF benötigt. Das aktualisiert alle 2 Minuten den Battiere-Status, allerdings nur, wenn der Gardena nicht offline ist.

Code: Alles auswählen

define di_Gardena_poll_Batt DOIF ( ([+:02]) and ([Gardena:state] ne "offline") ) (set Gardena_Batt reread) DOELSE ()
attr di_Gardena_poll_Batt do always
4.
Sobald der Mäh-Vorgang gestartet wurde, wird hiermit automatisch in den manuellen Modus geschaltet. Der Fährt theoretisch bis zum jüngsten Tag oder bis die Batterie leer ist

Code: Alles auswählen

define Gardena.Auto.SwitchToMan DOIF ( ([+:05]) and ([Gardena:state] eq "maehen") and ([Gardena:allgemein-modus] eq "automatik") ) (set Gardena manuell) DOELSE ()
attr Gardena.Auto.SwitchToMan do always
5.
Sobald die Batterie Spannung < 17700 ist, wird der Gardena in den Auto-Modus versetzt, damit fährt er nach Hause. 17700 lässt sich laut duese51 auch auf 17500 senken, allerdings ist unser Garten recht verwinkelt und es kann vorkommen, dass der Gardena etwas länger braucht.

Code: Alles auswählen

define Gardena.Auto.LowBatt DOIF ( ([+:02]) and ([Gardena:state] eq "maehen") and ([Gardena:allgemein-modus] ne "automatik") and ([Gardena_Batt:voltage]<17700) ) (set Gardena auto) DOELSE ()
attr Gardena.Auto.LowBatt do always

===== Nice to have =====

Der Source ist absichtlich so, damit er leserlicher ist. Lässt sich natürlich optimieren, aber darum geht es mir hier nicht.
Abends fährt der Gardena automatisch um spätestens 22 Uhr nach Hause:

Code: Alles auswählen

define Gardena.Auto.Feierabend at *22:00 { if(ReadingsVal("Gardena","state","offline") eq "maehen")  { fhem("set Gardena feierabend");; } }
Morgens fährt er eigenständig los, wenn A) die Außensteckdose Strom hat, B) es seit Mitternacht nicht geregnet hat, C) mindestens 8 Grad sind, D) die PV mindestens 500 Watt liefert, also die Sonne scheint. Ich nutze hierfür eine NetAtmo.

Getriggert wird das über die PV, wenn mindestens 500 Watt anliegen und es zwischen 8 und 12 Uhr ist, also Vormittags:

Code: Alles auswählen

define Sensor.Sonne500Watt notify Fronius:Body_Data_PAC_Values_1:.* { if((ReadingsVal("Fronius","Body_Data_PAC_Values_1","0")>500)&&(($hour>=8)&&($hour<=12))) { ItsSun500Watt() } }
Dann wird folgende Funktion aufgerufen. Hier werden weitere Parameter geprüft und sichergestellt, dass der Aufruf nur einmal in 12 Stunden erfolgt. Hintergrund: Nach dem automatischen Start kann man den Mäher nach Hause schicken und er fährt erst am nächsten Tag wieder automatisch los.

Code: Alles auswählen

sub ItsSun500Watt()
{
  # Nur alle 15 Minuten
  $data{LastSun500Chk} = 0 unless(defined($data{LastSun500Chk}));
  return if( time() < $data{LastSun500Chk}+15*60);
  $data{LastSun500Chk} = time();
  
  # Gardena losschicken? Nur wenn Strom an
  if(ReadingsVal("Strom.Aussen.Terrasse", "reportedState", "off") eq "on")
  {
    # Nur wenn letzter autom. Start vor mehr als 12 Stunden (12 Std * 60 Min=720)
    $data{LastGardenaStart} = 0 unless(defined($data{LastGardenaStart}));

    if( time() > $data{LastGardenaStart}+720*60)
	{
      my $GardenaState1 = ReadingsVal("Gardena", "winterschlaf", "--");                 # Winterschlaf?
      my $GardenaState2 = ReadingsVal("Gardena", "allgemein-status", "offline");        # Nur wenn schlafen
      my $GardenaState3 = ReadingsVal("NetAtmo.Aussen.Regen", "rain_day", "1");         # Regen muss 0 sein
      my $GardenaState4 = ReadingsVal("NetAtmo.Aussen.Temp", "temperature", "0");       # Akt. Temp. muss 8 oder waermer sein
  
      if(($GardenaState1 eq "off")&& (($GardenaState2 eq "schlafen")||($GardenaState2 eq "parken"))&&($GardenaState3==0)&&($GardenaState4>=8))
      {
        $data{LastGardenaStart} = time();
	  
        fhem("set Gardena start");
        fhem("sleep 6");
        fhem("set Gardena auto");
      };
	};
  };
  
}
Anbindung über FHEM und Robonect App

Benutzeravatar
zeitisen
Beiträge: 48
Registriert: Di 15. Mär 2016, 22:23
Wohnort: Marktoberdorf
Mäher: Husqvarna Automower 430X
Firmware des Mähers (MSW): MSW 14.xx.xx
Herstellungsjahr: 2016
Robonect-Modul: Robonect Hx (Rev.2)
Robonect Firmware: 1.0 beta 7a

Re: Meine FHEM Anbindung

Beitrag von zeitisen » Di 11. Jul 2017, 21:37

Sehr interessant.
Ich habe auch FHEM laufen.
Wo ist das Kommando cmd=battery dokumentiert? Oder woher weißt du, dass es das Kommando gibt?
In der Liste der Kommandos ist es nicht enthalten.

Ich hätte da gleich noch jede Menge Ideen. In der Preview der 1.0 gibt es die GPS-Position meines 430X.

Wenn ich die auslesen könnte, wäre damit eine Anzeige des Gartens möglich.
Man könnte eine GPX-Datei erstellen.
Oder man könnte den Wert zyklisch an den Traccar Server (Open source) senden. Mit diesem Server kann man alle möglichen GPS-Tracker anzeigen und verfolgen. Damit wäre dann sogar Geofencing möglich.
Der Traccar Server läuft auf meinem QNAP NAS und kann Positionstelegramme aufzeichnen.
Ein Telegramm könnte so aussehen:

Code: Alles auswählen

OsmAnd Live Tracking web address format:

http://demo.traccar.org:5055/?id=123456&lat={0}&lon={1}&timestamp={2}&hdop={3}&altitude={4}&speed={5}

where:

    demo.traccar.org – server address or domain name (e.g., it can be your server public IP address)
    123456 – your device unique identifier (e.g., IMEI number)
Idealerweise könnte das Robonect direkt ausgeben (neues Feature?) , oder fhem liest die Daten und sendet sie dann weiter.
Profil aktualisiert

Antworten

Zurück zu „API für Robonect® Hx“