5
Rated 5 out of 5
5 von 5 Sternen (basierend auf 10 Bewertungen)
Ausgezeichnet100%
Sehr gut0%
Durchschnittlich0%
Schlecht0%
Furchtbar0%

Tolle Einführung, die mir sehr geholfen hat

Rated 5 out of 5
26. Januar 2022

Ich habe mir erlaubt, dein Script etwas zu erweitern:
#!/bin/bash
# Code Basis stammt von https://the78mole.de/taking-your-m-bus-online-with-mqtt/
# Ich habe es nur ergänzt um alle Datenfelden flexibel zum MQTT Server zu übertragen
# Getestet nur mit einem Wärmezähler. Ich hoffe es felxibel genug auch für andere Geräte
ADDRESS_FILE=“./addresses.txt“
BAUDRATE=2400
DEVICE=/dev/ttyAMA0
MQTT_HOST=HOSTNAME
MQTT_USER=MQTT_USER
MQTT_PASS=MQTT_PASSWORT
MQTT_TOPIC=MQTT_TOPIC
#Basis Informationen
modbus_array[0]=.MBusData.SlaveInformation.Id
modbus_array[1]=.MBusData.SlaveInformation.Manufacturer
modbus_array[2]=.MBusData.SlaveInformation.Version
modbus_array[3]=.MBusData.SlaveInformation.Status
#———————————————————-

while read ameter
do
echo -n „Getting data from $ameter…“
# The sed is for replacing the @ with _ to be able to match on it in HASS templates
METER_DATA=$(mbus-serial-request-data-multi-reply -b $BAUDRATE $DEVICE $ameter | xq . | sed -e ’s/@/_/‘)
/usr/bin/mosquitto_pub -h $MQTT_HOST -u $MQTT_USER -P $MQTT_PASS
-t $MQTT_TOPIC/$ameter -m „${METER_DATA}“

BYTCNT=$(echo „$METER_DATA“ | wc -c)
echo “ $BYTCNT bytes sent“
# Basis Parameter auslesen
for Parameter in „${modbus_array[@]}“
do
ausgabe=$(echo $METER_DATA | jq „$Parameter“ )
#Punkte in / konvertieren für mqtt
Parameter=$(echo $Parameter | sed -e ’s!.!/!g‘)
/usr/bin/mosquitto_pub -h $MQTT_HOST -u $MQTT_USER -P $MQTT_PASS -t $MQTT_TOPIC/$ameter$Parameter -m „$ausgabe“
#Ausgabe des MQTT Pfades und Wertes
echo „$MQTT_TOPIC/$ameter$Parameter -> $ausgabe“
done
#Schleife über alle Data Records
for row in $(echo $METER_DATA | jq ‚.MBusData.DataRecord | keys‘); do
#Leere Datenfelder am Anfang und Ende abfangen
if [[ ${row} != „[“ ]] && [[ ${row} != „]“ ]]
then
#Das Komma am Ende entfernen
id=$(echo „${row}“ | sed -e ’s/,//‘)

#Einen Int Wert daraus machen
nummer=$((„$id“+0))
#Alle Keys (Datenpunkte) auslesen
for name in $(echo $METER_DATA | jq „.MBusData.DataRecord[$nummer] | keys“); do

#Leere Datenfelder am Anfang und Ende abfangen
if [[ ${name} != „[“ ]] && [[ ${name} != „]“ ]]
then

# Ein paar Sonderzeichen aus dem Pfad entfernen
pfad=“.MBusData.DataRecord[$nummer].${name}“
pfad=$(echo $pfad | sed ’s/“//g‘)
pfad=$(echo $pfad | sed ’s/,//g‘)

#Den richtigen Wert aus dem json holen
wert=$(echo $METER_DATA | jq $pfad)
#Umformatieren für eine MQTT Pfad
pfad=$(echo $pfad | sed ’s/.///g‘)
pfad=$(echo $pfad | sed ’s/[/_/g‘)
pfad=$(echo $pfad | sed ’s/]//g‘)
#Zum MQTT Server senden
/usr/bin/mosquitto_pub -h $MQTT_HOST -u $MQTT_USER -P $MQTT_PASS -t $MQTT_TOPIC/$ameter$pfad -m „$wert“
echo „$MQTT_TOPIC/$ameter$pfad –> $wert“

fi
done
fi

done
done < <(cat $ADDRESS_FILE)

Martin

Antwort von MolesBlog

Hallo Martin,
schön, dass es Dir geholfen und gefallen hat.
Danke auch für die Verbesserungsvorschläge. Die werde ich mir mal genauer anschauen und einpflegen.
Grüße,
Daniel (the78mole)

Super Sache …………….

Rated 5 out of 5
20. Januar 2022

…. kann man so ein fertiges Modul auch erwerben ?
Bin grad so in das Thema Smart Home mit NodeRed eingestiegen und
meine (ur-) alte Heizung wär natürlich schon ein interessantes Thema …

Manfred

Antwort von MolesBlog

Ja klar, schicke mir doch bitte eine Email an me@the78mole.de. Bausatz ginge Recht flott, für eine fertig aufgebaute Platine musst Du mit ein paar Tage Zeit geben…

Great tutorial!

Rated 5 out of 5
7. Januar 2022

I never thought I could read 8 M-bus meters in Homeassistant.
Thank you very much for this great job.

Fernando

Kamstrup Multical21

Rated 5 out of 5
20. Dezember 2021

Hello,
Great article! Do you think I will be able to read data from my water meter Multical21 to Home Assistant by using the same approach?
Thank you.
Kind regards

Gires

perfect Tutorial

Rated 5 out of 5
16. Dezember 2021

schönes Tutorial, danke dafür.
Ist es möglich hier einen Offset zu setzen?
Mein Zähler liefert mir nur den Wert ab in Betriebnahme. Habe aber ein großen unterschied zum tatsächlichen Wert

Patrick