HowTo: Knooppunt Rood - UPS-status lezen

Eine dieser Schwachstellen eines SmartHome-Systems die einem erst so richtig bewusst wird, wenn etwas schief läuft ist „Energie“. Die ganzen Sensoren, Aktoren und die steuernde Intelligenz dahinter laufen ja nun leider nicht mit Luft und Liebe. Und auch wenn die von dem System genutzte Energie nicht sehr hoch und generell die Ersparnis dadurch sicherlich höher als die „verbrauchte“ Energie ist, so ist die Versorgungsenergie doch essenziell. Sprich: Kein Strom-> kein SmartHome.

Maar dat delen is een luxeprobleem waar je mee zou kunnen leven. Wat ik veel erger vind, is de gedachte dat mijn Raspberry Pi of welke computer dan ook zo verstikt zou kunnen raken door een plotselinge stroomstoring dat hij daarna misschien niet meer opstart.
Als uw SmartHome-systeem (RaspberryPi, BeagleBone, Windows PC, etc..) wordt onderbroken op het moment dat het belangrijke (systeem)gegevens schrijft, is het mogelijk dat het niet meer goed opstart nadat de stroomvoorziening is hersteld. In extreme gevallen leidt dit tot pijnlijk gegevensverlies en vaak veel tijd. In extreme gevallen heeft u geen back-up van het systeem en moet u het gehele systeem inclusief alle systeemcomponenten opnieuw installeren en configureren.

