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.
Pero compartir eso es un problema de lujo con el que se podría vivir. Lo que me parece mucho peor es la idea de que mi Raspberry Pi o cualquier computadora en general pueda ahogarse tanto por un corte repentino de energía que es posible que ya no arranque después.
Si su sistema SmartHome (RaspberryPi, BeagleBone, PC con Windows, etc.) se interrumpe en el mismo momento en que está escribiendo datos importantes (del sistema), es posible que ya no se inicie correctamente después de que se restablezca el suministro de energía. En casos extremos, esto provoca una dolorosa pérdida de datos y, a menudo, mucho tiempo. En casos extremos, no tiene una copia de seguridad del sistema y luego tiene que reinstalar y configurar todo el sistema, incluidos todos los componentes del sistema.
Pero, de hecho, otras personas también parecen haberse topado con este problema. Para este caso se inventaron los sistemas de alimentación ininterrumpida (UPS). Estos dispositivos se conectan entre el enchufe y el consumidor (en este caso su Raspberry Pi, etc.) y a partir de ahí controlan continuamente la calidad de la tensión de red. Esto significa que se controla continuamente si la tensión alterna entrante y la frecuencia se encuentran dentro del rango permitido. Si se produce una subtensión o una sobretensión, o si hay algún otro problema con la tensión de alimentación, el UPS desconecta la entrada de tensión en milisegundos y la conmuta a una batería de respaldo interna. Este se encarga entonces del suministro de los consumidores conectados hasta que se agota la batería tampón.
Los UPS ahora vienen en todo tipo de formas. Los más pequeños parecen enchufes múltiples algo torpes. Otros –o sus baterías– pueden llenar una habitación entera.
Para el usuario normal de SmartHome, las versiones más pequeñas son ciertamente suficientes. Como por ejemplo …
En este artículo se explica cómo integrar en última instancia su propio UPS en NodeRed y reaccionar ante los cambios.
Instrucciones de seguridad
Sé que las siguientes notas siempre son un poco molestas y parecen innecesarias. Desafortunadamente, muchas personas que sabían "mejor" han perdido ojos, dedos u otras cosas debido a un descuido o se lesionaron. La pérdida de datos es casi insignificante en comparación, pero incluso estos pueden ser realmente molestos. Por lo tanto, tómese cinco minutos para leer las instrucciones de seguridad. Porque incluso el proyecto más genial no vale la pena lesionarse u otros problemas.
https://www.nerdiy.de/sicherheitshinweise/
Enlaces afiliados / enlaces publicitarios
Los enlaces a las tiendas en línea enumerados aquí son los llamados enlaces de afiliados. Si hace clic en dicho enlace de afiliado y realiza una compra a través de este enlace, Nerdiy.de recibirá una comisión de la tienda en línea o el proveedor correspondiente. El precio no cambia para usted. Si realiza sus compras a través de estos enlaces, ayuda a Nerdiy.de a poder ofrecer otros proyectos útiles en el futuro. 🙂
Requisitos
Artículos útiles:
Para que pueda controlar/configurar su UPS a través de su RaspberryPi y NodeRed, por supuesto debe estar preparado para que NodeRed se ejecute en él y pueda acceder a él a través de SSH.
RaspberryPi: ¡configuración para nerdiys!
RaspberryPi – ¡La primera configuración!
RaspberryPi: controle el RaspberryPi a través de SSH
NodeRed: instalación de NodeRed en RaspberryPi
NodeRed - código de nodo de importación y exportación
NodeRed: envía mensajes Pushbullet sobre eventos
NodeRed: cree una interfaz de usuario con nodos de tablero
Material requerido:
En la siguiente lista encontrará todas las piezas que necesita para implementar este artículo.
Lectura de un SAI conectado a la RaspberryPi
La desventaja de una fuente de alimentación ininterrumpida es que la Raspberry Pi no nota nada en cuanto hay algún problema con la fuente de alimentación. En realidad, eso es lo que quieres. Por otro lado, la RaspberryPi no puede reaccionar a este cambio.
Porque aunque la batería de un UPS es bastante grande en comparación con el consumo de una Raspberry Pi, la capacidad de la batería es finita. Por eso, la RaspberryPi debería, por ejemplo, apagarse automáticamente antes de que la batería se agote por completo. Esto minimiza el riesgo de pérdida de datos y permite una respuesta controlada al corte de energía.
Para que el RasperryPi sea informado sobre los cambios del UPS, debe estar conectado al RasperryPi mediante una conexión USB o serie.
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.
Por ejemplo, sería posible apagar ciertos componentes o apagar otras Raspberry Pis, siempre que no hayan fallado debido al corte de energía.
Bevor Ihr allerdings den Status Eurer USV in NodeRed auslesen könnt, muss zunächst „apcupsd“ installiert werden.
Inicie sesión en RaspberryPi a través de SSH
Para comenzar, primero debe iniciar sesión en Rasp Pi con Putty a través de SSH. Cómo hacer esto está en el artículo. RaspberryPi - Controle el RaspberryPi a través de SSH descrito.
Gestión de paquetes de actualización
La gestión de paquetes en Linux es un "lugar central" a través del cual se pueden instalar varios paquetes de software. Para que esto funcione de manera confiable, las listas y fuentes de administración de paquetes deben actualizarse antes de cada instalación de nuevos paquetes.
sudo apt-obtener actualización && sudo apt-obtener actualización
„apcupsd“ auf dem RaspberryPi installieren
Para que su RaspberryPi se comunique con el UPS conectado, primero debe instalar algunos paquetes.
sudo apt-get install apcupsd
Configurar Appupsd
Bevor Ihr „apcupsd“ nutzen könnt, muss dieses zunächst natürlich noch konfiguriert werden. Dazu müssen ein paar Konfigurationsdateien bearbeitet werden.
sudo nano /etc/apcupsd/apcupsd.conf
USB UPSCABLE
tipo ups usb
sudo nano /etc/default/apcupsd
sudo /etc/init.d/apcupsd inicio
estado de acceso apc
sudo /etc/init.d/apcupsd reiniciar
Ahora tiene la opción de mostrar la información del UPS en la RaspberryPi. Para utilizar esta información para su SmartHome puede utilizar el siguiente NodeCode.
Importar código de nodo
Con el siguiente NodeCode puede mostrar algunos detalles del estado actual de su UPS. Esto significa que puedes reaccionar individualmente ante determinadas características.
Por ejemplo, sería posible recibir una notificación de un corte de energía mediante un mensaje push o, como en el ejemplo siguiente, mostrar los datos más importantes en el tablero. Para que se puedan enviar mensajes push en caso de un corte de energía, por supuesto debe asegurarse de que toda su infraestructura de red también esté protegida por el UPS. Por supuesto, si el corte de energía afecta a un área muy grande, esto ya no ayuda. Por lo tanto, por supuesto, la comunicación a través de Internet no está garantizada en caso de un corte de energía.
Cómo importar su NodeCode en su configuración de NodeRed está en el artículo NodeRed - código de nodo de importación y exportación descrito. Después de la importación, es posible que también necesite configurar el nodo Pushbullet. Puedes encontrar información sobre esto en el artículo. NodeRed: envía mensajes Pushbullet sobre eventos. Los nodos del tablero se utilizan para mostrar datos de UPS. Puedes encontrar información al respecto en el artículo NodeRed: cree una interfaz de usuario con nodos de tablero.
[{"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"}]
Lectura de un SAI conectado a un Synology NAS
Si tienes un Synology NAS o un NAS en general, el tema de la pérdida de datos es aún más importante. Después de todo, las fotos familiares (o algunas de ellas) no deberían desaparecer en el nirvana de los datos en caso de un corte de energía. Es por eso que muchos fabricantes ofrecen la función de proteger su propio NAS de cortes de energía con un UPS. Luego, el UPS se conecta al NAS a través de USB para poder proporcionar información sobre un cambio de estado. Si se produce un corte de energía, el NAS lo detecta y se apaga automáticamente y de forma controlada. Práctico y bueno para los datos almacenados en el NAS. Al mismo tiempo, no es práctico que los demás participantes de la red no se enteren de la situación (excepto que se ha cortado la luz).
Al menos los NAS de Synology ofrecen una solución para esto: a través de un servidor UPS de red integrado, otros participantes de la red también pueden registrar el estado del UPS conectado al NAS. Esto significa que, en última instancia, puedes registrar el estado en la RaspberryPi y, por tanto, también en NodeRed.
Instale NetworkUpsTools (NUT) en RaspberryPi para recuperar datos de UPS desde un servidor UPS
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.
Tuerca de instalación de sudo aptitude
Una noticia: 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.
sudo nano /etc/nut/nut.conf
modo=netclient
sudo nano /etc/nut/upsmon.conf
MONITOR ups@*IP-ADDRESS-YOUR-NAS* 1 monousuario esclavo secreto
reinicio del cliente de tuerca del servicio sudo
sudo upsc ups@*DIRECCIÓN-IP-SU-NAS*
Importar código de nodo
Con el siguiente NodeCode puede mostrar algunos detalles del estado actual de su UPS conectado a su Synology NAS. Esto significa que puedes reaccionar individualmente ante determinadas características.
Por ejemplo, sería posible recibir una notificación de un corte de energía mediante un mensaje push o, como en el ejemplo siguiente, mostrar los datos más importantes en el tablero. Para que se puedan enviar mensajes push en caso de un corte de energía, por supuesto debe asegurarse de que toda su infraestructura de red también esté protegida por el UPS. Por supuesto, si el corte de energía afecta a un área muy grande, esto ya no ayuda. Por lo tanto, por supuesto, la comunicación a través de Internet no está garantizada en caso de un corte de energía.
Cómo importar su NodeCode en su configuración de NodeRed está en el artículo NodeRed - código de nodo de importación y exportación descrito. Después de la importación, es posible que también necesite configurar el nodo Pushbullet. Puedes encontrar información sobre esto en el artículo. NodeRed: envía mensajes Pushbullet sobre eventos. Los nodos del tablero se utilizan para mostrar datos de UPS. Puedes encontrar información al respecto en el artículo NodeRed: cree una interfaz de usuario con nodos de tablero.
[{"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"}]
Información adicional
https://wiki.ubuntuusers.de/USV/NUT/
https://flows.nodered.org/flow/cf9813fbca341607a73786c31df362c9
http://www.gtkdb.de/index_36_2203.html
Diviértete con el proyecto.
Espero que todo te haya funcionado como se describe. Si no es así, o si tiene alguna pregunta o sugerencia, hágamelo saber en los comentarios. Si es necesario, lo añadiré al artículo.
Las ideas para nuevos proyectos siempre son bienvenidas. 🙂
PS Muchos de estos proyectos, especialmente los proyectos de hardware, cuestan mucho tiempo y dinero. Por supuesto que hago esto porque lo disfruto, pero si crees que es genial que comparta la información contigo, me encantaría hacer una pequeña donación al fondo del café. 🙂