Created
August 21, 2023 09:06
-
-
Save jannickfahlbusch/f623dd8f056d03d0517e182cd493e81b to your computer and use it in GitHub Desktop.
HomeAssistant MQTT Autodiscovery for wmbusmeters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usb/bin/env bash | |
| # Required variables | |
| MQTT_HOST="" # Your mqtt host | |
| MQTT_USERNAME="" # Your mqtt username | |
| MQTT_PASSWORD="" # Your mqtt password | |
| METERS_FILES="" # Location of wmbusmeters.d directory | |
| MQTT_DISCOVERY_PREFIX="homeassistant" | |
| tmpdir="$(mktemp -d)" | |
| echo "Using temporary folder $tmpdir for all files" | |
| get_template_files() { | |
| wget -O $tmpdir/main.zip https://github.com/wmbusmeters/wmbusmeters-ha-addon/archive/refs/heads/main.zip 2> /dev/null | |
| unzip $tmpdir/main.zip -d $tmpdir | |
| } | |
| read_properties() { | |
| file="$1" | |
| while IFS="=" read -r key value; do | |
| case "$key" in | |
| "name") name="$value" ;; | |
| "id") id="$value" ;; | |
| "driver") driver="$value" ;; | |
| esac | |
| done < "$file" | |
| } | |
| submit_autodiscovery() { | |
| local name=$1 | |
| local driver=$2 | |
| local id=$3 | |
| file="$tmpdir/wmbusmeters-ha-addon-main/wmbusmeters-ha-addon-edge/mqtt_discovery/${driver}.json" | |
| if test -f "$file"; then | |
| for attribute in $(jq --raw-output -c -M '. | keys[]' $file) | |
| do | |
| filter=".${attribute}.component" | |
| component=$(jq --raw-output -c -M $filter $file) | |
| if [[ ! -z "$component" ]] && [ $component != "null" ] ; then | |
| topic="$MQTT_DISCOVERY_PREFIX/$component/wmbusmeters/${id}_$attribute/config" | |
| filter=".${attribute}.discovery_payload" | |
| payload=$(jq --raw-output -c -M $filter $file) | |
| payload="${payload//\{attribute\}/${attribute}}" | |
| payload="${payload//\{name\}/${name}}" | |
| payload="${payload//\{id\}/${id}}" | |
| payload="${payload//\{driver\}/${driver}}" | |
| echo " Add/update topic: $topic" | |
| mosquitto_pub -h $MQTT_HOST -u $MQTT_USERNAME -P $MQTT_PASSWORD -r -t "${topic}" -m "${payload}" | |
| echo $payload | |
| fi | |
| done | |
| else | |
| echo "Autodiscovery file for driver $driver not found." | |
| fi | |
| } | |
| parse_meters() { | |
| for meter in $METERS_FILES/*; do | |
| read_properties $meter | |
| echo "Adding Autodiscovery for meter ${name} with driver ${driver}" | |
| submit_autodiscovery $name $driver $id | |
| done | |
| } | |
| get_template_files | |
| parse_meters |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment