Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Cyberpower Webseite der USV auslesen

    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

    Cyberpower Webseite der USV auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      IOBaer last edited by

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

      SBorg 1 Reply Last reply Reply Quote 0
      • SBorg
        SBorg Forum Testing Most Active @IOBaer last edited by

        @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 1 Reply Last reply Reply Quote 1
        • I
          IOBaer @SBorg last edited by

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

          SBorg 1 Reply Last reply Reply Quote 0
          • SBorg
            SBorg Forum Testing Most Active @IOBaer last edited by

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

            1 Reply Last reply Reply Quote 1
            • I
              IOBaer last edited by

              @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

              Homoran paul53 SBorg 3 Replies Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators @IOBaer last edited by

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

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

                  paul53 1 Reply Last reply Reply Quote 0
                  • SBorg
                    SBorg Forum Testing Most Active @IOBaer last edited by SBorg

                    @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

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

                      @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);
                                      }
                                  });
                              }
                          });
                      });
                      
                      1 Reply Last reply Reply Quote 0
                      • I
                        IOBaer last edited by IOBaer

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        748
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

                        5
                        13
                        556
                        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