NEWS
Worx landroid automation
-
Hallo,
nachdem mein script immer größer wird, möchte ich das gelernte und ausprobierte mit euch teilen. Das Script ersetzt die Eigenverwaltung des roboters und läst damit wesentlich variablere Konfiguration zu.
Verwendet:
-
Mail
-
Javascript
Features:
-
Automatisches Mähprogramm
-
Einstellbare Tageszeiten
-
Rückholung bei Regen
-
Eine tägliche Rasenpflegeausfahrt, wenn die Mähzeit bereits beendet wurde
-
VIS-Einbindung für Ladezustand, Gerätezustand, Mähzeiten, START/STOP
-
Fehlermail, wenn WIFI verloren ist
-
Fehler, falls nicht funktionsfähig/umgekippt/Ausserhalb des Mähbereichs
Offen:
-
Wetter-Forecast
-
Feiertagsunterbrechung
-
Mehrere Tageszeiten pro Tag
!
//Rasenmäher Script ! var landroidIP = "IP-des-Roboters"; var homemail = "mailadresse@Mail-adapters"; var targetmail = "mytarget@mail"; var weeklyruntime = 1000; //Minutes of cutting grass e.g. 800m² require 1000 Minutes var pfad = "Mower" + "."; var mailout = false; var rainwaitcounter = 0; var rain_true = false; //wait two minutes bevor going into rains state. (helps against moistured bushes in the morning) var out_of_order = 0; ! var forceCreation = false; var datenpunkte = { 'State': {"init":0, "common": {name: 'Mow_State'}}, 'Charger_State': {"init":0, "common": {name: 'Mow_CHGstate'}}, 'Battery_State': {"init":0, "common": {name: 'Mow_Battery'}}, 'RainSensor': {"init":0, "common": {name: 'Mow_Rain'}}, 'Worktimethisweek': {"init":0, "common": {name: 'Mow_this_week'}}, 'Workpercent': {"init":0, "common": {name: 'Mow_this_week_percent'}}, 'Start_mower': {"init":false, "common": {name: 'Mower_Start'}}, 'Stop_mower': {"init":false, "common": {name: 'Mower_Stop'}}, 'Monday_start': {"init":false, "common": {name: 'Monday_start'}}, 'Monday_ende': {"init":false, "common": {name: 'Monday_ende'}}, 'Tuesday_start': {"init":false, "common": {name: 'Tuesday_start'}}, 'Tuesday_ende': {"init":false, "common": {name: 'Tuesday_ende'}}, 'Wednesday_start': {"init":false, "common": {name: 'Wednesday_start'}}, 'Wednesday_ende': {"init":false, "common": {name: 'Wednesday_ende'}}, 'Thursday_start': {"init":false, "common": {name: 'Thursday_start'}}, 'Thursday_ende': {"init":false, "common": {name: 'Thursday_ende'}}, 'Friday_start': {"init":false, "common": {name: 'Friday_start'}}, 'Friday_ende': {"init":false, "common": {name: 'Friday_ende'}}, 'Saturday_start': {"init":false, "common": {name: 'Saturday_start'}}, 'Saturday_ende': {"init":false, "common": {name: 'Saturday_ende'}}, 'Sunday_start': {"init":false, "common": {name: 'Sunday_start'}}, 'Sunday_ende': {"init":false, "common": {name: 'Sunday_ende'}}, 'Lunch_break': {"init":false, "common": {name: 'Lunch_break'}}, 'Mow_on_holidays': {"init":false, "common": {name: 'Mow_on_holidays'}}, 'Daily_Cut': {"init":"true", "common": {name: 'Daily_Cut'}}, // three states: false, true, done ! }; function createDp() { var name; var init; var common; for (var dp in datenpunkte) { name = pfad + dp; init = datenpunkte[dp].init; common = datenpunkte[dp].common; createState(name, init , forceCreation, common); } } //{"tpl":"tplBasicState","data":{"oid":"javascript.0.Mower:Start_Mower","visibility-cond":"==","visibility-val":1,"value":"true","html":"[aktualisieren]","name":"Javascript ausführen","class":"","icon_src":"","gestures-offsetX":0,"gestures-offsetY":0,"gestures-swiping-value":"","gestures-rotating-value":"","gestures-pinching-value":"","gestures-swipeRight-value":"","gestures-swipeLeft-value":"","gestures-swipeUp-value":"","gestures-swipeDown-value":"","gestures-rotateLeft-value":"","gestures-rotateRight-value":"","gestures-pinchIn-value":"","gestures-pinchOut-value":""},"style":{"left":"318px","top":"28px","z-index":"40","color":"","font-family":"","font-style":"","font-size":"12px","width":"auto","height":"auto"},"widgetSet":"basic"}] on('javascript.0.Mower.Start_mower', function (obj) { if (!obj.state.ack && obj.state.val) { exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsondata.cgi -H \"Authorization: Basic YWRtaW46MDAwMA== \" --data \"data=\"%\"5B\"%\"5B\"%\"22settaggi\"%\"22\"%\"2C11\"%\"2C1\"%\"5D\"%\"5D\" --compressed', function(err, stdout, stderr) { if (err) { log(err); return; } }); setState("javascript.0.Mower.Start_mower",false); } }); ! //{"tpl":"tplBasicState","data":{"oid":"javascript.0.Mower:Stop_Mower","visibility-cond":"==","visibility-val":1,"value":"true","html":"[aktualisieren]","name":"Javascript ausführen","class":"","icon_src":"","gestures-offsetX":0,"gestures-offsetY":0,"gestures-swiping-value":"","gestures-rotating-value":"","gestures-pinching-value":"","gestures-swipeRight-value":"","gestures-swipeLeft-value":"","gestures-swipeUp-value":"","gestures-swipeDown-value":"","gestures-rotateLeft-value":"","gestures-rotateRight-value":"","gestures-pinchIn-value":"","gestures-pinchOut-value":""},"style":{"left":"318px","top":"28px","z-index":"40","color":"","font-family":"","font-style":"","font-size":"12px","width":"auto","height":"auto"},"widgetSet":"basic"}] on('javascript.0.Mower.Stop_mower', function (obj) { if (!obj.state.ack && obj.state.val) { exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsondata.cgi -H \"Authorization: Basic YWRtaW46MDAwMA== \" --data \"data=\"%\"5B\"%\"5B\"%\"22settaggi\"%\"22\"%\"2C12\"%\"2C1\"%\"5D\"%\"5D\" --compressed', function(err, stdout, stderr) { if (err) { log(err); return; } }); setState("javascript.0.Mower.Stop_mower",false); } }); ! function mow_week_reset() { //reset the state every week setState(pfad + "Worktimethisweek",0); setState(pfad + "Workpercent",0); } ! function mow_day_reset() { //reset the state every week if (getState('javascript.0.Mower.Daily_Cut').val == "false" || getState('javascript.0.Mower.Daily_Cut').val == "true") { } else if (getState('javascript.0.Mower.Daily_Cut').val == "done") { setState(pfad + "Daily_Cut","true"); } } ! function mow_auto() { exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsonDebug.cgi', function(err, stdout, stderr) { if (err) { out_of_order +1; setState(pfad + "State","Disconnected " + out_of_order); if (out_of_order == 10) { if (mailout === false){ sendTo("email", { from: homemail, to: targetmail, subject: "Mower OFF", text: "Your Mower is not reachable of offline" }); mailout = true; } log(out_of_order); } return; } out_of_order = 0; str = stdout; str = stdout.substring(stdout.indexOf("{\"landroid\":{\"state\":") + 22); str = str.substring(0, str.indexOf(",") -1); setState(pfad + "State",str); str = stdout.substring(stdout.indexOf("\"batteryCharger\":{\"state\":") + 27); str = str.substring(0, str.indexOf(",") -1); setState(pfad + "Charger_State",str); str = stdout.substring(stdout.indexOf("rainSensor") + 12); str = str.substring(0, str.indexOf(",")); if (str < 3000) { str = "Rain detected"} else if (rainwaitcounter !== 0) {str = "Rainwait " + rainwaitcounter + " min"} else {str = "Not raining"; rain_true = false} setState(pfad + "RainSensor",str); str = stdout.substring(stdout.indexOf("\"battery\":{\"percentage\":") + 24); str = str.substring(0, str.indexOf(",")); setState(pfad + "Battery_State",str); }); var now = currentTime(); var start = "javascript.0.Mower." + day_of_week() + "_start"; var end = "javascript.0.Mower." + day_of_week() + "_ende"; var mowerstate = getState('javascript.0.Mower.State').val; if (mowerstate != "home") { var marker = 0; marker = getState('javascript.0.Mower.Worktimethisweek').val; if (mowerstate == "grass cutting") { setState(pfad + "Worktimethisweek",marker + 1); mailout = false; var percent = marker*100/weeklyruntime; setState(pfad + "Workpercent",marker*100/weeklyruntime); } if (mowerstate == "idle") { if (mailout === false){ sendTo("email", { from: homemail, to: targetmail, subject: "Mower IDLE", text: "Your Mower is in IDLE State" }); mailout = true; } } if (getState('javascript.0.Mower.RainSensor').val == "Rain detected") { ! if (rain_true === false) { rain_true = true; } else { exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsondata.cgi -H \"Authorization: Basic YWRtaW46MDAwMA== \" --data \"data=\"%\"5B\"%\"5B\"%\"22settaggi\"%\"22\"%\"2C12\"%\"2C1\"%\"5D\"%\"5D\" --compressed', function(err, stdout, stderr) { if (err) { log(err); return; } });} rainwaitcounter = 30; log("Raining - Going home"); } } if (mowerstate == "home" && getState('javascript.0.Mower.Charger_State').val == "idle" && rainwaitcounter === 0) { if (getState('javascript.0.Mower.Worktimethisweek').val <= weeklyruntime || getState('javascript.0.Mower.Daily_Cut').val == "true") { if(now > getState(start).val && now < getState(end).val) { //log ("IN"); exec('curl -s --user admin:0000 -L ' + landroidIP + '/jsondata.cgi -H \"Authorization: Basic YWRtaW46MDAwMA== \" --data \"data=\"%\"5B\"%\"5B\"%\"22settaggi\"%\"22\"%\"2C11\"%\"2C1\"%\"5D\"%\"5D\" --compressed', function(err, stdout, stderr) { if (err) { log(err); return; } }); log("Mowing started"); setState(pfad + "Daily_Cut","done"); } //log(getState(start).val + getState(end).val + currentTime().toString()); } } if (rainwaitcounter > 0) { rainwaitcounter = rainwaitcounter -1; } ! } ! function currentTime() { var currentdate = new Date(); var cmin; if (currentdate.getMinutes() < 10) { cmin = "0" + currentdate.getMinutes().toString(); } else { cmin = currentdate.getMinutes(); } var chour; if (currentdate.getHours() < 10) { chour = "0" + currentdate.getHours().toString(); } else { chour = currentdate.getHours(); } return chour + ":" + cmin; } ! function day_of_week() { var d = new Date(); var weekday = new Array(7); weekday[0]= "Sunday"; weekday[1] = "Monday"; weekday[2] = "Tuesday"; weekday[3] = "Wednesday"; weekday[4] = "Thursday"; weekday[5] = "Friday"; weekday[6] = "Saturday"; var n = weekday[d.getDay()]; return n; } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule("* * * * *", mow_auto); schedule("59 23 * * 6", mow_week_reset); schedule("59 23 * * *", mow_day_reset); ! // main // ----------------------------------------------------------------------------- function main() { mow_auto(); } ! // Start Skript: // ----------------------------------------------------------------------------- ! createDp(); setTimeout(main, 5000); !
geändert von Homoran -> Script in Spoiler
-
-
Hallo nathaneel,
da mein Rob-E seit heute über ein Fernsteuermodul verfügt (robonect(r) ) bin ich nun auf der Suche nache einem geeigneten Script zur Einbindung in IOBroker / Homematic.
Gibt es bei Dienem Script etwas Neues?
Für welchen Typ ist Dein Script? Ich habe einen Gardena R40Li….
-
Hallo Frank,
das Script funktioniert mit den Worx Landroid Geräten M und L , sofern diese das WIFI-Modul enthalten. Mit gardena kanne ich mich nicht aus, das Script kann aber eventuell auf gardena umgebaut weren, wenn man an einen Steuerbefehl für gardena kommt.
Mein vorgehen war folgendes:
Roboter-IP über google-chrome aufgerufen
Dort habe ich einen Webserver erkannt und eine Steuersoftware am Gerät
Während ich dies ausgeführt habe, habe ich mit der google-chrome Entwicklerkonsole die Netzwerkübertragungen mitgeloggt und damit die notwendigen Übertragungen ermittelt.
Zusätzlich habe ich die firmware für das Upgrade aus der Worx-Webseite zerlegt (hexeditor) und damit die notwendigen scripte extrahiert. Damit komme ich an alle für mich relevanten befehle, welche ich mittels cURL aufrufe.
Wie gesagt, dies geht bei Worx, bei Gardena weiss ich dies nicht.
Wenn wir die Befehle von Gardena ermitteln können, können wir ein script dazu basteln
Aktuelle features für meine Implementierung:
-
Herbstmodus für Rasenmähen nach Bodentrocknung (Bodenfeuchte sorgt für Rutschgefahr des Roboters
)
-
Einbindung von wunderground
Gruß
Nathanael
-
-
Hallo Nathanael,
Danke für Deine schnelle Antwort.
Die Befehle für Gardena sind bekannt…
Kannst Du mir die aktuellste Version zukommen lassen? Damit ich dann die aktuellste umbauen kann.
-
Hallo,
ich bin auch sehr an der Umsetzung für Gardena R40Li und Robonect interessiert.
Gibt es Fortschritte bzw. Neuigkeiten?
Beste Grüße
Kennerblick
-
Hallo Nathanel,
Erstmals Danke für dein Script und deiner Bereitschaft das mit uns zu teilen.
Ich hab selbst auch einen Landroid S und hab mich mit deinen Script ein wenig herumgspielt.
Leider bekomm ich keine Verbindung zu Stande.
Die IP Adresse meine Mähers ist die 10.0.0.125
Die hab ich im Script auch eingetragen
var landroidIP = "10.0.0.125";
var homemail = "mailadresse@Mail-adapters";
var targetmail = "mytarget@mail";
var weeklyruntime = 1000; //Minutes of cutting grass e.g. 800m² require 1000 Minutes
var pfad = "Mower" + ".";
Sehe aber unter Objekte das State auf Disconnected: 0 steht.
Kannst du eventuell sagen was ich hier falsch gemacht habe bzw. woran es hacken könnte ?
Danke dir schon mal
lg
mandragora
Battery_State state Mow_Battery state javascript 0 edit delete build Charger_State state Mow_CHGstate state javascript 0 edit delete build Daily_Cut state Daily_Cut state javascript true edit delete build Friday_ende state Friday_ende state javascript false edit delete build Friday_start state Friday_start state javascript false edit delete build Lunch_break state Lunch_break state javascript false edit delete build Monday_ende state Monday_ende state javascript false edit delete build Monday_start state Monday_start state javascript false edit delete build Mow_on_holidays state Mow_on_holidays state javascript false edit delete build RainSensor state Mow_Rain state javascript 0 edit delete build Saturday_ende state Saturday_ende state javascript false edit delete build Saturday_start state Saturday_start state javascript false edit delete build Start_mower state Mower_Start state javascript false edit delete build State state Mow_State state javascript Disconnected 0 edit delete build Stop_mower state Mower_Stop state javascript false edit delete build Sunday_ende state Sunday_ende state javascript false edit delete build Sunday_start state Sunday_start state javascript false edit delete build Thursday_ende state Thursday_ende state javascript false edit delete build Thursday_start state Thursday_start state javascript false edit delete build Tuesday_ende state Tuesday_ende state javascript false edit delete build Tuesday_start state Tuesday_start state javascript false edit delete build Wednesday_ende state Wednesday_ende state javascript false edit delete build Wednesday_start state Wednesday_start state javascript false
-
Hallo Nathanel,
Erstmals Danke für dein Script und deiner Bereitschaft das mit uns zu teilen.
Ich hab selbst auch einen Landroid S und hab mich mit deinen Script ein wenig herumgspielt.
Leider bekomm ich keine Verbindung zu Stande.
Die IP Adresse meine Mähers ist die 10.0.0.125
Die hab ich im Script auch eingetragen
var landroidIP = "10.0.0.125";
var homemail = "mailadresse@Mail-adapters";
var targetmail = "mytarget@mail";
var weeklyruntime = 1000; //Minutes of cutting grass e.g. 800m² require 1000 Minutes
var pfad = "Mower" + ".";
Sehe aber unter Objekte das State auf Disconnected: 0 steht.
Kannst du eventuell sagen was ich hier falsch gemacht habe bzw. woran es hacken könnte ?
Danke dir schon mal
lg
mandragora
Battery_State state Mow_Battery state javascript 0 edit delete build Charger_State state Mow_CHGstate state javascript 0 edit delete build Daily_Cut state Daily_Cut state javascript true edit delete build Friday_ende state Friday_ende state javascript false edit delete build Friday_start state Friday_start state javascript false edit delete build Lunch_break state Lunch_break state javascript false edit delete build Monday_ende state Monday_ende state javascript false edit delete build Monday_start state Monday_start state javascript false edit delete build Mow_on_holidays state Mow_on_holidays state javascript false edit delete build RainSensor state Mow_Rain state javascript 0 edit delete build Saturday_ende state Saturday_ende state javascript false edit delete build Saturday_start state Saturday_start state javascript false edit delete build Start_mower state Mower_Start state javascript false edit delete build State state Mow_State state javascript Disconnected 0 edit delete build Stop_mower state Mower_Stop state javascript false edit delete build Sunday_ende state Sunday_ende state javascript false edit delete build Sunday_start state Sunday_start state javascript false edit delete build Thursday_ende state Thursday_ende state javascript false edit delete build Thursday_start state Thursday_start state javascript false edit delete build Tuesday_ende state Tuesday_ende state javascript false edit delete build Tuesday_start state Tuesday_start state javascript false edit delete build Wednesday_ende state Wednesday_ende state javascript false edit delete build Wednesday_start state Wednesday_start state javascript false ```` ` Wie du an den Zeiten der posts siehst, ist das Script schon sehr alt. Es gibt mittlerweile einen Adapter für die m und l Modelle und einen für die s Modelle
Gesendet von meinem Handy
-
Hallo Meistertr,
Den Landroid Adapter der Verfügbar ist hab ich installiert.
Was ich hier im Script sehe (zumindest interpretiere ich das mal so) ist das man hier auch die Endzeit des Mähers eingeben kann was beim Adapter nicht möglich ist. (viewtopic.php?f=30&t=14227)
Deshalb wollte ich das übers Script realisieren.
LG
mandragora
-
Hallo nochmals
Habe hier gesehen das du das mit Scripts anscheinend bei dir realisiert hast.
viewtopic.php?f=35&t=5369&start=160
kann ich mich daran halten und probieren ?
Danke und LG
mandragora
-
Ja das kannst du nutzen, ist aber noch nicht fertig und mehr oder weniger noch ein dummy
Gesendet von meinem Handy