UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

[NEUHEIT] Rasenmähroboter Steuerung mittels Robonect

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln

Ersteller
Advenoni
Reactions:
Beiträge: 292
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

Rasenmähroboter Steuerung mittels Robonect

#1

Beitrag von Advenoni »

Hallo zusammen,

ein paar von euch kennen ja evtl die Steuerplatine von Robonect für Gardena und Husqvarna Mähroboter.
Die Platine erlaubt ja schon diverse Zusatzfunktionen, nur war mit die Wettersteuerung zu ungenau bzw. hatte ich das Problem, dass der Timer nicht erweitert wird, wenn der Roboter nicht mähen darf da es regnet. Ist der Timer z.B. von 8:00 bis 12:00 eingestellt und es hat in der Zeit geregnet, aber am Nachmittag war es trocken, so wurde nicht gemäht.
Aus diesem Grund habe ich im TWS nun eine Logik gemacht, die die reine Mähtzeit berücksichtigt. Kommuniziert wird derzeit über OpenHab mittels diesem Robonect Binding. MQTT ist zwar auch möglich, aber dies wäre dann die nächste Stufe.
Zunächst die benötigten Einstellungen im OpenHab:
things: mower.things

Code: Alles auswählen

Thing robonect:mower:automower "Mower" @ "Garden" [ host="x.x.x.x", pollInterval=5, user="user", password = "password"]
items: mower.items

Code: Alles auswählen

String    mowerName            "Mower name"                                    {channel="robonect:mower:automower:name"}
Number    mowerBattery         "Mower battery [%d %%]" <energy>                {channel="robonect:mower:automower:battery"}
Number    mowerHours           "Mower operation hours [%d h]" <clock>          {channel="robonect:mower:automower:mowing-hours"}
Number    mowerDuration        "Duration of current mode"                      {channel="robonect:mower:automower:status-duration"}
String    mowerMode            "Mower mode [MAP(robonect_mode.map):%s]"        {channel="robonect:mower:automower:mode"}
Number    mowerStatus          "Mower Status [MAP(robonect_status.map):%s]"    {channel="robonect:mower:automower:status"}
Switch    mowerStarted         "Mower started"                                 {channel="robonect:mower:automower:started"}
String    mowerTimerStatus     "Mower timer status"                            {channel="robonect:mower:automower:timer-status"}
DateTime  mowerNextTimer       "Next timer [%1$td/%1$tm %1$tH:%1$tM]" <clock>  {channel="robonect:mower:automower:timer-next"}
Number    mowerWlanSignal      "WLAN signal [%d dB ]"                          {channel="robonect:mower:automower:wlan-signal"}
Number    mowerErrorCode       "Error code"                                    {channel="robonect:mower:automower:error-code"}
String    mowerErrorMessage    "Error message"                                 {channel="robonect:mower:automower:error-message"}
DateTime  mowerErrorDate       "Error date [%1$td/%1$tm %1$tH:%1$tM]"          {channel="robonect:mower:automower:error-date"}
Number    mowerTemp            "Mower temperatur [%d °C]"                      {channel="robonect:mower:automower:health-temperature"}
transform: robonect_mode.map

Code: Alles auswählen

1=Auto
2=Manuell
3=Home
4=Feierabend
transform: robonect_status.map

Code: Alles auswählen

0=Schläft
1=Geparkt
2=Mäht
3=Sucht die Ladestation
4=Lädt
5=Sucht
7=Fehlerstatus
8=Schleifsignal verloren
16=Automower abgeschaltet
17=Automower schläft
rules: RM.rules

