USV seriell überwachen

Natürlich habe ich meine Server und NAS-Systeme mit einer USV gegen Störungen aus dem Strommetz und kurzfristige Versorgungsunterbrechungen abgesichert. Und wenn ein Bastelprojekt halt nur mal einen FI oder eine Sicherung auslöst, ist eine USV für den Computer schon ihr Geld wert. Es muss ja nicht billigste "Back-UPS" sein, die im Fehlerfall erst umschaltet. Eine "Smart" oder "Line Interactive" ist zwar etwas teurer, aber verspricht schon eine bessere Versorgung. Per USB oder V.24-Schnittstelle kann ich von einem Server sogar die Werte auslesen. Richtig "Smart" wäre es natürlich, wenn die USV auch im LAN wäre. Leider ist das bei allen gefundenen Herstellern erst ab den größeren Modellen (ab 1500 VA und höher) möglich und selbst dann ist ein SNMP-Adapter erforderlich. Hier ist leider nichts zu sehen von "IoT" Build in. Und das, wo Systeme wie ein ESP8266, Arduino oder andere kleine Boards wirklich nichts mehr kosten.

Dieses Projekt ist noch nicht abgeschlossen.

Ich erwarte ja gar keine vollwertige SNMP-Schnittstelle. Eigentlich würde mir schon eine einfache REST-API reichen, um die Daten auszulesen. Aber wenn die Hersteller da nichts liefern, dann kann ich das ja vielleicht selbst bauen.

Klassifizierung und Marktbetrachtung

Für den Heim-Bereich muss man keine teure und auch weniger effektive "Online"-USV nach VFI-Standard nehmen.

Es dürfte klar sein, das bei den günstigen "Backup"-USV-Systemen, die beim Ausfalle den Wandler anwerfen und dann Umschalten kein LAN oder gar SNMP zu erwarten ist. Über Geizhals.de wurden im Mail 2017 aber drei VFD-Systeme mit LAN-Anschluss gelistet, bei denen aber nur ein Überspannungsschutz für RJ45 vorhanden ist. Ein "LAN-Anschluss" ist also nicht immer auch ein "Monitoring-Anschuss". Die günstigste USV mit LAN startet über 1000€ und auch bei der Line Interactive ist es ein 1500VA-System mit LAN-Anschluss-Option. Heute hat zwar jede Steckdose schon einen WiFi-Adapter aber bei der USV ist es noch nicht angekommen. Das weckt natürlich die Neugierde beim Bastler.

USB oder RS-232

Bleibt also der "Selbstbau", um z.B. über eine vorhandene Schnittstelle die Daten abzurufen und im LAN bereit zu stellen. Die beiden Schnittstellen an den USB-Boxen sind fast immer USB und manchmal auch noch RS-232. Nun bin ich bei der USB-Programmierung nicht sonderlich erfahren aber RS-232 spreche ich seit meiner Zeit in Mailboxen und Akustikkoppler immer noch fließend. Und einige USV-Geräte nutzen einige der 9 Leitungen sogar noch für andere Zwecke. Serielle Ports sind auch bei Bastelprojekten durchaus üblich, wobei hier aber oft mit 5V oder 3,3 Volt gearbeitet wird. die +/- 12 Volt einer RS-232-Schnittstelle muss man wohl oder übel schon noch umsetzen. Aber dafür gibt es ja auch entsprechende Bausteine wie den bekannten MAX232. Dennoch muss man natürlich erst mal eine USB mit RS-232 Port finden. Dieser zugegeben fast schon antiquarische Port wird immer öfter weg rationalisiert.

Schaut man z.B.: über Geizhals nach dem Filter "Seriell", dann bleiben 360 von 770 Systeme mit einem RS-232 Port. LAN-Port finden sich nur bei 79, also gerade mal 10% und selbst eine Stichprobe hat mit gezeigt, dass viele Systeme nur mit einem zusätzlichen Einschubmodul wirklich "LAN-Tauglich" sind. Andere erwarten die Installation einer Software auf Windows oder Unix, die dann ihrerseits per TCP-Port für anderen Systeme die USV zugänglich macht.

Aber auch der serielle Port ist leider nicht automatisch eine "offene Schnittstelle". Anscheinend machen viele Hersteller ein Geheimnis um die Belegung und Kommunikationsports. Für weit verbreitete USV-Systeme wie z.B. APC gibt es schon Beschreibungen auf anderen Seiten.

