Skip to content

Skripten / Logik

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

16.6k Topics 213.6k Posts

NEWS

Subcategories


  • Hilfe für Skripterstellung mit JavaScript

    2k 49k
    2k Topics
    49k Posts
    A
    @azzkikrboy Habe den Timer Aufruf Solcast in der Version 1.6.9 noch mal abgesichert.
  • Hilfe für Skripterstellung mit Blockly

    7k 79k
    7k Topics
    79k Posts
    B
    @redbull2906 Ich würde sagen, dass man sich da nicht selbst kümmern muss, das sollte das BMS des Akkus regeln, so ist zumindest meine Sicht der Dinge.
  • 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
  • [gelöst] String Inhalt durchsuchen

    Moved
    4
    0 Votes
    4 Posts
    1k Views
    P
    Danke euch beiden für die schnelle Antwort. Mit dem Code von Bluefox funktioniert es :) Hier noch einmal die Funktion falls es mal jemand brauchen kann. Soll die letzte Sprachausgabe wiedergeben :lol: ! function fSprachausgabeWiederholen (){ lastsay = getState("sayit.0.tts.text").val; if (lastsay.indexOf("Nerv") != -1){ // Nerv kommt vor }else{ if (lastsay.indexOf("Gut") != -1){ setState (idSayIt, "Nerv mich nicht. Ich habe mich bereits wiederholt. "); }else{ if (lastsay.indexOf("Ich") != -1){ setState (idSayIt, "Gut zuhören. Ich wiederhole mich nur noch einmal. " + lastsay); }else{ setState (idSayIt, "Ich habe gesagt: " + lastsay); } } } setStateDelayed ("javascript.0.SprachausgabeWiederholen", true, 14000); } ! Gruß Phantomio
  • [fixed] on ID - Ausführung doppelt ?

    Moved
    9
    0 Votes
    9 Posts
    3k Views
    P
    Da ich diese globale Funktion auch für andere Sachen benutze, und diese nur eine e-Mail senden würde ich das erst mal ausschließen. Die globale Funktion ist genau wie die Mail Funktion aufgebaut. Liegt halt nur in einem Globalen Script.
  • Per Skript widget ausführen

    Moved
    8
    0 Votes
    8 Posts
    3k Views
    BluefoxB
    @Konni: Jetzt bin ich es schon wieder, wenn ich es in mein vorhandenes Script einbaue, öffnet sich zwar der Dialog, schließt sich aber nicht mehr :( /* Bewegung zaehlen und in VIS anzeigen für hofi77 http://forum.iobroker.net/viewtopic.php?f=21&t=1703#p14520 Bitte anpassen mit eigener Seriennummer erstellt: 14.11.2015 von Pix */ var idSayIt2 = "sayit.2.tts.text"; var vol2 ="sayit.2.tts.volume"; createState('VIS.Klingel_zeigen', false, { read: true, write: true, type: 'boolean', name: 'Klingel im VIS Widget anzeigen', desc: 'Steuervariable für VIS Widget Sichtbarkeit' }); createState('VIS.Klingel_zaehlen', 0, { read: true, write: true, type: 'number', name: 'Klingel zählen', desc: 'Counter für Klingeln' }); var idKlingelsensor = "hm-rpc.0.MEQ0657356.1.PRESS_SHORT"/*HM-Sen-DB-PCB MEQ0657356:1.PRESS_SHORT*/, idCountKlingel = 'VIS.Klingel_zaehlen', idShowKlingel = 'VIS.Klingel_zeigen'; on({ id: idKlingelsensor, val: true }, function (obj) { var counter = getState(idCountKlingel).val; // bisherige Zahl aus Variable einlesen setState(idCountKlingel, ++counter); // eins hochzählen setState (vol2,99); setState (idSayIt2, "Es klingelt oben"); setState("vis.0.control.data", 'w00104'); // hier ist Widget-name setState("vis.0.control.instance", 'FFFFFFFF'); setState("vis.0.control.command", 'dialogOpen'); setStateDelayed("vis.0.control.command", 'dialogClose', 5000); //setState(idShowKlingel, true); // Steuerung VIS-Widget Sichtrbarkeit auf wahr //setStateDelayed(idShowKlingel, false, 5000); // nach 10.000 ms wieder ausblenden }); // Mitternacht Zähler zurücksetzen schedule('0 * * * *', function () { setState(idCountKlingel, 0); }); ```` ` Dann mach beim schlissen das gleiche: setStateDelayed("vis.0.control.command", {instance: 'FFFFFFFF', data: 'w00104', command: 'dialogOpen'}, 5000);
  • Scriptstart bei Aufruf einer URL

    Moved
    7
    0 Votes
    7 Posts
    6k Views
    M
    Super, klappt einwandfrei. Danke
  • Hue Lampe nach Farbänderung wieder zurück setzen

    Moved
    5
    0 Votes
    5 Posts
    1k Views
    coyoteC
    Funktioniert, danke dir. Bin noch nicht so firm im scripten ;) 10064_shepherd.db.txt
  • Verallgemeinerung zur Weiterverwendung

    Moved
    17
    0 Votes
    17 Posts
    2k Views
    K
    Ich habe ja versprochen mein Ergebnis hier bereitzustellen. Den Countdown habe ich von Bluefox übernommen und an meine Bedürfnisse angepasst. Vielen Dank an Bluefox. /* Enthaltene Funktionen: */ /* CountDown(objekt) Stellt einen CountDown zur Verfügung und schreibt die Werte nach objekt */ /* CountDown1(sekunden,objekt) Wie CountDown als Alternativlösung */ /* Rechnersysteme direkt hoch und herunterfahren */ /* -------------------------------------------------------------------------------------------------- */ function CountDown (objekt) { function count() { setTimeout(function () { var timer = getState(objekt).val; if (timer > 1) { timer=timer-1; if (getState(objekt).val != 0) {setState(objekt, timer)}; count(); } else { setState(objekt, 0); } }, 1000); } count(); } /* -------------------------------------------------------------------------------------------------- */ Im zweiten Teil steuere ich drei Rechnersysteme. Dies kann um weitere Systeme erweitert werden, indem in der Markierung 1 weitere Rechnernamen eingetragen werden und die on-Statements jweils kopiert und hinten angehängt werden. Die Variable i muss jeweils zweimal um eins erhöht werden. Bei Markierung 3 können die eigenen Befehle eingetragen werden, die nach Ablauf des Sleeptimers ausgeführt werden sollen. Wenn jemanden noch Verbesserungen oder Optimierungen auffallen, dann gerne kommentieren. /* –------------------------------------------------------------------------------------------------ */ `var idSayIt = "sayit.0.tts.text"; var hosts = [ "Sonne", "Nuc","Galaxy"]; //MARKIERUNG 1 var anzahl_hosts = hosts.length; var timeout = new Array(anzahl_hosts); for (i=1;i<anzahl_hosts;i++) 0/1/3/60/{/createstate/(hosts[i]+'.sleeptimer',-1);/(hosts[i]+'.sleeptimer_dauer',15);/(hosts[i]+'.countdown',900);/(hosts[i]+'.shutdown_befehl','wget/-o/dev/null/http:/192.168.2.25/remote_'+hosts[i]/+/'_shutdown.php');/(hosts[i]+'.wol_befehl','wget/'_wol.php');/(hosts[i]+'.aktivieren',0);/}/function/start_sleeptimer(host)/setstate/(idsayit,/"sleeptimer/"/host/aktiviert/getstate("javascript.0."+host/".sleeptimer_dauer").val/minuten")/;/setstate("javascript.0."/".countdown",/*/);/countdown("javascript.0."+host/".countdown");/mytimeout="setTimeout(function" ()/timer/ist/abgelaufen")/markierung/".sleeptimer",/-1);/wert/wieder/zurücksetzen/},/getstate("javascript.0."+host+".sleeptimer_dauer").val/1000*60);/return(mytimeout)/stop_sleeptimer/(host,mytimeout)/"+host+"/gestoppt")/cleartimeout(mytimeout);/setstate("javascript.0."+host+".sleeptimer",/setstate("javascript.0."+host+".countdown",/0);/------------------------------------------------------------------------------------------------------/dies/der/auslöser/für/die/aktivierung/des/sleeptimers/wenn/sleeptimer/auf/gesetzt/wird,/wird/ein/countdown/ausgelöst/und/nach/ablauf/aktion/ausgeführt/während/aktiven/countdowns/agbebrochen/beiden/aktinen/sleelptimer/selbst/-1/gesetzt./i="0;" on("javascript.0."+hosts[i]+".sleeptimer",/function(obj)/if/(obj.newstate.val="==" 1)/timeout[i]="start_Sleeptimer(hosts[i]);" else/0)/stop_sleeptimer(hosts[i],timeout[i]);/nichts/tun/});/<e=""></anzahl_hosts;i++)>`[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
  • Ölverbrauch berechnen?

    Moved
    4
    0 Votes
    4 Posts
    1k Views
    L
    Hi Thomas, die werden in ioBroker gespeichert. Die Datenpunkte aus der CCU stehen aber zur Verfügung und können als Trigger eingetragen werden. Die Anzahl der verwendeten Datenpunkte hängt von den Einstellungen ab, z.B. mit Historie oder ohne, mit Tages, Wochen, Monats, Jahreskumulation oder ohne etc. Bisher ist es als Betriebszeitenscript veröffentlicht, allerdings habe ich das Script komplett umgeschrieben und erweitert. Damit sind Verbrauchdarstellungen möglich, auch bewertete Verbräuche, Umrechnungen anderer Art etc. link zum Beitrag: http://forum.iobroker.com/viewtopic.php?f=21&t=2175 aber wie gesagt. Diese Version enthält noch nicht die neuen Funktionen. Ich schicke dir mal die letzte Version via PN. Mal zum schauen. vG
  • Variable Zeitsteuerung

    Moved
    11
    0 Votes
    11 Posts
    2k Views
    B
    @pix: Hallo, auch mal hier im Forum nach 'unsubscribe'. Bin unterwegs und finde den Link gerade nicht. Gruß, Pix Gesendet mit Tapatalk ` Gefunden, gleiche Frage und das obwohl ich gesucht hatte :ugeek: .
  • Selektor ODER Verknüpfung

    Moved
    4
    0 Votes
    4 Posts
    865 Views
    P
    Hallo, es hat funktioniert.: http://forum.iobroker.com/viewtopic.php … 076#p19603 lediglich das "^" habe ich weggelassen. Gruß Pix
  • [gelöst] On id bezogen auf mehrere ID´s möglich

    Moved
    3
    0 Votes
    3 Posts
    888 Views
    B
    Super funzt. Musste noch dahinter steigen, dass nicht alle Aktoren mit LEQ beginnen :), aber das war eine kleine Anpassung. Danke.
  • Per Python den Zustand von Datenpunkten ändern

    Moved
    1
    0 Votes
    1 Posts
    866 Views
    No one has replied
  • HUE Motion

    Moved
    7
    0 Votes
    7 Posts
    2k Views
    I
    Danke geht!
  • Probleme mit Skript Licht an nach Erkennung Bewegung

    Moved
    2
    0 Votes
    2 Posts
    811 Views
    P
    Hallo Freddy, dein Subscribe ist die Kurzschreibweise. Lang geschrieben ist das das gleiche: on({id: 'hm-rpc.0.KEQ0236715.1.MOTION', change: 'ne' }, function (obj) { Das bedeutet erstmal, dass das Skript nur gestartet wird, wenn der Wert sich ändert. Weiter unten fragst du dann ab, ob der neue Wert true ist (also nach einer Änderung, d.h. er muss vorher false sein). Bei den Variablen helligkeit und bewegung fehlt noch das .val. Probier mal so: on({id: 'hm-rpc.0.KEQ0236715.1.MOTION', change: 'any' }, function (obj) { // Bewegung überwachen var bewegung = getState('hm-rpc.0.KEQ0236715.1.MOTION').val; // hier aber auch obj.newState.val var helligkeit = getState('hm-rpc.0.KEQ0236715.1.BRIGHTNESS').val; if (obj.newState.val === true) { // Bewegung true log("---> Licht - Gallerie - ausgelöst durch Bewegungsmelder............","info") if (helligkeit < 50) { // Helligkeitsgrenzwert bei Bedarf ändern setState("hm-rpc.0.KEQ0801517.1.ON_TIME"/*LED Galerie ein - aus.ON_TIME*/, 600); // 600s Einschaltdauer setState("hm-rpc.0.KEQ0801517.1.STATE"/*LED Galerie ein - aus.STATE*/, true); // schalte Lampe an log("---> Licht - Gallerie an für 600 Sekunden............" ,"info"); } else { log("---> Licht - Licht zu hell um anzuschalten da Helligkeit: " + helligkeit + " %" ,"info"); // Helligkeitswert vom Melder sind keine Prozent } } }); Gruß Pix
  • Zuviel fuer JS ?

    Moved
    32
    0 Votes
    32 Posts
    3k Views
    L
    aaah- jetzt hab ichs verstanden. oh mann. Danke dir
  • Rolladen Zeitverzögert ansteuern

    Moved
    18
    1
    0 Votes
    18 Posts
    3k Views
    wendy2702W
    Hi, ich habe mich mal an das bereits in diesem Thema enthaltene Script gewagt. Damit ich irgendwann mal verstehe wie das alles funktioniert mal ein paar fragen: wenn ich das Script so erstelle wie angegeben, muss ich doch zusätzlich in der CCU sagen das bei z.B. Druck der Taste "hm-rpc.0.BidCoS-RF.12.PRESS_SHORT" die Rolladen aktoren auf 0% (zu) fahren, oder mache ich das auch in iobroker? Das wiederhole ich für alle drei Tasten, korrekt? Sieht bei mir z.B. so aus: [image: 999_jalousie_og_alle_ccu.jpg] Wenn ich z.B. diese Taste nehmen würde: "hm-rpc.0.BidCoS-RF.15.PRESS_SHORT" würde der Rolladen 2000ms später fahren, richtig? Das Programm habe ich erstmal 1 zu 1 in iobroker importiert und gestartet. Danach ist mein Status so: [image: 999_jalousie_og_alle.jpg] Ich habe mir zum Testen zwei einfache Widgets erstellt und die jeweils mit der virtuellen Taste für rauf bzw. runter belegt. Das scheint zu klappen. Wie funktioniert jetzt die Umschaltung zwischen Auto/Hand ? Ein Auto Script habe ich zwar noch nicht aber was muss ich machen um wählen zu können? Ich kann mit einen weiteren Widget den Status für "Hand_Auto" zwischen "true und false" wechseln, allerdings kann ich egal was da steht immer meine beiden anderen Widgets zum fahren benutzen. Danke für eure Hilfe
  • Iobroker Unterschied zwischen value und object

    Moved
    13
    0 Votes
    13 Posts
    4k Views
    G
    Genau das war es Danke :D
  • JavaScript die Erste… ein Noob braucht hilfe :(

    Moved
    4
    0 Votes
    4 Posts
    896 Views
    R
    Danke, wollte nur mal mit den ausdrücken und Statusabfragen herumprobieren. Werde mich tapfer damit weiter spielen und sicher wieder fragen stellen… [GRINNING FACE WITH SMILING EYES] Gesendet von meinem HUAWEI CRR-L09 mit Tapatalk
  • Status einer Instanz abfragen – CCU noch am Leben?

    Moved
    3
    0 Votes
    3 Posts
    1k Views
    M
    Hi, vielen Dank für die schnelle Antwort! Super, genau was ich gesucht habe. :D Und ja, der Name ist definitiv Programm ;)
  • On ID und Asynchrones Verhalten

    Moved
    9
    0 Votes
    9 Posts
    1k Views
    L
    ich meinte, dass das script wie ich es gepostet habe mit dem Delay funktioniert. Sorry, dass ich mich da nicht klar ausgedrückt habe. Mittlerweile glaube ich, dass es bei der Kombi Direktverknüpfung und schnelle Schaltfolge keine Lösung gibt, da ja ioBroker offensichtlich vom ersten Schaltvorgang gar nichts mitbekommt. vG Looxer 6558_unbenannt.png
  • On()-Funktion - Reagieren auf _SHORT oder _LONG

    Moved
    34
    0 Votes
    34 Posts
    3k Views
    R
    Hey, frage von einem totalen JavaScript noob: Er schaltet mir die Var output2 nicht, was mache ich falsch? log("Test","info"); //var input1 = "ping.0.input1";/*input1 bool*/ //var input2 = "ping.0.input2";/*input2 zahl*/ //var output1 = "ping.0.output1";/*output1 bool*/ //var output2 = "ping.0.output2";/*output2 zahl*/ function testfunc1() { setState("ping.0.output1", true); } function testfunc2() { setState("ping.0.output1", false); } on({id: "ping.0.input1", val: true}, testfunc1); on({id: "ping.0.input1", val: false}, testfunc2); 305_heizungsscript_220_b14_temp.txt

631

Online

32.7k

Users

82.3k

Topics

1.3m

Posts