Skip to content

Skripten / Logik

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

16.5k Topics 213.2k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    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 Topics
    79k Posts
    Z
    kann mir keiner helfen mit meinem Blockly?
  • Hilfe für Skripterstellung mit Node-RED

    953 13k
    953 Topics
    13k Posts
    S
    welche Palette hast du installiert, damit du den "AND" Baustein hast?
  • 0 Votes
    16 Posts
    3k Views
    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

    Moved
    6
    1
    0 Votes
    6 Posts
    1k Views
    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

    Moved
    3
    0 Votes
    3 Posts
    597 Views
    Z
    Das wars. Danke
  • IRobot980 npm

    Moved
    4
    0 Votes
    4 Posts
    2k Views
    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?

    Moved
    1
    0 Votes
    1 Posts
    603 Views
    No one has replied
  • [gelöst] RegEx Hilfe

    Moved
    8
    0 Votes
    8 Posts
    1k Views
    htreckslerH
    ` > …oder ^hm-rpc.0..+.0.LOWBAT$ ` der funktioniert auch…DANKE
  • Absturz Javascript Adapter bei request

    Moved
    5
    0 Votes
    5 Posts
    733 Views
    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

    Moved
    3
    0 Votes
    3 Posts
    863 Views
    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 ?

    Moved
    20
    0 Votes
    20 Posts
    3k Views
    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)".
  • 0 Votes
    2 Posts
    704 Views
    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

    Moved
    28
    0 Votes
    28 Posts
    3k Views
    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)

    Moved
    4
    0 Votes
    4 Posts
    3k Views
    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

    Moved
    1
    0 Votes
    1 Posts
    589 Views
    No one has replied
  • Mehrere schedule

    Moved
    4
    0 Votes
    4 Posts
    1k Views
    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

    Moved
    12
    0 Votes
    12 Posts
    4k Views
    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.

    Moved
    3
    0 Votes
    3 Posts
    706 Views
    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

    Moved
    5
    0 Votes
    5 Posts
    1k Views
    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

    Moved
    10
    0 Votes
    10 Posts
    2k Views
    C
    Danke ich brauche es aber zum auslesen einer Mail von eine Sophos AP
  • JS Java Script in Verbindung mit new-samsung-remote

    Moved
    1
    0 Votes
    1 Posts
    701 Views
    No one has replied
  • [gelöst]: Easymeter bzw. Smart Grid Hub über Javascript auslesen (JSON)

    Moved
    27
    0 Votes
    27 Posts
    5k Views
    apollon77A
    Alle interessierten können auch gern den neuen Adapter testen … http://forum.iobroker.net/viewtopic.php?f=36&t=5047

346

Online

32.6k

Users

82.1k

Topics

1.3m

Posts