Code: Alles auswählen

	var int currentTemp = mowerTemp.state
	var int currentWLAN = mowerWlanSignal.state as DecimalType
	var int currentStatus = mowerStatus.state

	rule "Temperatur Maeher"
	when
		Item mowerTemp changed
	then
		currentTemp = mowerTemp.state
		RM_Temperatur.sendCommand(currentTemp)
	end

	rule "WLAN Maeher"
	when
		Time cron "0 0/15 * 1/1 * ? *"
	then {
		currentWLAN = mowerWlanSignal.state
		RM_WLAN.sendCommand(currentWLAN)
	}
	end

	rule "Status Maeher"
	when 
		Item mowerStatus changed or Time cron "0 0 * 1/1 * ? *"
	then {
		currentStatus = mowerStatus.state
		RM_Status.sendCommand(currentStatus)
	}
	end
	
	rule "Mode Maeher"
	when 
		Item mowerMode changed or Time cron "0 0 * 1/1 * ? *"
	then {
		if (mowerMode.state == "HOME")
		{
			RM_Mode.sendCommand(1)
		}
		if (mowerMode.state == "AUTO")
		{
			RM_Mode.sendCommand(2)
		}
		if (mowerMode.state == "MANUAL")
		{
			RM_Mode.sendCommand(3)
		}
		if (mowerMode.state == "EOD")
		{
			RM_Mode.sendCommand(4)
		}
	}
	end

	rule "Mode Maeher Steuerung"
	when Item RM_Mode changed
	then {
		if (RM_Mode.state == 1.0)
		{
			mowerMode.sendCommand("HOME")
		}
		if (RM_Mode.state == 2.0)
		{
			mowerMode.sendCommand("AUTO")
		}
		if (RM_Mode.state == 3.0)
		{
			mowerMode.sendCommand("MANUAL")
		}
		if (RM_Mode.state == 4.0)
		{
			mowerMode.sendCommand("EOD")
		}
	}
	end
Bei den Rules werden "Temperatur Maeher" bzw. "WLAN Maeher" nur benötigt wenn man diese möchte.
Und noch die zugehörigen Thingsauf der KNX-Seite:

Code: Alles auswählen

		//---> Rasenmäher
		Type number : RM_Temperatur			"Temperatur"			[ ga="9.001:1/1/155" ]
		Type number : RM_WLAN				"WLAN Signal"			[ ga="6.010:1/1/147" ]
		Type switch : RM_Fehler				"Fehler"			[ ga="1/1/157" ]
		Type number : RM_Status				"Status"			[ ga="5.005:1/1/150" ]
		Type number : RM_Modus				"Modus"				[ ga="5.005:1/1/149" ]
Und die Items:

Code: Alles auswählen

//---> Rasenmäher
Number RM_Temperatur			"Mäher Temperatur [%.0f °C]"	<temperature>	(gRM)	{ channel="knx:device:bridge:aktor1:RM_Temperatur" }
Number RM_WLAN				"Mäher WLAN [%.0f dB]"				(gRM)	{ channel="knx:device:bridge:aktor1:RM_WLAN" }
Switch RM_Fehler			"Mäher Fehler"					(gRM)	{ channel="knx:device:bridge:aktor1:RM_Fehler" }
Number RM_Status			"Mäher Status [MAP(robonect_status.map):%s]"	(gRM)	{ channel="knx:device:bridge:aktor1:RM_Status" }
Number RM_Mode				"Mäher Modus [MAP(robonect_modue.map):%s]"	(gRM)	{ channel="knx:device:bridge:aktor1:RM_Modus" }
Zunächst wurde die Logik mit einzelnen Bausteinen erstellt:
RM_vorher.PNG
Nachdem das ganze soweit funktioniert hat wurde dann daraus eine Costum-Logik:
RM_nacher.PNG
Der Code hierzu:

Code: Alles auswählen

// Steuerung Rasenmährooter Gardena Sileno City mit Robonect (https://www.robonect-shop.de/) und OpenHab

