From b5912297281be7e07f946823df5217b40f09b579 Mon Sep 17 00:00:00 2001 From: sirmrak Date: Mon, 12 Oct 2026 13:33:44 +0300 Subject: [PATCH] Update files/mqtt_ha_discovery.sh --- files/mqtt_ha_discovery.sh | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/files/mqtt_ha_discovery.sh b/files/mqtt_ha_discovery.sh index a98ee4e..3294cab 100644 --- a/files/mqtt_ha_discovery.sh +++ b/files/mqtt_ha_discovery.sh @@ -1,6 +1,6 @@ #!/bin/sh -# Sends MQTT Discovery configs, publishes temperature, -# and initializes device states ONLY on the first run after reboot. +# Отправляет конфигурацию для MQTT Discovery, публикует температуру +# и инициализирует состояния устройств ТОЛЬКО при первом запуске после перезагрузки MQTT_HOST=$(uci get openwrt_ha.main.host) MQTT_PORT=$(uci get openwrt_ha.main.port) @@ -32,6 +32,7 @@ convert_state() { fi } +# === ИНИЦИАЛИЗАЦИЯ СОСТОЯНИЙ (только при первом запуске) === INIT_DONE_FILE="${STATES_DIR}/.initialized" if [ ! -f "$INIT_DONE_FILE" ]; then @@ -75,15 +76,18 @@ if [ ! -f "$INIT_DONE_FILE" ]; then logger -t "wifi_tracker" "Initialization complete." fi +# === ТЕМПЕРАТУРА (каждый запуск) === TEMP_RAW=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null) if [ -n "$TEMP_RAW" ]; then TEMP_C=$(echo "$TEMP_RAW" | awk '{ printf "%.1f", $1 / 1000 }') $PUB -t "${BASE_TOPIC}/sensor/temperature/state" -m "$TEMP_C" fi -DISCOVERY_TEMP="{\"name\":\"OpenWrt Temperature\",\"stat_t\":\"${BASE_TOPIC}/sensor/temperature/state\",\"dev_cla\":\"temperature\",\"unit_of_meas\":\"°C\",\"uniq_id\":\"openwrt_temp\",\"dev\":{\"ids\":\"openwrt_router\",\"name\":\"OpenWrt Router\",\"mf\":\"OpenWrt\",\"mdl\":\"Router\"}}" -$PUB -t "homeassistant/sensor/openwrt_router/temp/config" -m "$DISCOVERY_TEMP" +# === DISCOVERY ДЛЯ ТЕМПЕРАТУРЫ (каждый запуск) === +DISCOVERY_TEMP="{\"name\":\"OpenWrt Temperature\",\"stat_t\":\"${BASE_TOPIC}/sensor/temperature/state\",\"dev_cla\":\"temperature\",\"unit_of_meas\":\"°C\",\"uniq_id\":\"${BASE_TOPIC}_temp\",\"dev\":{\"ids\":\"${BASE_TOPIC}_router\",\"name\":\"OpenWrt Router\",\"mf\":\"OpenWrt\",\"mdl\":\"Router\"}}" +$PUB -t "homeassistant/sensor/${BASE_TOPIC}_router/temp/config" -m "$DISCOVERY_TEMP" +# === DISCOVERY ДЛЯ УСТРОЙСТВ (каждый запуск) === i=1 while true; do device_name="device${i}" @@ -98,12 +102,12 @@ while true; do if [ "$DEVICE_TYPE" = "alarm" ]; then STATE_TOPIC="${BASE_TOPIC}/alarm/device_${i}/state" - DISCOVERY="{\"name\":\"${DEVICE_NAME_TEXT}\",\"stat_t\":\"${STATE_TOPIC}\",\"pl_on\":\"online\",\"pl_off\":\"offline\",\"dev_cla\":\"connectivity\",\"uniq_id\":\"openwrt_alarm_${DEVICE_ID}\",\"dev\":{\"ids\":\"openwrt_router\",\"name\":\"OpenWrt Router\",\"mf\":\"OpenWrt\",\"mdl\":\"Router\"}}" - $PUB -t "homeassistant/binary_sensor/openwrt_router/${DEVICE_ID}/config" -m "$DISCOVERY" + DISCOVERY="{\"name\":\"${DEVICE_NAME_TEXT}\",\"stat_t\":\"${STATE_TOPIC}\",\"pl_on\":\"online\",\"pl_off\":\"offline\",\"dev_cla\":\"connectivity\",\"uniq_id\":\"${BASE_TOPIC}_alarm_${DEVICE_ID}\",\"dev\":{\"ids\":\"${BASE_TOPIC}_router\",\"name\":\"OpenWrt Router\",\"mf\":\"OpenWrt\",\"mdl\":\"Router\"}}" + $PUB -t "homeassistant/binary_sensor/${BASE_TOPIC}_router/${DEVICE_ID}/config" -m "$DISCOVERY" else STATE_TOPIC="${BASE_TOPIC}/device_tracker/device_${i}/state" - DISCOVERY="{\"name\":\"${DEVICE_NAME_TEXT}\",\"stat_t\":\"${STATE_TOPIC}\",\"pl_home\":\"home\",\"pl_not_home\":\"not_home\",\"src_type\":\"router\",\"uniq_id\":\"openwrt_tracker_${DEVICE_ID}\",\"dev\":{\"ids\":\"openwrt_router\",\"name\":\"OpenWrt Router\",\"mf\":\"OpenWrt\",\"mdl\":\"Router\"}}" - $PUB -t "homeassistant/device_tracker/openwrt_router/${DEVICE_ID}/config" -m "$DISCOVERY" + DISCOVERY="{\"name\":\"${DEVICE_NAME_TEXT}\",\"stat_t\":\"${STATE_TOPIC}\",\"pl_home\":\"home\",\"pl_not_home\":\"not_home\",\"src_type\":\"router\",\"uniq_id\":\"${BASE_TOPIC}_tracker_${DEVICE_ID}\",\"dev\":{\"ids\":\"${BASE_TOPIC}_router\",\"name\":\"OpenWrt Router\",\"mf\":\"OpenWrt\",\"mdl\":\"Router\"}}" + $PUB -t "homeassistant/device_tracker/${BASE_TOPIC}_router/${DEVICE_ID}/config" -m "$DISCOVERY" fi i=$((i + 1)) done \ No newline at end of file