Skip to content

Skripten / Logik

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

16.5k Topics 213.4k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    P
    @ArnoD sagte in E3DC Hauskraftwerk steuern: @azzkikrboy Hierfür brauchst du den Adapter ‚Energiefluss-erweitert‘. Damit lässt sich der Energiefluss richtig schick grafisch darstellen. Die Konfiguration ist zwar etwas zeitaufwendig, aber die Mühe lohnt sich definitiv für das Design! ;) [image: 1770554279240-video-project.gif] Sieht sehr gut aus, hab ich bei mir auch mal ausprobiert. Leider funktioniert das nicht mit der Android VIS-App. Lösung wäre nur der Kiosk Browser aber das ist mir zu umständlich. Schade :-(
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    L
    Ja, sollte gehen.
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Topics
    13k Posts
    Marc BergM
    Es gibt in der Verson 1.3.0 einen neuen Node: iob-setObject (Stand 10.02.26 noch beta) Mit dem neuen Node kann man ioBroker-Objektdefinitionen (Metadaten) direkt schreiben und ändern. Hauptfunktionen: Instanz-Konfigurationen ändern - z.B. MQTT publish-Pattern, Intervalle, etc. Objekt-Eigenschaften aktualisieren - Namen, Rollen, Einheiten, Min/Max-Werte ändern es gibt zwei Modi: Merge-Modus : Ändert nur die angegebenen Eigenschaften, alle anderen bleiben erhalten Replace-Modus: Überschreibt das komplette Objekt Typischer Workflow: Objekt mit iob-getobject holen Mit Change-Node gewünschte Properties ändern Mit iob-setobject zurückschreiben
  • [Skript] Philips TV steuern

    Moved
    14
    0 Votes
    14 Posts
    7k Views
    AlCalzoneA
    => http://forum.iobroker.net/viewtopic.php?f=36&t=9299 Tester willkommen!
  • In welchem Script wird Schalter genutzt

    Moved
    4
    0 Votes
    4 Posts
    646 Views
    OstfrieseUnterwegsO
    Ich hatte mal vor langer Zeit einen Erweiterungswunsch in Jira eingestellt. Ich hätte gerne die Möglichkeit bei jedem Objekt einfach feststellen zu können wo es benutzt wird. Also welche Subscriptions es gibt, ob es in irgendwelchen Scenes drin ist, Enums, Scripte usw. Ich weiß aber nicht, ob das irgendwie in Trello übertragen wurde.
  • [UMFRAGE] Wie organisiert ihr eure Skripts?

    Moved
    4
    0 Votes
    4 Posts
    785 Views
    P
    Hallo, ich lass mal einen Screenshot sprechen: [image: 261_bildschirmfoto_2017-11-26_um_02.15.08.jpg] Es gibt Skripte, die nur eine kleine Sache erledigen und es gibt ganz komplexe Skripte, die zB via RegExp mehrere Objekte überwachen. Ich mag schon gern diese komplexen Dinger, die mit RegExp zB alle LOWBAT Datenpunkte oder so überwachen und gleich automatisch die richtigen Logs auswerfen. Leider sind die sehr schwer zu lesen und benötigen oft so viele Kommentar- und Erklärtextzeilen, dass man auch gleich einfachen Code auf mehrere Skripte verteilen könnte. Es gibt also alle Variationen (nach Raum, nach Gewerk, nach Funktion, …). Chaos mit System eben :lol: Pix
  • [gelöst] ioBroker Werte werden nicht in Scripte übernommen

    Moved
    5
    3
    0 Votes
    5 Posts
    740 Views
    L
    Hallo zusammen, erstmal danke für die Antworten. Ich habe mir das Ganze nochmal angeschaut, da der Fehler doch noch da zu sein schien. Es war am Ende aber ganz trivial… Ich Idiot habe auf die falschen Objektpunkte getriggert und in einem anderen Script einen Fehler in meiner Berechnung gehabt. Beides zusammen hat mich dann glauben lassen, dass in Skripten die Werte aus dem Objektbaum nicht berücksichtigt werden. Ich habe jetzt auch die Scripte nach meinen Vorstellungen sortiert, ohne Probleme. Gruß Larry
  • Probleme mit Astro-Funktion

    Moved
    10
    0 Votes
    10 Posts
    3k Views
    S
    Hi! In dem ersten Beitrag hatte ich dieses Skript schon mal angeführt. Insgesamt sieht es bei mir so aus: schedule({astro: "sunset", shift: 0}, function () { setState("hm-rpc.0.XXX.1.STATE", true); //Lichtschlauch am Spieltrum setState("hm-rpc.0.XXX.1.STATE", true); //Lichtschläuche an der Magnolie log('Abenddämmerung - Außenbeleuchtung wird eingeschaltet'); sendTo("system.adapter.pushover.0",'Abenddämmerung - Außenbeleuchtung wird eingeschaltet'); }); Das andere Skript speichert inzwischen sauber die Zeiten in die angelegte Variablen. Aber dieses hier löst nicht aus. Habe zum Testen das pushover aktiviert.
  • Konvertierung von Werten

    Moved
    2
    0 Votes
    2 Posts
    1k Views
    R
    Hier mal ein Beispiel: [image: 2216_berechnen.jpg] Für "steuere Objekt" musst du noch ein Objekt anlegen. Dann bei der Berechnung das gleiche Objekt auswählen (bei dir LEVEL) wie im Trigger. Danach wird dann bei jeder Änderung des Ursprungsobjektes die Berechnung ausgeführt. Was ich jetzt nicht weiß, wie das bei Javaskript mit Punkt- und Strichrechnung ist. Musst du dir ausprobieren. :D Enrico
  • 0 Votes
    14 Posts
    3k Views
    N
    Danke, ich wollte auch nur sicher sein. Nur nicht, dass es Grundsaetzlich anders sein soll, ich gewoehne mir das an, und hinterher wundere ich mich, warum die Haelfte nicht funktioniert oder sowas. Administration ist mir nicht fremd, aber Programmieren ist einfach doch sehr neu fuer mich, da will ich nicht gleich bei den grundsaetzlichen Sachen mir Fehler angewoehnen…
  • Anfänger Frage: Wie ein bash script mit Alexa verbinden?

    Moved
    3
    0 Votes
    3 Posts
    623 Views
    DutchmanD
    @NyanCat: So, falls jemand anders noch das Problem haben sollte, ich habs geschafft. Habe mit Blocky jetzt erst mal einen testscript zusammengestellt. (siehe Bild) Bitte sagen, falls jemand da noch ne elegantere Lösung kennt. Danke und Grüße. ` Sieht schon ok aus so, mit anderen Worten: abhängig von der Variable schickst du das nötige Kommando per Konsolen Befehl –----------------------- Send from mobile device
  • Rollladen Script mit Sunrise/Sunset und zusätzlicher Bedingung

    Moved
    5
    1
    0 Votes
    5 Posts
    3k Views
    L
    mensch was eine komplexe logik, aber ich habs verstanden mit deiner Hilfe, Danke! :) naja eigentlich nicht komplex, aber da muss man erstmal drauf kommen wenn man das nicht tag für tag programmiert :) Ich habs mal versucht selbst um die abendliche Funktion zu erweitern! Habs jetzt so mal ans Laufen gebracht und bin gespannt obs klappt :) // Datenpunkt-IDs const idAuto = 'Dummyschalter.0.Automation.Rolloautomatik'; // Dummyschalter für Rolladenautomatik const idWinter = 'Dummyschalter.0.Automation.Rollo_winter'; // Dummyschalter für Winterbetrieb const idWinterRauf = 'scene.0.Rollo_hoch'; // Szene Rolladen rauf im Winter const idSommerRauf = 'scene.0.Rollo_hoch'; // Szene Rolladen rauf im Sommer const idWinterZu = 'scene.0.Rollo_winter_runter'; // Szene Rolladen runter im Winter const idSommerZu = 'scene.0.Rollo_sommer_runter'; // Szene Rolladen runter im Sommer // Variablen werden bei Skriptstart initialisiert var auto = getState(idAuto).val; var winter = getState(idWinter).val; var tag = isAstroDay(); var morgens = compareTime('6:30', '8:00', 'between'); var abends = compareTime('17:00', '21:50', 'between'); function Rollosrauf() { if(auto) { if(winter) setState(idWinterRauf, true); else setState(idSommerRauf, true); } } function Rollosrunter() { if(auto) { if(winter) setState(idWinterZu, true); else setState(idSommerZu, true); } } schedule('30 6 * * *', function() { morgens = true; if(tag) Rollosrauf(); }); schedule('0 8 * * *', function() { morgens = false; if(!tag) Rollosrauf(); }); schedule('0 17 * * *', function() { abends = true; if(!tag) Rollosrunter(); }); schedule('50 21 * * *', function() { abends = false; if(tag) Rollosrunter(); }); schedule({astro: 'sunrise'}, function () { tag = true; if(morgens) Rollosrauf(); }); schedule({astro: 'sunset'}, function () { tag = false; if(abends) Rollosrunter(); }); on(idAuto, function(dp) { auto = dp.state.val; }); on(idWinter, function(dp) { winter = dp.state.val; });
  • [ VORLAGE ] Nächste X Termine anzeigen

    Moved
    1
    0 Votes
    1 Posts
    996 Views
    No one has replied
  • Schleifen und Timeouts

    Moved
    3
    1
    0 Votes
    3 Posts
    590 Views
    AlCalzoneA
    Im Prinzip kannst du das fast so machen wie du geschrieben hast - aber die Schleife ist humbug. Aktuell schaltest du nach 2 Minuten die Lampe 6x aus und beendest das Intervall sofort. Stattdessen brauchst du eine Variable, die du vor dem 2-Minuten-Intervall auf 0 setzt und in jedem Intervalldurchlauf um 1 erhöhst. Ist diese gleich 6, Licht ausschalten und Intervall beenden. Oder du benutzt Dutch's Vorschlag: Funktion "Licht aus" (damit du den Schaltvorgang nur 1x definieren musst) Timer A mit 2 Minuten Verzögerung => "Licht aus" aufrufen, Timer B stoppen. Timer B mit 12 Minuten Verzögerung => "Licht aus" aufrufen. Bei Trigger: Wenn Timer laufen, diese stoppen. Dann Timer A/B starten.
  • Frage zu JS Code (Neuling kenn sich noch nicht so aus)

    Moved
    21
    0 Votes
    21 Posts
    2k Views
    P
    Hallo, hab das mal schnell im Online-Editor geschrieben. Das sollte auch gehen und nutzt RegExp. Als Beispiel und Denkanstoß debug kann man weglassen (natürlich dann auch die Logzeile) Einzeilige Kommentare mit // beginnen, mehrzeilige Kommentare in /* und */ einschließen Hinweis: in der if-Abfrage ist das Ausrufezeichen genutzt. Das ist die Kurzschreibweise für die Abfrage auf false. Grundsätzlich gilt ja: wenn mindestens ein Gerät auf true, dann anwesend. Wenn alle Geräte auf false, dann abwesend. /* Andrea und Christian Handy auf Anwesenheit prüfen Regexp auf radar.0.Christian_Tablet.here und radar.0.Andrea_Handy.here */ var debug = true; // Bei Änderung on(/^radar\.[0-9]\.*here$/, function (obj) { // Triggert bei Wertänderung if (debug) log('Anwesenheitserkennung: ' + obj.common.name + ' auf ' + obj.state.val + ' gesetzt ' >; if (obj.state.val) setState("hm-rega.0.950", true); // wenn ein Trigger true, dann anwesend else { if (!getState('radar.0.Andrea_Handy.here').val && !getState('radar.0.Christian_Tablet.here').val) setState("hm-rega.0.950", false); // wenn jetzt beide false dann abwesend } }); // bei Skriptstart if (getState('radar.0.Andrea_Handy.here').val || getState('radar.0.Christian_Tablet.here').val) setState("hm-rega.0.950", true); else setState("hm-rega.0.950", false); Ach, mit der Vorschau Funktion im Forum-Editor kann man den Text nochmal prüfen und ggf. Schreibfehler finden :-D Gruß Pix
  • [Script] Abfrage Wertänderung ?

    Moved
    7
    0 Votes
    7 Posts
    807 Views
    C
    Ah jetzt ja :) Dann passt das doch und ich brauche einfach ein zweites was dann beim ausschalten triggert also wenn die watt absinken. Danke! LG Michael
  • [FRAGE] Balkengrafik mit javascript über simple-api

    Moved
    1
    0 Votes
    1 Posts
    464 Views
    No one has replied
  • Bri Wert bei Philips Hue

    Moved
    6
    1
    0 Votes
    6 Posts
    1k Views
    M
    Guten Morgen, dank der vorangegangenen Hinweise konnte ich feststellen das es etwas mit den Variablen zu tun hat. Im Vorsystem habe ich zu besseren Erkennbarkeit die Variablen auf ein deutsches: ein und aus umgestellt. Diese Variablen werden als String über mqtt versendet. Ich sehe dass auch so unter Objekte (siehe Anhang). Mein Script sieht derzeit so aus wie im 2ten Bild im Anhang, aber es läuft nicht, nur die Fehlermeldung kommt. Ist da noch was im MQTT-Teil verkehrt? Ich tappe völlig im dunkeln! Danke für Eure Zeit! Gruß Marko 4195_mqtt-hue_3.jpg 4195_mqtt-hue_4.jpg
  • Farbe aus einen Bild auslesen

    Moved
    9
    0 Votes
    9 Posts
    2k Views
    T
    …Danke euch beiden. Beides sehr hilfreich! ! ```` ! var Jimp = require("jimp"); var pixel; var RGB; var pixel_rgb; var red_value; var green_value; var blue_value; ! //Return as RGB ;-) //######################################## Jimp.read("E:/test.jpg", function (err, image) { pixel = image.getPixelColor(100,100); RGB = Jimp.intToRGBA(pixel); pixel_rgb = JSON.stringify(RGB); red_value = RGB['r']; green_value = RGB['g']; blue_value = RGB['b']; console.log(pixel_rgb); console.log(red_value); console.log(green_value); console.log(blue_value); //Return as HEX //######################################## function padStart(source, targetLength,padString) { targetLength = targetLength>>0; //floor if number or convert non-number to 0; padString = String(padString || ' '); if (source.length > targetLength) { return source; } else { targetLength = targetLength - source.length; if (targetLength > padString.length) { padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed } return padString.slice(0,targetLength) + String(source); } } ! console.log('#' + padStart(pixel.toString(16), 8)); }); ! ```` …..wenn es noch jemand benötigt! Grüße, Torsten
  • [Gelöst] Fragen zu Blockly

    Moved
    67
    1
    0 Votes
    67 Posts
    9k Views
    S
    @rantanplan: Schau mal hier für Ideen. http://forum.iobroker.net/viewtopic.php … 4&start=20 Grüße ` Danke den Tipp. Damit hast Du mir weitergeholfen. Habe jetzt die Woche abends das Bewässerungsprogramm fertiggestellt. Bei über 15 Grad wird jetzt 3 Tage die Woche bewässert in Abhängigkeit der Regenmenge und der Menge die durch die Bewässerung in den Boden kommt. Ein Riesenskript. :D Danke nochmal. Grüße, Stefan
  • [gelöst] JavaScript: gesetzte setStateDelayed abfragen

    Moved
    23
    0 Votes
    23 Posts
    5k Views
    htreckslerH
    Damit, also mit dem Verstehen des "ack" tu ich mich echt verdammt schwer. Vielleicht kann mir das jemand anhand eines Beispiels erklären? Was ich bisher glaube/vermute Ich setze über ein Script, sagen wir mal, einen Schalter der CCU auf true. In dem Moment ist ack = false. Wenn die CCU den Befehl jetzt bestätigt setzt die CCU den Wert auf ack=true. Daran könnte ich dann erkennen das der Befehl erfolgreich war. Ist das so?
  • [gelöst]Datum in Backupskript

    Moved
    2
    0 Votes
    2 Posts
    462 Views
    K
    Google konnte mir dann doch weiterhelfen #Datum definieren datum=`date +%Y_%m_%d` #Backup kopieren scp /opt/iobroker/backups/$datum* admin@192.168.1.11:xxxxxxx/xxxxxxx/xxxxxx
  • [Problem] Berechnungen mit Variablen, warum klappt das nicht?

    Moved
    24
    0 Votes
    24 Posts
    4k Views
    AlCalzoneA
    @Homoran: Und ein Einsteiger erwartet natürlich, dass Arbeitsschritte nacheinander abgearbeitet werden und man im dritten Schritt auf das Ergebnis vom ersten Schritt zugreifen kann. ` Die Erwartung kann ich nachvollziehen. Dennoch (und das sollte Einsteigern verständlich gemacht werden) sollten States nicht als Variablenersatz gesehen werden, da der Rattenschwanz dahinter zu groß ist (DB-Aktualisierung, mögliche UI-Aktualisierung, Skript-Trigger, etc…). Das erwartete Verhalten, das du beschreibst, ist mit Skript-Variablen gegeben. Dafür sind sie da und dafür sollten sie benutzt werden. Das hat nichts mit "nicht schön" zu tun. Zwischenergebnisse von Rechnungen sollten in Variablen landen, nicht in States. States sind gedacht für etwas langlebigere Werte mit Bedeutung. Jedes System hat Grenzen innerhalb derer man arbeiten soll/muss. Klare Regeln wie States sind für Eingabewerte (wie Sensordaten) und Endergebnisse von Berechnungen Variablen sind für Zwischenwerte verstehen auch Anfänger, wenn man es entsprechend kommuniziert. Das ursprüngliche Problem vom TE ist für mit von der Kategorie "Bist du dir sicher, dass du das wirklich machen willst? Ich glaube nicht!"

437

Online

32.6k

Users

82.3k

Topics

1.3m

Posts