Da kann man dann nur hoffen, dass andere Hersteller sich daran vielleicht orientieren oder ihre Daten veröffentlicht haben. Ich habe bislang noch keine Beschreibungen anderer Hersteller gefunden. Da kann man also entweder beim "bekannten Hersteller" bleiben, dessen Protokoll schon öffentlich ist oder experimentieren. Hier mal ein paar Geräte, die ich mir vom Datenblatt im Mai 2017 angeschaut habe:

  • APC Smart-UPS SC 420VA 260W SER
  • DIGITUS Professional Line-Interactive USV, 1000 VA/600 W
  • Riello Sentinel (OnlineUSV)
  • Online Zinto E800 Online-USV RS232 Line Interactive oder Yunto Q 700

Natürlich unterscheiden sich die Geräte on der Form, Leistung und Qualität. Ich erwarte natürlich, dass die Geräte erst mal ihre technischen Voraussetzungen für den Betrieb mitbringen. Bewerten kann man das als Laier aber nicht wirklich. Was aber alle Jahre erforderlich ist, ist der Batterietausch. Der sollte mit möglichst wenig Werkzeug und idealerweise im Betrieb möglich sein. Hier habe ich durchaus schon USV-System gesehen, bei denen ein Batteriewechsel sehr umständlich oder sogar nur mit Erfahrung möglich ist (z.B. meine alte Belkin USV)

Experimente mit Online USV

