From 427a3b4e50a27354a14fa96fc3065dfeff507276 Mon Sep 17 00:00:00 2001 From: Minims Date: Mon, 13 Jan 2025 22:49:34 +0100 Subject: [PATCH] add: SomfyProtect2MQTT-legacy --- SomfyProtect2MQTT-legacy/CHANGELOG.md | 226 ++++++++++++++++++ SomfyProtect2MQTT-legacy/DOCS.md | 121 ++++++++++ SomfyProtect2MQTT-legacy/Dockerfile | 24 ++ SomfyProtect2MQTT-legacy/README.md | 24 ++ SomfyProtect2MQTT-legacy/build.yaml | 14 ++ SomfyProtect2MQTT-legacy/config.yaml | 69 ++++++ SomfyProtect2MQTT-legacy/icon.png | Bin 0 -> 19236 bytes SomfyProtect2MQTT-legacy/logo.png | Bin 0 -> 19236 bytes .../etc/services.d/SomfyProtect2MQTT/finish | 12 + .../etc/services.d/SomfyProtect2MQTT/run | 27 +++ SomfyProtect2MQTT-legacy/translations/en.yaml | 4 + 11 files changed, 521 insertions(+) create mode 100644 SomfyProtect2MQTT-legacy/CHANGELOG.md create mode 100644 SomfyProtect2MQTT-legacy/DOCS.md create mode 100644 SomfyProtect2MQTT-legacy/Dockerfile create mode 100644 SomfyProtect2MQTT-legacy/README.md create mode 100644 SomfyProtect2MQTT-legacy/build.yaml create mode 100644 SomfyProtect2MQTT-legacy/config.yaml create mode 100644 SomfyProtect2MQTT-legacy/icon.png create mode 100644 SomfyProtect2MQTT-legacy/logo.png create mode 100755 SomfyProtect2MQTT-legacy/rootfs/etc/services.d/SomfyProtect2MQTT/finish create mode 100755 SomfyProtect2MQTT-legacy/rootfs/etc/services.d/SomfyProtect2MQTT/run create mode 100644 SomfyProtect2MQTT-legacy/translations/en.yaml diff --git a/SomfyProtect2MQTT-legacy/CHANGELOG.md b/SomfyProtect2MQTT-legacy/CHANGELOG.md new file mode 100644 index 0000000..19b5b67 --- /dev/null +++ b/SomfyProtect2MQTT-legacy/CHANGELOG.md @@ -0,0 +1,226 @@ +# Changelog + +## 2024.9.0 + +- fix: resubscribe to all topic on MQTT reconnect + +## 2024.3.0 + +- fix: remove human_detect_enabled +- chore: set version to 2024.3.0 +- feature: Add device_class motion for PIR and safety for IntelliTag + +## 2024.1.0 + +- fix: default value for update_available + +## 2023.12.2 + +- fix: Immediate Alarm Status on update + +## 2023.12.1 + +- fix: reduce WebSocket time before restart + +## 2023.12.0 + +- fix: Improve WebSocket +- chore: Update requirements + +## 2023.11.0 + +- fix: do not ask for snapshot if shutter is closed + +## 2023.10.0 + +- feature: Allow camera streaming via MQTT Camera OR WebRTC Camera (go2rtc) + +## 2023.9.4 + +- fix: CPU Load + +## 2023.9.3 + +- fix: MQTT True/False Command +- fix: restart process on failure + +## 2023.9.2 + +- fix: supported_fetaures to 14 + https://github.com/Minims/SomfyProtect2MQTT/issues/55 + + It won't be automatically fixed. + You have to remove the alarm device first. + Then restart the Addon. + Update your lovelave entity & automatation. + + If i make the update on my side, + the alarm device can change his name (installation before 2023.8.0) + and it will break your automation & dashboard. + +## 2023.9.1 + +- Fix: Test Siren buttons +- Feat: Add Beta Video Streaming + https://github.com/Minims/SomfyProtect2MQTT#video-streaming + +## 2023.8.3 + +- Add Watermark on snapshot + +## 2023.8.2 + +- Test Siren buttons +- Update MQTT to feat HA 2023.8.0 +- Improve WebSocket + +## 2023.8.1 + +- Fix Load Issue +- Retain all MQTT Messages + +## 2023.8.0 + +- Improve WebSocket messages + +## 2023.7.0 + +- Update requirements +- Fix installation failure because of PyYaml + +## 2023.6.1 + +- Clean old binary_sensor device_lost + +## 2023.6.0 + +- Change Versioning to 2023.6.0 +- Add some detailled log to debug +- Update Requirements +- Add scenarios in logs for some future features +- Improve WebSocket +- Breaking Change: update device_lost binary_sensor to device_tracker +- Fix Typo in device_lost / presence + +## 0.2.9 + +- Fix ambient_light_threshold & smart_alarm_duration + +## 0.2.8 + +- Fix smart_alarm_duration & lighting_trigger + +## 0.2.7 + +- Wait 2 sec to upadte device after action. +- Add GET scenarios-core & scenario (for later usage) +- Update README +- Add Reboot / Halt button for Camera and Link +- Fix smart_alarm_duration + +## 0.2.6 + +- Update device after action +- Update shutter_state switch +- Fix lighting_state switch +- Update lighting_state +- Add new sensors/switchs +- Add generic update device +- Add User api calls +- Add User Model +- Update Action List +- Update version to 0.2.6 +- Remove signal_strength device_class on % signal + +## 0.2.5 + +- Add Debug log on Site and Devices +- Add interndoor type + +## 0.2.4 + +- Fix security.level.change + +## 0.2.3 + +- Fix battery_low + +## 0.2.2 + +- Fix recalibration_required + +## 0.2.1 + +- Add IntellTag Motion Sensor (Alpha) +- Fix Update Device/Site + +## 0.2.0 + +- Fix intellitag door type +- Fix camera video type +- Add Somfy One/One+ +- Improve Logging + +## 0.1.9.8 + +- Update Add-on to new S6: https://developers.home-assistant.io/blog/2022/05/12/s6-overlay-base-images/ + +## 0.1.9 + +- Add some new entities +- Fix Websocket Refresh Token +- Add motion sensor when alarm is triggered + +## 0.1.8 + +- Add MQTT ssl +- Bump SomfyProtect2MQTT + +## 0.1.7 + +- Fix request_token + +## 0.1.6 + +- Add Manual Snapshot mode +- Add Old MyFox Security Camera +- Add Smoke Detector +- Add Extender +- Change default code value to 0 + +## 0.1.5 + +- Fix homeassistant_config schema + +## 0.1.4 + +- Use SomfyProtect2MQTT 0.1.3 +- Fix OutDoor Camera Snapshot +- Add possibilty to setup a code on alarm panel +- Allow to disable code on arm and/or disarm + +## 0.1.3 + +- Use SomfyProtect2MQTT 0.1.2 +- Fix Stop Alarm +- Fix Trigger Alarm +- Do not publish unwanted devices + +## 0.1.2 + +- Add build.json file (thanks to @Minims) + +## 0.1.1 + +- Changed tar link + +## 0.1.0 + +- Addon renamed "SomfyProtect2MQTT-dev" +- Lot of code rewritten (thanks to @Minims) +- Based on dev branch +- Added logo, icon, changelog, docs... + +## 0.0.1 to 0.0.4 + +- Initial version with minor fixes diff --git a/SomfyProtect2MQTT-legacy/DOCS.md b/SomfyProtect2MQTT-legacy/DOCS.md new file mode 100644 index 0000000..a510592 --- /dev/null +++ b/SomfyProtect2MQTT-legacy/DOCS.md @@ -0,0 +1,121 @@ +# Home Assistant Add-on: SomfyProtect2MQTT + +## Installation + +Follow these steps to get the add-on installed on your system: + +1. Navigate in your Home Assistant frontend to **Supervisor** -> **Add-on Store**. +2. Find the "SomfyProtect2MQTT" add-on and click it. +3. Click on the "INSTALL" button. + +## How to use + +1. Perform the SomfyProtect2MQTT add-on configuration (see below) +2. Save the add-on configuration by clicking the "SAVE" button. +3. Start the add-on. + +## Configuration + +Add-on configuration: + +```yaml +somfy_protect: + username: mail@example.org + password: iliketurtles + sites: + - Maison + +homeassistant_config: + code: 1234 + code_arm_required: false + code_disarm_required: true + +mqtt: + host: 192.168.1.1 + port: "1883" + ssl: false + username: homeassistant + password: homeassistant + client-id: somfy-protect + topic_prefix: somfyProtect2mqtt + ha_discover_prefix: homeassistant +delay_site: "10" +delay_device: "60" +manual_snapshot: false +streaming: mqtt +debug: false +``` + +### Option group `somfy_protect` + +The following options are for the option group: `somfy_protect`. + +#### Options `username` and `password` + +Username and password to use to authenticate to Somfy account. + +#### Option `sites` + +A list of sites to retrieve datas. + +### Option group `homeassistant_config` + +The following options are for the option group: `homeassistant_config`. + +#### Option `code` + +A code to arm/desarm in HA. Set to 0 to disable. + +#### Option `code_arm_required` + +Set to `false` if you want to arm without code + +#### Option `code_disarm_required` + +Set to `false` if you want to disarm without code + +### Option group `mqtt` + +The following options are for the option group: `mqtt`. + +#### Options `host`, `port`, `ssl`, `username` and `password` + +Host and credentials to use to authenticate to MQTT broker. + +#### Option `client-id` + +MQTT client identifier. + +#### Option `topic_prefix` + +MQTT prefix to use for data topic. + +#### Option `ha_discover_prefix` + +MQTT prefix to use for Home-Assistant discovery. + +### Option `delay_site` + +Define delay in seconds to update sites. + +### Option `delay_device` + +Define delay in seconds to update devices. + +### Option `manual_snapshot` + +Enable/Disable manual_snapshot. +false: Only update snapshot when switch 'snapshot' is triggered +true: snapshot auto update every 1min. + +### Option `streaming` + +Streaming Mode. +mqtt: Send image by image to MQTT camera in HA +go2rtc: write the url in /config/somfyprotect2mqtt/stream*url* +to be read with echo source: https://github.com/AlexxIT/go2rtc#source-echo +and WebRTC Camera:https://github.com/AlexxIT/WebRTC + +### Option `debug` + +Enable/Disable debug mode. diff --git a/SomfyProtect2MQTT-legacy/Dockerfile b/SomfyProtect2MQTT-legacy/Dockerfile new file mode 100644 index 0000000..dd7d3cd --- /dev/null +++ b/SomfyProtect2MQTT-legacy/Dockerfile @@ -0,0 +1,24 @@ +# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-dockerfile +ARG BUILD_FROM +FROM $BUILD_FROM +ENV LANG C.UTF-8 + +# SomfyProtect2MQTT version +ARG VERSION=2024.9.0 + +# Install required packages +RUN apk add --no-cache py3-pip py3-opencv ffmpeg +RUN pip3 install --no-cache-dir python-json2yaml==0.1.1 + +# Download source and untar +WORKDIR /usr/bin +ADD "https://github.com/Minims/SomfyProtect2MQTT/archive/refs/tags/${VERSION}.tar.gz" ${VERSION}.tar.gz +RUN tar -xvf ${VERSION}.tar.gz +RUN mv /usr/bin/SomfyProtect2MQTT-${VERSION} /usr/bin/SomfyProtect2MQTT + +# Install python3 requirements +WORKDIR /usr/bin/SomfyProtect2MQTT/somfyProtect2Mqtt +RUN pip3 install --no-cache-dir -r requirements/addon.txt + +# Copy root filesystem +ADD rootfs / diff --git a/SomfyProtect2MQTT-legacy/README.md b/SomfyProtect2MQTT-legacy/README.md new file mode 100644 index 0000000..9d2d437 --- /dev/null +++ b/SomfyProtect2MQTT-legacy/README.md @@ -0,0 +1,24 @@ +# Home Assistant Add-on: SomfyProtect2MQTT Legacy + +[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/minims) + +[somfyprotect2mqtt]: https://github.com/Minims/SomfyProtect2MQTT + +![Supports aarch64 Architecture][aarch64-shield] +![Supports amd64 Architecture][amd64-shield] +![Supports armhf Architecture][armhf-shield] +![Supports armv7 Architecture][armv7-shield] +![Supports i386 Architecture][i386-shield] + +[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg +[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg +[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg +[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg +[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg + +Allows you to control your Somfy Home Alarm without the App. + +It bridges events and allows you to control your Alarm devices via MQTT. +In this way you can integrate it to HomeAssistant. + +See [SomfyProtect2MQTT] for more details. diff --git a/SomfyProtect2MQTT-legacy/build.yaml b/SomfyProtect2MQTT-legacy/build.yaml new file mode 100644 index 0000000..0a5ec77 --- /dev/null +++ b/SomfyProtect2MQTT-legacy/build.yaml @@ -0,0 +1,14 @@ +# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-dockerfile +build_from: + aarch64: ghcr.io/hassio-addons/base:15.0.5 + amd64: ghcr.io/hassio-addons/base:15.0.5 + armhf: ghcr.io/hassio-addons/base:15.0.5 + armv7: ghcr.io/hassio-addons/base:15.0.5 + i386: ghcr.io/hassio-addons/base:15.0.5 +labels: + org.opencontainers.image.title: "Home Assistant Add-on: Minims add-on" + org.opencontainers.image.description: "Minims add-on to use as a blueprint for new add-ons." + org.opencontainers.image.source: "https://github.com/Minims/homeassistant-addons" + org.opencontainers.image.licenses: "Apache License 2.0" +args: + VERSION: "2024.9.0" diff --git a/SomfyProtect2MQTT-legacy/config.yaml b/SomfyProtect2MQTT-legacy/config.yaml new file mode 100644 index 0000000..41a4311 --- /dev/null +++ b/SomfyProtect2MQTT-legacy/config.yaml @@ -0,0 +1,69 @@ +--- +# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config +name: SomfyProtect2MQTT Legacy +version: 2024.9.0 +slug: somfy-protect-2-mqtt-legacy +description: Publish Somfy Home Alarm as MQTT messages +url: https://github.com/Minims/homeassistant-addons/tree/main/SomfyProtect2MQTT +startup: application +services: + - mqtt:need +boot: auto +arch: + - armhf + - armv7 + - aarch64 + - amd64 + - i386 +init: false +map: + - share:rw + - config:rw +options: + somfy_protect: + username: mail@example.org + password: iliketurtles + sites: + - Maison + homeassistant_config: + code: "0" + code_arm_required: false + code_disarm_required: false + mqtt: + host: 192.168.x.x + port: 1883 + ssl: false + username: homeassistant + password: homeassistant + client-id: somfy-protect + topic_prefix: somfyProtect2mqtt + ha_discover_prefix: homeassistant + delay_site: "10" + delay_device: "60" + manual_snapshot: false + streaming: mqtt + debug: false +schema: + somfy_protect: + username: str + password: str + sites: + - str + homeassistant_config: + code: int? + code_arm_required: bool + code_disarm_required: bool + mqtt: + host: str + port: int + ssl: bool + username: str? + password: str? + client-id: str? + topic_prefix: str? + ha_discover_prefix: str? + delay_site: int? + delay_device: int? + manual_snapshot: bool + streaming: str? + debug: bool diff --git a/SomfyProtect2MQTT-legacy/icon.png b/SomfyProtect2MQTT-legacy/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba949dbeac108fd7d5d97c2da1c1c8f2ba905f3 GIT binary patch literal 19236 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

cadKwTb4;nnwX(U9G2W@t(popkhycUtXlgK zFzIQGlTqkNqdMkOUP}s$M}fd+nfOlpCq5KE#1n;Y2md!?mH~|`iM4=Dd8et zPA;S2u{sJGE1)bAoB6658`<=%GY6>AhtVys&^jZnPT^d&2C(7GBEiXw1|2Vl@-AIh zQb6jL_(yO_buO7d%pS1R++C8I*7M4{6476ptc`2!zW`*SNE(NFA9 zWv-@swy>3f9X-0_nj_encks70k3LF0}(j% z&vR!*A5^mMC!wjRd(~m&um|4{bhonH{_8r(PnF1*x^&qUF1_-~iO=pUUb}8uK~pS@ zA)lkkilTDg9qtUi$$mMNzXB3*RE;}>G0+TuBoVP={{o@3BUUFSb-dds7P7oQC=`%Z zfuyiKfYyO(mM_lq(Ze!E8KeV#hH&@80C(y1ejVB$3u}{<>}oG+Hqmc7t_KV>vG4{S zU@~%7oZb&CbPEwWX90|}Ie6+!3bz1aoy2cG1miRY$3_ezYfP@Zb_WIOwDn%p_Z_tJ zCVm^>fpvWJ_G#WfNuRm=(KT+(#RYX=)z$!CXOSN$utZY-|K6WP&@1c{3IG5A07*qo IM6N<$f~J}@F#rGn literal 0 HcmV?d00001 diff --git a/SomfyProtect2MQTT-legacy/logo.png b/SomfyProtect2MQTT-legacy/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba949dbeac108fd7d5d97c2da1c1c8f2ba905f3 GIT binary patch literal 19236 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

