Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Topics 49.1k Posts

NEWS

  • [gelöst] Script findet Datenpunkt nicht

    2
    2
    0 Votes
    2 Posts
    99 Views
    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 Votes
    6 Posts
    633 Views
    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 Votes
    93 Posts
    11k Views
    D
    @liv-in-sky Danke das wars
  • Auflistung von Zuständen einer bestimmten Funktion

    15
    0 Votes
    15 Posts
    354 Views
    Ben1983B
    @martinp ok. Kann ich verstehen… wobei ich nur an 1-2 dropdowns gedacht hätte… aber ok.
  • persist timer

    javascript
    4
    0 Votes
    4 Posts
    386 Views
    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

    Moved javascript
    9
    0 Votes
    9 Posts
    669 Views
    H
    funktioniert...dankeschön!
  • wLED-Abfrage

    13
    1
    0 Votes
    13 Posts
    1k Views
    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 Votes
    9 Posts
    557 Views
    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 Votes
    1 Posts
    177 Views
    No one has replied
  • [gelöst]: Wie kann man Tibber Durchschnittspreise errechnen?

    2
    1
    0 Votes
    2 Posts
    255 Views
    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 Votes
    8 Posts
    355 Views
    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 Votes
    20 Posts
    1k Views
    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 Votes
    3 Posts
    264 Views
    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 Votes
    29 Posts
    2k Views
    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 Votes
    8 Posts
    675 Views
    D
    @paul53 Es hat jetzt funktioniert mit dem Datenpunkt! Danke dir! VG
  • Schleife um einen Eintrag zurück setzen

    12
    0 Votes
    12 Posts
    819 Views
    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 Votes
    10 Posts
    832 Views
    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 Votes
    1 Posts
    264 Views
    No one has replied
  • Leere Ordner aus Objekt-Struktur löschen

    10
    0 Votes
    10 Posts
    945 Views
    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 Votes
    23 Posts
    2k Views
    D
    @codierknecht genau.. und auf diesem Weg was gelernt

620

Online

32.7k

Users

82.6k

Topics

1.3m

Posts