Weiter zum Inhalt

Skripten / Logik

16.7k Themen 215.9k Beiträge

Hilfe zu JavaScript, Blockly, TypeScript, Node-RED, Scenes und text2command

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 50k
    3k Themen
    50k Beiträge
    D
    @maxclaudi sagte: @Daniel-8 sagte: Aber beides braucht man ja eigentlich nicht... Richtig, beides benötigt man nicht. @Daniel-8 sagte: ....oder gibt es da einen Vorteil? Vorteile mit Cloud-Ersatz-Broker MQTT: MQTT ist komfortabler und schneller, weil es dann nicht reglementiert ist, wie das offizielle lokale MQTT. Es bietet viel mächtigere Möglichkeiten. (Was auch eine Gefahr birgt, wenn man nicht weiß, welche Topics beschrieben werden, was sie als Antwort erwarten usw.) MQTT ist schneller, weil nicht gepollt werden muss. Wenn Werte sich ändern, wird es automatisch published. Man muss nur Änderungen triggern und nicht alle x Sek. die Werte abfragen. WiFi / HTTP(S) wird entlastet. Man bekommt alle wahren Topics und kann Werte setzen, die sonst nicht gesetzt werden können. (Birgt auch eine Gefahr in sich, wenn man wild experimentiert oder Werte setzt, die normaler Weise für Funktionen bestimmt sind, die die Cloud nur im HEMS setzen würde. Am besten man nutzt nur zum Schreiben "properties" wie mit zenSDK.) Dann sollte ja nichts passieren wenn man nur die properties nutzt. Mehr brauche ich ja sowieso nicht. Eigentlich brauche ich nur die einspeiseleistung und den min soc. Vorteil von zenSDK mit Cloud-Ersatz-Broker: Bei der Umstellung erst mal alles bleiben kann wie es ist und läuft dann wirklich lokal. Schneller wie bisher, weil es keine Cloud gibt, die permanent irgendwas abfragen, senden oder "dazwischen funken" kann. zenSDK prüft immer wieder, ob die Verbindung zur Cloud besteht. Das ist sie ja – in Form eines lokalen Brokers. Kann ich es riskieren mit dem direkten mqtt Adapter vom iobroker den Speicher auf lokal umzustellen? Müsste man erst testen. Ich verwende nur mosquitto. Ausgereift, zuverlässig, schlank, ressourcenarm und schnell.. Das kann ich ja mal machen. Ich kann ja zur Not mit deinem Programm immer wieder auf die cloud umstellen falls es nicht geht. @Daniel-8 sagte: Aber dafür muss ich mir mal Zeit nehmen. Das geht nicht mehr vor dem Urlaub. Schönen Urlaub Deiner Familie und Dir. Danke.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    Murphy 0M
    Nachdem mein Blockly zum Steuern meines Hyper 2000 seit Monaten perfekt läuft habe ich mich mal dem Problem mit meinem Elektroherd angenommen. Wen der Herd eingeschaltet ist und die Vorwärmphase beendet ist fängt er an zu pulsen. Das heist er schaltet alle ca. 30 Sekunden die Last ab und dann wieder nach ca, 30 Skunden die Last aus. Das ist für meinen Hyper suboptimal da der dann wenn die Sonne scheint dauernd zwischen Laden und Einspeisen hin und her schaltet. Auch Abends ohne Sonne schaltet er ständig das Einspeisen ein und aus. Dafür habe ich jetzt mal ein JS erstellt. Wärend dem Pulsen des Herdes hört der Hyper auf zu Laden oder Einzuspeißen. /************************************************************ Elektroherd - Pulserkennung über Hausverbrauch ioBroker JavaScript ************************************************************/ // ============================================================ // EINSTELLUNGEN // ============================================================ const HERD_LEISTUNG_W = 2000; const SCHWELLWERT_W = 1000; // Zeit nach dem letzten Puls bis zum Ende des Pulsens const ZEIT_NACHLAUF_SEKUNDEN = 15; // Anzahl notwendiger Wechsel const MIN_PULSE_WECHSEL = 4; // Zeit ohne Wechsel -> vollständiger Reset const ZEIT_OHNE_WECHSEL_SEKUNDEN = 60; // ============================================================ // OBJEKTE // ============================================================ const HAUSVERBRAUCH = '0_userdata.0.Hausverbrauch'; const AKKU = '0_userdata.0.Laden_Schalter'; const EINSPEISEN = '0_userdata.0.Einspeisen_Schalter'; // ============================================================ // VARIABLEN // ============================================================ let letzterStatus = 'start'; let pulseWechsel = 0; // Pulserkennung aktuell aktiv? let herdPulst = false; // Timer für das Ende des Pulsens let nachlaufTimer = null; // Timer für 60-Sekunden-Reset let wechselResetTimer = null; // Ursprüngliche Schalterzustände let urspruenglicherAkkuZustand = null; let urspruenglicherEinspeisenZustand = null; // ============================================================ // AUSGANGSSTELLUNG WIEDERHERSTELLEN // ============================================================ function ausgangsstellungWiederherstellen() { // Nur wenn vorher tatsächlich ein Pulsbetrieb // aktiviert wurde if (!herdPulst) { return; } // -------------------------------------------------------- // AKKU // -------------------------------------------------------- if (urspruenglicherAkkuZustand !== null) { setState( AKKU, urspruenglicherAkkuZustand ); } // -------------------------------------------------------- // EINSPEISEN // -------------------------------------------------------- if (urspruenglicherEinspeisenZustand !== null) { setState( EINSPEISEN, urspruenglicherEinspeisenZustand ); } log( 'Ausgangsstellung wiederhergestellt: ' + 'Laden=' + urspruenglicherAkkuZustand + ', Einspeisen=' + urspruenglicherEinspeisenZustand, 'warn' ); // Pulserkennung AUS herdPulst = false; // Gespeicherte Zustände löschen urspruenglicherAkkuZustand = null; urspruenglicherEinspeisenZustand = null; } // ============================================================ // VOLLSTÄNDIGER RESET // ============================================================ function vollstaendigerReset() { log( '60 Sekunden kein neuer Wechsel -> ' + 'vollständiger Reset', 'warn' ); // -------------------------------------------------------- // TIMER LÖSCHEN // -------------------------------------------------------- if (nachlaufTimer !== null) { clearTimeout(nachlaufTimer); nachlaufTimer = null; } // -------------------------------------------------------- // AUSGANGSSTELLUNG WIEDERHERSTELLEN // -------------------------------------------------------- if (herdPulst) { ausgangsstellungWiederherstellen(); } // -------------------------------------------------------- // PULSZÄHLER ZURÜCKSETZEN // -------------------------------------------------------- pulseWechsel = 0; // -------------------------------------------------------- // STATUS ZURÜCKSETZEN // -------------------------------------------------------- letzterStatus = 'start'; log( 'Pulserkennung AUS / Wechselzähler = 0', 'warn' ); } // ============================================================ // PULSEN STARTEN // ============================================================ function pulsenStarten() { if (herdPulst) { return; } // -------------------------------------------------------- // AUSGANGSSTELLUNG SPEICHERN // -------------------------------------------------------- urspruenglicherAkkuZustand = getState(AKKU).val; urspruenglicherEinspeisenZustand = getState(EINSPEISEN).val; log( 'Pulsen erkannt -> Ausgangsstellung gespeichert: ' + 'Laden=' + urspruenglicherAkkuZustand + ', Einspeisen=' + urspruenglicherEinspeisenZustand, 'warn' ); // -------------------------------------------------------- // PULSERKENNUNG EIN // -------------------------------------------------------- herdPulst = true; // Während des Pulsens beide AUS setState(AKKU, false); setState(EINSPEISEN, false); log( 'HERD PULST -> Laden_Schalter AUS / Einspeisen AUS', 'warn' ); } // ============================================================ // PULSEN NORMAL BEENDEN // ============================================================ function pulsenBeenden() { if (!herdPulst) { return; } log( 'Herdpulsen beendet', 'warn' ); // Ausgangsstellung wiederherstellen ausgangsstellungWiederherstellen(); // Zähler zurücksetzen pulseWechsel = 0; letzterStatus = 'start'; // Reset-Timer löschen if (wechselResetTimer !== null) { clearTimeout(wechselResetTimer); wechselResetTimer = null; } } // ============================================================ // 60-SEKUNDEN-RESET-TIMER // ============================================================ function wechselResetTimerStarten() { // Alten Timer löschen if (wechselResetTimer !== null) { clearTimeout(wechselResetTimer); } // Neuen Timer starten wechselResetTimer = setTimeout(function () { wechselResetTimer = null; // Nur wenn tatsächlich Wechsel gezählt wurden if (pulseWechsel > 0) { vollstaendigerReset(); } }, ZEIT_OHNE_WECHSEL_SEKUNDEN * 1000); } // ============================================================ // NACHLAUF-TIMER // ============================================================ function nachlaufTimerStarten() { if (nachlaufTimer !== null) { clearTimeout(nachlaufTimer); } nachlaufTimer = setTimeout(function () { nachlaufTimer = null; const aktuell = Number( getState(HAUSVERBRAUCH).val ); if (aktuell <= SCHWELLWERT_W) { pulsenBeenden(); } }, ZEIT_NACHLAUF_SEKUNDEN * 1000); } // ============================================================ // HAUSVERBRAUCH ÜBERWACHEN // ============================================================ on( { id: HAUSVERBRAUCH, change: 'ne' }, function (obj) { const leistung = Number(obj.state.val); if (isNaN(leistung)) { log( 'Ungültiger Hausverbrauch: ' + obj.state.val, 'warn' ); return; } // ==================================================== // HOHER VERBRAUCH // ==================================================== if (leistung >= HERD_LEISTUNG_W) { // Wechsel NIEDRIG -> HOCH if (letzterStatus === 'niedrig') { pulseWechsel++; log( 'Puls HOCH: ' + leistung.toFixed(0) + ' W | Wechsel=' + pulseWechsel, 'warn' ); // 60-Sekunden-Timer neu starten wechselResetTimerStarten(); } letzterStatus = 'hoch'; // Nachlauf abbrechen if (nachlaufTimer !== null) { clearTimeout(nachlaufTimer); nachlaufTimer = null; } // ================================================= // 4 WECHSEL ERREICHT // ================================================= if ( pulseWechsel >= MIN_PULSE_WECHSEL && !herdPulst ) { pulsenStarten(); } return; } // ==================================================== // NIEDRIGER VERBRAUCH // ==================================================== if (leistung <= SCHWELLWERT_W) { // Wechsel HOCH -> NIEDRIG if (letzterStatus === 'hoch') { pulseWechsel++; log( 'Puls NIEDRIG: ' + leistung.toFixed(0) + ' W | Wechsel=' + pulseWechsel, 'warn' ); // 60-Sekunden-Timer neu starten wechselResetTimerStarten(); } letzterStatus = 'niedrig'; // Wenn Herd bereits pulst, // Nachlauf starten if (herdPulst) { nachlaufTimerStarten(); } return; } } ); // ============================================================ // STARTMELDUNG // ============================================================ log( '============================================', 'warn' ); log( 'Elektroherd-Pulserkennung gestartet', 'warn' ); log( 'Herdleistung: ' + HERD_LEISTUNG_W + ' W', 'warn' ); log( 'Schwellwert: ' + SCHWELLWERT_W + ' W', 'warn' ); log( 'Nachlauf: ' + ZEIT_NACHLAUF_SEKUNDEN + ' Sekunden', 'warn' ); log( 'Benötigte Wechsel: ' + MIN_PULSE_WECHSEL, 'warn' ); log( 'Reset nach ' + ZEIT_OHNE_WECHSEL_SEKUNDEN + ' Sekunden ohne Wechsel', 'warn' ); log( '============================================', 'warn' );
  • Hilfe für Skripterstellung mit Node-RED

    964 13k
    964 Themen
    13k Beiträge
    A
    @OliverIO ich kopiere morgen mal die Meldungen die mir Node-Red auswirft. Es steht meistens, ....ist kein String....
  • [gelöst][Problem] Schedule mit fester Tageszeit

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    3k Aufrufe
    VardaaranV
    @paul53: Verwendet Dein System die richtige Zeitzone ? (…) ` Das war es! :oops: Richtige Zeitzone und jetzt läuft es. Vielen Dank!
  • Javascript Too Many Errors 91% scanned

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    668 Aufrufe
    ruhr70R
    Frage mich das auch immer… Vielleicht weil der Editor die Funktionen vom Javascript Adapter nicht kennt und als Fehler zählt? wie z.B. getState()
  • [gelöst] Script mit Blockly funktioniert nicht.

    Verschoben
    22
    0 Stimmen
    22 Beiträge
    3k Aufrufe
    rantanplanR
    @jonny.011.rpt: Bitte erkläre mir wo ich das Thema schließen kann, ich habe was gefunden. ` Da warst Du schneller. Einach auf Deinen 1. Eintrag gehen, ändern anwählen [gelöst] ….. in den Betreff, absenden anwählen. Grüße
  • Script Anfänger

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    2k Aufrufe
    M
    sorry… Wollte eigentlich neues Thema eröffnen
  • [Gelöst] - Ping-Adapter per Script triggern

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    919 Aufrufe
    ThisoftT
    OK - danke. So kann man's natürlich auch machen ;) Ist zwar ein wenig "von hinten durch die Brust ins Auge" aber funktioniert.
  • [gelöst] Erstes eigenes Blockly Script - funktioniert plötzlich nicht mehr

    Verschoben
    26
    0 Stimmen
    26 Beiträge
    6k Aufrufe
    C
    Ich wollte mich nur noch mal melden: Das Script läuft jetzt wie ich es mir vorgestellt hatte, schltet zwei Lampen mit einbruch der Dämmerung ein (2min Verzögerung zw. beiden) und nach 4h wieder aus. Vielen Dank für die Hilfe, ich habe an dem Beispiel so einiges gelernt und hoffe das ich nun auch andere Aufgaben mit der Vorlage lösen kann. Gruß crepp Für alle die es interessiert: [image: 686_unbenannt.png]
  • [gelöst] Adapter "Aufbewaren", 2 Seiten, 2 Anleitungen welche stimmt?

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    1k Aufrufe
    apollon77A
    Super,schreibst du bitte noch ein "gelöst" in den Thread Titel des ersten Posts?! Dsbke
  • [Erledigt] Via Script eine Variable in Objekte erzeugen

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    3k Aufrufe
    Z
    Super, genau das wars. Habe ich auch schon hinbekommen Recht herzlichen Dank Gruß Zippolighter
  • Definizion des Datenpunkts bereits im Skript

    Verschoben
    15
    0 Stimmen
    15 Beiträge
    3k Aufrufe
    P
    Klappt super: createState('Nachtruhe', false, false, { name: 'Status Nachtruhe', type: 'boolean', desc: 'Nachtruhe', role: 'switch', smartName: { 'de': 'Nachtruhe' }, custom: { "influxdb.0": { "enabled": true, "changesOnly": true, "debounce": "", "retention": 63072000 // 2 Jahre } } }); Danke! Pix
  • Hilfe zu Werteliste für JavaScript Noobie

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    637 Aufrufe
    paul53P
    @Zippolighter: Geht das überhaupt so mit schreiben und lesen aus Werteliste?? Wie müssen dann hierfür die setState und getState Kommandos aussehen. ` An die Zustandstexte der Werteliste kommt man nur per getObject() und setObject() http://forum.iobroker.net/viewtopic.php?f=21&t=6418&p=66212#p66212. @Zippolighter: Oder denke ich viel zu kompliziert und es gibt eine einfachere Variante ` Die einfachere Variante ist ein Array, das mit JSON.stringify() in einen Datenpunkt vom Typ "string" gespeichert und per JSON.parse() wieder ausgelesen wird. Der Index ist dann Tag des Monats - 1.
  • Meine StateMachine

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    5k Aufrufe
    frankjokeF
    Eine Möglichkeit wäre: Eine Variable zu erzeugen mittels: variables: { v_temp: ['mysensors.0.100.1_TEMP.V_TEMP', (val,that,st) => that.list[0] ] } und dann beim Event eine Bedingiung anzugeben: activity: {id: "fhem.0.MyHarmony.activity", change: "ne"}, activity_ifTemp: ['activity', (old, that) => that.getVariable('v_temp')<15] Dann wird activity_ifTemp nur ausgeführt wenn die Temperatur <15° ist.
  • [Geloest] Bitte um Hilfe bei Script ccu-> iobroker

    Verschoben
    25
    0 Stimmen
    25 Beiträge
    6k Aufrufe
    D
    Hallo Paul, ich nutze nun der Parser-Adapter. Für einen nicht Programmierer nicht so einfach. Ich habe es aber geschafft. Vielen Dank noch einmal für Dein Hilfe. Gesendet von iPad mit Tapatalk
  • Scipt in Vis startet nicht

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    PeoplesP
    Da hast du vollkommen recht :D
  • LOWBAT Medungen Scipt Fehler

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    paul53P
    Das Original Script stammt von http://forum.iobroker.net/viewtopic.php?f=21&t=869&p=10992#p6535. Zeile 10 kann entfallen, da die Anzahl aus der Array-Länge ermittelt werden kann. Zeile 26 sollte geändert werden in: ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status Dann muss auch Zeile 31 geändert werden: log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " + textLOWBAT.length); Um auch noch abzufangen, dass der State zu Datenpunkten, die noch nie etwas empfangen haben, nicht existiert, sollte Zeile 20 ergänzt werden if(getState(id)) { var status = getState(id).val; // Zustand *.LOWBAT abfragen (jedes Element) } Hier das korrigierte Skript: createState('zählenLowbat.möglicheLOWBAT', 0); // wenn benötigt: Anzahl der Geräte mit Batterie createState('zählenLowbat.anzahlLOWBAT', 0); // wenn benötigt: Anzahl der vorhandenen LOWBAT createState('zählenLowbat.textLOWBAT', " "); // Namen LOWBAT, die an sind als Variable unter Javascript.0 anlegen var cacheSelectorLOWBAT = $('channel[state.id=*0.LOWBAT]'); function countLowbat(obj) { // Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0 var moeglicheLOWBAT = 0; var textLOWBAT = []; if (obj) { log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val); // Info im Log, welcher Zustand sich geändert hat } else { log('Ausgelöst bei Timer'); } cacheSelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *0.LOWBAT var status = false; if(getState(id)) { status = getState(id).val; // Zustand *0.LOWBAT abfragen (jedes Element) } var obj = getObject(id); if (status === true) { // wenn Zustand = true, wird das Array erweitert textLOWBAT.push(obj.common.name); // Zu Array hinzufügen } log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status); ++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status }); // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben log("Text: " + textLOWBAT); log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " + textLOWBAT.length); // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) setState("zählenLowbat.textLOWBAT", textLOWBAT.join(', ')); // Schreibt die Namen der Geräte mit LOWBAT Meldung setState("zählenLowbat.anzahlLOWBAT", textLOWBAT.length); // Schreibt die aktuelle Anzahl der LOWBAT-Meldungen setState("zählenLowbat.möglicheLOWBAT", moeglicheLOWBAT); // Schreibt die Anzahl der vorhandenen Batterie-Geräte } cacheSelectorLOWBAT.on(function(obj) { // bei Zustandänderung *. LOWBAT in allen Gewerken countLowbat(obj); }); schedule("*/60 * * * *", function () { //oder!! soll entweder ausgelöst werden alle 10 Minuten log("===>Will be triggered every 60 minutes!"); countLowbat(); });
  • Wandthermostat, Heizkörperthermostat und MANU_MODE

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    900 Aufrufe
    bentschikB
    Hi Black, Danke für den Hinweis. In der Tat scheint es im damaligen WebUI-Programm auch so gewesen zu sein, dass ich den HT auch auf MANU_MODE stellen musste. Das hatte ich wohl falsch in Erinnerung. Die Original-Programme habe ich schon lange gelöscht, aber ich habe es eben nochmal kurz getestet. Ich muss nun einfach nur die beiden Datenpunkte des HT bei jedem HT mit der selben Funktion "ccontrol" versehen, wie die beiden Datenpunkte des WT. An dem Script muss ich nichts ändern. Mit // Wintermode inactive on({id:"/Wintermode",val:false}, function (obj) { $('state[id=*.MANU_MODE](functions=ccontrol)').each(function (id,i) { log("Summermode: setting "+id+" to off"); setStateDelayed(id,30.5,i*2000); }); }); läuft es dann auch, wie gewünscht, und die HTs gehen auch in MANU_MODE. Danke & beste Grüsse, Ben
  • Offene Fenster ansagen nach Ereignis

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    659 Aufrufe
    DutchmanD
    @tobih83: Ist so etwas in einem gewissen Rahmen möglich? Vielen Dank Tobias ` Aber sicher da gibt es auch bereits einige Beispiele im Script subforum. Habe so schnell den Link nicht aber meine das pix und Paul haben bereits einige gepostet Gr Dutch –----------------------- Send from mobile device
  • [Frage] Relais bei überschreiten einer Temperatur schalten

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    5k Aufrufe
    O
    hab mich gleich mal rangemacht, habs nach dieser Anleitung gemacht. http://www.iobroker.net/docu/?page_id=5106&lang=de doch :evil: Jetzt kommen diese Fehler: [image: 2717_bildschirmfoto_2017-05-20_um_11.26.02.png] [image: 2717_bildschirmfoto_2017-05-20_um_11.26.24.png]
  • Frage Node- red version Adapter

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    apollon77A
    Fixed!
  • Zugriff auf iobroker Name, Type, Role?

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    5k Aufrufe
    S
    danke ;) ich habe den + Button im Object Browser nicht gesehen. Jetzt mit dem link ist alles klar. Großes Kompliment an alle ioBroker Macher! Das ist echt professionell gemacht. Grüße Stefan
  • [Frage] Einfache Zeitschaltuhr über Node-Red

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    9k Aufrufe
    rudikxR
    Nach langer Zeit habe ich nun doch eine Lösung für mein Problem gefunden. Wenn es jemanden interessiert wie man eine gewisse Zeit in einen Flow übergeben kann und diese dann entsprechend in einem Timer verarbeiten kann. Der kann sich meinen Lösungsweg gern ansehen. Vielleicht hilft es dem einen oder anderen ;) [image: 29206358fj.jpg]~~![](</s><URL url=)http://up.picr.de/29206358fj.jpg" /> Ich habe es gebraucht um meinen selbstgebauten Sprenklerventilen eine bestimmte Laufzeit zu geben. [image: 29206385qu.jpg]~~![](</s><URL url=)http://up.picr.de/29206385qu.jpg" /> Ist nicht das beste aber erfüllt seinen zweck vollkommen :) ! ```` [ { "id": "c1e423.55be5be", "type": "delay", "z": "6ebec0ea.874cf", "name": "", "pauseType": "delay", "timeout": "5", "timeoutUnits": "minutes", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "x": 737.7430152893066, "y": 294.7970428466797, "wires": [ [ "d06a5682.976518" ] ] }, { "id": "cd2acd2e.37301", "type": "ioBroker in", "z": "6ebec0ea.874cf", "name": "Ventil1_Zyklus", "topic": "admin.0.Eigene_Objekte.Bewaesserung.Ventil1_Zyklus", "payloadType": "value", "onlyack": "", "func": "all", "gap": "", "x": 154.75029754638672, "y": 130.17978191375732, "wires": [ [ "e901079b.805bd8" ] ] }, { "id": "e901079b.805bd8", "type": "switch", "z": "6ebec0ea.874cf", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "true", "vt": "str" } ], "checkall": "true", "outputs": 1, "x": 337.7503890991211, "y": 264.14856243133545, "wires": [ [ "e7320bf.f39fcf8", "7ad308a0.d61348" ] ] }, { "id": "e7320bf.f39fcf8", "type": "ioBroker get", "z": "6ebec0ea.874cf", "name": "Laufzeit_SOLL_V1", "topic": "admin.0.Eigene_Objekte.Bewaesserung.Laufzeit_SOLL_V1", "attrname": "payload", "payloadType": "value", "x": 280.75025177001953, "y": 411.343825340271, "wires": [ [ "41fd7a46.5a4ec4" ] ] }, { "id": "41fd7a46.5a4ec4", "type": "switch", "z": "6ebec0ea.874cf", "name": "", "property": "payload", "propertyType": "msg", "rules": [ { "t": "eq", "v": "0", "vt": "str" }, { "t": "eq", "v": "5", "vt": "str" }, { "t": "eq", "v": "10", "vt": "str" }, { "t": "eq", "v": "15", "vt": "str" }, { "t": "eq", "v": "20", "vt": "str" }, { "t": "eq", "v": "25", "vt": "str" }, { "t": "eq", "v": "30", "vt": "str" }, { "t": "eq", "v": "35", "vt": "str" }, { "t": "eq", "v": "40", "vt": "str" } ], "checkall": "true", "outputs": 9, "x": 480.7503204345703, "y": 355.1563529968262, "wires": [ [], [ "c1e423.55be5be" ], [ "26916043.4cb45" ], [ "846aced2.afb23" ], [ "d6da9b2f.5729d8" ], [ "4e92ebfd.e90c44" ], [ "1ff8132e.7bdc5d" ], [ "5e083cf1.f400b4" ], [ "30eee9e7.f45b26" ] ] }, { "id": "bbea0bcc.cd1e68", "type": "ioBroker out", "z": "6ebec0ea.874cf", "name": "Ventil1_Zyklus", "topic": "admin.0.Eigene_Objekte.Bewaesserung.Ventil1_Zyklus", "ack": "false", "autoCreate": "false", "x": 1095.7511825561523, "y": 490.4221124649048, "wires": [] }, { "id": "26916043.4cb45", "type": "delay", "z": "6ebec0ea.874cf", "name": "", "pauseType": "delay", "timeout": "10", "timeoutUnits": "minutes", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "x": 736.758243560791, "y": 330.80480003356934, "wires": [ [ "d06a5682.976518" ] ] }, { "id": "846aced2.afb23", "type": "delay", "z": "6ebec0ea.874cf", "name": "", "pauseType": "delay", "timeout": "15", "timeoutUnits": "minutes", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "x": 717.750431060791, "y": 369.80480003356934, "wires": [ [ "d06a5682.976518" ] ] }, { "id": "d6da9b2f.5729d8", "type": "delay", "z": "6ebec0ea.874cf", "name": "", "pauseType": "delay", "timeout": "20", "timeoutUnits": "minutes", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "x": 694.758243560791, "y": 408.80480003356934, "wires": [ [ "d06a5682.976518" ] ] }, { "id": "4e92ebfd.e90c44", "type": "delay", "z": "6ebec0ea.874cf", "name": "", "pauseType": "delay", "timeout": "25", "timeoutUnits": "minutes", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "x": 672.750431060791, "y": 447.80480003356934, "wires": [ [ "d06a5682.976518" ] ] }, { "id": "1ff8132e.7bdc5d", "type": "delay", "z": "6ebec0ea.874cf", "name": "", "pauseType": "delay", "timeout": "30", "timeoutUnits": "minutes", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "x": 651.750431060791, "y": 486.80480003356934, "wires": [ [ "d06a5682.976518" ] ] }, { "id": "5e083cf1.f400b4", "type": "delay", "z": "6ebec0ea.874cf", "name": "", "pauseType": "delay", "timeout": "35", "timeoutUnits": "minutes", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "x": 629.742618560791, "y": 525.8048000335693, "wires": [ [ "d06a5682.976518" ] ] }, { "id": "30eee9e7.f45b26", "type": "delay", "z": "6ebec0ea.874cf", "name": "", "pauseType": "delay", "timeout": "40", "timeoutUnits": "minutes", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "x": 606.750431060791, "y": 565.8126125335693, "wires": [ [ "d06a5682.976518" ] ] }, { "id": "d06a5682.976518", "type": "change", "z": "6ebec0ea.874cf", "name": "", "rules": [ { "t": "set", "p": "payload", "pt": "msg", "to": "false", "tot": "str" } ], "action": "", "property": "", "from": "", "to": "", "reg": false, "x": 1031.742733001709, "y": 281.6251096725464, "wires": [ [ "bbea0bcc.cd1e68", "7e126dd2.a74244" ] ] }, { "id": "10590312.b3865d", "type": "ioBroker out", "z": "6ebec0ea.874cf", "name": "Ventil1_SOLL", "topic": "admin.0.Eigene_Objekte.Bewaesserung.Ventil1_SOLL", "ack": "false", "autoCreate": "false", "x": 753.5001373291016, "y": 190.3334140777588, "wires": [] }, { "id": "7ad308a0.d61348", "type": "delay", "z": "6ebec0ea.874cf", "name": "", "pauseType": "delay", "timeout": "5", "timeoutUnits": "seconds", "rate": "1", "nbRateUnits": "1", "rateUnits": "second", "randomFirst": "1", "randomLast": "5", "randomUnits": "seconds", "drop": false, "x": 559.6667747497559, "y": 190.66672611236572, "wires": [ [ "10590312.b3865d" ] ] }, { "id": "7e126dd2.a74244", "type": "ioBroker out", "z": "6ebec0ea.874cf", "name": "Ventil1_SOLL", "topic": "admin.0.Eigene_Objekte.Bewaesserung.Ventil1_SOLL", "ack": "false", "autoCreate": "false", "x": 1102.6668090820312, "y": 435.66675567626953, "wires": [] }, { "id": "b38c2f80.fb3d2", "type": "comment", "z": "6ebec0ea.874cf", "name": "Ventil1 Einzel Zyklus", "info": "Startet den einzelzyklus für Ventil1\nschaltet nach 5 sec verzögerung das Ventil1 ein\nprüft die eingebegeben Laufzeit aus dem Objekt\nswicht die entsprechnede Zeit zum entsprechenden Timer ;) \nund schaletet dannach wieder alles ab!\n\n", "x": 162.50003051757812, "y": 58.00003623962402, "wires": [] } ]

450

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge