Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 49.1k Beiträge

NEWS

  • MS-SQL Daten in State schreiben

    13
    0 Stimmen
    13 Beiträge
    949 Aufrufe
    B
    @paul53 Try´n Error hats gebracht....Total simpel when man SQL Coden kann :grinning: ich kanns jedenfalls nicht. +1 Tag (+1 an der Stelle im Skript einfügen) 'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))+1', function (result) { 2 Tage 'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))+2', function (result) { Edit: Ich versuche gerade das Skript nach einem Zeitplan auszuführen, bekomme es aber irgenwie nicht hin. Habe oben rechts über die Uhr sowohl den Wizard, als auch Einfach versucht. Zum test auch jede Minute. Tut sich aber nichts. Ich hab auch versucht den javascript Adapter alle Minute neuzustarten....Das klappt ist aber nicht ganz Sinn der Sache. (Denke ich) Hat jemand eine Idee? '{"time":{"exactTime":true,"start":"01:00"},"period":{"days":1,"dows":"[1, 2, 3, 4, 5]"}}' sendTo('sql.0', 'query', 'use sag SELECT validfrom, comfortcode FROM dbo.tgcs WHERE DATEADD(DAY, 0, DATEDIFF(DAY, 0, validfrom)) = DATEADD(DAY, 0, DATEDIFF(DAY, 0, GETDATE()))', function (result) { if (result.error) { console.error(result.error); } else { // show result console.log('Rows: ' + JSON.stringify(result.result)); setState('0_userdata.0.heutiges_datum.validfrom', formatDate(result.result[0].validfrom, 'DD.MM.YY'), true); setState('0_userdata.0.heutiges_datum.comfortcode', result.result[0].comfortcode, true); } }); @paul53 hast du mir hier ein Tipp?
  • getIDs() Funktion nicht verfügbar

    12
    0 Stimmen
    12 Beiträge
    781 Aufrufe
    haus-automatisierungH
    @kamikaze Habs mal angepasst: https://github.com/ioBroker/ioBroker.javascript/pull/1829
  • Shellypw/ mqtt einstellungen ändern.

    1
    0 Stimmen
    1 Beiträge
    110 Aufrufe
    Niemand hat geantwortet
  • [gelöst] Axios implementieren

    14
    1
    0 Stimmen
    14 Beiträge
    687 Aufrufe
    T
    @ben1983 Ja, aber wie oben geschrieben,wenn du den wled adapter von mir nimmst, gibt es einen State in dem du das Json rein wirst und es wird dann über die websocket verbindung vom wled adapter versendet: https://github.com/ticaki/ioBroker.wled Die PR ist ist beim Dutchman eingereicht, mal sehen wann er es added. mich hats genervt das "an" "helligkeit" "preset" in 3 Stufen ausgeführt wird... Deshalb nen State eingebaut dem ich dann so die Daten übergebe: setState(`${light.id}.action`, JSON.stringify({ "bri": bri, "on": lOn, 'ps': cArray[2], 'transition': 1 })) Das sollte auch für Steuerung von einzelnen LED's gut sein.
  • Fenster offen Script

    11
    0 Stimmen
    11 Beiträge
    984 Aufrufe
    T
    ich würde ja in so Skripts noch ein schedule('1 1 * * *', () => {startScript(name);} einbauen - dann braucht man auch nicht ans neustarten zu denken, wenn man 6 Monate später mal nen Sensor austauscht :)
  • Syrlex Plus 10 connect SL - App reverse engineering

    15
    1
    1 Stimmen
    15 Beiträge
    1k Aufrufe
    ?
    @tombox 1000 Dank!!!
  • Java Script - Objekt JSON

    8
    0 Stimmen
    8 Beiträge
    389 Aufrufe
    OliverIOO
    @schmidiv Da es jetzt noch nicht so deutlich da stand. Du legst einen Datenpunkt unter 0_userdata mit Typ String/Text an Den Wert kannst du mit getState und setState lesen und schreiben. Ein json Objekt das als Text vorliegt kannst du mit JSON.parse in ein Objekt umwandeln und vor dem Schreiben wieder mit JSON.stringify in Text umwandeln. Das ist einfacher wie mit getObject und extendObject zu hantieren.
  • JavaScript-Methode für das Auslesen des Objekt-Namens

    8
    1
    0 Stimmen
    8 Beiträge
    652 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
    693 Aufrufe
    R
    @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
    272 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
    485 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
    261 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
    619 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
    181 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
    1k Aufrufe
    R
    @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
    644 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
    1k Aufrufe
    paul53P
    @opöl sagte: unabhängig davon, ob es einen „von“ und „nach“ Datenpunkt gibt. Ich habe mir nicht das komplette Skript angesehen.

606

Online

32.7k

Benutzer

82.5k

Themen

1.3m

Beiträge