Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Topics 48.5k Posts

NEWS

  • [gelöst] desc aus Datenpunk auslesen

    11
    0 Votes
    11 Posts
    531 Views
    haus-automatisierungH
    @iob69 sagte in [gelöst] desc aus Datenpunk auslesen: Weiss jemand noch, ob man beim Erstellen eines Status diesen gleich in die history aufnehmen kann (programmatisch) und wenn ja, wie man die Parameter (wie geloggt wird) mitgeben kann? Am einfachsten per sendTo an die History-Instanz: https://github.com/ioBroker/ioBroker.history/blob/master/docs/de/README.md#verlaufsprotokollierung-über-javascript Ich würde nicht direkt die custom Optionen auf dem Objekt setzen (ggf. bekommt das die Instanz dann gar nicht mit und würde das Objekt erst nach einem Neustart der Instanz berücksichtigen).
  • Auslesen von Wert eines Objektes

    4
    0 Votes
    4 Posts
    201 Views
    snakepitnetworkS
    Ich danke Euch schon mal für die Aufklärung, ich probiere es gleich mal aus und gebe Rückmeldung!
  • Skript zur Visualisierung von Sendungen (Parcel-Adapter)

    55
    6
    2 Votes
    55 Posts
    6k Views
    Ro75R
    @matze55 alles was du wissen musst und was gebraucht wird, findest du im ersten Post. Ro75.
  • sento to photo

    5
    0 Votes
    5 Posts
    388 Views
    M
    @kellerkind-86 Sehr einfach ist auch die Variante über den Reolink Adapter /*****Bewegung Teich **************************************************** * Mai 2025 * Adapter: Reolink * geä: *************************************************************************/ const idtuer ="hm-rpc.0.LEQ1176852.1.STATE" const idmotion = "reolink.0.sensor.motion" on({ id: idmotion, change: "any" }, function (obj) { if ((obj.state.val == true) && getState(idtuer).val == false) { log("Motion Teich") sendTo("reolink.0", { action: "snap" }, function (result) { const buffer = Buffer.from(result.base64, "base64"); sendTo('telegram.0', { text: buffer, type: "photo", caption: 'Teich' }); }); } });
  • channelName von einem State holen

    6
    0 Votes
    6 Posts
    361 Views
    mcm1957M
    @ben1983 nur falls es nicht klar ist Ein state muss sich nicht unterhalb eines devices oder channels befinden.
  • Passwort Schutz javascript

    security
    10
    1 Votes
    10 Posts
    693 Views
    mcm1957M
    @peterfido Ja - das kann aber durchaus der Betreuer sein. Es muss nicht der "user" sein. Sollte auch mit fernwartung gehen. Aber das ist m.E. ein anderes Thema. Derzeit ist mir jedenfalls keine Möglichkeit bekannt das Ändern von Scripts / Blocklies zu sperren außer den Zugang zum System (via admin Passwort) zu sperren. Ich galub das beantwortet die urspüngliche Frage.
  • Smartfox Pro XML keine Daten

    Moved
    6
    0 Votes
    6 Posts
    315 Views
    OliverIOO
    @peterfido ja genau. ich hätte noch dazu schreiben sollen das ich hiermit die TLDs meine. @oliverio sagte in Smartfox Pro XML keine Daten: In Lan haben die meisten Geräte lan oder local Leider erst seit kurzem mit internal standardisiert, aber keine Pflicht https://www.heise.de/news/Ueberfaellig-ICANN-legt-sich-auf-Namen-fuer-interne-Domain-fest-9612253.html
  • Erste Schritte beim Scripten - Einsteigerfrage

    43
    0 Votes
    43 Posts
    4k Views
    D
    @doppellhelix Nach langer Sucherei habe ich es gefunden. Ich hatte im Adapter pv.forecast nicht den Haken gesetzt bei: "Werte in W statt kW." :face_palm:
  • regex von "www.esyoil.com"

    28
    1
    0 Votes
    28 Posts
    2k Views
    OliverIOO
    @haus-automatisierung Hab ich mir gedacht. Wie gesagt, es verhindert Adapter Updates. Sobald der Adapter maintainer es eingebaut hat ist es dann nicht mehr empfohlen sondern für Nutzer Pflicht um weitere Updates zu erhalten
  • Datentyp eines Boolean Datenpunktes ist String?

    7
    0 Votes
    7 Posts
    438 Views
    I
    @paul53 Ja, aber wie ich geschrieben hab, ordnet der wahr/falsch eben 1/0 zu und nicht true/false. Bin gerade am überlegen, ob ich auf vis2 oder webui wechsle. Die Controls in vis fühlen sich ziemlich gebastelt an und sind nicht standardisiert. (jqui-widgets haben alle andere Grössen und Stile, mal kann man jQuery style rausnehmen, mal nicht usw). Aber ich weiss nicht wie aufwendig es ist, meine rund 30 Seiten auf ein anderes gui umzustellen....
  • Skript läuft seit heute nicht mehr

    21
    0 Votes
    21 Posts
    2k Views
    M
    // Datenpunkte anlegen (Kann unter Umständen auskommentiert werden, wenn die Datenpunkte manuell angelegt wurden.) createState( trigger_auto, false, {name: 'Datenpunkt zur autmatischen Auslösung'}); createState( trigger_manu, false, {name: 'Datenpunkt zur manuellen Auslösung'}); createState( trigger_more_img, false, {name: 'Datenpunkt zur Abfrage weiterer Bilder'}); createState( disable, false, {name: 'Aktivierung/Deaktivierung des Versands per telegram'}); // Variablendeklaration und Initialisierung bei Scriptstart var stateTrigger_auto = getState(trigger_auto).val; var stateTrigger_manu = getState(trigger_manu).val; var stateTrigger_more_img = getState(trigger_more_img).val; var stateDisable = getState(disable).val; var request = require('request'); var fs = require('fs'); var timer; // Funktionen // ------------------------------------------- // Funktion Bilder versenden function sendImage (pfad) { setTimeout(function() { sendTo('telegram.4', { text: pfad, // reply_markup: { // keyboard: [ // ['Mehr Bilder', 'Danke'] // ], // resize_keyboard: true, // one_time_keyboard: true // } }); log('Webcam Bild per telegram verschickt.'); }, 2000); } // Funktion Bilder speichern function saveImage() { //get({url: cam_img, encoding: 'binary'}, function (err, response, body) { httpGet(cam_img, { responseType: 'arraybuffer' }, async (err, response) => { writeFile(img_path + 'cam1_1.jpg', body, 'binary', function(err) { if (err) { log('Fehler beim Speichern von Bild 1: ' + err, 'warn'); } else { log('Bild 1 gespeichert.'); sendImage(img_path + 'cam1_1.jpg'); } }); }); if (timer) { clearTimeout(timer); timer = null; } timer = setTimeout(function () { //get({url: cam_img, encoding: 'binary'}, function (err, response, body) { httpGet(cam_img, { responseType: 'arraybuffer' }, async (err, response) => { writeFile(img_path + 'cam1_2.jpg', body, 'binary', function(err) { if (err) { log('Fehler beim Speichern von Bild 2: ' + err, 'warn'); } else { log('Bild 2 gespeichert.'); } }); }); }, interval); timer = setTimeout(function () { // get({url: cam_img, encoding: 'binary'}, function (err, response, body) { httpGet(cam_img, { responseType: 'arraybuffer' }, async (err, response) => { writeFile(img_path + 'cam1_3.jpg', body, 'binary', function(err) { if (err) { log('Fehler beim Speichern von Bild 3: ' + err, 'warn'); } else { log('Bild 3 gespeichert.'); } }); }); }, 2 * interval); } // Trigger für die verschiedenen Aktionen // ------------------------------------------- // trigger_auto on(trigger_auto, function(dp) { stateTrigger_auto = dp.newState.val; stateDisable = getState(disable).val; if (stateTrigger_auto === true && stateDisable === false) { saveImage(); // setState(trigger_auto, false); // Option zum Zurücksetzen des Triggers. Standardmäßig auskommentiert, da sich der Bewegungsmelder automatisch zurück setzt. Bei Bedarf "//" am Zeilenafang entfernen. } }); // trigger_more_img on(trigger_more_img, function(dp) { stateTrigger_more_img = dp.newState.val; if (stateTrigger_more_img === true) { sendImage(img_path + 'cam1_2.jpg'); sendImage(img_path + 'cam1_3.jpg'); setState(trigger_more_img, false); } }); // trigger_manu on(trigger_manu, function(dp) { stateTrigger_manu = dp.newState.val; if (stateTrigger_manu === true) { saveImage(); setState(trigger_manu, false); } });
  • Alternative für createState (da deprecated)

    9
    0 Votes
    9 Posts
    626 Views
    mcm1957M
    @paul53 said in Alternative für createState (da deprecated): Das sollte wegen Abwärtskompatibilität unterbleiben! Major Releases können und werden immer wieder mal Breaking Changes enthalten. Das ist hier aber nicht wirklich das Thema. Der TE sollte nur mal seine Java Script Version 7 (!) aktualisieten. Dass diese mit js-controller 8 ggF inkompatibel werden könnte (betone könnte, derzeit ist mir das nicht bekannt) ist nicht auszuschliessen.
  • [gelöst/verschwunden] Warnung bei setState eines Alias

    javascript
    9
    0 Votes
    9 Posts
    641 Views
    SchmakusS
    Leute, was soll ich sagen….. Problem hat sich in Luft aufgelöst. Keine Ahnung. War von heute auf morgen verschwunden. 🤷‍♂️🤷‍♂️
  • Dateien kopieren mit Fehlerauswertung stdout,stderr,error

    7
    1
    0 Votes
    7 Posts
    428 Views
    OliverIOO
    @martinsu Oh Mann. Lese meinen ersten Post nochmal gaaaaanz genau durch. Ganz speziell den Part wo ich das Wort sudo erwähnte. Auch lese die Beschreibung von rsync mal genau durch, Du scheinst die Funktionsweise noch nicht ganz verstanden haben. Woher soll dieser Befehl den nun wissen von wo nach wohin er da was kopieren soll? Auch würde ich ihn nicht mit ssh ausführen. Rsync kann selbst ssh und wendet das beim kopieren auch an, wenn du die richtigen Parameter angibst. Alle Befehle des JavaScript Adapters werden mit dem Benutzer iobroker auf dem lokalen Rechner ausgeführt. Ausprobieren kannst du die shellbefehle wenn du auf der Konsole sudo -u iobroker bash Ausführst. Dann bist du mit der Berechtigung iobroker unterwegs und du kannst rsync oder ssh ausprobieren.
  • Hoymiles WR mit 1600W regeln

    3
    0 Votes
    3 Posts
    259 Views
    agreenA
    Da du sowieso OPENDTU verwendest, verwende OpenDTU on Battery. Damit kannst du den Wechselrichter nach aktuellem Strombedarf steuern. https://github.com/hoylabs/OpenDTU-OnBattery
  • Probleme getHistory im History Adapter v3.0.1- Invalid call

    Moved
    9
    0 Votes
    9 Posts
    607 Views
    G
    @paul53, @Homoran Kurzes Update: async function erstelleUndLoggeTestDatenpunkt() { const testDpId = '0_userdata.0.testVerlaufDp'; // Erstelle den Datenpunkt, falls er noch nicht existiert const existiert = await existsStateAsync(testDpId); if (!existiert) { await createStateAsync(testDpId, 0, { name: 'Test Verlauf Datenpunkt', type: 'number', role: 'state', read: true, write: true, }); log(`Datenpunkt ${testDpId} wurde erstellt.`); } // Protokolliere einige Werte mit Zeitstempeln const jetzt = Date.now(); await setStateAsync(testDpId, { val: 10, ack: false, ts: jetzt - 60000 }); // Protokolliere Wert 10 vor einer Minute await setStateAsync(testDpId, { val: 20, ack: false, ts: jetzt - 30000 }); // Protokolliere Wert 20 vor dreißig Sekunden await setStateAsync(testDpId, { val: 30, ack: true, ts: jetzt }); // Protokolliere Wert 30 jetzt log('Rufe leseTestVerlauf auf...'); // Versuchen wir nun, den Verlauf dieses Datenpunkts abzurufen await leseTestVerlauf(testDpId); } async function leseTestVerlauf(dpId) { log('Testausgabe leseTestVerlauf'); const historyInstanz = 'history.0'; const jetzt = Date.now(); const startZeit = jetzt - 120000; // Lese Verlauf der letzten zwei Minuten const endZeit = jetzt; const optionen = { start: startZeit, end: endZeit, aggregate: 'none', addId: true, returnNewestEntries: false, }; log(`Versuche Verlauf für ${dpId} abzurufen...`); log(`Sende an ${historyInstanz} 'getHistory' mit Optionen (verschachtelt): ${JSON.stringify({ id: dpId, options: optionen })}`); try { const verlaufsDaten = await sendToAsync(historyInstanz, 'getHistory', { id: dpId, options: { ...optionen } }); log(`Verlaufsdaten (raw) für ${dpId}: ${JSON.stringify(verlaufsDaten)}`); if (verlaufsDaten && verlaufsDaten.result) { log(`Verlaufsdaten für ${dpId}: ${JSON.stringify(verlaufsDaten.result)}`); } else { log(`Fehler beim Abrufen der Verlaufsdaten für ${dpId}: ${JSON.stringify(verlaufsDaten)}`, 'warn'); } } catch (e) { log(`Fehler beim Aufruf von getHistory für ${dpId}: ${e}`, 'error'); } } erstelleUndLoggeTestDatenpunkt(); Das Problem mit "Invalid call. No options for getHistory provided" ist gelöst! Der Schlüssel war, die Optionen für getHistory im sendToAsync-Aufruf unter der Eigenschaft options zu verschachteln. Dies funktioniert sowohl mit der direkten Übergabe des optionen-Objekts als auch mit dem Spread-Operator: await sendToAsync(historyInstanz, 'getHistory', { id: dpId, options: optionen }); oder await sendToAsync(historyInstanz, 'getHistory', { id: dpId, options: { ...optionen } }); Der History Adapter erwartet die Optionen in dieser Struktur. Die Abfrage funktioniert nun wie erwartet. Als Nächstes werde ich nun mein ursprüngliches Skript anpassen, um die getHistory-Aufrufe entsprechend zu gestalten. Danke für die Unterstützung!
  • txt2command generelle frage

    2
    0 Votes
    2 Posts
    187 Views
    A
    hi! die verarbeitung eigener "txt2command" befehle, geht anscheinend nur der weg über eine "Processor state ID". klappt auch soweit ganz gut, aber die vordefinierten regeln (per gui angelegt), werden nicht mehr verarbeitet. ist das so gedacht? entweder eigene verarbeitung oder interne? ich verstehe den beispielcode für die eigene verarbeitung so, dass im "else" fall, die vordefinierten/internen regeln verarbeitet werden - klappt aber bei mir nicht. hab ich was übersehen? gruß arno createState("textProcessor", '', function () { on({id: "javascript.0.textProcessor", ack: false, change: 'any'}, function (obj) { var task = JSON.parse(obj.state.val); if (task.command === 'switch light on') { // mach was, z.b. setState(...) } else { // let it process with predefined rules setState("javascript.0.textProcessor", '', true); } }); });
  • Verwendung des externen JS-Modules three.js

    6
    0 Votes
    6 Posts
    495 Views
    OliverIOO
    @exmatador Sieht gut aus. Fehler beim View Wechsel entstehen wahrscheinlich dadurch, das das javascript weiterläuft, aber die html Elemente wo reingemalt wird, dann nicht mehr ansprechbar sind (weil hidden). Man müsste das pausieren und bei Reaktivierung der View dann wieder einschalten. Hängt aber auch von der genauen Fehlermeldung ab.
  • gelöst-wie writeFile() in js script nutzen

    javascript
    117
    0 Votes
    117 Posts
    21k Views
    S
    @michihorn sagte in gelöst-wie writeFile() in js script nutzen: Was ist die Ursache? Ich würde die Bildauflösung mit im Link der Kamera dabei lassen, dann geht es schneller das Bild zu holen.
  • Tibber Pulse: Verbrauchsdaten lokal auslesen

    107
    1 Votes
    107 Posts
    25k Views
    Philipp FortenbacherP
    @waly_de leider wird mein Zähler noch nicht von deinem Script unterstützt. Könntest du mir weiterhelfen? Mein Zähler kommt von EBZ Typ DD3 2R06 und hat folgenden HEX dump: 2f45425a35444433325230364454415f3130370d0a312d303a302e302e302a323535283145425a30313032333439363433290d0a312d303a39362e312e302a323535283145425a30313032333439363433290d0a312d303a312e382e302a323535283030383238342e32363830363939382a6b5768290d0a312d303a312e382e312a323535283030333331332e3434312a6b5768290d0a312d303a312e382e322a323535283030343937302e3832362a6b5768290d0a312d303a322e382e302a323535283030303131312e34383334353034382a6b5768290d0a312d303a31362e372e302a323535283030303038352e37322a57290d0a312d303a33362e372e302a323535283030303038352e39312a57290d0a312d303a35362e372e302a323535282d3030303035372e32302a57290d0a312d303a37362e372e302a323535283030303035372e30312a57290d0a312d303a39362e352e302a323535283030314332313034290d0a302d303a39362e382e302a323535283032464245324344290d0a210d0a Vielen Dank dir schon einmal fürs Anschauen.

762

Online

32.5k

Users

81.6k

Topics

1.3m

Posts