Auf verschiedenen Webseiten gibt es Hinweise, wie das serielle Protokoll der APC-USV aufgebaut ist. Allerdings will ich mich auf sowas nicht verlassen. Ich habe also rumgeschaut und letztlich hat der technische Support von Online USV Systeme (https://www.online-usv.de/) auf eine Mail innerhalb von 2 Stunden eine PDF übersendet. Die Yunto Q-Series ist zudem lüfterlos ( =Lautlos) und ist eine "Line Interactive"-USV. Man sollte sich aber nicht vom Namen irritieren lassen, denn eine echte "Online-USV" mit permanenten Wandlern ist dies auch nicht. Mit der Zinto E-Serie gibt es eine höherwertige USV für etwas weniger Geld. Sie hat zwar keinen Überspannungsschutz für Datenleitungen und ist deutlich größer und schwerer. Dafür sind die Batterien "HotPlug"-fähig und der Wandler scheint besser zu sein.

Interessant an der Online-USV ist die offizielle API für den COM-Port, der mir den Weg für eigene Anbindungen eröffnet, auch wenn diese kleinen Boxen an sich keinen Netzwerkport haben. Die physikalischen Daten sind:

  • 2400 Baud mit 8 Bit, 1 Stopbit, No Parity
  • Verkabelung
    Es wird anscheinend nur GND, RxD und TxD genutzt. Die anderen 6 Pins sind wohl nicht beschaltet. Schade eigentlich. Einen Trigger über "RI"  (Ring indicator) wäre schon nett und die anderen Leitungen (DTR, CTS) könnten über einen Dauerpegel sogar etwas Energie für eine eigene Schaltung liefern.

Über kurze Befehle, die an die USV gesendet werden, kann diese ausgelesen aber auch getestet und sogar heruntergefahren werden. Ich beschränke mich auf die Erfassung der Daten und dazu reicht das "Q1 "-Kommando:


Quelle: Hersteller Online Zinto Q protocol V1.3.doc

Damit sollte es doch sehr einfach sein, die Daten per ESP8266 auszulesen und im LAN per WebServer oder UDP-Broadcast zur Verfügung zu stellen und entsprechend auszuwerten. Es gibt zwar auch hier schon eine Lösung über eine externe Box. Die ist mit 459€ Listenpreis aber fast doppelt so teuer wie die gesamte Zinto E 800 (Listenpreis 254€, Straßenpreis <200€)

Seriell an USV

Anders als meine frühe Belkin USV hat die Online Zinto keinen SUB-D 9-poligen Stecker an der Rückwand sondern einen RJ45-Port. Das entsprechende Kabel zur Umsetzung auf einen SUB-D 9Pol_Stecker liegt aber bei.

 So kann man aber die Verbindung relativ einfach über eine strukturierte Verkabelung weiter reichen. Von den acht möglichen Leitungen werden aber nur vier genutzt. Eine Minimalbeschaltung ist GND, RxD und TxD. Option kann man noch RTS/CTS verschalten. Ich tippe eher drauf, dass die Software z.B. die vierte Leitung z.B. RI (Ring Indicator) anlegt um im Fehlerfall schnell die Software zu informieren.

PRTG mit Online USV

Zuerst wollte ich also meine lokale PRTG-Instanz über einen seriellen Anschluss anschließen. Aber halt, das geht ja gar nicht, da PRTG bei mir als HyperV-VM läuft und weder serielle noch USB-Schnittstellen vom Host in den Gast durchgegeben werden können. Dieser "Quick Win" scheidet also erst mal aus. Ich konnte aber auf dem Host einfach die UPSMAN Software installieren und deren Daten dann wieder per PRTG abfragen.

Schöner wäre natürlich eine direkte Anbindung per LAN ohne "Middleware". Um einen seriellen Port über LAN erreichbar zu machen, gibt es ja auch andere Lösungen, z.B.

  • "Terminal-Adapter"
    Diese verbinden einen COM-Port einfach per TCP. Siehe auch Moxa NPort 5110 und vergleichbare Geräte. Sie sind in der Regel fertig aufgebaut und samt Netzteil einfach nur anzuschließen. Sie können sich dann per TCP mit Telnet verbinden und haben den COM-Port über das Netzwerk erreichbar gemacht.
  • Rasberry, Arduino und Co
    Wer mag, kann für diese Aufgabe natürlich auch einen Arduino samt Ethernet-Shield oder gleich einen Rasberry verbauen. Dann bewegen wir uns als Bastelei bei 30-50 Euro.
  • ESP8266
    Für die geringe Datenmenge muss man aber keinen Port opfern und bei WLAN habe auch keine "Problem" mit Schleifen, Erdung o.ä. Ein kleiner ESP8266 hat auch einen seriellen Port, wenngleich man den mit einem Pegelwandler noch umsetzen muss.

Wie wäre also ein Bastelprojekt mit dem ESP8266, der die Daten über den COM-Port abfragt und über HTTP bereitstellt und ggfls. sogar eine Mail sendet.

ESP8266 als Brücke

Nur werde ich damit natürlich keinen SNMP-Stack nachbauen. Dann wäre ein Raspi mit Linux vermutlich der bessere Weg. Da die meisten Platinen auf Basis des ESP8266 auch nur 3,3V nutzen, brauchen wir noch einen Pegelwandler. Entsprechende Platinen mit MAX3232 gibt es aus China für 1-2€ und selbst in Deutschland gibt es den für etwas mehr zzgl. Versand.

Entsprechende RS-232 auf 3,3Vold/5V Pegelwandler auf Basis des MAX3232-Chips gibt es für wenige Euro in China.

Dann fehlt nur noch ein passender ESB8266, wobei ich da mittlerweile fast immer auf den WeMOS IoT-Device oder NodeMCU setze, da diese per USB-Port die Programmierschnittstelle gleich mitbringen. Da aber beide den gleichen COM-Port nutzen. darf man während der Programmierung natürlich der Pegelwandler nicht angeschlossen sein.

Software auf ESP8266

Ich spare mir die Mühe eine Konfigurationsoberfläche zu bauen. Ich veröffentliche hier einfach den Code, in dem Sie natürlich die SSID und das Kennwort für das WLAN eintragen müssen. Optional können Sie auch die IP-Adresse fest eingeben. Ich beschränke mich auf das "Auslesen" der aktuellen Werte als XML-Datei als folge eines Web Request. Fernwirken oder gar Schalten möchte ich erst mal nicht. Verstehen Sie den Code auch eher als Vorlage für eigene Entwicklungen.

Der Code initialisiert WLAN, serielle Schnittstelle und wartet dann auf eingehende Anfragen auf dem WebServer. Auf die Anfrage eines Clients fragt er dann die USV ab, konvertiert die Daten in ein "lesbares" Format und liefert diese an den Client aus. Denkbar ist aber auch, dass der ESP8266 einfach selbständig in festgelegten Intervallen die Daten der USV ausliest und diese dann im Netzwerk "verbreitet". Das kann ein HTTP-Post auf eine hinterlegte URL sein oder auch ein UDP-Broadcast im LAN, auf den denn andere Programme lauschen können. Dazu müsste der ESP8266 natürlich sehr viel häufiger die Daten der USV seriell abfragen.

Natürlich könnte die USV die Daten auch per HTTP irgendwo in die Cloud übertragen. DAs hätte sogar Charme, da solche kleineren USV-Systeme gerne mal in Gerätesteuerungen o.ä außerhalb von überwachten Serverräumen installiert werden und eine fehlende Überwachung erst dann auffällt, wenn beim nächsten Stromausfall die erforderliche Haltezeit nicht mehr erreicht wird.

Diese Projekt ist aktuell noch eine Baustelle Es gibt noch keinen Code, den ich bereitstellen kann. Ich will die Anbindung erst einmal für die Zinto E800 umsetzen. Denkbar ist natürlich jede USV, die per RS-232 mit einem bekannten Befehlssatz angesprochen werden kann.

Weitere Links