Maar: in feite lijken andere mensen ook op dit probleem te zijn gestuit. Voor dit geval zijn ononderbroken stroomvoorzieningen (UPS's) uitgevonden. Deze apparaten worden aangesloten tussen het stopcontact en de consument (in dit geval je Raspberry Pi etc.) en monitoren vanaf dat moment continu de kwaliteit van je netspanning. Dit betekent dat er continu wordt gemonitord of de binnenkomende wisselspanning en de frequentie zich binnen het toegestane bereik bevinden. Als er sprake is van onder- of overspanning, of als er iets anders mis is met de voedingsspanning, schakelt de UPS binnen milliseconden de spanningsingang uit en schakelt deze over naar een interne back-upbatterij. Deze neemt dan de voeding van de aangesloten verbruikers over totdat de bufferbatterij leeg is.

UPS'en zijn er nu in allerlei vormen. De kleinste zien eruit als wat onhandige stekkerdozen. Anderen – of hun batterijen – kunnen een hele kamer vullen.

Voor de normale SmartHome-gebruiker zijn de kleinere versies zeker voldoende. Zoals, bijvoorbeeld …

Hoe u uiteindelijk uw eigen UPS in NodeRed integreert en op veranderingen reageert, leest u in dit artikel.


Veiligheidsinstructies

Ik weet dat de volgende opmerkingen altijd een beetje vervelend zijn en onnodig lijken. Helaas hebben veel mensen die "beter" wisten door onvoorzichtigheid ogen, vingers of andere dingen verloren of zichzelf verwond. Gegevensverlies is in vergelijking bijna te verwaarlozen, maar zelfs dit kan erg vervelend zijn. Neem daarom vijf minuten de tijd om de veiligheidsinstructies te lezen. Omdat zelfs het coolste project geen blessure of andere problemen waard is.
https://www.nerdiy.de/sicherheitshinweise/

Affiliate links / reclame links

De hier vermelde links naar online winkels zijn zogenaamde affiliate-links. Als u op zo'n affiliate-link klikt en via deze link een aankoop doet, ontvangt Nerdiy.de een commissie van de betreffende onlineshop of aanbieder. De prijs verandert voor jou niet. Als u via deze links uw aankopen doet, steunt u Nerdiy.de om in de toekomst andere nuttige projecten aan te kunnen bieden. 🙂 


Eisen

Handige artikelen:
Om ervoor te zorgen dat u uw UPS via uw RaspberryPi en NodeRed kunt besturen/configureren, moet deze uiteraard zo worden voorbereid dat NodeRed erop draait en u er via SSH toegang toe heeft.

RaspberryPi – setup voor nerds!
RaspberryPi – De eerste configuratie!
RaspberryPi – Bedien de RaspberryPi via SSH
NodeRed – NodeRed installeren op de RaspberryPi
NodeRed - importeer en exporteer knooppuntcode
NodeRed – Stuur Pushbullet-berichten over evenementen
NodeRed - Maak een gebruikersinterface met dashboardknooppunten

Benodigd materiaal:

In de volgende lijst vindt u alle onderdelen die u nodig heeft om dit artikel te implementeren.


Een UPS lezen die is aangesloten op de RaspberryPi

Het nadeel van een ononderbroken stroomvoorziening is dat de Raspberry Pi niets merkt zodra er iets mis is met de stroomvoorziening. Eigenlijk is dat wat je wilt. Aan de andere kant kan de RaspberryPi niet op deze verandering reageren.

Want ook al is de batterij van een UPS behoorlijk groot vergeleken met het verbruik van een Raspberry Pi, de batterijcapaciteit is eindig. Daarom moet de RaspberryPi bijvoorbeeld automatisch uitschakelen voordat de batterij helemaal leeg is. Dit minimaliseert het risico op gegevensverlies en maakt een gecontroleerde reactie op de stroomstoring mogelijk.

Om ervoor te zorgen dat de RasperryPi op de hoogte wordt gehouden van wijzigingen van de UPS, moet deze via een USB- of seriële verbinding met de RasperryPi zijn verbonden.

Für den RaspberryPi gibt es dazu das Programm „Apcupsd“, welches es Euch ermöglicht den Status Eurer USV einzulesen. Diesen Status könnt Ihr dann ebenfalls dazu nutzen um per NodeRed darauf zu reagieren.

Zo zou het bijvoorbeeld mogelijk zijn om bepaalde componenten uit te schakelen of andere Raspberry Pis uit te schakelen - zolang deze niet al uitgevallen zijn door de stroomstoring.

Bevor Ihr allerdings den Status Eurer USV in NodeRed auslesen könnt, muss zunächst „apcupsd“ installiert werden.


Log in op de RaspberryPi via SSH

Om te beginnen moet je eerst inloggen op de Rasp Pi met Putty via SSH. Hoe je dit doet staat in het artikel RaspberryPi - Bedien de RaspberryPi via SSH beschreven.

Na het invoeren van uw gebruikersnaam en wachtwoord kunt u de eerste opdrachten invoeren.

Pakketbeheer updaten

Het pakketbeheer in Linux is een "centrale plek" van waaruit verschillende softwarepakketten kunnen worden geïnstalleerd. Om dit betrouwbaar te laten werken, moeten de lijsten en bronnen van het pakketbeheer worden bijgewerkt voor elke installatie van nieuwe pakketten.

Om de update van het pakketbeheer te starten, moet u de volgende opdracht invoeren.
sudo apt-get update && sudo apt-get upgrade
Afhankelijk van hoe lang geleden uw laatste update van het pakketbeheer was, kan dit proces nu even duren. De lijsten die naar de afzonderlijke pakketbronnen verwijzen, worden eerst bijgewerkt.
Daarna worden de pakketten zelf bijgewerkt. Aangezien extra geheugen bezet is, wordt u opnieuw om uw toestemming gevraagd. Je moet dit bevestigen met een "J" en "Enter".
Zodra de update is voltooid, ziet u een korte samenvatting van de duur en omvang van de update.

„apcupsd“ auf dem RaspberryPi installieren

Om uw RaspberryPi te laten communiceren met de aangesloten UPS, moet u eerst een aantal pakketten installeren.

Ein Programm dass direkt mit Eurer über USB angeschlossenen USV kommunizieren kann ist das Programm „apcupsd“, welches Ihr mit folgendem Befehl installiert.
sudo apt-get install apcupsd
Eventuelle Nachfragen, dass durch das Programm zusätzlicher Speicher belegt wird, bestätigt Ihr mit „J“.
De installatie duurt ongeveer twee minuten.

Apcupsd configureren

Bevor Ihr „apcupsd“ nutzen könnt, muss dieses zunächst natürlich noch konfiguriert werden. Dazu müssen ein paar Konfigurationsdateien bearbeitet werden.

U opent het eerste configuratiebestand met de volgende opdracht.
sudo nano /etc/apcupsd/apcupsd.conf
In het geopende configuratiebestand moet u eerst de pijltjestoetsen gebruiken…
…bis zur dargestellten Zeile navigieren. Dort wird festgelegt, über welchen Kabeltyp die USV mit Eurem RaspberryPi verbunden ist. Sehr wahrscheinlich ist Eure USV über den USB-Anschluss mit Eurem RaspberryPi verbunden. Deshalb stellt Ihr hier auch „UPSCABLE usb“ ein.
UPSKABEL usb
Omdat je een USB-kabel hebt aangesloten, moet je uiteraard ook het UPSTYPE op usb zetten.
UPSTYPE usb
Damit die Verbindung zur USV über USB funktioniert, müsst Ihr nun noch den Parameter „DEVICE“ bearbeiten. Diesem darf kein Wert zugewiesen werden. Entfernt dazu also den abgebildeten Teil „/dev/ttsyS0“ neben „DEVICE“.
Dit zou er dan zo uit moeten zien.
Nun könnt Ihr noch ein paar Einstellungen vornehmen, wie sich apcupsd im Fall eines Stromausfalls verhalten soll. Mit dem Parameter „BATTERYLEVEL“ lässt sich zum Beispiel einstellen, dass der RaspberryPi bei einem verbleibenden Ladezustand der USV von 5% heruntergefahren wird.
Der Parameter „MINUTES“ gibt dabei an bei welcher Restlaufzeit in Minuten der RaspberryPi heruntergefahren werden soll.
Mit dem Parameter „NETSERVER“ könnt Ihr einen Nertzwerkserver aktivieren, der die Informationen der USV über das Netzwerk zur Verfügung stellt. So können auch andere Netzwerkteilnehmer im Falle eines Stromausfalls ebenfalls auf diesen reagieren und zum Beispiel herunterfahren. Um den Netzwerkserver zu aktivieren müsst Ihr den Parameter auf „NETSERVER on“ einstellen.
Mithilfe des Parameters „NISIP“ könnt Ihr einstellen auf welche IP-Adresse der Server „höhrt“. Dies ist nur dann nötig, wenn Ihr mehr als eine Netzwerkinterface an dem betreffendem System habt. An einem RaspberryPi könntet Ihr damit zum Beispiel einstellen, dass der Server nur anfragen Beantwortet die er über das WLAN-Interface und nicht über das LAN-Interface erhält. In den meisten Fällen könnt Ihr diesen Parameter allerdings auf „NISIP 0.0.0.0“ einstellen. Dies bedeutet, dass alle Anfragen, unabhängig vom Netzwerk-Interface, beantwortet werden.
Durch den Parameter „NISPORT“ wird der Port festgelegt unter dem die Informationen des Servers abgerufen werden können. Diesen solltet Ihr unverändert auf dem Wert „3551“ eingestellt lassen.
Diese Konfiguration speichert Ihr dann mit einem Druck auf „STRG-X“ und „J“…
…und „Enter“.
Nu moet u apcupsd vertellen dat er een configuratie bestaat. Open hiervoor een ander configuratiebestand met de volgende opdracht.
sudo nano /etc/default/apcupsd
Stellt den Parameter „ISCONFIGURED“ dazu auf…
…“yes“ ein.
Diese Konfiguration speichert Ihr dann wieder mit einem Druck auf „STRG-X“ und „J“…
…und „Enter“.
De apcupsd-service kan vervolgens worden gestart met het volgende commando.
sudo /etc/init.d/apcupsd start
Als het programma succesvol is gestart, zou het geheel er zo uit moeten zien.
Mit dem Befehl „apcaccess status“ lässt sich dann der aktuelle Status der USV anzeigen. Sollte keine Verbindung zur USV hergestellt werden können sieht die Antwort wie abgebildet aus.
apcaccess-status
Als de verbinding met de UPS tot stand is gebracht en de informatie kan worden uitgelezen, wordt vervolgens de getoonde informatie weergegeven.
Solltet Ihr „apcupsd“ mal neustarten müssen reicht die Eingabe des folgenden Befehls.
sudo /etc/init.d/apcupsd herstart

U heeft nu de mogelijkheid om de UPS-informatie op de RaspberryPi weer te geven. Om deze informatie te gebruiken voor uw SmartHome kunt u de volgende NodeCode gebruiken.


Knooppuntcode importeren

Met de volgende NodeCode kunt u enkele details van de huidige status van uw UPS weergeven. Hierdoor kun je individueel reageren op bepaalde kenmerken.

Zo zou het bijvoorbeeld mogelijk zijn om via een pushbullet bericht op de hoogte te worden gebracht van een stroomstoring of om de belangrijkste gegevens op het dashboard weer te geven zoals in onderstaand voorbeeld. Om ervoor te zorgen dat bij een stroomstoring pushbullet-berichten kunnen worden verzonden, moet u er uiteraard voor zorgen dat ook uw gehele netwerkinfrastructuur door de UPS wordt beschermd. Als de stroomstoring zich over een heel groot gebied afspeelt, helpt dit uiteraard niet meer. Bij een stroomstoring is de communicatie via internet dus uiteraard niet gegarandeerd.

Hoe u uw NodeCode in uw NodeRed-configuratie importeert, staat in het artikel NodeRed - importeer en exporteer knooppuntcode beschreven. Na het importeren moet u mogelijk ook het Pushbullet-knooppunt configureren. Informatie hierover vindt u in het artikel NodeRed – Stuur Pushbullet-berichten over evenementen. Dashboardknooppunten worden gebruikt om UPS-gegevens weer te geven. Informatie hierover vind je in het artikel NodeRed - Maak een gebruikersinterface met dashboardknooppunten.

Weergave van de UPS-statusindicator in het dashboard.
Overzicht van de NodeCode-configuratie in de NodeRed-configuratie-interface.
[{"id":"e2a1a48.9207858","type":"exec","z":"8c9f8f17.13eb78","command":"/sbin/apcaccess","append":"","useSpawn":"","name":"apcaccess","x":390,"y":1740,"wires":[["c5f64040.b7a32","9ef1333b.1cf96"],[],[]]},{"id":"ebe2e46e.660788","type":"inject","z":"8c9f8f17.13eb78","name":"status request","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":"","x":200,"y":1740,"wires":[["e2a1a48.9207858"]]},{"id":"c5f64040.b7a32","type":"trigger","z":"8c9f8f17.13eb78","op1":"true","op2":"false","op1type":"bool","op2type":"bool","duration":"1","extend":true,"units":"min","reset":"","bytopic":"all","name":"status","x":570,"y":1700,"wires":[["c65a87d0.d60ef8"]]},{"id":"c65a87d0.d60ef8","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"change","p":"topic","pt":"msg","from":"^(.*)$","fromt":"re","to":"online","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":1700,"wires":[["e9c65962.f1bd98"]]},{"id":"9ef1333b.1cf96","type":"function","z":"8c9f8f17.13eb78","name":"convert2Json","func":"const ans = {}

Array.prototype.map.call( msg.payload.trim().split("\n"), function(line) 
{
    if ( line.trim() === '' ) return
    let part = line.split(':')
    // Some values contain ':', when they do, we have to rejoin
    if ( part.length > 2 ) {
        let newPart = []
        newPart.push( part.shift() )
        newPart.push( part.join(':') )
        part = newPart
    }
    
    let payloadName = part[0].toLowerCase().trim()
    let payloadValue = part[1].trim()
    ans[payloadName] = payloadValue
    return
    
} )

msg.payload = ans

return msg","outputs":1,"noerr":0,"x":600,"y":1760,"wires":[["7177d00d.0f8c1","f49b6561.709b18","9cd3b15b.3aa0a","cbdff947.6252f8","9a68559b.2e0408","a998a9f0.b4c2f8","cbb1400b.8107f","4db0abb3.948d94"]]},{"id":"e9c65962.f1bd98","type":"debug","z":"8c9f8f17.13eb78","name":"online/offline-Status","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":980,"y":1700,"wires":[]},{"id":"7177d00d.0f8c1","type":"debug","z":"8c9f8f17.13eb78","name":"Data as JSON payload","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":840,"y":1760,"wires":[]},{"id":"90dd24c3.50c968","type":"ui_gauge","z":"8c9f8f17.13eb78","name":"Battery charge","group":"c8fbbc62.c288a","order":4,"width":0,"height":0,"gtype":"gage","title":"Battery charge:","label":"%","format":"{{value}}","min":0,"max":"100","colors":["#ca3838","#e6e600","#00b500"],"seg1":"","seg2":"","x":1080,"y":1800,"wires":[]},{"id":"4b7d84af.22ddfc","type":"ui_gauge","z":"8c9f8f17.13eb78","name":"Batterie-Temperature","group":"c8fbbc62.c288a","order":5,"width":0,"height":0,"gtype":"gage","title":"Batterie-Temperature:","label":"°C","format":"{{value}}","min":"20","max":"40","colors":["#00b500","#00b500","#ca3838"],"seg1":"","seg2":"","x":1100,"y":1840,"wires":[]},{"id":"c655e83c.23f538","type":"ui_gauge","z":"8c9f8f17.13eb78","name":"Batterie-Voltage","group":"c8fbbc62.c288a","order":6,"width":0,"height":0,"gtype":"gage","title":"Batterie-Voltage:","label":"V","format":"{{value}}","min":"11","max":"15","colors":["#ca3838","#00b500","#ca3838"],"seg1":"","seg2":"","x":1080,"y":1880,"wires":[]},{"id":"3ce99364.46890c","type":"ui_gauge","z":"8c9f8f17.13eb78","name":"Mains voltage","group":"c8fbbc62.c288a","order":7,"width":0,"height":0,"gtype":"gage","title":"Mains voltage:","label":"V","format":"{{value}}","min":"220","max":"240","colors":["#ca3838","#00b500","#ca3838"],"seg1":"","seg2":"","x":1080,"y":1920,"wires":[]},{"id":"810aaaf7.ec4f48","type":"ui_text","z":"8c9f8f17.13eb78","group":"c8fbbc62.c288a","order":1,"width":0,"height":0,"name":"Status","label":"Status:","format":"{{msg.payload}}","layout":"row-spread","x":1050,"y":1960,"wires":[]},{"id":"f49b6561.709b18","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.bcharge","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":1800,"wires":[["90dd24c3.50c968"]]},{"id":"9cd3b15b.3aa0a","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.itemp","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":1840,"wires":[["4b7d84af.22ddfc"]]},{"id":"cbdff947.6252f8","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.battv","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":1880,"wires":[["c655e83c.23f538"]]},{"id":"9a68559b.2e0408","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.linev","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":1920,"wires":[["3ce99364.46890c"]]},{"id":"a998a9f0.b4c2f8","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.status","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":820,"y":1960,"wires":[["810aaaf7.ec4f48"]]},{"id":"5f70becf.c02b8","type":"ui_text","z":"8c9f8f17.13eb78","group":"c8fbbc62.c288a","order":2,"width":0,"height":0,"name":"Last Update","label":"Last Update:","format":"{{msg.payload}}","layout":"row-spread","x":1070,"y":2000,"wires":[]},{"id":"cbb1400b.8107f","type":"function","z":"8c9f8f17.13eb78","name":"","func":"msg.payload=Date(Date.now());
return msg;","outputs":1,"noerr":0,"x":790,"y":2000,"wires":[["5f70becf.c02b8"]]},{"id":"4db0abb3.948d94","type":"function","z":"8c9f8f17.13eb78","name":"","func":"if (msg.payload.linev<=100)
{
    msg.payload="Power failure: UPS-Mains-voltage below 100V!";
    return msg;
}","outputs":1,"noerr":0,"x":790,"y":2040,"wires":[["f62fd4e0.66c8b8"]]},{"id":"f62fd4e0.66c8b8","type":"pushbullet","z":"8c9f8f17.13eb78","config":"e3daf163.eeb16","pushtype":"note","title":"SmartHome","chan":"","name":"","x":1070,"y":2040,"wires":[]},{"id":"622137c.74419c8","type":"inject","z":"8c9f8f17.13eb78","name":"Test Power failure","topic":"","payload":"60","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":410,"y":2040,"wires":[["4f72d77f.af5ee8"]]},{"id":"4f72d77f.af5ee8","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"temp","pt":"flow","to":"payload","tot":"msg"},{"t":"delete","p":"payload","pt":"msg"},{"t":"set","p":"payload.linev","pt":"msg","to":"temp","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":600,"y":2040,"wires":[["4db0abb3.948d94"]]},{"id":"c8fbbc62.c288a","type":"ui_group","z":"","name":"USV2","tab":"4719e8d9.2a46f8","disp":true,"width":"6","collapse":false},{"id":"e3daf163.eeb16","type":"pushbullet-config","z":"","name":"FabsPushbullet"},{"id":"4719e8d9.2a46f8","type":"ui_tab","z":"","name":"Einstellungen","icon":"dashboard"}]

Een UPS lezen die is aangesloten op een Synology NAS

Als u een Synology NAS of een NAS in het algemeen heeft, is het probleem van gegevensverlies nog belangrijker. De familiefoto's (of een deel ervan) mogen immers bij een stroomstoring niet in het datanirvana verdwijnen. Daarom bieden veel fabrikanten de functie aan om je eigen NAS te beschermen tegen stroomstoringen met een UPS. De UPS wordt vervolgens via USB met de NAS verbonden om informatie te kunnen geven over een statuswijziging. Mocht er een stroomstoring optreden, dan detecteert de NAS dit en schakelt automatisch en gecontroleerd uit. Praktisch en goed voor de data opgeslagen op de NAS. Tegelijkertijd is het onpraktisch dat de andere netwerkdeelnemers niets van de situatie te weten komen (behalve dat de stroom is uitgevallen).

De NAS van Synology biedt daar in ieder geval uitkomst voor: via een geïntegreerde netwerk-UPS-server kunnen ook andere netwerkdeelnemers de status registreren van de op de NAS aangesloten UPS. Hierdoor kun je uiteindelijk de status op de RaspberryPi en dus ook in NodeRed vastleggen.

Om de UPS-netwerkserver te laten werken, moet deze eerst worden ingesteld. Om dit te doen, gaat u naar het Configuratiescherm van de DiskStationManager (DSM)-interface...
… und zur Kategorie „Hardware & Energie“. Dort klickt Ihr auf die Karteikarte „USV“.
Dort sollte die angeschlossene USV bereits konfiguriert sein. In diesem Fall wird das NAS nach dem Auftreten eines Stromausfalls nach 3 Minuten automatisch heruntergefahren. Um nun den Netzwerk-USV-Server zu aktivieren, setzt Ihr einen Haken bei „Netzwer-USV-Server aktivieren“ und klickt auf den Button „Zugelassene DiskStation Geräte“.
In dem sich nun öffnendem Fenster könnt Ihr mehrere IP-Adressen von Geräten in Eurem Netzwerk eintragen, denen es erlaubt ist auf die Informationen des Netzwerk-USV-Servers zuzugreifen. Dieses so genannte „Whitelist“-Verfahren stellt sicher, dass nur berechtigte Netzwerkteilnehmer diese Informationen erhalten können. In diesem Feld tragt Ihr wie abgebildet die IP-Adresse Eures RaspberryPi’s ein von dem Ihr per NodeRed den USV-Status einlesen wollt. Wie Ihr die IP-Adresse der Geräte in Eurem Netzwerk herausfindet ist im Artikel Toon/ontdek het IP-adres van de apparaten in het netwerk beschrieben. Habt ihr die IP-Adresse eingetragen klickt Ihr auf „OK“…
…und im darauffolgenden Fenster auf „Übernehmen“.

Installeer de NetworkUpsTools(NUT) op de RaspberryPi om UPS-gegevens op te halen van een UPS-server

Nun wo der Server zur Bereitstellung der USV Informationen eingerichtet ist, muss natürlich auch die Client-Seite(also Euer RaspberryPi) entsprechend konfiguriert werden. Denn dieser muss natürlich auch Kontakt zu dem Netzwerk-USV-Server auf Eurem NAS aufnehmen können. Ein Programm dass dies ermöglicht ist das „NetworkUpsTool“, welches wie folgt installiert werden kann.

Zum installieren der Anwendung „NUT“ müsst Ihr folgenden Befehl eingeben.
sudo aptitude install nut

Een mededeling: Für die Installation von „NUT“ benötigt Ihr die Erweiterung „aptitude“ für die Paketverwaltung „APT“. Diese lässt sich – falls nicht bereits vorhanden – mit folgendem Befehl installieren.

sudo apt-get install aptitude

Eventuelle Fragen während der Installation bestätigt Ihr mit einem „y“ und „Enter“. Meistens(wie auch in diesem Beispiel) beziehen sich diese Fragen darauf, ob durch die zu installierenden Tools zusätzlicher Speicherplatz belegt und ob auch weitere (benötigte) Pakete installiert werden dürfen.

Nach der Installation muss „NUT“ noch konfiguriert werden. Dazu öffnet Ihr die Konfigurationsdatei mit dem folgenden Befehl.
sudo nano /etc/nut/nut.conf
Gebruik in het nu geopende configuratiebestand de pijltjestoetsen om naar de getoonde regel te navigeren.
Dort angekommen ändert Ihr die Zeile von „Mode=none“ zu „Mode=netclient“. Dies teil „NUT“ mit, dass es als Netzwerk-Client für einen Netzwerk-USV-Server fungieren soll.
mode=netclient
Diese Konfiguration speichert Ihr mit einem Druck auf „STRG-X“ und „J“…
…und letztendlich auf „Enter“.
Nu moet u uiteraard nog het adres configureren waarop de netwerk-UPS-server bereikbaar is. Open hiervoor een ander configuratiebestand met de volgende opdracht.
sudo nano /etc/nut/upsmon.conf
Navigiert dann mit den Pfeiltasten bis Ihr in der angegebenen Zeile angekommen seid. Dort muss die Zeile „MONITOR ups@*IP-ADRESSE-EURER-NAS* 1 monuser secret slave“ eingefügt werden. Dabei muss *IP-ADRESSE-EURER-NAS* natürlich durch die IP-Adresse Eures Netzwerk-USV-Servers also Eurer NAS ersetzt werden. Nur so weiß NUT woher es die USV-Informationen beziehen kann.
MONITOR ups@*IP-ADRES-UW-NAS* 1 monuser geheime slaaf
Diese Konfiguration speichert Ihr dann wieder mit einem Druck auf „STRG-X“ und „J“…
…und letztendlich auf „Enter“.
Damit die Änderungen an der Konfigurationsdatei übernommen werden müsst Ihr den NUT-Clienten nun nur noch neu starten. Dies geht mit dem Befehl „sudo service nut-client restart“.
sudo service nut-client opnieuw opstarten
Mithilfe des Befehls „sudo upsc ups@*IP-ADRESSE-EURER-NAS*“ könnt Ihr nun die aktuellen Informationen zu Eurer USV vom Netzwerk-USV-Server abrufen. Dabei muss *IP-ADRESSE-EURER-NAS* natürlich wieder durch die IP-Adresse Eures Netzwerk-USV-Servers also Eurer NAS ersetzt werden.
sudo upsc ups@*IP-ADRES-UW-NAS*
De informatie wordt vervolgens volgens het opgegeven patroon aan u weergegeven. Zo worden bijvoorbeeld de laadtoestand, het model en verschillende spanningen weergegeven.

Knooppuntcode importeren

Met de volgende NodeCode kunt u enkele details weergeven van de huidige status van uw UPS die is aangesloten op uw Synology NAS. Hierdoor kun je individueel reageren op bepaalde kenmerken.

Zo zou het bijvoorbeeld mogelijk zijn om via een pushbullet bericht op de hoogte te worden gebracht van een stroomstoring of om de belangrijkste gegevens op het dashboard weer te geven zoals in onderstaand voorbeeld. Om ervoor te zorgen dat bij een stroomstoring pushbullet-berichten kunnen worden verzonden, moet u er uiteraard voor zorgen dat ook uw gehele netwerkinfrastructuur door de UPS wordt beschermd. Als de stroomstoring zich over een heel groot gebied afspeelt, helpt dit uiteraard niet meer. Bij een stroomstoring is de communicatie via internet dus uiteraard niet gegarandeerd.

Hoe u uw NodeCode in uw NodeRed-configuratie importeert, staat in het artikel NodeRed - importeer en exporteer knooppuntcode beschreven. Na het importeren moet u mogelijk ook het Pushbullet-knooppunt configureren. Informatie hierover vindt u in het artikel NodeRed – Stuur Pushbullet-berichten over evenementen. Dashboardknooppunten worden gebruikt om UPS-gegevens weer te geven. Informatie hierover vind je in het artikel NodeRed - Maak een gebruikersinterface met dashboardknooppunten.

Weergave van de UPS-statusindicator in het dashboard.
Overzicht van de NodeCode-configuratie in de NodeRed-configuratie-interface.
[{"id":"b7aefd76.e8bf9","type":"comment","z":"8c9f8f17.13eb78","name":"USV-Server data request","info":"","x":170,"y":2160,"wires":[]},{"id":"66e7a9bd.eb6c58","type":"inject","z":"8c9f8f17.13eb78","name":"","topic":"status request","payload":"","payloadType":"date","repeat":"60","crontab":"","once":true,"onceDelay":0.1,"x":180,"y":2240,"wires":[["d3649b9.f1b5468"]]},{"id":"d3649b9.f1b5468","type":"exec","z":"8c9f8f17.13eb78","command":"sudo upsc ups@192.168.3.59","addpay":false,"append":"","useSpawn":"","timer":"","oldrc":false,"name":"get UPS status","x":420,"y":2240,"wires":[["22edb893.55ed38"],[],[]]},{"id":"22edb893.55ed38","type":"function","z":"8c9f8f17.13eb78","name":"convert2Json","func":"const convertData = {}

Array.prototype.map.call( msg.payload.trim().split("\n"), function(line) 
{
    if ( line.trim() === '' ) return
    let part = line.split(':')
    
    // Some values contain ':', when they do, we have to rejoin
    if ( part.length > 2 ) {
        let newPart = []
        newPart.push( part.shift() )
        newPart.push( part.join(':') )
        part = newPart
    }
    
    let payloadName = part[0].toLowerCase().trim()
    payloadName = part[0].replace(/\./g, "_")
    let payloadValue = part[1].trim()
    convertData[payloadName] = payloadValue
    return
    
} )

msg.payload = convertData

return msg","outputs":1,"noerr":0,"x":630,"y":2240,"wires":[["61f07a9c.f54824","a1504bd4.049f18","4e4d02.d85ad3","641d6b8a.a25e34","49343e5b.85218","3c698623.45215a","83b9ebee.451878","282426fe.c5650a","50224b5b.8a4164"]]},{"id":"61f07a9c.f54824","type":"debug","z":"8c9f8f17.13eb78","name":"Data as JSON payload","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","x":920,"y":2240,"wires":[]},{"id":"21f21239.2c2bce","type":"ui_text","z":"8c9f8f17.13eb78","group":"6f8a5651.9e0318","order":0,"width":0,"height":0,"name":"Test:","label":"Test:","format":"{{msg.payload}}","layout":"row-spread","x":1130,"y":2480,"wires":[]},{"id":"a1504bd4.049f18","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.battery_charge","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2280,"wires":[["3442fea.41d6702"]]},{"id":"4e4d02.d85ad3","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.battery_temperature","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2320,"wires":[["5362d4fa.9026ac"]]},{"id":"641d6b8a.a25e34","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.battery_voltage","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2360,"wires":[["bd21c5da.510bc8"]]},{"id":"49343e5b.85218","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.input_voltage","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2400,"wires":[["22a47d9.d019982"]]},{"id":"3c698623.45215a","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ups_status","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2440,"wires":[["6a33c3ab.06088c"]]},{"id":"83b9ebee.451878","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.ups_test_result","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":2480,"wires":[["21f21239.2c2bce"]]},{"id":"282426fe.c5650a","type":"function","z":"8c9f8f17.13eb78","name":"","func":"msg.payload=Date(Date.now());
return msg;","outputs":1,"noerr":0,"x":870,"y":2520,"wires":[["12142ef5.0928f1"]]},{"id":"50224b5b.8a4164","type":"function","z":"8c9f8f17.13eb78","name":"","func":"if (msg.payload.input_voltage<=100)
{
    msg.payload="Stromausfall: USV-Eingangsspannung unter 100V!";
    return msg;
}","outputs":1,"noerr":0,"x":870,"y":2560,"wires":[["b4128198.758dd"]]},{"id":"b4128198.758dd","type":"pushbullet","z":"8c9f8f17.13eb78","config":"","pushtype":"note","title":"SmartHome","chan":"","name":"","x":1150,"y":2560,"wires":[]},{"id":"88e174da.1ab6d8","type":"inject","z":"8c9f8f17.13eb78","name":"Test Power failure","topic":"","payload":"60","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":490,"y":2560,"wires":[["b7ac5f17.07bbb"]]},{"id":"b7ac5f17.07bbb","type":"change","z":"8c9f8f17.13eb78","name":"","rules":[{"t":"set","p":"temp","pt":"flow","to":"payload","tot":"msg"},{"t":"delete","p":"payload","pt":"msg"},{"t":"set","p":"payload.input_voltage","pt":"msg","to":"temp","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":680,"y":2560,"wires":[["50224b5b.8a4164"]]},{"id":"3442fea.41d6702","type":"ui_gauge","z":"8c9f8f17.13eb78","name":"Battery charge","group":"c8fbbc62.c288a","order":4,"width":0,"height":0,"gtype":"gage","title":"Battery charge:","label":"%","format":"{{value}}","min":0,"max":"100","colors":["#ca3838","#e6e600","#00b500"],"seg1":"","seg2":"","x":1160,"y":2280,"wires":[]},{"id":"5362d4fa.9026ac","type":"ui_gauge","z":"8c9f8f17.13eb78","name":"Batterie-Temperature","group":"c8fbbc62.c288a","order":5,"width":0,"height":0,"gtype":"gage","title":"Batterie-Temperature:","label":"°C","format":"{{value}}","min":"20","max":"40","colors":["#00b500","#00b500","#ca3838"],"seg1":"","seg2":"","x":1180,"y":2320,"wires":[]},{"id":"bd21c5da.510bc8","type":"ui_gauge","z":"8c9f8f17.13eb78","name":"Batterie-Voltage","group":"c8fbbc62.c288a","order":6,"width":0,"height":0,"gtype":"gage","title":"Batterie-Voltage:","label":"V","format":"{{value}}","min":"11","max":"15","colors":["#ca3838","#00b500","#ca3838"],"seg1":"","seg2":"","x":1160,"y":2360,"wires":[]},{"id":"22a47d9.d019982","type":"ui_gauge","z":"8c9f8f17.13eb78","name":"Mains voltage","group":"c8fbbc62.c288a","order":7,"width":0,"height":0,"gtype":"gage","title":"Mains voltage:","label":"V","format":"{{value}}","min":"220","max":"240","colors":["#ca3838","#00b500","#ca3838"],"seg1":"","seg2":"","x":1160,"y":2400,"wires":[]},{"id":"6a33c3ab.06088c","type":"ui_text","z":"8c9f8f17.13eb78","group":"c8fbbc62.c288a","order":1,"width":0,"height":0,"name":"Status","label":"Status:","format":"{{msg.payload}}","layout":"row-spread","x":1130,"y":2440,"wires":[]},{"id":"12142ef5.0928f1","type":"ui_text","z":"8c9f8f17.13eb78","group":"c8fbbc62.c288a","order":2,"width":0,"height":0,"name":"Last Update","label":"Last Update:","format":"{{msg.payload}}","layout":"row-spread","x":1150,"y":2520,"wires":[]},{"id":"6f8a5651.9e0318","type":"ui_group","z":"","name":"USV","tab":"fe022c7.d9788d","disp":true,"width":"6","collapse":false},{"id":"c8fbbc62.c288a","type":"ui_group","z":"","name":"USV2","tab":"4719e8d9.2a46f8","disp":true,"width":"6","collapse":false},{"id":"fe022c7.d9788d","type":"ui_tab","z":"","name":"Einstellungen","icon":"dashboard"},{"id":"4719e8d9.2a46f8","type":"ui_tab","z":"","name":"Einstellungen","icon":"dashboard"}]

Meer informatie

https://wiki.ubuntuusers.de/USV/NUT/
https://flows.nodered.org/flow/cf9813fbca341607a73786c31df362c9
http://www.gtkdb.de/index_36_2203.html


Veel plezier met het project

Ik hoop dat alles werkte zoals beschreven. Zo niet, of als je vragen of suggesties hebt, laat het me weten in de commentaren. Ik zal dit dan zo nodig aan het artikel toevoegen.
Ideeën voor nieuwe projecten zijn altijd welkom. 🙂

PS Veel van deze projecten - vooral de hardwareprojecten - kosten veel tijd en geld. Natuurlijk doe ik dit omdat ik het leuk vind, maar als je het cool vindt dat ik de informatie met je deel, dan zou ik blij zijn met een kleine donatie aan het koffiefonds. 🙂

Koop Me a Coffee op ko-fi.com       

Kommentar hinterlassen

Het e-mailadres wordt niet gepubliceerd. Erforderliche Felder sind mit * markiert

Deze site gebruikt Akismet om spam te verminderen. Lees hoe uw commentaargegevens worden verwerkt.