Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Topics 48.9k Posts

NEWS

  • Ordentlich Logging GPS-Daten influxDB Grafana Geomap Routen

    2
    0 Votes
    2 Posts
    510 Views
    P
    Habe es jetzt gelöst bekommen. Mit folgendem Skript erhält man ein einziges Measurement was latitude und longitude mit exakt gleichen Zeitstempel enthält. Zusätzlich können latitude und longitude zeitversetzt eintrudeln - welcher Wert zuerst kommt ist dabei egal. In diesem Beispiel hier bis zu 10 Sekunden Versatz. Es wird also obwohl latitude und longitude in unterschiedlichen Datenpunkten liegen und bei Änderung beider Werte das Skript 2x triggert (bei Änderung von latitude und noch mal bei Änderung von longitude) immer nur einmal und nur die Kombination aus beiden neuen Werten in die influxDB geschrieben. Funktioniert jetzt einwandfrei. Hiermit ist es möglich Koordinaten sauber in der influxDB abzulegen um beispielsweise mit Grafana Routen daraus zu basteln. // v0.2 const axios = require('axios').default; const influxDbInstance = 'influxdb.0'; const token = 'TOKEN'; const measurement = 'GPS-Test'; const loggingTemplate = { '0_userdata.0.test-number2': 'lati', '0_userdata.0.test-number3': 'longi', }; const loggingObj = {}; async function start() { const influxDbInstanceConfig = await getObjectAsync(`system.adapter.${influxDbInstance}`); const protocol = influxDbInstanceConfig.native.protocol; const host = influxDbInstanceConfig.native.host; const port = influxDbInstanceConfig.native.port; const org = influxDbInstanceConfig.native.organization; const bucket = influxDbInstanceConfig.native.dbname; console.log(`Starting "${measurement}" logging to ${protocol}://${host}:${port} into bucket "${bucket}" by org ${org}`); // Init loggingObj with current values for (let [objId, key] of Object.entries(loggingTemplate)) { const state = await getStateAsync(objId); if (state && !isNaN(state.val)) { loggingObj[key] = state.val; } else { loggingObj[key] = 0; } } // Variable für Timeout sodass bei Wiederholung der vorherige Timeout abgebrochen werden kann let timeoutHandler; // Trigger-Bedingung (bei Änderung eines der DP (loggingTemplate)) on({ id: Object.keys(loggingTemplate), change: 'ne' }, async (obj) => { // Update value in loggingObj const key = loggingTemplate[obj.id]; loggingObj[key] = obj.state.val; // Lösche vorherigen Timeout, falls vorhanden if (timeoutHandler) { clearTimeout(timeoutHandler); } // Setze neuen Timeout timeoutHandler = setTimeout(async () => { // Save Data const data = `${measurement} ${Object.keys(loggingObj) .filter(key => !isNaN(loggingObj[key])) .map((key) => `${key}=${loggingObj[key]}`) .join(',')}`; if (data) { // console.log(`Saving "${data}" to InfluxDB @ ${protocol}://${host}:${port}/`); axios.post(`${protocol}://${host}:${port}/api/v2/write?bucket=${bucket}&org=${org}`, data, { headers: { 'Content-Type': 'text/plain', 'Authorization': `Token ${token}` } }).catch(err => { console.error(err); }); } }, 10000); // 10.000 Millisekunden = 10 Sekunden }); } start(); Uns so hier sieht das ganze dann in Grafana mit dem Widget Geomap aus: [image: 1702992205536-2023-12-19-14_21_41-window.png] from(bucket: "iobroker") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "GPS-Test" and r._field == "lati" or r._field == "longi" ) |> pivot(rowKey:["_time"], columnKey: ["_field"], valueColumn: "_value") |> drop(columns: ["_start", "_stop", "_measurement"])
  • Mehrere Datenpunkte per on überwachen lassen

    5
    0 Votes
    5 Posts
    327 Views
    W
    @paul53 Danke!
  • [Vorlage] Hoymiles Wechselrichter Begrenzung mit openDTU

    12
    0 Votes
    12 Posts
    2k Views
    Ralla66R
    @schmakus Genau, begrenzen auf den aktuellen Verbrauch, Rest in den Speicher. :-)
  • Fehler beim Auslesen der Array-länge

    9
    1
    0 Votes
    9 Posts
    538 Views
    OliverIOO
    @ticaki kein Problem, kann beim footen schon mal dingen
  • Formel als inputstring

    7
    0 Votes
    7 Posts
    207 Views
    Ben1983B
    Je mehr ich darüber nachdenke um so mehr komme ich von dem Gedanken der wirklich frei vorgebbaren Formel ab. Vielleicht ist das später wirklich nur nochmal als Adon zu sehen, aber in erster Linie erst einmal fest auswählbar mehr Formel in der Konfig besser.
  • Homematic HM-RPC - Fenster öffnen zählt doppelt

    Moved
    15
    0 Votes
    15 Posts
    923 Views
    B
    @ticaki sagte in Homematic HM-RPC - Fenster öffnen zählt doppelt: @bongo ich weiß nicht ob das hier funktionieren könnte. Da aber bei doppelt laufenden Skripts die Variablen geteilt werden sollte es eigentlich gehen. // am Anfang var myScripts; if (!myScripts) myScripts = 0; myScripts++ // irgendwo im Code if (myScripts > 1) log(myScripts); war ein Tippfehler drin :) Danke, ich habs eingebaut und werde es beobachten.
  • Json-String in Objekte schreiben

    23
    0 Votes
    23 Posts
    4k Views
    C
    @paul53 ok, habe festgestellt, dass das Json nicht wirklich aktualisiert wird. Muss ich mal schauen woran das liegt.
  • Konzept: JSON State Mapper für ioBroker Javascript Engine

    9
    1
    1 Votes
    9 Posts
    892 Views
    B
    @haus-automatisierung said in Konzept: JSON State Mapper für ioBroker Javascript Engine: @blockmove sagte in Konzept: JSON State Mapper für ioBroker Javascript Engine: Aber nicht alle sind gut gepflegt. Konkret? Würde gern aushelfen und die Adapter besser machen Ich kann dir aktuell keinen Adapter nennen. Als letztes hat mich aber der WLED-Adapter "geärgert", da da die Anpassung an die neue WLED-Version sehr lange gedauert hat und in der Zwischenzeit das Log mit Warnmeldungen geflutet wurde. Ist aber mittlerweile wohl gefixt. Mir ist klar, dass fast alles rund um ioBroker Community-Projekte sind und deshalb ist das auch absolut keine Kritik! Also bitte keine Diskussion um Adapterentwicklung. Ich persönlich versuche nun, wenn MQTT verwendet wird, auf Adapter zu verzichten und direkt mit MQTT zu arbeiten. Daher finde ich diesen universellen Ansatz @stev-io sehr interessant. Aber das passt eben zu meiner Art mit ioBroker Dinge umzusetzen, Andere können das anders sehen. Für mich persönlich ist ioBroker eine Art universelles IoT-Tool, quasi eine Steigerung der Möglichkeiten von Node RED. Mag vielleicht daran liegen, dass ich aus der industriellen i4.0-Ecke komme und nicht unbedingt der "normale" Smarthome-Bastler bin.
  • JS-Adapter startet ständig neu: heap out of memory

    55
    0 Votes
    55 Posts
    6k Views
    arteckA
    @smhrambo sagte in JS-Adapter startet ständig neu: heap out of memory: Stattdessen habe ich das Gefühl die heilige Kuh beleidigt zu haben, aber so ist das manchmal. ne ich will nur dass du verstehst das 3k an objekten kein problem verursachen kann.. bei 300k würde ich nochmal nachfragen... aber komm ist ggut.. mir egal.. ich bin raus hier....
  • Gelöst: Problem mit Zeitsteuerung ( Cron Job )

    8
    0 Votes
    8 Posts
    656 Views
    H
    @homoran Ich vermute, es lag an der Namensgebung des Scriptes. Waren 2 Worte ohne Underscore. Danke Dir und alle anderen.
  • Unter Ordner auf listen

    7
    0 Votes
    7 Posts
    545 Views
    I
    Ja @ticaki hat recht. Ich habe per Skript mit folder erstellt und in manchen sind Datenpunkte und andere sind aktuell noch leer. Ich würde jetzt gerne automatisiert Datenpunkte in den foldern erstellen. Dafür benötigte ich aber ein Liste von allen Folder (auch leere) die in einem Folder sind. Die einzige "Lösung" die mir einfällt ist einen Datenpunkt in jedem Ordner anzulegen. So etwas wie "folder" den ich mir dann mit einem Selector holen kann. Das würde zwar gehen aber ganz sauber wäre das nicht.
  • Doorbird und Sayit

    1
    0 Votes
    1 Posts
    202 Views
    No one has replied
  • "select" aus "defaultSendTo" befüllen - jsonConfig.json

    javascript
    5
    1
    0 Votes
    5 Posts
    441 Views
    jrbwhJ
    @ticaki Klasse! Hab's jetzt geschafft, das Beispiel aus der Adapter-Doku (Serielle Ports abfragen und senden) nachzuvollziehen. Läuft nun in meiner Config. Jetzt muss ich es "nur noch" auf meine Device-Adresse umbauen. Herzlichen Dank für Deine Hilfe und Deine Infos. Brauche noch eine Weile, um alles zu verdauen. Dein Code-Beispiel habe ich noch nicht ganz verstanden, aber es ist auch schon spät ;-) Schöne Grüße Jürgen
  • Iterate through objects

    4
    0 Votes
    4 Posts
    615 Views
    L
    Danke euch, super, das hilft!
  • [JS Editor] Marker setzen/anspringen

    3
    0 Votes
    3 Posts
    128 Views
    W
    @codierknecht Hi Den habe ich mir jetzt installiert, mal sen wie gut ich damit zurecht komme. Was mir noch nicht gelungen ist, ist 2 IO-Broker Instanzen einzubinden. Geht das und wenn ja wie?
  • Material design calendar widget ical konvertierung

    1
    3
    0 Votes
    1 Posts
    175 Views
    No one has replied
  • [gelöst] Axios hinzufügen zu Script

    11
    1
    0 Votes
    11 Posts
    651 Views
    T
    @ben1983 Dann hat sich meine Installation in den letzten 4 Tagen selbst repariert. Da hatte ich noch ganz sicher einen "async need Promise.resolve" Fehler... der ist auch nicht mehr da.
  • [gelöst] Kalenderwoche abrufen / zuweisen

    5
    0 Votes
    5 Posts
    254 Views
    Ben1983B
    @codierknecht Cool, habe es jetzt so: // Zuweisen der Kalenderwoche schedule('4 0 * * *',()=>{ // @ts-ignore const moment = require('moment'); setState(idKalenderwoche,new moment().isoWeek(),true); })
  • JS stoppen, das Ammok läuft

    2
    0 Votes
    2 Posts
    126 Views
    CodierknechtC
    @wolfgangfb iob stop javascript.0 hätte vermutlich auch gereicht.
  • Fehlermeldung Javascript

    javascript
    7
    0 Votes
    7 Posts
    606 Views
    MalleRalleM
    @ticaki Vielen lieben Dank für Deine Bemühungen. Das funktioniert Perfekt. Fehlermeldungen beim start vom Javascript Adapter sind weg.

402

Online

32.6k

Users

82.2k

Topics

1.3m

Posts