updating configuration

This commit is contained in:
Your Name
2026-07-14 20:03:59 +00:00
parent 8d06593338
commit f07dc7b8c9
40 changed files with 4593 additions and 48 deletions
@@ -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'])
+13 -12
View File
@@ -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
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

+1 -1
View File
@@ -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}
+1 -1
View File
@@ -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:
+4 -30
View File
@@ -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:
@@ -62,4 +36,4 @@ homeassistant:
sensor.counter_hot_outer: sensor.counter_hot_outer:
friendly_name: "Счетчик Внешний Горячая" friendly_name: "Счетчик Внешний Горячая"
sensor.counter_cold_outer: sensor.counter_cold_outer:
friendly_name: "Счетчик Внешний Холодная" friendly_name: "Счетчик Внешний Холодная"
+2 -2
View File
@@ -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_*
File diff suppressed because it is too large Load Diff
@@ -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
File diff suppressed because it is too large Load Diff
@@ -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: "Счетчик Внешний Холодная"