cadKwTb4;nnwX(U9G2W@t(popkhycUtXlgK zFzIQGlTqkNqdMkOUP}s$M}fd+nfOlpCq5KE#1n;Y2md!?mH~|`iM4=Dd8et zPA;S2u{sJGE1)bAoB6658`<=%GY6>AhtVys&^jZnPT^d&2C(7GBEiXw1|2Vl@-AIh zQb6jL_(yO_buO7d%pS1R++C8I*7M4{6476ptc`2!zW`*SNE(NFA9 zWv-@swy>3f9X-0_nj_encks70k3LF0}(j% z&vR!*A5^mMC!wjRd(~m&um|4{bhonH{_8r(PnF1*x^&qUF1_-~iO=pUUb}8uK~pS@ zA)lkkilTDg9qtUi$$mMNzXB3*RE;}>G0+TuBoVP={{o@3BUUFSb-dds7P7oQC=`%Z zfuyiKfYyO(mM_lq(Ze!E8KeV#hH&@80C(y1ejVB$3u}{<>}oG+Hqmc7t_KV>vG4{S zU@~%7oZb&CbPEwWX90|}Ie6+!3bz1aoy2cG1miRY$3_ezYfP@Zb_WIOwDn%p_Z_tJ zCVm^>fpvWJ_G#WfNuRm=(KT+(#RYX=)z$!CXOSN$utZY-|K6WP&@1c{3IG5A07*qo IM6N<$f~J}@F#rGn literal 0 HcmV?d00001 diff --git a/SomfyProtect2MQTT-legacy/rootfs/etc/services.d/SomfyProtect2MQTT/finish b/SomfyProtect2MQTT-legacy/rootfs/etc/services.d/SomfyProtect2MQTT/finish new file mode 100755 index 0000000..d63c017 --- /dev/null +++ b/SomfyProtect2MQTT-legacy/rootfs/etc/services.d/SomfyProtect2MQTT/finish @@ -0,0 +1,12 @@ +#!/usr/bin/env bashio +# ============================================================================== +# Take down the S6 supervision tree when example fails +# s6-overlay docs: https://github.com/just-containers/s6-overlay +# ============================================================================== + +if [[ "$1" -ne 0 ]] && [[ "$1" -ne 256 ]]; then + bashio::log.warning "Halt add-on" + /run/s6/basedir/bin/halt +fi + +bashio::log.info "Service restart after closing" diff --git a/SomfyProtect2MQTT-legacy/rootfs/etc/services.d/SomfyProtect2MQTT/run b/SomfyProtect2MQTT-legacy/rootfs/etc/services.d/SomfyProtect2MQTT/run new file mode 100755 index 0000000..4349783 --- /dev/null +++ b/SomfyProtect2MQTT-legacy/rootfs/etc/services.d/SomfyProtect2MQTT/run @@ -0,0 +1,27 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Start the example service +# s6-overlay docs: https://github.com/just-containers/s6-overlay +# ============================================================================== + +# Add your code here + +#!/usr/bin/env bashio + +bashio::log.info "Generating config.yaml from options.json" +echo '# Generated by homeassistant, do not edit!' > /usr/bin/SomfyProtect2MQTT/somfyProtect2Mqtt/config/config.yaml.tmp +echo '# Edit configuration only at the Add-on configuration tab!' >> /usr/bin/SomfyProtect2MQTT/somfyProtect2Mqtt/config/config.yaml.tmp +json2yaml /data/options.json >> /usr/bin/SomfyProtect2MQTT/somfyProtect2Mqtt/config/config.yaml.tmp +sed 's/ -/ -/' /usr/bin/SomfyProtect2MQTT/somfyProtect2Mqtt/config/config.yaml.tmp > /usr/bin/SomfyProtect2MQTT/somfyProtect2Mqtt/config/config.yaml +bashio::log.info "Configuration :" +bashio::log.info "$(cat /usr/bin/SomfyProtect2MQTT/somfyProtect2Mqtt/config/config.yaml)" + +debug="" +if $(bashio::config.true debug); then + bashio::log.info "Will be started in debug mode" + debug="-v" +fi + +bashio::log.info "Image build" +bashio::log.info "starting original stuff..." +exec python3 /usr/bin/SomfyProtect2MQTT/somfyProtect2Mqtt/main.py -c /usr/bin/SomfyProtect2MQTT/somfyProtect2Mqtt/config/config.yaml $debug diff --git a/SomfyProtect2MQTT-legacy/translations/en.yaml b/SomfyProtect2MQTT-legacy/translations/en.yaml new file mode 100644 index 0000000..70de024 --- /dev/null +++ b/SomfyProtect2MQTT-legacy/translations/en.yaml @@ -0,0 +1,4 @@ +configuration: + message: + name: Message + description: The message that will be printed to the log when starting this example add-on.