#!/bin/bash # MQTT configuration attributes # https://www.home-assistant.io/integrations/sensor.mqtt/ # https://www.home-assistant.io/integrations/switch.mqtt/ # Explanation # https://www.youtube.com/watch?v=VHiCtZqllU8 # https://resinchemtech.blogspot.com/2023/12/mqtt-auto-discovery.html # Prerequesite #apt install mosquitto-clients MQTT_BROKER="hass.lan" MQTT_PORT=1883 MQTT_USERNAME="pve" MQTT_PASSWORD="TeLEARDHemAS" NAME="Host $(hostname -s)" ID="host_$(hostname -s)" TOPIC="host/$(hostname -s)" DEVICE_CLASS="power" UNIT="W" ICON="mdi:lightning-bolt" MANUFACTURER="custom" MODEL="custom" EXPIRE_AFTER_S="90" MQTT_CONFIG_TOPIC="homeassistant/sensor/${ID}/config" MQTT_STATE_TOPIC="${TOPIC}/${DEVICE_CLASS}" function send { TOPIC=$1 PAYLOAD=$2 echo "Sending payload to ${MQTT_BROKER}:${MQTT_PORT}/${TOPIC} ..." echo "$1" mosquitto_pub -h "${MQTT_BROKER}" -p "${MQTT_PORT}" -u "${MQTT_USERNAME}" -P "${MQTT_PASSWORD}" \ -t "$TOPIC" \ -m "$PAYLOAD" } function config { send "${MQTT_CONFIG_TOPIC}" "$1" } function state { send "${MQTT_STATE_TOPIC}" "$1" } function setupEntity { config "{\ \"name\": \"${DEVICE_CLASS}\",\ \"unique_id\": \"${ID}_${DEVICE_CLASS}\",\ \"device_class\": \"${DEVICE_CLASS}\",\ \"unit_of_measurement\": \"${UNIT}\",\ \"state_topic\": \"${MQTT_STATE_TOPIC}\",\ \"expire_after\": \"${EXPIRE_AFTER_S}\",\ \"icon\": \"${ICON}\",\ \"device\": {\ \"name\": \"${NAME}\",\ \"identifiers\": \"${ID}\",\ \"manufacturer\": \"${MANUFACTURER}\",\ \"model\": \"${MODEL}\"\ }}" #\"firendly_name\": \"${NAME} power\",\ # "hw_version":"1.02", # "sw_version":"2.45", # "configuration_url":"http://192.168.1.226" } function deleteEntity { config "" } if [ "$1" == "r" ]; then deleteEntity exit 0 fi if [ -n "$1" ]; then setupEntity state "$1" exit 0 fi if [ -z "$1" ]; then setupEntity exit 0 fi exit 1