NEWS
Navimow Steuerung ioBroker
-
Hallo
We kann mir mal helfen.
Ich habe einen Rasenrobotor der Firma Navimow i208 in ioBroker mit den Datenpunkten siehe Photo.
Dann habe ich eine Garage mit Rolltoor Elektrisch das auch in ioBroker ist mit den Datenpunkten siehe Photo.
Ich möchte gerne eine Steuerung haben, wo ich ein Taster auf mein Tablett drĂŒcke und das Rolltoor aufgeht und nach 2 Minuten soll der MĂ€her aus ger Garage fahren und seine arbeit verrichten , und wenn er wieder angedockt hat an der Kadestation dann soll das Rolltoor wieder schliessen.
Ich habe esa mal versucht so wie im crypt, aber dann geht das rolltoor gleichzeiti mit dem start des mĂ€hers auf.Ich wĂŒrde mich sehr ĂŒber Eure Hilfe freuen, wenn mir da mal jemand was basteln könnte.
Bilder von den Datenpunkten und mein crypt

const ROLLO = 'hm-rpc.0.OEQ0550361.1.LEVEL';
const MOWER_START = 'navimow.0.21EAB2545Y4281.remote.start';
const MOWER_STATUS = 'navimow.0.21EAB2545Y4281.status.state'; -
KI Antwort:
Das Problem in deinem Skript ist klar: Du versuchst remote.start abzufangen und mit setState(MOWER_START, false) zurĂŒckzusetzen. Das funktioniert nicht, weil der Navimow-Adapter den Startbefehl sofort an die API sendet, bevor dein Skript ihn zurĂŒcksetzen kann. Deshalb fahren Tor und MĂ€her gleichzeitig los.Die Lösung: Einen eigenen Trigger-Button verwenden statt remote.start abzufangen.
Hier das korrigierte Skript:
// Garage + MĂ€her Steuerung const ROLLO = 'hm-rpc.0.OEQ0550361.1.LEVEL'; const MOWER_START = 'navimow.0.21EAB2545Y4281.remote.start'; const MOWER_STATUS = 'navimow.0.21EAB2545Y4281.status.state'; const TRIGGER = '0_userdata.0.Garage_Maeher_Start'; // Trigger-Datenpunkt erstellen (diesen Button auf dein Tablet legen) createState(TRIGGER, false, { name: 'MĂ€her mit Garagentor starten', type: 'boolean', role: 'button', read: true, write: true }); let running = false; let watcher = null; on({id: TRIGGER, change: "any", ack: false}, async function (obj) { if (obj.state.val !== true || running) return; running = true; // 1. Tor öffnen setState(ROLLO, 100); log("Tor öffnet"); // 2. Warten bis Tor komplett offen (2 Minuten) await wait(120000); // 3. MĂ€her starten log("Starte MĂ€her"); setState(MOWER_START, true); // 4. RĂŒckkehr ĂŒberwachen if (watcher) unsubscribe(watcher); watcher = on({id: MOWER_STATUS, change: "ne"}, async function (state) { if (state.state.val === "isDocked" && state.state.ack) { log("MĂ€her ist zurĂŒck"); unsubscribe(watcher); watcher = null; // 5. Warten bis MĂ€her in Garage (2 Minuten) await wait(120000); // 6. Tor schlieĂen setState(ROLLO, 0); log("Tor schlieĂt"); running = false; } }); });Was ist anders:
Eigener Trigger-Button (0_userdata.0.Garage_Maeher_Start) -- diesen Datenpunkt legst du auf dein Tablet statt remote.start. Der MĂ€her wird erst nach 2 Minuten Wartezeit gestartet, nicht sofort.
change: "ne" beim Status-Watcher -- reagiert nur auf tatsÀchliche StatusÀnderungen, nicht auf wiederholte Werte.
ack-PrĂŒfung -- state.state.ack === true stellt sicher, dass nur bestĂ€tigte StatusĂ€nderungen vom GerĂ€t verarbeitet werden.
running-Flag -- verhindert, dass der Ablauf doppelt gestartet wird.
So richtest du es ein:
Skript in ioBroker JavaScript-Adapter einfĂŒgen und starten
Der Datenpunkt 0_userdata.0.Garage_Maeher_Start wird automatisch erstellt
Diesen Button auf dein Tablet (z.B. in VIS oder Lovelace) legen
remote.start direkt nicht mehr als Auslöser verwenden -- wenn du den MÀher ohne Garage starten willst, kannst du remote.start weiterhin normal nutzen -
so sieht es jetzt aus und lÀuft auch erstmal.
// Garage + MĂ€her Steuerung
const ROLLO = 'hm-rpc.0.OEQ0550361.1.LEVEL';
const MOWER_START = 'navimow.0.21EAB2545Y4281.remote.start';
const MOWER_STATUS = 'navimow.0.21EAB2545Y4281.status.state';
const TRIGGER = '0_userdata.0.Garage_Maeher_Start';// ===== WLED =====
const wledOn = "wled.0.bcddc225fc96.on";
const wledPreset = "wled.0.bcddc225fc96.ps";
const wledBri = "wled.0.bcddc225fc96.bri";// ===== PRESETS =====
const PRESET_ROT = 1;
const PRESET_GRUEN = 2;
const PRESET_WEISS = 3;// Trigger-Datenpunkt erstellen
createState(TRIGGER, false, {
name: 'MĂ€her mit Garagentor starten',
type: 'boolean',
role: 'button',
read: true,
write: true
});let running = false;
let watcher = null;on({id: TRIGGER, change: "any", ack: false}, async function (obj) {
if (obj.state.val !== true || running) return;running = true; setState(TRIGGER, false, true); // 1. Tor öffnen setState(ROLLO, 100); log("âĄïž Tor öffnet"); // đŽ WLED ROT (Blinken Preset 1) setState(wledOn, true); setState(wledBri, 255); setState(wledPreset, PRESET_ROT); // 2. Warten bis Tor komplett offen (2 Minuten) await wait(120000); // 3. MĂ€her starten log("đ€ Starte MĂ€her"); setState(MOWER_START, true); // đą WLED GRĂN (Preset 2) setState(wledPreset, PRESET_GRUEN); // 4. RĂŒckkehr ĂŒberwachen if (watcher) unsubscribe(watcher); watcher = on({id: MOWER_STATUS, change: "ne"}, async function (state) { if (state.state.val === "isDocked" && state.state.ack) { log("đ MĂ€her ist zurĂŒck"); unsubscribe(watcher); watcher = null; // đŽ Wieder ROT (Blinken) setState(wledPreset, PRESET_ROT); // 5. Warten bis MĂ€her in Garage (2 Minuten) await wait(120000); // 6. Tor schlieĂen setState(ROLLO, 0); log("đ Tor schlieĂt"); // 7. Zeitfenster prĂŒfen (20â23 Uhr) const hour = new Date().getHours(); if (hour >= 20 && hour < 23) { // âȘ WeiĂ setState(wledPreset, PRESET_WEISS); log("đĄ WLED WeiĂ (Abendmodus)"); } else { // đ AUS setState(wledOn, false); log("đ WLED aus"); } running = false; } });});
Jetzt brauche ich nur noch ein Countdown fĂŒr mein Button zum Starten der mir 120 Sekunden runterzĂ€hlt bis der MĂ€her Los legt. Höttest du da eine Lösung noch fĂŒr mich, wie ich das machen kann ?
-
// Garage + MĂ€her Steuerung const ROLLO = 'hm-rpc.0.OEQ0550361.1.LEVEL'; const MOWER_START = 'navimow.0.21EAB2545Y4281.remote.start'; const MOWER_STATUS = 'navimow.0.21EAB2545Y4281.status.state'; const TRIGGER = '0_userdata.0.Garage_Maeher_Start'; const COUNTDOWN = '0_userdata.0.Garage_Maeher_Countdown'; // ===== WLED ===== const wledOn = "wled.0.bcddc225fc96.on"; const wledPreset = "wled.0.bcddc225fc96.ps"; const wledBri = "wled.0.bcddc225fc96.bri"; // ===== PRESETS ===== const PRESET_ROT = 1; const PRESET_GRUEN = 2; const PRESET_WEISS = 3; // Trigger-Datenpunkt erstellen createState(TRIGGER, false, { name: 'MĂ€her mit Garagentor starten', type: 'boolean', role: 'button', read: true, write: true }); createState(COUNTDOWN, 0, { name: 'Countdown MĂ€her Start', type: 'number', unit: 's', read: true, write: false }); let running = false; let watcher = null; on({id: TRIGGER, change: "any", ack: false}, async function (obj) { if (obj.state.val !== true || running) return; running = true; setState(TRIGGER, false, true); // 1. Tor öffnen setState(ROLLO, 100); log("âĄïž Tor öffnet"); // đŽ WLED ROT (Blinken Preset 1) setState(wledOn, true); setState(wledBri, 255); setState(wledPreset, PRESET_ROT); // 2. Countdown 120 Sekunden for (let i = 120; i > 0; i--) { setState(COUNTDOWN, i); await wait(1000); } setState(COUNTDOWN, 0); // 3. MĂ€her starten log("đ€ Starte MĂ€her"); setState(MOWER_START, true); // đą WLED GRĂN (Preset 2) setState(wledPreset, PRESET_GRUEN); // 4. RĂŒckkehr ĂŒberwachen if (watcher) unsubscribe(watcher); watcher = on({id: MOWER_STATUS, change: "ne"}, async function (state) { if (state.state.val === "isDocked" && state.state.ack) { log("đ MĂ€her ist zurĂŒck"); unsubscribe(watcher); watcher = null; // đŽ Wieder ROT (Blinken) setState(wledPreset, PRESET_ROT); // 5. Countdown 120 Sekunden (Tor schlieĂen) for (let i = 120; i > 0; i--) { setState(COUNTDOWN, i); await wait(1000); } setState(COUNTDOWN, 0); // 6. Tor schlieĂen setState(ROLLO, 0); log("đ Tor schlieĂt"); // 7. Zeitfenster prĂŒfen (20â23 Uhr) const hour = new Date().getHours(); if (hour >= 20 && hour < 23) { // âȘ WeiĂ setState(wledPreset, PRESET_WEISS); log("đĄ WLED WeiĂ (Abendmodus)"); } else { // đ AUS setState(wledOn, false); log("đ WLED aus"); } running = false; } }); });
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen BeitrĂ€ge zu scrollen? Wenn du dich fĂŒr ein Konto anmeldest, kommst du immer genau dorthin zurĂŒck, wo du zuvor warst, und kannst dich ĂŒber neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und BeitrĂ€ge positiv bewerten, um anderen Community-Mitgliedern deine WertschĂ€tzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden đ
Registrieren Anmelden