Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 49.1k Beiträge

NEWS

  • [gelöst] Script findet Datenpunkt nicht

    2
    2
    0 Stimmen
    2 Beiträge
    99 Aufrufe
    paul53P
    @delphinis Du versuchst, zwei nicht deklarierte Variablen zu addieren. Richtig: log(add(getState('0_userdata.0.MeinOrdner.Zahl_5').val, getState('0_userdata.0.MeinOrdner.Zahl_8').val)); EDIT: Funktionen des Javascript-Adapters.
  • Script in vis HTML Widget einbinden

    javascript
    6
    0 Stimmen
    6 Beiträge
    633 Aufrufe
    D
    @glasfaser said in Script in vis HTML Widget einbinden: a:modbus.0.inputRegisters.31255_Netzspannung_Phase Kurze Frage: Es ist wohl so, dass wenn ich einen Wert hier der Variablen a zuordne, dass dieser gleich in einen String gewandelt wird. Meist will man diese Werte weiterverrechnen und muss sie dann eben mit parseX() wieder in eine Zahl wandeln. Parsen ist aber eine teure funktion. Kann man die Werte nicht gleich als Zahl weiterverarbeiten, oder kommen die schon mit dem Parameter als Datenpunkt (modbus.0.inputRegisters.31253_Netzspannung_Phase_L1) rein?
  • HTMLTabelle UnifiClients-newAdapter

    javascript
    93
    3
    4 Stimmen
    93 Beiträge
    11k Aufrufe
    D
    @liv-in-sky Danke das wars
  • Auflistung von Zuständen einer bestimmten Funktion

    15
    0 Stimmen
    15 Beiträge
    354 Aufrufe
    Ben1983B
    @martinp ok. Kann ich verstehen… wobei ich nur an 1-2 dropdowns gedacht hätte… aber ok.
  • persist timer

    javascript
    4
    0 Stimmen
    4 Beiträge
    386 Aufrufe
    M
    Ich habe mir jetzt folgendes gebastelt. Damit übersteht das verzögerte Schalten auch nach Neutstart von ioBroker function clearStateDelayed_persist(id) { clearStateDelayed(id) setState(id+"_timer",JSON.stringify([])) } function setStateDelayed_persist(id,val,delay,clearRunning) { setStateDelayed(id,val,delay,clearRunning) var timer = getStateDelayed(id) var persist = [] for (var i = 0;i < timer.length;i++) { var timestamp = new Date(new Date().getTime() + timer[i].delay) var date = timestamp.toISOString() persist.push({"date":date,"val":val,"clearRunning":clearRunning}) } setState(id+"_timer",JSON.stringify(persist)) } function restore_setStateDelayed(id) { clearStateDelayed(id) var timer = JSON.parse(get(id + "_timer")) for (var i = 0;i < timer.length;i++) { var persist = timer[i] var delay = new Date(persist.date).getTime() - new Date().getTime() if (delay > 0) setStateDelayed(id,persist.val,delay,persist.clearRunning) } } /* Damit das Bespiel läuft muss der Datenpunkt 1. '0_userdata.0.Test.test_boolean' und 2. '0_userdata.0.Test.test_boolean_timer' vorhanden sein. */ var id = '0_userdata.0.Test.test_boolean' setStateDelayed_persist(id,false,2000) setStateDelayed_persist(id,false,3000,false) //clearStateDelayed_persist(id) setTimeout(function(){restore_setStateDelayed(id)},1000) on({ id: id, change: "any"}, function (obj) { log("getriggert") })
  • [gelöst] Alexa und doNotDisturb

    Verschoben javascript
    9
    0 Stimmen
    9 Beiträge
    669 Aufrufe
    H
    funktioniert...dankeschön!
  • wLED-Abfrage

    13
    1
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    paul53P
    @haus-automatisierung sagte: Der Selector-Code ist ja etwas... undurchsichtig. Laut der Log-Ausgabe funktioniert der $Selector auch bei @baluderbär. @baluderbär Was ergibt im Log? var cacheSelectorwled = $('state[id=*.on](functions=Licht)[role=switch.light]'); cacheSelectorwled.each(function(id, i) { log(id); }); Es müssten 14 IDs untereinander erscheinen.
  • JS Problem Weather Script Air Quality :-(

    9
    0 Stimmen
    9 Beiträge
    557 Aufrufe
    M
    @olli_m So es wie aussieht hat es in dem Bereich ein Datenübertragungsproblem gegeben. Ich vermute, dass die Daten bald wieder gemeldet werden, ansonsten musst du eine andere Station in der Nähe suchen. [image: 1708199115445-581a64e6-e54c-430e-80b6-7da035399654-image.png]
  • Parser: TV-Sender Fußball Keine Daten mehr ....

    javascript
    1
    2
    0 Stimmen
    1 Beiträge
    177 Aufrufe
    Niemand hat geantwortet
  • [gelöst]: Wie kann man Tibber Durchschnittspreise errechnen?

    2
    1
    0 Stimmen
    2 Beiträge
    255 Aufrufe
    P
    Mein Sohn hat es gelöst: let start = 21 // values 0-23 let timePeriod = 4 // values 1-5 const allPrices = { 0: 0.1, 1: 0.26, 2: 0.32, 3: 0.38, 4: 0.31, 5: 0.122, 6: 0.25, 7: 0.35, 8: 0.177, 9: 0.366, 10: 0.14, 11: 0.288, 12: 0.1, 13: 0.344, 14: 0.1, 15: 0.322, 16: 0.1, 17: 0.377, 18: 0.1, 19: 0.266, 20: 0.1, 21: 0.37, 22: 0.13, 23: 0.25, } const averagePrice = startCalc(start, timePeriod) console.log(averagePrice) function startCalc(start, timePeriod) { const prices = Object.values(allPrices) const earlyTimePeriod = -24 + (start + timePeriod) const lateTimePeriod = 24 - (start) let hourPrices if(earlyTimePeriod <= 0) { // for hours 0-19 hourPrices = calcPrices(prices, 'default', timePeriod, start) } else { // for hours 20-23 let earlyHourPrices = calcPrices(prices, 'early', earlyTimePeriod) let lateHourPrices = calcPrices(prices, 'late', lateTimePeriod) hourPrices = earlyHourPrices + lateHourPrices } return calcAveragePrice(hourPrices, timePeriod) } function calcPrices(pricesArr, checkHours, timePeriod, start) { const prices = checkHours === 'late' ? pricesArr.reverse() : pricesArr const key = start || 0 let sum if(timePeriod === 1) { sum = prices[key] } else if (timePeriod === 2) { sum = prices[key] + prices[key + 1] } else if (timePeriod === 3) { sum = prices[key] + prices[key + 1] + prices[key + 2] } else if (timePeriod === 4) { sum = prices[key] + prices[key + 1] + prices[key + 2] + prices[key + 3] } else if (timePeriod === 5) { sum = prices[key] + prices[key + 1] + prices[key + 2] + prices[key + 3] + prices[key + 4] } return sum } function calcAveragePrice(hourPrices, timePeriod) { const averagePrice = hourPrices / timePeriod return averagePrice } natürlich sollte man oben die Tibber Preise aus den Objekten auslesen und dort einfügen. Die Zahlen sind reine Fantasiezahlen zum Testen
  • Frage zum Unifi-Script

    8
    0 Stimmen
    8 Beiträge
    355 Aufrufe
    A
    @negalein sagte in Frage zum Unifi-Script: Kannst du das noch genauer erklären? Zum kürzen bin ich nicht fit genug in JavaScript :) kannst ja aber im skript in den Einstellungen die Funktionen abschalten die du nicht benötigst. Zu den Vouchers: Habe Standard Vouchers definiert im Skript: const standardVouchers = {"zwei Tage" : {dauer: 2880, anzahl: 1, multiuse: 1, upload: 0, download:0, mb_begrenzung: 0, notiz:"Laufzeit: 2 Tage"}, "vier Tage" : {dauer: 5760, anzahl: 1, multiuse: 1, upload: 0, download:0, mb_begrenzung: 0, notiz:"Laufzeit: 4 Tage"}, "acht Tage" : {dauer: 10500, anzahl: 1, multiuse: 1, upload: 0, download:0, mb_begrenzung: 0, notiz:"Laufzeit: 8 Tage"}, "ein Jahr" : {dauer: 525600, anzahl: 1, multiuse: 1, upload: 0, download:0, mb_begrenzung: 0, notiz:"Laufzeit: 1 Jahr"}} Dann habe ich mir 4 States erstellt welche meine Telegramm instanz ansteuert -WlanCode2d ;4d; 8d; 1Jahr. Darauf reagiere ich mit dem Folgenden Skript: [image: 1707878269587-1.jpg] [image: 1707878307600-2.jpg] Hier das ganze Skript: 1.txt
  • [gelöst]: Stunde aus Zeitobjekt auslesen

    20
    1
    0 Stimmen
    20 Beiträge
    1k Aufrufe
    P
    Ich glaube, ich habe es herausgefunden: type "number" statt "array". Fehlermeldung ist weg! Top
  • [gelöst]Wie Modbus Holding Register für Zeit verändern?

    3
    3
    0 Stimmen
    3 Beiträge
    264 Aufrufe
    P
    Nachtrag: und man muss immer zusätzlich das Register "Load_first_bat_first_grid_first" (bei mir 1044) zum Schreiben der Zeit auf 1 setzen!
  • Array wert entfernen welcher nicht vorkommt

    29
    0 Stimmen
    29 Beiträge
    2k Aufrufe
    T
    @codierknecht sagte in Array wert entfernen welcher nicht vorkommt: @drapo Für eine "sichere Fahrt" ist wohl kaum das Nicht-Vorhandensein von Radarfallen in Deiner Region ausschlaggebend. In der Regel schon - da Sicherheit recht wenig mit dem Geldbedürfnis einiger Gemeinden zu tun hat. Auch nicht mit dem wahllosen verteilen von Schildern. Das muß man aber tatsächlich nicht ansprechen.
  • Bezug/Einspeisung Vorzeichenwechsel

    8
    0 Stimmen
    8 Beiträge
    675 Aufrufe
    D
    @paul53 Es hat jetzt funktioniert mit dem Datenpunkt! Danke dir! VG
  • Schleife um einen Eintrag zurück setzen

    12
    0 Stimmen
    12 Beiträge
    819 Aufrufe
    ofri2607O
    @warhammer73 sagte in Schleife um einen Eintrag zurück setzen: Den ganzen Teil hätte ich dann entweder zweimal im Script oder müsste ihn getrennt auslagern und dann mit Parameter aufrufen der mal Main und mal Room beinhaltet. Würde natürlich auch gehen. Wäre mE strukturierter im Code, wenn du es auf zwei Funktionen aufteilst. Du hast dann auch keine for-Schleife in einer for-Schleife (versuche ich immer so gut es nur geht zu vermeiden) und keine weiteren if-Abfrage und sollte doch ein Zeitproblem auftreten, ist es ganz einfach auf async umzustellen
  • [gelöst] Telegram Reihenfolge Ausgabe falsch

    10
    1
    0 Stimmen
    10 Beiträge
    832 Aufrufe
    haus-automatisierungH
    @drapo nein. Das ändert nur den scope (in diesem fall auch nicht). Var einfach nie benutzten (nur let und const).
  • Netzwerküberwachung mit fb-checkpresence

    1
    0 Stimmen
    1 Beiträge
    264 Aufrufe
    Niemand hat geantwortet
  • Leere Ordner aus Objekt-Struktur löschen

    10
    0 Stimmen
    10 Beiträge
    945 Aufrufe
    fhainzF
    @liv-in-sky Vielen Dank, jetzt funktioniert es auch bei mir. Mein Fehler war, ich habe den 2 Parameter bei deleteObject (rekursives löschen) nicht angegeben.
  • Konvertierung Zeichekette in Zahl

    23
    0 Stimmen
    23 Beiträge
    2k Aufrufe
    D
    @codierknecht genau.. und auf diesem Weg was gelernt

307

Online

32.7k

Benutzer

82.6k

Themen

1.3m

Beiträge