Skip to content

Skripten / Logik

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

16.6k Topics 214.1k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    crunchipC
    @rallef siehe https://forum.iobroker.net/post/1330170
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Topics
    80k Posts
    Berges01B
    @MCU Prima das funktioniert super. Damit ist mir erst mal geholfen. Den "Rest" versuche ich mir noch zusammen zu bauen. DANKESCHÖN !
  • Hilfe für Skripterstellung mit Node-RED

    954 13k
    954 Topics
    13k Posts
    F
    Hallo ich habe ein Problem mit Nodered und Alexa Echo. Ich habe in Nodered die Wemo Emulation installiert und eine Wemo Steckdose emuliert um an einer Zigbeesteckdosenleiste einen Platz der Leiste zu schalten. Das klappt auch wunderbar leider nicht länger als ein zwei Tage. Wenn ich dann den Echo der mit der emulierten Steckdose verbunden ist neu starte geht es wieder. Leider ist das sehr nervig. Hat schon mal jemand gehabt? Durch die Forumssuche habe ich leider nicht gefunden. Gruss Achim
  • umstieg von pimatic

    blockly
    6
    0 Votes
    6 Posts
    516 Views
    M
    ganz optimal funktioniert es noch nicht. die stunde aktiv klappt nicht. woran kann das liegen? [image: 1581771831566-bildschirmfoto-2020-02-15-um-13.59.04-resized.png]
  • Blockly Zeitplan error

    javascript blockly
    45
    2
    0 Votes
    45 Posts
    2k Views
    dslraserD
    @xxx_turbo_xxx ich meinte es genau da in den Objekten, wenn Du da bei dem aktuellen Zählerstand mal von Hand was einträgst sollte schon was gerechnet werden. (das passiert ja sonst nur 1 x im Monat, nur mal schon vorher zum testen / probieren)
  • Update Js Controler

    javascript
    3
    0 Votes
    3 Posts
    299 Views
    crunchipC
    @albbino [image: 1581671977233-beca7ff8-555b-4421-af39-6600a76e8c5b-image.png]
  • Funk-Master-Slave-Steckdose umsetzen

    multimedia communication
    3
    0 Votes
    3 Posts
    754 Views
    D
    Vielen Dank für die Antwort. Leider hat direkt am nächsten Tag mein NAS defekt angemeldet, so dass ich hier nicht mehr mitlesen konnte... Ich habe es jetzt über PING und folgendes Blockly gelöst: [image: 1581632940910-3aef070a-7a35-4585-9d21-48119c181ca9-grafik-resized.png] Der rechte Teil ist nicht direkt notwendig, aber aus folgenden Gründen vorhanden: Der obere Teil reduziert die Verzögerung beim Einschalten Der untere Teil (Workaround) fordert die Uhrzeit vom Sensor durch Überschreiben des Wertes mit "" erneut an. In ein paar fällen hatte sich die RTC noch nicht aktualisiert und den 01.01.1970 als Wert genannt. Anmerkung: Den Trigger-Parameter "was updated" habe ich noch auf "was changed" geändert, damit nicht so viele Aktionen gefeuert werden.
  • AbstraktionsSchicht

    javascript
    13
    0 Votes
    13 Posts
    522 Views
    A
    Vielleicht noch ein möglicher Ansatz zur Steuerung: Ich finde MQTT als Kommunikationsprotokoll genial. Ich habe mir in ioBroker einen eigenen Tree für Wohnung/Stockwerke/Zimmer/Gewerke gebaut und die States mit der Visualisierung verbunden. Über MQTT sind diese Datenpunkte dann mit anderen Devices (entweder innerhalb von ioBroker oder externe Systeme) synchronisiert. Das ist auch eine Abstraktionsschicht, die ich mir gebaut habe, damit ich z.B. Hue-Bewegungsmelder, HomeMatic-Bewegungsmelder oder selbstgebaute über eine einheitliche Schnittstelle ansprechen kann. Möglicherweise ist da für dich auch ein passender Impuls dabei...
  • Doppelte Ansagen über SayIT bei einfachem Blockly

    Moved
    8
    2
    0 Votes
    8 Posts
    877 Views
    M
    Hi, trotz des älteren Themas mein Senf dazu. Hatte vor kurzem auch das Problem. Meine Lösung war beim Trigger das "anerkannt ist" auf Update zu setzen und dadurch waren die doppelten Ansagen weg. Kann Zufall sein aber bei mir hat's was gebracht.
  • Status Änderungen Debuggen / Nachvollziehen

    blockly
    4
    0 Votes
    4 Posts
    379 Views
    paul53P
    @btiegel sagte in Status Änderungen Debuggen / Nachvollziehen: Komme ich auf der Ebene auch an das auslösende Skript? Nein, es sollten nur ein bis zwei Scripte infrage kommen, in denen der Datenpunkt mit steuere (Bestätigt: false) bzw. aktualisiere(Bestätigt: true) aktualisiert wird.
  • Ansage Fenster geöffnet

    blockly
    12
    1
    0 Votes
    12 Posts
    1k Views
    C
    @panik Ne, welches Fenster offen ist steht ja dann in der neuen Variable FensterText, nur das du so auf eben diese Variable prüfen kannst ob mindestens ein Fenster geöffnet ist. Ich mache mal heute Abend -ich hoffe ich denke dran :P - ein Beispiel
  • 0 Votes
    1 Posts
    147 Views
    No one has replied
  • [gelöst] Script "Zählen von Fenstern" zeigt keine offenen Fenster an

    Moved
    132
    3
    0 Votes
    132 Posts
    21k Views
    NegaleinN
    @e-i-k-e sagte in [gelöst] Script "Zählen von Fenstern" zeigt keine offenen Fenster an: Keiner eine Idee dazu? ich hab das in Verwendung. Fenster zählen /* Status Zahl Fenster Homematic var cacheSelectorLevel = $('channel[state.id=*.STATE](functions="Fenster")'); Mi var cacheSelectorState = $('state[id=*.state](functions="Fenster")'); {1} */ var logging = true; var idAnzahlEin = 'javascript.0.Status.Fenster.Anzahl_auf', idAnzahl = 'javascript.0.Status.Fenster.Anzahl', idText = 'javascript.0.Status.Fenster.Text', idRaum = 'javascript.0.Status.Fenster.Raum', // <---- NEU idAnsage = 'javascript.0.Status.Fenster.Ansage'; // Ab hier nix mehr ändern createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter type: 'number', name: 'Anzahl aller Fenster', min: 0, def: 0, role: 'value' }); createState(idAnzahlEin, { // Anzahl der Fenster, die auf sind als Variable unter Javascript.0 anlegen type: 'number', name: 'Anzahl der offenen Fenster', min: 0, def: 0, role: 'value' }); createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen type: 'string', name: 'Offene Fenster', desc: 'Namen der offenen Fenster', def: ' ', role: 'value' }); createState(idAnsage, { type: 'string', name: 'Offene Fenster (Ansage)', desc: 'Namen der offenen Fenster (für Ansage aufbereitet)', def: ' ', role: 'value' }); createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU type: 'string', name: 'Räume mit offenen Fenster', desc: 'Namen der Räume, in denen Fenster offen sind', def: ' ', role: 'value' }); //var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")'); // Gewerk Licht var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="XXX")'); //var cacheSelectorHue = $('state[id=*.on](functions=Licht)'); var cacheSelectorState2 = $('channel[state.id=*.STATE](functions="Fenster")'); //Homematic var cacheSelectorState = $('state[id=*.state](functions="Fenster")'); //Mi function checkDevices(obj) { // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Licht auf 0 var anzahlLichterAn = 0; var anzahlLichter = 0; var textLichterAn = []; var textRaum = []; if (logging) { log('++++++ Fenster Anzahl ++++ '); log('#### Mi ##### '); } cacheSelectorState.each(function(id, i) { // Schleife für jedes gefundenen Element *.state im Gewerk Fenster var status = getState(id).val; // Zustand *.state abfragen (jedes Element) var deviceId = id.substring(0, id.lastIndexOf(".")); var devicename = getObject(deviceId).common.name; var raumname = getObject(id, "rooms").enumNames[0]; if (logging) { log('---Mi----'); log('Raum: ' + JSON.stringify(raumname)); log('Status: ' + status); } if (status) { // wenn Zustand = true, dann wird die Anzahl der Fenster hochgezählt ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status }); cacheSelectorState2.each(function(id, i) { // Schleife für jedes gefundenen Element *.ON im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".STATE")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) // if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) { if (logging) { log('---Homematic----'); log('Kanal: ' + name); log('Status: ' + status); } if (status) { // wenn Zustand = true, dann wird die Anzahl der Lichter hochgezählt ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status // } // ENDE VK-Abfrage }); if (logging) log('#### DIMMER ##### '); cacheSelectorLevel.each(function(id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status + '%'); } if (parseFloat(status) > 0) { // Wenn Dimmwert über 0 ++anzahlLichterAn; textLichterAn.push(devicename); // Zu Array hinzufügen textRaum.push(raumname.enumNames); // <---- NEU } ++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status // } // Ende Abfrage VK }); // Array mit Lichternamen sortieren textLichterAn.sort(); textRaum.sort(); // <---- NEU // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben if (logging) log("Text: " + textLichterAn); if (logging) log("Anzahl Fenster: " + anzahlLichter + " # davon Fenster offen: " + anzahlLichterAn); // die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht // setState(idRaum, textRaum.join(',<br>')); // Räume, in denen Licht brennt // <---- NEU setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU } // Trigger cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Licht if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelectorState2.on(function(obj) { // bei Zustandänderung *.ON von HUE Lampen im Gewerk Licht if (logging) log('Auslösende Homematic: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Licht if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); function main() { setTimeout(function() { if (logging) log('Auslöser Skriptstart'); checkDevices(); }, 2000); } main(); // Skriptstart-Auslöser // Aufbereitung für Ansage function strip_tags(data) { var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " "); return (rueckgabe); } on(idText, function(obj) { var text = obj.state.val; text = (getState(idAnzahl).val > 0) ? 'Fenster offen: ' + strip_tags(text) : 'Alle Fenster geschlossen'; setState(idAnsage, text); }); oder hier in Blockly (Fenster, Licht, usw.)
  • Kleine Alarmanlage

    blockly
    8
    1
    0 Votes
    8 Posts
    884 Views
    CinimodC
    Dann trigger doch die tür/fensterkontakte, oder was du sonst so als melder benutzen willst und schalte über vis oder yahka dein javascript (alarm) ein und aus [image: 1581272608126-bildschirmfoto-2020-02-09-um-19.19.21.png] mit nem zweiten script kannst dir ja auch über die Anwesenheit, dieses script ein oder ausschalten
  • scenes adapter handling

    scenes
    9
    0 Votes
    9 Posts
    515 Views
    jpgorganizerJ
    @Homoran said in scenes adapter handling: Dann kannst du direkt ein Issue anlegen mit feature request - Stop scene done https://github.com/ioBroker/ioBroker.scenes/issues/42
  • SQL Adapter flutet Log

    monitoring
    13
    0 Votes
    13 Posts
    793 Views
    C
    Hallo zusammen, Hatte das selbe Problem nach Update der node Version (8 auf 10). Mir hat diese Anleitung geholfen: https://forum.iobroker.net/topic/22867/how-to-node-js-für-iobroker-richtig-updaten Gruß Charly
  • Hilfe parser auslesen Wind aus .txt

    monitoring
    12
    0 Votes
    12 Posts
    671 Views
    HomoranH
    @ChrisXY ist aber kein Hexenwerk. du musst nur die Klammern verschieben, je nachdem welchen Teil des Timestamps du haben willst: last24h_wind0_speedmax_time\s+\d\d\d\d\d\d\d\d\d\d\d\d(\d\d) Hier Sekunden
  • [Gelöst]Automatisch zum Standardview nach 2 Minuten

    javascript
    5
    0 Votes
    5 Posts
    710 Views
    T
    @Feuersturm Dann dürftest du die richtigen Stichwörter verwendet haben! Trotzdem danke für die Mühe. LG Thomas
  • [Gelöst] Fensterkontakt + Thermostat: Wie Verzögerung einbauen

    Moved
    5
    0 Votes
    5 Posts
    1k Views
    C
    Hi, leider nur Javascript. Die Funktion Timeout ist aber schön zu erkennen: Hier wird 60 Sekunden bei Fenster auf gewartet und erneut geprüft. Ich kann also in Ruhe ein Bier vom Balkon holen... //Wohnzimmer: on({id: 'javascript.0.Smarthome.fenster_wohnzimmer', change: 'any'}, function (obj) { if (obj.state.val===true) { setTimeout(function(){ if (obj.state.val===true) { setState('fritzdect.0.Comet_119610277592.mode',1); } }, 60000); } else setState('fritzdect.0.Comet_119610277592.mode',0); }); Und falls du Fenster zusammenfassen möchtest (Wohnzimmer hat bei mir 2 Fenster + Balkontür: //Das Script fasst die Wohnzimmer Fenster zusammen const idSammel = 'javascript.0.Smarthome.fenster_wohnzimmer'; const id1 = 'javascript.0.Smarthome.Fenster.Fenster_1'; // ID von 1\. Meldung const id2 = 'javascript.0.Smarthome.Fenster.Fenster_2'; const id3 = 'javascript.0.Smarthome.Fenster.Fenster_3'; const ids = [id1, id2, id3]; var vals = [getState(id1).val, getState(id2).val, getState(id3).val]; function sammel() { if(vals[0] || vals[1] || vals[2] ) setState(idSammel, true, true); else setState(idSammel, false, true); } on(ids, function(dp) { var pos = ids.indexOf(dp.id); if(pos != -1) { vals[pos] = dp.state.val; sammel(); } else log('Trigger-ID nicht im Array !', 'warn'); });
  • (gelöst) Sonos Lautstärke über Alexa "softer" steuern

    blockly javascript
    8
    0 Votes
    8 Posts
    3k Views
    padrinoP
    Hi, "etwas lauter" sollte auch klappen. ;) Ich denke, es wäre am Besten, wenn man dann die Lautstärke komplett selbst steuert, sprich die Finger ganz von nur "lauter" und "leiser" lässt.. Diese kann man dann ja z.B. durch (obige) "mach..." ersetzen. Eigentlich sind "lauter" und "leiser" ja +/-10% ("+" und "-" am Gerät ergeben +/- 0, 3, 7 - was inzwischen auch die kleinstmöglichen Schritte fürs Einstellen über "volume" sind).. "Pfuscht" man aber darin herum, kommt Alexa etwas aus dem Tritt :nerd_face: Wie z.B. Volume = 23% lauter -> 30% Volume = 27% lauter -> 40% Denke, ich werde mein Skript demnächst dahingehend auch mal überarbeiten... :relieved:
  • Helligkeitsabhängiges Script

    javascript blockly
    19
    0 Votes
    19 Posts
    608 Views
    C
    ihr habt beide Recht - und ich 2 dinge vermischt! ich versuche jetzt beide von Euch vorgeschlagenen Scripte und möchte mich sehr herzlich bedanken! :-)
  • Wake on lan mit vis und button

    javascript
    6
    0 Votes
    6 Posts
    897 Views
    JohGreJ
    Bitte schön on('javascript.1.VIS.wakeOnLan', function (obj) { var wol = require('wake_on_lan'); if ( obj.state.val ) { log('wakeOnLan: ' + obj.state.val) if ( !getState('radar2.0.Synology._here'/*Synology here*/).val) { wol.wake('xx:xx:xx:xx:xx:xx'); } else if (getState('radar2.0.Synology._here'/*Synology here*/).val) { setTimeout(function(){this.shutDownNAS;},10*1000); } setState("javascript.1.VIS.wakeOnLan",false); } }); function shutDownNAS() { var SSH = require('simple-ssh'); var ssh = new SSH({ host: 'ip.ad.re.ss', port: 21, user: 'SSH-User', pass: 'SSH-User Passwort' }); log('shutDownNAS'); ssh.exec('echo "SSH-User Passwort"|sudo -S shutdown -h now').start(); } [image: 1581156394980-a898b978-8a76-481d-99d3-99aa2904a9b9-grafik.png]
  • PS4-Waker NPM Modul, Hilfe benötigt

    javascript blockly
    2
    0 Votes
    2 Posts
    348 Views
    S
    @kimbel55 Habe dir hier geantwortet: https://forum.iobroker.net/topic/13749/gelöst-ps4-waker-npm-modul-von-github-installieren-tv-via-hdmi-cec-einschalten/37

594

Online

32.7k

Users

82.5k

Topics

1.3m

Posts