Skip to content
  • Home
  • 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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Cyberpower Webseite der USV auslesen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.2k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    944

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Cyberpower Webseite der USV auslesen

Geplant Angeheftet Gesperrt Verschoben JavaScript
13 Beiträge 5 Kommentatoren 995 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.
  • I Offline
    I Offline
    IOBaer
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen,

    leider stellt Cyberpower Business Lokal nicht alle Daten per SNMP bereit, die ich über die Cyberpower Business-Weboberfläche für meien Cyberpower-USV auslesen kann. Betroffen sind z.B. die Spannung in V.

    Unter https://community.home-assistant.io/t/monitor-cyberpower-ups-plugged-into-windows-machine-via-usb/170497/3 habe ich eine Lösung gefunden, wie jemand das über Phyton realisiert hat:

    import requests
    import paho.mqtt.client as paho
    import json
    url = "http://192.168.x.x:3052/local/rest/v1/login/verify"
    url2 = "http://192.168.x.x:3052/local/rest/v1/ups/status"
    
    payload = {"userName": "adminuser", "password": "adminpassword"}
    headers = {'Content-Type': "application/json"}
    response = requests.request("POST", url, json=payload, headers=headers)
    # the json parameter should handle encoding for you
    cookies = response.cookies
    
    response = requests.request("GET", url2, cookies=cookies)
    r_dictionary= response.json()
    
    iv = r_dictionary['input']['voltages'][0]
    ov = r_dictionary['output']['voltages'][0]
    ol = r_dictionary['output']['loads'][0]
    br = r_dictionary['battery']['remainingRunTimeInSecs']/60
    brf = r_dictionary['battery']['remainingRunTimeFormated']
    sys = r_dictionary['system']['stateText']
    batt = r_dictionary['battery']['stateText']
    cap = r_dictionary['battery']['capacity']
    comm = r_dictionary['communicationAvaiable']
    broker="192.168.x.x"
    port=1883
    client1= paho.Client("control1")                           #create client object
    client1.connect(broker,port)                                 #establish connection
    ret= client1.publish("ups1/iv",iv)
    ret= client1.publish("ups1/ov",ov)
    ret= client1.publish("ups1/ol",ol)
    ret= client1.publish("ups1/br",br)
    ret= client1.publish("ups1/sys",sys)
    ret= client1.publish("ups1/comm",comm)
    ret= client1.publish("ups1/brf",brf)
    ret= client1.publish("ups1/cap",cap)
    ret= client1.publish("ups1/batt",batt)
    

    Ließe sich das für den ioBroker umschreiben?

    Ich stelle mir ein JS-Skript oder Blockly mit JS-Skript vor, das z.B. alle 30 Sekunden die Daten der Webseite abfragt und in Datenpunkte schreibt.

    SBorgS arteckA 2 Antworten Letzte Antwort
    0
    • I IOBaer

      Hallo zusammen,

      leider stellt Cyberpower Business Lokal nicht alle Daten per SNMP bereit, die ich über die Cyberpower Business-Weboberfläche für meien Cyberpower-USV auslesen kann. Betroffen sind z.B. die Spannung in V.

      Unter https://community.home-assistant.io/t/monitor-cyberpower-ups-plugged-into-windows-machine-via-usb/170497/3 habe ich eine Lösung gefunden, wie jemand das über Phyton realisiert hat:

      import requests
      import paho.mqtt.client as paho
      import json
      url = "http://192.168.x.x:3052/local/rest/v1/login/verify"
      url2 = "http://192.168.x.x:3052/local/rest/v1/ups/status"
      
      payload = {"userName": "adminuser", "password": "adminpassword"}
      headers = {'Content-Type': "application/json"}
      response = requests.request("POST", url, json=payload, headers=headers)
      # the json parameter should handle encoding for you
      cookies = response.cookies
      
      response = requests.request("GET", url2, cookies=cookies)
      r_dictionary= response.json()
      
      iv = r_dictionary['input']['voltages'][0]
      ov = r_dictionary['output']['voltages'][0]
      ol = r_dictionary['output']['loads'][0]
      br = r_dictionary['battery']['remainingRunTimeInSecs']/60
      brf = r_dictionary['battery']['remainingRunTimeFormated']
      sys = r_dictionary['system']['stateText']
      batt = r_dictionary['battery']['stateText']
      cap = r_dictionary['battery']['capacity']
      comm = r_dictionary['communicationAvaiable']
      broker="192.168.x.x"
      port=1883
      client1= paho.Client("control1")                           #create client object
      client1.connect(broker,port)                                 #establish connection
      ret= client1.publish("ups1/iv",iv)
      ret= client1.publish("ups1/ov",ov)
      ret= client1.publish("ups1/ol",ol)
      ret= client1.publish("ups1/br",br)
      ret= client1.publish("ups1/sys",sys)
      ret= client1.publish("ups1/comm",comm)
      ret= client1.publish("ups1/brf",brf)
      ret= client1.publish("ups1/cap",cap)
      ret= client1.publish("ups1/batt",batt)
      

      Ließe sich das für den ioBroker umschreiben?

      Ich stelle mir ein JS-Skript oder Blockly mit JS-Skript vor, das z.B. alle 30 Sekunden die Daten der Webseite abfragt und in Datenpunkte schreibt.

      SBorgS Offline
      SBorgS Offline
      SBorg
      Forum Testing Most Active
      schrieb am zuletzt editiert von
      #2

      @iobaer Python ist auch nicht schlechter als Javascript. Gibt es einen Grund gegen Python? Das Skript scheint ja zu funktionieren und die Daten landen so per MQTT auch im ioB.
      Den Aufruf würde ich dann per simplen cron-Trigger realisieren: */30 * * * * * /_pfad_/_skriptname_ >/dev/null 2>&1

      LG SBorg ( SBorg auf GitHub)
      Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

      1 Antwort Letzte Antwort
      0
      • I IOBaer

        Hallo zusammen,

        leider stellt Cyberpower Business Lokal nicht alle Daten per SNMP bereit, die ich über die Cyberpower Business-Weboberfläche für meien Cyberpower-USV auslesen kann. Betroffen sind z.B. die Spannung in V.

        Unter https://community.home-assistant.io/t/monitor-cyberpower-ups-plugged-into-windows-machine-via-usb/170497/3 habe ich eine Lösung gefunden, wie jemand das über Phyton realisiert hat:

        import requests
        import paho.mqtt.client as paho
        import json
        url = "http://192.168.x.x:3052/local/rest/v1/login/verify"
        url2 = "http://192.168.x.x:3052/local/rest/v1/ups/status"
        
        payload = {"userName": "adminuser", "password": "adminpassword"}
        headers = {'Content-Type': "application/json"}
        response = requests.request("POST", url, json=payload, headers=headers)
        # the json parameter should handle encoding for you
        cookies = response.cookies
        
        response = requests.request("GET", url2, cookies=cookies)
        r_dictionary= response.json()
        
        iv = r_dictionary['input']['voltages'][0]
        ov = r_dictionary['output']['voltages'][0]
        ol = r_dictionary['output']['loads'][0]
        br = r_dictionary['battery']['remainingRunTimeInSecs']/60
        brf = r_dictionary['battery']['remainingRunTimeFormated']
        sys = r_dictionary['system']['stateText']
        batt = r_dictionary['battery']['stateText']
        cap = r_dictionary['battery']['capacity']
        comm = r_dictionary['communicationAvaiable']
        broker="192.168.x.x"
        port=1883
        client1= paho.Client("control1")                           #create client object
        client1.connect(broker,port)                                 #establish connection
        ret= client1.publish("ups1/iv",iv)
        ret= client1.publish("ups1/ov",ov)
        ret= client1.publish("ups1/ol",ol)
        ret= client1.publish("ups1/br",br)
        ret= client1.publish("ups1/sys",sys)
        ret= client1.publish("ups1/comm",comm)
        ret= client1.publish("ups1/brf",brf)
        ret= client1.publish("ups1/cap",cap)
        ret= client1.publish("ups1/batt",batt)
        

        Ließe sich das für den ioBroker umschreiben?

        Ich stelle mir ein JS-Skript oder Blockly mit JS-Skript vor, das z.B. alle 30 Sekunden die Daten der Webseite abfragt und in Datenpunkte schreibt.

        arteckA Offline
        arteckA Offline
        arteck
        Developer Most Active
        schrieb am zuletzt editiert von arteck
        #3

        @iobaer ja man kann es umschreiben.. ist ja nur ein aufruf einer url mit dazugehörigen cookie..axios ist dein freund in diesem fall

        zigbee hab ich, zwave auch, nuc's genauso und HA auch

        1 Antwort Letzte Antwort
        0
        • I Offline
          I Offline
          IOBaer
          schrieb am zuletzt editiert von
          #4

          @sborg Ich nutze ja kein HASS und auch kein Phyton, von daher würde ich eigentlich ungern ein zweites System aufsetzen und betreiben, nur um an diese Werte zu gelangen.

          @arteck Danke Dir, ich habe mich etwas eingelesen, finde aber nur sehr wenige Informationen dazu und fast keine Beispiele, vor allem keine für die Verwendung als einfaches Javascript. Es wäre lieb, wenn Du mir etwas unter die Arme greifen könntest. Alternativ müsste ich versuchen, die Webseite z.B. über AutoIT anzuzapfen und von dort aus, z.B. über die Web-API, in ioBroker zu "schieben". Frag mich eh, warum man SNMP anbietet, dann aber viele Werte überhaupt nicht auslesbar macht (ggf. soll man die Management-Card kaufen).

          SBorgS 1 Antwort Letzte Antwort
          0
          • I IOBaer

            @sborg Ich nutze ja kein HASS und auch kein Phyton, von daher würde ich eigentlich ungern ein zweites System aufsetzen und betreiben, nur um an diese Werte zu gelangen.

            @arteck Danke Dir, ich habe mich etwas eingelesen, finde aber nur sehr wenige Informationen dazu und fast keine Beispiele, vor allem keine für die Verwendung als einfaches Javascript. Es wäre lieb, wenn Du mir etwas unter die Arme greifen könntest. Alternativ müsste ich versuchen, die Webseite z.B. über AutoIT anzuzapfen und von dort aus, z.B. über die Web-API, in ioBroker zu "schieben". Frag mich eh, warum man SNMP anbietet, dann aber viele Werte überhaupt nicht auslesbar macht (ggf. soll man die Management-Card kaufen).

            SBorgS Offline
            SBorgS Offline
            SBorg
            Forum Testing Most Active
            schrieb am zuletzt editiert von
            #5

            @iobaer Linux oder Windows? Bei Linux wäre Python schon installiert, bei Windows muss man es ggf. nachinstallieren.
            Das Skript läuft so schon ohne Änderung, dass hat zuerst mal nix mit ioB etc. zu tun. Es ist ein einfaches Skript welches eine Web-Site parst und die Daten dann per MQTT publisht (und das kann dann der ioB mittels MQTT-Adapter).

            Außer den URLs und deinen Zugangsdaten brauchst du am Skript nichts ändern, außer du möchtest den Pfad/Bezeichnung der MQTT-Nachrichten noch ändern.
            Einzig wirst du unter Python noch den paho-MQTT-Client nachinstallieren müssen.

            In JS ist das auch kein Hexenwerk. Persönlich bin ich halt einfach faul und muss das Rad nicht zum 2. mal erfinden ;)

            LG SBorg ( SBorg auf GitHub)
            Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

            I 1 Antwort Letzte Antwort
            1
            • SBorgS SBorg

              @iobaer Linux oder Windows? Bei Linux wäre Python schon installiert, bei Windows muss man es ggf. nachinstallieren.
              Das Skript läuft so schon ohne Änderung, dass hat zuerst mal nix mit ioB etc. zu tun. Es ist ein einfaches Skript welches eine Web-Site parst und die Daten dann per MQTT publisht (und das kann dann der ioB mittels MQTT-Adapter).

              Außer den URLs und deinen Zugangsdaten brauchst du am Skript nichts ändern, außer du möchtest den Pfad/Bezeichnung der MQTT-Nachrichten noch ändern.
              Einzig wirst du unter Python noch den paho-MQTT-Client nachinstallieren müssen.

              In JS ist das auch kein Hexenwerk. Persönlich bin ich halt einfach faul und muss das Rad nicht zum 2. mal erfinden ;)

              I Offline
              I Offline
              IOBaer
              schrieb am zuletzt editiert von
              #6

              @sborg Danke Dir. Ich könnte also - ganz einfache Variante - über ein Blockly dieses Skript, das ich irgendwo abgelegt habe, aufrufen (Zugangsdaten natürlich eingeben), zumal mein ioBroker unter Debian 11 läuft?

              SBorgS 1 Antwort Letzte Antwort
              0
              • I IOBaer

                @sborg Danke Dir. Ich könnte also - ganz einfache Variante - über ein Blockly dieses Skript, das ich irgendwo abgelegt habe, aufrufen (Zugangsdaten natürlich eingeben), zumal mein ioBroker unter Debian 11 läuft?

                SBorgS Offline
                SBorgS Offline
                SBorg
                Forum Testing Most Active
                schrieb am zuletzt editiert von
                #7

                @iobaer Eigentlich die einfachste Variante:

                • du fügst an den Anfang des Skriptes #!/usr/bin/python an
                • dann machst du abc.py (nenne ich mal so) noch ausführbar
                • jetzt nur noch einen cronjob anlegen: sudo crontab -e

                Wichtig: die cron-Tabelle muss immer mit einer Leerzeile enden! Also den folgenden Eintrag nicht einfach als letzte Zeile anhängen.

                */30 * * * * * /_pfad_wo_das_skript_liegt_/abc.py >/dev/null 2>&1
                

                Wenn du im Pfad stehst sollte nun ./abc.py funktionieren. Wahrscheinlich kommt wg. des fehlenden Paho-Clients noch ein Fehler, also den Client noch nachinstallieren: pip install paho-mqtt
                Jetzt sollte es korrekt durchlaufen. Wenn du den MQTT-Adapter installiert hast, sollten nun in den Objekten des MQTT-Adapters deine Werte erscheinen ups1/iv usw.

                LG SBorg ( SBorg auf GitHub)
                Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                1 Antwort Letzte Antwort
                1
                • I Offline
                  I Offline
                  IOBaer
                  schrieb am zuletzt editiert von
                  #8

                  @sborg Ganz lieben Dank. Nach einigen Problemen klappt es nun, wobei ich das Skript jeweils über ein Blockly aufrufe.

                  Was ich aber nicht hinbekommen habe: wie kann ich Werte direkt an Blockly oder JavaScript in ioBroker zurückgeben, ohne den Umweg via MQTT? Hier kam wohl jemand damit auch nicht weiter: https://forum.iobroker.net/topic/28367/exec-rückgabewerte-aus-python-script-nutzen

                  HomoranH paul53P SBorgS 3 Antworten Letzte Antwort
                  0
                  • I IOBaer

                    @sborg Ganz lieben Dank. Nach einigen Problemen klappt es nun, wobei ich das Skript jeweils über ein Blockly aufrufe.

                    Was ich aber nicht hinbekommen habe: wie kann ich Werte direkt an Blockly oder JavaScript in ioBroker zurückgeben, ohne den Umweg via MQTT? Hier kam wohl jemand damit auch nicht weiter: https://forum.iobroker.net/topic/28367/exec-rückgabewerte-aus-python-script-nutzen

                    HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von
                    #9

                    @iobaer sagte in Cyberpower Webseite der USV auslesen:

                    wie kann ich Werte direkt an Blockly oder JavaScript in ioBroker zurückgeben, ohne den Umweg via MQTT?

                    wohl nicht mit diesem Skript.

                    dann musst du die Website eigenständig parsen.

                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    1 Antwort Letzte Antwort
                    0
                    • I IOBaer

                      @sborg Ganz lieben Dank. Nach einigen Problemen klappt es nun, wobei ich das Skript jeweils über ein Blockly aufrufe.

                      Was ich aber nicht hinbekommen habe: wie kann ich Werte direkt an Blockly oder JavaScript in ioBroker zurückgeben, ohne den Umweg via MQTT? Hier kam wohl jemand damit auch nicht weiter: https://forum.iobroker.net/topic/28367/exec-rückgabewerte-aus-python-script-nutzen

                      paul53P Offline
                      paul53P Offline
                      paul53
                      schrieb am zuletzt editiert von paul53
                      #10

                      @iobaer sagte: wie kann ich Werte direkt an Blockly oder JavaScript in ioBroker zurückgeben, ohne den Umweg via MQTT?

                      Schau Dir mal den Quellcode des NPM-Moduls cyberpower-powerpanel-status an. Das Modul holt sich ebenfalls die Daten über die REST-API.

                      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

                      paul53P 1 Antwort Letzte Antwort
                      0
                      • I IOBaer

                        @sborg Ganz lieben Dank. Nach einigen Problemen klappt es nun, wobei ich das Skript jeweils über ein Blockly aufrufe.

                        Was ich aber nicht hinbekommen habe: wie kann ich Werte direkt an Blockly oder JavaScript in ioBroker zurückgeben, ohne den Umweg via MQTT? Hier kam wohl jemand damit auch nicht weiter: https://forum.iobroker.net/topic/28367/exec-rückgabewerte-aus-python-script-nutzen

                        SBorgS Offline
                        SBorgS Offline
                        SBorg
                        Forum Testing Most Active
                        schrieb am zuletzt editiert von SBorg
                        #11

                        @iobaer Dann kannst du den ganzen Part ab "broker" weglassen und brauchst nur die beiden letzten Zeilen hinzufügen (fehlende Werte hinzufügen und ggf. Bezeichnungen ändern ;) ) :

                        #!/usr/bin/python
                        import json
                        
                        iv="236"
                        ov="233"
                        ol="99"
                        
                        daten = json.dumps({'input': iv, 'output': ov, 'outload': ol})
                        
                        print daten
                        

                        (#1-#6 nur damit ich paar Pseudo-Daten habe)

                        Blocky dann sinngemäß und zeigt wo der Weg hingeht:
                        Bild 001.png

                        LG SBorg ( SBorg auf GitHub)
                        Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                        1 Antwort Letzte Antwort
                        1
                        • paul53P paul53

                          @iobaer sagte: wie kann ich Werte direkt an Blockly oder JavaScript in ioBroker zurückgeben, ohne den Umweg via MQTT?

                          Schau Dir mal den Quellcode des NPM-Moduls cyberpower-powerpanel-status an. Das Modul holt sich ebenfalls die Daten über die REST-API.

                          paul53P Offline
                          paul53P Offline
                          paul53
                          schrieb am zuletzt editiert von paul53
                          #12

                          @paul53 sagte: Quellcode des NPM-Moduls cyberpower-powerpanel-status

                          Laut Quellcode des NPM-Moduls könnte das Skript etwa so aussehen:

                          const path = '0_userdata.0.usv.';
                          const url = 'http://192.168.x.x:3052/local/rest/v1/';
                          const cookieJar = request.jar();
                          const optionsLogin = {
                              method: "POST",
                              uri: url + 'login/verify',
                              jar: cookieJar,
                              json: {
                                  userName: "adminuser",
                                  password: "adminpassword"
                              }
                          };
                          const optionsStatus = {
                              method: "GET",
                              uri: url + 'ups/status',
                              jar: cookieJar
                          };
                          
                          schedule('*/10 * * * * *', function() {
                              request(optionsLogin, function(error, response, result) {
                                  if(error) log(error, 'warn');
                                  else {
                                      optionsStatus.auth = {bearer: result};
                                      request(optionsStatus, function(err, response, body) {
                                          if(err) log(err, 'warn');
                                          else {
                                              log(body);
                                              const obj = JSON.parse(body); // wenn body JSON enthält
                                              // Auswertung z.B.
                                              setState(path + 'input.volt', parseFloat(obj.input.voltages[0]), true);
                                          }
                                      });
                                  }
                              });
                          });
                          

                          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
                          • I Offline
                            I Offline
                            IOBaer
                            schrieb am zuletzt editiert von IOBaer
                            #13

                            Vielen lieben Dank Euch allen! Mit ein paar kleinen Anpassungen passt nun alles. Genial.

                            Ich bin froh, nun auch den Umweg über MQTT los zu sein, weil ich das auf der selben Maschine etwas überflüssig finde und es vor allem die Wartbarkeit weiter erschwert (bei Neuinstallationen). Dazu gab es Fehlermeldungen im ioBroker-Log, denen ich jetzt nicht nachgehen muss (wohl von paho).

                            Ich nutze übrigens das Skript ohne Benutzername und Passwort, das nur die Bearer-Authorization nutzt. Scheinbar läuft dieses Token nicht ab.

                            Edit: Ich habe jetzt das Pyton-Skript in Blockly so integriert, dass Blockly beim ioBroker-Start dieses auf Dateisystemebene anlegt und berechtigt, falls es noch nicht existiert. Wie oben erwähnt, denke ich da an Neuinstallationen etc.

                            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

                            329

                            Online

                            32.6k

                            Benutzer

                            82.2k

                            Themen

                            1.3m

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

                            • Du hast noch kein Konto? Registrieren

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