NEWS
Geekworm X1202 USV Variable in IObroker übernehmen
-
@oliverio sagte: "0_userdata.usv.voltagestate"; //number
... sollte vom Typ "string" sein.
Das Schreiben der eigenen Datenpunkte sollte mit Bestätigung erfolgen. -
Hallo Ihr 2.....ich komme grad vom Einkaufen und sehe wie ihr 2 euch gedanken macht erstenmal vielen dank dafür.
Ich habe in die Richtung noch nie was gemacht und war in den ersten IOB instalationsrutinen immer froh mit copy & Paste klar zukommen.
Ich habe das Script nun in /opt/Iobroker verschoben, jetzt fragt er nicht mehr nach einem Passwort.Es ist für mich nun der erste Versuch Daten aus anderen Scripten zu holen.
Aber ganz ehrlich das mit dem i2c ist mir zu viel da muss ich mich noch einarbeiten.
@OliverIO wenn du magst kann ich dir den pi5 zur verfügung stellen ...aber dann lern ich nicht dabei.Er ist noch nicht im Betrieb
Und ja du hast recht und der Überschrift ist ein R zuviel.
Vielen dank für eure Hilfe -
@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 einarbeitenalso 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.
-
@oliverio
ich stehe auf dem schlauch ... gemacht habe ich nunVariable erstellt
Minutliche ausführung
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)
-
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. -
@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 fehlerjavascript.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
-
@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 -
@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.
-
@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 fehlerjavascript.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
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
-
@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-buswas mir nur aufgefallen ist das onoff nur bis Node 16 unterstützt wird. ich habe aber 20 am laufen
-
Knall dir BITTE KEINE npm-Module per root in das System!!!!
-
@lieggie sagte:
sudo npm install onoff
sudo npm install i2c-busSo 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.
-
@paul53 said in Geekworm X1202 USV Variable in IObroker übernehmen:
@lieggie sagte:
sudo npm install onoff
sudo npm install i2c-busSo 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
-
@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?
-
@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.
-
@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
-
@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
-
@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-buses zusätzlich noch einmal woanders installiert sein
-
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.
-
Und gewöhn dir den exzessiven Einsatz von sudo ab. Da ist im Kontext vom ioBroker eigentlich nie erforderlich und zu 99% einfach falsch.