Skip to content

Skripten / Logik

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

16.4k Themen 211.9k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 48k
    2k Themen
    48k Beiträge
    P
    @ArnoD Ich hatte an diesen Tagen keine Ladevorgänge gestartet oder abgeschlossen.
  • Hilfe für Skripterstellung mit Blockly

    6k 78k
    6k Themen
    78k Beiträge
    MartinPM
    Dann ist das zählen der Impulse und deren Auswertung von genau einem Gerät abhängig und funktioniert auch wenn das WLan oder der ioBroker mal nicht gehen. Das muss man sich aber bezüglich Entprellen schon Einlesen ... Das Zählen der Impulse des Gaszählers - geliefert von einem Node MCU mit Tasmota - habe ich mit einem Blockly-Script gemacht. Die integrierten Entprell-Mechanismen in Tasmota habe ich mir angeschaut, und damals verworfen - ButtonDebounce kann man nur bis 1000 ms hochstellen. https://tasmota.github.io/docs/Commands/#control In 3 Stunden Testzeitraum waren schon 40 Fehl-Impulse "im Kasten", trotz eingestellter 1000 ms ... Auch mit dem Sperr-Timeout von 10 Sekunden gibt es pro Tag ggfs mal 1...3 überzählige Impulse ... Alle paar Tage stelle ich mich mit der Smartphone Vis-App vor den Gaszähler und mache meinen Gaszähler-Korrektur-View auf, um die Fehl-Pulse zu eliminieren. Wenn ein Linux Neustart anfällt muss ich dann auch entsprechend die Pulse nachtragen, die verpasst wurden, während iobroker nicht lief ...
  • Hilfe für Skripterstellung mit Node-RED

    952 13k
    952 Themen
    13k Beiträge
    HomoranH
    @fiddle sagte in [Gelöst]: Adapter per {Node Red | JS} (de)aktivieren: Ok, nicht als "Wert" schreiben, sondern als "Befehl". Dann scheint ihn das zu beeindrucken. du zeigst ja nichts, aber es geht mit true/false [image: 1763416200051-screenshot_20251117-224854_firefox.jpg] gesteuert über eigenen DP vom typ Bool
  • [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
    586 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
    684 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
    690 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
  • Zugriff auf Raum

    Verschoben
    27
    0 Stimmen
    27 Beiträge
    8k Aufrufe
    T
    Hallo, vielleicht war der vorige Beitrag etwas unklar formuliert. Ich habe das Testskript erweitert und vergleiche jetzt den Datenpunkt enumNames der "on"-Funktion direkt mit dem Datenpunkt der "getObject"-Funktion. on({id: id_Dimmer.level, change: "ne", val: 0, logic: "and"}, function(obj) { console.log("EnumNames mit on: " + obj.enumNames); var obj2 = getObject(obj.id, '*'); console.log("EnumNames mit getObject: " + obj2.enumNames); }); Auf dem JSAdapter.0 erscheint folgende Ausgabe: ` > javascript.0 script.js.02_Test.checkScript.testObj: EnumNames mit on: Dimmer,Licht,OG javascript.0 script.js.02_Test.checkScript.testObj: EnumNames mit getObject: Dimmer,Licht,OG Auf dem JSAdapter.1 bleiben die "EnumNames mit on" leider leer :| > javascript.1 script.js.02_Test.checkScript.testObj: EnumNames mit on: javascript.1 script.js.02_Test.checkScript.testObj: EnumNames mit getObject: Dimmer,Licht,OG ` Bei einem anderen Produktivskript bleiben die "EnumNames mit on" meistens auf beiden Adaptern leer. Deshalb glaube ich nicht, dass es ein Instanzen-Problem ist. Jedenfalls scheint "getObject" die Daten anders auszulesen, als die "on"-Funktion. Könnte mal jemand testen, ob es auf einem anderen System auch auftritt :?:
  • GetState.val Nachkommastellen festlegen

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    3k Aufrufe
    0
    Perfekt, danke :)
  • Allgemeine Frage zum Einbinden von Scripten

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    A
    Danke euch allen. Die Kombination eurer Infos war genau das was ich benötigt habe. Ich mache mich gleich mal ans Werk und probiere mein Glück. Vielen Dank :)
  • Datei auf Netzlaufwerk öffnen

    Verschoben
    8
    0 Stimmen
    8 Beiträge
    2k Aufrufe
    ThisoftT
    Muss leider nochmal um Hilfe rufen da ich den Fehler nicht mehr verstehe. Ich erhalte folgende Fehlermeldung: script.js.Test.Testen: Error: EPERM: operation not permitted, open '\\192.168.137.52\BidCos\log\bidcos-2017-01-29.log' Ich habe über den Dateimanager von dem Rechner aus auf welchem ioBroker läuft definitiv Schreibzugriff auf diese Datei (hab's auch mit verschiedenen Dateien auf diesem Laufwerk getestet). Läuft ioBroker irgendwie mit anderen Rechten als der angemeldete Benutzer? Wo könnte denn hier noch das Problem liegen?
  • Hilfe: Scripte Zusammenfassen

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    647 Aufrufe
    paul53P
    Das lässt sich in einem Skript realisieren: // Versuche Play, Pause, Stop, Enter via Alexa an Kodi zu senden var request = require('request'); var idStop = 'javascript.0.Manuell.Systemvariable.Badezimmer.Kodi_Stop'; // Stop var idStop_URL = 'http://192.168.1.16:8081/jsonrpc?request={%22jsonrpc%22:%222.0%22,%22method%22:%22Player.Stop%22,%22params%22:{%22playerid%22:%201},%22id%22:2}}}'; var idPlay = 'javascript.0.Manuell.Systemvariable.Badezimmer.Abspielen'; // Play var idPlay_URL = 'http://192.168.1.16:8081/jsonrpc?request={%22jsonrpc%22:%222.0%22,%22method%22:%22Player.PlayPause%22,%22params%22:{%22playerid%22:%201},%22id%22:2}}}'; on({id: idStop, val: true}, function (obj) { // Frage wie kann ich eine URL z.B. var idStop_URL absenden request(idStop_URL, function(error, response){ if(error){ log(error, 'error'); } }); }); on({id: idPlay, val: true}, function (obj) { // wenn neuer Wert true // Frage wie kann ich eine URL z.B. var idStop_URL absenden request(idPlay_URL, function(error, response){ if(error){ log(error, 'error'); } }); });
  • Gibt es eigentlich eine Erklärung zum Java Skript Adapter?

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    794 Aufrufe
    P
    Hallo skorpil, der css-Befehl dafür lautet "selection". Allerdings muss der in der CSS-Steuerdatei in den tiefen des Editor Moduls geändert werden (oder zumindest dessen Parameter/Farbe). Die Änderung ist vermutlich nach dem nächsten Update wieder weg. Evtl kannst du in deinem Browser eine EInstellung finden, die blaue Auswahl zu übersteuern. Gruß Pix
  • Script per Button aufrufen

    Verschoben
    3
    0 Stimmen
    3 Beiträge
    3k Aufrufe
    P
    Oder man nutzt die Möglichkeit, einzelne Skripte per Datenpunkt scriptEnabled ein/auszuschalten. Dazu muss man das Skript standardmäßig ausschalten (Pause Knopf). Nehmen wir an, es heisst "Heizung" und liegt im common-Ordner von Javascript Instanz 0. Dann im VIS-Widget den entsprechenden Datenpunkt "javascript.0.scriptEnabled.common.Heizung" zum Skript suchen und in OID einsetzen. Und schließlich im Script am Ende noch den Befehl```` stopScript() Gruß Pix
  • Skript nur einmal am Tag ausführen und dann sperren

    Verschoben
    36
    0 Stimmen
    36 Beiträge
    5k Aufrufe
    T
    Hallo Rainer, ich verstehe Nordlicht sehr gut und finde es super, dass du dir darüber Gedanken machst. ioBroker entwickelt sich seit Beginn mit großen Schritten weiter und auch die Doku hat sich durch eure ständige Arbeit wesentlich verbessert. Was ihr da leistet, ist bemerkenswert. Ein Anfänger kann mit Tutorials im Internet oder mit Literatur JS erlernen, doch bezieht sich das Meiste davon auf Webseiten-Programmierung mit HTML und CSS. All das wird in ioBroker auch eingesetzt, aber nur selten auf die gleiche Art und Weise, wie es die Literatur erklärt. Jedenfalls fehlt dem Anfänger hier noch das Transfervermögen. Ich selbst stehe da irgendwo in der Mitte dieser Phase ;) Speziell beim JavaScript-Adapter würde ich mir zu den Funktionen noch mehr Details mit Erklärungen wünschen. Trotz des gesamten Umfanges sind die einzelnen Beschreibungen extrem kompakt gehalten. Es ist vielmehr ein Nachschlagewerk für erfahrene Anwender, als eine Beschreibung für Einsteiger. Als Beispiel und zur Erklärung möchte ich die "on"-Funktion nennen, mit deren Parametern ich mich zur Zeit intensiver auseinandersetze. Nehmen wir davon mal den ersten Parameter: ` > You can use following parameters to specify the trigger: parameter______type/value _____description –--------------------------------------------------------------------------- logic___________string__________"and" or "or" logic to combine the conditions (default: "and") ` Hierzu ergaben sich folgende Fragen: 1. Lassen sich beliebig viele Parameter verunden bzw. verodern? 2. Kann "and" mit "or" kombiniert werden? z.B. (Licht1 and Licht2) or (Licht3 and Licht4) 3. Wenn ja, wie sieht die Syntax dazu aus? Wer genug Erfahrung hat, würde die Fragen so beantworten 1. Es wurden keine Grenzen angegeben, deshalb können beliebig viele Parameter verwendet werden. 2. Da steht "and" or "or", also geht nur eines von beiden. 3. Geht nicht, wegen Antwort von Frage 2. Als weiteres Beispiel nehme ich einen Ausschnitt aus dem diskutierten Skript von Nordlicht: > on({id: bwm, val: true}, function (obj) { // Trigger auslösen Bei val steht In der Beschreibung: New value must be equal to given one. Als Anfänger bin ich davon ausgegangen, dass sich ein neuer Wert von einem alten Wert im Wert unterscheiden muss, sonst ist es kein neuer Wert. Daher hätte ich erwartet, dass der Trigger nur auslöst, wenn der Wert des bwm von "false" auf "true" wechselt. Das tut er sogar, aber er löst auch aus, wenn der "Zeitstempel" des Wertes aktualisiert wird, weil dann der Wert "true" durch ein neues "true" ersetzt wurde. Im Skript von Nordlicht hat das keine Auswirkungen, da er noch eine Sperrvariabale verwendet, aber in einem anderen Skript sorgt es erstmal für Verwirrung. Zumindest zu dem zweiten Beispiel gab es schon einige Diskussionen, die mit einer etwas umfangreicheren Doku wahrscheinlich nicht entstanden wären. Die Doku ist das wichtigste Instrument, um neue User bei den ersten Schritten mit ioBroker zu begleiten und um den Spaß an der Sache aufrechtzuerhalten. Ich möchte in Bezug auf den JS-Adapter vorschlagen, die Funktionen in der bestehenden GitHubDoku mit weiterführenden Links zu Detailbeschreibungen zu versehen. Die verlinkten Seiten beschreiben dann die gewählte Funktion noch mal genauer (evtl. in Denglisch) und zeigen weitere Beispiele (Codeschnipsel) mit Kommentierung auf. Man könnte das mit den Linux Man-Pages vergleichen, die man dann aufruft, wenn die Kurz-Referenz des –help-Parameters nicht ausreicht. Grüße
  • WebCam Bild refresh per klick

    Verschoben
    3
    1
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    Z
    @pix: Schnell von unterwegs: wenn du mit einem Widget mehrere Datenpunkte setzen willst, empfiehlt sich der Scenes Adapter. Da kann man alle Datenpunkte mit Zielzustand, ggf. verzögert, in einer Szene zusammen fassen. Diese Szene lässt sich dann leicht per Widget in Vis einschalten. Gruß Pix ` Hi Pix, danke für die Antwort - aber irgendwie fehlt mir da der zusammenhang. An sich will ich ja nur einen Datenpunkt setzen wenn ich auf das Webcam bild klicke und nicht mehrere. Hast du evtl ein Bsp. für mich? Evtl seh ich den Wald vor lauter Bäumen nicht. Gruß ztark edit Hab selbst die lösung gefunden: Mit dem widget "HTML STATE" ließ es sich ohne weiteres realisieren. Zum einen kann ich damit ein Objekt setzen und zum anderen den oben erwähnten HTML-Code einfügen. (Eine verzögerung scheint nicht nötig zu sein) Gruß ztark
  • Laufenden Timer abfragen?

    Verschoben
    4
    0 Stimmen
    4 Beiträge
    1k Aufrufe
    paul53P
    @MistyReblaus: Schau mal hier: ` oder http://forum.iobroker.net/viewtopic.php?f=21&t=4796&p=47065#p47065.

827

Online

32.4k

Benutzer

81.6k

Themen

1.3m

Beiträge