Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Hardware
    4. Geekworm X1202 USV Variable in IObroker übernehmen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Geekworm X1202 USV Variable in IObroker übernehmen

    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      Lieggie @Homoran last edited by

      @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 Braun OliverIO 2 Replies Last reply Reply Quote 0
      • Thomas Braun
        Thomas Braun Most Active @Lieggie last edited by

        @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 1 Reply Last reply Reply Quote 0
        • L
          Lieggie @Thomas Braun last edited by

          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 Braun paul53 2 Replies Last reply Reply Quote 0
          • Thomas Braun
            Thomas Braun Most Active @Lieggie last edited by

            @lieggie

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

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

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

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

                  1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @Lieggie last edited by

                    @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 1 Reply Last reply Reply Quote 0
                    • L
                      Lieggie @OliverIO last edited by

                      @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

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

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

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

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

                              @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 Reply Quote 0
                              • OliverIO
                                OliverIO @Lieggie last edited by

                                @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

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

                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                806
                                Online

                                31.9k
                                Users

                                80.2k
                                Topics

                                1.3m
                                Posts

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