Skip to content
  • 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
  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.1k

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

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

Geekworm X1202 USV Variable in IObroker übernehmen

Geplant Angeheftet Gesperrt Verschoben Hardware
45 Beiträge 5 Kommentatoren 3.7k 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

    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

                      641

                      Online

                      32.4k

                      Benutzer

                      81.4k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe