Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 48.3k Beiträge

NEWS

  • JavaScript-Methode für das Auslesen des Objekt-Namens

    8
    1
    0 Stimmen
    8 Beiträge
    556 Aufrufe
    G
    @ticaki Danke dafür. Das sieht sehr interessant aus. Ich werde wohl auch noch Einiges an Syntax von JS/TS lernen. Ich schau es mir nächste Woche im Detail an - diese Woche komme ich nicht mehr dazu
  • Zeiten filtern Array

    53
    0 Stimmen
    53 Beiträge
    5k Aufrufe
    D
    @ticaki @paul53 hab den Fehler bei mir im Code gefunden, danke euch für eure Hilfe!
  • Dateigröße mit Bordmitteln

    15
    0 Stimmen
    15 Beiträge
    671 Aufrufe
    wcag22W
    @asgothian sagte in Dateigröße mit Bordmitteln: Erst einmal danke für die Rückmeldung und die Erklärung. Du musst das was oben steht durchaus auch 'korrekt' umsetzen: Ja klar :-) , aber das war ja eben mein Verständnisproblem Mit dem 'import' befehl importierst du eine Bibliothek. Damit ersetzt import fs from 'fs' nur var fs = require('fs') In der muss dann die Funktion aufgerufen werden die die Daten liefert:: Ok, das haste gut erklärt. Wieder was gelernt. Also danke-danke...
  • Dieses Thema wurde gelöscht!

    0
    0 Stimmen
    0 Beiträge
    2 Aufrufe
    Niemand hat geantwortet
  • [Gelöst] Self signed certificate ignorieren

    3
    1
    0 Stimmen
    3 Beiträge
    232 Aufrufe
    D
    @codierknecht super das war einfach wenn man es weiss 😄 Danke für die Hilfe
  • Fehler bei httpGet(), aber kein Fehlercode

    6
    0 Stimmen
    6 Beiträge
    442 Aufrufe
    ?
    @homoran Ja, das ist nichts geheimes. Kann sich jeder dort einen Token für die API generieren. @Codierknecht Nehme ich eine andere URL (z. B. http://www.aws32.de/) funktioniert alles. (Das ist nur eine meiner leeren Domains)
  • Steuersignale, bzw. Kopplung überwachen

    5
    0 Stimmen
    5 Beiträge
    227 Aufrufe
    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 Stimmen
    9 Beiträge
    510 Aufrufe
    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 Stimmen
    3 Beiträge
    178 Aufrufe
    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 Stimmen
    17 Beiträge
    829 Aufrufe
    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 Stimmen
    19 Beiträge
    1k Aufrufe
    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 Stimmen
    7 Beiträge
    552 Aufrufe
    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 Stimmen
    14 Beiträge
    863 Aufrufe
    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 Stimmen
    4 Beiträge
    345 Aufrufe
    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 Stimmen
    6 Beiträge
    274 Aufrufe
    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 Stimmen
    3 Beiträge
    245 Aufrufe
    F
    @liv-in-sky Das war die Lösung... Vielen Dank :-)
  • Erstellung eines Keyboard Arrays für Telegram

    javascript
    6
    0 Stimmen
    6 Beiträge
    397 Aufrufe
    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 Stimmen
    9 Beiträge
    883 Aufrufe
    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 Stimmen
    5 Beiträge
    276 Aufrufe
    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 Stimmen
    15 Beiträge
    779 Aufrufe
    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.

333

Online

32.4k

Benutzer

81.5k

Themen

1.3m

Beiträge