{
    "Level": [
        // Levels allgemein
        ["$tr","bool",true],
        // Levels Betriebsart
        ["$In_Status","int",0],
        ["$Parken","bool",false],
        ["$Maeht","bool",false],
        ["$Suchen","bool",false],
        ["$Laden","bool",false],
        ["$Ausfahren","bool",false],
        ["$Fehler","bool",false],
        ["$Schlafen","bool",false],
        //Levels Betriebsstunden
		["$Reset","bool",false],	
		["$Maehzeit_Ist","float",0.0],
		["$Maehzeit_Soll","float",0.0],
		["$Interval","float",60.0],
		["$StartZeitTag","string","2 0 0 * * *"],
		["$Maehzeit_erreicht","bool",false],
		// Levels Freigabe Zeit
        ["$StartZeit","string","0 0 7 * * 1-6"],	// Anpassung Startzeit Roboter
        ["$StopZeit","string","0 0 22 * * 1-6"],	// Anpassung Endzeit Roboter
        ["$Set","bool",false],
        ["$Res","bool",false],
        ["$Stat","int",0],
        ["$Freigabe_Zeit","bool",false],
        // Levels Freigabe Temperatur
		["$Solltemp","float",5.0],
		["$Isttemp","float",0.0],
        ["$Freigabe_Temp","bool",false],
        // Level Freigabe Regen
        ["$Regen","bool",false],
        ["$Nachlaufzeit","float",3600.0],
        ["$Sperre_Regen","bool",false],
        ["$Freigabe_Regen","bool",false],
        // Levels Freigabe
        ["$Freigabe","bool",false],
        ["$Sperre","bool",false],
        // Levels Modus
        ["$Freigabe_int","int",0],
        ["$Wert_Maehen","int",2],
        ["$Wert_Home","int",1],
        ["$Modus","int",0],
        
        ["$VAR<Inhibit?>", "bool", false]
    ],
    "Module": [
        ["Break", ["$VAR<Inhibit?>"]  ],
        // Module Betriebsart
        ["Multiplexer",[0,"$tr",0],"$Parken","$In_Status"],
        ["Multiplexer",[0,0,"$tr",0],"$Maeht","$In_Status"],
        ["Multiplexer",[0,0,0,"$tr",0],"$Suchen","$In_Status"],
        ["Multiplexer",[0,0,0,0,"$tr",0],"$Laden","$In_Status"],
        ["Multiplexer",[0,0,0,0,0,"$tr",0],"$Ausfahren","$In_Status"],
        ["Multiplexer",[0,0,0,0,0,0,0,"$tr",0],"$Fehler","$In_Status"],
        ["Multiplexer",[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"$tr",0],"$Schlafen","$In_Status"],
        // Module Mähzeit Tag
		// Zähler Rücksetzen
		["Cron","$tr","$Reset",0,"$StartZeitTag"],
		// Betriebsdauer aktualisieren
		["HobbsMeter","$Maeht","$Maehzeit_Ist","$Reset"],
		// ResetTag auf false setzen
		["Multiplexer",["$Reset","-$tr"],"$Reset","$Reset"],
		// Clocksignal für Sendeintervall
		["Clocksignal","$Maeht",0,"$Interval"],
		// Mähzeit erreicht
		["Comparator", "$Maehzeit_Ist","$Maehzeit_erreicht","$Maehzeit_Soll"],
        // Module Freigabe Zeit
        ["Cron","$tr","$Set",0,"$StartZeit"],
        ["Cron","$tr","$Res",0,"$StopZeit"],
        ["BinaryMultiplexer",["$Set","$Res"],"$Stat"],
        ["Multiplexer",["$Freigabe_Zeit","$tr","-$tr"],"$Freigabe_Zeit","$Stat"],
        // Module Freigabe Temperatur
		["Comparator","$Isttemp","$Freigabe_Temp","$Solltemp"],
		// Module Freigabe Regen
		["Monoflop","$Regen",0,"$Sperre_Regen","$Nachlaufzeit",5],
		["And",["-$Regen","-$Sperre_Regen"],"$Freigabe_Regen"],
		// Module Freigabe
		["And",["-$Sperre","-$Maehzeit_erreicht","$Freigabe_Zeit","$Freigabe_Regen","$Freigabe_Temp"],"$Freigabe"],
        // Module Modus		
    	["BinaryMultiplexer",["$Freigabe"],"$Freigabe_int"],
        ["Multiplexer",["$Wert_Home", "$Wert_Maehen"],"$Modus","$Freigabe_int"]
    ],
    "Input": [
        ["Sperre","Sperre Automatik","$Sperre","c"],
        ["In_Status","Eingang Status","$In_Status","c"],
        ["Mähzeit","Mähzeit Soll","$Maehzeit_Soll","c"],
        ["Solltemperatur","Solltemperatur","$Solltemp","u"],
        ["Isttemperatur","Isttemperatur","$Isttemp","c"],
        ["Regen","Regensensor","$Regen?","c"],
        ["Nachlaufzeit","Nachlaufzeit Regen","$Nachlaufzeit?","c"],
        ["Inhibit", "INHIBIT", "$VAR<Inhibit?>", "u" ]
    ],
    "Output": [
        ["Parken","Parken","$Parken?","c"],
        ["Mäht","Mäht","$Maeht?","c"],
        ["Suchen","Ladestation Suchen","$Suchen?","c"],
        ["Laden","Laden","$Laden?","c"],
        ["Ausfahren","Mäher fährt aus Ladestation raus","$Ausfahren?","c"],
        ["Fehler","Fehler","$Fehler?","c"],
        ["Schlafen","Schlafen","$Schlafen?","c"],
	["Aktuelle Mähzeit","Mähzeit in h heute","$Maehzeit_Ist?","ct"],
        ["Freigabe","Freigabe","$Freigabe?","c"],
        ["Modus","Modus","$Modus","c"]

    ]
}

// Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht."
Eingänge:
  • Sperre: Über diesen Eingang kann der Mäher gesperrt werden, wenn z.B. die Kinder im Garten spielen wollen
  • In_Status: Ist der Status des Mähers von Openhab, damit die Logik weiß wann gemäht wird
  • Mähzeit: Vorgabe der Mähzeit die der Mäher an einem Tag mähen soll.
  • Solltemperatur: Mindesttemperatur die erreicht sein muss, damit der Mähe mähen darf (evtl. auch noch Maximaltemp?)
  • Isttemperatur: Vorgabe der aktuellen Aussentemperatur
  • Regen: Eingang für Regensensor, damit der Mähvorgang unterbrochen wird (True=Regen)
  • Nachlaufzeit: Nach negativer Flanke Eingang Regen bleibt der Mäher von für diese Zeit gesperrt
Anpassung der Start und Endzeit, also ab wann bzw. wie lang der Roboter maximal mähe darf muss derzeit noch direkt im Code angepasst werden:
["$StartZeit","string","0 0 7 * * 1-6"], // Anpassung Startzeit Roboter
["$StopZeit","string","0 0 22 * * 1-6"], // Anpassung Endzeit Roboter
Soweit ich weiß es derzeit noch keine Vorgabe von Cron über Eingänge möglich?
Wenn die Logik angelegt wird, darf man sich nicht wundern, wenn keine Freigabe erfolgt, da die Freigabe nur zu dem Startzeitpunkt gesetzt wird. Ist dieser bereits vergangen, so erfolgt die Freigabe erst am nächste Tag! Müsste ich evtl. noch irgendwie anders lösen.
Ausgänge:
  • Parken: Mäher parkt
  • Mäht: Mäher mäht
  • Suchen: Mäher sucht Ladestation
  • Laden: Mäher wird geladen
  • Ausfahren: Mähre fährt aus Ladestation heraus
  • Fehler: Mäher Fehlerstatus
  • Schlafen: Mäher schläft in Ladestation
  • Aktuelle Mähzeit: Zeit die der Mäher heute schon gemäht hat
  • Freigabe: Mäher darf mähen
  • Modus: Modus zur weitergabe an OpenHab
Die meisten Ausgänge habe ich optional eingestellt, da diese ja nicht unbedingt benötigt werden.
Möglich wäre noch die Mähdauer anhand von der Wetterdaten anzupassen, oder auch die Sperrzeit nach Regen anhand von Temperatur, Regenmenge usw. anzupassen, aber da habe ich aktuell noch keine Idee wie ich das ganze berechne, wird aber wahrscheinlich auch schwierig sein auf andere Gärten zu übertragen.
Evtl. kann die Logik ja jemand brauchen :-)
Wünschenswert wäre von meiner Seite aus wie gesagt mal noch die direkte Anbindung über MQTT, aber so läuft es soweit auch mal.

Gruß,
Martin
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

Picha
Reactions:
Beiträge: 152
Registriert: Do Okt 04, 2018 12:54 pm
Hat sich bedankt: 50 Mal
Danksagung erhalten: 29 Mal

#2

Beitrag von Picha »

Respekt.
Hab leider noch keinen Robi.
Muss jetzt doch nochmal nach nem Gardena scháuen.

Gruß Markus
Zuletzt geändert von Picha am Sa Apr 11, 2020 8:33 pm, insgesamt 1-mal geändert.
TWS 2600 ID:591 + PBM, VPN offen, Reboot nach Absprache"

DeLaDope
Reactions:
Beiträge: 245
Registriert: Mo Sep 03, 2018 2:26 pm
Hat sich bedankt: 122 Mal
Danksagung erhalten: 97 Mal

#3

Beitrag von DeLaDope »

Alter Schwede... Großen Respekt!
Geht das auch mit einem Worx Landroid? 😉

VG Tobias
TWS 2500 ID:134 + 2 x PBM ID:833/789, VPN offen, Reboot nach Rücksprache

Ersteller
Advenoni
Reactions:
Beiträge: 292
Registriert: So Aug 12, 2018 11:55 am
Wohnort: Krumbach
Hat sich bedankt: 17 Mal
Danksagung erhalten: 114 Mal

#4

Beitrag von Advenoni »

Hallo Tobias @DeLaDope

