Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Topics 48.5k Posts

NEWS

  • Steuersignale, bzw. Kopplung überwachen

    5
    0 Votes
    5 Posts
    229 Views
    H
    @haus-automatisierung ich wollte einen Schritt weiter auswerten. Also nicht, ob alles versendet wurde, sondern ob alles beim Empfänger ankam und der Empfänger dies bestätigte. Es geht um den Adapter „Fronius Wattpilot“. Besonderheit ist, dass Signale nicht direkt in den zugehörigen Datenpunkt geschrieben werden, sondern in einem Befehls-DP übergeben werden. z.B. um in den DP „psm“ eine 2 zu schreiben, muss ich in den DP „set_state“ den Befehl „psm;2“ schreiben.
  • [gelöst] Zeichenfolge aus iCal und DP setzten

    9
    0 Votes
    9 Posts
    533 Views
    AsgothianA
    @australien interessant - aber das zurück setzen sollte wegen der kurzen Zeitspanne (1 Min) direkt im Code-Pfad des setzen passieren. Dafür einen extra cron anzulegen ist eher wenig Sinnvoll. Timeout ist da besser /* Es wird die Instanz iCal.2 auf die Werte VIE-FRA oder VIE-MUC durchsucht. Falls ein Eintrag mit Beginn vor 07:01 gefunden wird, wird der Datenpunkt Frühaufsteher für die Umwälzpumpe aktiviert. Es wird auch die Zeit des Auslöseereignisses gespeichert. {1} Version 1.2. 24.01.2025 */ // Definiere hier die Minuten, um wie viele Minuten vor dem Event der Datenpunkt gesetzt werden soll const minutesBefore = 150; // Variablen für die Cron-Handles (wird beim Skriptstart auf undefined gesetzt) let cronHandle; let cronHandleReset; // Dieser Code wird ausgeführt, wenn sich der Datenpunkt 'ical.2.data.table' ändert on({id: 'ical.2.data.table', change: 'ne'}, function (obj) { let icalData = obj.state.val; // Die neuen Daten des iCal-Datenpunkts // Überprüfen, ob icalData ein Array ist if (Array.isArray(icalData)) { // Durchlaufe die ical-Daten und extrahiere die relevanten Informationen for (let event of icalData) { // Hole die Zusammenfassung des Ereignisses let eventSummary = event._object && event._object.summary ? event._object.summary.val : undefined; // Prüfe, ob ein gültiger eventSummary vorhanden ist if (typeof eventSummary === 'string') { // Hole die Startzeit und konvertiere sie in ein Date-Objekt let eventStart = event._object && event._object.start ? new Date(event._object.start) : undefined; if (eventStart) { // Definiere die Vergleichszeit (07:01) let compareTime = new Date(); compareTime.setHours(7, 1, 0, 0); // 07:01:00 am aktuellen Tag // Überprüfen, ob das Event VIE - FRA oder VIE - MUC ist und die Startzeit vor 07:01 liegt const flightDestinations = ['VIE - FRA', 'VIE - MUC']; // Liste der möglichen Flugziele if (flightDestinations.some(destination => eventSummary.includes(destination)) && eventStart < compareTime) { // Berechne den Zeitpunkt x Minuten vorher let activationTime = new Date(eventStart.getTime() - minutesBefore * 60 * 1000); // Prüfe, ob der berechnete Zeitpunkt in der Zukunft liegt let now = new Date(); if (activationTime > now) { // Berechne das Event-Datum und die Startzeit als String const eventDay = activationTime.toLocaleDateString('de-DE', {year: 'numeric', month: '2-digit', day: '2-digit'}); const eventStartTime = activationTime.toLocaleTimeString('de-DE', {hour: '2-digit', minute: '2-digit'}); // Setze die Startzeit in den ioBroker-Datenpunkt earlybird_time setState('0_userdata.0.Kalender_options.Reisen.earlybird_time', eventStartTime); // Lösche den vorherigen Cron-Job, falls vorhanden if (cronHandle) clearSchedule(cronHandle); // Erstelle einen neuen Cron-Schedule, um earlybird auf true zu setzen cronHandle = schedule( `{"time":{"exactTime":true,"start":"${eventStartTime}"},"period":{"once":"${eventDay}"}}`, async () => { // Setze earlybird auf true setState('0_userdata.0.Kalender_options.Reisen.earlybird', true); // Ausgabe zur Bestätigung console.log(`earlybird für ${eventSummary} ausgelöst um ${eventStartTime}.`); // Berechne die Zeit, wann earlybird auf false gesetzt wird (1 Minute später) let resetTime = new Date(activationTime.getTime() + 1 * 60 * 1000); const resetDay = resetTime.toLocaleDateString('de-DE', {year: 'numeric', month: '2-digit', day: '2-digit'}); const resetTimeStr = resetTime.toLocaleTimeString('de-DE', {hour: '2-digit', minute: '2-digit'}); // Lösche den vorherigen Reset-Cron-Job, falls vorhanden if (cronHandleReset) clearTimeout(cronHandleReset); // Erstelle einen neuen Cron-Schedule, um earlybird auf false zu setzen cronHandleReset = setTimeout(async () => { setState('0_userdata.0.Kalender_options.Reisen.earlybird', false); console.log(`earlybird für ${eventSummary} um ${resetTimeStr} wieder deaktiviert.`); }, 3600000); console.log(`Cron-Schedule für Reset von earlybird gesetzt: ${eventSummary} wird am ${resetDay} um ${resetTimeStr} deaktiviert.`); } ); console.log(`Cron-Schedule für earlybird gesetzt: ${eventSummary} wird am ${eventDay} um ${eventStartTime} ausgelöst.`); } else { console.log(`Aktivierungszeitpunkt für ${eventSummary} liegt in der Vergangenheit. earlybird wird sofort aktiviert.`); // Wenn der Zeitpunkt in der Vergangenheit liegt, sofort setzen let eventStartTime = eventStart.toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'}); setState('0_userdata.0.Kalender_options.Reisen.earlybird_time', eventStartTime); setState('0_userdata.0.Kalender_options.Reisen.earlybird', true); // Berechne die Zeit, wann earlybird auf false gesetzt wird (1 Minute später) let resetTime = new Date(now.getTime() + 1 * 60 * 1000); const resetTimeStr = resetTime.toLocaleTimeString('de-DE', {hour: '2-digit', minute: '2-digit'}); // Lösche den vorherigen Reset-Cron-Job, falls vorhanden if (cronHandleReset) clearTimeout(cronHandleReset); // Erstelle einen neuen Cron-Schedule, um earlybird auf false zu setzen cronHandleReset = setTimeout(async () => { setState('0_userdata.0.Kalender_options.Reisen.earlybird', false); console.log(`earlybird für ${eventSummary} um ${resetTimeStr} wieder deaktiviert.`); }, 3600000); console.log(`earlybird für ${eventSummary} wird sofort ausgelöst und am ${resetTimeStr} zurückgesetzt.`); } } } else { console.warn(`Kein gültiger Startzeitpunkt für das Ereignis ${eventSummary}`); } } } } else { console.error('Fehler: ical.2.data.table enthält keine gültigen Array-Daten.'); } });
  • Raum und Funktion unter 0_userdata anpassen

    3
    2
    0 Votes
    3 Posts
    178 Views
    T
    async function addToEnum(enumName, newStateId) { if (!await existsObjectAsync(newStateId)) { log(newStateId + ' not exist!', 'warn') return; } let myEnum = await getObjectAsync(enumName); if (myEnum) { let pos = myEnum.common.members.indexOf(newStateId); if (pos === -1) { try { myEnum.common.members.push(newStateId); myEnum.from = "system.adapter." + "0"; myEnum.ts = new Date().getTime(); //@ts-ignore await setObjectAsync(enumName, myEnum); } catch (e) {log(e + ' add id: ' + newStateId,'error')} } } } so wirds benutzt: const enumFunctions = 'online' ... for (const idPart of watchingDevice.states) { let s = Array.prototype.slice.apply($('state(id='+idPart+')')) for (const id of s) { await addToEnum('enum.functions.'+enumFunctions,id) } } Ich füge dort States die ich raus gefiltert habe, der Gruppe überwachung hinzu. Ist auch 2 Jahre alt, heute geht ja selector.toArray()
  • [Q] Email- Attachment als Variable ?

    17
    0 Votes
    17 Posts
    882 Views
    wcag22W
    @codierknecht sagte in [Q] Email- Attachment als Variable ?: Darum läuft das in meinem Beispiel erst, wenn des exec ein Ergebnis gemeldet hat. Ah...ok. Dann muss ich mir DAS nochmal genauer ansehen. Tnx für den Hinweis. PS: Du meinst den function (error) - Zweig? PPS: Habe nochmal umgebastelt und Deine exec Version übernommenn. Lediglich das Zusammenbasteln des Dateinamens habe ich ausgelagert / beibehalten.
  • Namenskonflikte???

    19
    1
    0 Votes
    19 Posts
    1k Views
    T
    @ralf-2 Nur die javascript.d.ts. Das sind auch die Typen die für Systemfunktionen zur Verfügung stehen. Wüsste jetzt nicht was da fehlt. Übersicht müsste jemand machen. :) https://github.com/ioBroker/ioBroker.javascript/blob/master/lib/javascript.d.ts
  • [Gelöst] JS Funktion

    7
    1
    0 Votes
    7 Posts
    569 Views
    F
    @paul53 said in JS Funktion: !!val Es ist bitter wie einfach die Lösung sein kann :dart: Vielen Dank! :-)
  • Anpassung eines Scripts / Hilfe benötigt

    14
    0 Votes
    14 Posts
    891 Views
    paul53P
    @opöl sagte: unabhängig davon, ob es einen „von“ und „nach“ Datenpunkt gibt. Ich habe mir nicht das komplette Skript angesehen.
  • [Gelöst] JavaScript für Jarvis Benachrichtigung

    4
    1
    0 Votes
    4 Posts
    364 Views
    F
    @firechumper said in JavaScript für Jarvis Benachrichtigung: ring.0.doorbell_609102320.HD Snapshot.file Das war die Lösung! 1000 Dank <3
  • Wie beim Selector keine EIntrag abfangen?

    6
    0 Votes
    6 Posts
    274 Views
    T
    @ben1983 Ich benutze nie funktionen dahinter :D immer for (let i = 0 ... das toArray() wird aber jetzt immer hinzugefügt - dann geht for (const x of xxx)
  • [gelöst] Telegram InlineKeyboard

    3
    0 Votes
    3 Posts
    255 Views
    F
    @liv-in-sky Das war die Lösung... Vielen Dank :-)
  • Erstellung eines Keyboard Arrays für Telegram

    javascript
    6
    0 Votes
    6 Posts
    399 Views
    L
    @ticaki sagte in Erstellung eines Keyboard Arrays für Telegram: const a = '["button1", "Button2"]#' // den Fehler sieht man wohl try { const arr = JSON.parse(a); } catch { log('ich habs gesagt :)') } Perfekt! Danke das hatte mir gefehlt. :hugging_face: @liv-in-sky danke schön :blush: die ticaki Lösung ist übersichtlicher
  • Script zum Steuern von Blauberg Wohnrauzmlüftern

    9
    2
    0 Votes
    9 Posts
    905 Views
    N-b-dyN
    Auch wenn das ein altes Thema ist, ggf. finden sich hier gewillte Tester :) https://forum.iobroker.net/topic/78967/test-adapter-oxxify-fan-control-v0-0-x-github-latest
  • Shelly3EM Wert TotalconsumedPower nach CCU

    5
    0 Votes
    5 Posts
    287 Views
    U
    @paul53 Danke ! hat funktioniert! ich denke was das Problem ist mit den Werten, scheinbar muss man gleich am Anfang beim Anlegen der Systemvariable den richtigen Maximalwert angeben, und ich hatte 65000 angegeben. wenn man die später ändert werden die nicht im IO broker bei Objekten geändert. Hab mal geschaut dort stand immer noch 65000 obwohl in der der CCU den Wert erhöht hatte.
  • setState()-Aufrufe haben immer ack == true

    15
    0 Votes
    15 Posts
    819 Views
    S
    @paul53 said in setState()-Aufrufe haben immer ack == true: @ticaki sagte: und nur durch das bestätigen ändert sich ja nicht der Wert... Das war meine Aussage. Nur, wenn sich der Wert durch manuelle Betätigung vor Ort ändert, kommen change: 'ne', ack: true von "zigbee.0" gleichzeitig. Ja, danke nochmal. Auch das ist korrekt, da hatte ich auch erst einen Denkfehler.
  • mails mit Variable via JS

    11
    0 Votes
    11 Posts
    469 Views
    U
    @paul53 ja Zeitzone Stimmt aber es gab noch irgenwie ein Leerzeichen was vom Kopieren Scipt hab nochmal alles "gewaschen" im Editor, ging jetz erstmal beim Test. Hab aber noch was festgestellt die Uhr im win 10 Pro geht immer ca 2 Min vor auch wenn ich in Einstellungen auch Synchronisieren mit ptbtime1.ptb.de gehe, den NTP Server habe ich auch im Synology , Also alle Zeiten stimmer überein IPhone Raspimatic, Synology, IOBroker nur Win10 eben nicht.
  • Script Influxdb Fehler timeout

    1
    1 Votes
    1 Posts
    185 Views
    No one has replied
  • negative Werte aus Shelly3EM an iobroker und an CCU

    1
    0 Votes
    1 Posts
    152 Views
    No one has replied
  • sunrise sunset unbrauchbar

    14
    0 Votes
    14 Posts
    649 Views
    HomoranH
    @martinp sagte in sunrise sunset unbrauchbar: @georgenewman Bitte "Gelöst" im Thread-Titel ergänzen gelöst ist es nicht wenn due Ursache nicht erkannt wurde. Das wäre jetzt höchstens für @GeorgeNewman erledigt
  • Probleme mit set Object beim theObject.common.custom Bereich

    1
    0 Votes
    1 Posts
    149 Views
    No one has replied
  • Javascript adapter startet nach update nicht mehr

    6
    1
    0 Votes
    6 Posts
    334 Views
    HomoranH
    @ticaki sagte in Javascript adapter startet nach update nicht mehr: meine Frage zielt auf das hier ab: Ach so! aber ein Gesamtüberblick schadet nicht. Wir wissen ja gar nichts über die Installation von @Jan-Puchta

391

Online

32.5k

Users

81.6k

Topics

1.3m

Posts