Weiter zum Inhalt

Skripten / Logik

16.6k Themen 214.5k Beiträge

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

NEWS

Unterkategorien


  • Hilfe für Skripterstellung mit JavaScript

    3k 49k
    3k Themen
    49k Beiträge
    D
    @maxclaudi "Nebenher ist ein neues, verbessertes Skript in Arbeit und zu 80 % fertig." Was wird denn verbessert? hat es was mit meinem Smartmode zu tun? Ich hoffe ich muss nicht nochmal alles neu machen für mein Steuerungsscript.
  • Hilfe für Skripterstellung mit Blockly

    7k 80k
    7k Themen
    80k Beiträge
    J
    @Thomas-Braun ich hatte es schon mal mit dem sudo -u iobroker versucht, da kam allerdings ein Fehler raus. Müsste noch mal morgen abend schauen welcher genau. Es hat aber eher das sudo die Probleme gemacht. Ich hatte auch einfach mal ein sudo vor die oben beschriebenen Befehle in der Konsole gehängt und es kam der selbe Fehler raus. Hat sich also nicht nach einem Berechtigungsproblem angehört (wie gesagt, morgen mehr dazu). Grundsätzlich bin ich sonst auch für andere Lösungen offen mein Display zu schalten. Eine schaltbar Steckdose ist jedoch keine Option für mich. Gruß Jannik
  • Hilfe für Skripterstellung mit Node-RED

    956 13k
    956 Themen
    13k Beiträge
    S
    Hallo Zusammen, ich bin gerade am überlegen, wie ich folgende Aufgabe umsetzen könnte: Ein true an einer (Trigger)Node lässt einen Zähler laufen und setzt einen eigenen Ausgang auf true. Ein false der Trigger Node stoppt den Zähler setzt diesen aber nicht auf false. Ein true lässt den Zähler einfach weiterlaufen... Nach Ablauf der Zeit im Zähler wird der Ausgang des Zählers auf false gesetzt. Mehr soll nicht passieren. Ein separater Eingang am Zähler setzt diesen auf 0 zurück. Was ich damit anfangen möchte: Die Laufzeit der Poolpumpe wird auf eine Mindestlaufzeit von bspw. 4h überwacht -kann aber manuell bedient bei Bedarf länger laufen. Ein Trigger um 00:01Uhr setzt die Laufzeit zurück. Die Zählernode gilt hier als "Anforderung Pumpe wegen Mindestlaufzeit unterschritten". Ich habe noch keine brauchbaren Ideen, wie ich dass sauber und mit wenig Aufwand umsetzen könnte... Vielen Dank und VG Torsten
  • Dateien anlegen, die im Reiter Dateien sichtbar werden?

    4
    1
    -1 Stimmen
    4 Beiträge
    418 Aufrufe
    haus-automatisierungH
    @hauwi112 Weil man nicht direkt in das Dateisystem schreibt und daher die Meta-Daten fehlen. Wenn man zB redis nutzt, liegen die Datein auch gar nicht mehr an der Stelle, sondern in der Datenbank. Das sollte @MartinP eigentlich wissen :) Habe Dir das doch ganz ausführlich erklärt nachdem Du die Doku bemängelt hast… Lies die Doku vom JavaScript-Adapter. Du suchst writeFile
  • JS: wie Datenpunkte Unterstrukturen lesen?

    10
    1
    0 Stimmen
    10 Beiträge
    847 Aufrufe
    paul53P
    @haus-automatisierung sagte: Ja der hat ja Subscriptions auf alle States und Objekte Gerade getestet: Funktioniert. EDIT: Früher hat es nicht funktioniert. Es musste erst die JS-Instanz neu gestartet werden, um neue Objekte / Zustände einzulesen, die nicht durch den Javascript-Adapter selbst erzeugt wurden.
  • erweiterung einer rule geschichte

    1
    2
    0 Stimmen
    1 Beiträge
    253 Aufrufe
    Niemand hat geantwortet
  • Shelly Plus 1PM schaltet eigenständig aus?

    15
    1
    0 Stimmen
    15 Beiträge
    1k Aufrufe
    H
    @bananajoe Die Temperatur wird auch im iobroker gelistet. Diese wird via Grafana zusammen mit der Leistung visualisiert. Ich konnte bisher keinen Zusammenhang feststellen...der Shelly hat auch bei "niedriger" Temperatur abgeschaltet. @MichaelF könnte sein. @haselchen danke...werde ich mal versuchen.
  • OpenDtu persistent / non persistent senden

    javascript
    5
    1
    0 Stimmen
    5 Beiträge
    1k Aufrufe
    Ralla66R
    @peterfido Danke für die Info, nö, Module 600 Watt Verbrauch 200 Watt Limit 200 Watt macht 400 Watt für den Speicher
  • IP-Adresse von Gerät herausfinden

    6
    0 Stimmen
    6 Beiträge
    695 Aufrufe
    David G.D
    @puls200 Das macht man idr in der Weboberäche der Kamera. Ansonsten sieht man den Namen normal auch im Router.
  • Script manuel "am Trigger vorbei" starten

    8
    1
    0 Stimmen
    8 Beiträge
    424 Aufrufe
    HomoranH
    @wcag22 sagte in Script manuel "am Trigger vorbei" starten: warum eine Schleife dazu nicht geeignet @homoran sagte in Script manuel "am Trigger vorbei" starten: wiederhole solange feuert im Millisekundentakt. Das wird ioBroker ruckzuck lahmlegen
  • Etwas nur tagsüber laufen lassen

    27
    1
    0 Stimmen
    27 Beiträge
    3k Aufrufe
    haus-automatisierungH
    Weil ich eh gerade dran bin, gibts bald ein kleines Ausrufezeichen mit einer Warnung wenn man den Block dort verbindet :) Ist erstmal nur ein Hinweis - könnte ja sein, dass der Wert eine Objekt-ID ist. Und dann würde es wieder gehen... [image: 1711022857218-screenshot-2024-03-21-at-13.07.00.png]
  • Öffnungszeiten aus Googleseite auslesen

    Verschoben Ungelöst
    4
    1
    0 Stimmen
    4 Beiträge
    471 Aufrufe
    haus-automatisierungH
    @oli Projekt anlegen API-Key anlegen und speichern API (Places API) dem Projekt/Key zuweisen Daten mit dem Key abfragen
  • Skript aktivieren mit lovelace ohne Aus-Schalter

    4
    1 Stimmen
    4 Beiträge
    357 Aufrufe
    F
    @johannesf Ja, Szene mit Aktivieren Schaltfläche ist genau das was ich suche. Danke!
  • Dump1090-fa/PiAware - json in ein Objekt schreiben

    javascript
    4
    0 Stimmen
    4 Beiträge
    708 Aufrufe
    HomoranH
    @wannseesprinter da gab es eine Änderung. musst du mal im Netz suchen. Hab meine Piaware im Moment nicht mehr laufen.
  • Java Script https selfsigned certificate

    4
    0 Stimmen
    4 Beiträge
    260 Aufrufe
    C
    Hi, vielen Dank fuer Deine Antwort / Anleitung. Es funktioniert so wie beschrieben auf jeden Fall. Man konnte noch ergaenzen, dass mal den iobroker einmal neu starten muss. Leider bin ich immer noch zu doof das Ergebnis(result) in eine Variable schreiben zu lassen und damit weiter zu arbeiten. Zum Glueck gab es in der Zwischenzeit ein Blockly update. Damit glaube ich auch, dass das hier obsolete ist und man Script Engine ab 7.9.0 verwenden sollte. Vielen Danke fuer Deine Hilfe auf jeden Fall... LG
  • geparstes html aus Website in Visu einfügen

    14
    1
    0 Stimmen
    14 Beiträge
    821 Aufrufe
    JensenJ
    @jey-cee Danke, ich teste das morgen. Ha, ging ja ganz schnell, kaum macht man's richtig, schon geht's. Vielen, vielen Dank für die Hilfe. [image: 1710702719347-vis.png]
  • Strom-Verbrauch mit verschiedenen Tarifzeiten rechnen

    16
    0 Stimmen
    16 Beiträge
    2k Aufrufe
    M
    @Massimo müsste auch so funktionieren: [image: 1710619421983-5b52d812-e08f-4cbc-a9f6-201e0f56a781-image.png]
  • Autarkiegrad (aktuell und gesamt) berechnen

    33
    1
    0 Stimmen
    33 Beiträge
    5k Aufrufe
    SchmakusS
    Hi, also ich hab jetzt mal ein Script erstellt, mit dem ich denke, alle abgedeckt zu haben. Bin mir jedoch noch nicht sicher, ob alle Berechnungen stimmen. Vielleicht kann ja jemand mal drüberschauen. // Bezug Hauszähler const oidLeistungHaus = 'alias.0.Energie.Zaehler.Leistung_Zähler_Gesamt'; const oidBezugkWh = 'alias.0.Energie.Zaehler.Stromzaehler_Zaehlerstand_kWh'; const oidBezugWh = 'alias.0.Energie.Zaehler.Stromzähler_Zählerstand_in_Wh'; const oidZaehlerAbPVkWh = '0_userdata.0.PV.Haus_Zählerstand_ab_PV'; const oidTagesbezugkWh = '0_userdata.0.PV.Tagesbezug_in_kWh'; const oidNeededPower = '0_userdata.0.PV.Benötigte_Leistung_Haus_Aktuell'; const oidWerksreset = '0_userdata.0.PV.Werksreset'; const oidWerksresetFreischalten = '0_userdata.0.PV.Werksreset_Freischalten'; const oidWerksresetDatum = '0_userdata.0.PV.Werksreset_Datum'; const oidTagesverbrauchkWh = '0_userdata.0.PV.Tagesverbrauch_in_kWh'; const BezugkWh = getState(oidBezugkWh).val; const BezugWh = getState(oidBezugWh).val; let LeistungHaus = 0; let LeistungPV = 0; let NeededPower = 0; let ZaehlerNeuAbPVkWh = 0; let TagesbezugkWh = 0; let TagesverbrauchkWh = 0; let GesamtverbrauchkWh = 0; // Einspeisung Hauszähler const oidWhEinspeisung = '0_userdata.0.PV.Einspeisung_ins_Netz'; const oidkWhEinspeisung = '0_userdata.0.PV.Einspeisung_ins_Netz_in_kWh'; const oidkWhEinspeisungHeute = '0_userdata.0.PV.Einspeisung_ins_Netz_Heute_kWh'; let EinspeisungWh = 0; let EinspeisungkWh = 0; let EinspeisungHeutekWh = 0; // PV const oidPVPower = 'opendtu.0.total.power'; const oidPVYieldTotal = 'opendtu.0.total.yieldtotal'; const oidGesamtertragkWh = '0_userdata.0.PV.PV_Zaehlerstand_Gesamt'; const oidZaehlerstandOpenDTU = '0_userdata.0.PV.PV_Zaehlerstand_openDTU'; const oidEigenverbrauchkWh = '0_userdata.0.PV.Eigenverbrauch_in_kWh'; const oidEigenverbrauchHeutekWh = '0_userdata.0.PV.Eigenverbrauch_Heute_in_kWh'; const oidTagesertragkWh = '0_userdata.0.PV.PV_Zaehlerstand_Heute'; let GesamtertragkWh = 0; let TagesertragkWh = 0; let EigenverbrauchkWh = 0; let EigenverbrauchHeutekWh = 0; let ZaehlerstandOpenDTU = 0; //******* Zählerstand Haus ab PV */ ZaehlerNeuAbPVkWh = getState(oidZaehlerAbPVkWh).val; on({ id: oidBezugWh, change: 'ne' }, async (obj) => { const value = obj.state.val; const oldValue = obj.oldState.val; const differenz = (value - oldValue) / 1000; ZaehlerNeuAbPVkWh += differenz; await setStateAsync(oidZaehlerAbPVkWh, Math.round(ZaehlerNeuAbPVkWh * 1000) / 1000, true); }); //******* Zählerstand direkt von OpenDTU */ on({ id: oidPVYieldTotal, change: 'ne'}, async(obj) => { ZaehlerstandOpenDTU = (await getStateAsync(oidZaehlerstandOpenDTU)).val; if (obj.state.val > ZaehlerstandOpenDTU) { await setStateAsync(oidZaehlerstandOpenDTU, obj.state.val, true); } }) //******* Zähler PV Einspeisung und Bezug*/ EinspeisungWh = getState(oidWhEinspeisung).val; EinspeisungkWh = getState(oidkWhEinspeisung).val; EinspeisungHeutekWh = getState(oidkWhEinspeisungHeute).val; TagesbezugkWh = getState(oidTagesbezugkWh).val; on({ id: oidLeistungHaus, change: 'ne'}, async (obj) => { const state = obj.state; const oldState = obj.oldState; LeistungHaus = state.val; if (oldState.val < 0) { EinspeisungWh += (oldState.val * (state.lc - oldState.lc)) / -3600000; EinspeisungHeutekWh += ((oldState.val * (state.lc - oldState.lc)) / -3600000) / 1000; EinspeisungkWh = EinspeisungWh / 1000; await Promise.all([ setStateAsync(oidWhEinspeisung, Math.round(EinspeisungWh), true), setStateAsync(oidkWhEinspeisung, Math.round(EinspeisungkWh * 1000) / 1000, true), setStateAsync(oidkWhEinspeisungHeute, Math.round(EinspeisungHeutekWh * 1000) / 1000, true) ]); } else if (obj.oldState.val > 0) { TagesbezugkWh += (obj.oldState.val * (obj.state.lc - obj.oldState.lc)) / 3600000000; await setStateAsync(oidTagesbezugkWh, TagesbezugkWh, true); }; await NeededPowerCurrent(); }); //******** PV Zählerstand Total und Heute und Berechnung des Eigenverbrauchs */ GesamtertragkWh = getState(oidGesamtertragkWh).val; TagesertragkWh = getState(oidTagesertragkWh).val; EigenverbrauchHeutekWh = getState(oidEigenverbrauchHeutekWh).val; on({ id: oidPVPower, change: 'ne'}, async (obj) => { const oldValue = LeistungPV = obj.oldState.val; const value = (oldValue * (obj.state.lc - obj.oldState.lc)) / 3600000000; GesamtertragkWh += value; TagesertragkWh += value EigenverbrauchkWh = Math.round((GesamtertragkWh - EinspeisungkWh) * 1000) / 1000; EigenverbrauchHeutekWh = Math.round((TagesertragkWh - EinspeisungHeutekWh) * 1000) / 1000; await Promise.all([ setStateAsync(oidGesamtertragkWh, GesamtertragkWh, true), setStateAsync(oidEigenverbrauchkWh, EigenverbrauchkWh, true), setStateAsync(oidEigenverbrauchHeutekWh, EigenverbrauchHeutekWh, true), setStateAsync(oidTagesertragkWh, TagesertragkWh, true) ]); await NeededPowerCurrent(); }); //******* Tagesertrag / Tagesbezug resetten */ const zeitplan = schedule('59 23 * * *', async() => { TagesertragkWh = TagesbezugkWh = EinspeisungHeutekWh = 0 await Promise.all([ setStateAsync(oidTagesertragkWh, 0, true), setStateAsync(oidTagesbezugkWh, 0, true), setStateAsync(oidkWhEinspeisungHeute, 0, true) ]); }); // Autarkie schedule("*/5 * * * * *", async () => { const autarkieHeute = Math.round((((TagesverbrauchkWh - TagesbezugkWh) / TagesverbrauchkWh) * 100) * 1) / 1; const autarkie = Math.round((((GesamtverbrauchkWh - ZaehlerNeuAbPVkWh) / GesamtverbrauchkWh) * 100) * 1) / 1; let autarkieAktuell = Math.round(Math.min(Math.max((100 * (1 - (LeistungHaus / NeededPower))), 0), 100) * 1) / 1; await Promise.all([ setStateAsync('0_userdata.0.PV.Autarkie_Gesamt', autarkie, true), setStateAsync('0_userdata.0.PV.Autarkie_Tag', autarkieHeute, true), setStateAsync('0_userdata.0.PV.Autarkie_Aktuell', autarkieAktuell, true) ]); }); // Aktuelle Leistung Haus und Verbräuche berechnen async function NeededPowerCurrent() { // Benötigte Leistung Haus aktuell in W NeededPower = LeistungHaus + LeistungPV; await setStateAsync(oidNeededPower, (Math.min(Math.max(NeededPower, 0), 10000)), true); // Benötigter Tagesverbrauch und Gesamtverbrauchin kWh TagesverbrauchkWh = TagesbezugkWh + TagesertragkWh - EinspeisungHeutekWh; GesamtverbrauchkWh = ZaehlerNeuAbPVkWh + GesamtertragkWh - EinspeisungkWh; await setStateAsync(oidTagesverbrauchkWh, TagesverbrauchkWh, true); return true; } //Werksreset on({id: oidWerksreset}, async (obj) => { const freigeschaltet = (await getStateAsync(oidWerksresetFreischalten)).val; if (freigeschaltet) { TagesbezugkWh = TagesertragkWh = EinspeisungWh = EinspeisungkWh = EinspeisungHeutekWh = EigenverbrauchHeutekWh = GesamtertragkWh = ZaehlerNeuAbPVkWh = TagesverbrauchkWh = 0; const date = formatDate(new Date(), 'DD.MM.YYYY'); await Promise.all([ setStateAsync(oidTagesbezugkWh, 0, true), setStateAsync(oidWhEinspeisung, 0, true), setStateAsync(oidEigenverbrauchHeutekWh, 0, true), setStateAsync(oidkWhEinspeisungHeute, 0, true), setStateAsync(oidkWhEinspeisung, 0, true), setStateAsync(oidTagesertragkWh, 0, true), setStateAsync(oidGesamtertragkWh, 0, true), setStateAsync(oidZaehlerAbPVkWh, 0, true), setStateAsync(oidTagesverbrauchkWh, 0, true), setStateAsync(oidWerksresetFreischalten, false, true), setStateAsync(oidWerksresetDatum, date, true) ]); } });
  • Steuerung mehrerer Steckdosen in einem einzigen Skript

    9
    1
    0 Stimmen
    9 Beiträge
    361 Aufrufe
    da_WoodyD
    @ketanest da bin ich völlig dabei! Mich stören nur immer die Rechnungen um ein paar W, oder Cent. Smart Home kann sparen, kostet aber auch. Bei meinem Hauskauf hab ich erstmal, so weit wie möglich, auf LED umgerüstet, dann auf die Steuerung geschaut. Ja, der Mini PC verbraucht auch. Relativiert sich aber durch die PV mit Speicher.
  • Auswertung für smartmeter

    Verschoben
    62
    0 Stimmen
    62 Beiträge
    12k Aufrufe
    E
    @a200 Das Skript ist super... ich habe noch eine Baustelle. Wenn iobroker neu gestartet wird (zB update controller) dann werden "null" Werte geschrieben. Wie kann ich die loswerden? Einmal ist es mit ack false und einmal mit true. Beide an Zeiten wo eigentlich nichts erscheinen soll. Hier zB ein Beispiel wo um 1 vor der volle Stunde was geschrieben wird, am um 9:38 und 9:38 wurden nulls geschrieben. [image: 1710410415021-3cc3e87e-403f-4de2-b5fe-5e0334ad7b94-image.png]
  • 1x im Jahr Wert erhöhen?

    7
    0 Stimmen
    7 Beiträge
    247 Aufrufe
    BertDerKleineB
    @paul53 sagte in 1x im Jahr Wert erhöhen?: Aber für jedes Feld (Minuten, Stunden, Tage, Monate) hat man ein Auswahl-Menü. [image: 1710266144408-blockly_temp.jpg] Das wirkte auf mich viel komplizierter und 3x so viele Klicks. Hat es irgendwelche negativen Konsequenzen, über den Wizard zu gehen?
  • ioBroker mit Kurzbefehle vom Iphone

    30
    0 Stimmen
    30 Beiträge
    4k Aufrufe
    J
    Hi! Wollte auch einen Datenpunkt im IOB mit Shortcuts ändern, ich bekomme folgendes: Es kommt immer die Fehlermeldung: KONVERTIERUNGSFEHLER Inhalte von URL abrufen fehlgeschlagen: Keine Konvertierung von Formatierter Text in URL. Habt ihr eine Idee dazu? Der Datenpunkt: http://192.168.1.41:8087/set/0_userdata.0.SimpleAPI.NFC1?value=false Im Browser funktioniert es einwandfrei! Liebe Grüße Jürgen[image: 1710260921393-bildschirmfoto-2024-03-12-um-17.28.21-resized.png] ERledigt!
  • offene Fenster zählen über functions [ERLEDIGT]

    13
    2
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    T
    @Codierknecht, @lessthanmore: Vielen Dank für die Hinweise. Werde es gleich mal ausprobieren.

560

Online

32.8k

Benutzer

82.8k

Themen

1.3m

Beiträge