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. MAX17043 über I2C eines Raspberry Pi UPS auslesen?

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    1.9k

MAX17043 über I2C eines Raspberry Pi UPS auslesen?

Geplant Angeheftet Gesperrt Verschoben Hardware
16 Beiträge 2 Kommentatoren 486 Aufrufe
  • Ä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.
  • hg6806H Offline
    hg6806H Offline
    hg6806
    Most Active
    schrieb am zuletzt editiert von hg6806
    #1

    Hallo zusammen,

    habe hier ein Raspberry Pi UPS HAT, diesmal von DFRobots.

    https://www.dfrobot.com/product-1932.html

    Doku:
    https://wiki.dfrobot.com/UPS HAT for Raspberry Pi Zero SKU%3A DFR0528

    Dort ist ein MAX17043 verbaut, den ich über das Python Programm auslesen kann.
    Geht das irgendwie auch in ioBroker?

    paul53P 1 Antwort Letzte Antwort
    0
    • hg6806H hg6806

      Hallo zusammen,

      habe hier ein Raspberry Pi UPS HAT, diesmal von DFRobots.

      https://www.dfrobot.com/product-1932.html

      Doku:
      https://wiki.dfrobot.com/UPS HAT for Raspberry Pi Zero SKU%3A DFR0528

      Dort ist ein MAX17043 verbaut, den ich über das Python Programm auslesen kann.
      Geht das irgendwie auch in ioBroker?

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @hg6806 sagte: Geht das irgendwie auch in ioBroker?

      Hast Du es mal mit dem Adapter iobroker.i2c versucht?

      Das Python-Beispiel könnte dann bis zur Log-Ausgabe so aussehen:

      const addr = 0x10; // anpassen!
      
      sendTo('i2c.0', 'read', {
          address: addr,
          register: 0x05,
          bytes: 1
      }, (ret) => {
          log('Register 5: ' + ret.inspect());
      });
      
      sendTo('i2c.0', 'read', {
          address: addr,
          register: 0x06,
          bytes: 1
      }, (ret) => {
          log('Register 6: ' + ret.inspect());
      });
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      hg6806H 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @hg6806 sagte: Geht das irgendwie auch in ioBroker?

        Hast Du es mal mit dem Adapter iobroker.i2c versucht?

        Das Python-Beispiel könnte dann bis zur Log-Ausgabe so aussehen:

        const addr = 0x10; // anpassen!
        
        sendTo('i2c.0', 'read', {
            address: addr,
            register: 0x05,
            bytes: 1
        }, (ret) => {
            log('Register 5: ' + ret.inspect());
        });
        
        sendTo('i2c.0', 'read', {
            address: addr,
            register: 0x06,
            bytes: 1
        }, (ret) => {
            log('Register 6: ' + ret.inspect());
        });
        
        hg6806H Offline
        hg6806H Offline
        hg6806
        Most Active
        schrieb am zuletzt editiert von
        #3

        @paul53

        Danke, habe den I2C Adapter installiert. Ein INA219 hatte auch funktioniert, das war ja auch vorgegeben.
        Aber den Max findet er nicht.

        Das Programm erstelle ich als Javascript?

        paul53P 1 Antwort Letzte Antwort
        0
        • hg6806H hg6806

          @paul53

          Danke, habe den I2C Adapter installiert. Ein INA219 hatte auch funktioniert, das war ja auch vorgegeben.
          Aber den Max findet er nicht.

          Das Programm erstelle ich als Javascript?

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @hg6806 sagte: Das Programm erstelle ich als Javascript?

          Ja. Du musst wohl erst mal die Adresse des Max checken.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          hg6806H 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @hg6806 sagte: Das Programm erstelle ich als Javascript?

            Ja. Du musst wohl erst mal die Adresse des Max checken.

            hg6806H Offline
            hg6806H Offline
            hg6806
            Most Active
            schrieb am zuletzt editiert von hg6806
            #5

            @paul53

            Die Adresse 0x10 passt.

            Der Javascript wirft folgenden Fehler:

            javascript.0 (2540) TypeError: ret.inspect is not a function at Object.cb (script.js.common.Max:9:30) at change (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5809:71) at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/db-states-redis/lib/states/statesInRedisClient.js:322:37) at processImmediate (internal/timers.js:464:21)
            

            Was muss ich denn im I2C Adapter machen?

            paul53P 1 Antwort Letzte Antwort
            0
            • hg6806H hg6806

              @paul53

              Die Adresse 0x10 passt.

              Der Javascript wirft folgenden Fehler:

              javascript.0 (2540) TypeError: ret.inspect is not a function at Object.cb (script.js.common.Max:9:30) at change (/opt/iobroker/node_modules/@iobroker/js-controller-adapter/src/lib/adapter/adapter.js:5809:71) at Immediate._onImmediate (/opt/iobroker/node_modules/@iobroker/db-states-redis/lib/states/statesInRedisClient.js:322:37) at processImmediate (internal/timers.js:464:21)
              

              Was muss ich denn im I2C Adapter machen?

              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von paul53
              #6

              @hg6806 sagte: Der Javascript wirft folgenden Fehler:

              Gib mal direkt die Variable ret als Log aus.

              sendTo('i2c.0', 'read', {
                  address: 0x10,
                  register: 0x05,
                  bytes: 1
              }, (ret) => {
                  log(ret);
              });
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              hg6806H 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @hg6806 sagte: Der Javascript wirft folgenden Fehler:

                Gib mal direkt die Variable ret als Log aus.

                sendTo('i2c.0', 'read', {
                    address: 0x10,
                    register: 0x05,
                    bytes: 1
                }, (ret) => {
                    log(ret);
                });
                
                hg6806H Offline
                hg6806H Offline
                hg6806
                Most Active
                schrieb am zuletzt editiert von
                #7

                @paul53 sagte in MAX17043 über I2C eines Raspberry Pi UPS auslesen?:

                sendTo('i2c.0', 'read', { address: 0x10, register: 0x05, bytes: 1, }, (ret) => { log(ret); });

                2022-02-25 22:44:21.648	error	Error reading from 0x10
                

                Aber die Adresse ist doch 0x10
                Laut Python Prg was auch läuft:

                import smbus
                addr=0x10 #ups i2c address
                bus=smbus.SMBus(1) #i2c-1
                vcellH=bus.read_byte_data(addr,0x03)
                vcellL=bus.read_byte_data(addr,0x04)
                socH=bus.read_byte_data(addr,0x05)
                socL=bus.read_byte_data(addr,0x06)
                
                capacity=(((vcellH&0x0F)<<8)+vcellL)*1.25 #capacity
                electricity=((socH<<8)+socL)*0.003906 #current electric quantity percentage
                
                print("capacity=%dmV"%capacity)
                print("electricity percentage=%.2f"%electricity)
                
                paul53P 1 Antwort Letzte Antwort
                0
                • hg6806H hg6806

                  @paul53 sagte in MAX17043 über I2C eines Raspberry Pi UPS auslesen?:

                  sendTo('i2c.0', 'read', { address: 0x10, register: 0x05, bytes: 1, }, (ret) => { log(ret); });

                  2022-02-25 22:44:21.648	error	Error reading from 0x10
                  

                  Aber die Adresse ist doch 0x10
                  Laut Python Prg was auch läuft:

                  import smbus
                  addr=0x10 #ups i2c address
                  bus=smbus.SMBus(1) #i2c-1
                  vcellH=bus.read_byte_data(addr,0x03)
                  vcellL=bus.read_byte_data(addr,0x04)
                  socH=bus.read_byte_data(addr,0x05)
                  socL=bus.read_byte_data(addr,0x06)
                  
                  capacity=(((vcellH&0x0F)<<8)+vcellL)*1.25 #capacity
                  electricity=((socH<<8)+socL)*0.003906 #current electric quantity percentage
                  
                  print("capacity=%dmV"%capacity)
                  print("electricity percentage=%.2f"%electricity)
                  
                  paul53P Offline
                  paul53P Offline
                  paul53
                  schrieb am zuletzt editiert von
                  #8

                  @hg6806 sagte: Laut Python Prg was auch läuft:

                  Diesen Teil der Adapter-Anleitung hast Du befolgt?

                  sudo usermod -aG i2c iobroker

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  hg6806H 1 Antwort Letzte Antwort
                  0
                  • paul53P paul53

                    @hg6806 sagte: Laut Python Prg was auch läuft:

                    Diesen Teil der Adapter-Anleitung hast Du befolgt?

                    sudo usermod -aG i2c iobroker

                    hg6806H Offline
                    hg6806H Offline
                    hg6806
                    Most Active
                    schrieb am zuletzt editiert von
                    #9

                    @paul53
                    Hatte ich nicht befolgt.
                    Nach der Ausführung aber noch das gleiche Problem:

                    javascript.0
                    2022-02-26 17:37:14.945	info	script.js.common.Max: {'address':16,'register':5,'bytes':1}
                    i2c.0
                    2022-02-26 17:37:14.934	error	Error reading from 0x10
                    

                    Der I2C Adapter findet noch immer kein Device, egal welche Bus-Nr. (=Adresse?)

                    Das Python Programm läuft aber und gibt Werte aus.

                    paul53P 1 Antwort Letzte Antwort
                    0
                    • hg6806H hg6806

                      @paul53
                      Hatte ich nicht befolgt.
                      Nach der Ausführung aber noch das gleiche Problem:

                      javascript.0
                      2022-02-26 17:37:14.945	info	script.js.common.Max: {'address':16,'register':5,'bytes':1}
                      i2c.0
                      2022-02-26 17:37:14.934	error	Error reading from 0x10
                      

                      Der I2C Adapter findet noch immer kein Device, egal welche Bus-Nr. (=Adresse?)

                      Das Python Programm läuft aber und gibt Werte aus.

                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von paul53
                      #10

                      @hg6806 sagte: egal welche Bus-Nr. (=Adresse?)

                      Die Bus-Nr. ist 1 (s. Python). "address" ist die Geräte-Adresse am Bus.
                      Ich habe keine Ahnung, weshalb das Gerät nicht erkannt wird, denn ich verwende kein I2C.

                      Läuft ioBroker direkt auf dem RasPi mit der UPS?

                      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                      hg6806H 1 Antwort Letzte Antwort
                      0
                      • paul53P paul53

                        @hg6806 sagte: egal welche Bus-Nr. (=Adresse?)

                        Die Bus-Nr. ist 1 (s. Python). "address" ist die Geräte-Adresse am Bus.
                        Ich habe keine Ahnung, weshalb das Gerät nicht erkannt wird, denn ich verwende kein I2C.

                        Läuft ioBroker direkt auf dem RasPi mit der UPS?

                        hg6806H Offline
                        hg6806H Offline
                        hg6806
                        Most Active
                        schrieb am zuletzt editiert von
                        #11

                        @paul53
                        Ja, läuft alles direkt auf dem Pi3

                        Habe es hinbekommen!
                        Man muss im I2C Adapter die Bus-Nr.1 auswählen, speichern+schließen und den Adapter neustarten (müsset automatisch gehen)
                        Erst dann wird auf Adrs. 10 etwas gefunden.
                        Ich habe es wie folgt konfiguriert:

                        ff6499c1-a1c7-48eb-968d-1b7148960dbb-image.png
                        und bekomme folgende Werte:
                        8fd3ca90-8964-4e76-b2b3-381616cb3d09-image.png

                        Wie bekomme ich das folgende nun in Blockly oder Javascript umgesetzt?

                        vcellH=bus.read_byte_data(addr,0x03)
                        vcellL=bus.read_byte_data(addr,0x04)
                        socH=bus.read_byte_data(addr,0x05)
                        socL=bus.read_byte_data(addr,0x06)
                        
                        capacity=(((vcellH&0x0F)<<8)+vcellL)*1.25 #capacity
                        electricity=((socH<<8)+socL)*0.003906 #current electric quantity percentage
                        
                        
                        paul53P 1 Antwort Letzte Antwort
                        0
                        • hg6806H Offline
                          hg6806H Offline
                          hg6806
                          Most Active
                          schrieb am zuletzt editiert von
                          #12

                          Ich glaube ich habs.
                          Nachrichtentechnik Studium schon 20 Jahre her, ein bissel ist doch hängengeblieben.

                          High-Byte *256 (=1 Byte) + Low-Byte, den Rest dann normal berechnen.

                          1 Antwort Letzte Antwort
                          0
                          • hg6806H hg6806

                            @paul53
                            Ja, läuft alles direkt auf dem Pi3

                            Habe es hinbekommen!
                            Man muss im I2C Adapter die Bus-Nr.1 auswählen, speichern+schließen und den Adapter neustarten (müsset automatisch gehen)
                            Erst dann wird auf Adrs. 10 etwas gefunden.
                            Ich habe es wie folgt konfiguriert:

                            ff6499c1-a1c7-48eb-968d-1b7148960dbb-image.png
                            und bekomme folgende Werte:
                            8fd3ca90-8964-4e76-b2b3-381616cb3d09-image.png

                            Wie bekomme ich das folgende nun in Blockly oder Javascript umgesetzt?

                            vcellH=bus.read_byte_data(addr,0x03)
                            vcellL=bus.read_byte_data(addr,0x04)
                            socH=bus.read_byte_data(addr,0x05)
                            socL=bus.read_byte_data(addr,0x06)
                            
                            capacity=(((vcellH&0x0F)<<8)+vcellL)*1.25 #capacity
                            electricity=((socH<<8)+socL)*0.003906 #current electric quantity percentage
                            
                            
                            paul53P Offline
                            paul53P Offline
                            paul53
                            schrieb am zuletzt editiert von
                            #13

                            @hg6806 sagte: bekomme folgende Werte:

                            Dass die Registerwerte als Datenpunkte vorliegen, vereinfacht die Sache. Vorschlag:

                            const idR3 = 'i2c.0.0x10.0x03';
                            const idR4 = 'i2c.0.0x10.0x04';
                            const idR5 = 'i2c.0.0x10.0x05';
                            const idR6 = 'i2c.0.0x10.0x06';
                            const idmV = '0_userdata.USV.Spannung'; // Einheit: mV
                            const idLadung = '0_userdata.USV.Ladung'; // Einheit: %
                            
                            on(idR4, function(dp) {
                                let u = 1.25 * (256 * (getState(idR3).val & 0x0F) + dp.state.val);
                                setState(idmV, Math.round(u), true);
                            });
                            
                            on(idR6, function(dp) {
                                let level = 0.003906 * (256 * getState(idR5).val + dp.state.val);
                                setState(idLadung, Math.round(level), true);
                            });
                            

                            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                            Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                            hg6806H 1 Antwort Letzte Antwort
                            0
                            • paul53P paul53

                              @hg6806 sagte: bekomme folgende Werte:

                              Dass die Registerwerte als Datenpunkte vorliegen, vereinfacht die Sache. Vorschlag:

                              const idR3 = 'i2c.0.0x10.0x03';
                              const idR4 = 'i2c.0.0x10.0x04';
                              const idR5 = 'i2c.0.0x10.0x05';
                              const idR6 = 'i2c.0.0x10.0x06';
                              const idmV = '0_userdata.USV.Spannung'; // Einheit: mV
                              const idLadung = '0_userdata.USV.Ladung'; // Einheit: %
                              
                              on(idR4, function(dp) {
                                  let u = 1.25 * (256 * (getState(idR3).val & 0x0F) + dp.state.val);
                                  setState(idmV, Math.round(u), true);
                              });
                              
                              on(idR6, function(dp) {
                                  let level = 0.003906 * (256 * getState(idR5).val + dp.state.val);
                                  setState(idLadung, Math.round(level), true);
                              });
                              
                              hg6806H Offline
                              hg6806H Offline
                              hg6806
                              Most Active
                              schrieb am zuletzt editiert von
                              #14

                              @paul53
                              Danke, aber jetzt habe ich das nächste Problem.

                              Ich wollte das selbst berechnen, habe einen Datenpunkt angelegt.
                              Wie kann ich mehr Parameter definieren? Oder geht das nur noch über "Objektdaten" und nicht mehr schön grafisch?
                              a01fcff5-82ad-425c-90b9-cece28ad9527-image.png

                              paul53P 1 Antwort Letzte Antwort
                              0
                              • hg6806H hg6806

                                @paul53
                                Danke, aber jetzt habe ich das nächste Problem.

                                Ich wollte das selbst berechnen, habe einen Datenpunkt angelegt.
                                Wie kann ich mehr Parameter definieren? Oder geht das nur noch über "Objektdaten" und nicht mehr schön grafisch?
                                a01fcff5-82ad-425c-90b9-cece28ad9527-image.png

                                paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von
                                #15

                                @hg6806 sagte: geht das nur noch über "Objektdaten" und nicht mehr schön grafisch?

                                Das ist zur Zeit leider so.

                                Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                                Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                                hg6806H 1 Antwort Letzte Antwort
                                0
                                • paul53P paul53

                                  @hg6806 sagte: geht das nur noch über "Objektdaten" und nicht mehr schön grafisch?

                                  Das ist zur Zeit leider so.

                                  hg6806H Offline
                                  hg6806H Offline
                                  hg6806
                                  Most Active
                                  schrieb am zuletzt editiert von
                                  #16

                                  @paul53
                                  So, läuft nun alles, vielen Dank nochmals!

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


                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  889

                                  Online

                                  32.6k

                                  Benutzer

                                  82.0k

                                  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