Working on MQTT

This commit is contained in:
Florian Klemenz 2024-10-20 22:27:12 +02:00
parent c3eb1a408b
commit 8092424bd6
2 changed files with 88 additions and 17 deletions

View File

@ -11,22 +11,55 @@
# Prerequesite # Prerequesite
#apt install mosquitto-clients #apt install mosquitto-clients
MQTT_BROKER="hass.lan" source ~/.mqtt-hass.conf
MQTT_PORT=1883
MQTT_USERNAME="pve" #MQTT_BROKER=""
MQTT_PASSWORD="TeLEARDHemAS" #MQTT_PORT=1883
#MQTT_USERNAME=""
#MQTT_PASSWORD=""
#TYPE="power"
#NAME="Host $(hostname -s)"
#ID="host_$(hostname -s)"
#TOPIC="host/$(hostname -s)"
LC_NAME=${DEVICE_NAME,,}
ID=${LC_NAME// /_}
TOPIC=${LC_NAME// //}
NAME="Host $(hostname -s)" case ${TYPE} in
ID="host_$(hostname -s)" "power")
TOPIC="host/$(hostname -s)" DEVICE_CLASS="power"
UNIT="W"
ICON="mdi:lightning-bolt"
;;
"voltage")
DEVICE_CLASS="voltage"
UNIT="V"
ICON="mdi:sine-wave"
;;
"temperature")
DEVICE_CLASS="temperature"
UNIT="°C"
ICON="mdi:thermometer"
;;
"humidity")
DEVICE_CLASS="humidity"
UNIT="%"
ICON="mdi:water-percent"
;;
*)
echo "Unknown sensor type: ${TYPE}" >2
exit 1
;;
esac
DEVICE_CLASS="power"
UNIT="W"
ICON="mdi:lightning-bolt"
MANUFACTURER="custom" MANUFACTURER="custom"
MODEL="custom" MODEL="custom"
EXPIRE_AFTER_S="90" EXPIRE_AFTER_S="600"
MQTT_CONFIG_TOPIC="homeassistant/sensor/${ID}/config" MQTT_CONFIG_TOPIC="homeassistant/sensor/${ID}/config"
MQTT_STATE_TOPIC="${TOPIC}/${DEVICE_CLASS}" MQTT_STATE_TOPIC="${TOPIC}/${DEVICE_CLASS}"
@ -35,7 +68,8 @@ function send {
TOPIC=$1 TOPIC=$1
PAYLOAD=$2 PAYLOAD=$2
echo "Sending payload to ${MQTT_BROKER}:${MQTT_PORT}/${TOPIC} ..." echo "Sending payload to ${MQTT_BROKER}:${MQTT_PORT}/${TOPIC} ..."
echo "$1" echo "TOPIC=$TOPIC"
echo "PAYLOAD=$PAYLOAD"
mosquitto_pub -h "${MQTT_BROKER}" -p "${MQTT_PORT}" -u "${MQTT_USERNAME}" -P "${MQTT_PASSWORD}" \ mosquitto_pub -h "${MQTT_BROKER}" -p "${MQTT_PORT}" -u "${MQTT_USERNAME}" -P "${MQTT_PASSWORD}" \
-t "$TOPIC" \ -t "$TOPIC" \
-m "$PAYLOAD" -m "$PAYLOAD"
@ -51,7 +85,7 @@ function state {
function setupEntity { function setupEntity {
config "{\ config "{\
\"name\": \"${DEVICE_CLASS}\",\ \"name\": \"${NAME}\",\
\"unique_id\": \"${ID}_${DEVICE_CLASS}\",\ \"unique_id\": \"${ID}_${DEVICE_CLASS}\",\
\"device_class\": \"${DEVICE_CLASS}\",\ \"device_class\": \"${DEVICE_CLASS}\",\
\"unit_of_measurement\": \"${UNIT}\",\ \"unit_of_measurement\": \"${UNIT}\",\
@ -59,7 +93,7 @@ function setupEntity {
\"expire_after\": \"${EXPIRE_AFTER_S}\",\ \"expire_after\": \"${EXPIRE_AFTER_S}\",\
\"icon\": \"${ICON}\",\ \"icon\": \"${ICON}\",\
\"device\": {\ \"device\": {\
\"name\": \"${NAME}\",\ \"name\": \"${DEVICE_NAME}\",\
\"identifiers\": \"${ID}\",\ \"identifiers\": \"${ID}\",\
\"manufacturer\": \"${MANUFACTURER}\",\ \"manufacturer\": \"${MANUFACTURER}\",\
\"model\": \"${MODEL}\"\ \"model\": \"${MODEL}\"\

View File

@ -32,9 +32,9 @@ for PLUGIN in ${PLUGINS}; do
#echo "${CMD}" #echo "${CMD}"
DATA=$(eval $CMD) DATA=$(eval $CMD)
#echo "-----------------" echo "-----------------"
#echo "$DATA" echo "$DATA"
#echo "-----------------" echo "-----------------"
TABLE_NAME="home_${PLUGIN}" # default TABLE_NAME="home_${PLUGIN}" # default
@ -47,6 +47,43 @@ for PLUGIN in ${PLUGINS}; do
SQL=$(echo $LINE | sed -E "s/(.*)\.(.*) (.*)/INSERT INTO ${TABLE_NAME} (source, metric, value) VALUES (\"${SOURCE}\",\"\1\", \"\3\");/") SQL=$(echo $LINE | sed -E "s/(.*)\.(.*) (.*)/INSERT INTO ${TABLE_NAME} (source, metric, value) VALUES (\"${SOURCE}\",\"\1\", \"\3\");/")
echo $SQL echo $SQL
echo $SQL | mysql --host="192.168.0.12" --database="${DATABASE}" --user="${USER}" --password="${PASSWORD}" echo $SQL | mysql --host="192.168.0.12" --database="${DATABASE}" --user="${USER}" --password="${PASSWORD}"
MQTT_OK=true
case $PLUGIN in
"433mhz")
LINE_ROOM=${LINE%%_*}
LINE_TYPE=${LINE##*_}
LINE_TYPE=${LINE_TYPE%%.value*}
LINE_VALUE=${LINE##* }
echo "${LINE_ROOM} ${LINE_TYPE} ${LINE_VALUE}"
;;
*)
MQTT_OK=false
;;
esac
case $LINE_TYPE in
"Luftfeuchte")
TYPE="humidity"
;;
"Temperatur")
TYPE="temperature"
;;
"Spannung")
TYPE="voltage"
;;
*)
MQTT_OK=false
;;
esac
if [ $MQTT_OK = "true" ];
then
MQTT="NAME=\"${LINE_TYPE}\" DEVICE_NAME=\"${PLUGIN} ${LINE_ROOM}\" TYPE=\"${TYPE}\" ${SCRIPT_PATH}/mqtt.sh ${LINE_VALUE}"
echo "$MQTT"
#eval $MQTT
fi
done # LINE done # LINE
done # PLUGINS done # PLUGINS