-
-
Save nofuturekid/12cb8f6aa2d9f48d4db756232901f66d 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