Weiter zum Inhalt

Skripten / Logik

16.7k Themen 216.0k 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
    matze55M
    ich habe ein Icecast2 server installiert. Ich möchte ja möchte gerne aber ob es es geht weis ich nicht ton vom enigma2 api abgreifen......geht das?.......seit 3 tagen sitze ich daran..ich habe auch schon scripte aber das klapt nich einer ne idee?
  • 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 versuche morgen noch etwas mehr raus zu holen. Eben es verwirrt mich das es manchmal durchläuft und dann plötzlich nicht mehr. Für mich als Laie sieht es irgendwie so aus, wie wenn das BMS irgendwie auf was warten würde und daher nicht mehr.
  • Trigger bei Erreichen es bestimmten Werts

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    D
    Ahh, auf der GitHub-Seite steht das. Ich habe nur unter http://www.iobroker.net/?page_id=6818&lang=de geschaut. Danke, genau das, was ich gesucht habe.
  • Frage zu Blink-Script in Abhängigkeit zu Systemvariable aus CCU

    Verschoben
    5
    1
    0 Stimmen
    5 Beiträge
    940 Aufrufe
    htreckslerH
    ok, manchmal sollte man genauer lesen :-)
  • Telegram Antwortdupletten durch Text2command Adapter und Script

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    571 Aufrufe
    Niemand hat geantwortet
  • Alle Scripte verschwunden

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    2k Aufrufe
    fischi87F
    ich hab mir jetzt ein paar scripte wieder zusammen gesucht und bemerke Imme rnoch das es wie gestern komischer weise die scripte auf beiden Instanzen startet, wie kann das sein? Log 14:13:59.606 [info] javascript.1 Stop script script.js.LowBat 14:13:59.603 [info] javascript.0 Stop script script.js.LowBat 14:13:59.667 [info] javascript.0 Start javascript script.js.LowBat 14:13:59.669 [info] javascript.0 script.js.LowBat: registered 8 subscriptions and 1 schedule
  • Skript zur Prüfung ob DHCP Server arbeitet

    Verschoben
    11
    2
    0 Stimmen
    11 Beiträge
    2k Aufrufe
    S
    @ruhr70: Werde wohl noch irgendwo was einstellen müssen. Wir haben doch beide einen NUC oder? ` Leider nein… ich habe momentan einen ausgedienten SFF PC (HP Compaq 8000 Elite Small Form Factor-PC) als ESXi laufen. Gruß Adrian
  • Anfängerfrage

    Verschoben
    10
    0 Stimmen
    10 Beiträge
    2k Aufrufe
    E
    Mal gucken was passiert: on({id: 'fritzbox.0.calls.ring', val: true}, function (obj) { var value = obj.state.val; var oldValue = obj.oldState.val; console.log((String('Anruf von:') + String(String(getState("fritzbox.0.calls.ringLastNumber").val) + String(String(getState("tr-064.0.callmonitor.inbound.callerName").val) + String(getState("tr-064.0.callmonitor.inbound.timestamp").val))))); setState("telegram.0.communicate.response"/*Send text through telegram*/, (String('Anruf von:') + String(String(getState("fritzbox.0.calls.ringLastNumber").val) + String(String(getState("tr-064.0.callmonitor.inbound.callerName").val) + String(getState("tr-064.0.callmonitor.inbound.timestamp").val)))), true); }); 2094_image_6.png
  • [gelöst]Zustand invertieren, Fenster offen Script

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    3k Aufrufe
    coyoteC
    Funktioniert wie jetzt gewünscht. Danke Paul [THUMBS UP SIGN] Gesendet von meinem Pixel mit Tapatalk
  • Differenzen zwischen Soll und Ist

    Verschoben
    3
    2
    0 Stimmen
    3 Beiträge
    889 Aufrufe
    M
    Danke Paul, das Script hat auf Anhieb gepasst. Weiß jemand, ob man Direktverbindungen in der CCU2 deaktivieren kann? Auf der Oberfläche gehts nicht. Sinn: Um das Script erfolgreich einsetzen zu können, muss ich zeitweilig die Direktverknüpfung zwischen HM-Thermostat und den Zwischenschaltern kappen. Die andere Möglichkeit, das Wandthermostat auf Manuell zu setzen funktioniert nicht, weil dann die Differenzen nicht mehr stimmen. Manuell ist bei mir 4,5°C. Das nutze ich bereits, wenn die MAX-Fenstersensoren Fenster offen anzeigen. Gruß Marco
  • [gelöst] timerId von setTimeout in einem Datenpunkt speichern

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    3k Aufrufe
    G
    Hallo, ja, hat geholfen. Allerdings musste ich das Array anders definieren, Deine Version zeigt schon ein Ausrufezeichen und beim Speichern kam dann eine Fehlermeldung. Mit``` var aTimer = [];[/code] geht es. Danke für die Hilfe.
  • Blockly als EnginTyp nicht vorhanden ??

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    556 Aufrufe
    G
    Hallo, das Thema hat sich erledigt. Mit dem Anlegen eines neuen Scriptes erscheint dann auch blockly als Engine. Gruss G.
  • Skript beenden

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    4k Aufrufe
    HomoranH
    @josp666: ich hab leider gröbste Probleme mich im Forum anzumelden. ` Hast du dich bereits vor langer Zeit einmal hier angemeldet? Dann bitte sämtliche Cookies (zumindest des Forums) löschen und am besten auch die gesamte History und den Cacje. Dann müsste es wieder klappen. Gruß Rainer
  • [gelöst]HTTP POST mit Javascript

    Verschoben
    13
    0 Stimmen
    13 Beiträge
    8k Aufrufe
    0
    @mayer: Du kannst auch mehrere Filter-Variablen definieren und auswerten. ` Kannst du mir sagen wie der Filter im Network Event vom Tasker aussehen muss? (Event name und Filter) Evtl würde mir ein Screenshot schon weiterhelfen. Danke.
  • Fritzdect, aber generelle Anfängerfrage(n)/Verständnisfragen

    Verschoben
    1
    1
    0 Stimmen
    1 Beiträge
    1k Aufrufe
    Niemand hat geantwortet
  • Blockly Frage zum loggen von Zuständen

    Verschoben
    8
    1
    0 Stimmen
    8 Beiträge
    3k Aufrufe
    W
    Schönes Blockly! ;) :D Werde ich morgen mal umsetzen. Ich berichte! Danke und Grüße Andreas
  • Bewegungsmelder schaltet Display ohne HDMI

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    2k Aufrufe
    0
    @Sven2013: Ich versuche das nachher mal in der Umsetzung. ` Hallo Sven, gibt es eine Endgültige Umsetzung des Ganzen? Wie sieht das Script im Zusammenhang mit Tasker aus und funktioniert es zuverlässig? Bin auf der Suche für mein Vorhaben, was so werden soll wie deins. Danke + Mfg
  • Frage zu Verknüpfung bei Auslösung eines Scripts

    Verschoben
    16
    0 Stimmen
    16 Beiträge
    2k Aufrufe
    paul53P
    @Zippolighter: on({id: idAstro, change: "ne"}, AstroDingens(obj1)); on({id: irgendwas, change: "ne"}, AstroSowieso()); ```` ` –-> on({id: idAstro, change: "ne"}, AstroDingens); on({id: irgendwas, change: "ne"}, AstroSowieso);
  • [gelöst]Brennerfreigabe nach Wärmebedarfsanforderung

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    K
    Tja, wem sagst Du das. Mein Vermieter hat die ausgesucht und eingebaut, nachdem das Vorgängergerät vom 1996 kaputt ging. Diese Wolf-Therme war angeben auf 20 Prozent zu modulieren, aber ist von der Firmware auf 26 Prozent begrenzt. Weniger geht nicht. In Foren munkelt man wohl würde die Therme durchbrennen, da bei so geringem Luftdurchsatz der Brennraumdeckel durchschmort. Wenn es mein Haus wäre, dann hätte ich da eine 5KW Therme eingebaut und zum duschen den kleinsten Schichtspeicher eingebaut den es gibt. Das ist von Anfang an ein Baufehler gewesen auf Kombitherme ohne Speicher zu setzen , das Haus hat 75qm auf zwei Etagen und ist extrem gut gedämmt, bis auf die Mäuselöcher in der Zwischendecke. Ich bin grad dabei das Kabel an den Steuereingang anzuschließen, dabei bin ich durch das Menü und seit dem 5 Dezember 2015 hat die Kiste über 40.000 Brennerstarts durchgeführt. Dabei bin ich schon dran gewesen und habe selber im Fachmannbereich alles auf minimale Leistung im Heizbetrieb gestellt sowie die Default Taktsperre von 7 Minuten auf 25 Minuten verlängert. Durch komplette Innendämmung in beiden Etagen (Biegeweiche Vorsatzschalung) kann die Wohnung keine Energie speichern und so schwankt die Innentemperatur direkt mit der Temperatur der Heizkörper. == UPDATE 1 == Tja, was soll ich sagen, die Wolf Therme reagiert auf den Impuls nicht. Er wird am Eingang E1 erkannt, aber im Betriebsmodus BOB Betrieb ohne Brenner wird trotzdem gezündet. Also das ganze nun über die Busschnittstelle ISM8 … nur da holpert der Code ein wenig. Kulturfolger können kein Java... schedule("* * * * *", function () { if ((getState("hm-rpc.0.MEQ0575574.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.MEQ0575593.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.NEQ0882643.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.NEQ0882653.4.VALVE_STATE").val>30) || (getState("hm-rpc.0.NEQ0882704.4.VALVE_STATE").val>30)) { if ((getState("wolf.0.bm1.57")!="Heizbetrieb")) { setState("wolf.0.bm1.57", "Heizbetrieb"); setState("Brennerfreigabe.status", 1); log('Heizung an'); } } else { if ((getState("wolf.0.bm1.57")!="Standby")) { setState("wolf.0.bm1.57", "Standby"); setState("Brennerfreigabe.status", 0); log('Heizung aus'); } } } ); Ein Fehler kommt im Log: Wrong type of wolf.0.bm1.57: "string". Please fix, while deprecated and will not work in next versions. == UPDATE2 == Es klappt besser als ich gedacht habe, im ersten Bild sieht man wie ab 30 Prozent eingeschaltet wird. Im zweiten Bild wie dieser Prozess sich immer wiederholt die Nacht hindurch. Im dritten Bild sieht man die daraus resultierende Temperatur am Wandthermometer, die der Ventilstellung nun folgt. Kein Vergleich zu vorher. Okay, was versuche ich jetzt umzusetzen? :P Danke nochmal an die schnelle Hilfe, Ingo 1945_1.jpg 1945_2.jpg 1945_3.jpg
  • Scripten mit ioBroker oder lieber HM CCU

    Verschoben
    18
    0 Stimmen
    18 Beiträge
    3k Aufrufe
    lobomauL
    @Bluefox: Es gibt aber noch Programme in CCU. Und genau die (hm-rega) sind nicht so zuverlässig und wenn es mehr wird, tendieren zu abstürzen. hm-rega hängt aber alle hm-rpcs laufen weiter. ` Ich habe gerade genau diesen Zustand: hm-rega-adapter ist nur gelb, hab dann versucht auf web-gui der homematic zuzugreifen -> Fehlanzeige, es wird aber (seit Tagen) die Seite der homematic angezeigt: The Homematic CCU is not yet ready. Please wait. You will automatically be redirected to the home page. Alle drei hm-rpc Adapter ssind gruen. Dann habe ich festgestellt, dass ich ueber den mobile Adapter meine homematic Geraete (Lichtschalter, Rollladen) noch schalten kann. :) Das fuehrt mich genau zu der Frage des threads Programme/Scripte in iobroker oder CCU? -> fuer mich jetzt auf jeden Fall -> iobroker! (bin grad paar 1000km weg von zu Hause und kann die homematic nicht neustarten, kann aber paar Programme in iobroker anlegen). Fuer mich jetzt nur die Frage… welchen Nachteil habe ich ohne den hm-rega-adapter bzw. kann ich es bedenkenlos ohne laufen lassen? Ich weiss nur dass ich keine CCU Variablen mehr sehe oder CCU Programme... noch irgendeine Einschraenkung?
  • HILFE!!! Variable anlegen und Befehl per URL absetzen

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    2k Aufrufe
    M
    Vielen Dank, es klappt. Gruß Marc
  • Test auf eindeutige Datenpunktnamen

    Verschoben javascript
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    blauholstenB
    @ruhr70: if(name) -> true, wenn vorhanden (auch "") if(name !== '') -> true, wenn der Name nicht leer ist. Zusammen: name existiert UND (&&) ist nicht leer ` Man bin ich blind….Ich hatte da gerade voll das Brett vorm Kopf. Trotzdem danke

260

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge