From 7bc3f212964d1db5149b63564838494f30ba553f Mon Sep 17 00:00:00 2001 From: "Community Hass.io Add-ons Bot" Date: Sun, 1 Mar 2020 19:33:15 +0000 Subject: [PATCH] :tada: Release of add-on Network UPS Tools 0.1.0 --- README.md | 25 +++++++++++++ nut/CHANGELOG.md | 3 ++ nut/README.md | 80 ++++++++++++++++++++++++++++++++++++++++++ nut/config.json | 89 +++++++++++++++++++++++++++++++++++++++++++++++ nut/icon.png | Bin 0 -> 6406 bytes nut/logo.png | Bin 0 -> 6406 bytes 6 files changed, 197 insertions(+) create mode 100644 nut/CHANGELOG.md create mode 100644 nut/README.md create mode 100644 nut/config.json create mode 100644 nut/icon.png create mode 100644 nut/logo.png diff --git a/README.md b/README.md index 77c4bbed..99eac58e 100644 --- a/README.md +++ b/README.md @@ -334,6 +334,20 @@ A secure and decentralized communication platform. [:books: Matrix add-on documentation][addon-doc-matrix] +### ✓ [Network UPS Tools][addon-nut] + +![Latest Version][nut-version-shield] +![Supports armhf Architecture][nut-armhf-shield] +![Supports armv7 Architecture][nut-armv7-shield] +![Supports aarch64 Architecture][nut-aarch64-shield] +![Supports amd64 Architecture][nut-amd64-shield] +![Supports i386 Architecture][nut-i386-shield] +![Docker Pulls][nut-pulls-shield] + +Manage battery backup (UPS) devices + +[:books: Network UPS Tools add-on documentation][addon-doc-nut] + ### ✓ [Nginx Proxy Manager][addon-nginxproxymanager] ![Latest Version][nginxproxymanager-version-shield] @@ -678,6 +692,7 @@ on the correct GitHub repository matching the add-on. - [Open an issue for the add-on: Lutron Certificate][lutron-cert-issue] - [Open an issue for the add-on: MQTT Server & Web client][mqtt-issue] - [Open an issue for the add-on: Matrix][matrix-issue] +- [Open an issue for the add-on: Network UPS Tools][nut-issue] - [Open an issue for the add-on: Nginx Proxy Manager][nginxproxymanager-issue] - [Open an issue for the add-on: Node-RED][node-red-issue] - [Open an issue for the add-on: Pi-hole][pi-hole-issue] @@ -956,6 +971,16 @@ SOFTWARE. [matrix-armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg [matrix-armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg [matrix-i386-shield]: https://img.shields.io/badge/i386-yes-green.svg +[addon-nut]: https://github.com/hassio-addons/addon-nut/tree/v0.1.0 +[addon-doc-nut]: https://github.com/hassio-addons/addon-nut/blob/v0.1.0/README.md +[nut-issue]: https://github.com/hassio-addons/addon-nut/issues +[nut-version-shield]: https://img.shields.io/badge/version-v0.1.0-blue.svg +[nut-pulls-shield]: https://img.shields.io/docker/pulls/hassioaddons/nut-armhf.svg +[nut-aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg +[nut-amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg +[nut-armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg +[nut-armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg +[nut-i386-shield]: https://img.shields.io/badge/i386-yes-green.svg [addon-nginxproxymanager]: https://github.com/hassio-addons/addon-nginx-proxy-manager/tree/v0.5.0 [addon-doc-nginxproxymanager]: https://github.com/hassio-addons/addon-nginx-proxy-manager/blob/v0.5.0/README.md [nginxproxymanager-issue]: https://github.com/hassio-addons/addon-nginx-proxy-manager/issues diff --git a/nut/CHANGELOG.md b/nut/CHANGELOG.md new file mode 100644 index 00000000..7f8a8356 --- /dev/null +++ b/nut/CHANGELOG.md @@ -0,0 +1,3 @@ +🎉 Initial add-on release 🎉 + +Questions? Join our Discord server! https://discord.me/hassioaddons \ No newline at end of file diff --git a/nut/README.md b/nut/README.md new file mode 100644 index 00000000..de8fc07c --- /dev/null +++ b/nut/README.md @@ -0,0 +1,80 @@ +# Home Assistant Community Add-on: Network UPS Tools + +[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield] + +[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum] + +[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee] + +A Network UPS Tools daemon to allow you to easily manage battery backup (UPS) +devices connected to your Home Assistant machine. + +## About + +The primary goal of the Network UPS Tools (NUT) project is to provide support +for Power Devices, such as Uninterruptible Power Supplies, Power Distribution +Units, Automatic Transfer Switch, Power Supply Units and Solar Controllers. + +NUT provides many control and monitoring [features][nut-features], with a +uniform control and management interface. + +More than 140 different manufacturers, and several thousands models +are [compatible][nut-compatible]. + +The Network UPS Tools (NUT) project is the combined effort of +many [individuals and companies][nut-acknowledgements]. + +Be sure to add a NUT Sensor to your `configuration.yaml` after starting the +add-on: + +```yaml +sensor: + - platform: nut + name: "CyberPower 1500" + host: UNKNOWN-nut + username: nutty + password: changeme + resources: + - battery.charge + - battery.runtime + - ups.load + - ups.status +``` + +For more information on how to configure the NUT Sensor in Home Assistant +see the [NUT Sensor documentation][nut-sensor-docs]. + +[Click here for the full documentation][docs] + +## WARNING! THIS IS A BETA VERSION! + +This Home Assistant Add-ons repository contains beta releases of add-ons. + +- They might stop working at any time. +- They could have a negative impact on your system. + +This repository was created for: + +- Anybody willing to test. +- Anybody interested in trying out upcoming add-ons or add-on features. + +If you are more interested in stable releases of our add-ons: + + + + +[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/guidelines/download-assets-sm-2.svg +[buymeacoffee]: https://www.buymeacoffee.com/dale3h +[discord-shield]: https://img.shields.io/discord/478094546522079232.svg +[discord]: https://discord.me/hassioaddons +[docs]: https://github.com/hassio-addons/addon-nut/blob/v0.1.0/README.md +[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg +[forum]: https://community.home-assistant.io/t/community-hass-io-add-on-network-ups-tools/68516 +[maintenance-shield]: https://img.shields.io/maintenance/yes/2020.svg +[nut-acknowledgements]: https://networkupstools.org/acknowledgements.html +[nut-compatible]: https://networkupstools.org/stable-hcl.html +[nut-features]: https://networkupstools.org/features.html +[nut-sensor-docs]: https://www.home-assistant.io/components/sensor.nut/ +[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg +[release-shield]: https://img.shields.io/badge/version-v0.1.0-blue.svg +[release]: https://github.com/hassio-addons/addon-nut/tree/v0.1.0 \ No newline at end of file diff --git a/nut/config.json b/nut/config.json new file mode 100644 index 00000000..c7f13e65 --- /dev/null +++ b/nut/config.json @@ -0,0 +1,89 @@ +{ + "name": "Network UPS Tools", + "version": "0.1.0", + "slug": "nut", + "description": "Manage battery backup (UPS) devices", + "url": "https://github.com/hassio-addons/addon-nut", + "startup": "system", + "arch": [ + "aarch64", + "amd64", + "armhf", + "armv7", + "i386" + ], + "auto_uart": "true", + "boot": "auto", + "hassio_api": true, + "hassio_role": "manager", + "homeassistant_api": true, + "ports": { + "3493/tcp": null + }, + "ports_description": { + "3493/tcp": "Network UPS Tools" + }, + "devices": [ + "/dev/bus/usb:/dev/bus/usb:rwm" + ], + "options": { + "users": [ + { + "username": "", + "password": "", + "instcmds": [ + "all" + ], + "actions": [] + } + ], + "devices": [ + { + "name": "myups", + "driver": "usbhid-ups", + "port": "auto", + "config": [] + } + ], + "mode": "netserver", + "shutdown_host": "false" + }, + "schema": { + "log_level": "list(trace|debug|info|notice|warning|error|fatal)?", + "users": [ + { + "username": "str", + "password": "password", + "instcmds": [ + "str" + ], + "actions": [ + "str" + ], + "upsmon": "list(master|slave)?" + } + ], + "devices": [ + { + "name": "str", + "driver": "str", + "port": "str", + "config": [ + "str" + ] + } + ], + "mode": "list(netserver|netclient)", + "shutdown_host": "bool", + "list_usb_devices": "bool?", + "remote_ups_name": "str?", + "remote_ups_host": "str?", + "remote_ups_password": "password?", + "remote_ups_user": "str?", + "upsd_maxage": "int?", + "fake_usb_devices": "bool?", + "i_like_to_be_pwned": "bool?", + "leave_front_door_open": "bool?" + }, + "image": "hassioaddons/nut-{arch}" +} \ No newline at end of file diff --git a/nut/icon.png b/nut/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4c36debd9444eddf8ad0fc0e44c623b5ac1561d9 GIT binary patch literal 6406 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