Skip to content

JavaScript

Hilfe für Skripterstellung mit JavaScript

2.5k Themen 48.9k Beiträge

NEWS

  • Daten aus lokalem Webinterface

    4
    0 Stimmen
    4 Beiträge
    439 Aufrufe
    OliverIOO
    @jh410 Leider steuern beide wohl nur über Bluetooth Du kannst ja mal den author fragen ob er sich auch die Steuerung Über wlan angeschaut hat. Er scheint einen Adapter programmieren zu können, dann kennt er sich gut genug aus um die wlan Steuerung analysieren zu können. Den Hersteller zu fragen kann man auch mal probieren
  • SQL Abfrage universal

    21
    0 Stimmen
    21 Beiträge
    4k Aufrufe
    R
    Hallo zusammen und danke für die Vorarbeiten. Ich hatte am Ende doch noch ein paar Schwierigkeiten das ganze zusammenzubauen, daher hier nochmal meine Komplettlösung, evtl. hilft das auch nochmal jemandem weiter. //------------------------------------ generische SQL Abfrage ------------------------------------------------ function getFromSQL(id, start, end) { var myQuery = "select m.*, maxt.val as mxval, maxt.ts as mxts, mint.val as mival, mint.ts as mits \ from \ (SELECT ROUND(sum(val),2) AS sqlSU, ROUND(avg(val),2) AS sqlAV, \ COUNT(*) AS sqlAZ, min(val) AS sqlMIN, max(val) AS sqlMAX, \ max(ts) AS sqlLast, \ min(ts) AS sqlFirst \ FROM iobroker.ts_number \ WHERE id=(select id from iobroker.datapoints where name='"+ id + "') \ AND ts >= '"+ start + "' \ AND ts <= '"+ end + "') m, \ \ (SELECT val, ts \ FROM iobroker.ts_number \ WHERE id=(select id from iobroker.datapoints where name='"+ id + "') \ AND ts >= '"+ start + "' \ AND ts <= '"+ end + "' order by val desc limit 0,1) maxt, \ \ (SELECT val, ts \ FROM iobroker.ts_number \ WHERE id=(select id from iobroker.datapoints where name='"+ id + "') \ AND ts >= '"+ start + "' \ AND ts <= '"+ end + "' order by val asc limit 0,1) mint"; return new Promise((resolve, reject) => { sendTo('sql.0', 'query', myQuery, result => { if (result.error) { reject(result.error); } else { resolve(result.result) } }); }); } async function GetTestValues(){ var date_end = Date.now(); var date_start = date_end - 1000 * 3600 * 24; // gestern var result = await getFromSQL('sql_name_evtl_auch_alias', date_start, date_end); console.log(result[0]); };
  • Alias aus Liste erstellen

    javascript
    17
    0 Stimmen
    17 Beiträge
    1k Aufrufe
    K
    @whilk-and-misky Hier mein Skript. Es funktioniert in meinen Augen sehr gut, hat aber bestimmt noch Verbesserungspotential Spoiler let geraete = [ //Ankleide {"raum": "AZ","name": "Deckenlampe","gewerk": "LS","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "AZ","name": "Velux","gewerk": "RA","dp": "klf200.0.products.2.targetPosition"}, {"raum": "AZ","name": "Velux","gewerk": "FS","dp": "zigbee.0.xxxxxxxxxxxxxxxx.opened"}, {"raum": "AZ","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.SET_TEMPERATURE"}, {"raum": "AZ","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"}, //Badezimmer {"raum": "BZ","name": "Deckenlampe","gewerk": "LS","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "BZ","name": "Spiegel","gewerk": "LS","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay1.Switch"}, {"raum": "BZ","name": "Velux","gewerk": "RA","dp": "klf200.0.products.3.targetPosition"}, {"raum": "BZ","name": "Velux","gewerk": "FS","dp": "zigbee.0.xxxxxxxxxxxxxxxx.opened"}, //Buero {"raum": "BR","name": "Fenster-Links","gewerk": "DK","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "BR","name": "Fenster-Rechts","gewerk": "DK","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "BR","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.SET_TEMPERATURE"}, {"raum": "BR","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"}, {"raum": "BR","name": "Deckenlampe","gewerk": "LS","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "BR","name": "Fenster","gewerk": "RA","dp": "homepilot20.0.Actuator.1-xxxxxxxxxxxxxxxx.Position_inverted"}, {"raum": "BR","name": "3D-Drucker","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "BR","name": "Ladegeraet","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "BR","name": "Ladegeraet","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"}, {"raum": "BR","name": "PC-Monitore","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "BR","name": "PC-Monitore","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"}, {"raum": "BR","name": "PCs","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "BR","name": "PCs","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"}, //Flur {"raum": "FL","name": "Bewegungsmelder","gewerk": "BM","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.MOTION"}, {"raum": "FL","name": "Briefkasten-Deckel","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "FL","name": "Haustuer","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "FL","name": "Aussenlampe","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "FL","name": "Lichterkette","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "FL","name": "Nachtlicht","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, //Garten {"raum": "GA","name": "Haustuer","gewerk": "BM","dp": "zigbee.0.xxxxxxxxxxxxxxxx.occupancy"}, {"raum": "GA","name": "Kamera-Haustuer","gewerk": "BM","dp": "synology.0.SurveillanceStation.cameras.Haustuer.motionDetected"}, {"raum": "GA","name": "Kamera-Balkon","gewerk": "BM","dp": "synology.0.SurveillanceStation.cameras.Balkon.motionDetected"}, {"raum": "GA","name": "Parkplatz","gewerk": "BM","dp": "zigbee.0.xxxxxxxxxxxxxxxx.occupancy"}, {"raum": "GA","name": "Pavillon","gewerk": "BM","dp": "zigbee.0.xxxxxxxxxxxxxxxx.occupancy"}, {"raum": "GA","name": "Stufenbeleuchtung","gewerk": "HA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "GA","name": "Gartenbeleuchtung","gewerk": "HA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "GA","name": "Pavillon","gewerk": "HA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.2.STATE"}, {"raum": "GA","name": "Pavillon","gewerk": "HA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.2.STATE"}, {"raum": "GA","name": "Whirlpool","gewerk": "SD","dp": "fritzdect.0.DECT_xxxxxxxxxxxxxxxx.state"}, {"raum": "GA","name": "Whirlpool","gewerk": "POWER","dp": "fritzdect.0.DECT_xxxxxxxxxxxxxxxx.power"}, {"raum": "GA","name": "Whirlpool","gewerk": "POWER_SUM","dp": "fritzdect.0.DECT_xxxxxxxxxxxxxxxx.energy"}, {"raum": "GA","name": "Whirlpool","gewerk": "TH","dp": "shelly.0.xxxxxxxxxxxxxxxx.ext.temperatureC1"}, //Kinderzimmer {"raum": "KZ","name": "Balkontuer","gewerk": "DK","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "KZ","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.SET_TEMPERATURE"}, {"raum": "KZ","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"}, {"raum": "KZ","name": "Front","gewerk": "RA","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Position"}, {"raum": "KZ","name": "Front","gewerk": "UP","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Open"}, {"raum": "KZ","name": "Front","gewerk": "DOWN","dp": "shelly.0.xxxxxxxxxxxxxxxx1.Shutter.Close"}, {"raum": "KZ","name": "Front","gewerk": "STOP","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Pause"}, {"raum": "KZ","name": "Velux","gewerk": "RA","dp": "klf200.0.products.1.targetPosition"}, {"raum": "KZ","name": "Lichterkette","gewerk": "SD","dp": "sonoff.0.SD_KZ_Lichterkette.POWER"}, {"raum": "KZ","name": "Velux","gewerk": "FS","dp": "zigbee.0.xxxxxxxxxxxxxxxx.opened"}, {"raum": "KZ","name": "Front","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Power"}, //Keller {"raum": "KE","name": "ESX-NUC","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "KE","name": "ESX-NUC","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"}, {"raum": "KE","name": "ESX-NUC-Backup","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "KE","name": "ESX-NUC-Backup","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"}, {"raum": "KE","name": "ESXP01","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"}, {"raum": "KE","name": "ESXP01","gewerk": "POWER","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.power"}, {"raum": "KE","name": "ESXP02","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"}, {"raum": "KE","name": "ESXP02","gewerk": "POWER","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.power"}, {"raum": "KE","name": "Trockner","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "KE","name": "Trockner","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"}, {"raum": "KE","name": "USV","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "KE","name": "USV","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"}, {"raum": "KE","name": "Waschmaschine","gewerk": "SD","dp": "xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "KE","name": "Waschmaschine","gewerk": "POWER","dp": "xxxxxxxxxxxxxxxx.Relay0.Power"}, //Kueche {"raum": "KU","name": "Kuechenfenster","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "KU","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.SET_TEMPERATURE"}, {"raum": "KU","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"}, {"raum": "KU","name": "Deckenlampe","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "KU","name": "Schrankbeleuchtung","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "KU","name": "Fenster","gewerk": "RA","dp": "homepilot20.0.Actuator.2-xxxxxxxxxxxxxxxx.Position_inverted"}, {"raum": "KU","name": "Geschirrspueler","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "KU","name": "Geschirrspueler","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"}, //Schlafzimmer {"raum": "SZ","name": "Balkontuer","gewerk": "DK","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "SZ","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.SET_TEMPERATURE"}, {"raum": "SZ","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"}, {"raum": "SZ","name": "Deckenlampe","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "SZ","name": "Velux","gewerk": "RA","dp": "klf200.0.products.0.targetPosition"}, {"raum": "SZ","name": "Front","gewerk": "RA","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Position"}, {"raum": "SZ","name": "Front","gewerk": "UP","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Open"}, {"raum": "SZ","name": "Front","gewerk": "DOWN","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Close"}, {"raum": "SZ","name": "Front","gewerk": "STOP","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Pause"}, {"raum": "SZ","name": "Front","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Shutter.Power"}, {"raum": "SZ","name": "Balkon","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"}, {"raum": "SZ","name": "SchlafzimmerTV","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"}, {"raum": "SZ","name": "SchlafzimmerTV","gewerk": "POWER","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.power"}, {"raum": "SZ","name": "Kommode","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "SZ","name": "Lichterkette","gewerk": "SD","dp": "sonoff.0.SD_SZ_Lichterkette.POWER"}, {"raum": "SZ","name": "Balkon","gewerk": "TH","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.celsius"}, {"raum": "SZ","name": "Velux","gewerk": "FS","dp": "zigbee.0.xxxxxxxxxxxxxxxx.opened"}, //Wohnzimmer {"raum": "WZ","name": "Front-Links","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "WZ","name": "Front-Rechts","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "WZ","name": "Seite-Links","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "WZ","name": "Seite-Rechts","gewerk": "FS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.STATE"}, {"raum": "WZ","name": "Heizkoerper","gewerk": "HZ","dp": "hm-rpc.1.INT0000001.1.SET_TEMPERATURE"}, {"raum": "WZ","name": "Heizkoerper","gewerk": "TH","dp": "hm-rpc.1.INT0000001.1.ACTUAL_TEMPERATURE"}, {"raum": "WZ","name": "Heizkoerper-Seite","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"}, {"raum": "WZ","name": "Heizkoerper-Front","gewerk": "TH","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.4.ACTUAL_TEMPERATURE"}, {"raum": "WZ","name": "Esstischlampe","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"}, {"raum": "WZ","name": "Wohnzimmerlampe","gewerk": "LS","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"}, {"raum": "WZ","name": "Front-Links","gewerk": "RA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"}, {"raum": "WZ","name": "Front-Rechts","gewerk": "RA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"}, {"raum": "WZ","name": "Leinwand","gewerk": "RA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"}, {"raum": "WZ","name": "Seite","gewerk": "RA","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.1.LEVEL"}, {"raum": "WZ","name": "AV-Receiver","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "WZ","name": "FireTV","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"}, {"raum": "WZ","name": "Front","gewerk": "SD","dp": "sonoff.0.SD_WZ_Front.POWER"}, {"raum": "WZ","name": "Kodi","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "WZ","name": "Kodi","gewerk": "POWER","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Power"}, {"raum": "WZ","name": "Lichtkugeln","gewerk": "SD","dp": "shelly.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "WZ","name": "PS-4-Luefter","gewerk": "SD","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.state"}, {"raum": "WZ","name": "PS-4-Luefter","gewerk": "TH","dp": "fritzdect.0.xxxxxxxxxxxxxxxx.celsius"}, {"raum": "WZ","name": "Schriftleuchte","gewerk": "SD","dp": "zigbee.0.xxxxxxxxxxxxxxxx.state"}, {"raum": "WZ","name": "Seite","gewerk": "SD","dp": "sonoff.0.SD_WZ_Seite.POWER"}, {"raum": "WZ","name": "TV","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "WZ","name": "Tablet","gewerk": "SD","dp": "shelly.0.xxxxxxxxxxxxxxxx.Relay0.Switch"}, {"raum": "WZ","name": "Wii","gewerk": "SD","dp": "hm-rpc.0.xxxxxxxxxxxxxxxx.STATE"}, ]; //Jedes Gerät abarbeiten geraete.forEach(geraet => { //Raumname definieren if(geraet.raum == "AZ"){var raumname = "Ankleide"}; if(geraet.raum == "BZ"){var raumname = "Badezimmer"}; if(geraet.raum == "BR"){var raumname = "Buero"}; if(geraet.raum == "FL"){var raumname = "Flur"}; if(geraet.raum == "GA"){var raumname = "Garten"}; if(geraet.raum == "KE"){var raumname = "Keller"}; if(geraet.raum == "KZ"){var raumname = "Kinderzimmer"}; if(geraet.raum == "KU"){var raumname = "Kueche"}; if(geraet.raum == "SZ"){var raumname = "Schlafzimmer"}; if(geraet.raum == "WZ"){var raumname = "Wohnzimmer"}; //Statuskuerzel definieren if(geraet.gewerk == "BM") {var statuskuerzel = "ACTUAL"; var gewerk = "BM"}; if(geraet.gewerk == "DK") {var statuskuerzel = "ACTUAL"; var gewerk = "DK"}; if(geraet.gewerk == "FS") {var statuskuerzel = "ACTUAL"; var gewerk = "FS"}; if(geraet.gewerk == "HA") {var statuskuerzel = "STATE"; var gewerk = "HA"}; if(geraet.gewerk == "HZ") {var statuskuerzel = "TEMP"; var gewerk = "HZ"}; if(geraet.gewerk == "LS") {var statuskuerzel = "STATE"; var gewerk = "LS"}; if(geraet.gewerk == "RA") {var statuskuerzel = "LEVEL"; var gewerk = "RA"}; if(geraet.gewerk == "SD") {var statuskuerzel = "STATE"; var gewerk = "SD"}; if(geraet.gewerk == "TH") {var statuskuerzel = "TEMP"; var gewerk = "TH"}; //Sonderstatuskuerzel definieren if(geraet.gewerk == "POWER") {var statuskuerzel = "POWER"; var gewerk = "SD"}; if(geraet.gewerk == "POWER_SUM") {var statuskuerzel = "POWER_SUM"; var gewerk = "SD"}; if(geraet.gewerk == "DOWN") {var statuskuerzel = "DOWN"; var gewerk = "RA"}; if(geraet.gewerk == "UP") {var statuskuerzel = "UP"; var gewerk = "RA"}; if(geraet.gewerk == "STOP") {var statuskuerzel = "STOP"; var gewerk = "RA"}; if(geraet.gewerk == "POWER" && geraet.dp.match(/^.*.Shutter.Power$/)) {var statuskuerzel = "POWER"; var gewerk = "RA"}; //Variablen für Erstellung definieren const original_datenpunkt = geraet.dp; const alias_name = gewerk + '_' + geraet.raum + '_' + geraet.name + '.' + statuskuerzel; const raum_name = raumname; ///////////////////////////////// // AB HIER NICHTS MEHR ÄNDERN // ///////////////////////////////// // Original-Datenpunkt const idOrigin = original_datenpunkt; // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt. // Bei Nicht-Verwendung Leerstring '' zuweisen const idRead = ''; // Alias-Datenpunkt const idAlias = raum_name+'.'+alias_name; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = alias_name desc = 'per Script erstellt'; // typeAlias = 'boolean'; // oder 'number' // read = "val < 0 ? -val : 0"; // Erkennung "Aus" --> false erfolgt automatisch // write = "val ? String(1) : String(0)"; // role = 'value'; // min = 0; // nur Zahlen // max = 100; // nur Zahlen // unit = '%'; // nur für Zahlen // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein) custom = []; // verhindert doppelte Ausführung von history, ... // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten ! // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten ! // Ab hier nichts ändern !! function createAlias(idDst, idSrc, idRd) { //if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn'); //else{ if(!existsState(idDst)){ console.log('alias.0.' + raumname + "." + alias_name + ' wird erstellt') var obj = {}; obj.type = 'state'; obj.common = getObject(idSrc).common; obj.common.alias = {}; if(idRd) { obj.common.alias.id = {}; obj.common.alias.id.read = idRd; obj.common.alias.id.write = idSrc; obj.common.read = true; } else obj.common.alias.id = idSrc; if(typeAlias) obj.common.type = typeAlias; if(obj.common.read !== false && read) obj.common.alias.read = read; if(obj.common.write !== false && write) obj.common.alias.write = write; if(nameAlias) obj.common.name = nameAlias; if(role) obj.common.role = role; if(desc) obj.common.desc = desc; if(obj.common.type == 'number') { if(min !== undefined) obj.common.min = min; if(max !== undefined) obj.common.max = max; if(unit) obj.common.unit = unit; } else { if(obj.common.min !== undefined) delete obj.common.min; if(obj.common.max !== undefined) delete obj.common.max; if(obj.common.unit) delete obj.common.unit; } if(states) obj.common.states = states; if(custom && obj.common.custom) obj.common.custom = custom; obj.native = {}; setObject(idDst, obj, function() { if(idRd) setState(idRd, getState(idRd).val, true); else setState(idSrc, getState(idSrc).val, true); }); if(raum && existsObject('enum.rooms.' + raum)) { let obj = getObject('enum.rooms.' + raum) obj.common.members.push(idDst); setObject('enum.rooms.' + raum, obj); } if(gewerk && existsObject('enum.functions.' + gewerk)) { let obj = getObject('enum.functions.' + gewerk) obj.common.members.push(idDst); setObject('enum.functions.' + gewerk, obj); } } } createAlias('alias.0.' + idAlias, idOrigin, idRead); });
  • Bedeutung Datenpunkte Cloud Adapter

    1
    0 Stimmen
    1 Beiträge
    159 Aufrufe
    Niemand hat geantwortet
  • Problem älteres Fenster-Zählen Skript

    14
    3
    0 Stimmen
    14 Beiträge
    907 Aufrufe
    CodierknechtC
    @rushmed Geht nur per JS: function getObjectName(const objectId) { return getObject(objectId).common.name; }
  • [gelöst] Modul cheerio ohne Funktion in Javascript

    javascript
    5
    1
    0 Stimmen
    5 Beiträge
    470 Aufrufe
    LatziL
    Aus irgend einem Grund kommt meine ScriptEngine mit dem console.debugnicht klar (auch wenn debug eingestellt ist), jedoch mit log oder console.log erhalte ich die Ausgaben. Somit ist das Thema für mich gelöst (zumindest was die Funktion von cheerio angeht).
  • Datenpunkt prüfen vor schalten

    javascript
    7
    0 Stimmen
    7 Beiträge
    476 Aufrufe
    paul53P
    @mitch Weshalb werden Ein- und Ausschalten getrennt behandelt. Sie unterscheiden sich nur im Wert für ".POWER" (false/true) und in einem kleinen Textbestandteil am Textende ("ausgeschaltet"/"angeschaltet"). Die Datums-/Uhrzeit-Bildung macht man auch nicht innerhalb einer Schleife, denn sie ändert sich während eines Trigger-Ereignisses nicht. Vorschlag (Variable serialNumber überprüfen!): on("0_userdata.0.tv.turn_on_off", function (dp) { let aus_an = dp.state.val ? 'angeschaltet' : 'ausgeschaltet'; let serialNumber = getState("alexa2.0.History.serialNumber").val; setState('0_userdata.0.tv.dp_echo', 'alexa2.0.Echo-Devices.' + serialNumber); let roomid = getObject('alexa2.0.Echo-Devices.' + serialNumber, 'rooms').enumIds[0]; setState('0_userdata.0.tv.dp_room', roomid); let roomname = getObject('alexa2.0.Echo-Devices.' + serialNumber, 'rooms').enumNames[0]; if(typeof roomname == 'object') roomname = roomname.de; var today = new Date(); var bh_day = ("00" + today.getDate()).slice(-2); var bh_mon = today.getMonth() + 1; var bh_mon2 = ("00" + bh_mon).slice(-2); var bh_year = ("0000" + today.getFullYear()).slice(-4); var bh_hour = ("00" + today.getHours()).slice(-2); var bh_min = ("00" + today.getMinutes()).slice(-2); var bh_sec = ("00" + today.getSeconds()).slice(-2); let time = "[" + bh_year + "/" + bh_mon2 + "/" + bh_day + "-" + bh_hour + ":" + bh_min + ":" + bh_sec + "]>" + "\n" +"Der Fernseher im Raum " + roomname + " wurde "; let members = getObject(roomid).common.members; for(let id of members) { if(getObject(id, 'functions').enumIds[0] == 'enum.functions.tv' && dp.state.val != getState(id + '.POWER').val) { setState(id + '.POWER', dp.state.val); setState('alexa2.0.Echo-Devices.' + serialNumber + '.Commands.speak', 'Der Fernseher im Raum ' + roomname + ' wurde ' + aus_an); sendTo("telegram", "send", {text: time + aus_an}); } } });
  • [gelöst] Standort herausfiltern

    11
    0 Stimmen
    11 Beiträge
    716 Aufrufe
    C
    @homoran Vielen Dank. Das ist die Lösung. Die 0 hat gefehlt Herzlichen Dank an euch alle für die schnelle Hilfe!!!
  • [gelöst] enum/Aufzählung eines Objectes herausfinden

    9
    0 Stimmen
    9 Beiträge
    474 Aufrufe
    S
    @paul53 said in [Suche] enum/Aufzählung eines Objectes herausfinden: if(getObject(id, 'functions').enumNames[0] == 'Tuer') Perfekt! Vielen Dank.
  • Konvertierungsfunktion minus zu plus

    2
    0 Stimmen
    2 Beiträge
    372 Aufrufe
    paul53P
    @derzico sagte: Kann man das mit einer Konvertierungsfunktion machen Du meinst in einem Alias? Ja, nur Einspeisung positiv: "read": "val < 0 ? -val : 0"
  • Dummy-Mailserver für Kamera-Bewegungserkennung

    1
    1
    0 Stimmen
    1 Beiträge
    188 Aufrufe
    Niemand hat geantwortet
  • [gelöst] - Learning JS - Part 2

    3
    0 Stimmen
    3 Beiträge
    187 Aufrufe
    CodierknechtC
    @mcu Danke für den Schubs in die richtige Richtung :+1: Der DP enthält bereits ein Array von Objekten. Das wird lediglich im Objektbaum als JSON dargestellt. Parsen ist gar nicht nötig. { "_id": "device-watcher.0.batteryList", "type": "state", "common": { "type": "array", "role": "json", "read": true, "write": false }, "native": {}, "from": "system.adapter.device-watcher.0", "ts": 1669580330469, "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "user": "system.user.admin" } Damit sieht das dann (prinzipiell) so aus und funzt einwandfrei :-D on({id: "device-watcher.0.lowBatteryCount", change: "ne"}, async function (obj) { var batteryCount = obj.state.val; if (batteryCount > 0) { var devices = getState("device-watcher.0.lowBatteryList").val; var message = 'ACHTUNG: Batterie in ' + batteryCount + ' Gerät(en) schwach:\n'; for (var i = 0; i < devices.length; i++) { message += devices[i].Device + '\n'; } } else { message = 'Alle Batterien sind OK!'; } sendSignalMessage(message, '+49xxxxxxxxxx'); });
  • [gelöst] Hex zu RGB

    blockly javascript
    7
    0 Stimmen
    7 Beiträge
    365 Aufrufe
    falke69F
    @oliverio ok. Werde ich machen. :-)
  • ID Selektor - Welche ID hat die Änderung verursacht? DONE

    3
    1
    0 Stimmen
    3 Beiträge
    314 Aufrufe
    cengC
    @liv-in-sky Danke, wie kann man so blind sein, dass zu übersehen... Reingezogen tut... Vielen Dank
  • TV Programm Mini Anzeige - HTML Tabelle

    javascript
    327
    3
    6 Stimmen
    327 Beiträge
    56k Aufrufe
    liv-in-skyL
    @oliverio @oliverio sagte in TV Programm Mini Anzeige - HTML Tabelle: aber alles was im browser angezeigt wird, kann auch eingelesen werden stimmt - du hast recht - ist alles noch da und lesbar- aber eben anders als früher - daher weiß mein sccript nicht, was zu tun ist
  • [gelöst] DP anlegen, Name als Variable - Syntaxfehler?

    3
    0 Stimmen
    3 Beiträge
    193 Aufrufe
    P
    @armilar Danke! Klappt. Keine Ahnung warum das davor nicht ging, dachte das schon probiert zu haben...
  • Dynamisch erstellte Variablen.

    43
    0 Stimmen
    43 Beiträge
    3k Aufrufe
    OliverIOO
    @ptr Im Detail muss ich das morgen mal ausprobieren. Generell sehe ich in deinem Code aber 2 Problembereiche zu dem du dir die Konzepte mal nochmal durchlesen solltest scope https://developer.mozilla.org/en-US/docs/Glossary/Scope?retiredLocale=de Du definierst manche variablen innerhalb von Funktionen (bspw multitimer) obwohl ich den Eindruck habe das sie außerhalb einer Funktion definiert werden sollte. Im verlinkten Artikel liest du, das variablen immer nur sichtbar innerhalb eines scopes sind und von außerhalb nicht adressierst ist. Dann gibt es noch den asynchronen Funktionsausfall, der ebenfalls eine andere Art von scope erzeugt, wie man eigentlich so erwartet. Wird ein scope verlassen, bspw weil die Funktion abgearbeitet ist, dann wird der scope zerstört und die Daten sind verloren. Beim erneuten Aufruf der Funktion wird ein neuer scope erzeugt. Die früheren darin verfügbaren Daten sind weg. Auch deine mehrfach ineinander verschachtelten Funktionen sind schon möglich. Als Anfänger würde ich das aber nicht machen, da sonst der Überblick über die scopes schwierig ist und uU den Kopf zur Explosion bringt. Mit einem guten debugger sieht man das (bspw vs Code). Aber die scriptoberfläche von Iobroker ist da nicht sought geeignet. Verwendung von promises, await und async https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise?retiredLocale=de https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function Await kann nur bei Funktionen verwendet werden, die auch ein promise zurückgeben. Settimeout gibt aber nur das Timer Handle zurück. Daher funktioniert await da nicht. Wenn du eine strikte Reihenfolge bestimmter Schritte als Ergebnis von asynchroner Abarbeitung einhalten willst musst du dich erst recht noch mehr mit promises beschäftigen, da das der Mechanismus der Wahl dafür ist.
  • Protokoll lesen

    6
    0 Stimmen
    6 Beiträge
    616 Aufrufe
    bahnuhrB
    @andreas-5 sagte in Protokoll lesen: Entweder sehe ich es noch nicht richtig oder das ist dann nicht das, was ich möchte. Doch, das ist es. Nimm den Logparser. Dann bekommst du DP mit deinen Ergebnissen. Und dann schreibst du ein Script das auf die Veränderungen dieser DP reagiert und dir dann eine Mail oder telegram sendet.
  • Ordner auf neue Dateien überwachen

    37
    0 Stimmen
    37 Beiträge
    6k Aufrufe
    A
    @ente34 sagte in Ordner auf neue Dateien überwachen: @tomily Ungefähr so Du benötigst aber den neuesten javascript-Adapter 4.11.0 const fs = require('fs'); const util = require('util'); const readdir = util.promisify(fs.readdir); const stat = util.promisify(fs.stat); const lstat = util.promisify(fs.lstat); async function checkDir(dir) { let files = []; try { files = await readdir(dir); let newestFileAge = 0; let newestFile = ''; for (let file of files) { let fullpath = dir + '/' + file; const s = await lstat(fullpath); if (s.isFile()) { const stats = await stat(fullpath); if (stats.mtimeMs > newestFileAge) { newestFileAge = stats.mtimeMs; newestFile = file; } } } let seconds = (new Date().getTime() - new Date(newestFileAge).getTime()) / 1000; console.log(`newest file "${newestFile}" created before ${seconds} seconds`); } catch (e) { console.log(e); } } checkDir('c:/temp'); Hallo in die Runde. Ist schon ein bisschen älter das Thema aber ich habe dazu noch eine Frage. Was muss ich an diesem Code ändern, damit ich auch Unterverzeichnisse auf neuste Dateien prüfen kann ? Danke
  • Bitte um Sample Code für "sendToAsync"

    javascript
    4
    0 Stimmen
    4 Beiträge
    525 Aufrufe
    M
    https://github.com/ioBroker/ioBroker.javascript/issues/1198 Ich glaube, dass ich auch den Bug gefunden habe.

800

Online

32.6k

Benutzer

82.2k

Themen

1.3m

Beiträge