iobroker - Meine Einbindung sowie Scripte
Verfasst: So 13. Aug 2017, 21:50
Guten Abend,
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:
2. Scripte
3. Script für Auftrag
4. vis-Anzeige
So, viel Spaß beim basteln.
mfg
Dieter
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