Skip to content
  • Home
  • 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
ioBroker Logo

Community Forum

donate donate
  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.7k

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

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

Geekworm X1202 USV Variable in IObroker übernehmen

Scheduled Pinned Locked Moved Hardware
45 Posts 5 Posters 3.8k 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

    @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

                            956

                            Online

                            32.4k

                            Users

                            81.5k

                            Topics

                            1.3m

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

                            • Don't have an account? Register

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