Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. maxp

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    M
    • Profile
    • Following 0
    • Followers 0
    • Topics 6
    • Posts 41
    • Best 3
    • Groups 1

    maxp

    @maxp

    4
    Reputation
    50
    Profile views
    41
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    maxp Follow
    Starter

    Best posts made by maxp

    • RE: [Vorlage] Alias per Skript erzeugen

      @paul53

      Habe mich endlich durchgerungen, meine alte alias-selbstbau-Lösung, basierend auf gegenseitigem on() durch die effizienteren Aliases zu ersetzen. Ich komme auf einige viele, paul53's Scriptvorlage ist wertvoll - ohne die wäre ich das wahrscheinlich noch länger nicht angegangen.

      Habe die Vorlage angepasst, da sie bei mir nicht alle Objekte anlegte und vor allem mit den rooms und functions Probleme machte.

      Vielleicht kann's ja jemand brauchen, hier mit Beispiel:

      // Originalversion: User Paul53, https://forum.iobroker.net/topic/27295/vorlage-alias-per-skript-erzeugen
      // Angepasst an die asynchrone Eigenschaft von Javascript, kleine Ergänzungen.
      
      const prefix = 'alias.0.';
      const custhist = {
            "history.0": {
              "enabled": true,
              "changesOnly": true,
              "debounce": "200",
              "maxLength": "960",
              "retention": "1209600",
              "changesRelogInterval": "60",
              "changesMinDelta": 0,
              "aliasId": ""
            },
            "influxdb.0": {
              "enabled": true,
              "changesOnly": true,
              "debounce": "200",
              "retention": "63072000", 
              "changesRelogInterval": "60",
              "changesMinDelta": 0,
              "storageType": "",
              "aliasId": ""
            }
          };
      
      // Aliasdefinition als Array of Objects
      var aa = [
      /***
      {
          idOrigin : prefix + '',      // Orignal-Datenpunkt
          idRead : '',        // Status-Datenpunkt, wenn Status und Kommando getrennt. Leer wenn keine Trennung
          idAlias : prefix + '',       // Alias-Datenpunkt
          recreate : false,   // true: evtl. existierender Alias wird gelöscht - EXPERIMENTAL
          extend : true,      // true: evtl. existierender Alias wird ergänzt - EXPERIMENTAL: extendObject() statt setObject()
          typeAlias : '',     // Datentyp für Alias: number, boolean, mixed
          read : '',          // "val < 20 ? true : false" // Erkennung "Aus" --> false erfolgt automatisch
          write : '',         // "val ? 'Ein' : 'Aus'"
          nameAlias : '',     // Bezeichnung
          role : '',          // ioBroker Rolle
          desc : '',          // Beschreibung
          min : 0,            // Minimalwert, nur bei Datentyp number
          max : 100,          // Maximalwert, nur bei Datentyp number
          unit : '',          // Einheit bei Datentyp number: %, W, °C, usw.
          states : '',        // {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
          custom : [];        // leeres Array wird automatisch gesetzt, falls nichts angegeben. Verhindert doppelte Ausführung von
          history, ...
          raum : '',          // enum.room, Groß-/Kleinschreibung in der ID beachten
          gewerk : '',        // enum.function, Groß-/Kleinschreibung in der ID beachten
          owner : '',         // Owner, etwa system.user.admin
          group : '',         // Group, etwa system.group.familie
      },
      ***/
      
      // --------------------
      // Batterien
      {
      	idAlias : prefix + 'Batterien.shellyht-F00000',
      	idOrigin : 'shelly.0.SHHT-1#F00000#1.bat.value',
      	recreate : true,
      	extend : true,
      	nameAlias : 'Shelly HT Sensor',
      	raum : 'werkstatt',
      	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      },
      // --------------------
      // Werkstatt
      {
      	idAlias : prefix + "Werkstatt.Klima.Temperatur",
      	idOrigin : "shelly.0.SHHT-1#F00000#1.tmp.temperatureC",
      	recreate : false,
      	extend : true,
      	nameAlias : "Raumtemperatur",
      	unit : '°C',
      	raum : 'werkstatt',
      	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      },
      {
      	idAlias : prefix + "Werkstatt.Klima.Luftfeuchte",
      	idOrigin : "shelly.0.SHHT-1#F00000#1.hum.value",
      	recreate : false,
      	extend : true,
      	nameAlias : "Luftfeuchte (rel.)",
      	unit : '%',
      	raum : 'werkstatt',
         	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      },
      {
      	idAlias : prefix + 'Werkstatt.Entfeuchter.Leistung',
      	idOrigin : 'sonoff.0.Entfeuchter.ENERGY_Power',
      	recreate : false,
      	extend : true,
      	nameAlias : "Leistungsaufnahme",
      	unit : "W",
      	raum : 'werkstatt',
      	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      },
      {
      	idAlias : prefix + 'Werkstatt.Entfeuchter.Schalter',
      	idOrigin : 'sonoff.0.Entfeuchter.POWER',
      	recreate : false,
      	extend : true,
      	nameAlias : "Schalter",
      	raum : 'werkstatt',
      	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      },
      // ------------------------------
      // WOHNZIMMER
      {
      	idAlias : prefix + 'Wohnzimmer.Couchkugel.Schalter',
      	idOrigin : 'hue.0.Couchkugel.on',
      	recreate : false,
      	extend : true,
      	raum : 'wohnzimmer',
      	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      }
      ];
      
      
      // ******************************
      
      // -------------------------------------------------
      // -------------------------------------------------
      function alias2enum(a, en, cb) {
          cb = (typeof(cb) === 'function') ? cb : function() {};
          if (en) {
              var o = getObject(en); 
              if(o) {
                  if (!o.common.members.includes(a)) {
                      o.common.members.push(a);
                      setObject(en, o, function(e, o) { cb(); });
                  } else cb();
              } else {
                  log('alias2enum: ' + en + ' cannot get object', 'warn');
                  cb();
              }
      	} else {
              log('alias2enum: ' + en + ' is invalid', 'warn');
              cb();
          }
      }    
      
      
      // ---------------------------------------------------
      // ---------------------------------------------------
      function createAlias(o, cb) {
          var obj = {};
          
          cb = (typeof(cb) === 'function') ? cb : function() {};
      
          if (!o || ! o.idOrigin || !o.idAlias) {
              log(o, 'error');
          }
          
          if (!existsState(o.idOrigin)) {
              log(o.idOrigin + ' existiert nicht', 'warn');
              cb();
              return;
          }
      
          if (existsState(o.idAlias)) {
              if (o.recreate) {
                  log(o.idAlias + ' wird gelöscht', 'warn');    
                  // EXPERIMENTAL
                  // deleteObject() gibt keinen Fehler aus, löscht aber auch nicht.
                  // falsche Anwendung? --> Recherchieren... ;-)
                  // workaround: recreate auf false und extend auf true setzen.
                  deleteObject(o.idAlias, false, function(err, obj) {
                      o.recreate = false;
                      o.extend = true;
                      createAlias(o, cb);
                      return;
                  });
              } else if (!o.extend) {
                  log(o.idAlias + ' schon vorhanden')
                  cb();
                  return;
              } else {
                  log(o.idAlias + ' wird ergänzt');
              }
          } else {
              log(o.idAlias + ' wird angelegt');
          }
      
          obj.type = 'state';
          obj.common = getObject(o.idOrigin).common;
          obj.acl = getObject(o.idOrigin).acl;
          obj.common.alias = {};
      
          if(o.idRead) {
              obj.common.alias.id = {};
              obj.common.alias.id.read = o.idRead;
              obj.common.alias.id.write = o.idOrigin;
              obj.common.read = true;
          } else obj.common.alias.id = o.idOrigin;
          
          if(o.typeAlias) obj.common.type = o.typeAlias;
          if(obj.common.read !== false && o.read) obj.common.alias.read = o.read;
          if(obj.common.write !== false && o.write) obj.common.alias.write = o.write;
          if(o.nameAlias) obj.common.name = o.nameAlias;
          if(o.role) obj.common.role = o.role;
          if(o.desc) obj.common.desc = o.desc;
          if(o.min !== undefined) obj.common.min = o.min;
          if(o.max !== undefined) obj.common.max = o.max;
          if(o.unit) obj.common.unit = o.unit;
          if(o.states) obj.common.states = o.states;
          if(o.owner && obj.acl.owner) obj.acl.owner = o.owner;
          if(o.group && obj.acl.ownerGroup) obj.acl.ownerGroup = o.group;
        
          if(o.custom) {
              obj.common.custom = o.custom;
          } else {
              obj.common.custom = [];
          }
          
          obj.native = {};
      	
          // EXPERIMENTAL
          // Auswirkung von extendObject() auf Historydaten?
          extendObject(o.idAlias, obj, function(e, oa) {
              if (e) {
                  log('Alias ' + o.idAlias + ' nicht angelegt - Fehler ' + e, 'error');
                  cb();
                  return;
              }
              log(o.idAlias + ' wird zum Raum ' + o.raum + ' hinzugefügt', 'info');
              alias2enum(o.idAlias, 'enum.rooms.' + o.raum, function() {
                  if (o.gewerk) {
                      log(o.idAlias + ' wird zur Funktion ' + o.gewerk + ' hinzugefügt', 'info');
                      alias2enum(o.idAlias, 'enum.funtions.' + o.gewerk, cb);
                  } else cb();
              });
          }); 
      }
      
      
      // ---------------------------------------------------
      // ---------------------------------------------------
      function createAliases() {
      	if (!aa) return;
      	if (!aa.length) return;
      	createAlias(aa.shift(), createAliases);
      }
      
      
      // *******************************
      
      createAliases();
      
      

      Danke paul53 👍

      posted in JavaScript
      M
      maxp
    • Neuer Adapter: WLANThermo

      Hallo,

      habe gerade auf https://www.npmjs.com/package/iobroker.wlanthermo und auf https://github.com/MaxPhenol/ioBroker.wlanthermo einen Adapter für das WLANThermo Grill-/BBQ-/Fleischthermometer veröffentlicht. Er basiert funktional auf dem Skript von https://forum.iobroker.net/viewtopic.php?p=151309#p151309.

      Neues Feature: Auf dem Thermometer kann von ioBroker aus ein neues Log erstellt werden.

      Ein paar Sachen habe ich noch im Hinterkopf, mal sehen, was daraus wird…

      Viel Spaß damit!

      Angepasster View zum einfachen Start:
      6971_wlanthermo_vis_0.1.0.json.zip

      posted in ioBroker Allgemein
      M
      maxp
    • Panasonic Comfort Cloud

      Hallo,

      nutzt jemand diesen Adapter?
      Bei mir ist die Instanz grün, aber es werden keine Objekte angelegt. Im Log steht "Login successful".
      Gibts einen Tip hierzu?

      Danke!
      Max

      posted in ioBroker Allgemein
      M
      maxp

    Latest posts made by maxp

    • RE: [gelöst] yahka startet nicht - uncaught exception

      @von-cartman

      Es gab bei mir aliases, die noch kein Update vom roh-Objekt hatten. Nach einer Werteaktualisierung der Objekte ging es. Die Lösung war damals, nach einem ioBroker Restart ein Weilchen zu warten, bis alle Objekte mit Aliases von den jeweiligen Adaptern und Scripts ein Update hatten, dann den yahka erst starten.
      Mittlerweile läufts aber normal und ohne Probleme. In der Zwischenzeit gab es ein paar Updates vom ioBroker selbst, yahka läuft bei mir aktuell in Version 0.13.2, node.js 12.22.7.

      posted in Error/Bug
      M
      maxp
    • RE: [gelöst] yahka startet nicht - uncaught exception

      @wendy2702
      ...aber herzlichen Dank!

      posted in Error/Bug
      M
      maxp
    • RE: [gelöst] yahka startet nicht - uncaught exception

      @wendy2702
      Ging einfacher, Problem waren die Aliases. Lasse ich den yahka direkt auf die MQTT Objekte zugreifen, läufts.

      posted in Error/Bug
      M
      maxp
    • RE: [gelöst] yahka startet nicht - uncaught exception

      @wendy2702
      0.13.1., die Versionen davor laufen auch nicht mehr. Der Adapter lief sehr lange fast tadellos, jetzt halt gar nicht mehr.

      posted in Error/Bug
      M
      maxp
    • RE: [gelöst] yahka startet nicht - uncaught exception

      @unclesam ...war leider nix. Mit node 12.20.1 das selbe, uncaught exception. Kann es daran liegen, dass im yahka das verwendete Objekt jeweils ein alias.0.* ist?

      posted in Error/Bug
      M
      maxp
    • [gelöst] yahka startet nicht - uncaught exception

      Hallo,

      seit einer Weile kommt der yahka Adapter nicht mehr hoch. Er schmiert direkt nach oder beim starten ab:

      yahka.0	2021-01-27 18:37:40.718	warn	(20344) Terminated (UNCAUGHT_EXCEPTION): Without reason
      yahka.0	2021-01-27 18:37:40.718	info	(20344) terminating
      yahka.0	2021-01-27 18:37:40.717	info	(20344) cleaned up ...
      yahka.0	2021-01-27 18:37:40.717	info	(20344) cleaning up ...
      yahka.0	2021-01-27 18:37:40.223	error	(20344) Cannot read property 'homekit.min' of undefined
      yahka.0	2021-01-27 18:37:40.223	error	at THomeKitBridge../yahka.homekit-bridge.ts.THomeKitBridge.createDevice (/opt/iobroker/node_modules/iobroker.yahka/webpack:/yahka.homekit-bridge.ts:121:33)
      yahka.0	2021-01-27 18:37:40.223	error	at YahkaServiceInitializer../yahka.homekit-service.ts.YahkaServiceInitializer.initServices (/opt/iobroker/node_modules/iobroker.yahka/webpack:/yahka.homekit-service.ts:21:18)
      yahka.0	2021-01-27 18:37:40.223	error	at YahkaServiceInitializer../yahka.homekit-service.ts.YahkaServiceInitializer.initService (/opt/iobroker/node_modules/iobroker.yahka/webpack:/yahka.homekit-service.ts:55:18)
      yahka.0	2021-01-27 18:37:40.223	error	at YahkaServiceInitializer../yahka.homekit-service.ts.YahkaServiceInitializer.initCharacteristic (/opt/iobroker/node_modules/iobroker.yahka/webpack:/yahka.homekit-service.ts:100:57)
      yahka.0	2021-01-27 18:37:40.223	error	at TIOBrokerAdapter../yahka.ioBroker-adapter.ts.TIOBrokerAdapter.CreateBinding (/opt/iobroker/node_modules/iobroker.yahka/webpack:/yahka.ioBroker-adapter.ts:177:44)
      yahka.0	2021-01-27 18:37:40.223	error	at Object.createConversionFunction (/opt/iobroker/node_modules/iobroker.yahka/webpack:/yahka.functions/functions.factory.ts:21:53)
      yahka.0	2021-01-27 18:37:40.223	error	at Object../yahka.functions/functions.import.ts.functions_factory_1.conversionFactory.scaleInt (/opt/iobroker/node_modules/iobroker.yahka/webpack:/yahka.functions/functions.import.ts:32:53)
      yahka.0	2021-01-27 18:37:40.223	error	at new TIoBrokerConversion_Scale_Rounded (/opt/iobroker/node_modules/iobroker.yahka/main.js:1888:42)
      yahka.0	2021-01-27 18:37:40.223	error	at TIoBrokerConversion_Scale_Rounded.TIoBrokerConversion_Scale [as constructor] (/opt/iobroker/node_modules/iobroker.yahka/webpack:/yahka.functions/conversion.scale.ts:21:40)
      yahka.0	2021-01-27 18:37:40.223	error	at Function../yahka.functions/conversion.scale.ts.TIoBrokerConversion_Scale.isScaleParameter (/opt/iobroker/node_modules/iobroker.yahka/webpack:/yahka.functions/conversion.scale.ts:13:27)
      yahka.0	2021-01-27 18:37:40.223	error	(20344) TypeError: Cannot read property 'homekit.min' of undefined
      yahka.0	2021-01-27 18:37:40.165	error	(20344) unhandled promise rejection: Cannot read property 'homekit.min' of undefined
      yahka.0	2021-01-27 18:37:40.165	error	(20344) Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
      

      Die letzte laufende Version war v0.9.1. Die läuft auch nicht mehr:

      host.iobroker	2021-01-27 18:02:40.153	error	instance system.adapter.yahka.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
      host.iobroker	2021-01-27 18:02:40.153	error	Caught by controller[0]: at /opt/iobroker/node_modules/iobroker.yahka/main.js:84:18
      host.iobroker	2021-01-27 18:02:40.153	error	Caught by controller[0]: at __webpack_require__ (/opt/iobroker/node_modules/iobroker.yahka/main.js:20:30)
      host.iobroker	2021-01-27 18:02:40.153	error	Caught by controller[0]: at Object../main.ts (/opt/iobroker/node_modules/iobroker.yahka/main.js:290:30)
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: at Object.<anonymous> (/opt/iobroker/node_modules/iobroker.yahka/main.js:271:17)
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: at __webpack_require__ (/opt/iobroker/node_modules/iobroker.yahka/main.js:20:30)
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: at Object../yahka.ioBroker-adapter.ts (/opt/iobroker/node_modules/iobroker.yahka/main.js:2326:16)
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: at __webpack_require__ (/opt/iobroker/node_modules/iobroker.yahka/main.js:20:30)
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: at Object../yahka.homekit-bridge.ts (/opt/iobroker/node_modules/iobroker.yahka/main.js:1764:25)
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: at Object.importHAPCommunityTypesAndFixes (/opt/iobroker/node_modules/iobroker.yahka/main.js:382:26)
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: at module.exports (/opt/iobroker/node_modules/hap-nodejs-community-types/types.js:939:45)
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: TypeError: Cannot read property 'generate' of undefined
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: ^
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: CommunityTypes.InputVoltageAC.UUID = UUID.generate('CommunityTypes:usagedevice:InputVoltageAC');
      host.iobroker	2021-01-27 18:02:40.152	error	Caught by controller[0]: /opt/iobroker/node_modules/hap-nodejs-community-types/types.js:939
      

      Was kann das sein?

      Systemdata Bitte Ausfüllen
      Hardwaresystem: Linux Container auf Core i5
      Arbeitsspeicher: 16 GB
      Festplattenart: SSD
      Betriebssystem: Linux
      Node-Version: 10.23.1
      Nodejs-Version: 10.x.x
      NPM-Version: 6.14.10
      Installationsart: Skript
      Image genutzt: Nein
      Ort/Name der Imagedatei: Script: https://iobroker.net/install.sh

      Danke Euch!
      Max

      posted in Error/Bug
      M
      maxp
    • RE: Klima an, Kontakt schaltet aus, Klima an, wenn sie an war

      Marc hat sich gemeldet und v1.1.1 auf GitHub publiziert. Damit geht es jetzt. - Danke Marc!

      posted in Blockly
      M
      maxp
    • RE: [Vorlage] Alias per Skript erzeugen

      @paul53

      Habe mich endlich durchgerungen, meine alte alias-selbstbau-Lösung, basierend auf gegenseitigem on() durch die effizienteren Aliases zu ersetzen. Ich komme auf einige viele, paul53's Scriptvorlage ist wertvoll - ohne die wäre ich das wahrscheinlich noch länger nicht angegangen.

      Habe die Vorlage angepasst, da sie bei mir nicht alle Objekte anlegte und vor allem mit den rooms und functions Probleme machte.

      Vielleicht kann's ja jemand brauchen, hier mit Beispiel:

      // Originalversion: User Paul53, https://forum.iobroker.net/topic/27295/vorlage-alias-per-skript-erzeugen
      // Angepasst an die asynchrone Eigenschaft von Javascript, kleine Ergänzungen.
      
      const prefix = 'alias.0.';
      const custhist = {
            "history.0": {
              "enabled": true,
              "changesOnly": true,
              "debounce": "200",
              "maxLength": "960",
              "retention": "1209600",
              "changesRelogInterval": "60",
              "changesMinDelta": 0,
              "aliasId": ""
            },
            "influxdb.0": {
              "enabled": true,
              "changesOnly": true,
              "debounce": "200",
              "retention": "63072000", 
              "changesRelogInterval": "60",
              "changesMinDelta": 0,
              "storageType": "",
              "aliasId": ""
            }
          };
      
      // Aliasdefinition als Array of Objects
      var aa = [
      /***
      {
          idOrigin : prefix + '',      // Orignal-Datenpunkt
          idRead : '',        // Status-Datenpunkt, wenn Status und Kommando getrennt. Leer wenn keine Trennung
          idAlias : prefix + '',       // Alias-Datenpunkt
          recreate : false,   // true: evtl. existierender Alias wird gelöscht - EXPERIMENTAL
          extend : true,      // true: evtl. existierender Alias wird ergänzt - EXPERIMENTAL: extendObject() statt setObject()
          typeAlias : '',     // Datentyp für Alias: number, boolean, mixed
          read : '',          // "val < 20 ? true : false" // Erkennung "Aus" --> false erfolgt automatisch
          write : '',         // "val ? 'Ein' : 'Aus'"
          nameAlias : '',     // Bezeichnung
          role : '',          // ioBroker Rolle
          desc : '',          // Beschreibung
          min : 0,            // Minimalwert, nur bei Datentyp number
          max : 100,          // Maximalwert, nur bei Datentyp number
          unit : '',          // Einheit bei Datentyp number: %, W, °C, usw.
          states : '',        // {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
          custom : [];        // leeres Array wird automatisch gesetzt, falls nichts angegeben. Verhindert doppelte Ausführung von
          history, ...
          raum : '',          // enum.room, Groß-/Kleinschreibung in der ID beachten
          gewerk : '',        // enum.function, Groß-/Kleinschreibung in der ID beachten
          owner : '',         // Owner, etwa system.user.admin
          group : '',         // Group, etwa system.group.familie
      },
      ***/
      
      // --------------------
      // Batterien
      {
      	idAlias : prefix + 'Batterien.shellyht-F00000',
      	idOrigin : 'shelly.0.SHHT-1#F00000#1.bat.value',
      	recreate : true,
      	extend : true,
      	nameAlias : 'Shelly HT Sensor',
      	raum : 'werkstatt',
      	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      },
      // --------------------
      // Werkstatt
      {
      	idAlias : prefix + "Werkstatt.Klima.Temperatur",
      	idOrigin : "shelly.0.SHHT-1#F00000#1.tmp.temperatureC",
      	recreate : false,
      	extend : true,
      	nameAlias : "Raumtemperatur",
      	unit : '°C',
      	raum : 'werkstatt',
      	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      },
      {
      	idAlias : prefix + "Werkstatt.Klima.Luftfeuchte",
      	idOrigin : "shelly.0.SHHT-1#F00000#1.hum.value",
      	recreate : false,
      	extend : true,
      	nameAlias : "Luftfeuchte (rel.)",
      	unit : '%',
      	raum : 'werkstatt',
         	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      },
      {
      	idAlias : prefix + 'Werkstatt.Entfeuchter.Leistung',
      	idOrigin : 'sonoff.0.Entfeuchter.ENERGY_Power',
      	recreate : false,
      	extend : true,
      	nameAlias : "Leistungsaufnahme",
      	unit : "W",
      	raum : 'werkstatt',
      	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      },
      {
      	idAlias : prefix + 'Werkstatt.Entfeuchter.Schalter',
      	idOrigin : 'sonoff.0.Entfeuchter.POWER',
      	recreate : false,
      	extend : true,
      	nameAlias : "Schalter",
      	raum : 'werkstatt',
      	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      },
      // ------------------------------
      // WOHNZIMMER
      {
      	idAlias : prefix + 'Wohnzimmer.Couchkugel.Schalter',
      	idOrigin : 'hue.0.Couchkugel.on',
      	recreate : false,
      	extend : true,
      	raum : 'wohnzimmer',
      	custom : custhist,
      	owner : "system.user.admin",
      	group : "system.group.familie"
      }
      ];
      
      
      // ******************************
      
      // -------------------------------------------------
      // -------------------------------------------------
      function alias2enum(a, en, cb) {
          cb = (typeof(cb) === 'function') ? cb : function() {};
          if (en) {
              var o = getObject(en); 
              if(o) {
                  if (!o.common.members.includes(a)) {
                      o.common.members.push(a);
                      setObject(en, o, function(e, o) { cb(); });
                  } else cb();
              } else {
                  log('alias2enum: ' + en + ' cannot get object', 'warn');
                  cb();
              }
      	} else {
              log('alias2enum: ' + en + ' is invalid', 'warn');
              cb();
          }
      }    
      
      
      // ---------------------------------------------------
      // ---------------------------------------------------
      function createAlias(o, cb) {
          var obj = {};
          
          cb = (typeof(cb) === 'function') ? cb : function() {};
      
          if (!o || ! o.idOrigin || !o.idAlias) {
              log(o, 'error');
          }
          
          if (!existsState(o.idOrigin)) {
              log(o.idOrigin + ' existiert nicht', 'warn');
              cb();
              return;
          }
      
          if (existsState(o.idAlias)) {
              if (o.recreate) {
                  log(o.idAlias + ' wird gelöscht', 'warn');    
                  // EXPERIMENTAL
                  // deleteObject() gibt keinen Fehler aus, löscht aber auch nicht.
                  // falsche Anwendung? --> Recherchieren... ;-)
                  // workaround: recreate auf false und extend auf true setzen.
                  deleteObject(o.idAlias, false, function(err, obj) {
                      o.recreate = false;
                      o.extend = true;
                      createAlias(o, cb);
                      return;
                  });
              } else if (!o.extend) {
                  log(o.idAlias + ' schon vorhanden')
                  cb();
                  return;
              } else {
                  log(o.idAlias + ' wird ergänzt');
              }
          } else {
              log(o.idAlias + ' wird angelegt');
          }
      
          obj.type = 'state';
          obj.common = getObject(o.idOrigin).common;
          obj.acl = getObject(o.idOrigin).acl;
          obj.common.alias = {};
      
          if(o.idRead) {
              obj.common.alias.id = {};
              obj.common.alias.id.read = o.idRead;
              obj.common.alias.id.write = o.idOrigin;
              obj.common.read = true;
          } else obj.common.alias.id = o.idOrigin;
          
          if(o.typeAlias) obj.common.type = o.typeAlias;
          if(obj.common.read !== false && o.read) obj.common.alias.read = o.read;
          if(obj.common.write !== false && o.write) obj.common.alias.write = o.write;
          if(o.nameAlias) obj.common.name = o.nameAlias;
          if(o.role) obj.common.role = o.role;
          if(o.desc) obj.common.desc = o.desc;
          if(o.min !== undefined) obj.common.min = o.min;
          if(o.max !== undefined) obj.common.max = o.max;
          if(o.unit) obj.common.unit = o.unit;
          if(o.states) obj.common.states = o.states;
          if(o.owner && obj.acl.owner) obj.acl.owner = o.owner;
          if(o.group && obj.acl.ownerGroup) obj.acl.ownerGroup = o.group;
        
          if(o.custom) {
              obj.common.custom = o.custom;
          } else {
              obj.common.custom = [];
          }
          
          obj.native = {};
      	
          // EXPERIMENTAL
          // Auswirkung von extendObject() auf Historydaten?
          extendObject(o.idAlias, obj, function(e, oa) {
              if (e) {
                  log('Alias ' + o.idAlias + ' nicht angelegt - Fehler ' + e, 'error');
                  cb();
                  return;
              }
              log(o.idAlias + ' wird zum Raum ' + o.raum + ' hinzugefügt', 'info');
              alias2enum(o.idAlias, 'enum.rooms.' + o.raum, function() {
                  if (o.gewerk) {
                      log(o.idAlias + ' wird zur Funktion ' + o.gewerk + ' hinzugefügt', 'info');
                      alias2enum(o.idAlias, 'enum.funtions.' + o.gewerk, cb);
                  } else cb();
              });
          }); 
      }
      
      
      // ---------------------------------------------------
      // ---------------------------------------------------
      function createAliases() {
      	if (!aa) return;
      	if (!aa.length) return;
      	createAlias(aa.shift(), createAliases);
      }
      
      
      // *******************************
      
      createAliases();
      
      

      Danke paul53 👍

      posted in JavaScript
      M
      maxp
    • RE: Klima an, Kontakt schaltet aus, Klima an, wenn sie an war

      @Slowman
      ok - hatte ich auch. Danke Dir.

      posted in Blockly
      M
      maxp
    • RE: Klima an, Kontakt schaltet aus, Klima an, wenn sie an war

      @Slowman
      Wie hast Du denn den Adapter installiert? Von GitHub, custom Link?

      posted in Blockly
      M
      maxp
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo