Weiter zum Inhalt

JavaScript

2.5k Themen 49.9k Beiträge

Hilfe für Skripterstellung mit JavaScript

NEWS

  • Täglicher Durchschnitt aus InfluxDB

    2
    0 Stimmen
    2 Beiträge
    306 Aufrufe
    T
    @eierfeile fritzdect... durch deine ID ersetzen sendTo('influxdb.0', 'query', 'SELECT mean("value") as "value" FROM "fritzdect.0.DECT_111111111.power" GROUP BY time(1d)', function (result) { if (result.error) { console.error(result.error); } else { // show result for (let a = 0; a < result.result[0].length;a++) { console.log('Mean values: ' + result.result[0][a].value); } } });
  • Tabelle JSON -> HTML - Link Abspielen WAV Datei am Tablet

    30
    0 Stimmen
    30 Beiträge
    3k Aufrufe
    OliverIOO
    @larson-sei180lx habe gerade im rahmen einer anderen Frage noch den Adapter proxy ausprobiert. Da kannst du deine wav-Dateien an dem Ort lassen wo sie sind und nur deine Table-msg entsprechend aufbereiten. Da müsstest du die meisten Skriptänderungen gar nicht machen Adapter proxy installieren Instanz hinzufügen In der Instanzkonfiguration des Adapters im Reiter paths einen zusätzlichen Eintrag hinzufügen: Bei Context bspw wav/ eintragen Bei path exakt den Pfad eintragen wo deine .wav-Dateien liegen. Ich hab mal das beispiel aus deinem 1. Post genommen: /opt/iobroker/node_modules/iobroker.fritzbox/tam/ Dann kannst du diese wav (wieder Beispiel aus deinem ersten Post unter folgender Adresse abrufen: http://IPAdresseIobroker:8082/proxy.1/wav/1505232225-097654321.wav
  • [Gelöst] Manuell eine Eigenschaft zu Alias hinzufügen

    5
    0 Stimmen
    5 Beiträge
    399 Aufrufe
    M
    @paul53 Ja, jetzt läuft es wie gewünscht. Danke.
  • Bei Zahlen Punkt statt Komma?!

    10
    0 Stimmen
    10 Beiträge
    1k Aufrufe
    RalfThR
    @haus-automatisierung Es wird immer eleganter. Vielen Dank an Alle für die kompetenter Unterstützung. Ich habe das Thema auf GELÖST gesetzt.
  • [gelöst] Elegantere Programmierung?

    325
    0 Stimmen
    325 Beiträge
    84k Aufrufe
    S
    @karel-puhli merci für die Aufklärung
  • Zahl aus JS schafft es nicht in die MySQL-DB

    13
    0 Stimmen
    13 Beiträge
    1k Aufrufe
    Sven SchumacherS
    @paul53 Hat noch der Punkt vor dem val gefehlt. Habs für beide Beispiele ergänzt. log('Typ von Luftdruck: ' + typeof getState('javascript.0.Kachelmann.Messwerte.data.pressureMsl.value').val); log('Typ von Windgeschw: ' + typeof getState('javascript.0.Kachelmann.Messwerte.data.windSpeed.value').val); Und es sind beides Objekte vom Typ "number". Trotzdem landet eines der Objekte als STRING in der DB und das andere als NUMBER 19:15:07.801 info javascript.0 (15700) Start javascript script.js.common.Skript_1 19:15:07.823 info javascript.0 (15700) script.js.common.Skript_1: Typ von Luftdruck: number 19:15:07.824 info javascript.0 (15700) script.js.common.Skript_1: Typ von Windgeschw: number 19:15:07.825 info javascript.0 (15700) script.js.common.Skript_1: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
  • [gelöst] Windows Dienst neu starten

    9
    0 Stimmen
    9 Beiträge
    894 Aufrufe
    Ben1983B
    @codierknecht ja das stimmt, war auch bis die Ursache gefunden ist nur als Notlösung gedacht.
  • Result-Funktion von InfluxDB-Adapter richtig nutzen

    15
    0 Stimmen
    15 Beiträge
    2k Aufrufe
    M
    @etzeste13 Vorher wurden die sendTo Funktionen direkt nacheinander ausgelöst. Es wurde nicht darauf gewartet, bis die Daten verarbeitet wurden. Nachher wurden die Funktionen immer erst dann aufgerufen, wenn die Daten aus der vorherigen Funktion, auch wirklich verarbeitet gewesen sind.
  • Loop über Verzeichnisse in Objekte

    2
    0 Stimmen
    2 Beiträge
    172 Aufrufe
    liv-in-skyL
    @rene-isserstedt z.b. über einen selektor $('unifi.0.*.clients.*.mac').each(function(id, i) { // hier eigene schleife definieren var ida = id.split('.'); valESSID="" ......... blockly: [image: 1683957683963-image-087.png] so geht man durch die gesuchten dp - in der schleife erstellst du ein array der id und kannst somit auf etwas bestimmtes in der id suchen beispiel: alexa2.0.Echo-Devices.G001xxxxxx530JR4.Commands.speak var ida = id.split('.'); dann wäre ida[3] die seriennummer (G001xxxxxx530JR4)
  • [Vorlage] HP Drucker Füllstände (Javascript).

    52
    2
    2 Stimmen
    52 Beiträge
    8k Aufrufe
    J
    @jwedenig War ein Browser Problem, funktioniert!! DankeDir
  • Windows 10 in den Ruhezustand

    7
    0 Stimmen
    7 Beiträge
    871 Aufrufe
    blue231181B
    @djmarc75 und @Gaspode Danke für eure Antworten. GetAdmin habe ich bereits seit ein paar Wochen im Einsatz, leider muss ich hier alle paar Tage den Adapter neu starten da die Verbindung abbricht. Ich versuche es damit weiter evtl mit einem Neustart des Adapters 1x am Tag Vielen Dank
  • ChatGPT für JavaScript (text in mp3, Ausgabe auf Alexa)

    1
    0 Stimmen
    1 Beiträge
    409 Aufrufe
    Niemand hat geantwortet
  • Aufruf exec aus JavaScript und Übergabe Parameter

    javascript
    4
    0 Stimmen
    4 Beiträge
    485 Aufrufe
    mickymM
    @mitch Ich habs Dir doch unten gezeigt - wenn der komplette String/Parameter des exec Befehls in doppelten Anführungszeichen steht, dann müssen ALLE doppelten Anführungszeichen innerhalb des Übergabeparameters mit Backslash maskiert werden.
  • Datenpunkt aus xml

    39
    0 Stimmen
    39 Beiträge
    2k Aufrufe
    paul53P
    @australien sagte: Not Found - GET https://registry.npmjs.org/frequest-promise-native Wozu dient das NPM-Modul. Du benötigst es? Folgende Warnungen sollten bereinigt werden: getState "mqtt.1.SmartHome.SmartMeter.tele.SENSOR" not found (3) You are assigning a string to the state "0_userdata.0.NSPanel.1.Berry_Driver.currentVersion" which expects a number State "0_userdata.0.SolarFrontier.DC_Current" not found
  • javascript fehlermeldung

    16
    0 Stimmen
    16 Beiträge
    1k Aufrufe
    GlasfaserG
    @oliverio sagte in javascript fehlermeldung: Hab den TE also mit dir verwechselt Alles gut :)
  • async / await - Verständnisfrage

    5
    0 Stimmen
    5 Beiträge
    282 Aufrufe
    liv-in-skyL
    @bahnuhr wollte mal ein wenig spielen - habe das in chatgpt eingegeben - kannst es ja mal testen [image: 1683348820511-image-083.png] Spoiler async function input_lautstaerke() { return new Promise((resolve, reject) => { stand_alt_Input = getState('musiccast.0.' + MC_ID + '.main.input').val; if (logging) log('Input_Lautstärke setzen: stand_alt_Input = ' + stand_alt_Input); // prüfen input if (stand_alt_Input != "server") setState('musiccast.0.' + MC_ID + '.main.input', 'server'); // Lautstärke stand_alt_Lautstaerke = getState('musiccast.0.' + MC_ID + '.main.volume').val; if (logging) log('Input_Lautstärke setzen: stand_alt_Lautstaerke = ' + stand_alt_Lautstaerke); setState('musiccast.0.' + MC_ID + '.main.volume', Ansage_Lautstaerke); if (logging) log('Input_Lautstärke setzen: Lautstärke gesetzt auf = ' + Ansage_Lautstaerke); resolve(); }); } man kann da auch gut lernen und ausprobieren indem man rücksprache hält - muss natürlich immer getestet werden, da noch in der entwicklung beispiel: frage: schreibe eine javascript function die hintereiander 3 andere funktionen mit await aufruft. die 3 anderen functionen sollen mit axios.get je einen wert von einer webseite holen - die drei funktionen sollen jeweils als eigenständige function definiert sein antwort: Spoiler async function getData() { try { const value1 = await getValue1(); const value2 = await getValue2(); const value3 = await getValue3(); return [value1, value2, value3]; } catch (error) { console.error(error); return null; } } async function getValue1() { try { const response = await axios.get('https://example.com/value1'); const value = response.data * 10 + 5; const result = value > 10; return result; } catch (error) { console.error(error); return null; } } async function getValue2() { try { const response = await axios.get('https://example.com/value2'); const result = response.data > 20; return result; } catch (error) { console.error(error); return null; } } async function getValue3() { try { const response = await axios.get('https://example.com/value3'); const result = response.data.toUpperCase(); return result; } catch (error) { console.error(error); return null; } } vilelleicht interessieren dich solche spielereien - ansonsten einfach überlesen :-)
  • JavaScript zum Auslesen der Tibber API?

    51
    0 Stimmen
    51 Beiträge
    10k Aufrufe
    K
    Ich habe einen Tibber-Account und einen Deye Wechselrichter. Tibber bietet für diesen WR leider kein Power-Up an. Kann man über die API die WR-Live-Daten zu Tibber senden?
  • Einbinden von Bibliotheken

    3
    0 Stimmen
    3 Beiträge
    461 Aufrufe
    D
    @mcu Ah! Danke. Das war's wohl. Aber ich habe es inzwischen hinbekommen (mit Hilfe dieses Threads über Alexa mit ChatGPT zu reden. Wahnsinn! Endlich bekommt man gescheite Antworten! Gruss Ralf
  • full zigbee2tasmota integration

    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    R
    Ok, I finally had time to find a solution. Thanks to chatGPT :-) The zigbee2tasmota device is connected to a "regular" mqtt client in iobroker (not the sonoff adapter). When a zigbee message arrives it gets forwarded via mqtt to my iobroker as a json string. My script parses that json and creates separate states for each of the key:value pairs in the json. For sending commands I automatically add an additional state "PowerSet" to devices that have a "Power" state. When I update the PowerSet state, a script creates a json string and writes it into the "mqtt.0.cmnd.ZigbeeGateway.ZbSend" state (see https://tasmota.github.io/docs/Zigbee/#sending-device-commands) The advantage of this approach is that I have nothing to do on the iobroker side when I add new zigbee devices, they are handled automatically. That's it :-) Seems to work well so far. Here's the script in case anyone has a similar problem with zigbee2tasmota: // ############## user config // where the mqtt messages arrive const zigbee2tasmotaSensorObjectId = 'mqtt.0.tele.ZigbeeGateway.SENSOR'; // where the states of the zigbee devices should appear const zbBaseFolder = '0_userdata.0.zigbee2tasmota'; // ZbSend state, see https://tasmota.github.io/docs/Zigbee/#sending-device-commands const zbsendObjId = 'mqtt.0.cmnd.ZigbeeGateway.ZbSend'; // ############## end user config const regexPowerSetStr = `${zbBaseFolder}\\..*PowerSet$`; const regexPowerSet = new RegExp(regexPowerSetStr); // receive on(zigbee2tasmotaSensorObjectId, (obj) => { const jsonString = obj.state.val; const jsonData = JSON.parse(jsonString); // log(`Received JSON string: ${jsonString}`); function createObjectsRecursively(parent, data) { for (const key in data) { const obj = data[key]; const stateName = `${parent}.${key}`; if (typeof obj === 'object') { createObjectsRecursively(stateName, obj); } else { let value = obj; // custom handling of special data types if (key.toLowerCase() == 'time') { value = new Date(obj); log("found time") } // Check if the state already exists. If it does, just update the value. // If it does not exist (-> new zigbee device), create the states. if (!existsState(stateName)) { // If the state does not exist, create it and set the value createState(stateName, value, { name: key, type: typeof value, role: "value", read: true, write: true }); log(`Created state ${stateName}`); // create additional state to set a new value that will be sent to the zigbee device. // If I use the normal "Power" state, I am afraid it will trigger the zbSend command // everytime it gets updated from the zigbee device itself. if (stateName.endsWith("Power")) { let powerSetStateName = stateName + "Set" createState(powerSetStateName, !!value, { name: key + "Set", type: "boolean", role: "value", read: true, write: true }); log(`Created state ${powerSetStateName}`); } // potentially add more custom handling for dimmer values, etc } else { setState(stateName, value); } // log(`set state ${parent}.${key} with value ${value}`); } } } createObjectsRecursively(zbBaseFolder, jsonData); }); // send power on/off on(regexPowerSet, (obj) => { const objId = obj.id; // probably regex is not needed and we can just take .Device or .Name // Define a regular expression to match the substring between "ZbReceived" and "PowerSet" const regex = /ZbReceived\.(.*?)\.PowerSet/; // Use the regular expression to extract the substring const match = objId.match(regex); if (match) { const zbname = match[1]; let newValue = obj.state.val; let zbsendstring = "\{\"Device\": \"" + zbname + "\"\,\"Send\"\:\{\"Power\"\: "+newValue+"\}}" log("zbsend: " + zbsendstring) setState(zbsendObjId, zbsendstring) } else { log(`The substring between "ZbReceived" and "PowerSet" not found in ${objId}`); } }); PS: sending zigbee commands is only supported for power on/off. I don't have any zigbee devices that have dimmer or hue values or anything else. I guess the script can be adapted to work with those kind of devices, too.
  • Tasmota Firmware update per Script

    javascript
    4
    0 Stimmen
    4 Beiträge
    718 Aufrufe
    bahnuhrB
    So, hat sich erledigt. Habe es mit einem privaten ota-Server, wie beschrieben auf der tasmota Seite, gelöst.

258

Online

33.1k

Benutzende

83.7k

Themen

1.3m

Beiträge