Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Hardware
  4. Geekworm X1202 USV Variable in IObroker übernehmen

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.0k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.0k

Geekworm X1202 USV Variable in IObroker übernehmen

Geekworm X1202 USV Variable in IObroker übernehmen

Scheduled Pinned Locked Moved Hardware
45 Posts 5 Posters 3.7k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Lieggie

    @paul53 said in Geekworm X1202 USV Variable in IObroker übernehmen:

    @lieggie sagte:

    sudo npm install onoff
    sudo npm install i2c-bus

    So ist es falsch! Der Javascript-Adapter installiert sie selbst in das richtige Verzeichnis, nachdem sie in der Konfiguration unter "Zusätzliche NPM-Module" eingetragen wurden.

    dann müssen sie ja da sein weil eingetragen im Javascript Adapter sind sie ja

    HomoranH Do not disturb
    HomoranH Do not disturb
    Homoran
    Global Moderator Administrators
    wrote on last edited by
    #27

    @lieggie sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

    dann müssen sie ja da sein weil eingetragen im om adapter sind sie ja

    Was willst du damit sagen?
    Wo müssen sie sein?

    Was ist der om Adapter?

    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

    L 1 Reply Last reply
    0
    • L Lieggie

      @paul53 said in Geekworm X1202 USV Variable in IObroker übernehmen:

      @lieggie sagte:

      sudo npm install onoff
      sudo npm install i2c-bus

      So ist es falsch! Der Javascript-Adapter installiert sie selbst in das richtige Verzeichnis, nachdem sie in der Konfiguration unter "Zusätzliche NPM-Module" eingetragen wurden.

      dann müssen sie ja da sein weil eingetragen im Javascript Adapter sind sie ja

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #28

      @lieggie sagte: dann müssen sie ja da sein weil eingetragen im om adapter sind sie ja

      Ja, denn die Fehlermeldung

      	2024-09-15 10:34:58.718	error	at exportGpio (/opt/iobroker/node_modules/@iobroker-javascript.0/onoff/onoff.js:18:8)
      

      zeigt das Vorhandensein im richtigen Verzeichnis.

      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

      1 Reply Last reply
      0
      • HomoranH Homoran

        @lieggie sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

        dann müssen sie ja da sein weil eingetragen im om adapter sind sie ja

        Was willst du damit sagen?
        Wo müssen sie sein?

        Was ist der om Adapter?

        L Offline
        L Offline
        Lieggie
        wrote on last edited by
        #29

        @homoran said in Geekworm X1202 USV Variable in IObroker übernehmen:

        @lieggie sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

        dann müssen sie ja da sein weil eingetragen im om adapter sind sie ja

        Was willst du damit sagen?
        Wo müssen sie sein?

        Was ist der om Adapter?

        sollte natürlich Javascript Adapter sein...... so ist das mit 2 kleinen Kindern neben bei

        HomoranH 1 Reply Last reply
        0
        • L Lieggie

          @paul53 said in Geekworm X1202 USV Variable in IObroker übernehmen:

          @lieggie sagte:

          sudo npm install onoff
          sudo npm install i2c-bus

          So ist es falsch! Der Javascript-Adapter installiert sie selbst in das richtige Verzeichnis, nachdem sie in der Konfiguration unter "Zusätzliche NPM-Module" eingetragen wurden.

          dann müssen sie ja da sein weil eingetragen im Javascript Adapter sind sie ja

          Thomas BraunT Online
          Thomas BraunT Online
          Thomas Braun
          Most Active
          wrote on last edited by Thomas Braun
          #30

          @lieggie sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

          dann müssen sie ja da sein weil eingetragen im Javascript Adapter sind sie ja

          Dann schau nach...
          Und schau auch wo jetzt die per sudo reingeballerten Module liegen und hau die wieder raus.

          cd /opt/iobroker
          npm ls onoff
          npm ls i2c-bus
          

          Linux-Werkzeugkasten:
          https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
          NodeJS Fixer Skript:
          https://forum.iobroker.net/topic/68035/iob-node-fix-skript
          iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

          1 Reply Last reply
          0
          • L Lieggie

            @homoran said in Geekworm X1202 USV Variable in IObroker übernehmen:

            @lieggie sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

            dann müssen sie ja da sein weil eingetragen im om adapter sind sie ja

            Was willst du damit sagen?
            Wo müssen sie sein?

            Was ist der om Adapter?

            sollte natürlich Javascript Adapter sein...... so ist das mit 2 kleinen Kindern neben bei

            HomoranH Do not disturb
            HomoranH Do not disturb
            Homoran
            Global Moderator Administrators
            wrote on last edited by
            #31

            @lieggie und wo müssen sie sein?

            selbst wenn durch den Eintrag im js Adapter

            @paul53 sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

            das Vorhandensein im richtigen Verzeichnis

            vorliegt, kann durch

            @lieggie sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

            sudo npm install onoff
            sudo npm install i2c-bus

            es zusätzlich noch einmal woanders installiert sein

            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

            L 1 Reply Last reply
            0
            • HomoranH Homoran

              @lieggie und wo müssen sie sein?

              selbst wenn durch den Eintrag im js Adapter

              @paul53 sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

              das Vorhandensein im richtigen Verzeichnis

              vorliegt, kann durch

              @lieggie sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

              sudo npm install onoff
              sudo npm install i2c-bus

              es zusätzlich noch einmal woanders installiert sein

              L Offline
              L Offline
              Lieggie
              wrote on last edited by
              #32

              @homoran

              Sie lagen im home/pi habe sie nun mit
              sudo npm uninstall onoff
              wieder entfernt.

              ich sollte weiter mit blockly basteln das Script kram liegt mir nicht.

              Thomas BraunT OliverIOO 2 Replies Last reply
              0
              • L Lieggie

                @homoran

                Sie lagen im home/pi habe sie nun mit
                sudo npm uninstall onoff
                wieder entfernt.

                ich sollte weiter mit blockly basteln das Script kram liegt mir nicht.

                Thomas BraunT Online
                Thomas BraunT Online
                Thomas Braun
                Most Active
                wrote on last edited by
                #33

                @lieggie

                Und gewöhn dir den exzessiven Einsatz von sudo ab. Da ist im Kontext vom ioBroker eigentlich nie erforderlich und zu 99% einfach falsch.

                Linux-Werkzeugkasten:
                https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
                NodeJS Fixer Skript:
                https://forum.iobroker.net/topic/68035/iob-node-fix-skript
                iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

                L 1 Reply Last reply
                0
                • Thomas BraunT Thomas Braun

                  @lieggie

                  Und gewöhn dir den exzessiven Einsatz von sudo ab. Da ist im Kontext vom ioBroker eigentlich nie erforderlich und zu 99% einfach falsch.

                  L Offline
                  L Offline
                  Lieggie
                  wrote on last edited by
                  #34

                  Kann es vielleicht daran liegen das ich einen Rpi5 nutze mit Bookworm?
                  habe gerade gelesen das einige User probleme mit den GPIO in verbindung mit bookworm haben

                  Thomas BraunT paul53P 2 Replies Last reply
                  0
                  • L Lieggie

                    Kann es vielleicht daran liegen das ich einen Rpi5 nutze mit Bookworm?
                    habe gerade gelesen das einige User probleme mit den GPIO in verbindung mit bookworm haben

                    Thomas BraunT Online
                    Thomas BraunT Online
                    Thomas Braun
                    Most Active
                    wrote on last edited by
                    #35

                    @lieggie

                    Die GPIOs werden nun anders angesprochen und Programme müssen dahingehend umgestellt werden.

                    Linux-Werkzeugkasten:
                    https://forum.iobroker.net/topic/42952/der-kleine-iobroker-linux-werkzeugkasten
                    NodeJS Fixer Skript:
                    https://forum.iobroker.net/topic/68035/iob-node-fix-skript
                    iob_diag: curl -sLf -o diag.sh https://iobroker.net/diag.sh && bash diag.sh

                    1 Reply Last reply
                    0
                    • L Lieggie

                      Kann es vielleicht daran liegen das ich einen Rpi5 nutze mit Bookworm?
                      habe gerade gelesen das einige User probleme mit den GPIO in verbindung mit bookworm haben

                      paul53P Offline
                      paul53P Offline
                      paul53
                      wrote on last edited by paul53
                      #36

                      @lieggie sagte: probleme mit den GPIO in verbindung mit bookworm haben

                      Das Python-Skript hat doch funktioniert: Einen String mit den Werten geliefert. Dann nimm das Python-Skript (ohne sudo) und zerlege den String.

                      Blockly_temp.JPG

                      Wenn du das Skript nach /opt/iobroker verschoben hast, dann ersetze "home" durch "opt".

                      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

                      L 1 Reply Last reply
                      0
                      • paul53P paul53

                        @lieggie sagte: probleme mit den GPIO in verbindung mit bookworm haben

                        Das Python-Skript hat doch funktioniert: Einen String mit den Werten geliefert. Dann nimm das Python-Skript (ohne sudo) und zerlege den String.

                        Blockly_temp.JPG

                        Wenn du das Skript nach /opt/iobroker verschoben hast, dann ersetze "home" durch "opt".

                        L Offline
                        L Offline
                        Lieggie
                        wrote on last edited by
                        #37

                        @paul53

                        es geht nur so mit sudo -Spi4.JPG
                        Es wir aber nichts zurückgegeben

                        Gebe ich nur sudo ein kommt die Meldung

                        script.js.Skript_1: sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper sudo: a password is required 
                        

                        ganz ohne sudo

                        script.js.Skript_1: Traceback (most recent call last): File "/opt/iobroker/merged.py", line 50, in <module> with open(pidfile, 'w') as f: ^^^^^^^^^^^^^^^^^^ PermissionError: [Errno 13] Permission denied: '/run/X1200.pid'
                        
                        paul53P 1 Reply Last reply
                        0
                        • L Lieggie

                          @paul53

                          es geht nur so mit sudo -Spi4.JPG
                          Es wir aber nichts zurückgegeben

                          Gebe ich nur sudo ein kommt die Meldung

                          script.js.Skript_1: sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper sudo: a password is required 
                          

                          ganz ohne sudo

                          script.js.Skript_1: Traceback (most recent call last): File "/opt/iobroker/merged.py", line 50, in <module> with open(pidfile, 'w') as f: ^^^^^^^^^^^^^^^^^^ PermissionError: [Errno 13] Permission denied: '/run/X1200.pid'
                          
                          paul53P Offline
                          paul53P Offline
                          paul53
                          wrote on last edited by paul53
                          #38

                          @lieggie sagte: ganz ohne sudo

                          Das Python-Skript wird abgearbeitet bis zur Zeile 50, wo es offenbar ein Problem mit Zugriffsrechten auf das Verzeichnis /run gibt.
                          EDIT: Deshalb muss Python3 offenbar mit root-Rechten ausgeführt werden.

                          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

                          1 Reply Last reply
                          0
                          • L Lieggie

                            @homoran

                            Sie lagen im home/pi habe sie nun mit
                            sudo npm uninstall onoff
                            wieder entfernt.

                            ich sollte weiter mit blockly basteln das Script kram liegt mir nicht.

                            OliverIOO Offline
                            OliverIOO Offline
                            OliverIO
                            wrote on last edited by
                            #39

                            @lieggie sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

                            ich sollte weiter mit blockly basteln das Script kram liegt mir nicht.

                            Ok
                            Evtl hilft das Skript ja jemanden anderen weiter

                            Meine Adapter und Widgets
                            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                            Links im Profil

                            L 1 Reply Last reply
                            0
                            • OliverIOO OliverIO

                              @lieggie sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

                              ich sollte weiter mit blockly basteln das Script kram liegt mir nicht.

                              Ok
                              Evtl hilft das Skript ja jemanden anderen weiter

                              L Offline
                              L Offline
                              Lieggie
                              wrote on last edited by
                              #40

                              @oliverio

                              ich versuche grad 2 gleisig zu fahren....ich komme weder mit blockly noch mit deinem Script weiter.

                              Aus deine script bekomme ich diesen fehler

                              javascript.0	14:59:52.402	info	Start JavaScript script.js.USV (Javascript/js)
                              javascript.0	14:59:52.417	error	script.js.USV: Error: EINVAL: invalid argument, write
                              javascript.0	14:59:52.417	error	at script.js.USV:26:18
                              javascript.0	14:59:52.417	error	at script.js.USV:169:3
                              

                              komme damit auch nicht weiter

                              OliverIOO 1 Reply Last reply
                              0
                              • L Lieggie

                                @oliverio
                                ich stehe auf dem schlauch ... gemacht habe ich nun 11.JPG

                                Variable erstellt
                                12.JPG

                                Minutliche ausführung
                                13.JPG

                                nu komme ich nicht weiter weil mein merged.py so aussieht.
                                wo soll ich deine Zeilen einfügen.

                                #!/usr/bin/python3
                                
                                import os
                                import struct
                                import smbus
                                import time
                                import logging
                                import subprocess
                                import gpiod
                                from subprocess import call
                                
                                # User-configurable variables
                                SHUTDOWN_THRESHOLD = 3  # Number of consecutive failures required for shutdown
                                SLEEP_TIME = 60  # Time in seconds to wait between failure checks
                                Loop =  False
                                
                                def readVoltage(bus):
                                    read = bus.read_word_data(address, 2)
                                    swapped = struct.unpack("<H", struct.pack(">H", read))[0]
                                    voltage = swapped * 1.25 / 1000 / 16
                                    return voltage
                                
                                def readCapacity(bus):
                                    read = bus.read_word_data(address, 4)
                                    swapped = struct.unpack("<H", struct.pack(">H", read))[0]
                                    capacity = swapped / 256
                                    return capacity
                                
                                def get_battery_status(voltage):
                                    if 3.87 <= voltage <= 4.2:
                                        return "Full"
                                    elif 3.7 <= voltage < 3.87:
                                        return "High"
                                    elif 3.55 <= voltage < 3.7:
                                        return "Medium"
                                    elif 3.4 <= voltage < 3.55:
                                        return "Low"
                                    elif voltage < 3.4:
                                        return "Critical"
                                    else:
                                        return "Unknown"
                                
                                # Ensure only one instance of the script is running
                                pid = str(os.getpid())
                                pidfile = "/run/X1200.pid"
                                if os.path.isfile(pidfile):
                                    print("Script already running")
                                    exit(1)
                                else:
                                    with open(pidfile, 'w') as f:
                                        f.write(pid)
                                
                                try:
                                    bus = smbus.SMBus(1)
                                    address = 0x36
                                    PLD_PIN = 6
                                    chip = gpiod.Chip('gpiochip4')
                                    pld_line = chip.get_line(PLD_PIN)
                                    pld_line.request(consumer="PLD", type=gpiod.LINE_REQ_DIR_IN)
                                
                                    while True:
                                        failure_counter = 0
                                
                                        for _ in range(SHUTDOWN_THRESHOLD):
                                            ac_power_state = pld_line.get_value()
                                            voltage = readVoltage(bus)
                                            battery_status = get_battery_status(voltage)
                                            capacity = readCapacity(bus)
                                            print(f"Capacity: {capacity:.2f}% ({battery_status}), AC Power State: {'Plugged in' if ac_power_state == 1 else 'Unplugged'}, Voltage: {voltage:.2f}V")
                                            if capacity < 20:
                                                print("Battery level critical.")
                                                failure_counter += 1
                                            elif voltage < 3.20:
                                                print("Battery voltage critical.")
                                                failure_counter += 1
                                            elif ac_power_state == 0:
                                                print("UPS is unplugged or AC power loss detected.")
                                                failure_counter += 1
                                            else:
                                                failure_counter = 0
                                                break
                                
                                            if failure_counter < SHUTDOWN_THRESHOLD:
                                                time.sleep(SLEEP_TIME) 
                                
                                        if failure_counter >= SHUTDOWN_THRESHOLD:
                                            shutdown_reason = ""
                                            if capacity < 20:
                                                shutdown_reason = "due to critical battery level."
                                            elif voltage < 3.20:
                                                shutdown_reason = "due to critical battery voltage."
                                            elif ac_power_state == 0:
                                                shutdown_reason = "due to AC power loss or UPS unplugged."
                                
                                            shutdown_message = f"Critical condition met {shutdown_reason} Initiating shutdown."
                                            print(shutdown_message)
                                            call("sudo nohup shutdown -h now", shell=True)
                                        else:
                                            #print("System operating within normal parameters. No action required.")
                                            if Loop:
                                                time.sleep(SLEEP_TIME)
                                            else:
                                                exit(0)
                                
                                finally:
                                    if os.path.isfile(pidfile):
                                        os.unlink(pidfile)
                                    exit(0)
                                
                                
                                
                                paul53P Offline
                                paul53P Offline
                                paul53
                                wrote on last edited by paul53
                                #41

                                @lieggie sagte: wo soll ich deine Zeilen einfügen.

                                Damit es ohne sudo laufen kann, kommentiere die Zeilen 44 bis 51 und 106, 107 aus und teste es erst einmal auf der Konsole (ohne sudo).

                                python3 /opt/iobroker/merged.py
                                

                                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

                                L 1 Reply Last reply
                                0
                                • paul53P paul53

                                  @lieggie sagte: wo soll ich deine Zeilen einfügen.

                                  Damit es ohne sudo laufen kann, kommentiere die Zeilen 44 bis 51 und 106, 107 aus und teste es erst einmal auf der Konsole (ohne sudo).

                                  python3 /opt/iobroker/merged.py
                                  
                                  L Offline
                                  L Offline
                                  Lieggie
                                  wrote on last edited by
                                  #42

                                  @paul53 said in Geekworm X1202 USV Variable in IObroker übernehmen:

                                  python3 /opt/iobroker/merged.py

                                  Ich bekomme nun den String angezeigt

                                  pi5.JPG

                                  nun kann ich mich an das zerlegen machen . Vielen Dank.

                                  Magst du mir erklären was wir dort nun genau rausgenommen haben ?

                                  paul53P 1 Reply Last reply
                                  0
                                  • L Lieggie

                                    @paul53 said in Geekworm X1202 USV Variable in IObroker übernehmen:

                                    python3 /opt/iobroker/merged.py

                                    Ich bekomme nun den String angezeigt

                                    pi5.JPG

                                    nun kann ich mich an das zerlegen machen . Vielen Dank.

                                    Magst du mir erklären was wir dort nun genau rausgenommen haben ?

                                    paul53P Offline
                                    paul53P Offline
                                    paul53
                                    wrote on last edited by
                                    #43

                                    @lieggie sagte: Magst du mir erklären was wir dort nun genau rausgenommen haben ?

                                    Die Prüfung über eine pid-Datei, ob das Skript schon läuft, wurde raus genommen. Das Skript wird nur jede Minute gestartet und sollte sich vorher selbst beenden mit

                                    Loop = False
                                    

                                    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

                                    L 1 Reply Last reply
                                    0
                                    • paul53P paul53

                                      @lieggie sagte: Magst du mir erklären was wir dort nun genau rausgenommen haben ?

                                      Die Prüfung über eine pid-Datei, ob das Skript schon läuft, wurde raus genommen. Das Skript wird nur jede Minute gestartet und sollte sich vorher selbst beenden mit

                                      Loop = False
                                      
                                      L Offline
                                      L Offline
                                      Lieggie
                                      wrote on last edited by Lieggie
                                      #44

                                      @paul53 danke an alle die geholfen haben, nun läuft alles
                                      anbei noch mal das Blockly
                                      pi6.JPG

                                      und das merged Skript ohne die Zeilen 44 bis 51 und 106, 107

                                      co#!/usr/bin/python3
                                      
                                      import os
                                      import struct
                                      import smbus
                                      import time
                                      import logging
                                      import subprocess
                                      import gpiod
                                      from subprocess 
                                      import call
                                      
                                      
                                      
                                      
                                      # User-configurable variables
                                      SHUTDOWN_THRESHOLD = 3  # Number of consecutive failures required for shutdown
                                      SLEEP_TIME = 60  # Time in seconds to wait between failure checks
                                      Loop =  False
                                      
                                      def readVoltage(bus):
                                          read = bus.read_word_data(address, 2)
                                          swapped = struct.unpack("<H", struct.pack(">H", read))[0]
                                          voltage = swapped * 1.25 / 1000 / 16
                                          return voltage
                                         
                                      
                                      def readCapacity(bus):
                                          read = bus.read_word_data(address, 4)
                                          swapped = struct.unpack("<H", struct.pack(">H", read))[0]
                                          capacity = swapped / 256
                                          return capacity
                                      
                                      def get_battery_status(voltage):
                                          if 3.87 <= voltage <= 4.2:
                                              return "Full"
                                          elif 3.7 <= voltage < 3.87:
                                              return "High"
                                          elif 3.55 <= voltage < 3.7:
                                              return "Medium"
                                          elif 3.4 <= voltage < 3.55:
                                              return "Low"
                                          elif voltage < 3.4:
                                              return "Critical"
                                          else:
                                              return "Unknown"
                                      
                                      
                                      # Ensure only one instance of the script is running
                                      
                                      
                                      try:
                                          bus = smbus.SMBus(1)
                                          address = 0x36
                                          PLD_PIN = 6
                                          chip = gpiod.Chip('gpiochip4')
                                          pld_line = chip.get_line(PLD_PIN)
                                          pld_line.request(consumer="PLD", type=gpiod.LINE_REQ_DIR_IN)
                                      
                                          while True:
                                              failure_counter = 0
                                      
                                              for _ in range(SHUTDOWN_THRESHOLD):
                                                  ac_power_state = pld_line.get_value()
                                                  voltage = readVoltage(bus)
                                                  battery_status = get_battery_status(voltage)
                                                  capacity = readCapacity(bus)
                                                  print(f"Capacity: {capacity:.2f}% ({battery_status}), AC Power State: {'Plugged in' if ac_power_state == 1 else 'Unplugged'}, Voltage: {voltage:.2f}V")
                                                  if capacity < 20:
                                                      print("Battery level critical.")
                                                      failure_counter += 1
                                                  elif voltage < 3.20:
                                                      print("Battery voltage critical.")
                                                      failure_counter += 1
                                                  elif ac_power_state == 0:
                                                      print("UPS is unplugged or AC power loss detected.")
                                                      failure_counter += 1
                                                  else:
                                                      failure_counter = 0
                                                      break
                                      
                                                  if failure_counter < SHUTDOWN_THRESHOLD:
                                                      time.sleep(SLEEP_TIME) 
                                      
                                              if failure_counter >= SHUTDOWN_THRESHOLD:
                                                  shutdown_reason = ""
                                                  if capacity < 20:
                                                      shutdown_reason = "due to critical battery level."
                                                  elif voltage < 3.20:
                                                      shutdown_reason = "due to critical battery voltage."
                                                  elif ac_power_state == 0:
                                                      shutdown_reason = "due to AC power loss or UPS unplugged."
                                      
                                                  shutdown_message = f"Critical condition met {shutdown_reason} Initiating shutdown."
                                                  print(shutdown_message)
                                                  call("sudo nohup shutdown -h now", shell=True)
                                              else:
                                                  #print("System operating within normal parameters. No action required.")
                                                  if Loop:
                                                      time.sleep(SLEEP_TIME)
                                                  else:
                                      
                                                      exit(0)
                                      
                                      finally:
                                         
                                          exit(0)de_text
                                      
                                      1 Reply Last reply
                                      0
                                      • L Lieggie

                                        @oliverio

                                        ich versuche grad 2 gleisig zu fahren....ich komme weder mit blockly noch mit deinem Script weiter.

                                        Aus deine script bekomme ich diesen fehler

                                        javascript.0	14:59:52.402	info	Start JavaScript script.js.USV (Javascript/js)
                                        javascript.0	14:59:52.417	error	script.js.USV: Error: EINVAL: invalid argument, write
                                        javascript.0	14:59:52.417	error	at script.js.USV:26:18
                                        javascript.0	14:59:52.417	error	at script.js.USV:169:3
                                        

                                        komme damit auch nicht weiter

                                        OliverIOO Offline
                                        OliverIOO Offline
                                        OliverIO
                                        wrote on last edited by
                                        #45

                                        @lieggie sagte in Geekworm X1202 USV Variable in IObroker übernehmen:

                                        ich versuche grad 2 gleisig zu fahren....ich komme weder mit blockly noch mit deinem Script weiter.

                                        hier mal noch was ich dir per PM geantwortet habe für alle

                                        wahrscheinlich das was thomas geschrieben hat, das seit der letzten betriebssystem version die bisherige methode zur kommunikation mit gpio nicht mehr funktioniert. man müsste dann opengpio nehmen, das berücksichtigt die neuesten änderungen. wahrscheinlich wäre es einfach, aber es kann auch ein wenig testen und rumprobieren bedeuten.
                                        da du geschrieben hast, das das mit skript nix für dich ist, verfolge erst einmal mit den anderen den python weg.
                                        wenn da wirklich gar nix geht, dann können wir mal schauen. für doppelt-entwicklung ist die zeit aktuell nicht da

                                        so wie es aussieht habt ihr ja den python weg auch hinbekommen

                                        Meine Adapter und Widgets
                                        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                                        Links im Profil

                                        1 Reply Last reply
                                        0
                                        Reply
                                        • Reply as topic
                                        Log in to reply
                                        • Oldest to Newest
                                        • Newest to Oldest
                                        • Most Votes


                                        Support us

                                        ioBroker
                                        Community Adapters
                                        Donate

                                        605

                                        Online

                                        32.4k

                                        Users

                                        81.3k

                                        Topics

                                        1.3m

                                        Posts
                                        Community
                                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                        ioBroker Community 2014-2025
                                        logo
                                        • Login

                                        • Don't have an account? Register

                                        • Login or register to search.
                                        • First post
                                          Last post
                                        0
                                        • Recent
                                        • Tags
                                        • Unread 0
                                        • Categories
                                        • Unreplied
                                        • Popular
                                        • GitHub
                                        • Docu
                                        • Hilfe