Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Praktische Anwendungen (Showcase)
  4. CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor

NEWS

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    431

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    358

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    959

CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor

Geplant Angeheftet Gesperrt Verschoben Praktische Anwendungen (Showcase)
zigbeediyptvo
167 Beiträge 11 Kommentatoren 29.5k Aufrufe 13 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • skvarelS Online
    skvarelS Online
    skvarel
    Developer
    schrieb am zuletzt editiert von
    #87

    Hier nochmal der aktuelle Konverter:

    https://github.com/inventwo/custom-zigbee/blob/main/Converter/CC2531.US100.js

    #TeamInventwo
    Unsere Adapter:
    Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

    Wer uns mit einem Kaffee unterstützen möchte: PayPal

    1 Antwort Letzte Antwort
    -1
    • skvarelS skvarel

      @asgothian .. puhh, das klingt doch schon kompliziert.

      AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      schrieb am zuletzt editiert von Asgothian
      #88

      @skvarel sagte in CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor:

      @asgothian .. puhh, das klingt doch schon kompliziert.

      Es ist einfacher als du denkst. Ich hatte bei der Beschreibung aber auch einen Denkfehler. Versuch mal so:

      const fzlocal = {
      ptvo_switch_analog_to_boolean: {
              cluster: 'genAnalogInput',
              type: ['attributeReport', 'readResponse'],
              convert: (model, msg, publish, options, meta) => {
                  const value =( msg.data['presentValue'] > 300 );
                  const action = (value ? 'occupied':'free');
                  return {action: postfixWithEndpointName(action, msg, model, meta)};
               },
      };
      
      const device = {
          zigbeeModel: ['CC2531.US100'],
          model: 'CC2531.US100',
          vendor: 'inventwo',
          description: '[CC2531 w. US-100 Sensor](https://github.com/inventwo/custom-zigbee)',
          fromZigbee: [fz.ignore_basic_report, fz.ptvo_switch_uart, fz.ptvo_switch_analog_input,fzlocal.ptvo_switch_analog_to_boolean],
          toZigbee: [tz.ptvo_switch_trigger, tz.ptvo_switch_uart,],
          exposes: [
            exposes.numeric('l1', ea.STATE).withDescription('Innenraummessung').withUnit('mm'),
            exposes.action(['occupied'].withDescription('Innenraum belegt'),
            exposes.action(['free'].withDescription('Innenraum frei'),
              ],
          meta: {
              multiEndpoint: true,
                      
          },
          endpoint: (device) => {
              return {
                  l1: 1,
              };
          },
      
          configure: async (device, coordinatorEndpoint, logger) => {
            const endpoint = device.getEndpoint(1);
            await endpoint.read('genBasic', ['modelId', 'swBuildId', 'powerSource']);
          },
      
      };
      

      A.

      Nachtrag: ich hab das icon aus dem code genommen, und den Kopf nicht mit angegeben - das sollte aber kein problem für Dich sein

      Nachtrag2: ich hatte noch einen Denkfehler - ist jetzt korrigiert.

      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

      skvarelS 2 Antworten Letzte Antwort
      0
      • AsgothianA Asgothian

        @skvarel sagte in CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor:

        @asgothian .. puhh, das klingt doch schon kompliziert.

        Es ist einfacher als du denkst. Ich hatte bei der Beschreibung aber auch einen Denkfehler. Versuch mal so:

        const fzlocal = {
        ptvo_switch_analog_to_boolean: {
                cluster: 'genAnalogInput',
                type: ['attributeReport', 'readResponse'],
                convert: (model, msg, publish, options, meta) => {
                    const value =( msg.data['presentValue'] > 300 );
                    const action = (value ? 'occupied':'free');
                    return {action: postfixWithEndpointName(action, msg, model, meta)};
                 },
        };
        
        const device = {
            zigbeeModel: ['CC2531.US100'],
            model: 'CC2531.US100',
            vendor: 'inventwo',
            description: '[CC2531 w. US-100 Sensor](https://github.com/inventwo/custom-zigbee)',
            fromZigbee: [fz.ignore_basic_report, fz.ptvo_switch_uart, fz.ptvo_switch_analog_input,fzlocal.ptvo_switch_analog_to_boolean],
            toZigbee: [tz.ptvo_switch_trigger, tz.ptvo_switch_uart,],
            exposes: [
              exposes.numeric('l1', ea.STATE).withDescription('Innenraummessung').withUnit('mm'),
              exposes.action(['occupied'].withDescription('Innenraum belegt'),
              exposes.action(['free'].withDescription('Innenraum frei'),
                ],
            meta: {
                multiEndpoint: true,
                        
            },
            endpoint: (device) => {
                return {
                    l1: 1,
                };
            },
        
            configure: async (device, coordinatorEndpoint, logger) => {
              const endpoint = device.getEndpoint(1);
              await endpoint.read('genBasic', ['modelId', 'swBuildId', 'powerSource']);
            },
        
        };
        

        A.

        Nachtrag: ich hab das icon aus dem code genommen, und den Kopf nicht mit angegeben - das sollte aber kein problem für Dich sein

        Nachtrag2: ich hatte noch einen Denkfehler - ist jetzt korrigiert.

        skvarelS Online
        skvarelS Online
        skvarel
        Developer
        schrieb am zuletzt editiert von skvarel
        #89

        @asgothian .. teste ich!

        #TeamInventwo
        Unsere Adapter:
        Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

        Wer uns mit einem Kaffee unterstützen möchte: PayPal

        1 Antwort Letzte Antwort
        0
        • AsgothianA Asgothian

          @skvarel sagte in CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor:

          @asgothian .. puhh, das klingt doch schon kompliziert.

          Es ist einfacher als du denkst. Ich hatte bei der Beschreibung aber auch einen Denkfehler. Versuch mal so:

          const fzlocal = {
          ptvo_switch_analog_to_boolean: {
                  cluster: 'genAnalogInput',
                  type: ['attributeReport', 'readResponse'],
                  convert: (model, msg, publish, options, meta) => {
                      const value =( msg.data['presentValue'] > 300 );
                      const action = (value ? 'occupied':'free');
                      return {action: postfixWithEndpointName(action, msg, model, meta)};
                   },
          };
          
          const device = {
              zigbeeModel: ['CC2531.US100'],
              model: 'CC2531.US100',
              vendor: 'inventwo',
              description: '[CC2531 w. US-100 Sensor](https://github.com/inventwo/custom-zigbee)',
              fromZigbee: [fz.ignore_basic_report, fz.ptvo_switch_uart, fz.ptvo_switch_analog_input,fzlocal.ptvo_switch_analog_to_boolean],
              toZigbee: [tz.ptvo_switch_trigger, tz.ptvo_switch_uart,],
              exposes: [
                exposes.numeric('l1', ea.STATE).withDescription('Innenraummessung').withUnit('mm'),
                exposes.action(['occupied'].withDescription('Innenraum belegt'),
                exposes.action(['free'].withDescription('Innenraum frei'),
                  ],
              meta: {
                  multiEndpoint: true,
                          
              },
              endpoint: (device) => {
                  return {
                      l1: 1,
                  };
              },
          
              configure: async (device, coordinatorEndpoint, logger) => {
                const endpoint = device.getEndpoint(1);
                await endpoint.read('genBasic', ['modelId', 'swBuildId', 'powerSource']);
              },
          
          };
          

          A.

          Nachtrag: ich hab das icon aus dem code genommen, und den Kopf nicht mit angegeben - das sollte aber kein problem für Dich sein

          Nachtrag2: ich hatte noch einen Denkfehler - ist jetzt korrigiert.

          skvarelS Online
          skvarelS Online
          skvarel
          Developer
          schrieb am zuletzt editiert von
          #90

          @asgothian .. das funktioniert leider überhaupt nicht

          94dc8da6-ed93-4fa0-aafd-40524a50b9d4-image.png

          Sobald ich deine Teile einsetze, kommt gar nichts mehr an. Bei dir waren noch ein paar Klammern offen. Die habe ich geschlossen.

          So hatte ich den Code verwendet:

          const fzlocal = {
            ptvo_switch_analog_to_boolean: {
                    cluster: 'genAnalogInput',
                    type: ['attributeReport', 'readResponse'],
                    convert: (model, msg, publish, options, meta) => {
                        const value =( msg.data['presentValue'] > 300 );
                        const action = (value ? 'occupied':'free');
                        return {action: postfixWithEndpointName(action, msg, model, meta)};
                     },
            }
          };
          
          const device = {
              zigbeeModel: ['CC2531.US100'],
              model: 'CC2531.US100',
              vendor: 'inventwo',
              description: '[CC2531 w. US-100 Sensor](https://github.com/inventwo/custom-zigbee)',
              fromZigbee: [fz.ignore_basic_report, fz.ptvo_switch_uart, fz.ptvo_switch_analog_input, fzlocal.ptvo_switch_analog_to_boolean],
              toZigbee: [tz.ptvo_switch_trigger, tz.ptvo_switch_uart,],
              exposes: [
                exposes.numeric('l1', ea.STATE).withDescription('Innenraummessung').withUnit('mm'),
                exposes.action(['occupied']).withDescription('Innenraum belegt'),
                exposes.action(['free']).withDescription('Innenraum frei'),
              ],
              meta: {
                  multiEndpoint: true,
                          
              },
              endpoint: (device) => {
                  return {
                      l1: 1,
                  };
              },
              
              configure: async (device, coordinatorEndpoint, logger) => {
                const endpoint = device.getEndpoint(1);
                await endpoint.read('genBasic', ['modelId', 'swBuildId', 'powerSource']);
              },
          
          };
          

          #TeamInventwo
          Unsere Adapter:
          Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

          Wer uns mit einem Kaffee unterstützen möchte: PayPal

          AsgothianA 2 Antworten Letzte Antwort
          0
          • skvarelS skvarel

            @asgothian .. das funktioniert leider überhaupt nicht

            94dc8da6-ed93-4fa0-aafd-40524a50b9d4-image.png

            Sobald ich deine Teile einsetze, kommt gar nichts mehr an. Bei dir waren noch ein paar Klammern offen. Die habe ich geschlossen.

            So hatte ich den Code verwendet:

            const fzlocal = {
              ptvo_switch_analog_to_boolean: {
                      cluster: 'genAnalogInput',
                      type: ['attributeReport', 'readResponse'],
                      convert: (model, msg, publish, options, meta) => {
                          const value =( msg.data['presentValue'] > 300 );
                          const action = (value ? 'occupied':'free');
                          return {action: postfixWithEndpointName(action, msg, model, meta)};
                       },
              }
            };
            
            const device = {
                zigbeeModel: ['CC2531.US100'],
                model: 'CC2531.US100',
                vendor: 'inventwo',
                description: '[CC2531 w. US-100 Sensor](https://github.com/inventwo/custom-zigbee)',
                fromZigbee: [fz.ignore_basic_report, fz.ptvo_switch_uart, fz.ptvo_switch_analog_input, fzlocal.ptvo_switch_analog_to_boolean],
                toZigbee: [tz.ptvo_switch_trigger, tz.ptvo_switch_uart,],
                exposes: [
                  exposes.numeric('l1', ea.STATE).withDescription('Innenraummessung').withUnit('mm'),
                  exposes.action(['occupied']).withDescription('Innenraum belegt'),
                  exposes.action(['free']).withDescription('Innenraum frei'),
                ],
                meta: {
                    multiEndpoint: true,
                            
                },
                endpoint: (device) => {
                    return {
                        l1: 1,
                    };
                },
                
                configure: async (device, coordinatorEndpoint, logger) => {
                  const endpoint = device.getEndpoint(1);
                  await endpoint.read('genBasic', ['modelId', 'swBuildId', 'powerSource']);
                },
            
            };
            
            AsgothianA Offline
            AsgothianA Offline
            Asgothian
            Developer
            schrieb am zuletzt editiert von
            #91

            @skvarel gibt es Meldungen im log ? Ich bin wieder unterwegs und schau mal wenn ich wieder zu Hause bin

            ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
            "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

            1 Antwort Letzte Antwort
            0
            • skvarelS skvarel

              @asgothian .. das funktioniert leider überhaupt nicht

              94dc8da6-ed93-4fa0-aafd-40524a50b9d4-image.png

              Sobald ich deine Teile einsetze, kommt gar nichts mehr an. Bei dir waren noch ein paar Klammern offen. Die habe ich geschlossen.

              So hatte ich den Code verwendet:

              const fzlocal = {
                ptvo_switch_analog_to_boolean: {
                        cluster: 'genAnalogInput',
                        type: ['attributeReport', 'readResponse'],
                        convert: (model, msg, publish, options, meta) => {
                            const value =( msg.data['presentValue'] > 300 );
                            const action = (value ? 'occupied':'free');
                            return {action: postfixWithEndpointName(action, msg, model, meta)};
                         },
                }
              };
              
              const device = {
                  zigbeeModel: ['CC2531.US100'],
                  model: 'CC2531.US100',
                  vendor: 'inventwo',
                  description: '[CC2531 w. US-100 Sensor](https://github.com/inventwo/custom-zigbee)',
                  fromZigbee: [fz.ignore_basic_report, fz.ptvo_switch_uart, fz.ptvo_switch_analog_input, fzlocal.ptvo_switch_analog_to_boolean],
                  toZigbee: [tz.ptvo_switch_trigger, tz.ptvo_switch_uart,],
                  exposes: [
                    exposes.numeric('l1', ea.STATE).withDescription('Innenraummessung').withUnit('mm'),
                    exposes.action(['occupied']).withDescription('Innenraum belegt'),
                    exposes.action(['free']).withDescription('Innenraum frei'),
                  ],
                  meta: {
                      multiEndpoint: true,
                              
                  },
                  endpoint: (device) => {
                      return {
                          l1: 1,
                      };
                  },
                  
                  configure: async (device, coordinatorEndpoint, logger) => {
                    const endpoint = device.getEndpoint(1);
                    await endpoint.read('genBasic', ['modelId', 'swBuildId', 'powerSource']);
                  },
              
              };
              
              AsgothianA Offline
              AsgothianA Offline
              Asgothian
              Developer
              schrieb am zuletzt editiert von
              #92

              @skvarel ich hab nochmal was angepasst. Versuch bitte mal so:

              const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters');
              const zigbeeHerdsmanUtils = require('zigbee-herdsman-converters/lib/utils');
              
              
              const exposes = zigbeeHerdsmanConverters['exposes'] || require("zigbee-herdsman-converters/lib/exposes");
              const ea = exposes.access;
              const e = exposes.presets;
              const modernExposes = (e.hasOwnProperty('illuminance_lux'))? false: true;
              
              const fz = zigbeeHerdsmanConverters.fromZigbeeConverters || zigbeeHerdsmanConverters.fromZigbee;
              const tz = zigbeeHerdsmanConverters.toZigbeeConverters || zigbeeHerdsmanConverters.toZigbee;
              
              const ptvo_switch = (zigbeeHerdsmanConverters.findByModel)?zigbeeHerdsmanConverters.findByModel('ptvo.switch'):zigbeeHerdsmanConverters.findByDevice({modelID: 'ptvo.switch'});
              fz.legacy = ptvo_switch.meta.tuyaThermostatPreset;
              fz.ptvo_on_off = {
                cluster: 'genOnOff',
                type: ['attributeReport', 'readResponse'],
                convert: (model, msg, publish, options, meta) => {
                    if (msg.data.hasOwnProperty('onOff')) {
                        const channel = msg.endpoint.ID;
                        const endpointName = `l${channel}`;
                        const binaryEndpoint = model.meta && model.meta.binaryEndpoints && model.meta.binaryEndpoints[endpointName];
                        const prefix = (binaryEndpoint) ? model.meta.binaryEndpoints[endpointName] : 'state';
                        const property = `${prefix}_${endpointName}`;
              	  if (binaryEndpoint) {
                          return {[property]: msg.data['onOff'] === 1};
                        }
                        return {[property]: msg.data['onOff'] === 1 ? 'ON' : 'OFF'};
                    }
                },
              };
              const fzlocal = {
                local_analog_switch: {
                  cluster: 'genAnalogInput',
                  type: ['attributeReport', 'readResponse'],
                  convert: (model, msg, publish, options, meta) => {
                      const payload = {};
                      const channel = msg.endpoint.ID;
                      const name = `l${channel}`;
                      const endpoint = msg.endpoint;
                      payload[name] = precisionRound(msg.data['presentValue'], 3);
                      payload[`contact_${channel}`] = (msg.data['presentValue']  < 300)
                      const cluster = 'genLevelCtrl';
                      if (endpoint && (endpoint.supportsInputCluster(cluster) || endpoint.supportsOutputCluster(cluster))) {
                          payload['brightness_' + name] = msg.data['presentValue'];
                      } else if (msg.data.description !== undefined) {
                          const data1 = msg.data['description'];
                          if (data1) {
                              const data2 = data1.split(',');
                              const devid = data2[1];
                              const unit = data2[0];
                              if (devid) {
                                  payload['device_' + name] = devid;
                              }
              
                              const valRaw = msg.data['presentValue'];
                              if (unit) {
                                  let val = precisionRound(valRaw, 1);
              
                                  const nameLookup = {
                                      C: 'temperature',
                                      '%': 'humidity',
                                      m: 'altitude',
                                      Pa: 'pressure',
                                      ppm: 'quality',
                                      psize: 'particle_size',
                                      V: 'voltage',
                                      A: 'current',
                                      Wh: 'energy',
                                      W: 'power',
                                      Hz: 'frequency',
                                      pf: 'power_factor',
                                      lx: 'illuminance',
                                  };
              
                                  let nameAlt = '';
                                  if (unit === 'A' || unit === 'pf') {
                                      if (valRaw < 1) {
                                          val = precisionRound(valRaw, 3);
                                      }
                                  }
                                  if (unit.startsWith('mcpm') || unit.startsWith('ncpm')) {
                                      const num = unit.substr(4, 1);
                                      nameAlt = num === 'A' ? unit.substr(0, 4) + '10' : unit;
                                      val = precisionRound(valRaw, 2);
                                  } else {
                                      nameAlt = nameLookup[unit];
                                  }
                                  if (nameAlt === undefined) {
                                      const valueIndex = parseInt(unit, 10);
                                      if (!isNaN(valueIndex)) {
                                          nameAlt = 'val' + unit;
                                      }
                                  }
              
                                  if (nameAlt !== undefined) {
                                      payload[nameAlt + '_' + name] = val;
                                  }
                              }
                          }
                      }
                      return payload;
                  },
                },
              
                
              }
              
              const device = {
                  zigbeeModel: ['CC2531.US100'],
                  model: 'CC2531.US100',
                  vendor: 'inventwo',
                  description: '[CC2531 w. US-100 Sensor](https://github.com/inventwo/custom-zigbee)',
                  fromZigbee: [fz.ignore_basic_report, fz.ptvo_switch_uart, fzlocal.local_analog_switch,],
                  toZigbee: [tz.ptvo_switch_trigger, tz.ptvo_switch_uart,],
                  exposes: [
                    exposes.numeric('l1', ea.STATE).withDescription('Innenraummessung').withUnit('mm'),
                    e.contact().withEndpoint('l1'),
                  ],
                  meta: {
                      multiEndpoint: true,
                              
                  },
                  endpoint: (device) => {
                      return {
                          l1: 1,
                      };
                  },
                    configure: async (device, coordinatorEndpoint, logger) => {
                    const endpoint = device.getEndpoint(1);
                    await endpoint.read('genBasic', ['modelId', 'swBuildId', 'powerSource']);
                  },
              
              };
              
              module.exports = device;
              

              (wieder ohne icon)

              ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
              "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

              skvarelS 1 Antwort Letzte Antwort
              0
              • AsgothianA Asgothian

                @skvarel ich hab nochmal was angepasst. Versuch bitte mal so:

                const zigbeeHerdsmanConverters = require('zigbee-herdsman-converters');
                const zigbeeHerdsmanUtils = require('zigbee-herdsman-converters/lib/utils');
                
                
                const exposes = zigbeeHerdsmanConverters['exposes'] || require("zigbee-herdsman-converters/lib/exposes");
                const ea = exposes.access;
                const e = exposes.presets;
                const modernExposes = (e.hasOwnProperty('illuminance_lux'))? false: true;
                
                const fz = zigbeeHerdsmanConverters.fromZigbeeConverters || zigbeeHerdsmanConverters.fromZigbee;
                const tz = zigbeeHerdsmanConverters.toZigbeeConverters || zigbeeHerdsmanConverters.toZigbee;
                
                const ptvo_switch = (zigbeeHerdsmanConverters.findByModel)?zigbeeHerdsmanConverters.findByModel('ptvo.switch'):zigbeeHerdsmanConverters.findByDevice({modelID: 'ptvo.switch'});
                fz.legacy = ptvo_switch.meta.tuyaThermostatPreset;
                fz.ptvo_on_off = {
                  cluster: 'genOnOff',
                  type: ['attributeReport', 'readResponse'],
                  convert: (model, msg, publish, options, meta) => {
                      if (msg.data.hasOwnProperty('onOff')) {
                          const channel = msg.endpoint.ID;
                          const endpointName = `l${channel}`;
                          const binaryEndpoint = model.meta && model.meta.binaryEndpoints && model.meta.binaryEndpoints[endpointName];
                          const prefix = (binaryEndpoint) ? model.meta.binaryEndpoints[endpointName] : 'state';
                          const property = `${prefix}_${endpointName}`;
                	  if (binaryEndpoint) {
                            return {[property]: msg.data['onOff'] === 1};
                          }
                          return {[property]: msg.data['onOff'] === 1 ? 'ON' : 'OFF'};
                      }
                  },
                };
                const fzlocal = {
                  local_analog_switch: {
                    cluster: 'genAnalogInput',
                    type: ['attributeReport', 'readResponse'],
                    convert: (model, msg, publish, options, meta) => {
                        const payload = {};
                        const channel = msg.endpoint.ID;
                        const name = `l${channel}`;
                        const endpoint = msg.endpoint;
                        payload[name] = precisionRound(msg.data['presentValue'], 3);
                        payload[`contact_${channel}`] = (msg.data['presentValue']  < 300)
                        const cluster = 'genLevelCtrl';
                        if (endpoint && (endpoint.supportsInputCluster(cluster) || endpoint.supportsOutputCluster(cluster))) {
                            payload['brightness_' + name] = msg.data['presentValue'];
                        } else if (msg.data.description !== undefined) {
                            const data1 = msg.data['description'];
                            if (data1) {
                                const data2 = data1.split(',');
                                const devid = data2[1];
                                const unit = data2[0];
                                if (devid) {
                                    payload['device_' + name] = devid;
                                }
                
                                const valRaw = msg.data['presentValue'];
                                if (unit) {
                                    let val = precisionRound(valRaw, 1);
                
                                    const nameLookup = {
                                        C: 'temperature',
                                        '%': 'humidity',
                                        m: 'altitude',
                                        Pa: 'pressure',
                                        ppm: 'quality',
                                        psize: 'particle_size',
                                        V: 'voltage',
                                        A: 'current',
                                        Wh: 'energy',
                                        W: 'power',
                                        Hz: 'frequency',
                                        pf: 'power_factor',
                                        lx: 'illuminance',
                                    };
                
                                    let nameAlt = '';
                                    if (unit === 'A' || unit === 'pf') {
                                        if (valRaw < 1) {
                                            val = precisionRound(valRaw, 3);
                                        }
                                    }
                                    if (unit.startsWith('mcpm') || unit.startsWith('ncpm')) {
                                        const num = unit.substr(4, 1);
                                        nameAlt = num === 'A' ? unit.substr(0, 4) + '10' : unit;
                                        val = precisionRound(valRaw, 2);
                                    } else {
                                        nameAlt = nameLookup[unit];
                                    }
                                    if (nameAlt === undefined) {
                                        const valueIndex = parseInt(unit, 10);
                                        if (!isNaN(valueIndex)) {
                                            nameAlt = 'val' + unit;
                                        }
                                    }
                
                                    if (nameAlt !== undefined) {
                                        payload[nameAlt + '_' + name] = val;
                                    }
                                }
                            }
                        }
                        return payload;
                    },
                  },
                
                  
                }
                
                const device = {
                    zigbeeModel: ['CC2531.US100'],
                    model: 'CC2531.US100',
                    vendor: 'inventwo',
                    description: '[CC2531 w. US-100 Sensor](https://github.com/inventwo/custom-zigbee)',
                    fromZigbee: [fz.ignore_basic_report, fz.ptvo_switch_uart, fzlocal.local_analog_switch,],
                    toZigbee: [tz.ptvo_switch_trigger, tz.ptvo_switch_uart,],
                    exposes: [
                      exposes.numeric('l1', ea.STATE).withDescription('Innenraummessung').withUnit('mm'),
                      e.contact().withEndpoint('l1'),
                    ],
                    meta: {
                        multiEndpoint: true,
                                
                    },
                    endpoint: (device) => {
                        return {
                            l1: 1,
                        };
                    },
                      configure: async (device, coordinatorEndpoint, logger) => {
                      const endpoint = device.getEndpoint(1);
                      await endpoint.read('genBasic', ['modelId', 'swBuildId', 'powerSource']);
                    },
                
                };
                
                module.exports = device;
                

                (wieder ohne icon)

                skvarelS Online
                skvarelS Online
                skvarel
                Developer
                schrieb am zuletzt editiert von skvarel
                #93

                @asgothian .. Meldungen im Log:

                z2m: Exception while calling fromZigbee converter: precisionRound is not defined}

                So sieht es beim neuen Code aus:

                094d1bc2-1361-46c9-b010-0f985c4d64c0-image.png

                #TeamInventwo
                Unsere Adapter:
                Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

                Wer uns mit einem Kaffee unterstützen möchte: PayPal

                AsgothianA 1 Antwort Letzte Antwort
                0
                • skvarelS skvarel

                  @asgothian .. Meldungen im Log:

                  z2m: Exception while calling fromZigbee converter: precisionRound is not defined}

                  So sieht es beim neuen Code aus:

                  094d1bc2-1361-46c9-b010-0f985c4d64c0-image.png

                  AsgothianA Offline
                  AsgothianA Offline
                  Asgothian
                  Developer
                  schrieb am zuletzt editiert von
                  #94

                  @skvarel das ist nachdem du die Fehlermeldung eliminiert hast oder vorher ? einfach den Aufruf zu precisionRound entfernen und den Wert direkt nutzen

                  aus

                  precisionRound(msg.data['presentValue'], 3);
                  

                  wird

                  msg.data['presentValue'];
                  

                  A.

                  ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                  "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                  skvarelS 1 Antwort Letzte Antwort
                  0
                  • AsgothianA Asgothian

                    @skvarel das ist nachdem du die Fehlermeldung eliminiert hast oder vorher ? einfach den Aufruf zu precisionRound entfernen und den Wert direkt nutzen

                    aus

                    precisionRound(msg.data['presentValue'], 3);
                    

                    wird

                    msg.data['presentValue'];
                    

                    A.

                    skvarelS Online
                    skvarelS Online
                    skvarel
                    Developer
                    schrieb am zuletzt editiert von skvarel
                    #95

                    @asgothian sagte in CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor:

                    msg.data['presentValue'];

                    Der Fehler ist jetzt weg! Die Änderung hat geholfen.

                    Es bleibt aber bei N/A

                    89733758-4587-4db1-a1b3-84316476d3e5-image.png

                    #TeamInventwo
                    Unsere Adapter:
                    Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

                    Wer uns mit einem Kaffee unterstützen möchte: PayPal

                    AsgothianA 1 Antwort Letzte Antwort
                    0
                    • skvarelS skvarel

                      @asgothian sagte in CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor:

                      msg.data['presentValue'];

                      Der Fehler ist jetzt weg! Die Änderung hat geholfen.

                      Es bleibt aber bei N/A

                      89733758-4587-4db1-a1b3-84316476d3e5-image.png

                      AsgothianA Offline
                      AsgothianA Offline
                      Asgothian
                      Developer
                      schrieb am zuletzt editiert von
                      #96

                      @skvarel Du bist doch auf dem ioBroker discord. Wollen wir uns da kurz zusammen hängen - geht einfacher als hier per posts.

                      Ich bin einfach mal im '2 user only' channel :)

                      A.

                      ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                      "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                      skvarelS 1 Antwort Letzte Antwort
                      1
                      • AsgothianA Asgothian

                        @skvarel Du bist doch auf dem ioBroker discord. Wollen wir uns da kurz zusammen hängen - geht einfacher als hier per posts.

                        Ich bin einfach mal im '2 user only' channel :)

                        A.

                        skvarelS Online
                        skvarelS Online
                        skvarel
                        Developer
                        schrieb am zuletzt editiert von
                        #97

                        @asgothian .. heute schaffe ich es leider nicht mehr. Morgen hätte ich Zeit.

                        #TeamInventwo
                        Unsere Adapter:
                        Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

                        Wer uns mit einem Kaffee unterstützen möchte: PayPal

                        AsgothianA 1 Antwort Letzte Antwort
                        0
                        • skvarelS skvarel

                          @asgothian .. heute schaffe ich es leider nicht mehr. Morgen hätte ich Zeit.

                          AsgothianA Offline
                          AsgothianA Offline
                          Asgothian
                          Developer
                          schrieb am zuletzt editiert von
                          #98

                          @skvarel morgen tuts. Wann ?

                          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                          skvarelS 1 Antwort Letzte Antwort
                          1
                          • AsgothianA Asgothian

                            @skvarel morgen tuts. Wann ?

                            skvarelS Online
                            skvarelS Online
                            skvarel
                            Developer
                            schrieb am zuletzt editiert von
                            #99

                            @asgothian .. ab späten Vormittag. Uhrzeit ist mir egal. Ich habe nichts weiter vor!

                            #TeamInventwo
                            Unsere Adapter:
                            Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

                            Wer uns mit einem Kaffee unterstützen möchte: PayPal

                            AsgothianA 1 Antwort Letzte Antwort
                            0
                            • skvarelS skvarel

                              @asgothian .. ab späten Vormittag. Uhrzeit ist mir egal. Ich habe nichts weiter vor!

                              AsgothianA Offline
                              AsgothianA Offline
                              Asgothian
                              Developer
                              schrieb am zuletzt editiert von
                              #100

                              @skvarel sagte in CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor:

                              @asgothian .. ab späten Vormittag. Uhrzeit ist mir egal. Ich habe nichts weiter vor!

                              sagen wir 11 ?

                              ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                              "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                              skvarelS 2 Antworten Letzte Antwort
                              1
                              • AsgothianA Asgothian

                                @skvarel sagte in CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor:

                                @asgothian .. ab späten Vormittag. Uhrzeit ist mir egal. Ich habe nichts weiter vor!

                                sagen wir 11 ?

                                skvarelS Online
                                skvarelS Online
                                skvarel
                                Developer
                                schrieb am zuletzt editiert von
                                #101

                                @asgothian .. das passt! Vielen Dank nochmal, bis morgen :)

                                #TeamInventwo
                                Unsere Adapter:
                                Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

                                Wer uns mit einem Kaffee unterstützen möchte: PayPal

                                1 Antwort Letzte Antwort
                                1
                                • AsgothianA Asgothian

                                  @skvarel sagte in CC2530/CC2531 als Custom-Zigbee-Aktor/Sensor:

                                  @asgothian .. ab späten Vormittag. Uhrzeit ist mir egal. Ich habe nichts weiter vor!

                                  sagen wir 11 ?

                                  skvarelS Online
                                  skvarelS Online
                                  skvarel
                                  Developer
                                  schrieb am zuletzt editiert von skvarel
                                  #102

                                  @asgothian .. vielen Dank! Ich bin begeistert :)

                                  bfc9cc53-9425-46fa-a8a6-3e4224019a1f-image.png

                                  Jetzt gehe ich an die anderen Konverter. Da müssen die Namen noch angepasst werden.

                                  Das wichtigste wäre mir beim Gewächshaus, direkt Fenster und Tür sowie Heizung und Licht .. anstatt Kontakt und State

                                  #TeamInventwo
                                  Unsere Adapter:
                                  Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

                                  Wer uns mit einem Kaffee unterstützen möchte: PayPal

                                  1 Antwort Letzte Antwort
                                  1
                                  • skvarelS Online
                                    skvarelS Online
                                    skvarel
                                    Developer
                                    schrieb am zuletzt editiert von
                                    #103

                                    1fca3515-6735-46f1-9b50-190484b150fc-image.png

                                    ed0865ec-52b7-4192-9f30-90a953d12f74-image.png

                                    #TeamInventwo
                                    Unsere Adapter:
                                    Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

                                    Wer uns mit einem Kaffee unterstützen möchte: PayPal

                                    1 Antwort Letzte Antwort
                                    0
                                    • skvarelS Online
                                      skvarelS Online
                                      skvarel
                                      Developer
                                      schrieb am zuletzt editiert von skvarel
                                      #104

                                      Sooo, nächster Konverter angepasst. @jkvarel hat mir geholfen ;)

                                      Gefällt mir aber wegen der fehlenden Icons bei den Temperaturen noch nicht.

                                      5aba0649-344a-4275-929a-51400c794ea4-image.png

                                      #TeamInventwo
                                      Unsere Adapter:
                                      Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

                                      Wer uns mit einem Kaffee unterstützen möchte: PayPal

                                      1 Antwort Letzte Antwort
                                      0
                                      • skvarelS Online
                                        skvarelS Online
                                        skvarel
                                        Developer
                                        schrieb am zuletzt editiert von
                                        #105

                                        @Asgothian .. ich könnte noch mal deine Hilfe gebrauchen

                                        005e3090-be85-49af-9913-a8caa9821c7c-image.png

                                        Ich möchte gern das Icon davor haben.

                                        Hier mal mein Konverter, den ich mit @jkvarel gemacht habe:

                                        const precisionRound = zigbeeHerdsmanUtils.precisionRound;
                                        const fzlocal = {
                                            local_analog_switch: {
                                              cluster: 'genAnalogInput',
                                              type: ['attributeReport', 'readResponse'],
                                              convert: (model, msg, publish, options, meta) => {
                                                  const payload = {};
                                                  const channel = msg.endpoint.ID;
                                                  const mapping = {
                                                    1: 'Vorlauftemperatur',
                                                    2: 'Ruecklauftemperatur'
                                                  }
                                        
                                                  if(mapping[channel] === undefined) return payload
                                        
                                                  payload[mapping[channel]] = precisionRound(msg.data['presentValue'], 1)
                                        
                                                  return payload
                                        
                                        
                                              }
                                            }
                                        }  
                                        
                                        const device = {
                                            zigbeeModel: ['CC2531.DS18B20'],
                                            model: 'CC2531.DS18B20',
                                            vendor: 'inventwo',
                                            description: '[CC2531 w. DS18B20 Sensor](https://github.com/inventwo/custom-zigbee)',
                                            fromZigbee: [fz.ignore_basic_report, fz.ptvo_switch_analog_input, fzlocal.local_analog_switch],
                                            toZigbee: [tz.ptvo_switch_trigger,],
                                            exposes: [
                                                exposes.numeric('Vorlauftemperatur', ea.STATE).withUnit('°C'),
                                                exposes.numeric('Ruecklauftemperatur', ea.STATE).withUnit('°C'),
                                        ],
                                            meta: {
                                                multiEndpoint: true,
                                                
                                            },
                                            endpoint: (device) => {
                                                return {
                                                    Vorlauftemperatur: 1, Ruecklauftemperatur: 2,
                                                };
                                        

                                        #TeamInventwo
                                        Unsere Adapter:
                                        Autodarts, FoxESS, Enpal, Life360ng, Tidy, vis-inventwo, vis-2-widgets-inventwo, vis-icontwo, vis-2-widgets-icontwo

                                        Wer uns mit einem Kaffee unterstützen möchte: PayPal

                                        AsgothianA 1 Antwort Letzte Antwort
                                        0
                                        • skvarelS skvarel

                                          @Asgothian .. ich könnte noch mal deine Hilfe gebrauchen

                                          005e3090-be85-49af-9913-a8caa9821c7c-image.png

                                          Ich möchte gern das Icon davor haben.

                                          Hier mal mein Konverter, den ich mit @jkvarel gemacht habe:

                                          const precisionRound = zigbeeHerdsmanUtils.precisionRound;
                                          const fzlocal = {
                                              local_analog_switch: {
                                                cluster: 'genAnalogInput',
                                                type: ['attributeReport', 'readResponse'],
                                                convert: (model, msg, publish, options, meta) => {
                                                    const payload = {};
                                                    const channel = msg.endpoint.ID;
                                                    const mapping = {
                                                      1: 'Vorlauftemperatur',
                                                      2: 'Ruecklauftemperatur'
                                                    }
                                          
                                                    if(mapping[channel] === undefined) return payload
                                          
                                                    payload[mapping[channel]] = precisionRound(msg.data['presentValue'], 1)
                                          
                                                    return payload
                                          
                                          
                                                }
                                              }
                                          }  
                                          
                                          const device = {
                                              zigbeeModel: ['CC2531.DS18B20'],
                                              model: 'CC2531.DS18B20',
                                              vendor: 'inventwo',
                                              description: '[CC2531 w. DS18B20 Sensor](https://github.com/inventwo/custom-zigbee)',
                                              fromZigbee: [fz.ignore_basic_report, fz.ptvo_switch_analog_input, fzlocal.local_analog_switch],
                                              toZigbee: [tz.ptvo_switch_trigger,],
                                              exposes: [
                                                  exposes.numeric('Vorlauftemperatur', ea.STATE).withUnit('°C'),
                                                  exposes.numeric('Ruecklauftemperatur', ea.STATE).withUnit('°C'),
                                          ],
                                              meta: {
                                                  multiEndpoint: true,
                                                  
                                              },
                                              endpoint: (device) => {
                                                  return {
                                                      Vorlauftemperatur: 1, Ruecklauftemperatur: 2,
                                                  };
                                          
                                          AsgothianA Offline
                                          AsgothianA Offline
                                          Asgothian
                                          Developer
                                          schrieb am zuletzt editiert von
                                          #106

                                          @skvarel Ich fürchte da läufst du auf die Grenzen des Möglichen. Soweit ich das korrekt erkannt habe wird das Icon aus der Benennung des Payloads gemacht - genau das was du da gerade 'umbenannt' hast.

                                          Was du versuchen kannst:

                                          • 'Vorlauftemperatur' durch 'temperatur_vorlauf' ersetzen (überall wo es auftritt)
                                          • 'Ruecklauftemperatur' durch 'temperatur_ruecklauf' ersetzen (überall wo es auftritt)
                                          • hoffen :)

                                          A.

                                          ioBroker auf RPi4 - Hardware soweit wie möglich via Zigbee.
                                          "Shit don't work" ist keine Fehlermeldung, sondern ein Fluch.

                                          skvarelS 1 Antwort Letzte Antwort
                                          1

                                          Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                                          Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                                          Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                                          Registrieren Anmelden
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          574

                                          Online

                                          32.8k

                                          Benutzer

                                          82.8k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe