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
  • Thermostate HM-CC-RT-DM in Party/Urlaubsmode setzen

    Moved
    4
    0 Votes
    4 Posts
    2k Views
    D
    Hi ehome, gegen das Problem mit dem zu schnell senden habe ich folgende Lösung mit setStateDelayed irgendwann mal hier im Forum gefunden. Ich benutze es zum Beispiel um alle Lichter auszuschalten … var idx = 0; /* Index-Zähler */ var interval = 300; /* 300ms Abstand */ $('channel[state.id=*.STATE](functions=Beleuchtung)').each(function (id, i) { var obj = getObject(id); if (getState(id).val){ setStateDelayed(id, false, (idx++) * interval); /* Zähler erhöhen, mit Interval multipliziert */ log('switch off: ' + obj.common.name); } }); Habe noch etwas gefunden wegen dem Party-Mode im https://forum.homegear.eu/viewtopic.php?t=115#p736 ` > Es macht gegenüber den einzelnen Party-Mode-Variablen auf jeden Fall Sinn, PARTY_MODE_SUBMIT zu verwenden, weil dann nur ein einziges Paket an den Stellantrieb gesendet werden muss. An PARTY_MODE_SUBMIT übergibst du einen String mit folgenden kommagetrennten Elementen: Partytemperatur (z. B. 21.5 - nicht mit Komma schreiben) Start-Uhrzeit in Minuten seit 0 Uhr mit einer Auflösung von 30 Minuten (also zum Beispiel 1020 für 17 Uhr) Starttag (z. B. 21) Startmonat (z. B. 5) Letzte zwei Ziffern des Startjahres (z. B. 14 für 2014) End-Uhrzeit in Minuten seit 0 Uhr wieder mit einer Auflösung von 30 Minuten (z. B. 1380 für 23 Uhr) Endtag Endmonat Letzte zwei Ziffern des Endjahres ` Gruß Philippe
  • Push mit WindowsPhone + Toasty

    Moved
    1
    0 Votes
    1 Posts
    588 Views
    No one has replied
  • Widget CAM/Video Object Dialog

    Moved
    2
    0 Votes
    2 Posts
    823 Views
    andreA
    Da schließe ich mich mal an… Habe es derzeit anders gelöst. Nutze für meinen Livestream das HTML Widget welches über meinen anderen Wigets liegt und steuere das mit der Sichtbarkeit. Funktioniert soweit ganz gut. Nur im Editor muss ich es halt immer verschieben wenn ich an die Widgets darunter möchte. Hier greift ja logischer Weise die Sichtbarkeit nicht. :) MfG, Andre PS: Das gleiche Verfahren nutze ich auch beim Callmonitor und bei den Wetterwarnungen :) Geschrieben mit Tapatalk
  • [gelöst] Rollo Script / Wie kann ich das Script kürzen?

    Moved
    3
    0 Votes
    3 Posts
    951 Views
    M
    Danke funktioniert super.
  • [gelöst] Überwachung im Garten aktivieren

    Moved
    21
    0 Votes
    21 Posts
    5k Views
    N
    @mike2712: Hallo, der Haken war gesetzt, aber mit == TRUE funktioniert das.Wenn ich EG Flur schalte, kommt, schaltet OG1 Flur jetzt wollte ich ein Vergleicher mit hinzu nehmen, wie muss den dann der Switch konfiguriert werden wenn z.B Licht Schlafen bei 30% das OG1 Flur Licht geschaltet werden soll ? ` Ich gehe mal davon aus, dass der Vergleich im Switch-Node nicht das tut, was er soll. Es gibt in Javascript unterschiedliche Operatoren für Vergleiche. == z.B. überprüft nur den Wert, nicht aber den Datentyp. Falls möglich wird der Datentyp für den Vergleich implizit konvertiert. Mit === wird auch der Datentyp mit überprüft. Wenn einer der Werte eine Zeichenkette ist wird bei == eigentlich immer der andere auch in eine Zeichenkette konvertiert und dann diese verglichen. Man Gibt im Switch-Node den Datentyp auch an: [image: 632_example.png] Wenn du nun nicht auf Gleichheit sondern z.B. auf größer oder kleiner prüfen möchtest geht das so nicht, da dieser bei Zeichenketten nicht das gewünschte Ergebnis haben wird. Die einfachste Lösung ist, den Haken einfach weg zu machen. Dann kommt der Level-Wert direkt als Zahl und man kann dann mit Zahlen vergleichen. Ansonsten müsste man den String zuerst in einem Function-Node erst mittels Javascript in eine Zahl umwandeln.
  • SetStateDelayed funktioniert nicht

    Moved
    11
    0 Votes
    11 Posts
    2k Views
    Z
    Sorry für die späte Antwort, aber war in Urlaub und habe irgendwie versucht das Problem zu analysieren. War etwas schwierig da es manchmal geht und manchmal nicht. Letzendlich habe ich jetzt herausgefunden das die Ursache für mein Problem in einem request(url) Kommando liegt. Hier sollte ein JSON Befehl an einen PC gesendet werden auf dem XBMC läuft und die Musik stoppen. Wenn der PC an ist. Funktioniert das setStateDelayed. Wenn er aus ist, geht es nicht. Keine Ahnung warum das so ist. Aber seit dem ich die dementsprechenden Zeilen auskommentiert habe, geht es immer. Hier das jetzt momentan gültige Script /* Programm Abwesend Kurz Ablösen des CCU2 Programms Mit Hilfe von Jey Cee, Pix und Paul53 */ // Abfrage der Abwesenheit Kurz: var idAbwesendKurzVariable = 'hm-rega.0.2330'; // System Variable CCU2 Abwesend Kurz var idAnwesenheit = getState('hm-rega.0.950').val; // zur besseren Übersicht Anwesenheit in eine lokale Variable geschrieben var idBalkonTuer = getState("hm-rpc.0.MEQ0816190.1.STATE").val; //Türkontakt Balkontür.STATE var idBewegungsmelder = 'hm-rega.0.18930'; // lange, ausführliche Schreibweise on({ id: idAbwesendKurzVariable, // Datenpunkt der Überwachung change: 'ne' // auf Änderung }, function (obj1) { // den neuen Wert der Änderung checken if (obj1.state.val === true) { // wenn neuer Wert true // aktuelle Abfrage der zweiten Variable - also nur prüfen if (idAnwesenheit === true) { // wenn Anwesenheit auch wahr ist if (idBalkonTuer === false) { // wenn Balkontür ist zu starteAktion(); // Funktion aufrufen } else { starteAktion1(); }} } }); // Ausführung function starteAktion() { // Definiere Variablen // var url ='http://192.168.33.212:8081/jsonrpc?request={%22jsonrpc%22:%222.0%22,%22method%22:%22Player.Stop%22,%22params%22:{%22playerid%22:%200},%22id%22:1}}}'; // Aspire Musik Aus // Aktionen setState("hm-rpc.0.MEQ0484756.1.STATE", false); // Taster Deckenlicht Arbeitszimmer setState("hm-rpc.0.KEQ0025668.1.STATE", false); // Red Bull Kühlschrank Licht.STATE setState("hm-rpc.0.KEQ0196838.1.STATE", false); // Schlafzimmer Deckenlampe.STATE setState("hm-rpc.1.CUX4000002.2.PRESS_LONG", true); // (Gruppe) Deko Licht An/Aus.PRESS_LONG setState("hm-rpc.1.CUX4000002.10.PRESS_SHORT", true); // (Gruppe) Dimmer (Diele, Essbereich, Küche, Esstisc.PRESS_SHORT setState("hm-rpc.1.CUX4000002.1.PRESS_LONG", true); // (Gruppe) Steckdosenleiste 1+2 An/Aus.PRESS_LONG setState("hm-rpc.0.KEQ0964652.1.STATE", false); // Stehlampe Wohnzimmer Tür.STATE setState("hm-rpc.0.KEQ0196897.1.STATE", false); // Nachttischlampe1 Schlafzimmer.STATE setState("hm-rpc.0.JEQ0740381.1.LEVEL", 0); // Dimmer Bad Einbaustrahler.LEVEL setState("hm-rpc.0.LEQ0187095.1.LEVEL", 0); // Dimmer Bad LED-Stripe Spiegel.LEVEL setState("hm-rpc.0.KEQ0926570.2.STATE", false); // Springbrunnen.STATE setState("hm-rpc.0.KEQ0926589.1.STATE", false); // Lichtschlauch Balkon.STATE setState("hm-rpc.0.KEQ0926589.2.STATE", false); // Teichlicht.STATE setState("hm-rpc.0.MEQ1739011.1.STATE", false); // LED-Unterschrank weiß (16A).STATE setState("hm-rpc.1.CUX4000001.6.PRESS_SHORT", true); // Lenovo-Q180 Standby.PRESS_SHORT setState("hm-rpc.0.LEQ0236668.1.STATE", false); // Duftnebler Bad.STATE setState("hm-rpc.0.MEQ1711639.1.STATE", false); //Balkon (Kugelnlampen):1.STATE setState("hm-rpc.0.KEQ0926570.2.STATE", false); //Balkon (BlumenRGB-Stripe):1.STATE setState("hm-rpc.0.NEQ0132493.1.STATE", false); //Taster Balkonlicht.STATE setState("hm-rpc.0.MEQ1711639.2.STATE", false); //Balkon (LED-Stripe):2.STATE*/) setState("hm-rega.0.18930", false); // Bewegungsmelder aktiv ist falsch setState("hm-rega.0.42725", true); // Automatik Lichthelligkeit An/Aus setState("hm-rpc.0.NEQ0018993.2.SUBMIT","0.7,1,108000,20"); // MP3 Funkgong // verzögerte Aktionen einfügen setStateDelayed(idBewegungsmelder, true, 300000, true, function() {log('Bewegungsmelder Aktiv'); // Bewegungsmelder nach 5 Min aktiv setzen }); setStateDelayed("hm-rega.0.56542", false, 2000); // Lichthelligkeit Anzeige Aus Trigger nach 2 Sekunden setStateDelayed("hm-rpc.1.CUX4000001.11.PRESS_SHORT", true, 5000); // PCs Aus/WoL:11.PRESS_SHORT Aspire Standbye nach 5 Sekunden // request = require('request'), // request(url); } function starteAktion1() { // Definiere Variablen // var url ='http://192.168.33.212:8081/jsonrpc?request={%22jsonrpc%22:%222.0%22,%22method%22:%22Player.Stop%22,%22params%22:{%22playerid%22:%200},%22id%22:1}}}'; // Aspire Musik Aus // Aktionen setState("hm-rpc.0.MEQ0484756.1.STATE", false); // Taster Deckenlicht Arbeitszimmer setState("hm-rpc.0.KEQ0025668.1.STATE", false); // Red Bull Kühlschrank Licht.STATE setState("hm-rpc.0.KEQ0196838.1.STATE", false); // Schlafzimmer Deckenlampe.STATE setState("hm-rpc.1.CUX4000002.2.PRESS_LONG", true); // (Gruppe) Deko Licht An/Aus.PRESS_LONG setState("hm-rpc.1.CUX4000002.10.PRESS_SHORT", true); // (Gruppe) Dimmer (Diele, Essbereich, Küche, Esstisc.PRESS_SHORT setState("hm-rpc.1.CUX4000002.1.PRESS_LONG", true); // (Gruppe) Steckdosenleiste 1+2 An/Aus.PRESS_LONG setState("hm-rpc.0.KEQ0964652.1.STATE", false); // Stehlampe Wohnzimmer Tür.STATE setState("hm-rpc.0.KEQ0196897.1.STATE", false); // Nachttischlampe1 Schlafzimmer.STATE setState("hm-rpc.0.JEQ0740381.1.LEVEL", 0); // Dimmer Bad Einbaustrahler.LEVEL setState("hm-rpc.0.LEQ0187095.1.LEVEL", 0); // Dimmer Bad LED-Stripe Spiegel.LEVEL setState("hm-rpc.0.KEQ0926570.2.STATE", false); // Springbrunnen.STATE setState("hm-rpc.0.KEQ0926589.1.STATE", false); // Lichtschlauch Balkon.STATE setState("hm-rpc.0.KEQ0926589.2.STATE", false); // Teichlicht.STATE setState("hm-rpc.0.MEQ1739011.1.STATE", false); // LED-Unterschrank weiß (16A).STATE setState("hm-rpc.1.CUX4000001.6.PRESS_SHORT", true); // Lenovo-Q180 Standby.PRESS_SHORT setState("hm-rpc.0.LEQ0236668.1.STATE", false); // Duftnebler Bad.STATE setState("hm-rpc.0.MEQ1711639.1.STATE", false); //Balkon (Kugelnlampen):1.STATE setState("hm-rpc.0.NEQ0132493.1.STATE", false); //Taster Balkonlicht.STATE setState("hm-rpc.0.MEQ1711639.2.STATE", false); //Balkon (LED-Stripe):2.STATE*/) setState("hm-rega.0.18930", false); // Bewegungsmelder aktiv ist falsch setState("hm-rega.0.42725", true); // Automatik Lichthelligkeit An/Aus setState("hm-rpc.0.NEQ0018993.2.SUBMIT","0.7,1,108000, 16, 20"); // MP3 Funkgong // verzögerte Aktionen einfügen setStateDelayed(idBewegungsmelder, true, 300000, true, function() {log('Bewegungsmelder Aktiv'); // Bewegungsmelder nach 5 Min aktiv setzen }); setStateDelayed("hm-rega.0.56542", false, 2000); // Lichthelligkeit Anzeige Aus Trigger nach 2 Sekunden setStateDelayed("hm-rpc.1.CUX4000001.11.PRESS_SHORT", true, 5000); // PCs Aus/WoL:11.PRESS_SHORT Aspire Standbye nach 5 Sekunden // request = require('request'), // request(url); } Vielleicht hat ja jemand eine Idee warum sich das so verhält. Dann weiß ich zumindest beim nächsten mal wie ich das umgehen kann. Danke Gruß Zippolighter
  • [gelöst]formatDate(obj.newState.ts - obj.oldState.ts, "ss")

    Moved
    4
    0 Votes
    4 Posts
    977 Views
    S
    Ok, blöder Denkfehler…Danke euch beiden, so funktionierts.
  • Problem im Skript mit Variablen

    Moved
    7
    0 Votes
    7 Posts
    1k Views
    BluefoxB
    @erh_stgt: Ich hab den Hinweis auf den State erst nicht verstanden - dann aber kapiert was gemeint war. was ich nicht verstehe - warum ist das Ergebnis 4 wenn ich bei getState mit *1 multipliziere - aber 31 wenn ich nicht mit *1 multipliziere. ` "3" + 1 = "31" "3" * 1 = 3 "3" * 1 + 1 = 4 Weil deine Variable String ist. Ganz richtig ist: BewDauerKorr = parseFloat(getState("vis.0.Bewaesserungsdauer").val) + 1;
  • [gelöst] Radio Lautstärke per Widget und Javascript steuern

    Moved
    5
    0 Votes
    5 Posts
    3k Views
    P
    Schön, dass ich helfen konnte. Die Fehler im Skript kommen leider eben daher, dass ich es nicht ausprobiert habe. Ist praktisch der erste Blitz, der mir durch den Kopf schoss. Natürlich summiert sich die Variable auf, das hast du genau richtig gelöst. Try & Catch sollten nur verhindern, dass gleich die ganze Instanz abschmiert, wenn mit der Adresse oder der Erreichbarkeit des Radios was nicht stimmt. Gruß Pix
  • Eigenschaften eines Widget per Script ändern

    Moved
    1
    0 Votes
    1 Posts
    750 Views
    No one has replied
  • Funktion scriptübergreifend aufrufen?

    Moved
    4
    0 Votes
    4 Posts
    4k Views
    S
    Danke Hermann, der Trick mit dem "global" war's :) Und vielen Dank an pix, der Fehler ist mir noch gar nicht aufgefallen! :)
  • Timer in Scipt einbauen…

    Moved
    3
    0 Votes
    3 Posts
    756 Views
    etvE
    …gute Idee!! Danke, das macht's dann einfacher! Liebe Grüße Tom
  • Prüfen ob auf einer IP-Adresse etwas gesendet wird

    Moved
    4
    0 Votes
    4 Posts
    761 Views
    ThisoftT
    Also pcap gibt's auch für Windows - heißt dann WinPCAP https://www.winpcap.org/install/default.htm
  • [gelöst]Roomba xml oder json Datei auslesen und auswerten

    Moved
    5
    0 Votes
    5 Posts
    1k Views
    coyoteC
    Danke Dir Pix, das sieht sehr gut aus, damit kann ich arbeiten. Genau so hatte ich mir das vorgestellt.
  • Auslösen bei Level aus einer Variablen?

    Moved
    4
    0 Votes
    4 Posts
    1k Views
    P
    Jetzt verstehe ich, was du meinst. Und das wird schwer :roll: Alternativ geht es so: Du erzeugst eine zusätzliche Variable, die nach dem Verursacher der Rollladenbewegung gesetzt wird. Ähnlich einer Ereignisliste "Letzte Bewegung erzeugt durch Beschattung (Uhrzeit). Ist-Level: 30%, Tagszeitsoll: 100%" Gruß Pix
  • IPad und Script Editor…

    Moved
    11
    0 Votes
    11 Posts
    3k Views
    S
    Hallo zusammen und Danke für Eure Meinungen. Nur um das klarzustellen, mit diesem Fred ging es mir nicht um den Sinn oder Unsinn mit dem iPad eine View zu erstellen. Das ist sicher auf einem Pc mit Maus und Tastatur effektiver! Es geht mir um die schlechte Unterstützung des iPad im Script Editor des Javascript-Adapters! Der "Rest" von iobroker ist m.M. gut mit dem iPad zu bedienen, nur irgendwie hakt es im besagten Editor. Lg
  • [Gelöst] [Frage] Scripten mit Blockly

    Moved
    4
    1
    0 Votes
    4 Posts
    2k Views
    apollon77A
    Prüfe -> (A=B) Falls wahr -> Text "passt" oder 1 oder "WeRt von Objekt X" Fallls unwahr -> Text "doch nicht" oder 1 oder "WeRt von Objekt X" und du dockst das dort an wo du den Wert weiterverarbeiten willst. Falls das nicht reicht muss ich Screenshots machen und Bilder schnippeln :)
  • Wert aus Unterfunktion übergeben?

    Moved
    14
    0 Votes
    14 Posts
    2k Views
    paul53P
    @roland: Wie kann ich in dem sendto Befehl Parameter für die Callbackfunktion übergeben? ` :?: @roland: Wenn das Programm wie oben, gestartet wird, wird die Funktion SQLAbfrage nicht nach 5,10 und 15 s gestartet, sondern alle 3 nach 5 s. ` Ja, gleiche Verzögerung = gleiche Ausführungszeit. In meinem Vorschlag oben hatte ich deshalb auch unterschiedliche Verzögerungszeiten angegeben. setTimeout(function() {SQLAbfrage(id,h);}, 5000); setTimeout() startet einen Timer und übergibt diesem die Referenz und die Parameter zur callback-Funktion SQLAbfrage(id,h), die nach Ablauf der Verzögerungszeit ausgeführt werden soll.
  • [gelöst] script mit 2 Auslösern

    Moved
    7
    0 Votes
    7 Posts
    2k Views
    L
    Morgen, Gestern Abend gleich probiert und es funktioniert wie es soll :D :D So langsam versteht man immer mehr beim Scripten. Vielen lieben Dank an euch zwei. 8-) Gruß Sven
  • DEBUG in Scripten

    Moved
    6
    0 Votes
    6 Posts
    5k Views
    M
    Ja genau ich meinte die Scripte im Javascript Adapter. Was ist mit console.log gemeint? Kann ich Stoppunkte setzten ect.? Michael

438

Online

32.6k

Users

82.3k

Topics

1.3m

Posts