Dankeschön!
Wird mit dem Worx leider nicht funktionieren, da dieser nicht von Robonect unterstützt wird.

Gruß,
Martin
wiregate ID:1619 / timberwolf 2400 ID:108 / 950 ID:240 ID:464, VPN offen, Reboot bitte nach Rücksprache

DeLaDope
Reactions:
Beiträge: 245
Registriert: Mo Sep 03, 2018 2:26 pm
Hat sich bedankt: 122 Mal
Danksagung erhalten: 97 Mal

#5

Beitrag von DeLaDope »

Ok... Schade.... Trotzdem danke!
TWS 2500 ID:134 + 2 x PBM ID:833/789, VPN offen, Reboot nach Rücksprache

StefanW
Elaborated Networks
Reactions:
Beiträge: 9689
Registriert: So Aug 12, 2018 9:27 am
Wohnort: Frauenneuharting
Hat sich bedankt: 4831 Mal
Danksagung erhalten: 7632 Mal
Kontaktdaten:

#6

Beitrag von StefanW »

Hallo Martin,

ganz tolle Entwicklung. Zusammen mit usnerer Bewässerungslösung wird da ein "smarter Garden" draus.

lg

Stefan
Stefan Werner
Product Owner für Timberwolf Server, 1-Wire und BlitzART
Bitte WIKI lesen. Allg. Support nur im Forum. Bitte keine PN
Zu Preisen, Lizenzen, Garantie, HW-Defekt an service at elabnet dot de

Link zu Impressum und Datenschutzerklärung oben.

gbglace
Reactions:
Beiträge: 3585
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1253 Mal
Danksagung erhalten: 1649 Mal

#7

Beitrag von gbglace »

Ja sehr schöner Baustein. Die Logik ist natürlich auch Landroid fähig, Bedarf dann aber noch nen geeigneten Kommunikationskanal. Auf der einen Gartenhälfte wird demnächst auch noch ein 700-er Worx eingesetzt, dann Mal googeln ob ich das Ding im Zweifel via NodeRed erstmal anbinden kann.
Grüße
Göran

#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#3 PBM 3 Kanäle, #4 Modbus-Extension

DeLaDope
Reactions:
Beiträge: 245
Registriert: Mo Sep 03, 2018 2:26 pm
Hat sich bedankt: 122 Mal
Danksagung erhalten: 97 Mal

#8

Beitrag von DeLaDope »

Das wäre natürlich der Hammer! Würde mich riesig freuen! LG Tobias
TWS 2500 ID:134 + 2 x PBM ID:833/789, VPN offen, Reboot nach Rücksprache

adimaster
Reactions:
Beiträge: 375
Registriert: So Apr 14, 2019 11:12 am
Hat sich bedankt: 203 Mal
Danksagung erhalten: 198 Mal

#9

Beitrag von adimaster »

Hi,
Advenoni hat geschrieben: Sa Apr 11, 2020 7:13 pm ein paar von euch kennen ja evtl die Steuerplatine von Robonect für Gardena und Husqvarna Mähroboter.
Tolle Sache, das habe ich noch nicht gekannt --> schaue ich mir gleich an. Dann werde ich Dein Skript wohl auch mal testen :D

StefanW hat geschrieben: So Apr 12, 2020 12:19 pm Zusammen mit usnerer Bewässerungslösung wird da ein "smarter Garden" draus.
Stefan, was meinst Du damit? Euren geplanten Bodenfeuchte-Sensor?

Grüße
Adi
Grüße, Adi
TWS 2600 ID: 331, VPN geschlossen, Reboot nach Rücksprache

gbglace
Reactions:
Beiträge: 3585
Registriert: So Aug 12, 2018 10:20 am
Hat sich bedankt: 1253 Mal
Danksagung erhalten: 1649 Mal

#10

Beitrag von gbglace »

Bodenfeuchtesensor + Aktoren für Magnetventile + TWS für Implementierung weiterer logiken für Bewässerung + via Modbus und später MQTT usw. Integration von Wetterdaten für bessere Bedarfsberechnungen.
Grüße
Göran

#1 Timberwolf 2600 Velvet Red TWS #225 / VPN aktiv / Reboot OK
#2 Timberwolf 2600 Organic Silver TWS #438 / VPN aktiv / Reboot OK
#3 PBM 3 Kanäle, #4 Modbus-Extension
Antworten

Zurück zu „Zusätzliche Logikbausteine“