Skip to content

Skripten / Logik

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

16.5k Themen 213.3k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    A
    @azzkikrboy Hattest du zum Monatswechsel eine Störung? Die Daten werden in der Nacht am 01. des jeweiligen Monats gelöscht, wenn das Skript läuft und nicht gerade gestoppt wurde.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    I
    @peterfido Danke! Das wäre eine weitere Alternative, wenn ich mit dem TadoAdapter am Ende scheitere. Dann würde ich den Weg gehen wollen, das ganze via Matter zu lösen. Hab oben ja schonmal kurz erwähnt, dass ich schon einen Sonoff MG25 Thread Dongle hier liegen habe. Den habe ich allerdings noch nicht geflasht und im PI eingerichtet. Wenn es nur der Batteriestatus ist der fehlt, damit könnte ich leben. Den könnte ich mir ja dann immernoch aus dem TadoAdapter nehmen, wenn ich das möchte
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Themen
    13k Beiträge
    S
    welche Palette hast du installiert, damit du den "AND" Baustein hast?
  • [gelöst] Überwachung im Garten aktivieren

    Verschoben
    21
    0 Stimmen
    21 Beiträge
    5k Aufrufe
    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

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    2k Aufrufe
    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")

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    976 Aufrufe
    S
    Ok, blöder Denkfehler…Danke euch beiden, so funktionierts.
  • Problem im Skript mit Variablen

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    1k Aufrufe
    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

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    3k Aufrufe
    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

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    750 Aufrufe
    Niemand hat geantwortet
  • Funktion scriptübergreifend aufrufen?

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    4k Aufrufe
    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…

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    756 Aufrufe
    etvE
    …gute Idee!! Danke, das macht's dann einfacher! Liebe Grüße Tom
  • Prüfen ob auf einer IP-Adresse etwas gesendet wird

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    761 Aufrufe
    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

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    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?

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    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…

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    3k Aufrufe
    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

    Verschoben
    4
    1
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    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?

    Verschoben
    14
    0 Stimmen
    14 Beiträge
    2k Aufrufe
    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

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    2k Aufrufe
    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

    Verschoben
    6
    0 Stimmen
    6 Beiträge
    5k Aufrufe
    M
    Ja genau ich meinte die Scripte im Javascript Adapter. Was ist mit console.log gemeint? Kann ich Stoppunkte setzten ect.? Michael
  • [gelöst]schedule -> Aufruf alle x Stunden

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    2k Aufrufe
    S
    Prima…funktioniert....vielen Dank :)
  • [Gelöst] Javascript Variablen löschen

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    M
    HAllo ich möchte nun noch die VAriablen Zeitgesteuert zurücksetzen. Ich hab es mal so versucht, aber klappt nicht. In diesem beispiel wollte ich den Zähler um 11:51 Uhr zurücksetzen //Zähler zurücksetzen schedule("51 11 * * *", function () { setState("fritzbox.0.calls.missedCount",0); setState("fritzbox.0.history.allTableHTML"," "); });
  • Wertberechnung für 16-fach-LED-Statusanzeige in Javascript?

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    P
    Hier die oben in der Grafik sichtbaren Widgets. Leider ist der Code 240 Tausend Zeichen lang und deshalb viermal länger, als das Forum erlaubt. [image: 261_led16widgets.txt] Gruß Pix
  • [gelöst] javascript Hilfe gesucht - Fehler "State undefined not found"

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    etvE
    Liebe Leute, sodala - Fehler gefunden - es war eine falsche Klammer beim "on"-Befehl - da war eine zuviel ;) hab dann noch die Tipps von pix benutzt und alles ein wenig optimiert (glaub ich zumindest :D ) anbei das Script - ev. eine Idee für Kollegen hier im Forum. Schöne Grüße Tom ! // ! // USV-Warnungen via Pushbullet - V 1.1 - 10.08.2016 ! // ! // Variablen angelgen ! var id_status_usv_office = "nut.0.ups.status"; ! var id_status_usv_wohn_1 = "nut.1.ups.status"; ! var id_charge_usv_office = "nut.0.battery.charge"; ! var id_charge_usv_wohn_1 = "nut.1.battery.charge"; ! var id_r_time_usv_office = "nut.0.battery.runtime"; ! var id_r_time_usv_wohn_1 = "nut.1.battery.runtime"; ! // Reaktion auf Statusänderungen ! // Büro ! // Stromausfall ! on ({id: id_status_usv_office, val: "OB DISCHRG", oldValNe: "OB DISCHRG"}, function() { ! var ladung_s = getState(id_charge_usv_office).val; ! var restzeit_s = ((getState(id_r_time_usv_office).val)/60).toFixed(0); ! send_message("Stromausfall!","angesprungen.",ladung_s,restzeit_s,"Büro"); ! }); ! // tiefer Ladestand ! on ({id: id_r_time_usv_office, valLe: 600}, function() { ! var ladung_s = getState(id_charge_usv_office).val; ! var restzeit_s = ((getState(id_r_time_usv_office).val)/60).toFixed(0); ! send_message("Ladung kritisch!","noch immer vom Netz getrennt und hat einen kritischen Ladezustand erreicht.",ladung_s,restzeit_s,"Büro"); ! }); ! // Strom wieder retour ! on ({id: id_status_usv_office, val: "OL", oldValNe: "OL"}, function() { ! var ladung_s = getState(id_charge_usv_office).val; ! var restzeit_s = ((getState(id_r_time_usv_office).val)/60).toFixed(0); ! send_message("Strom wieder OK!","wieder ans Netz gegangen.",ladung_s,restzeit_s,"Büro"); ! }); ! // Wohnzimmer ! // Stromausfall ! on ({id: id_status_usv_wohn_1, val: "OB DISCHRG", oldValNe: "OB DISCHRG"}, function() { ! var ladung_s = getState(id_charge_usv_wohn_1).val; ! var restzeit_s = ((getState(id_r_time_usv_wohn_1).val)/60).toFixed(0); ! send_message("Stromausfall!","angesprungen.",ladung_s,restzeit_s,"Wohnzimmer"); ! }); ! // tiefer Ladestand ! on ({id: id_r_time_usv_wohn_1, valLe: 600}, function() { ! var ladung_s = getState(id_charge_usv_wohn_1).val; ! var restzeit_s = ((getState(id_r_time_usv_wohn_1).val)/60).toFixed(0); ! send_message("Ladung kritisch!","noch immer vom Netz getrennt und hat einen kritischen Ladezustand erreicht.",ladung_s,restzeit_s,"Wohnzimmer"); ! }); ! // Strom wieder retour ! on ({id: id_status_usv_wohn_1, val: "OL", oldValNe: "OL"}, function() { ! var ladung_s = getState(id_charge_usv_wohn_1).val; ! var restzeit_s = ((getState(id_r_time_usv_wohn_1).val)/60).toFixed(0); ! send_message("Strom wieder OK!","wieder ans Netz gegangen.",ladung_s,restzeit_s,"Wohnzimmer"); ! }); ! // Send Pushbullet Message ! function send_message(betreff_r,text_r,ladung_r,restzeit_r,raum_r){ ! var jetzt = new Date(); ! var Stunde = (jetzt.getHours()).toString(); ! var Minute = (jetzt.getMinutes()).toString(); ! if (Minute <= 9) { ! Minute = "0" + Minute; ! } ! sendTo("pushbullet",{ ! message: "Die USV im " + raum_r + " ist kurz vor " + Stunde + ":" + Minute +" Uhr " + text_r + " Die aktuelle Ladunge beträgt " + ladung_r + "% und die Restlaufzeit beträgt " + restzeit_r + " Minuten.", ! title: betreff_r, ! type: "note", ! receiver: "Thomas.Exel@gmail.com" ! }) ! }

403

Online

32.6k

Benutzer

82.2k

Themen

1.3m

Beiträge