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.
    • OliverIO
      OliverIO @Lieggie last edited by

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

      Aber ganz ehrlich das mit dem i2c ist mir zu viel da muss ich mich noch einarbeiten.

      dein python script nutzt das genau so.
      du sollst das skript einfach nur mal laufen lassen. i2c musst du dich nicht einarbeiten

      also datenpunkte einrichten, entweder nach meinen vorschlägen oder
      eigene benennen, anlegen und im skript eintragen.

      dann die bibliotheken in den js adapter einstellungen eintragen, fertig.

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

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

          @lieggie

          nix blockly.

          du legst im javascript adapter ein neues skript an und wählst anstatt blockly
          den javascript knopf (auch nicht typescript und auch nicht rules)

          du gibts deinem skript einen namen.
          dann hast du ein textfenster.
          dort kopierst du das skript rein
          dann die namen der datenpunkte in den ersten paar zeilen des skripts anpassen
          und drückst oben auf den play button
          im unterne bereich des skripts ist ein log bereich.
          da mal reinschauen was da so kommt.
          wenn keine fehler erscheinen kannst du die datenpunkte überprüfen ob da die daten reingeschrieben wurden.

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

            @oliverio
            Guten Morgen , sorry das ich mich erst jetzt Melde .Ich war gestern verhindert.
            ich habe wie du gesagt hast nun das Script rin kopiert. bekomme aber nun diesen fehler

            javascript.0	10:12:51.180	info	Stopping script script.js.USV
            javascript.0	10:12:53.042	info	Start JavaScript script.js.USV (Javascript/js)
            javascript.0	10:12:53.058	error	script.js.USV: Error: EINVAL: invalid argument, write
            javascript.0	10:12:53.059	error	at script.js.USV:26:18
            javascript.0	10:12:53.060	error	at script.js.USV:169:3
            

            ich glaub hier ist noch was faul
            pi3.JPG

            paul53 L 2 Replies Last reply Reply Quote 0
            • Homoran
              Homoran Global Moderator Administrators @Lieggie last edited by Homoran

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

              Und ja du hast recht und der Überschrift ist ein R zuviel.

              jetzt nicht mehr!
              Ich hab's für dich rausgenommen

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

                @lieggie sagte: hier ist noch was faul

                Die roten Wellenlinien des Javascript-Editors kann man ignorieren, wenn die beiden NPM-Module in der Konfiguration der Javascript-Instanz eingetragen sind und es bei der Installation der Module keine Fehlermeldungen gab.

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

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

                  @oliverio
                  Guten Morgen , sorry das ich mich erst jetzt Melde .Ich war gestern verhindert.
                  ich habe wie du gesagt hast nun das Script rin kopiert. bekomme aber nun diesen fehler

                  javascript.0	10:12:51.180	info	Stopping script script.js.USV
                  javascript.0	10:12:53.042	info	Start JavaScript script.js.USV (Javascript/js)
                  javascript.0	10:12:53.058	error	script.js.USV: Error: EINVAL: invalid argument, write
                  javascript.0	10:12:53.059	error	at script.js.USV:26:18
                  javascript.0	10:12:53.060	error	at script.js.USV:169:3
                  

                  ich glaub hier ist noch was faul
                  pi3.JPG

                  avascript.0
                  	2024-09-15 10:34:58.719	error	at Script.runInContext (node:vm:148:12)
                  javascript.0
                  	2024-09-15 10:34:58.719	error	at script.js.USV:169:3
                  javascript.0
                  	2024-09-15 10:34:58.719	error	at script.js.USV:26:18
                  javascript.0
                  	2024-09-15 10:34:58.719	error	at new Gpio (/opt/iobroker/node_modules/@iobroker-javascript.0/onoff/onoff.js:172:36)
                  javascript.0
                  	2024-09-15 10:34:58.718	error	at exportGpio (/opt/iobroker/node_modules/@iobroker-javascript.0/onoff/onoff.js:18:8)
                  javascript.0
                  	2024-09-15 10:34:58.718	error	at Object.writeFileSync (node:fs:2368:20)
                  javascript.0
                  	2024-09-15 10:34:58.718	error	script.js.USV: Error: EINVAL: invalid argument, write
                  
                  1 Reply Last reply Reply Quote 0
                  • L
                    Lieggie @paul53 last edited by

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

                    @lieggie sagte: hier ist noch was faul

                    Die roten Wellenlinien des Javascript-Editors kann man ignorieren, wenn die beiden NPM-Module in der Konfiguration der Javascript-Instanz eingetragen sind und es bei der Installation der Module keine Fehlermeldungen gab.

                    ich habe die beiden instanzen instaliert da bei gab es keinen Fehler
                    sudo npm install onoff
                    sudo npm install i2c-bus

                    was mir nur aufgefallen ist das onoff nur bis Node 16 unterstützt wird. ich habe aber 20 am laufen

                    Thomas Braun paul53 2 Replies Last reply Reply Quote 0
                    • Thomas Braun
                      Thomas Braun Most Active @Lieggie last edited by

                      @lieggie

                      Knall dir BITTE KEINE npm-Module per root in das System!!!!

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            461
                                            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