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. Geekworm X1202 USV Variable in IObroker übernehmen

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.0k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Geekworm X1202 USV Variable in IObroker übernehmen

Geplant Angeheftet Gesperrt Verschoben Hardware
45 Beiträge 5 Kommentatoren 3.8k Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • 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
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
      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
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #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 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von
              #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 Antwort Letzte Antwort
              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
                schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                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
                  schrieb am zuletzt editiert von
                  #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 Antwort Letzte Antwort
                  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
                    schrieb am zuletzt editiert von
                    #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 Antwort Letzte Antwort
                    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
                      schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
                      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
                        schrieb am zuletzt editiert von
                        #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 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

                        436

                        Online

                        32.5k

                        Benutzer

                        81.6k

                        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