Skip to content

Skripten / Logik

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

16.5k Themen 213.2k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Themen
    49k Beiträge
    GarfonsoG
    So, falls jemand testen mag: https://forum.iobroker.net/topic/83726/test-adapter-google-sharedlocations2 Es ist echt magisch. g Gerne in dem anderen Topic weiter diskutieren, falls es da Bedarf gibt.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Themen
    79k Beiträge
    C
    @cookiemonster1706 Habe das gleiche Problem und komme mit meinem Blockly leider nicht weiter. Kannst du bitte deinen Script hier posten?
  • 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?
  • Blockly Script soll nur tatsächlich geschaltete Geräte per Telegram senden

    Verschoben
    16
    0 Stimmen
    16 Beiträge
    3k Aufrufe
    S
    Hey rantanplan, vielen Dank an dich. Deine Lösung hat das Ziel gebracht. Wie auch immer du darauf gekommen bist es ist der Hammer. Gruß Sven
  • Blockly / Sayit Ansage mit Namen

    Verschoben
    6
    1
    0 Stimmen
    6 Beiträge
    1k Aufrufe
    S
    ACHTUNG das Ziel ist erreicht…. ich hatte nur einen Fehler gemacht und habe die Namen nicht klein geschrieben, deshalb funktionierte es nicht. Nun geht es zu 100 % TOP vielen Dank an euch und besonderen Dank @ rantanplan Ich lasse den Fred noch ein wenig auf, fall ich noch weitere fehler bei den Bloklys habe und Hilfe benötige. Gruß Sven
  • [Erledigt] Hilfe Script Smartmeter Wert in CCU2 SV schreiben

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    597 Aufrufe
    Z
    Das wars. Danke
  • IRobot980 npm

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    2k Aufrufe
    H
    OK, danke euch für die Antwort, dann mal abwarten was iRobot sich so einfallen lässt in Zukunft.
  • [gelöst] HM <-> Osram Lightify - Steuerung per Script?

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    603 Aufrufe
    Niemand hat geantwortet
  • [gelöst] RegEx Hilfe

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    1k Aufrufe
    htreckslerH
    ` > …oder ^hm-rpc.0..+.0.LOWBAT$ ` der funktioniert auch…DANKE
  • Absturz Javascript Adapter bei request

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    733 Aufrufe
    coyoteC
    Dann öffnet sich das WebInterface des Wiffi Pump und das Relais des Wiffi Pump wird getriggert. Wenn ich den Javascript Datenpunkt über VIS auf true triggere, schaltet auch das Relais des Wiffi Pump, aber es kommt eben der parse Error
  • On(RegExp) Problem

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    863 Aufrufe
    OstfrieseUnterwegsO
    @fsjoke: Was soll das eigentlich einschränken? Ich wollte nur dass nicht alles automatisch aboniert wird aber ich sollte ja trotzdem noch im script abonnieren können? ` Abstürzen darf natürlich nichts. Beschrieben ist die Option hier: https://github.com/ioBroker/ioBroker.ja … s-on-start
  • Script ein/aus erweitern - aber wie ?

    Verschoben
    20
    0 Stimmen
    20 Beiträge
    3k Aufrufe
    justrJ
    Ich habe keine Ahnung, was dein Datenpunkt 'knx.0.Sonos_PlugIn.Sonos_ZP0.ZP0_LineIn_mit_1' macht und ich kenne auch knx nicht. Aber wenn du versuchst, damit den "current_type" deiner Sonos zu setzen, wird das nicht klappen, da dieser Status "read-only" ist. Zum Umschalten der Sonos von TV auf Radio nutze ich den "favorite_set": setState("sonos.0.root.192_168_xx_yy.favorites_set", "Bayern 3"); Dafür musst du in der Sonos-App natürlich einen entsprechenden Favoriten angelegt haben. Übrigens, da du oben mehrfach nachgehakt hast: Mit "if (statement)" wird das statement auf true abgefragt, also z.B. ob a größer b (a>b) oder c gleich d (c==d). Wenn das statement für sich bereits eine Variable vom Typ boolean ist, steht der Wert ja bereits auf true oder false, d.h. die Abfrage auf true kannst du weglassen. "if (a == true)" ist das gleiche wie "if(a)".
  • Wie muss eine Zeitverzögerung innerhalb einer function im Skript aussehen?

    Verschoben
    2
    0 Stimmen
    2 Beiträge
    704 Aufrufe
    justrJ
    Beispiel: Restart nach 10s der cloud-Instanz bei Änderung der externen Router-IP-Adresse: on({ id: "tr-064.0.states.externalP", change: "ne", ack: true }, function (obj) { log('mylog: Restart cloud instance due to new external IP address'); extendObject('system.adapter.cloud.0', {common: {enabled: false}}); setTimeout(function(){extendObject('system.adapter.cloud.0', {common: {enabled: true}})}, 10000); }); Übrigens, das Script macht zwar laut log genau was erwartet wird und die cloud-Instanz sagt auch "connected", aber seltsamerweise funktioniert Alexa trotzdem erst nach manuellem cloud-Restart oder per cron-Job. :?
  • [gelöst] Mehrere Daten an "eine" Funktion übergeben

    Verschoben
    28
    0 Stimmen
    28 Beiträge
    3k Aufrufe
    P
    Hi Paul, Sorry das ich mich jetzt erst melde. Tausend Dank nochmal, jetzt klappt es und langsam steig ich auch dahinter. Hier mal mein fertiges Produkt `/* ************************************************************************* */ /* Script zum Übertragen der DWD-Wetterwarnungen über */ /* Telegram, Pushover, Home24-Mediaplayer oder SayIt */ /* mit freundlicher Unterstützung von Paul53 (Tausend Dank nochmals) */ /* Stand: 070022017 PrinzEisenherz1 */ /* ************************************************************************* */ var request = require('request'); /* Nachrichten-Dienst festlegen */ /* aus=0 ; alle=1 ; Pushover=2 ; Telegram=3 */ var pushdienst = 3; // Auswahl Nachrichtendienst /* Konfiguration Sprachausgabe über Home24-Mediaplayer */ var idSprachausgabe = false; // Wenn zusätzlich eine Sprachausgabe erfolgen soll dann auf true var idMediaplayer = "192.168.178.70:50000"; // Eingabe IP-Adresse incl. Port für Home24-Mediaplayer /* Konfiguration Sprachausgabe über SayIt */ var idSprachausgabeSayIt = false; // Wenn zusätzlich eine Sprachausgabe über SayIt erfolgen soll dann auf true var idSayIt = "sayit.0.tts.text"; var lautstaerke = 100; /* Trigger für Wetterwarnungen */ var idDescription0 = "dwd.0.warning.description"; var idDescription1 = "dwd.0.warning1.description"; var idDescription2 = "dwd.0.warning2.description"; /* Arrays festlegen */ var newDescriptions = [3]; var oldDescriptions = [3]; var newHeadlines = [3]; var oldHeadlines = [3]; var newBegins = [3]; var oldBegins = [3]; var newEnds = [3]; var oldEnds = [3]; var timer = null; function check() { /* Bereich für 'Alle Wetterwarnungen wurden aufgehoben' */ if(newDescriptions[0] === "") { if ((pushdienst === 3) || (pushdienst === 1) ) { setTimeout((sendTo ("telegram.0", 'Alle Warnmeldungen des DWD wurden aufgehoben')), 3 * 1000); } if ((pushdienst === 2) || (pushdienst === 1) ) { sendTo("pushover.0", 'Alle Warnmeldungen des DWD wurden aufgehoben'); } /* alle Sicherungen Wetterwarnung löschen */ oldHeadlines = newHeadlines.slice(); oldDescriptions = newDescriptions.slice(); oldBegins = newBegins.slice(); oldEnds = newEnds.slice(); return; } var headline; var description; var begin; var end; var i; var warn; /* Variablen für Meldungen Text */ var MeldungOld; var MeldungNew; /* Variablen für Meldungen Sprache */ var MeldungSpracheDWD = ''; var MeldungNewSprache = ''; var MeldungOldSprache = ''; /* Bereich für 'Wetterwarnung gültig bis wurde aufgehoben' */ for(i = 0; i < 3; i++) { warn = 'dwd.0.warning'; if(i) warn = warn + i; headline = oldHeadlines[i]; description = oldDescriptions[i]; begin = oldBegins[i]; end = oldEnds[i]; if(newDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) { MeldungOld = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben'; MeldungOldSprache = oldHeadlines[i] + ' gültig bis ' + oldEnds[i] + ' Uhr wurde aufgehoben' + ' . '; if ((pushdienst === 3) || (pushdienst === 1) ) { setTimeout((sendTo ("telegram.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben")), 3 * 1000); } if ((pushdienst === 2) || (pushdienst === 1) ) { sendTo("pushover.0", "Die Wetterwarnung " +"'"+ oldHeadlines[i] + " gültig bis " + oldEnds[i] + "'" + " des DWD wurde aufgehoben"); } } /* Verknüpfen aller aufgehobenen Wetterwarnungen */ MeldungSpracheDWD = MeldungSpracheDWD + MeldungOldSprache; } /* Bereich für 'Neue Amtliche Wetterwarnung' */ for(i = 0; i < 3; i++) { warn = 'dwd.0.warning'; if(i) warn = warn + i; headline = newHeadlines[i]; description = newDescriptions[i]; begin = newBegins[i]; end = newEnds[i]; if(oldDescriptions.indexOf(description) == -1 && description !== "" && description !== undefined) { MeldungNew = headline + "\ngültig vom " + begin + " Uhr bis " + end + " Uhr\n" + description; /* Entfernen °C für Sprachausgabe */ var replaceDescription0 = entferneDatenpunkt(description); MeldungNewSprache = headline + " gültig vom " + begin + " Uhr, bis " + end + " Uhr. " + replaceDescription0 + ' . '; if ((pushdienst === 3) || (pushdienst === 1) ) { setTimeout((sendTo ("telegram.0", MeldungNew)), 3 * 1000); } if ((pushdienst === 2) || (pushdienst === 1) ) { sendTo("pushover.0", MeldungNew); } } /* Verknüpfen aller neuen Warnmeldungen */ MeldungSpracheDWD = MeldungSpracheDWD + MeldungNewSprache; } /* Verknüpfen aller neuen und abgelaufenen Warnmeldungen */ MeldungSpracheDWD = 'Achtung . ' + MeldungSpracheDWD; /* Bereich für Sprachausgabe über Home24-Mediaplayer */ if((idSprachausgabe === true) && (MeldungSpracheDWD !== "")){ var Url = "http://" + idMediaplayer + "/track=4fachgong.mp3|tts=" + MeldungSpracheDWD; log('Url :' + Url); request(Url); } /* Bereich für Sprachausgabe über SayIt */ if((idSprachausgabeSayIt === true) && (MeldungSpracheDWD !== "")){ setState(idSayIt, lautstaerke + ";" + MeldungSpracheDWD); } /* Neue Werte sichern */ oldHeadlines = newHeadlines.slice(); oldDescriptions = newDescriptions.slice(); oldBegins = newBegins.slice(); oldEnds = newEnds.slice(); } /* Entfernt "°C" aus Sprachmeldung und ersetzt es durch "Grad" */ function entferneDatenpunkt(beschreibung) { var rueckgabe; rueckgabe = beschreibung; try {rueckgabe = rueckgabe.replace(/\°C/g, "Grad");} catch(e) {} return rueckgabe; } on(idDescription0, function(dp) { newDescriptions[0] = dp.state.val; var warn = 'dwd.0.warning'; setTimeout(function() { newHeadlines[0] = getState(warn + '.headline').val; newBegins[0] = getState(warn + '.begin').val; newEnds[0] = getState(warn + '.end').val; }, 3000); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription1, function(dp) { newDescriptions[1] = dp.state.val; var warn = 'dwd.0.warning1'; setTimeout(function() { newHeadlines[1] = getState(warn + '.headline').val; newBegins[1] = getState(warn + '.begin').val; newEnds[1] = getState(warn + '.end').val; }, 3000); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); }); on(idDescription2, function(dp) { newDescriptions[2] = dp.state.val; var warn = 'dwd.0.warning2'; setTimeout(function() { newHeadlines[2] = getState(warn + '.headline').val; newBegins[2] = getState(warn + '.begin').val; newEnds[2] = getState(warn + '.end').val; }, 3000); if(timer) clearTimeout(timer); timer = setTimeout(check, 7000); });` Also nochmal Tausend Dank Johnny[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
  • Daten aus einer .js verwenden (Suntrol Datenlogger STL200)

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    3k Aufrufe
    M
    Hi, der aktuelle Verbrauch entspricht dem von mir ausgelesenen Wert PacArr. Ich lese den aktuellen Ertrag über die Webseite meines PIKO WR. Ist hier ebenfalls im Forum beschrieben. Wenn du noch Bedarf hast kann ich mir ansehen wie man den aktuellen Ertrag über Node-Red ausliest. Gruß, Matze
  • Hs110 Plug- getConsumption

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    589 Aufrufe
    Niemand hat geantwortet
  • Mehrere schedule

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    a200A
    @bahnuhr: Das heißt oben nicht 06:00; dort ist ein * zu viel. Weiterhin, warum schreibst du nicht: schedule("0 12 * * *", function () { log ("a"); }); schedule("0 6 * * *", function () { log ("b"); }); mfg ` yep. Das ist die Lösung! Vielen Dank.
  • [gelöst] mit setState von Zahl auf bool

    Verschoben
    12
    0 Stimmen
    12 Beiträge
    4k Aufrufe
    frankjokeF
    Übrigens, mein Beispiel von Boolean oben müsste abgeändert werden um für alle Fälle zu gelten. Egal, grundsätzlich erlaubt Javascript selbst beliebige Typen für die Variablen aber wenn man im ioBroker eine Type festlegt dann sollte der Wert auch als solche gespeichert werden (nicht nur im History wo es richtig gemacht wird). Ein Beispiel: Booleans (ein/Aus-states) werden in der Visualisierung als solche behandelt aber eben meist mit Standardabfragen wie if(xxx) oder if(!xxx) behandelt. if('false') erzeugt dabei true! if('true oder sonst was') auch if('') erzeugt hingegen false. Bei Zahlen ist's einfacher, 0 erzeugt false, alles andere true. Umgekehrt ist es schon schwieriger, verschiedene Adapter müssen unterschiedliche Strategien anwenden. Ich habe z.B. ein Gerät bei dem true 100 ist (für 100%) und false 0. Da das Gerät auch Dimmer bedienen kann sind bei diesen 0-100 möglich, bei Schaltern aber nur 0 oder 100. Deshalb muss ich bei Dimmern einen Zahlen-Datentyp mit min/0 ,max/100 und bei Schaltern einen binären Wert vorsehen. Wandelt man nun 'true' auf eine Zahl (z.B. mit 0+'true') ergibt das 1. Mit 1 würde der Dimmer aber nicht eingeschaltet werden. Wird dieser Wert nun in den State als Zahl geschrieben kann er zwar richtig in einen boolean umgewandelt werden, aber wenn wer 'true' hineinschreibt kennt sich das Gerät nicht aus obwohl das script glaubt es ist true. Deshalb ist es wichtig wenigstens zu wissen wie sich ioBroker selbst verhält und Adaptern oder scripts vorzugeben wie sie sich zu verhalten haben. Deswegen sollten auch Default klar definiert sein, wie "" oder "false"== false und "was auch immer" == true genauso wie 0 == false und nicht 0 == true
  • Mit Script zeitverzögert comandos senden.

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    706 Aufrufe
    M
    Den kenne ich auch noch nicht, kannst du das erklären wie ich das sinnvoll einrichte, damit die Scrips ancheinander durchlaufen ? Wenn ich das richtig sehe, kann ich da die Scripts auswählen un dhinzufügen. Als Verzägerung kann ich wie dann die 0,03 sek angeben ? Wie mache ich es dann, mit dem schalten per Alexa ? Ich will einen Datenpunkt nutzen, um die Szene 1 aufzurufen und das PIP einschalten und Szene 2 um das PIP auszuschalten Kann ich auch über einen Datenpunkt szenen schalten wie bei "ein" Szene 1 und bei "aus" Szene 2 ?
  • Funksteckdose per Bewegungsmelder schalten

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    S
    So hat es heute früh funktioniert. // isTimeInRange function currentDate() { var d = new Date(); return new Date(d.getFullYear(), d.getMonth(), d.getDate()); } function addTime(strTime) { var time = strTime.split(':'); var d = currentDate(); d.setHours(time[0]); d.setMinutes(time[1]); d.setSeconds(time[2]); return d; } function isTimeInRange(strLower, strUpper) { var now = new Date(); var lower = addTime(strLower); var upper = addTime(strUpper); var inRange = false; if (upper > lower) { // opens and closes in same day inRange = (now >= lower && now <= upper) ? true : false; } else { // closes in the following day inRange = (now >= upper && now <= lower) ? false : true; } return inRange; } // isTimeInRange ENDE createState('Warmwasser.Trigger', false, { name: 'Warmwasser bei Bewegung', type: 'boolean' }); var idBewegung = "hm-rpc.0.MEQ0700004.1.MOTION", // Auslösender Bewegungsmelder idTrigger = 'Warmwasser.Trigger'; setState("hm-rpc.0.NEQ0707005.1.STATE",true); //Funksteckdose einschalten setStateDelayed("hm-rpc.0.NEQ0707005.1.STATE", false, 10 * 60000); //Funksteckdose nach 10min. ausschalten on({id: idBewegung, val: true}, function (obj) { if ( isTimeInRange('04:30:00', '08:00:00')) setState(idTrigger, true); // Trigger auslösen }); // Zurücksetzen vom Trigger schedule("1 8 * * *", function () { setState(idTrigger, false); }); Kann man das eventuell kürzer fassen? Gruss
  • Werte aus e-mail - Schnittselle zu meter home server

    Verschoben
    10
    0 Stimmen
    10 Beiträge
    2k Aufrufe
    C
    Danke ich brauche es aber zum auslesen einer Mail von eine Sophos AP
  • JS Java Script in Verbindung mit new-samsung-remote

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    701 Aufrufe
    Niemand hat geantwortet
  • [gelöst]: Easymeter bzw. Smart Grid Hub über Javascript auslesen (JSON)

    Verschoben
    27
    0 Stimmen
    27 Beiträge
    5k Aufrufe
    apollon77A
    Alle interessierten können auch gern den neuen Adapter testen … http://forum.iobroker.net/viewtopic.php?f=36&t=5047

538

Online

32.6k

Benutzer

82.1k

Themen

1.3m

Beiträge