Eén van de zwakke punten van een SmartHome-systeem waar je je pas echt van bewust wordt als er iets misgaat, is ‘energie’. Helaas werken alle sensoren, actuatoren en de controlerende intelligentie daarachter niet op lucht en liefde. En zelfs als de energie die door het systeem wordt gebruikt niet erg hoog is en de besparingen over het algemeen hoger zijn dan de “gebruikte” energie, is de leveringsenergie nog steeds essentieel. Met andere woorden: geen elektriciteit -> geen 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.
Voor de Raspberry Pi bestaat het programma “Apcupsd”, waarmee u de status van uw UPS kunt uitlezen. Deze status kun je vervolgens ook gebruiken om er via NodeRed op te reageren.
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.
Voordat u echter de status van uw UPS in NodeRed kunt aflezen, moet eerst “apcupsd” geïnstalleerd worden.
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.
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.
sudo apt-get update && sudo apt-get upgrade
Installeer "apcupsd" op de Raspberry Pi
Om uw RaspberryPi te laten communiceren met de aangesloten UPS, moet u eerst een aantal pakketten installeren.
sudo apt-get install apcupsd
Apcupsd configureren
Voordat je “apcupsd” kunt gebruiken, moet het uiteraard eerst geconfigureerd worden. Om dit te doen, moeten enkele configuratiebestanden worden bewerkt.
sudo nano /etc/apcupsd/apcupsd.conf
UPSKABEL usb
UPSTYPE usb
sudo nano /etc/default/apcupsd
sudo /etc/init.d/apcupsd start
apcaccess-status
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.
[{"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.
Installeer de NetworkUpsTools(NUT) op de RaspberryPi om UPS-gegevens op te halen van een UPS-server
Nu de server is ingesteld om de UPS-informatie te verstrekken, moet de clientzijde (dus uw RaspberryPi) uiteraard ook dienovereenkomstig worden geconfigureerd. Uiteraard moet deze ook contact kunnen maken met de netwerk-UPS-server op uw NAS. Een programma dat dit mogelijk maakt is de “NetworkUpsTool”, die als volgt kan worden geïnstalleerd.
sudo aptitude install nut
Een mededeling: Om “NUT” te installeren heeft u de “aptitude” extensie nodig voor het “APT” pakketbeheer. Dit kan – als het nog niet beschikbaar is – worden geïnstalleerd met de volgende opdracht.
sudo apt-get install aptitude
Mocht u tijdens de installatie vragen hebben, bevestig dan met “y” en “Enter”. Meestal (zoals in dit voorbeeld) hebben deze vragen betrekking op de vraag of er extra opslagruimte nodig is voor de te installeren tools en of er ook aanvullende (vereiste) pakketten kunnen worden geïnstalleerd.
sudo nano /etc/nut/nut.conf
mode=netclient
sudo nano /etc/nut/upsmon.conf
MONITOR ups@*IP-ADRES-UW-NAS* 1 monuser geheime slaaf
sudo service nut-client opnieuw opstarten
sudo upsc ups@*IP-ADRES-UW-NAS*
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.
[{"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. 🙂