Weiter zum Inhalt

JavaScript

2.5k Themen 49.4k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • Selbst signiertes Zertifikat erlauben / trusten

    2
    -1 Stimmen
    2 Beiträge
    264 Aufrufe
    P
    @draycd Wenn du das Zertifikat speichern kannst, steht evtl. Hier eine Möglichkeit.
  • "Unsubscribe" Objekt von einem anderen Skript

    8
    0 Stimmen
    8 Beiträge
    836 Aufrufe
    T
    @czarnylewis Das geht so nicht. Globale Skripts werden jedem Skript vorangestellt in deinem Beispiel erzeugst du 2 on() die jeweils auf die Änderung von objetcID reagieren.
  • javaskript variablen monitoren

    Verschoben
    9
    0 Stimmen
    9 Beiträge
    374 Aufrufe
    AlCalzoneA
    Hmm, dann macht doch bitte mal ein Issue in https://github.com/ioBroker/ioBroker.javascript auf, damit man sich das anschauen kann.
  • Script läuft nach Umzug auf anderen Server nicht mehr

    14
    0 Stimmen
    14 Beiträge
    738 Aufrufe
    R
    @paul53 danke für den Hinweis.
  • Funktionen nacheinander aufrufen

    javascript
    4
    0 Stimmen
    4 Beiträge
    406 Aufrufe
    XenonX
    du wirst dich mit asynchroner Programmierung befassen müssen
  • Korrekte Liste entgangener Anrufe mittels dem tr-064 Adapter

    Verschoben
    5
    0 Stimmen
    5 Beiträge
    761 Aufrufe
    S
    @paul53 Suuper! Es funktioniert! Vielen Dank!
  • Telegram: Timeout bei "ask" konfigurieren

    7
    0 Stimmen
    7 Beiträge
    799 Aufrufe
    F
    @nokxs sagte in Telegram: Timeout bei "ask" konfigurieren: @fastfoot Ich hab jetzt deinen Vorschlag umgesetzt, die Zeile gepatcht und es funktioniert . Falls ich etwas Zeit finde baue ich die Konfiguration in die GUI ein und mache einen Pull Request :-) . Danke für die schnelle Hilfe. evtl ist es besser ein issue aufzumachen, hatte mir das mit der GUI auch überlegt, aber dann nicht gewusst wo das Setting eigentlich hin sollte :-)
  • HTML Tabelle für DP mit History Einträgen

    template
    22
    2
    4 Stimmen
    22 Beiträge
    3k Aufrufe
    S
    @liv-in-sky danke... der Datenpunkt passt! Über ein blockly kann ich so die bash schreiben. [image: 1625382535575-image-010.jpg] (kann man wahrscheinlich noch in dein Skript integrieren) Ergebnis: #!/bin/bash influx -execute 'delete from "Heizung.Badezimmer.Ventil" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Schlafzimmer.Ventil" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Kueche.Ventil" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Wohnzimmer.Ventil" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Buero.Ventil" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Flur.Ventil" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Esszimmer.Ventil" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Atelier.Ventil" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.Trockner.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.Geschirrspueler.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.Waschmaschine.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.TV.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Esszimmer.Temperatur.Soll" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.Server.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.TanjaPC.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.Luftbefeuchter.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.Kuehlschrank.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.Gefrierschrank.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.Rauchabzug.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Plugs.MichaPC.Power" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Luftdruck.Aussen" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Luftdruck.Aussen_max" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Luftdruck.Aussen_min" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Außen.MAX" where time < '\'`date +%Y-%m-%d -d "730 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Außen.MIN" where time < '\'`date +%Y-%m-%d -d "730 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Außen.Tagesdurchschnitt" where time < '\'`date +%Y-%m-%d -d "730 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Außen.Tagesdurchschnitt2" where time < '\'`date +%Y-%m-%d -d "730 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Außen.Tagesdurchschnitt3" where time < '\'`date +%Y-%m-%d -d "730 day ago"`\' -database="iobroker" influx -execute 'delete from "BMW_3er_Leasing.Tagesverbrauch.Liter_100km_History" where time < '\'`date +%Y-%m-%d -d "365 day ago"`\' -database="iobroker" influx -execute 'delete from "Leasing.Tagesverbrauch.Test-Tankfuellung" where time < '\'`date +%Y-%m-%d -d "365 day ago"`\' -database="iobroker" influx -execute 'delete from "Leasing.tanken.KM-APP" where time < '\'`date +%Y-%m-%d -d "365 day ago"`\' -database="iobroker" influx -execute 'delete from "Leasing.tanken.KM-Jahr-Leasing" where time < '\'`date +%Y-%m-%d -d "730 day ago"`\' -database="iobroker" influx -execute 'delete from "Leasing.tanken.Liter-100KM-Gesamt" where time < '\'`date +%Y-%m-%d -d "730 day ago"`\' -database="iobroker" influx -execute 'delete from "Leasing.tanken.Liter-100KM-Strecke" where time < '\'`date +%Y-%m-%d -d "730 day ago"`\' -database="iobroker" influx -execute 'delete from "bmw.0.WBA6K31010FK63788.dynamic.remaining_fuel" where time < '\'`date +%Y-%m-%d -d "92 day ago"`\' -database="iobroker" influx -execute 'delete from "Gasverbrauch.15min.Grenzwert" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Gasverbrauch.15min.Aktuell" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Gasverbrauch.Monat.Grenzwert" where time < '\'`date +%Y-%m-%d -d "365 day ago"`\' -database="iobroker" influx -execute 'delete from "Gasverbrauch.Tag.Grenzwert" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Gasverbrauch.Tag.Aktuell" where time < '\'`date +%Y-%m-%d -d "365 day ago"`\' -database="iobroker" influx -execute 'delete from "Sonne.Lux.Aktuell2" where time < '\'`date +%Y-%m-%d -d "365 day ago"`\' -database="iobroker" influx -execute 'delete from "Sonne.Lux.Max" where time < '\'`date +%Y-%m-%d -d "365 day ago"`\' -database="iobroker" influx -execute 'delete from "Sonne.Lux.Aktuell" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Luftdruck.Aussen_24h" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Kuehlschrank.24h" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "System.Master.Disk" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "System.Slave1.Disk" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "System.Slave1.RAM" where time < '\'`date +%Y-%m-%d -d "14 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Bad.Max" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Bad.Min" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Badezimmer.Temperatur.Soll" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Buegelzimmer.Max" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Buegelzimmer.Min" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Buegelzimmer.Temperatur.Soll" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Buero.Max" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Buero.Min" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Buero.Temperatur.Soll" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Dachboden.Max" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Dachboden.Min" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Flur.Max" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Flur.Min" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Flur.Temperatur.Soll" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Kueche.Max" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Temperaturen.Kueche.Min" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" influx -execute 'delete from "Heizung.Kueche.Temperatur.Soll" where time < '\'`date +%Y-%m-%d -d "31 day ago"`\' -database="iobroker" Danke dir!
  • Fehler bei konstanten Variablen

    7
    0 Stimmen
    7 Beiträge
    828 Aufrufe
    P
    @alcalzone Vielen lieben Dank dir!!
  • States Namen von vordefinierter Auswahl

    2
    1
    0 Stimmen
    2 Beiträge
    123 Aufrufe
    paul53P
    @mcu sagte: Wie kann man an den Wert kommen? Der Wert ist wahrscheinlich im Objekt unter common.states zu finden. const id = '0_userdata.0.jarvis.pollenflug.LandesKennung'; let Landeskenn = getObject(id).common.states[getState(id).val];
  • Objekt IDs in Skripten auf Konsistenz prüfen

    7
    0 Stimmen
    7 Beiträge
    537 Aufrufe
    C
    @paul53 Perfekt, das hat mir schon mal ordentlich weitergeholfen! Folgendes gibt jetzt die Skripte mit den zugehörigen Objekt IDs aus (wenn diese im Code mit einem Hochkomma eingeschlossen sind): const regex = new RegExp(`'[a-z]*\.0\.[a-zA-Z0-9.]*'`, `g`); const scripts = $('javascript.0.scriptEnabled.*'); scripts.each(function(id) { id = id.replace('javascript.0.scriptEnabled', 'script.js'); if(existsObject(id) && getObject(id).type == 'script') { var source = getObject(id).common.source; var matches = source.match(regex); if (matches != null) { matches.forEach(function (element) { log(id + ' --> ' + element); }); } } }); Gibt mir noch ein paar falsche Treffer, da muss sich noch ein wenig Feintuning betreiben, aber grob passt das so. Vielen Dank für Eure Hilfe! Jan
  • (gelöst) State-Änderung wird nicht mehr erkannt im JS

    3
    0 Stimmen
    3 Beiträge
    285 Aufrufe
    haselchenH
    @paul53 magst Du oben mal bitte über das Script gucken. Der Bewegungsmelder funktioniert jetzt, aber das Skript wird nicht abgearbeitet.
  • Javascript WLED

    6
    0 Stimmen
    6 Beiträge
    703 Aufrufe
    arteckA
    @iobroker-lover sagte in Javascript WLED: zu diesen global scripts global script bedeutet im iobroker dass dieser VOR jedem anderen script eingefügt wird.. nicht meher ersetze const axios = require('axios').default; durch const axios = require('axios'); axios.defaults.timeout = 5000; // timeout 5 sec ansonsten kannst den rest stehen lassen
  • Hilfe - Javaskript: Zahl bei Änderung senden

    8
    0 Stimmen
    8 Beiträge
    474 Aufrufe
    Martin SteinerM
    [image: 1624225554834-loxone.jpg]
  • Erstes Scipt reagiert nicht wie geplant

    javascript
    12
    0 Stimmen
    12 Beiträge
    653 Aufrufe
    R
    Das Problem mit dem Array habe ich gelöst. Vielleicht nicht die Eleganteste Lösung aber zumindest der Teil mit den Datenpunkten funktioniert. Nur leider bringt mir das mit meiner Situation im Habpanel nicht weiter. Aber trotzdem wollte ich mal mein Code zeigen, der mit Sicherheit nicht der eleganteste ist, aber er funktioniert. on({id: 'hm-rpc.0.PEQ0177610.1.PRESS_SHORT'/*Display Wz:1 PRESS SHORT*/}, function (obj) { var favoritenliste = getState("javascript.0.sonos.favTexte").val; var listederfavoriten = favoritenliste.split(";"); var aneueliste = ["a","b"]; var sneueliste = "a"; var elemente = listederfavoriten.length; console.log(elemente); for (var i = 0; i<elemente; i++) { aneueliste[i] = listederfavoriten[i] + "=" + listederfavoriten[i]; console.log(aneueliste[i]); } setState("javascript.0.sonos.favoriten", aneueliste.join(",")); }); Mein Plan war es eigentlich über meinen neu erzeugten Datenpunkt die Items des Auswahlwidgets zu erzeugen, nur leider klappt das nicht wie erhofft. Bei der Manuell erzeugten Liste, ändert das Auswahlwidget beim auswählen den Datenpunkt vom Sonos, welcher den aktuellen Favoriten in die Wiedergabe bringt. Also den Datenpunkt favorietes_set mit der Auswahl füllt. [image: 1623964361676-cf1a577c-0a77-4a30-bde7-82d3f2658639-grafik.png] Vielleicht hat von euch jemand eine Idee oder kennt eine Möglichkeit für mein Problem. Ich hoffe man versteht was ich machen möchte und wozu. Michael
  • Globale Skripte funktionieren nicht mehr

    2
    0 Stimmen
    2 Beiträge
    147 Aufrufe
    M
    @mhuhn Ich sehe gerade an der Logausgabe, dass das globale Skript offenbar schon in das andere Skript übernommen wird, da die Ausgabe von "LibTest" im Log ja von LibClientTest erfolgt ist. Allerdings funktioniert die Variable nicht.
  • Gartenbewässerung (später dann Dauer über Jarvis einstellen)

    6
    0 Stimmen
    6 Beiträge
    690 Aufrufe
    paul53P
    @luebke69 sagte: gegen 20:15 Uhr) nacheinander für eine bestimmte Zeit (20 Minuten und später dann über Jarvis einstellen...) laufen sollen. Dann soll je nach Regenmenge gestern und heute, aktuell Regen und starkem Wind die Sprenger aus- oder gar nicht erst angehen. Version mit gleicher Dauer für alle 6 Ventile und mit Datenpunkten für "genug Regen", "aktuell Regen" und "starkem Wind". const idDauer = '0_userdata.0.Garten.Bewaesserung.Dauer'; // Dauer pro Ventil in Minuten const idRegen = '...'; // es regnet const idFeucht = '0_userdata.0.Garten.Bewaesserung.Boden_feucht'; // heute, gestern war genug Regen const idSturm = '0_userdata.0.Garten.Bewaesserung.Sturm'; // Starker Wind const ids = [ '', // Platz für ID des gerade offenen Ventils 'id1', 'id2', 'id3', 'id5', 'id5', 'id6' ]; var ventil = 0; // kein Ventil offen var dauer = 60000 * getState(idDauer).val; on(idDauer, function(dp) { dauer = 60000 * dp.state.val; }); var timer = null; function ventile() { if(ids[0]) setState(ids[0], false); // Ventil schließt ventil++; if(ventil <= 6) { setState(ids[ventil], true); // Ventil öffnet ids[0] = ids[ventil]; timer = setTimeout(ventile, dauer); } else { ventil = 0; ids[0] = ''; timer = null; } } function abbruch() { if(timer) clearTimeout(timer); timer = null; if(ids[0]) setState(ids[0], false); ventil = 0; ids[0] = ''; } var regen = getState(idRegen).val; var feucht = getState(idFeucht).val; var sturm = getState(idSturm).val; on(idRegen, function(dp) { regen = dp.state.val; if(regen) abbruch(); }); on(idSturm, function(dp) { sturm = dp.state.val; if(sturm) abbruch(); }); on(idFeucht, function(dp) { feucht = dp.state.val; }); schedule('15 20 * * *', function() { if(!regen && !feucht && !sturm) ventile(); });
  • Javascript verändern

    javascript
    6
    0 Stimmen
    6 Beiträge
    434 Aufrufe
    R
    @chrunchy Ich habe es getestet, nur leider ohne Erfolg. Aber naja ich denke, ich werde mich mit JavaScript mehr auseinander setzen und naja was eigenes entwickeln müssen. Leider finde ich den hier im Forum nicht mehr, der mir damals geholfen hat. Aber naja hat auch was gutes. Nächste mal bekomme ich es vielleicht selber hin. Muss nur gucken wie ich ans Ziel komme. Bis dahin wird es noch etwas dauern, aber es wird schon irgendwie. Muss nur gucken, wie ich ein Array erstelle, zerlege und im Anschluß neu zusammenfüge. Michael
  • Konfiguration für eigene Scripts

    7
    0 Stimmen
    7 Beiträge
    444 Aufrufe
    F
    @misterkrueml mich hat halt gestört, für ein Skript 2 Dateien zu haben, meist sind meine Projekte recht klein. Gefallen hat mir bei require() der Einzeiler :-)
  • Wie mehrere Werte nach Änderung synchron verrechnen

    13
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    mickymM
    @sputnik24 Genau. Freut mich dass es klappt. Ich bin ja deswegen von 250ms zwischen 2 on events ausgegangen, da ich das schon mehrfach als magisch e Grenze gesehen habe. Letztlich finde ich den Verzug insgesamt zugunsten der Akuratess eher zu verschmerzen. Schließlich heißt es das ja nicht, dass es jedesmal 250ms sind. Sondern nur 250ms nach dem letzten Event. Aktualisieren sich die Werte schneller um so eher beginnt ja auch der Timer abzulaufen. Die Zeitspanne multipliziert sich also nicht mit der Anzahl der Datenpunkte. Das Produkt stellt lediglich den maximalen Delay dar, ist aber eben nicht konstant.

262

Online

32.9k

Benutzer

83.0k

Themen

1.3m

Beiträge