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

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Geekworm X1202 USV Variable in IObroker übernehmen

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

      @lieggie sagte:

      sudo npm install onoff
      sudo npm install i2c-bus

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

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

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

        @lieggie sagte:

        sudo npm install onoff
        sudo npm install i2c-bus

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

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

        Homoran paul53 Thomas Braun 3 Replies Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators @Lieggie last edited by

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

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

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

          Was ist der om Adapter?

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

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

            Ja, denn die Fehlermeldung

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

            zeigt das Vorhandensein im richtigen Verzeichnis.

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

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

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

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

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

              Was ist der om Adapter?

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

              Homoran 1 Reply Last reply Reply Quote 0
              • Thomas Braun
                Thomas Braun Most Active @Lieggie last edited by Thomas Braun

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

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

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

                cd /opt/iobroker
                npm ls onoff
                npm ls i2c-bus
                
                1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @Lieggie last edited by

                  @lieggie und wo müssen sie sein?

                  selbst wenn durch den Eintrag im js Adapter

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

                  das Vorhandensein im richtigen Verzeichnis

                  vorliegt, kann durch

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

                  sudo npm install onoff
                  sudo npm install i2c-bus

                  es zusätzlich noch einmal woanders installiert sein

                  L 1 Reply Last reply Reply Quote 0
                  • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            676
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            5
                                            45
                                            1954
                                            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