Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. APC USV Status auslesen via APCUPSD-CGI

    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

    APC USV Status auslesen via APCUPSD-CGI

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

      Hallo,

      ich habe ein Skript geschrieben, welches auf einen vorhandenen apdupsd-Server zugreift und die Informationen in entsprechende Datenpunkte schreibt.

      Wie das Ganze dann im Object-Tree aussieht -> siehe Bild im Anhang!

      • IP und ggfalls URL

      • Das wohl wichtigste Objekt "Status" bedeuted: 1..alles ok, 0..power fail. Wem das nicht gefällt, der findet im Code einen kleinen Kommentar zur Aktivierung der textuellen Übersetzung. Mit 0 und 1 ist halt der Vorteil, dass man es plotten kann.

       `// Liest den Status einer APC USV aus durch Abfragen des apcupsd CGI-Skripts 
      // Weiterführende Infos zu apcupds: http://www.apcupsd.com
      // Author : frost - 19.06.2016
      
      // hier IP Adresse und ggfalls URL des apcupds Server anpassen
      var upsIP = "10.0.0.35";
      var upsURL =  "http://" + upsIP + "/cgi-bin/apcupsd/upsfstats.cgi";
      
      //-----------------------------------------------------------------
      
      var request = require('request');
      
      var ups_apcupsd_ver = "0.0.0";
      var ups_Model = "apc";
      var ups_Status = "unknown";
      var ups_LineVoltage = 0;
      var ups_LoadPercent = 0;
      var ups_BatteryCharge = 0;
      var ups_TimeLeft = 0;
      var ups_Temperature = 0;
      var ups_BatteryVoltage = 0;
      var ups_LastSupplyFault = "never";
      var ups_TimeOnBattery = 0;
      var ups_SerialNo = "12345";
      
      // Datenpunkte erstellen mit Default-Werten
      createState('USV.APC.IP',upsIP);
      createState('USV.APC.apcupsd_ver',ups_apcupsd_ver);
      createState('USV.APC.Model',ups_Model);
      createState('USV.APC.Status',ups_Status);
      createState('USV.APC.LineVoltage',ups_LineVoltage);
      createState('USV.APC.CurrentLoad',ups_LoadPercent);
      createState('USV.APC.BatteryCharge',ups_BatteryCharge);
      createState('USV.APC.TimeLeft',ups_TimeLeft);
      createState('USV.APC.Temperature',ups_Temperature);
      createState('USV.APC.BatteryVoltage',ups_BatteryVoltage);
      createState('USV.APC.LastSupplyFault',ups_LastSupplyFault);
      createState('USV.APC.TimeOnBattery',ups_TimeOnBattery);
      createState('USV.APC.Serialnumber',ups_SerialNo);
      
      schedule("*/1 * * * *", function ()  // alle x Minuten
      {
      
      	request(upsURL, function (error, response, body) 
      	{
      		if (!error && response.statusCode == 200) 
      		{
      
      		    // entferne nicht benötigte HTML Tags
      		    var ups_data = body.substring (body.indexOf (""));
      
      			// Extrahiere Daten aus Antwort
      			var data_lines = ups_data.split(/\r?\n/);
      			var i = 0;
      			while (i < data_lines.length)
      			{
      				var curr_line = data_lines[i].split(":", 1);
      				curr_line[1] = data_lines[i].substring (data_lines[i].indexOf(":") + 2).trim();
      
      				if (curr_line.length > 1)   // Sicherheitsabfrage
      				{
          				if (curr_line[0].indexOf ("VERSION") >= 0)
          				{
          					ups_apcupsd_ver = curr_line[1].split(" ")[0];
          				}
          				else if (curr_line[0].indexOf ("MODEL") >= 0)
          				{
          					ups_Model = curr_line[1];
          				}
          				else if (curr_line[0].indexOf ("STATUS") >= 0)
          				{
          					if (curr_line[1].search("ONLINE") >= 0)
          					{
          					    ups_Status = 1;
          					}
          					else
          					{
          					    ups_Status = 0; // something is wrong with the power line
          					}
      
          					// Aktivieren, falls "ONLINE" und "ONBATT" angezeigt werden soll
          					// ups_Model = curr_line[1];
          				}
          				else if (curr_line[0].indexOf ("LINEV") >= 0)
          				{
          					ups_LineVoltage = curr_line[1].split(" ")[0] + " V";
          				}
          				else if (curr_line[0].indexOf ("LOADPCT") >= 0)
          				{
          					ups_LoadPercent = curr_line[1].split(" ")[0] + " %";
          				}
          				else if (curr_line[0].indexOf ("BCHARGE") >= 0)
          				{
          					ups_BatteryCharge = curr_line[1].split(" ")[0] + " %";
          				}
          				else if (curr_line[0].indexOf ("TIMELEFT") >= 0)
          				{
          					ups_TimeLeft = curr_line[1].split(" ")[0] + " min";
          				}
          				else if (curr_line[0].indexOf ("ITEMP") >= 0)
          				{
          					ups_Temperature = curr_line[1].split(" ")[0] + " °C";
          				}
          				else if (curr_line[0].indexOf ("BATTV") >= 0)
          				{
          					ups_BatteryVoltage = curr_line[1].split(" ")[0] + " V";
          				}
          				else if (curr_line[0].indexOf ("XONBATT") >= 0)
          				{
          					ups_LastSupplyFault = curr_line[1];
          				}
          				else if (curr_line[0].indexOf ("TONBATT") >= 0)
          				{
          					ups_TimeOnBattery = curr_line[1].split(" ")[0] + " s";
          				}
          				else if (curr_line[0].indexOf ("SERIALNO") >= 0)
          				{
          					ups_SerialNo = curr_line[1];
          				}
      				}
      
      				i++;
      			}
      
      			// Schreibe Daten in Datenpunkte
      			setState('USV.APC.IP',upsIP);
      			setState('USV.APC.apcupsd_ver',ups_apcupsd_ver);
      			setState('USV.APC.Model',ups_Model);
      			setState('USV.APC.Status',ups_Status);
      			setState('USV.APC.LineVoltage',ups_LineVoltage);
      			setState('USV.APC.CurrentLoad',ups_LoadPercent);
      			setState('USV.APC.BatteryCharge',ups_BatteryCharge);
      			setState('USV.APC.TimeLeft',ups_TimeLeft);
      			setState('USV.APC.Temperature',ups_Temperature);
      			setState('USV.APC.BatteryVoltage',ups_BatteryVoltage);
      			setState('USV.APC.LastSupplyFault',ups_LastSupplyFault);
      			setState('USV.APC.TimeOnBattery',ups_TimeOnBattery);
      			setState('USV.APC.Serialnumber',ups_SerialNo);
      
      		} 
      		else 
      		{
      			log(error);
      			log('APCUPSD not found', 'warn');
      		}
      
      	}); // end of request
      
      }); // end of schedule` 
        [1310_apcups-iobroker.png](/assets/uploads/files/1310_apcups-iobroker.png)  [/i][/i][/i]
      
      1 Reply Last reply Reply Quote 0
      • A
        aquapro last edited by

        Danke, läuft bei mir ohne Probleme.

        Gruß

        Tino

        1 Reply Last reply Reply Quote 0
        • R
          rascal last edited by

          hier auch keine Probleme, cooles Script, danke

          1 Reply Last reply Reply Quote 0
          • eric2905
            eric2905 last edited by

            Ich baue gerade an einem Script, welches ohne den Web-Teil auskommt und direkt die Konsolenabfrage nutzt.

            Damit entfällt die Notwendigkeit des Apache (den ich persönlich auf meiner ioBroker-Maschine sonst nicht benötige).

            Gruß,

            Eric

            T 1 Reply Last reply Reply Quote 0
            • apollon77
              apollon77 last edited by

              Hi,

              ich baue gerade an einem Adapter der das ganze per NUT macht 🙂 Warte noch 1-2 Tage dann wäre was zum testen da …

              1 Reply Last reply Reply Quote 0
              • apollon77
                apollon77 last edited by

                Und hier wäre die Testversion: http://forum.iobroker.net/viewtopic.php … 890#p29890

                Bin gespannt auf Euer Feedback

                1 Reply Last reply Reply Quote 0
                • Segway
                  Segway last edited by

                  @frost:

                  ich habe ein Skript geschrieben, welches auf einen vorhandenen apdupsd-Server zugreift und die Informationen in entsprechende Datenpunkte schreibt. `

                  Was man nicht so alles findet beim suchen !!!

                  Habe dein Script übernommen und nach dem durchreichen des USB-Ports an meine VM werden die Werte nun schön auch in IoBroker abgelegt 🙂

                  Genial. Auch wenn es schon lange her war –> VIELEN DANK !

                  1 Reply Last reply Reply Quote 0
                  • R
                    Radi last edited by

                    Hallo Segway,

                    ich versuche nun auch schon eine ganze Weile mein Smart-UPS 1000 via USB in meine unter Proxmox laufende VM mit dem IOBroker einzubinden. Geht das so ohne weiteres? Eine weitere VM mit einem Nut-Server habe ich leider nicht so recht zum Laufen bekommen. Ich würde mich freuen, wenn du mir ein paar Ratschläge geben könntest, wie ich die Konstellation zum Funktionieren bekomme.

                    Danke

                    Ralf

                    1 Reply Last reply Reply Quote 0
                    • Segway
                      Segway last edited by

                      Ja das geht ohne weiteres! Habe die Infos ganz einfach über das Script bekommen und abgelegt. Das Script ist auch eher nicht das Problem sondern die Verbindung hinzubekommen in deiner VM:

                      1043_bildschirmfoto_2019-01-19_um_10.52.03.png

                      1 Reply Last reply Reply Quote 0
                      • R
                        Radi last edited by

                        Hallo Segway,

                        in deinem Screenshot ist aber zu erkennen, das die USV eine IP-Adresse bekommen hat. Das sieht für mich dann aber so aus als ob sie nicht über das USB-Kabel, sondern über einen separaten Nut-Server angesprochen wird. Das Duchreichen an die VM habe ich, da bin ich mir realtiv sicher, hinbekommen. Hast du in den ersten Zeilen des Scripts, wo die Config eingetragen wird, etwas geändert?

                        Danke schon mal im Voraus.

                        Ralf

                        1 Reply Last reply Reply Quote 0
                        • Segway
                          Segway last edited by

                          Hi Ralf,

                          das ist nicht die USV sondern die IP-Adresse von dem Host auf dem der apc-Dienst läuft –> die USV ist dann per USB angeschlossen.

                          Also bei mir ist die 40.8 der Debian-VM und der USB-Anschluss steckt im NUC und ist an die entsprechende 40.8 VM durchgereicht.

                          @Radi:

                          Hast du in den ersten Zeilen des Scripts, wo die Config eingetragen wird, etwas geändert? `

                          Welche Config meinst du ?

                          1 Reply Last reply Reply Quote 0
                          • R
                            Radi last edited by

                            Hallo Dirk,

                            var upsIP = "10.0.0.35";
                            var upsURL =  "http://" + upsIP + "/cgi-bin/apcupsd/upsfstats.cgi";
                            

                            Diese beiden Zeilen meine ich.

                            Ich bin davon ausgegangen, das man die USV ohne einen separaten Dienst, also nur über den USB-Anschluss aulesen könnte. Das scheint dann wohl nicht der Fall zu sein. Wärest du bereit, mir mit einigen Stichpunkten zu erklären wie ich vorgehen müsste um zum Ziel zu kommen?

                            Danke schon mal im Voraus.

                            Ralf

                            1 Reply Last reply Reply Quote 0
                            • Segway
                              Segway last edited by

                              Ist nicht wirklich schwer - ich meine das ist den Dienst installieren.

                              schau mal ins Wiki, danach habe ich das gemacht und es lief –> https://wiki.debian.org/apcupsd

                              1 Reply Last reply Reply Quote 0
                              • R
                                Radi last edited by

                                Hallo Dirk,

                                danke für den Link. Ich beiße mich mal durch, auch wenn ich mir die Frage stelle, welches RJ45-Kabel ich, ohne eine Netzwerkkarte in der USV zu haben, anschließen soll. Die USV hat in der Normalkonfiguration keinen Netzwerkanschluss. Ja, man kann den nachkaufen, aber das muss doch auch so gehen. Wie gesagt, ich probier es mal aus, nicht das Sie in dem WIKI meinen entweder USB oder RJ45.

                                Schönes Sonntag noch.

                                Ich melde mich, ob ich es geschafft habe.

                                Ralf

                                1 Reply Last reply Reply Quote 0
                                • Segway
                                  Segway last edited by

                                  Gibt auch noch andere Anleitungen, die sich dann nur auf USB konzentrieren. Dieses Wiki ist für beide.

                                  Ich habe nur installiert und die Datei angepasst, das wars. Wenn du einen Webserver dann noch laufen hast kannst du es mit dem http Aufruf einmal testen. Das ging bei mir und dann hab ich das Script in IoB gestartet 🙂 fertig 🙂 bei Fragen melde dich evtl. auch gerne Teamviewer /wenn du magst)

                                  1 Reply Last reply Reply Quote 0
                                  • R
                                    Radi last edited by

                                    Danke für das Angebot Dirk,

                                    aber ein bischen sportlicher Ehrgeiz steht da auch dahinter. Ich kämpf mich erst noch mal durch, falls ich dann nicht mehr weiter weis, würde ich das Angebot mit der Fernbedienung durch den Teamviewer annehmen. Aber noch bin ich nicht soweit.

                                    Einen schönen Sonntag wünscht

                                    Ralf

                                    1 Reply Last reply Reply Quote 0
                                    • T
                                      TimTaler007 @eric2905 last edited by

                                      @eric2905 sagte in APC USV Status auslesen via APCUPSD-CGI:

                                      Ich baue gerade an einem Script, welches ohne den Web-Teil auskommt und direkt die Konsolenabfrage nutzt.

                                      Damit entfällt die Notwendigkeit des Apache (den ich persönlich auf meiner ioBroker-Maschine sonst nicht benötige).

                                      Gruß,

                                      Eric

                                      Habe es erst jetzt geschafft mal die USV mit dem iobroker Raspi zu verbinden und jetzt wäre das Skript für die Konsolenabfrage Gold wert. Möchte auch darauf verzichten noch einen Apache zu installieren und hoffe, dass Du dein Skript schon verwendest. Oder hast du es am Ende ganz anders umgesetzt?

                                      Homoran 1 Reply Last reply Reply Quote 0
                                      • Homoran
                                        Homoran Global Moderator Administrators @TimTaler007 last edited by

                                        @timtaler007 sagte in APC USV Status auslesen via APCUPSD-CGI:

                                        Habe es erst jetzt geschafft mal die USV mit dem iobroker Raspi zu verbinden und jetzt wäre das Skript für die Konsolenabfrage Gold wert

                                        geht das nicht mit dem NUT-Adapter?

                                        1 Reply Last reply Reply Quote 0
                                        • T
                                          TimTaler007 last edited by TimTaler007

                                          @homoran
                                          Danke für den Hinweis. Habe die Beschreibung wohl etwas falsch verstanden und dachte beim Einsatz vom NUT müsste ich wieder einen extra Server oder Komponeten installieren. Aber das ging mit der Anleitung von https://forum.iobroker.net/topic/23688/howto-usv-nut-server-auf-sbc-installieren ganz gut.
                                          Aber dabei habe ich mir mein iobroker zerschossen 😖
                                          Der iobroker raspi hing an der USV und ich wollte das mit dem Nut erstmal auf einem anderen Raspi ausprobieren.
                                          ich habe dann gemäss Anleitung nut usbutils gestartet, konfiguriert und neugestartet. Jetzt ist es so, dass nach dem Neustart die USV einmal aus geht?! Dadurch wurde der Iobroker Raspi im ungünstigen Moment ausgeschaltet und war danach Grütze.
                                          Da half nur ein Recover.

                                          Aber kann das sein, dass ein Reboot des Rechners mit der USV diese auch einmal resetet? Ich konnte das 2mal reproduzieren und habe es danach erstmal gelassen. Gruselig 😨

                                          Bei meinem ersten Versuch hatte ich apcaccess drauf und damit war das nicht so.

                                          Homoran 1 Reply Last reply Reply Quote 0
                                          • Homoran
                                            Homoran Global Moderator Administrators @TimTaler007 last edited by Homoran

                                            @timtaler007 sagte in APC USV Status auslesen via APCUPSD-CGI:

                                            Aber kann das sein, dass ein Reboot des Rechners mit der USV diese auch einmal resetet?

                                            Es gibt nix, das es nicht gibt 😂
                                            Ehrlich weiß ich es nicht, ob da beim Boot oder Shutdown irgend etwas über USB an die USV ausgegeben wird.
                                            ich weiß, dass meine USV immer hektisch piept wenn mein Server einen reboot fährt, da bleibt dann aber zumindest die BatteriePower an.
                                            Kann es sein, dass dein Akku tot ist und einen kurzen PowerOff nicht überlebt?
                                            Das merkt man meistens erst wenn es drauf ankommt 😡

                                            Andererseits glaube ich mich zu erinnern, dass man eine USV so programmieren kann, dass sie sich nach herunterfahren des angeschlossenen Rechners abschaltet um die Batterie zu schonen

                                            T 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            642
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            9
                                            24
                                            6028
                                            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