updating configuration
@@ -4,7 +4,7 @@
|
|||||||
water_action:
|
water_action:
|
||||||
module: water_action
|
module: water_action
|
||||||
class: WaterValveControl
|
class: WaterValveControl
|
||||||
water_valve: switch.watercontrol_valves
|
water_valve: switch.water_valve
|
||||||
notify: telegram
|
notify: telegram
|
||||||
constraint: input_boolean.water_control
|
constraint: input_boolean.water_control
|
||||||
water_devices:
|
water_devices:
|
||||||
|
|||||||
@@ -52,7 +52,9 @@ class WaterLeak(hass.Hass):
|
|||||||
#close water valve
|
#close water valve
|
||||||
self.turn_off(self.args['valve'])
|
self.turn_off(self.args['valve'])
|
||||||
## to ensure that water is closed. It is important!!!
|
## to ensure that water is closed. It is important!!!
|
||||||
self.call_service("mqtt/publish", topic = 'home/watercontrol/bath/valve/set', payload = 'close')
|
## (was a direct MQTT publish to the retired neptun2mqtt bridge; now just
|
||||||
|
## re-issue turn_off as a best-effort duplicate call)
|
||||||
|
self.turn_off(self.args['valve'])
|
||||||
|
|
||||||
message = "ВНИМАНИЕ! В ваше отстутствие сработал датчик протечки воды ({})!!! Выключаю подачу воды.".format(self.friendly_name(entity_id))
|
message = "ВНИМАНИЕ! В ваше отстутствие сработал датчик протечки воды ({})!!! Выключаю подачу воды.".format(self.friendly_name(entity_id))
|
||||||
globals.send_telegram(self, message, target = self.args['notify'])
|
globals.send_telegram(self, message, target = self.args['notify'])
|
||||||
|
|||||||
@@ -133,18 +133,19 @@ services:
|
|||||||
options:
|
options:
|
||||||
max-size: 50m
|
max-size: 50m
|
||||||
|
|
||||||
neptun2mqtt:
|
# DISABLED 2026-07-14: migrated to neptun_smart_local HA integration, see neptun-migration-backup-*
|
||||||
build:
|
# neptun2mqtt:
|
||||||
context: ./neptun2mqtt/docker
|
# build:
|
||||||
dockerfile: Dockerfile
|
# context: ./neptun2mqtt/docker
|
||||||
restart: always
|
# dockerfile: Dockerfile
|
||||||
container_name: neptun2mqtt
|
# restart: always
|
||||||
env_file: ./neptun2mqtt/settings/neptun.env
|
# container_name: neptun2mqtt
|
||||||
logging:
|
# env_file: ./neptun2mqtt/settings/neptun.env
|
||||||
driver: json-file
|
# logging:
|
||||||
options:
|
# driver: json-file
|
||||||
max-size: "10m"
|
# options:
|
||||||
max-file: "5"
|
# max-size: "10m"
|
||||||
|
# max-file: "5"
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
image: nginx
|
image: nginx
|
||||||
|
|||||||
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
@@ -1 +1 @@
|
|||||||
{"pid": 71, "version": 1, "ha_version": "2026.7.2", "start_ts": 1784034083.5601983}
|
{"pid": 71, "version": 1, "ha_version": "2026.7.2", "start_ts": 1784057808.5709116}
|
||||||
@@ -52,7 +52,7 @@ yandex_smart_home:
|
|||||||
- switch.light_mainroom_mainlamp
|
- switch.light_mainroom_mainlamp
|
||||||
- switch.light_mainroom_spotlights
|
- switch.light_mainroom_spotlights
|
||||||
- switch.shower_mirror
|
- switch.shower_mirror
|
||||||
- switch.watercontrol_valves
|
- switch.water_valve
|
||||||
- vacuum.dreame_p2027_6b1e_robot_cleaner
|
- vacuum.dreame_p2027_6b1e_robot_cleaner
|
||||||
- light.plug_yolka
|
- light.plug_yolka
|
||||||
include_entity_globs:
|
include_entity_globs:
|
||||||
|
|||||||
@@ -1,35 +1,9 @@
|
|||||||
#################################################
|
#################################################
|
||||||
# WATER #
|
# WATER #
|
||||||
#################################################
|
#################################################
|
||||||
mqtt:
|
# NOTE 2026-07-14: MQTT-мост neptun2mqtt отключён, счётчики/клапан
|
||||||
sensor:
|
# переехали на интеграцию neptun_smart_local (entity_id sensor.counter_cold/hot
|
||||||
- unique_id: counter_cold
|
# и switch.water_valve переименованы в registry, история сохранена).
|
||||||
state_topic: 'home/watercontrol/counter2_1'
|
|
||||||
name: 'counter_cold'
|
|
||||||
value_template: '{{ (value | float ) }}'
|
|
||||||
unit_of_measurement: 'm³'
|
|
||||||
device_class: water
|
|
||||||
state_class: total_increasing
|
|
||||||
- unique_id: counter_hot
|
|
||||||
state_topic: 'home/watercontrol/counter2_2'
|
|
||||||
name: 'counter_hot'
|
|
||||||
value_template: '{{ (value | float ) }}'
|
|
||||||
unit_of_measurement: 'm³'
|
|
||||||
device_class: water
|
|
||||||
state_class: total_increasing
|
|
||||||
- unique_id: uptime_watercontrol
|
|
||||||
state_topic: 'home/watercontrol/$uptime'
|
|
||||||
name: 'uptime_watercontrol'
|
|
||||||
value_template: '{{ value | int }}'
|
|
||||||
switch:
|
|
||||||
- unique_id: water_valve
|
|
||||||
name: water_valve
|
|
||||||
state_topic: "home/watercontrol/valves"
|
|
||||||
command_topic: "home/watercontrol/valves/set"
|
|
||||||
payload_on: true
|
|
||||||
payload_off: false
|
|
||||||
optimistic: false
|
|
||||||
retain: false
|
|
||||||
|
|
||||||
template:
|
template:
|
||||||
sensor:
|
sensor:
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ new_script:
|
|||||||
- service: switch.turn_off
|
- service: switch.turn_off
|
||||||
data: {}
|
data: {}
|
||||||
target:
|
target:
|
||||||
entity_id: switch.watercontrol_valves
|
entity_id: switch.water_valve
|
||||||
- service: climate.set_preset_mode
|
- service: climate.set_preset_mode
|
||||||
data:
|
data:
|
||||||
preset_mode: away
|
preset_mode: away
|
||||||
@@ -45,7 +45,7 @@ new_script:
|
|||||||
- service: switch.turn_on
|
- service: switch.turn_on
|
||||||
data: {}
|
data: {}
|
||||||
target:
|
target:
|
||||||
entity_id: switch.watercontrol_valves
|
entity_id: switch.water_valve
|
||||||
- service: climate.set_preset_mode
|
- service: climate.set_preset_mode
|
||||||
data:
|
data:
|
||||||
preset_mode: manual
|
preset_mode: manual
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
yandex_smart_home:
|
||||||
|
filter:
|
||||||
|
include_domains:
|
||||||
|
- cover
|
||||||
|
- fan
|
||||||
|
- vacuum
|
||||||
|
include_entities:
|
||||||
|
# радиаторы
|
||||||
|
- climate.radiator_bedroom
|
||||||
|
- climate.radiator_bedroom_balcony
|
||||||
|
- climate.radiator_childroom
|
||||||
|
- climate.radiator_kitchen
|
||||||
|
- climate.radiator_mainroom
|
||||||
|
# кондиционеры
|
||||||
|
- climate.ac_mainroom
|
||||||
|
- climate.ac_kitchen
|
||||||
|
- climate.ac_childroom
|
||||||
|
- climate.ac_bedroom
|
||||||
|
# вентиляторы
|
||||||
|
- fan.ventilation_bath
|
||||||
|
- fan.ventilation_shower
|
||||||
|
- fan.ventiliatsionnaia_sistema
|
||||||
|
# свет
|
||||||
|
- light.danil_bedside_lamp_rgbww_light
|
||||||
|
- light.light_balcony_spotlight
|
||||||
|
- light.light_bath
|
||||||
|
- light.light_bath_shelf
|
||||||
|
- light.light_bedroom_mainlight
|
||||||
|
- light.light_bedroom_nightlight_left
|
||||||
|
- light.light_bedroom_nightlight_right
|
||||||
|
- light.light_bedroom_pc_nightlight
|
||||||
|
- light.light_bedroom_pc_spotlight
|
||||||
|
- light.light_bedroom_spotlights
|
||||||
|
- light.light_childroom_bed
|
||||||
|
- light.light_childroom_main
|
||||||
|
- light.light_childroom_spotlights
|
||||||
|
- light.light_hall_long
|
||||||
|
- light.light_kitchen_bar_lamp
|
||||||
|
- light.light_kitchen_set
|
||||||
|
- light.light_kitchen_spotlights
|
||||||
|
- light.light_kitchen_table_lamp
|
||||||
|
- light.light_mainroom_pc_spotlight
|
||||||
|
- light.light_shower_main_spotlights
|
||||||
|
- light.light_shower_shelf_light
|
||||||
|
- light.light_shower_shower_spotlights
|
||||||
|
- light.svetlana_bedside_lamp_rgbww_light
|
||||||
|
- media_player.bedroom_tv
|
||||||
|
- media_player.kitchen_tv
|
||||||
|
- media_player.mainroom_tv
|
||||||
|
- script.away_mode
|
||||||
|
- switch.light_bath_mirror
|
||||||
|
- switch.light_mainroom_mainlamp
|
||||||
|
- switch.light_mainroom_spotlights
|
||||||
|
- switch.shower_mirror
|
||||||
|
- switch.watercontrol_valves
|
||||||
|
- vacuum.dreame_p2027_6b1e_robot_cleaner
|
||||||
|
- light.plug_yolka
|
||||||
|
include_entity_globs:
|
||||||
|
- sensor.temperature_*_temperature
|
||||||
|
#exclude_entities:
|
||||||
|
# - light.highlight
|
||||||
|
#exclude_entity_globs:
|
||||||
|
# - sensor.weather_*
|
||||||
@@ -0,0 +1,233 @@
|
|||||||
|
version: '3'
|
||||||
|
services:
|
||||||
|
ddns:
|
||||||
|
build:
|
||||||
|
context: ./ddns/docker
|
||||||
|
env_file: ./ddns/settings/token.env
|
||||||
|
environment:
|
||||||
|
- SUBDOMAIN="home-fnv"
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
mosquitto:
|
||||||
|
build: ./mosquitto/docker
|
||||||
|
container_name: mosquitto
|
||||||
|
env_file: ./mosquitto/settings/mqtt.env
|
||||||
|
ports:
|
||||||
|
- "1883:1883"
|
||||||
|
restart: always
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: 50m
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
image: postgres:16.1
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./postgres/settings/data:/var/lib/postgresql/data
|
||||||
|
env_file: ./postgres/settings/postgres.env
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: 50m
|
||||||
|
|
||||||
|
hass:
|
||||||
|
image: "homeassistant/home-assistant:stable" #2026.4.2
|
||||||
|
#image: ghcr.io/home-assistant/home-assistant:stable
|
||||||
|
container_name: hass
|
||||||
|
volumes:
|
||||||
|
- ./hass/settings:/config
|
||||||
|
- /dev/hass-wolpipe:/dev/hass-wolpipe
|
||||||
|
- ./secrets/hass-fnv/settings/secrets.yaml:/config/secrets.yaml:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
ports:
|
||||||
|
- "8123:8123"
|
||||||
|
# - "29898:9898/udp"
|
||||||
|
# - "24321:4321/udp"
|
||||||
|
# - "251827:51827" #Homekit
|
||||||
|
devices:
|
||||||
|
- "/dev/ttyUSB0:/dev/ttyUSB0"
|
||||||
|
depends_on:
|
||||||
|
- mosquitto
|
||||||
|
- postgres
|
||||||
|
#network_mode: "host"
|
||||||
|
#privileged: true
|
||||||
|
restart: always
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:8123"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 6
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: 50m
|
||||||
|
|
||||||
|
appdaemon:
|
||||||
|
build:
|
||||||
|
context: ./appdaemon/docker
|
||||||
|
container_name: appdaemon
|
||||||
|
depends_on:
|
||||||
|
- hass
|
||||||
|
volumes:
|
||||||
|
- ./appdaemon/settings:/conf
|
||||||
|
- ./secrets/hass-fnv/settings/secrets.yaml:/conf/secrets.yaml:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
restart: always
|
||||||
|
links:
|
||||||
|
- "hass"
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: "10m"
|
||||||
|
max-file: "5"
|
||||||
|
|
||||||
|
node-red:
|
||||||
|
build:
|
||||||
|
context: ./node-red/docker
|
||||||
|
#image: nodered/node-red:latest
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Moscow
|
||||||
|
ports:
|
||||||
|
- "1880:1880"
|
||||||
|
depends_on:
|
||||||
|
- hass
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./node-red/settings/data:/data
|
||||||
|
|
||||||
|
esphome:
|
||||||
|
image: esphome/esphome:latest #2025.6 #esphome-armv7
|
||||||
|
container_name: esphome
|
||||||
|
ports:
|
||||||
|
- "6052:6052"
|
||||||
|
volumes:
|
||||||
|
- ./esphome/settings:/config
|
||||||
|
- ./secrets/hass-fnv/settings/secrets.yaml:/config/secrets.yaml:ro
|
||||||
|
#devices:
|
||||||
|
# - "/dev/ttyUSB0:/dev/ttyUSB0"
|
||||||
|
#network_mode: host
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: "10m"
|
||||||
|
max-file: "5"
|
||||||
|
|
||||||
|
zigbee2mqtt:
|
||||||
|
image: koenkk/zigbee2mqtt:latest #тут отваливается замок, поэтому не latest
|
||||||
|
container_name: zigbee2mqtt
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
volumes:
|
||||||
|
- ./zigbee2mqtt/settings:/app/data
|
||||||
|
healthcheck:
|
||||||
|
# в образе нет curl (Alpine), используем wget --spider
|
||||||
|
test: ["CMD", "wget", "--spider", "-q", "http://localhost:8080"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 6
|
||||||
|
start_period: 60s
|
||||||
|
restart: always
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: 50m
|
||||||
|
|
||||||
|
neptun2mqtt:
|
||||||
|
build:
|
||||||
|
context: ./neptun2mqtt/docker
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
restart: always
|
||||||
|
container_name: neptun2mqtt
|
||||||
|
env_file: ./neptun2mqtt/settings/neptun.env
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: "10m"
|
||||||
|
max-file: "5"
|
||||||
|
|
||||||
|
nginx:
|
||||||
|
image: nginx
|
||||||
|
hostname: nginx
|
||||||
|
container_name: nginx
|
||||||
|
links:
|
||||||
|
- "hass"
|
||||||
|
- "certbot"
|
||||||
|
volumes:
|
||||||
|
- ./nginx/settings/site-confs:/etc/nginx/conf.d
|
||||||
|
- ./certbot/settings/data:/config/keys
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
- "443:443"
|
||||||
|
restart: always
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: "10m"
|
||||||
|
max-file: "5"
|
||||||
|
|
||||||
|
certbot:
|
||||||
|
build:
|
||||||
|
context: ./certbot/docker
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
restart: always
|
||||||
|
container_name: certbot
|
||||||
|
volumes:
|
||||||
|
- ./certbot/docker/update_certs.sh:/update_certs.sh:ro
|
||||||
|
- ./certbot/settings/data:/etc/letsencrypt
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
ports:
|
||||||
|
- "8081:80"
|
||||||
|
#entrypoint: certbot
|
||||||
|
#command: certonly --standalone --agree-tos --non-interactive --email admin@yandex5.ru -d gitea.yandex5.ru
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: "10m"
|
||||||
|
max-file: "5"
|
||||||
|
|
||||||
|
#homeconnect2mqtt:
|
||||||
|
# build:
|
||||||
|
# context: ./homeconnect2mqtt/docker
|
||||||
|
# dockerfile: Dockerfile
|
||||||
|
# restart: always
|
||||||
|
# container_name: homeconnect2mqtt
|
||||||
|
# ports:
|
||||||
|
# - "5001:5000"
|
||||||
|
# env_file: ./homeconnect2mqtt/settings/homeconnect2mqtt.env
|
||||||
|
# volumes:
|
||||||
|
# - ./homeconnect2mqtt/settings/config.json:/app/config.json:ro
|
||||||
|
# logging:
|
||||||
|
# driver: json-file
|
||||||
|
# options:
|
||||||
|
# max-size: "10m"
|
||||||
|
# max-file: "5"
|
||||||
|
|
||||||
|
matter-bridge:
|
||||||
|
image: ghcr.io/t0bst4r/home-assistant-matter-hub:latest
|
||||||
|
container_name: matter-bridge
|
||||||
|
ports:
|
||||||
|
- "8482:8482"
|
||||||
|
- "5353:5353"
|
||||||
|
- "5540:5540"
|
||||||
|
- "5541:5541"
|
||||||
|
volumes:
|
||||||
|
- ./matter-bridge/settings/data:/data
|
||||||
|
- ./secrets/hass-fnv/settings/secrets.yaml:/config/secrets.yaml:ro
|
||||||
|
env_file: ./matter-bridge/settings/matter-bridge.env
|
||||||
|
network_mode: host
|
||||||
|
logging:
|
||||||
|
driver: json-file
|
||||||
|
options:
|
||||||
|
max-size: "10m"
|
||||||
|
max-file: "5"
|
||||||
|
|
||||||
|
keenetic:
|
||||||
|
build:
|
||||||
|
context: ./keenetic/docker
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: keenetic
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8001:8000"
|
||||||
|
env_file: ./keenetic/settings/keenetic.env
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
new_script:
|
||||||
|
alias: Сценарий Я Ушёл
|
||||||
|
sequence:
|
||||||
|
- service: switch.turn_off
|
||||||
|
data: {}
|
||||||
|
target:
|
||||||
|
entity_id: switch.watercontrol_valves
|
||||||
|
- service: climate.set_preset_mode
|
||||||
|
data:
|
||||||
|
preset_mode: away
|
||||||
|
target:
|
||||||
|
area_id:
|
||||||
|
- gostinaia
|
||||||
|
- kukhnia
|
||||||
|
- spalnia
|
||||||
|
- detskaia
|
||||||
|
- service: media_player.turn_off
|
||||||
|
data: {}
|
||||||
|
target:
|
||||||
|
device_id:
|
||||||
|
- 368a8521d684580dd39b88502808b3bc
|
||||||
|
- 07a253973c89fdb7e7b66174bf5a1275
|
||||||
|
- b60210b82dc048bffc5a59f683de2f0a
|
||||||
|
- service: cover.close_cover
|
||||||
|
data: {}
|
||||||
|
target:
|
||||||
|
area_id:
|
||||||
|
- gostinaia
|
||||||
|
- kukhnia
|
||||||
|
- spalnia
|
||||||
|
mode: single
|
||||||
|
icon: mdi:shield-lock
|
||||||
|
'1675839976060':
|
||||||
|
alias: Вскипяти чайник
|
||||||
|
sequence:
|
||||||
|
- service: input_select.set_options
|
||||||
|
data:
|
||||||
|
options: Boil Water
|
||||||
|
target:
|
||||||
|
entity_id: select.chunmi_a1_35e9_cook_mode
|
||||||
|
mode: single
|
||||||
|
'1676313705945':
|
||||||
|
alias: Сценарий Я Дома
|
||||||
|
sequence:
|
||||||
|
- service: switch.turn_on
|
||||||
|
data: {}
|
||||||
|
target:
|
||||||
|
entity_id: switch.watercontrol_valves
|
||||||
|
- service: climate.set_preset_mode
|
||||||
|
data:
|
||||||
|
preset_mode: manual
|
||||||
|
target:
|
||||||
|
area_id:
|
||||||
|
- gostinaia
|
||||||
|
- kukhnia
|
||||||
|
- spalnia
|
||||||
|
- detskaia
|
||||||
|
- if:
|
||||||
|
- condition: sun
|
||||||
|
before: sunset
|
||||||
|
after: sunrise
|
||||||
|
then:
|
||||||
|
- service: cover.open_cover
|
||||||
|
data: {}
|
||||||
|
target:
|
||||||
|
area_id:
|
||||||
|
- gostinaia
|
||||||
|
- kukhnia
|
||||||
|
- spalnia
|
||||||
|
mode: single
|
||||||
|
icon: mdi:shield-lock
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#################################
|
||||||
|
# HOME PRESENSE #
|
||||||
|
#################################
|
||||||
|
water_action:
|
||||||
|
module: water_action
|
||||||
|
class: WaterValveControl
|
||||||
|
water_valve: switch.watercontrol_valves
|
||||||
|
notify: telegram
|
||||||
|
constraint: input_boolean.water_control
|
||||||
|
water_devices:
|
||||||
|
- binary_sensor.washer_running # стиралка
|
||||||
|
- binary_sensor.bosch_dishwasher_running # посудомойка
|
||||||
|
global_dependencies:
|
||||||
|
- globals
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
import appdaemon.plugins.hass.hassapi as hass
|
||||||
|
import globals
|
||||||
|
|
||||||
|
#
|
||||||
|
# Water leak detector
|
||||||
|
# close water valve and send a report
|
||||||
|
#
|
||||||
|
# Args:
|
||||||
|
#
|
||||||
|
# sensor = water leak sensor group
|
||||||
|
# valve = water valve - app will close it, when leak is detected
|
||||||
|
# notify = notify name to send notification
|
||||||
|
#
|
||||||
|
# None
|
||||||
|
#
|
||||||
|
# Release Notes
|
||||||
|
#
|
||||||
|
# Version 1.0:
|
||||||
|
# Initial Version
|
||||||
|
|
||||||
|
class WaterLeak(hass.Hass):
|
||||||
|
ringtone = 2
|
||||||
|
gw_mac = ''
|
||||||
|
sensors = []
|
||||||
|
def initialize(self):
|
||||||
|
if 'sensor' not in self.args or 'valve' not in self.args or 'notify' not in self.args:
|
||||||
|
self.error("Please provide sensor, valve and notify in config!")
|
||||||
|
return
|
||||||
|
self.sensors = self.get_water_leak_sensors()
|
||||||
|
self.log("leak sensors: {}".format(self.sensors))
|
||||||
|
for sensor in self.sensors:
|
||||||
|
self.listen_state(self.water_leak, sensor)
|
||||||
|
|
||||||
|
def get_water_leak_sensors(self):
|
||||||
|
sensors = []
|
||||||
|
devices = self.get_state()
|
||||||
|
for sensor in devices:
|
||||||
|
if not sensor.startswith(self.args['sensor_prefix']):
|
||||||
|
continue
|
||||||
|
sensors.append(sensor)
|
||||||
|
return sensors
|
||||||
|
|
||||||
|
def water_leak(self, entity, attribute, old, new, kwargs):
|
||||||
|
if new == "on":
|
||||||
|
self.send_alarm(entity)
|
||||||
|
|
||||||
|
def send_alarm(self, entity_id):
|
||||||
|
self.log('water leak alarm triggered!')
|
||||||
|
if 'constraint' in self.args and not self.constrain_input_boolean(self.args['constraint']):
|
||||||
|
return
|
||||||
|
|
||||||
|
#close water valve
|
||||||
|
self.turn_off(self.args['valve'])
|
||||||
|
## to ensure that water is closed. It is important!!!
|
||||||
|
self.call_service("mqtt/publish", topic = 'home/watercontrol/bath/valve/set', payload = 'close')
|
||||||
|
|
||||||
|
message = "ВНИМАНИЕ! В ваше отстутствие сработал датчик протечки воды ({})!!! Выключаю подачу воды.".format(self.friendly_name(entity_id))
|
||||||
|
globals.send_telegram(self, message, target = self.args['notify'])
|
||||||
|
|
||||||
|
message = "Состояние датчиков протечки:\n"
|
||||||
|
for entity_id in self.sensors:
|
||||||
|
message += '{} ({}) = {}\n'.format(self.friendly_name(entity_id), entity_id, self.get_state(entity_id))
|
||||||
|
globals.send_telegram(self, message, target = self.args['notify'])
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
#################################################
|
||||||
|
# WATER #
|
||||||
|
#################################################
|
||||||
|
mqtt:
|
||||||
|
sensor:
|
||||||
|
- unique_id: counter_cold
|
||||||
|
state_topic: 'home/watercontrol/counter2_1'
|
||||||
|
name: 'counter_cold'
|
||||||
|
value_template: '{{ (value | float ) }}'
|
||||||
|
unit_of_measurement: 'm³'
|
||||||
|
device_class: water
|
||||||
|
state_class: total_increasing
|
||||||
|
- unique_id: counter_hot
|
||||||
|
state_topic: 'home/watercontrol/counter2_2'
|
||||||
|
name: 'counter_hot'
|
||||||
|
value_template: '{{ (value | float ) }}'
|
||||||
|
unit_of_measurement: 'm³'
|
||||||
|
device_class: water
|
||||||
|
state_class: total_increasing
|
||||||
|
- unique_id: uptime_watercontrol
|
||||||
|
state_topic: 'home/watercontrol/$uptime'
|
||||||
|
name: 'uptime_watercontrol'
|
||||||
|
value_template: '{{ value | int }}'
|
||||||
|
switch:
|
||||||
|
- unique_id: water_valve
|
||||||
|
name: water_valve
|
||||||
|
state_topic: "home/watercontrol/valves"
|
||||||
|
command_topic: "home/watercontrol/valves/set"
|
||||||
|
payload_on: true
|
||||||
|
payload_off: false
|
||||||
|
optimistic: false
|
||||||
|
retain: false
|
||||||
|
|
||||||
|
template:
|
||||||
|
sensor:
|
||||||
|
- name: counter_hot_outer
|
||||||
|
device_class: water
|
||||||
|
state_class: total_increasing
|
||||||
|
unit_of_measurement: 'm³'
|
||||||
|
state: "{{ states('sensor.counter_hot') | float + 88.97 | round(2) }}"
|
||||||
|
- name: counter_cold_outer
|
||||||
|
device_class: water
|
||||||
|
state_class: total_increasing
|
||||||
|
unit_of_measurement: 'm³'
|
||||||
|
state: "{{ states('sensor.counter_cold') | float + 144.7 | round(2) }}"
|
||||||
|
|
||||||
|
binary_sensor:
|
||||||
|
- name: dryer_running
|
||||||
|
state: "{{ not is_state('sensor.sushilnaia_mash_machine_state', 'stop') }}"
|
||||||
|
- name: washer_running
|
||||||
|
state: "{{ not is_state('sensor.stiralnaia_mashina_machine_state', 'stop') }}"
|
||||||
|
|
||||||
|
homeassistant:
|
||||||
|
customize:
|
||||||
|
switch.water_valve:
|
||||||
|
friendly_name: Подача воды
|
||||||
|
binary_sensor.dryer_running:
|
||||||
|
friendly_name: "Сушильная машина"
|
||||||
|
binary_sensor.washer_running:
|
||||||
|
friendly_name: "Стиральная машина"
|
||||||
|
|
||||||
|
sensor.counter_hot_outer:
|
||||||
|
friendly_name: "Счетчик Внешний Горячая"
|
||||||
|
sensor.counter_cold_outer:
|
||||||
|
friendly_name: "Счетчик Внешний Холодная"
|
||||||