ich habe meinen Husqvarna 420 nun erfolgreich in iobroker eingebunden.
Anbei mal, für alle die es interessiert und evtl. Anregungen brauchen, meine Scripte sowie die vis Darstellung.
1. Variablen anlegen:
Code: Alles auswählen
// Mähroboter -------------------------------------------------------------------------------------------------------------
createState('javascript.0.Status.Mähroboter.Status','', {type: 'string',name: 'Status',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Duration',0, {type: 'number',name: 'Zeit in diesem Status',unit: 'Sekunden',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Mode','', {type: 'string',name: 'Mode',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Battery',0, {type: 'number',name: 'Akku',unit: 'Prozent',min: 0,read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Hours',0, {type: 'number',name: 'Betriebstunden',unit: 'Stunden',min: 0,read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Wlan',0, {type: 'number',name: 'Wlan Signalstärke',min: -110,read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Auftrag',0, {type: 'number',name: 'Auftrag Betriebsmodus',min: 0,read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Auftrag2',1, {type: 'number',name: 'Auftrag Start (=0) - Stop (=1)',min: 0,read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Temperatur',0, {type: 'number',name: 'Temperatur',unit: '°C', read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Luftfeuchtigkeit',0, {type: 'number',name: 'Luftfeuchtigkeit',unit: '%', read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Timer.Status','', {type: 'string',name: 'Timer-Status',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Timer.next_date','', {type: 'string',name: 'Timer-next-date',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Timer.next_time','', {type: 'string',name: 'Timer-next-time',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Mähauftrag.Uhrzeit_Start',"", {type: 'string',name: 'manueller Mähauftrag - Uhrzeit.Start',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Mähauftrag.Uhrzeit_Ende',"", {type: 'string',name: 'manueller Mähauftrag - Uhrzeit.Ende',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Mähauftrag.Uhrzeit_Auswahl_Start',"", {type: 'string',name: 'manueller Mähauftrag - Uhrzeit.Auswahl.Start',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Mähauftrag.Uhrzeit_Auswahl_Ende',"", {type: 'string',name: 'manueller Mähauftrag - Uhrzeit.Auswahl.Ende',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Mähauftrag.wie_lange',0, {type: 'number',name: 'manueller Mähauftrag - Auftrag wie lange',unit: 'Minuten', min: 0,read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Mähauftrag.Mode_danach',"", {type: 'string',name: 'manueller Mähauftrag - Modus nach dem Auftrag',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Mähauftrag.Taster_ausführen',false, {type: 'boolean',name: 'manueller Mähauftrag - Taster _ ausführen',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Mähauftrag.Mitteilung',"", {type: 'string',name: 'manueller Mähauftrag - Mitteilung',read: true,write: true,role: 'per Script'});
createState('javascript.0.Status.Mähroboter.Auto_nachts',false, {type: 'boolean',name: 'nachts wieder auf Auto schalten',read: true,write: true,role: 'per Script'});
Code: Alles auswählen
// Mähroboter
// Werte holen ------------------------------------------------------------------------------------------------------------------------
function weiter() {
var request = require('request');
request('http://192.168.243.22/json?cmd=status', function (error, response, body) {
if (!error && response.statusCode == 200) {
log ("json = " + body);
var obj = JSON.parse(body);
var v_status = obj.status.status;
if (v_status === 1) setState('javascript.0.Status.Mähroboter.Status', 'parkt');
if (v_status === 2) setState('javascript.0.Status.Mähroboter.Status', 'mäht');
if (v_status === 3) setState('javascript.0.Status.Mähroboter.Status', 'sucht die Ladestation');
if (v_status === 4) setState('javascript.0.Status.Mähroboter.Status', 'lädt');
if (v_status === 5) setState('javascript.0.Status.Mähroboter.Status', 'wartet auf Umsetzen im manuellen Modus');
if (v_status === 7) setState('javascript.0.Status.Mähroboter.Status', 'Fehlerstatus');
if (v_status === 8) setState('javascript.0.Status.Mähroboter.Status', 'Schleifensignal verloren');
if (v_status === 16) setState('javascript.0.Status.Mähroboter.Status', 'abgeschaltet');
if (v_status === 17) setState('javascript.0.Status.Mähroboter.Status', 'schläft');
var v_stopped = obj.status.stopped;
if (v_stopped === false) setState('javascript.0.Status.Mähroboter.Auftrag2', 0);
if (v_stopped === true) setState('javascript.0.Status.Mähroboter.Auftrag2', 1);
setState('javascript.0.Status.Mähroboter.Duration', obj.status.duration);
var v_mode = obj.status.mode;
if (v_mode === 0) setState('javascript.0.Status.Mähroboter.Mode', 'Auto');
if (v_mode === 1) setState('javascript.0.Status.Mähroboter.Mode', 'manuell');
if (v_mode === 2) setState('javascript.0.Status.Mähroboter.Mode', 'Home');
if (v_mode === 3) setState('javascript.0.Status.Mähroboter.Mode', 'Demo');
if (v_mode === 0) setState('javascript.0.Status.Mähroboter.Auftrag', 0);
if (v_mode === 1) setState('javascript.0.Status.Mähroboter.Auftrag', 3);
if (v_mode === 2) setState('javascript.0.Status.Mähroboter.Auftrag', 2);
setState('javascript.0.Status.Mähroboter.Battery', obj.status.battery);
setState('javascript.0.Status.Mähroboter.Hours', obj.status.hours);
setState('javascript.0.Status.Mähroboter.Wlan', obj.wlan.signal);
setState('javascript.0.Status.Mähroboter.Temperatur', obj.health.temperature);
setState('javascript.0.Status.Mähroboter.Luftfeuchtigkeit', obj.health.humidity);
var v_timer_status = obj.timer.status;
if (v_timer_status === 0) setState('javascript.0.Status.Mähroboter.Timer.Status', 'Deaktiviert');
if (v_timer_status === 1) setState('javascript.0.Status.Mähroboter.Timer.Status', 'Aktiv');
if (v_timer_status === 2) setState('javascript.0.Status.Mähroboter.Timer.Status', 'Standby');
if (obj.timer.next) {
setState('javascript.0.Status.Mähroboter.Timer.next_date', obj.timer.next.date.substr(0,obj.timer.next.date.length-4));
setState('javascript.0.Status.Mähroboter.Timer.next_time', obj.timer.next.time.substr(0,obj.timer.next.time.length-3));
} else {
log ('Timer.next: date und time nicht gesetzt - Diese Werte sind im json nicht vorhanden.');
setState('javascript.0.Status.Mähroboter.Timer.next_date', '');
setState('javascript.0.Status.Mähroboter.Timer.next_time', '');
}
} else {
log("Error = " + error);
}
});
}
// alle 2 Minuten ------------------------------------------------------------------------------------------------------------------------
schedule("*/2 * * * *", function () {
weiter(); // Werte holen
weiter_regen(); // prüfen ob es regnet
});
// Aufträge ------------------------------------------------------------------------------------------------------------------------
on({id: "javascript.0.Status.Mähroboter.Auftrag2", change: "ne"}, function() { // Start - Stop
log("Auslöser : Start - Stop");
var request = require('request');
var Auftrag = getState('javascript.0.Status.Mähroboter.Auftrag2').val;
if (Auftrag === 0) request('http://192.168.243.22/json?cmd=start');
if (Auftrag === 1) request('http://192.168.243.22/json?cmd=stop');
setTimeout(function() {
weiter();
}, 5000);
});
on({id: "javascript.0.Status.Mähroboter.Auftrag", change: "ne"}, function() { // Betriebsmodus
log("Auslöser : Auftrag Betriebsmodus");
var request = require('request');
var Auftrag = getState('javascript.0.Status.Mähroboter.Auftrag').val;
if (Auftrag === 0) {
request('http://192.168.243.22/json?cmd=mode&mode=auto'); // Modus = Auto
setState('javascript.0.Status.Mähroboter.Auto_nachts', false);
}
if (Auftrag === 1) {
request('http://192.168.243.22/json?cmd=mode&mode=eod'); // Modus = Feierabend
setState('javascript.0.Status.Mähroboter.Auto_nachts', true);
}
if (Auftrag === 2) {
request('http://192.168.243.22/json?cmd=mode&mode=home'); // Modus = Home
setState('javascript.0.Status.Mähroboter.Auto_nachts', true);
}
if (Auftrag === 3) {
request('http://192.168.243.22/json?cmd=mode&mode=man'); // Modus = Manuell
setState('javascript.0.Status.Mähroboter.Auto_nachts', true);
}
setTimeout(function() {
weiter();
}, 10000);
});
// Jalousie ------------------------------------------------------------------------------------------------------------------------
schedule("50 11 * * *", function () { // Jalousie hoch fahren
var v_jalousie = getState('hm-rpc.0.NEQ1688463.1.LEVEL').val; // Jalousie: Robo-Maeh
if (v_jalousie === 0) {
log("Jalousie Mäh-Roboter hoch gefahren.");
sendTo('telegram', "Jalousie Mäh-Roboter hoch gefahren.");
setState('hm-rpc.0.NEQ1688463.1.LEVEL', 100);
}
});
schedule("15 20 * * *", function () { // Jalousie runter fahren
var v_Status = getState ('javascript.0.Status.Mähroboter.Status').val;
var v_jalousie = getState('hm-rpc.0.NEQ1688463.1.LEVEL').val; // Jalousie: Robo-Maeh
if ((v_Status == "parkt" || v_Status == "schläft" || v_Status == "lädt") && v_jalousie == 100) {
log("Jalousie Mäh-Roboter runter gefahren.");
sendTo('telegram', "Jalousie Mäh-Roboter runter gefahren.");
setState('hm-rpc.0.NEQ1688463.1.LEVEL', 0);
} else if (v_jalousie === 0) {
log("Jalousie Mäh-Roboter wurde nicht runter gefahren; weil die Jalousie schon unten ist.");
sendTo('telegram', "Jalousie Mäh-Roboter wurde nicht runter gefahren; weil die Jalousie schon unten ist.");
}
});
// Es regnet ------------------------------------------------------------------------------------------------------------------------
on({id: 'hm-rpc.0.KEQ0153039.2.STATE', change: "ne", val: true}, function() { // Regensensor
weiter_regen();
});
// Script "Es regnet"
function weiter_regen() { // Aufruf von "Schedule Regensensor" oder "Schedule alle 2 Min."
var r_status = getState ('hm-rpc.0.KEQ0153039.2.STATE').val; // Regensensor
var m_status = getState ('javascript.0.Status.Mähroboter.Status').val; // Status Mähroboter
if (r_status === true && m_status == "mäht") {
var request = require ('request');
var Auto_S = getState('hm-rega.0.29816').val; // Auto Sprache
log ('Achtung, es regnet. Der Mähroboter fährt nach Hause.');
sendTo('telegram', 'Achtung, es regnet.\nDer Mähroboter fährt nach Hause.');
request('http://192.168.243.22/json?cmd=mode&mode=eod'); // Modus = Feierabend
setState('javascript.0.Status.Mähroboter.Auto_nachts', true);
if (Auto_S === true) {
request('http://192.168.243.76:50000/track=tng_red_alert2.wav');
setTimeout(setState('sayit.0.tts.text', 'Achtung, es regnet. Der Mähroboter fährt nach Hause.'), 3000);
}
}
}
// Jalousie ändert sich ------------------------------------------------------------------------------------------------------------------------
on({id: 'hm-rpc.0.NEQ1688463.1.WORKING', change: "ne", val: true}, function() { // Jalousie ändert sich
setState ('hm-rpc.0.NEQ0675013.3.PROGRAM', 4); // Robo-Maeh: Stripes - Programm Lagerfeuer
setState ('hm-rpc.0.NEQ0675013.1.LEVEL', 100); // Robo-Maeh: Stripes - ein
setStateDelayed('hm-rpc.0.NEQ0675013.1.LEVEL', 0, 8000); // nach 8 Sek. wieder aus
});
// nachts wieder Auto schalten wenn Variable true --------------------------------------------------------------------------------------------------------
schedule("10 0 * * *", function () {
var request = require('request');
var v_Auto_nachts = getState('javascript.0.Status.Mähroboter.Auto_nachts').val;
if (v_Auto_nachts === true) {
log("Modus Mäh-Roboter wieder auf Auto gesetzt.");
sendTo('telegram', "Modus Mäh-Roboter wieder auf Auto gesetzt.");
request('http://192.168.243.22/json?cmd=mode&mode=auto'); // Modus = Auto setzen
}
});
3. Script für Auftrag
Code: Alles auswählen
// Mähroboter - Manueller Auftrag
// alle 30 Min. Daten für die Variablen erneuern -----------------------------------------------------------
schedule("1,31 * * * *", function () { // jede 1 und 31 Minute jeder Stunde
var v_Stunde = new Date().getHours();
var v_Minute = new Date().getMinutes();
var s_Start = "";
var s_Ende = "";
//v_Stunde = 15;
//v_Minute = 40;
if (v_Minute < 30) {
if ((v_Stunde) <= 22) s_Start = "Sofort;" + v_Stunde + ":30";
if ((v_Stunde + 1) <= 23) s_Ende = (v_Stunde + 1) + ":00;" + (v_Stunde + 1) + ":30";
for (z = 1; z < 5; z = z + 1) {
if ((v_Stunde + z) <= 22) s_Start = s_Start + ";" + (v_Stunde + z) + ":00;" + (v_Stunde + z) + ":30";
if ((v_Stunde + 1 + z) <= 23) s_Ende = s_Ende + ";" + (v_Stunde + 1 + z) + ":00;" + (v_Stunde + 1 + z) + ":30";
}
} else {
if ((v_Stunde + 1) <= 22) s_Start = "Sofort";
if ((v_Stunde + 1) <= 23) s_Ende = (v_Stunde + 1) + ":30";
for (z = 1; z < 5; z = z + 1) {
if ((v_Stunde + z) <= 22) s_Start = s_Start + ";" + (v_Stunde + z) + ":00;" + (v_Stunde + z) + ":30";
if ((v_Stunde + 1 + z) <= 23) s_Ende = s_Ende + ";" + (v_Stunde + 1 + z) + ":00;" + (v_Stunde + 1 + z) + ":30";
}
if ((v_Stunde + 5) <= 22) s_Start = s_Start + ";" + (v_Stunde + 5) + ":00";
if ((v_Stunde + 6) <= 23) s_Ende = s_Ende + ";" + (v_Stunde + 6) + ":00";
}
setState('javascript.0.Status.Mähroboter.Mähauftrag.Uhrzeit_Auswahl_Start', s_Start);
setState('javascript.0.Status.Mähroboter.Mähauftrag.Uhrzeit_Auswahl_Ende', s_Ende);
setState('javascript.0.Status.Mähroboter.Mähauftrag.Uhrzeit_Start', "");
setState('javascript.0.Status.Mähroboter.Mähauftrag.Uhrzeit_Ende', "");
setState('javascript.0.Status.Mähroboter.Mähauftrag.Mode_danach', "");
});
// Manueller Mähauftrag -------------------------------------------------------------------------------------------------------------------------------------------
on({id: "javascript.0.Status.Mähroboter.Mähauftrag.Taster_ausführen", change: "ne", val:true}, function() { // Taster wurde gedrückt
log("Auslöser : Manueller Mähauftrag");
var request = require('request');
var v_start = getState('javascript.0.Status.Mähroboter.Mähauftrag.Uhrzeit_Start').val;
var v_ende = getState('javascript.0.Status.Mähroboter.Mähauftrag.Uhrzeit_Ende').val;
var v_danach = getState('javascript.0.Status.Mähroboter.Mähauftrag.Mode_danach').val;
var v_jalousie = getState('hm-rpc.0.NEQ1688463.1.LEVEL').val; // Jalousie: Robo-Maeh
var v_start_min = 0;
var v_ende_min = 0;
var v_after = 4;
if (v_start == "Sofort") {
/*var v_Stunde = new Date().getHours();
var v_Minute = new Date().getMinutes();
v_start = v_Stunde + ":" + v_Minute;*/
v_start = "00:00";
}
v_start_min = parseInt(v_start.substring(0,2)) * 60 + parseInt(v_start.substring(3,5));
v_ende_min = parseInt(v_ende.substring(0,2)) * 60 + parseInt(v_ende.substring(3,5));
if (v_danach == 'Auto') v_after = 4;
if (v_danach == 'Feierabend') v_after = 2;
if (v_danach == 'Home') v_after = 1;
if (v_danach == 'Manuell') v_after = 3;
if (v_start_min >= v_ende_min) { // Parameter prüfen: "Start-Uhrzeit liegt später als Ende-Uhrzeit"
setState('javascript.0.Status.Mähroboter.Mähauftrag.Mitteilung', "Parameter stimmen nicht!");
setStateDelayed('javascript.0.Status.Mähroboter.Mähauftrag.Mitteilung', "", 3000); // nach 3 Sek. Mitteilung wieder ausblenden
log ("Manueller Mähauftrag: Parameter stimmen nicht! Auftrag nicht ausgeführt!");
sendTo('telegram', "Manueller Mähauftrag:\nParameter stimmen nicht!\nAuftrag nicht ausgeführt!");
} else if (v_jalousie === 0) {
setState('javascript.0.Status.Mähroboter.Mähauftrag.Mitteilung', "Jalousie ist nicht offen!");
setStateDelayed('javascript.0.Status.Mähroboter.Mähauftrag.Mitteilung', "", 3000); // nach 3 Sek. Mitteilung wieder ausblenden
log ("Manueller Mähauftrag: Jalousie ist nicht offen! Auftrag nicht ausgeführt!");
sendTo('telegram', "Manueller Mähauftrag:\nJalousie ist nicht offen!\nAuftrag nicht ausgeführt!");
} else {
setState('javascript.0.Status.Mähroboter.Mähauftrag.Mitteilung', "Auftrag wird ausgeführt!");
var befehl = 'http://192.168.243.22/json?cmd=mode&mode=job&remotestart=1&start=' + v_start + '&end=' + v_ende + '&after=' + v_after;
// remotestart = 1 (Normaler Start, ohne Fernstart-Punkt; after = 1=home, 2=feierabend, 3=manuell, 4=auto; end = wenn nichts angegeben, dann start + 1h; start = wenn nichts angegeben, dann 0)
log (befehl);
request(befehl);
setStateDelayed('javascript.0.Status.Mähroboter.Mähauftrag.Mitteilung', "", 3000); // nach 3 Sek. Mitteilung wieder ausblenden
log ("Manueller Mähauftrag: Start: " + v_start + "; Ende: " + v_ende + "; Danach: " + v_danach + "; wird ausgeführt!");
if (v_start == "00:00") {
sendTo('telegram', "Manueller Mähauftrag:\n Start: Sofort\n Ende: " + v_ende + "\n Danach: " + v_danach + "\n wird ausgeführt!");
} else {
sendTo('telegram', "Manueller Mähauftrag:\n Start: " + v_start + "\n Ende: " + v_ende + "\n Danach: " + v_danach + "\n wird ausgeführt!");
}
}
setState('javascript.0.Status.Mähroboter.Mähauftrag.Taster_ausführen', false); // Taster wieder auf false setzen
});
4. vis-Anzeige
So, viel Spaß beim basteln.
mfg
Dieter