Skip to content

Skripten / Logik

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

16.4k Themen 211.7k Beiträge

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    2k 48k
    2k Themen
    48k Beiträge
    A
    @psrelax Wenn die Zeile auskommentiert ist, dann wird die Funktion nur noch aufgerufen, wenn die Objekt ID e3dc-rscp.0.EMS.POWER_BAT sich ändert und der Wert <0 ist, also negativ und somit, nur wenn die Batterie entladen wird. Mir fehlt gerade die Fantasie, wie dieser Fehler dann noch auftreten kann. Kannst du bei dir zum Testen mal diese beiden LOG Zeilen in der Funktion calculateBatteryRange() Zeile 2131 einfügen: log(currentConsumptionW1 = ${currentConsumptionW},'warn') log(currentConsumptionW2 = ${currentConsumptionW},'warn') Das würde dann so aussehen: // Funktion zur Berechnung der Reichweite basierend auf dem aktuellen Verbrauch oder dem Durchschnittsverbrauch async function calculateBatteryRange(currentConsumptionW) { // Setze currentConsumptionW auf 0, wenn es null, undefined oder kleiner als 0 is log(`currentConsumptionW1 = ${currentConsumptionW}`,'warn') currentConsumptionW = (currentConsumptionW == null || currentConsumptionW >= 0) ? 0 : currentConsumptionW; log(`currentConsumptionW2 = ${currentConsumptionW}`,'warn') const akt_Autonomiezeit = (await getState(sID_Autonomiezeit)).val if (!homeAverage) { console.error('Keine Daten im homeAverage vorhanden.'); return; } Eigentlich kann es nur noch passieren, wenn der Wert e3dc-rscp.0.EMS.POWER_BAT null oder undefined ist.
  • Hilfe für Skripterstellung mit Blockly

    6k 78k
    6k Themen
    78k Beiträge
    H
    ... der Blick in das Protokoll brachte die "Erhellung"
  • 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
  • Widget schaltet HTTP GET Befehl

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    2k Aufrufe
    BluefoxB
    @akamia: Geht. Setze ich zur direkten Steuerung meines DENON Verstärkers ein. Z.B.: http://192.168.xxx.yyy/goform/formiPhon … ?1+MuteOff Widget: jqui - Icon Http Get Die 433 MHz billig Funksteckdosen hatte ich auch über das Mediola Gateway gesteuert. ` Es sit empfohlen die Skriptversion zu nutzen, weil Widget Lösung funktioniert nur von zuhause. Falls man unterwegs ist, landen die HTTP Befehle in Nirvana. Und dann noch, falls man HTTPS einschaltet, kann man die Requests auch nicht machen, weil die Browser weigern von HTTPS auf HTTP zu greifen. Falls man von Zuhause und nur über HTTP vis laufen lässt, dann kann man die widgets auch benutzen.
  • [gelöst] Reaktion auf Kalendereintrag

    Verschoben
    13
    0 Stimmen
    13 Beiträge
    2k Aufrufe
    S
    Merci, Ich schaue morgen mal und werde berichten…danke!
  • Node-Red Deployment Probleme *** Gelöst ***

    Verschoben
    11
    0 Stimmen
    11 Beiträge
    6k Aufrufe
    T
    Hallo, hab nun die die aktuelle Node-red Version 0.13.2 installiert. Damit sind meine Deployment-Probleme mit "Error: connection to server lost" auch endlich gelöst. cd /opt/iobroker/node_modules/iobroker.node-red iobroker stop node-red.0 npm i --unsafe-perm node-red@0.13.2 iobroker start node-red.0 Es läuft nun alles stabil…. :) :) :)
  • Einschaltdauer

    Verschoben
    6
    1
    0 Stimmen
    6 Beiträge
    2k Aufrufe
    P
    Hey Pix, danke für die Tipps :D Ich bin für jeden Tipp dankbar. Gerade wenn diese einem das Leben langfristig erleichtern. Werde meine Scripte demnächst mal umbauen. Gruß Phantomio
  • [gelöst] String Inhalt durchsuchen

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

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

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

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    6k Aufrufe
    M
    Super, klappt einwandfrei. Danke
  • Hue Lampe nach Farbänderung wieder zurück setzen

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    973 Aufrufe
    coyoteC
    Funktioniert, danke dir. Bin noch nicht so firm im scripten ;) 10064_shepherd.db.txt
  • Verallgemeinerung zur Weiterverwendung

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

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

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

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

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

    Verschoben
    1
    0 Stimmen
    1 Beiträge
    844 Aufrufe
    Niemand hat geantwortet
  • HUE Motion

    Verschoben
    7
    0 Stimmen
    7 Beiträge
    2k Aufrufe
    I
    Danke geht!
  • Probleme mit Skript Licht an nach Erkennung Bewegung

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

    Verschoben
    32
    0 Stimmen
    32 Beiträge
    3k Aufrufe
    L
    aaah- jetzt hab ichs verstanden. oh mann. Danke dir
  • Rolladen Zeitverzögert ansteuern

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

    Verschoben
    13
    0 Stimmen
    13 Beiträge
    4k Aufrufe
    G
    Genau das war es Danke :D

840

Online

32.4k

Benutzer

81.4k

Themen

1.3m

Beiträge