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.
  • Taster Script

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    3k Aufrufe
    paul53P
    Bei den verschiedenen Möglichkeiten im Trigger-Objekt wie z.B. on({id: 'meineId', valLt: limit, oldValGe: limit}, meineFunktion); wird ein "ne" impliziert, es muss also nicht zusätzlich auf Änderung getestet werden. Bei change: 'any' sind keine Tests erforderlich.
  • Schalter soll Lampe schalten

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    HomoranH
    Doof ich bin (weil unterwegs) Du musst natürlich einen Triggernaustein nehmen! Gruß Rainer
  • [gelöst] 3 BWMs ein Timer

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    937 Aufrufe
    frankjokeF
    Das wäre was für die StateMachine :) http://forum.iobroker.net/viewtopic.php?f=21&t=5556
  • .sh oder .bat Datei ausführen!

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    3k Aufrufe
    M
    Hallo, Danke für deine Rückmeldung. Leider funktioniert es trotzdem nicht. Ich habe einen Windows NUC, kann es mit "bash ….." (siehe Bild) funktionieren wenn ich "Ubuntu on Windows" installiert habe? [image: 1455_blockly.png] Habe es dann auch noch mit C:\BatchDateien\FernseherChannelStepDown.bat versucht, aber ebenfalls ohne Erfolg. Wenn ich meine .bat manuell starte funktioniert es wie gewünscht, ich glaube mittlerweile das es tatsächlich an den Berechtigungen liegt, kann ich dies irgendwie prüfen? Gruß Klaus
  • Regensensor VAL auslesen?

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    950 Aufrufe
    G
    Ok, ... on({id: idregen, val: 1}, function() { ... geht. Warum nicht gestern ? Egal ;-) Danke für Euren Support.
  • SQL History von Webseite auslesen

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    apollon77A
    Also wenn Du direkt zugreifen willst dann in meinen Augen nichts was Sinn macht. Oder Du baust Dir ein eigenes Server-Seites Skript was die dir DB Daten ausliesst, SocketIO und Websockets sind standards in dem bereich genau dafür
  • Zählerstand in Verbrauch umrechnen?

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    paul53P
    @ThomasD: ich dachte es geht vielleicht ohne die Temporären Variablen. ` Ohne Speichern der verschiedenen Zählerstände in Datenpunkt(en) geht es nicht, weil diese sonst keinen Skriptneustart / kein Reboot überstehen. Anstelle von 6 Datenpunkten für die Zählerstände kann man auch einen Datenpunkt (Objekt / Array) mit allen 6 Zählerständen verwenden.
  • Script Aktivzeit von HM Geräten

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    2k Aufrufe
    G
    Dankeschön!!
  • Blockly Fehlermeldung

    Verschoben
    8
    1
    0 Stimmen
    8 Beiträge
    2k Aufrufe
    BluefoxB
    @Linedancer: Hallo Gemeinde, ich mache ja schon einiges mit blockly und komme da gut zurecht. Jetzt bekomme ich aber eine Fehlermeldung die ich weder erklären, noch beseitigen kann. Ziel des Scriptes ist, bei Abwesenheit eine Info über noch geöffnete Fenster zu erhalten. so sieht das aus: 2017-03-30.png und hier die Fehlermeldung: javascript.0 2017-03-30 09:56:58.655 error script.js.common.Alarmanlage.Signalisierung_Verschluss compile failed: SyntaxError: missing ) after argument list Ich habe den von blockly erzeugten Code kopiert und in einen neuen Script rein kopiert. dort wird der gleiche Fehler erzeugt. Kann mir hier einer helfen? ` Du hast als Trigger ID den Wert vom Objekt benutzt. Man muss aber normalerweise Objekt ID benutzen und nicht das Wert davon. 48_2017-04-02_15_23_52-iobroker.admin.png
  • [gelöst]Brauche ein Beispiel für Blocky

    Verschoben
    43
    0 Stimmen
    43 Beiträge
    12k Aufrufe
    Jeeper.atJ
    Außerdem wäre es toll, wenn man einen gelösten Thread mit [gelöst] im Thread Titel versehen würde. Dann bräuchten die Helfer nicht immer reinsehen, und die Suchenden wissen das es da eine Lösung gibt. Lg Günther
  • Weiterverarbeiten der Stati des Ping Adapters

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    paul53P
    Das müsste mit einem Selektor gehen: var idState = 'javascript.0.Netzwerk.GesamtStatus'; // auf richtige Instanz achten schedule("* * * * *", function () { var allpings = true; $('channel[id=ping.0.ioBroker-RasPi*]').each(function(id, i) { if(!getState(id).val) allpings = false; log(id + ': ' + allpings); }); setState(idState, allpings); });
  • [Problem] Skript funktioniert plötzlich nicht mehr korrekt

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    2k Aufrufe
    ThisoftT
    @erh_stgt: Hi, dieses Gerät ist ein externer Steckdosenaktor ohne Messfunktion. ` OK - dann dürfte meine Vermutung eher nicht zutreffen. Es gibt da einige HM-Geräte, vorzugsweise Taster und Schalter die Statusänderungen nur unter bestimmten Voraussetzungen (Dummyprogramm auf der CCU) über hm-rpc weitergeben.
  • [Frage] Direkte Verknüfpung von Werten

    Verschoben
    18
    0 Stimmen
    18 Beiträge
    3k Aufrufe
    paul53P
    @TOBO: Die Erste und die letzte Zeile verstehe ich nun, kann mir aber absolut keinen Reim aus den beiden in der Mitte machen. ` Blockly ist eben nur eine Hilfestellung zu Javascript. Deshalb werden hier JS-Variablen für die am häufigsten verwendeten gebildet.@TOBO: Würde das ganze nicht aus so funktionieren ? ` Ja, hat aber den Nachteil, dass (im Prinzip) mit getState(id).val ein Datenbankzugriff erfolgt, der die CPU entsprechend belastet, obwohl die Werte bereits an die callback-Funktion übergeben wurden. Deshalb ist dies besser: on({id: 's7.0.DBs.DB1.VW0', change: "ne"}, function (obj) { var value = obj.state.val; setState("hm-rpc.1.MEQ0312049.3.LEVEL", value); }); oder on({id: 's7.0.DBs.DB1.VW0', change: "ne"}, function (obj) { setState("hm-rpc.1.MEQ0312049.3.LEVEL", obj.state.val); });
  • [gelöst] Pushbullet bei Änderung eines Wertes?

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    775 Aufrufe
    N
    Danke Jey Cee das klappt so. sollte eigentlich ein String false sein.
  • Automatisches erstellen von Variablen aus mehren Objekten (198 Stk)

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    ruhr70R
    bekommt man hin. ich bin unterwegs, bin aber sicher, dass dir jemand helfen wird. Gesendet von iPhone mit Tapatalk
  • [gelöst] Batch datei ausführung ?

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    768 Aufrufe
    paul53P
    Siehe https://github.com/ioBroker/ioBroker.javascript#exec–-execute-some-os-command-like-cp-file1-file2. exec('c:\scon.bat', function (error, stdout, stderr) { if(error) log('Fehler: ' + stderr, 'error'); else { Mache was mit stdout } });
  • [gelöst] Subcribe auf Adapter-Instanz.common.enabled

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    greyhoundG
    Danke für die Erklärungen. das mit "alive" habe ich beim Durchsuchen des Forums so nicht gefunden. Bei Telegram werde ich bei der "connection"-Variante bleiben, aber an anderer Stelle werde ich es mit alive lösen. Danke GH
  • [gelöst] Rolladenscript bei Homematic

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    C
    Danke das war es.
  • [gelöst] ON wenn Stromwert unterschritten wird - Bessere Möglichkeit vorhanden?

    Verschoben
    16
    0 Stimmen
    16 Beiträge
    2k Aufrufe
    P
    Naja, ich versteh da gerade nicht viel von, aber es funktioniert :-) Danke
  • [gelöst] Blockly triggert nicht

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    2k Aufrufe
    R
    Hallo Zusammen, also als Ergänzung für Andere: Meine aktuelle ioBroker Instanz war zwar gar nicht so alt, aber naja. ioBroker komplett gelöscht Basisadapter "hmrega/rpc/javascript/mail/pushover" installiert Blockly Script zusammengeklickt Schon geht es: javascript.0 2017-03-21 22:06:08.340 info script.js.common.notification.test-auf-ccu2-20-short: registered 1 subscription and 0 schedules javascript.0 2017-03-21 22:06:08.339 info Start javascript script.js.common.notification.test-auf-ccu2-20-short Der Funktionstest danach ging auch. -> Neu installieren. Gruß Rauschi

280

Online

33.0k

Benutzer

83.6k

Themen

1.3m

Beiträge