diff --git a/sensors/mqtt.sh b/sensors/mqtt.sh new file mode 100755 index 0000000..ac91ea3 --- /dev/null +++ b/sensors/mqtt.sh @@ -0,0 +1,94 @@ +#!/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