Ist es möglich sich min und max aus einem Datenpunkt zu holen?
NEWS
Latest posts made by ck_coke
-
RE: Material Design Widgets: Progress Widget
-
RE: Regex liefert falschen Wert
Kann es daran liegen das der Datenpunkt hinter switch:0, also eine Ebene tiefer liegt?
Zumindest habe ich das nach Internetrechersche in anderen Foren so gesehen.
-
RE: Regex liefert falschen Wert
Das ist wohl beim hier ins Forum kopieren passiert.
Die Zeile sieht so aus:
setState('0_userdata.0.Leistung-Entladen', obj.data.device_status.voltage, true);
-
RE: Regex liefert falschen Wert
Jetzt habe ich das Problem, dass es bei einem Gerät funktioniert und bei einem anderen
{"ack":true}
als Wert gesetzt wird.
So sieht das Skript aus:
schedule("*/10 * * * * *", function () { const server = 'https://shelly-89-eu.shelly.cloud'; const authKey = 'XjBjN2JjdWlkB12AE36D401E9C6EC6573933F664EA9B25923B90241D5720122CC428B82EF7477624E84B517133E2'; const deviceId = 'a0a3b3e7d67c'; httpPost(`${server}/device/status`, { id: deviceId, auth_key: authKey, }, (error, response) => { if (!error) { try { const obj = JSON.parse(response.data); // Daten extrahieren console.log(obj.data); setState('0_userdata.0.Leistung-Entladen', obj.data.device_status.voltage, true); } catch (e) { console.error(e); } } else { console.error(error); } } ); });
Folgendes bekomme ich im Log angezeigt:
javascript.0 2024-09-09 20:34:40.074 info script.js.common.Balkonkraftwerk.Skript_1: setForeignState(id=0_userdata.0.Leistung-Entladen, state={"val":{"ack":true},"ack":true,"ts":1725906880074,"q":0,"from":"system.adapter.javascript.0","lc":1725906880074,"c":"script.js.common.Balkonkraftwerk.Skript_1"}) javascript.0 2024-09-09 20:34:40.074 info script.js.common.Balkonkraftwerk.Skript_1: { online: true, device_status: { sys: { available_updates: [Object], mac: 'A0A3B3E7D67C', restart_required: false, time: '11:48', unixtime: 1725788939, uptime: 3, ram_size: 246876, ram_free: 134944, fs_size: 458752, fs_free: 122880, cfg_rev: 19, kvs_rev: 0, schedule_rev: 10, webhook_rev: 0, reset_reason: 1 }, ts: 1725906873.77, plugs_ui: {}, id: 'a0a3b3e7d67c', code: 'SNPL-00112EU', ws: { connected: false }, wifi: { sta_ip: '192.168.33.67', status: 'got ip', ssid: 'ShellyPlusPlugS-E465B8B3A57C', rssi: -29, ap_client_count: 0 }, mqtt: { connected: false }, serial: 3566, ffs: { ts: 0 }, 'switch:0': { id: 0, current: 0.021, source: 'SHC', output: true, apower: 0, voltage: 232.9, aenergy: [Object], temperature: [Object] }, cloud: { connected: true }, _updated: '2024-09-09 18:34:34', ble: {} } } javascript.0 2024-09-09 20:34:40.074 info script.js.common.Balkonkraftwerk.Skript_1: httpPost(url=https://shelly-89-eu.shelly.cloud/device/status, responseTime=66ms) javascript.0 2024-09-09 20:34:40.007 info script.js.common.Balkonkraftwerk.Skript_1: httpPost(config={"method":"post","url":"https://shelly-89-eu.shelly.cloud/device/status","responseType":"text","responseEncoding":"utf8","timeout":2000,"headers":{"User-Agent":"Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/121.0"},"data":{"id":"a0a3b3e7d67c","auth_key":"XjBjN2JjdWlkB12AE36D401E9C6EC6573933F664EA9B25923B90241D5720122CC428B82EF7477624E84B517133E2"}}, data=[object Object]) ```z
-
RE: Regex liefert falschen Wert
Vielen Dank! So ist es natürlich noch besser gelöst.
-
RE: Regex liefert falschen Wert
Error in callback: TypeError: m.split is not a function
-
Regex liefert falschen Wert
Hallo zusammen,
ich habe ein paar (Anfänger)-Schwierigkeiten mit einer Regex und könnte etwas Hilfe gebrauchen.
Folgendes ist das Ergebnis:
javascript.0 22:24:00.130 info script.js.common.Balkonkraftwerk_Shelly_Cloud_API: Found match, group 0: "total_power":-43.36, javascript.0 22:24:00.130 info script.js.common.Balkonkraftwerk_Shelly_Cloud_API: Found match, group 1: -43.36 javascript.0 22:24:00.130 info script.js.common.Balkonkraftwerk_Shelly_Cloud_API: Found match, group 2: .36 javascript.0 22:24:00.130 info script.js.common.Balkonkraftwerk_Shelly_Cloud_API: {"isok":true,"data":{"online":true,"device_status":{"has_update":false,"fs_free":155118,"unixtime":1725530007,"emeter_n":{"current":0,"ixsum":0.9,"mismatch":false,"is_valid":false},"wifi_sta":{"connected":true,"ssid":"....","ip":"192.168.178.52","rssi":-72},"total_power":-43.36,"ct_calst":0,"relays":[{"ison":true,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"overpower":false,"is_valid":true,"source":"cloud"}],"v_data":1,"uptime":885115,"fs_size":233681,"_updated":"2024-09-05 20:16:00","cloud":{"enabled":true,"connected":true},"fs_mounted":true,"ram_free":32500,"actions_stats":{"skipped":0},"emeters":[{"power":-9.73,"pf":-0.1,"current":0.44,"voltage":233.55,"is_valid":true,"total":0,"total_returned":7844.1},{"power":-33.63,"pf":-0.62,"current":0.23,"voltage":235.21,"is_valid":true,"total":2419,"total_returned":28747.5},{"power":0,"pf":0,"current":0.44,"voltage":234.18,"is_valid":true,"total":10489.3,"total_returned":0.1}],"mac":"483FDAC3902E","mqtt":{"connected":false},"cfg_changed_cnt":0,"serial":62007,"getinfo":{"fw_info":{"device":"shellyem3-483FDAC3902E","fw":"20230913-114244/v1.14.0-gcb84623"}},"time":"22:16","update":{"status":"idle","has_update":false,"new_version":"20230913-114244/v1.14.0-gcb84623","old_version":"20230913-114244/v1.14.0-gcb84623","beta_version":"20231107-165007/v1.14.1-rc1-g0617c15"},"ram_total":49920}}} - % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 1500 100 1383 100 117 15896 1344 --:--:-- --:--:-- --:--:-- 17441 javascript.0 22:24:00.130 info script.js.common.Balkonkraftwerk_Shelly_Cloud_API: Leistung: 3
So habe ich mir das Ganze zusammengebastelt:
schedule("*/1 * * * *", function () { exec('curl -X POST https://shelly-89-eu.shelly.cloud/device/status -d "id=483fdac3902e&auth_key=MjBjN2JjdWlkB12AE36D401E9C6EC6573933F664EA9B25923B90241D5720122CC428B8........."', function (error, stdout, stderr) { const regex = /"total_power":(-?\d+(\.\d+)?),/gm; const str = stdout; let m; while ((m = regex.exec(str)) !== null) { // This is necessary to avoid infinite loops with zero-width matches if (m.index === regex.lastIndex) { regex.lastIndex++; } // The result can be accessed through the `m`-variable. m.forEach((match, groupIndex) => { console.log(`Found match, group ${groupIndex}: ${match}`); if (groupIndex=1) { P = match[1] // im match stehen die aktuelle parser ergebnisse ich brauch aber nur das der gruppe 1 } }); } log(stdout + " - " + stderr); console.log('Leistung: ' + P); }); });
Die regex scheint wie man sieht zu funktionieren nur wird nicht das richtige verwendet.
Ich hätte gerne group 1 als "Ergebnis". Wie bekomme ich das hin? -
RE: Material Design Widgets: Table Widget
Hallo,
ich würde bei folgendem Array gerne die Schriftfarbe nach Bedingungen des jeweiligen Wertes anpassen:
arr = [ { 'Anlagenname': (await getObjectAsync('modbus.0.holdingRegisters.19006_G_ULL0')).common.name, 'Spannung': getState('modbus.0.holdingRegisters.19006_G_ULL0').val, 'Leistung': getState('modbus.0.holdingRegisters.19026_G_P_SUM3').val }, { 'Anlagenname': (await getObjectAsync('modbus.1.holdingRegisters.19006_G_ULL0')).common.name, 'Spannung': getState('modbus.1.holdingRegisters.19006_G_ULL0').val, 'Leistung': getState('modbus.1.holdingRegisters.19026_G_P_SUM3').val } ]
Z.B.:
Wenn Spannung kleiner 0.1 dann Schriftfarbe rot
Wenn Spannung größer/gleich 0.1 dann grünWie lässt sich das am besten umsetzen?
Kann ich eine if-Abfrage in das array packen? -
RE: JSON String aus mehreren Datenpunkten für Tabelle
Vielen Dank!
Damit habe ich den Einstieg gefunden!!! -
RE: JSON String aus mehreren Datenpunkten für Tabelle
Ja es sollen noch mehr Anlagen dazu kommen.