Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. MAX17043 über I2C eines Raspberry Pi UPS auslesen?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    MAX17043 über I2C eines Raspberry Pi UPS auslesen?

    This topic has been deleted. Only users with topic management privileges can see it.
    • hg6806
      hg6806 Most Active last edited by 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?

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @hg6806 last edited by 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());
        });
        
        hg6806 1 Reply Last reply Reply Quote 0
        • hg6806
          hg6806 Most Active @paul53 last edited by

          @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?

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @hg6806 last edited by

            @hg6806 sagte: Das Programm erstelle ich als Javascript?

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

            hg6806 1 Reply Last reply Reply Quote 0
            • hg6806
              hg6806 Most Active @paul53 last edited by 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?

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @hg6806 last edited by 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);
                });
                
                hg6806 1 Reply Last reply Reply Quote 0
                • hg6806
                  hg6806 Most Active @paul53 last edited by

                  @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)
                  
                  paul53 1 Reply Last reply Reply Quote 0
                  • paul53
                    paul53 @hg6806 last edited by

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

                    Diesen Teil der Adapter-Anleitung hast Du befolgt?

                    sudo usermod -aG i2c iobroker

                    hg6806 1 Reply Last reply Reply Quote 0
                    • hg6806
                      hg6806 Most Active @paul53 last edited by

                      @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.

                      paul53 1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @hg6806 last edited by 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?

                        hg6806 1 Reply Last reply Reply Quote 0
                        • hg6806
                          hg6806 Most Active @paul53 last edited by

                          @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
                          
                          
                          paul53 1 Reply Last reply Reply Quote 0
                          • hg6806
                            hg6806 Most Active last edited by

                            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 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @hg6806 last edited by

                              @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);
                              });
                              
                              hg6806 1 Reply Last reply Reply Quote 0
                              • hg6806
                                hg6806 Most Active @paul53 last edited by

                                @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

                                paul53 1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @hg6806 last edited by

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

                                  Das ist zur Zeit leider so.

                                  hg6806 1 Reply Last reply Reply Quote 0
                                  • hg6806
                                    hg6806 Most Active @paul53 last edited by

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

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    Support us

                                    ioBroker
                                    Community Adapters
                                    Donate

                                    469
                                    Online

                                    31.9k
                                    Users

                                    80.1k
                                    Topics

                                    1.3m
                                    Posts

                                    2
                                    16
                                    447
                                    Loading More Posts
                                    • Oldest to Newest
                                    • Newest to Oldest
                                    • Most Votes
                                    Reply
                                    • Reply as topic
                                    Log in to reply
                                    Community
                                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                    The ioBroker Community 2014-2023
                                    logo