Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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. Hardware
  4. Zigbee externer converter mit Analog Input

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    15
    1
    677

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    635

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

Zigbee externer converter mit Analog Input

Geplant Angeheftet Gesperrt Verschoben Hardware
10 Beiträge 3 Kommentatoren 156 Aufrufe 3 Watching
  • Ä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.
  • mickemupM Online
    mickemupM Online
    mickemup
    schrieb am zuletzt editiert von
    #1

    Hallo Zusammen

    Ich möchte mit einem ESP32-C6 einige Sensoren via Zigbee in IoBroker bringen.

    Mittels Arduino IDE und viel Google habe ich einen "TempSensor" inklusive externem Converter in IoBroker gebracht..

    const m = require('zigbee-herdsman-converters/lib/modernExtend');
    
    const definition = {
        zigbeeModel: ['ZigbeeTempSensor'],
        model: 'ZigbeeTempSensor',
        vendor: 'Espressif',
        description: 'Automatically generated definition',
        extend: [
            m.temperature()],
    };
    
    module.exports = definition;
    `;
    

    Nun würde ich aber gerne flexibler werden und analoge Inputs einlesen (evtl. auch ausgeben)
    Das Arduino IDE Beispiel habe ich geflasht und der Device taucht auch in IoBroker auf...nur eben beim externen converter geht mir das Wissen ab. Mit Hilfe zur Selbsthilfe sollte ich dann wohl aber irgendwann weiterkommen :-)

    Hier der wohl relevante Teil von der example scetch (bezügllich cluster usw):

    /* Zigbee analog device configuration */
    #define ANALOG_DEVICE_ENDPOINT_NUMBER 1
    
    ZigbeeAnalog zbAnalogDevice = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER);
    ZigbeeAnalog zbAnalogTemp = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER + 1);
    ZigbeeAnalog zbAnalogFan = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER + 2);
    ZigbeeAnalog zbAnalogPercent = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER + 3);
    
    
    void setup() {
      Serial.begin(115200);
      Serial.println("Starting...");
    
      // Init button switch
      pinMode(button, INPUT_PULLUP);
    
      // Set analog resolution to 10 bits
      analogReadResolution(10);
    
      // Optional: set Zigbee device name and model
      zbAnalogDevice.setManufacturerAndModel("Espressif", "ZigbeeAnalogDevice");
    
      // Set up analog input
      zbAnalogDevice.addAnalogInput();
      zbAnalogDevice.setAnalogInputApplication(ESP_ZB_ZCL_AI_POWER_IN_WATTS_CONSUMPTION);
      zbAnalogDevice.setAnalogInputDescription("Power Consumption (Watts)");
      zbAnalogDevice.setAnalogInputResolution(0.01);
    
      // Set up analog output
      zbAnalogDevice.addAnalogOutput();
      zbAnalogDevice.setAnalogOutputApplication(ESP_ZB_ZCL_AI_RPM_OTHER);
      zbAnalogDevice.setAnalogOutputDescription("Fan Speed (RPM)");
      zbAnalogDevice.setAnalogOutputResolution(1);
    
      // Set the min and max values for the analog output which is used by HA to limit the range of the analog output
      zbAnalogDevice.setAnalogOutputMinMax(-10000, 10000);  //-10000 to 10000 RPM
    
      // If analog output cluster is added, set callback function for analog output change
      zbAnalogDevice.onAnalogOutputChange(onAnalogOutputChange);
    
      // Set up analog input
      zbAnalogTemp.addAnalogInput();
      zbAnalogTemp.setAnalogInputApplication(ESP_ZB_ZCL_AI_TEMPERATURE_OTHER);
      zbAnalogTemp.setAnalogInputDescription("Temperature");
      zbAnalogTemp.setAnalogInputResolution(0.1);
    
      // Set up analog input
      zbAnalogFan.addAnalogInput();
      zbAnalogFan.setAnalogInputApplication(ESP_ZB_ZCL_AI_RPM_OTHER);
      zbAnalogFan.setAnalogInputDescription("RPM");
      zbAnalogFan.setAnalogInputResolution(1);
    
      // Set up analog input
      zbAnalogPercent.addAnalogInput();
      zbAnalogPercent.setAnalogInputApplication(ESP_ZB_ZCL_AI_PERCENTAGE_OTHER);
      zbAnalogPercent.setAnalogInputDescription("Percentage");
      zbAnalogPercent.setAnalogInputResolution(0.01);
    
      // Add endpoints to Zigbee Core
      Zigbee.addEndpoint(&zbAnalogDevice);
      Zigbee.addEndpoint(&zbAnalogTemp);
      Zigbee.addEndpoint(&zbAnalogFan);
      Zigbee.addEndpoint(&zbAnalogPercent);
    

    Habe den Adapter 3.1.5 am laufen
    Plus hier was ankommt im Adapter:

    a199ea6b-9ded-4e56-996f-b4d517612e0d-image.png

    Vielen Dank für jeglichen Support schon im voraus.

    1Topf1 1 Antwort Letzte Antwort
    0
    • AsgothianA Offline
      AsgothianA Offline
      Asgothian
      Developer
      schrieb am zuletzt editiert von
      #2

      Das ganze ist verhältnismässig einfach. Du musst eine Kombination von

      • einer funktion im fromZigbee sowie einem expose erzeugen. Da du den gleichen Cluster in mehreren Endpunkten nutzt, könnte das so aussehen:
      const m = require('../lib/modernExtend');
      const exposes = require('../lib/exposes')
      const e = exposes.presets;
      const ea = exposes.access;
      
      function fzFromEpAndKey(ep, key) {
                  cluster: "genAnalogInput",
                  type: ["attributeReport", "readResponse"],
                  convert: (model, msg, publish, options, meta) => {
                      if (msg.endpoint.ID === endpointId) {
                          if (msg.data.currentLevel !== undefined) {
                              return {
                                  key: msg.data.currentLevel,
                              };
                          }
                      }
                      return msg.data;
                  },
              }
      
       
      const definition = {
          zigbeeModel: ['MultiSensor'],
          model: 'MultiSensor',
          vendor: 'MickeMup',
          description: 'Forum generated definition',
          fromZigbee: [fzFromEpAndKey(1, 'fan_speed'), fzFromEpAndKey(2, 'temperature', fzFromEpAndKey(3, 'rpm`), fzFromEpAndKey(4, 'percentage')],
         exposes = [
           e.numeric("fan_speed",ea.STATE_GET).withValueMin(-10000).withValueMax(10000).withDescription("Fan Speed"), 
           e.numeric("temperature",ea.STATE_GET).withDescription("Temperature"), 
           e.numeric("rpm",ea.STATE_GET).withDescription("RPM without limits"), 
           e.numeric("percentage",ea.STATE_GET).withDescription("Percentace"), 
      };
       
      module.exports = definition;
      `;
      
      

      Es sicher auch möglich die ganzen Faktoren zu holen und zu nutzen die du in der Firmware setzt - so genau stecke ich da aber nicht drin.

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

      1 Antwort Letzte Antwort
      1
      • mickemupM Online
        mickemupM Online
        mickemup
        schrieb am zuletzt editiert von
        #3

        Schonmal Danke für den Support

        Ich habe 2-3 Typos gefunden und korrigiert (siehe unten), aber es will noch nicht.
        Meine js Kenntnisse sind leider eher mau um den Fehler selbst zu finden...

        	Unable to apply converter from module: /opt/iobroker/iobroker-data/zigbee_0/including.js - the code does not run: SyntaxError: Unexpected token ':'
        

        Ich habe 2-3 Typos gefunden, aber irgendwo wird es immer noch hapern.

        const m = require('zigbee-herdsman-converters/lib/modernExtend');
        const exposes = require('zigbee-herdsman-converters/lib/exposes');
        const e = exposes.presets;
        const ea = exposes.access;
        
        function fzFromEpAndKey(ep, key) {
                    cluster: "genAnalogInput",
                    type: ["attributeReport", "readResponse"],
                    convert: (model, msg, publish, options, meta) => {
                        if (msg.endpoint.ID === endpointId) {
                            if (msg.data.currentLevel !== undefined) {
                                return {
                                    key: msg.data.currentLevel,
                                };
                            }
                        }
                        return msg.data;
                    },
                }
        
         
        const definition = {
            zigbeeModel: ['MultiSensor'],
            model: 'MultiSensor',
            vendor: 'MickeMup',
            description: 'Forum generated definition',
            fromZigbee: [fzFromEpAndKey(1, 'fan_speed'), fzFromEpAndKey(2, 'temperature'), fzFromEpAndKey(3, 'rpm'), fzFromEpAndKey(4, 'percentage')],
           exposes = [
             e.numeric("fan_speed",ea.STATE_GET).withValueMin(-10000).withValueMax(10000).withDescription("Fan Speed"), 
             e.numeric("temperature",ea.STATE_GET).withDescription("Temperature"), 
             e.numeric("rpm",ea.STATE_GET).withDescription("RPM without limits"), 
             e.numeric("percentage",ea.STATE_GET).withDescription("Percentace")] 
        };
         
        module.exports = definition;
        

        Müssen im converter z.B "fan_speed" genau wie in der Firmware heissen, damit das Ganze Funktioniert?
        Und ist das beiden Despriptions ebenso?

        AsgothianA 1 Antwort Letzte Antwort
        0
        • mickemupM mickemup

          Schonmal Danke für den Support

          Ich habe 2-3 Typos gefunden und korrigiert (siehe unten), aber es will noch nicht.
          Meine js Kenntnisse sind leider eher mau um den Fehler selbst zu finden...

          	Unable to apply converter from module: /opt/iobroker/iobroker-data/zigbee_0/including.js - the code does not run: SyntaxError: Unexpected token ':'
          

          Ich habe 2-3 Typos gefunden, aber irgendwo wird es immer noch hapern.

          const m = require('zigbee-herdsman-converters/lib/modernExtend');
          const exposes = require('zigbee-herdsman-converters/lib/exposes');
          const e = exposes.presets;
          const ea = exposes.access;
          
          function fzFromEpAndKey(ep, key) {
                      cluster: "genAnalogInput",
                      type: ["attributeReport", "readResponse"],
                      convert: (model, msg, publish, options, meta) => {
                          if (msg.endpoint.ID === endpointId) {
                              if (msg.data.currentLevel !== undefined) {
                                  return {
                                      key: msg.data.currentLevel,
                                  };
                              }
                          }
                          return msg.data;
                      },
                  }
          
           
          const definition = {
              zigbeeModel: ['MultiSensor'],
              model: 'MultiSensor',
              vendor: 'MickeMup',
              description: 'Forum generated definition',
              fromZigbee: [fzFromEpAndKey(1, 'fan_speed'), fzFromEpAndKey(2, 'temperature'), fzFromEpAndKey(3, 'rpm'), fzFromEpAndKey(4, 'percentage')],
             exposes = [
               e.numeric("fan_speed",ea.STATE_GET).withValueMin(-10000).withValueMax(10000).withDescription("Fan Speed"), 
               e.numeric("temperature",ea.STATE_GET).withDescription("Temperature"), 
               e.numeric("rpm",ea.STATE_GET).withDescription("RPM without limits"), 
               e.numeric("percentage",ea.STATE_GET).withDescription("Percentace")] 
          };
           
          module.exports = definition;
          

          Müssen im converter z.B "fan_speed" genau wie in der Firmware heissen, damit das Ganze Funktioniert?
          Und ist das beiden Despriptions ebenso?

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

          @mickemup sagte in Zigbee externer converter mit Analog Input:

          Schonmal Danke für den Support

          Müssen im converter z.B "fan_speed" genau wie in der Firmware heissen, damit das Ganze Funktioniert?
          Und ist das beiden Despriptions ebenso?

          Nein, das einzige was passen muss, ist die Endpunkt ID. Ich habe die Benennung einfach gewählt, weil du sie in der Firmenware so benannt hast. Letztendlich weiß der Converter nicht, was sich logisch hinter den Werten eines Endpunkte versteckt.
          Was zusammenpassen muss, ist die Bezeichnung im Funktions Aufruf zu fzFromEpAndKey und im expose. Das wird dann die ID des Daten Punktes, während die Beschreibung in der Funktion withDescriptionangegeben ist.

          Mir ist auch aufgefallen, dass ich beim Transfer der Funktion einen Fehler gemacht habe. Das kann so nicht gehen, aber du kannst es mal so probieren:

          
          const m = require('zigbee-herdsman-converters/lib/modernExtend');
          const exposes = require('zigbee-herdsman-converters/lib/exposes');
          const e = exposes.presets;
          const ea = exposes.access;
           
          function fzFromEpAndKey(ep, key) { return {
                      cluster: "genAnalogInput",
                      type: ["attributeReport", "readResponse"],
                      convert: (model, msg, publish, options, meta) => {
                          if (msg.endpoint.ID === endpointId) {
                              if (msg.data.currentLevel !== undefined) {
                                  return {
                                      key: msg.data.currentLevel,
                                  };
                              }
                          }
                          return msg.data;
                      },
                  };
          }
           
           
          const definition = {
              zigbeeModel: ['MultiSensor'],
              model: 'MultiSensor',
              vendor: 'MickeMup',
              description: 'Forum generated definition',
              fromZigbee: [fzFromEpAndKey(1, 'fan_speed'), fzFromEpAndKey(2, 'temperature'), fzFromEpAndKey(3, 'rpm'), fzFromEpAndKey(4, 'percentage')],
             exposes = [
               e.numeric("fan_speed",ea.STATE_GET).withValueMin(-10000).withValueMax(10000).withDescription("Fan Speed"), 
               e.numeric("temperature",ea.STATE_GET).withDescription("Temperature"), 
               e.numeric("rpm",ea.STATE_GET).withDescription("RPM without limits"), 
               e.numeric("percentage",ea.STATE_GET).withDescription("Percentace")] 
          };
           
          module.exports = definition;
          
          

          Wenn das auch nicht läuft, muss ich sie mir Sonntag angucken, am Samstag werde ich nicht dazu kommen.

          A.

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

          mickemupM 1 Antwort Letzte Antwort
          0
          • mickemupM mickemup

            Hallo Zusammen

            Ich möchte mit einem ESP32-C6 einige Sensoren via Zigbee in IoBroker bringen.

            Mittels Arduino IDE und viel Google habe ich einen "TempSensor" inklusive externem Converter in IoBroker gebracht..

            const m = require('zigbee-herdsman-converters/lib/modernExtend');
            
            const definition = {
                zigbeeModel: ['ZigbeeTempSensor'],
                model: 'ZigbeeTempSensor',
                vendor: 'Espressif',
                description: 'Automatically generated definition',
                extend: [
                    m.temperature()],
            };
            
            module.exports = definition;
            `;
            

            Nun würde ich aber gerne flexibler werden und analoge Inputs einlesen (evtl. auch ausgeben)
            Das Arduino IDE Beispiel habe ich geflasht und der Device taucht auch in IoBroker auf...nur eben beim externen converter geht mir das Wissen ab. Mit Hilfe zur Selbsthilfe sollte ich dann wohl aber irgendwann weiterkommen :-)

            Hier der wohl relevante Teil von der example scetch (bezügllich cluster usw):

            /* Zigbee analog device configuration */
            #define ANALOG_DEVICE_ENDPOINT_NUMBER 1
            
            ZigbeeAnalog zbAnalogDevice = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER);
            ZigbeeAnalog zbAnalogTemp = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER + 1);
            ZigbeeAnalog zbAnalogFan = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER + 2);
            ZigbeeAnalog zbAnalogPercent = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER + 3);
            
            
            void setup() {
              Serial.begin(115200);
              Serial.println("Starting...");
            
              // Init button switch
              pinMode(button, INPUT_PULLUP);
            
              // Set analog resolution to 10 bits
              analogReadResolution(10);
            
              // Optional: set Zigbee device name and model
              zbAnalogDevice.setManufacturerAndModel("Espressif", "ZigbeeAnalogDevice");
            
              // Set up analog input
              zbAnalogDevice.addAnalogInput();
              zbAnalogDevice.setAnalogInputApplication(ESP_ZB_ZCL_AI_POWER_IN_WATTS_CONSUMPTION);
              zbAnalogDevice.setAnalogInputDescription("Power Consumption (Watts)");
              zbAnalogDevice.setAnalogInputResolution(0.01);
            
              // Set up analog output
              zbAnalogDevice.addAnalogOutput();
              zbAnalogDevice.setAnalogOutputApplication(ESP_ZB_ZCL_AI_RPM_OTHER);
              zbAnalogDevice.setAnalogOutputDescription("Fan Speed (RPM)");
              zbAnalogDevice.setAnalogOutputResolution(1);
            
              // Set the min and max values for the analog output which is used by HA to limit the range of the analog output
              zbAnalogDevice.setAnalogOutputMinMax(-10000, 10000);  //-10000 to 10000 RPM
            
              // If analog output cluster is added, set callback function for analog output change
              zbAnalogDevice.onAnalogOutputChange(onAnalogOutputChange);
            
              // Set up analog input
              zbAnalogTemp.addAnalogInput();
              zbAnalogTemp.setAnalogInputApplication(ESP_ZB_ZCL_AI_TEMPERATURE_OTHER);
              zbAnalogTemp.setAnalogInputDescription("Temperature");
              zbAnalogTemp.setAnalogInputResolution(0.1);
            
              // Set up analog input
              zbAnalogFan.addAnalogInput();
              zbAnalogFan.setAnalogInputApplication(ESP_ZB_ZCL_AI_RPM_OTHER);
              zbAnalogFan.setAnalogInputDescription("RPM");
              zbAnalogFan.setAnalogInputResolution(1);
            
              // Set up analog input
              zbAnalogPercent.addAnalogInput();
              zbAnalogPercent.setAnalogInputApplication(ESP_ZB_ZCL_AI_PERCENTAGE_OTHER);
              zbAnalogPercent.setAnalogInputDescription("Percentage");
              zbAnalogPercent.setAnalogInputResolution(0.01);
            
              // Add endpoints to Zigbee Core
              Zigbee.addEndpoint(&zbAnalogDevice);
              Zigbee.addEndpoint(&zbAnalogTemp);
              Zigbee.addEndpoint(&zbAnalogFan);
              Zigbee.addEndpoint(&zbAnalogPercent);
            

            Habe den Adapter 3.1.5 am laufen
            Plus hier was ankommt im Adapter:

            a199ea6b-9ded-4e56-996f-b4d517612e0d-image.png

            Vielen Dank für jeglichen Support schon im voraus.

            1Topf1 Offline
            1Topf1 Offline
            1Topf
            schrieb am zuletzt editiert von
            #5

            @mickemup sagte in Zigbee externer converter mit Analog Input:

            Hallo Zusammen

            Ich möchte mit einem ESP32-C6 einige Sensoren via Zigbee in IoBroker bringen.

            Guten Morgen.
            Gibt es da nix von PTVO? Bin da leider nicht uptodate.

            AsgothianA mickemupM 2 Antworten Letzte Antwort
            0
            • 1Topf1 1Topf

              @mickemup sagte in Zigbee externer converter mit Analog Input:

              Hallo Zusammen

              Ich möchte mit einem ESP32-C6 einige Sensoren via Zigbee in IoBroker bringen.

              Guten Morgen.
              Gibt es da nix von PTVO? Bin da leider nicht uptodate.

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

              @1Topf sagte in Zigbee externer converter mit Analog Input:

              @mickemup sagte in Zigbee externer converter mit Analog Input:

              Hallo Zusammen

              Ich möchte mit einem ESP32-C6 einige Sensoren via Zigbee in IoBroker bringen.

              Guten Morgen.
              Gibt es da nix von PTVO? Bin da leider nicht uptodate.

              PTVO ist für CCxx Chips von TI, das Expressiv SDK kann deutlich mehr machen, macht aber auch deutlich mehr aufwand.

              Natürlich kann man da auch mehrere analoge Eingänge nutzen, aber es ist halt was anderes.

              A.

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

              1 Antwort Letzte Antwort
              1
              • 1Topf1 1Topf

                @mickemup sagte in Zigbee externer converter mit Analog Input:

                Hallo Zusammen

                Ich möchte mit einem ESP32-C6 einige Sensoren via Zigbee in IoBroker bringen.

                Guten Morgen.
                Gibt es da nix von PTVO? Bin da leider nicht uptodate.

                mickemupM Online
                mickemupM Online
                mickemup
                schrieb am zuletzt editiert von
                #7

                @1Topf
                Da bin auch kurz darüber gestolpert.
                Der Plan ist ein autarkes System (C6 + Lipo + Solar) um den Füllstand+Temp einer Zisterne zu messen und via Zigbee zu übertragen.
                Mit der Arduino IDE habe ich als einigermassen Anfänger auch die Chance das System einzusetzen (Sensoren einlesen + Deep Sleep usw. ) zu managen.

                1 Antwort Letzte Antwort
                1
                • AsgothianA Asgothian

                  @mickemup sagte in Zigbee externer converter mit Analog Input:

                  Schonmal Danke für den Support

                  Müssen im converter z.B "fan_speed" genau wie in der Firmware heissen, damit das Ganze Funktioniert?
                  Und ist das beiden Despriptions ebenso?

                  Nein, das einzige was passen muss, ist die Endpunkt ID. Ich habe die Benennung einfach gewählt, weil du sie in der Firmenware so benannt hast. Letztendlich weiß der Converter nicht, was sich logisch hinter den Werten eines Endpunkte versteckt.
                  Was zusammenpassen muss, ist die Bezeichnung im Funktions Aufruf zu fzFromEpAndKey und im expose. Das wird dann die ID des Daten Punktes, während die Beschreibung in der Funktion withDescriptionangegeben ist.

                  Mir ist auch aufgefallen, dass ich beim Transfer der Funktion einen Fehler gemacht habe. Das kann so nicht gehen, aber du kannst es mal so probieren:

                  
                  const m = require('zigbee-herdsman-converters/lib/modernExtend');
                  const exposes = require('zigbee-herdsman-converters/lib/exposes');
                  const e = exposes.presets;
                  const ea = exposes.access;
                   
                  function fzFromEpAndKey(ep, key) { return {
                              cluster: "genAnalogInput",
                              type: ["attributeReport", "readResponse"],
                              convert: (model, msg, publish, options, meta) => {
                                  if (msg.endpoint.ID === endpointId) {
                                      if (msg.data.currentLevel !== undefined) {
                                          return {
                                              key: msg.data.currentLevel,
                                          };
                                      }
                                  }
                                  return msg.data;
                              },
                          };
                  }
                   
                   
                  const definition = {
                      zigbeeModel: ['MultiSensor'],
                      model: 'MultiSensor',
                      vendor: 'MickeMup',
                      description: 'Forum generated definition',
                      fromZigbee: [fzFromEpAndKey(1, 'fan_speed'), fzFromEpAndKey(2, 'temperature'), fzFromEpAndKey(3, 'rpm'), fzFromEpAndKey(4, 'percentage')],
                     exposes = [
                       e.numeric("fan_speed",ea.STATE_GET).withValueMin(-10000).withValueMax(10000).withDescription("Fan Speed"), 
                       e.numeric("temperature",ea.STATE_GET).withDescription("Temperature"), 
                       e.numeric("rpm",ea.STATE_GET).withDescription("RPM without limits"), 
                       e.numeric("percentage",ea.STATE_GET).withDescription("Percentace")] 
                  };
                   
                  module.exports = definition;
                  
                  

                  Wenn das auch nicht läuft, muss ich sie mir Sonntag angucken, am Samstag werde ich nicht dazu kommen.

                  A.

                  mickemupM Online
                  mickemupM Online
                  mickemup
                  schrieb am zuletzt editiert von
                  #8

                  @Asgothian

                  Nur kein Stress :-)
                  Hab es gerade probiert loggt sagt:

                  unable to apply converter from module: /opt/iobroker/iobroker-data/zigbee_0/including.js - the code does not run: SyntaxError: Invalid shorthand property initialize
                  
                  1 Antwort Letzte Antwort
                  0
                  • mickemupM Online
                    mickemupM Online
                    mickemup
                    schrieb am zuletzt editiert von mickemup
                    #9

                    So habe nochmals gewurstelt:
                    Der Converter wird akzeptiert und etwas kommt mittlerweile an. :-)
                    Nur leider 4mal der gleiche Wert.
                    Meist der erste, aber einmal war auch 4x die 404 zu sehen (Wert von DP4 im sketch)

                    Edit: Den Analog_Out habe ich im Sketch entfernt (um den kümmere ich mich dann, wenn der rest geht.
                    Edit: Screenshot der Kachel eingefügt
                    fb6ccba9-df01-414a-9b76-1f6a5142f194-image.png

                    Unten der aktuelle Arduino Sketch und Converter.
                    Der Converter basiert auf dieser "Vorlage", welche mir heute über den Weg lief: ZB Converter Modern

                    Das outcome bei den DPs sieht so aus:
                    32680e47-46b1-4129-adf1-4af00757201e-image.png

                    
                    /*
                    4 Analog Inputs Reporting about all 20s fixed values
                    20.12.2025
                    */
                    
                    #include "Zigbee.h"
                    
                    /* Zigbee analog device configuration */
                    #define ANALOG_DEVICE_ENDPOINT_NUMBER 1
                    
                    uint8_t analogPin = A0;
                    
                    ZigbeeAnalog zbAnalogDevice = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER);
                    ZigbeeAnalog zbAnalogTemp = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER + 1);
                    ZigbeeAnalog zbAnalogFan = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER + 2);
                    ZigbeeAnalog zbAnalogPercent = ZigbeeAnalog(ANALOG_DEVICE_ENDPOINT_NUMBER + 3);
                    
                    void setup() {
                      Serial.begin(115200);
                      Serial.println("Starting...");
                    
                      // Set analog resolution to 10 bits
                      analogReadResolution(10);
                    
                      // Optional: set Zigbee device name and model
                      zbAnalogDevice.setManufacturerAndModel("Espressif", "ZigbeeAnalogDevice");
                    
                      // Set up analog input
                      zbAnalogDevice.addAnalogInput();
                      zbAnalogDevice.setAnalogInputApplication(ESP_ZB_ZCL_AI_POWER_IN_WATTS_CONSUMPTION);
                      zbAnalogDevice.setAnalogInputDescription("Power Consumption (Watts)");
                      zbAnalogDevice.setAnalogInputResolution(0.01);
                    
                    
                      // Set up analog input
                      zbAnalogTemp.addAnalogInput();
                      zbAnalogTemp.setAnalogInputApplication(ESP_ZB_ZCL_AI_TEMPERATURE_OTHER);
                      zbAnalogTemp.setAnalogInputDescription("Temperature");
                      zbAnalogTemp.setAnalogInputResolution(0.1);
                    
                      // Set up analog input
                      zbAnalogFan.addAnalogInput();
                      zbAnalogFan.setAnalogInputApplication(ESP_ZB_ZCL_AI_RPM_OTHER);
                      zbAnalogFan.setAnalogInputDescription("RPM");
                      zbAnalogFan.setAnalogInputResolution(1);
                    
                      // Set up analog input
                      zbAnalogPercent.addAnalogInput();
                      zbAnalogPercent.setAnalogInputApplication(ESP_ZB_ZCL_AI_PERCENTAGE_OTHER);
                      zbAnalogPercent.setAnalogInputDescription("Percentage");
                      zbAnalogPercent.setAnalogInputResolution(0.01);
                    
                      // Add endpoints to Zigbee Core
                      Zigbee.addEndpoint(&zbAnalogDevice);
                      Zigbee.addEndpoint(&zbAnalogTemp);
                      Zigbee.addEndpoint(&zbAnalogFan);
                      Zigbee.addEndpoint(&zbAnalogPercent);
                    
                      Serial.println("Starting Zigbee...");
                      // When all EPs are registered, start Zigbee in Router Device mode
                      if (!Zigbee.begin()) {
                        Serial.println("Zigbee failed to start!");
                        Serial.println("Rebooting...");
                        ESP.restart();
                      } else {
                        Serial.println("Zigbee started successfully!");
                      }
                      Serial.println("Connecting to network");
                      while (!Zigbee.connected()) {
                        Serial.print(".");
                        delay(100);
                      }
                      Serial.println("Connected");
                    
                      // Optional: Add reporting for analog input
                      zbAnalogDevice.setAnalogInputReporting(0, 30, 10);  // report every 30 seconds if value changes by 10
                    }
                    
                    void loop() {
                      static uint32_t timeCounter = 0;
                    
                      // Read ADC value and update the analog value every 2s
                      if (!(timeCounter++ % 20)) {  // delaying for 100ms x 20 = 2s
                        float analog = (float)analogRead(analogPin);
                        Serial.printf("Updating analog input to %.1f\r\n", analog);
                        zbAnalogDevice.setAnalogInput(101);
                        zbAnalogTemp.setAnalogInput(202);
                        zbAnalogFan.setAnalogInput(303);
                        zbAnalogPercent.setAnalogInput(404);
                    
                        delay(20000);
                        Serial.println("Upload 4 Inputs");
                        
                        // Analog input supports reporting
                        zbAnalogDevice.reportAnalogInput();
                         delay(100);
                        zbAnalogTemp.reportAnalogInput();
                         delay(100);
                        zbAnalogFan.reportAnalogInput();
                         delay(100);
                        zbAnalogPercent.reportAnalogInput();
                      }
                    }
                    
                    

                    Und der mein Converter:

                    const m = require('zigbee-herdsman-converters/lib/modernExtend');
                    
                    export default {
                        zigbeeModel: ['ZigbeeAnalogDevice'],
                        model: 'ZigbeeAnalogDevice',
                        vendor: 'MickeMup',
                        description: 'ESP32-C6 controller',
                        meta: { multiEndpoint: true },
                        extend: [
                            m.deviceEndpoints({
                                "endpoints": {
                                    "AN_IN1": 1,
                                    "AN_IN2": 2,
                                    "AN_IN3": 3,
                                    "AN_IN4": 4,
                                }
                            }),
                    
                            m.numeric({
                                "name": "DP1",  // ID vom DP
                                "unit": "cm",       // Unit vom DP
                                "description": "Water level 1",   // Name vom DP
                                "cluster": "genAnalogInput",
                                "attribute": "presentValue",
                                // "scale": 100,   // Umkehrbruch von setAnalogInputResolution(0.01) aus Sketch
                                "endpointName": "AN_IN1",
                    
                            }),
                            m.numeric({
                                "name": "DP2",
                                "unit": "cm",
                                "description": "Water level 2",
                                "cluster": "genAnalogInput",
                                "attribute": "presentValue",
                                // "scale": 10,   
                                "endpointName": "AN_IN2",
                            }),
                            m.numeric({
                                "name": "DP3",
                                "unit": "cm",
                                "description": "Water level 3",
                                "cluster": "genAnalogInput",
                                "attribute": "presentValue",
                                // "scale": 1,  
                                 "endpointName": "AN_IN3",
                            }),
                            m.numeric({
                                "name": "DP4",
                                "unit": "cm",
                                "description": "Water level 4",
                                "cluster": "genAnalogInput",
                                "attribute": "presentValue",
                                // "scale": 100,   
                                "endpointName": "AN_IN4",
                            }),
                        ],
                    };
                    
                    
                    1 Antwort Letzte Antwort
                    0
                    • mickemupM Online
                      mickemupM Online
                      mickemup
                      schrieb am zuletzt editiert von
                      #10

                      So nochmal meine "Quelle" angeschaut und auf Verdacht das hier 4x geändert.

                      aus 
                      "endpointName": "AN_IN1", 
                      wurde
                      "endpointNames": ["AN_IN1"],
                      

                      Nun scheints zu gehen :-)
                      Der DP heisst nun einfach anders:
                      9bd34134-b86f-4cef-a5f3-ecf7bf6c3097-image.png

                      Aber damit kann ich gut leben.
                      Wenn ich jetzt noch Daten an den C6 senden hinbekomme via Zigbee, dann kann man den C6 anschliessend für ziemlich vieles einsetzen :-)

                      1 Antwort Letzte Antwort
                      1
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      801

                      Online

                      32.6k

                      Benutzer

                      81.9k

                      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