Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Topics 48.8k Posts

NEWS

  • [gelöst] Typkonvertierung in Typescript

    6
    0 Votes
    6 Posts
    385 Views
    T
    @iob69 https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#best-practice
  • Statistics Daten auf einen anderen Datenpunkt übertragen

    1
    0 Votes
    1 Posts
    234 Views
    No one has replied
  • [Gelöst] Javascript in vis mit button triggern

    javascript
    16
    0 Votes
    16 Posts
    935 Views
    I
    @oliverio @BananaJoe Ok, jetzt klappt es auch mit meinem Button, vielen Dank :-) Musste noch eine Abfrage einbauen, damit die funktion auch nur auf die set-Action reagiert und nicht zweimal: on(DPTestPunkt, async (data) => { if (getState(DPTestPunkt).val) { console.log('button pressed'); setTimeout(function() { setState(DPTestPunkt , false); }, 400); } });
  • Obi Bluetooth Lichterkette in IOBroker integrieren

    4
    1
    0 Votes
    4 Posts
    459 Views
    F
    @oliverio node-ble und noble habe ich zuerst versucht, das hat überhaupt nicht funktioniert, darum bin ich dann auf dbus gewechselt und das hätte auch super funktioniert, wenn ich rausgefunden hätte, wie ich die Befehle im richtigen Format sende. :) Die Lichterkette erwartet nämlich strings und das habe ich einfach nicht hinbekommen und meine online suche hat gezeigt, ich bin da nicht der Einzige. :D Irgendwie ist alles was mit bluetooth zu tun hat immer ein absoluter krampf! Ich habe jetzt eine neue Version die 100% zuverlässig ist, falls das jemand gebrauchen kann: (diese benutzt das gatttool) const { exec } = require('child_process'); // MAC-Adresse des Geräts und Handle der GATT-Characteristic const deviceAddress = '24:35:02:27:DE:6E'; const characteristicHandle = '0x0025'; // Pfade zu den Datenpunkten const datapointOnOff = 'javascript.0.MeineVariablen.Lichterkette_OnOff'; const datapointBrightness = 'javascript.0.MeineVariablen.Lichterkette_Helligkeit'; // Warteschlange und Status const actionQueue = []; let isProcessing = false; // Funktion: Shell-Befehl ausführen mit Debugging und Timeout function executeCommand(command, timeout = 10000) { console.log(`Führe aus: ${command}`); return new Promise((resolve, reject) => { const process = exec(command, (error, stdout, stderr) => { if (error) { console.error(`Fehler: ${stderr || error.message}`); return reject(stderr || error.message); } console.log(`Erfolg: ${stdout}`); resolve(stdout.trim()); }); setTimeout(() => { process.kill('SIGTERM'); reject('Befehl abgebrochen (Timeout)'); }, timeout); }); } // Funktion: GATT-Wert schreiben mit Wiederholungslogik async function writeGattValueWithRetries(value, maxRetries = 10, initialDelay = 500) { let attempts = 0; let delay = initialDelay; while (attempts < maxRetries) { try { console.log(`Versuch ${attempts + 1}/${maxRetries}: Sende GATT-Befehl`); await writeGattValue(value); console.log('Befehl erfolgreich gesendet.'); return; // Erfolgreich, keine weiteren Versuche notwendig } catch (error) { attempts++; console.error(`Fehler beim Senden (Versuch ${attempts}):`, error); if (attempts >= maxRetries) { console.error('Maximale Anzahl an Versuchen erreicht. Abbruch.'); throw new Error('GATT-Befehl konnte nach mehreren Versuchen nicht gesendet werden.'); } console.log(`Warte ${delay} ms vor erneutem Versuch...`); await new Promise((resolve) => setTimeout(resolve, delay)); delay *= 2; // Verzögerung verdoppeln } } } // Funktion: GATT-Wert schreiben async function writeGattValue(value) { const command = `gatttool -b ${deviceAddress} --char-write-req --handle=${characteristicHandle} --value="${value}"`; console.log(`Sende GATT-Befehl: ${command}`); try { const output = await executeCommand(command); console.log(`GATT-Befehl erfolgreich: ${output}`); } catch (error) { console.error('Fehler beim Schreiben auf die GATT-Characteristic:', error); throw new Error('GATT-Wert konnte nicht geschrieben werden.'); } } // Funktion: Helligkeit berechnen function calculateBrightnessHex(brightnessPercent) { const brightnessHex = Math.round((brightnessPercent / 100) * 0x64).toString(16).padStart(2, '0'); return `030101${brightnessHex}`; } // Funktion: Lichterkette steuern async function controlLight(action, brightness = null) { try { if (action) { if (brightness !== null) { const brightnessValue = calculateBrightnessHex(brightness); await writeGattValueWithRetries(brightnessValue); } else { const value = action === 'on' ? '01010101' : '01010100'; await writeGattValueWithRetries(value); } } } catch (error) { console.error('Fehler bei der Steuerung der Lichterkette:', error); } } // Funktion: Warteschlange abarbeiten async function processQueue() { if (isProcessing) return; // Verhindert gleichzeitige Verarbeitung isProcessing = true; while (actionQueue.length > 0) { const { action, brightness } = actionQueue.shift(); // Nächsten Befehl aus der Warteschlange holen console.log(`Verarbeite Aktion: ${action}, Helligkeit: ${brightness}`); await controlLight(action, brightness); } isProcessing = false; } // Datenpunkte erstellen, falls nicht vorhanden createState(datapointOnOff, false, { name: 'Lichterkette On/Off', type: 'boolean', role: 'switch', read: true, write: true, def: false }, () => { // Event Listener für Zustandsänderungen registrieren on({ id: datapointOnOff, change: 'ne' }, async (obj) => { const action = obj.state.val ? 'on' : 'off'; actionQueue.push({ action, brightness: null }); processQueue(); }); }); createState(datapointBrightness, 100, { name: 'Lichterkette Helligkeit', type: 'number', role: 'level.dimmer', read: true, write: true, def: 100, min: 0, max: 100 }, () => { // Event Listener für Helligkeitsänderungen registrieren on({ id: datapointBrightness, change: 'ne' }, async (obj) => { const brightness = obj.state.val; if (brightness < 3) { // Wenn Helligkeit unter 3%, Lichterkette ausschalten console.log('Helligkeit unter 3% - Lichterkette wird ausgeschaltet.'); setState(datapointOnOff, false); // Setzt On/Off-Datenpunkt auf false } else { // Ansonsten Helligkeit setzen actionQueue.push({ action: 'on', brightness }); processQueue(); } }); }); // Debugging: Manuelle Steuerung /*(async () => { try { console.log('Teste Steuerung: Einschalten mit 50% Helligkeit...'); actionQueue.push({ action: 'on', brightness: 50 }); processQueue(); console.log('Teste Steuerung: Ausschalten...'); actionQueue.push({ action: 'off', brightness: null }); processQueue(); } catch (error) { console.error('Fehler bei manueller Steuerung:', error); } })(); */
  • [gelöst] Speedtest-Skript liefert falsche Werte

    7
    1
    0 Votes
    7 Posts
    537 Views
    SKBS
    @thomas-braun Wenns ja dann an einer defekten SSD liegen könnte, könnte man das Thema ja auf "gelöst" setzen ;)
  • Grohe Sense Guard Intelligente Wassersteuerung in Iobroker einlesen...

    13
    0 Votes
    13 Posts
    3k Views
    H
    @e-s Schau ich mir mal an...danke
  • GELÖST Sperriges JSON vom Tasmota Stromzähler Script

    9
    0 Votes
    9 Posts
    623 Views
    paul53P
    @martinp sagte: Ist die Abfrage ob das Attribut gefunden wurde in der Funktion "TestVar" so korrekt? Wenn der Wert 0 kein gültiger Wert ist, funktioniert diese Prüfung. Falls der Wert 0 ein gültiger Wert sein kann, prüfe "MyVal != null". [image: 1732534835615-blockly_temp.jpg]
  • Skript für ParcelAPP iOS (Alternative zum Parcel Adapter)

    1
    11
    0 Votes
    1 Posts
    274 Views
    No one has replied
  • httpGet funktioniert nach update node.js nicht mehr

    4
    0 Votes
    4 Posts
    424 Views
    S
    Zur Info: es scheint kein Problem von httpGet zu sein, wie ich zunächst vermutete, sondern ein Problem der node-sonos-http-api in Verbindung mit Node.js 20. Der Entwickler schrieb mir dazu auf GitHub: I think this is related to this global change in Node 20: nodejs/node#43522 The Sonos players probably doesn't like keep-alive, and might not properly respond with a Connection: close. The http api will maintain connections and try to send new requests over the old socket and probably confusing the player. Since this only affects requests that happen within 30-90 seconds (not sure what the default timeout is), this might appear random. I'll see if I can reproduce it, I haven't run this project under newer Node.js versions in a long time. Hat jemand ähnliche Probleme mit der node-sonos-http-api?
  • Skript für Sonnenwenden, Tagundnachtgleiche und Jahreszeiten

    1
    2
    3 Votes
    1 Posts
    309 Views
    No one has replied
  • Cronjobs anzeigen [gelöst]

    20
    0 Votes
    20 Posts
    1k Views
    J
    @paul53 Brauche keine Scriptgrenzen überschreiten, sondern nur in einem Script mehrere JS-Script Funktionen. Hab alles erledigt, sitze nun am nächsten Problem, welches noch einmal kniffliger ist. Dazu mache ich einen neuen Thread auf. Danke Dir jedenfalls! Du hast mir wieder sehr weitergeholfen!
  • Modul durch module.exports und require einbinden

    6
    0 Votes
    6 Posts
    642 Views
    T
    @franzda Das was paul geschrieben hat und das hier: Da gehts um eigene externe Module, Klassen und TS. https://forum.iobroker.net/post/1078253 Edit: habs selbst nochmal gelesen ist noch immer interessant, was man nicht alles vergisst.
  • Plötzlich ReferenceError: request is not defined

    75
    1
    0 Votes
    75 Posts
    12k Views
    K
    @root_ Ich benutzte das Script, um mir von tibber den SOC meines Polestar 2 abzurufen. Mittlerweile gibt es eine direkte API, mit der ich über HA und evcc darauf zugreife. Deshalb muss ich den Umweg über tibber nicht mehr gehen. Hatte eh das Problem, dass wenn die Kommunikation zwischen den tibber- und Polestar-Apps auf meinem Handy nicht klappt, ich keine Daten in evcc hatte. Das ist jetzt auch Vergangenheit.
  • Trigger stoppen / löschen

    4
    0 Votes
    4 Posts
    364 Views
    T
    @dan78 Mir fällt kaum ein Grund ein warum in einem Trigger einen anderen Trigger aktivieren soll außer halt das was ich dem BWM Skript oben habe: Trigger BWM an -> Trigger auf BMWs werden gesetzt Trigger BWM aus -> alle Trigger auf BWMs werden entfernt. Naja bin das aber gerade am entfernen, weil sich da nach nem Jahr wieder einzulesen ist nervig. Ne Variable ist schneller verstanden.
  • Problem mit "Fenster offen Script"

    71
    1
    0 Votes
    71 Posts
    4k Views
    werner2000xW
    @paul53 sorry, habe falsch eingefügt. Jetzt klappt es. :-)
  • Hue Lampe alle Zustände auslesen (und später zurückspielen)

    4
    0 Votes
    4 Posts
    354 Views
    Ro75R
    @fenderbender OK, aber für was alles sich merken wollen. Bisherige(n) Wert(e) merken - so viele können es sein - neuen Wert setzen und wenn fertig alte Werte wieder rein. Das sind maximal drei Werte. Ro75
  • VIS Slideshow funktioniert nicht mehr

    6
    1
    0 Votes
    6 Posts
    389 Views
    T
    @arteck @Homoran Also, da lag tatsächlich der Fehler... Ihr seit TOP !! Vielen Dank.
  • Hilfe für Javascript nicht Versteher

    6
    0 Votes
    6 Posts
    499 Views
    A
    @nape1 Hallo Ich habe das gleiche Problem das das script nicht lauft. Habe es dann hir gelesen mit dem c. Bekommst du mittlerweile Daten aus der WP ich bin zwar verbunden aber so wie Beschrieben mit einzelne Daten bekomme ich nichts laut Bespreibung auf der Wiki Seite. Villeicht kannst mir helfen fals du es hinbekommen hast. mfg Andi
  • Signal über Beendigung eines Skriptes

    javascript
    3
    0 Votes
    3 Posts
    155 Views
    2
    @paul53 Genau das habe ich gesucht. Besten Dank!
  • This topic is deleted!

    6
    -1 Votes
    6 Posts
    33 Views

511

Online

32.6k

Users

82.1k

Topics

1.3m

Posts