Hallo Zusammen,
ich habe folgendes bash Script
#!/bin/bash
ADDRESS_FILE=~/addresses.txt
BAUDRATE=2400
DEVICE=/dev/ttyUSB0
MQTT_HOST=192.168.0.34
MQTT_Port=1883
MQTT_USER=mqtt_user
MQTT_PASS=floete123
MQTT_TOPIC=mbusmeters
if [ ! -f $ADDRESS_FILE ]; then
mbus-serial-scan-secondary -b $BAUDRATE $DEVICE \
| sed -e 's/^.*y address \([0-9A-Fa-f]\+\) .*$/\1/' > $ADDRESS_FILE
fi
echo -e "\n $(date)"
echo "Sending data to host $MQTT_HOST as user '$MQTT_USER' using topic '$MQTT_TOPIC/'."
while read -r 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 -b $BAUDRATE $DEVICE "$ameter" | xq . | sed -e "s/@/_/")
/usr/bin/mosquitto_pub -h $MQTT_HOST -p $MQTT_Port -u $MQTT_USER -P $MQTT_PASS -t $MQTT_TOPIC/"$ameter" -m "${METER_DATA}"
BYTCNT=$(echo "$METER_DATA" | wc -c)
echo " $BYTCNT bytes sent"
echo "$METER_DATA" | jq '{ id : .MBusData.SlaveInformation.Id, manufacturer: .MBusData.SlaveInformation.Manufacturer, medium : .MBusData.SlaveInformation.Medium, records : .MBusData.DataRecord | length }'
done < <(cat $ADDRESS_FILE)
Display More
Was mache ich damit?
Ich habe an einem Raspberry einen USB-Pegelwandler für einen Meter-Bus und lese damit Sensoren aus.
Speicherort /home/pi/bin/read_send_meters_mqtt.sh
wenn ich dieses script ohne besondere Rechte einfach in der Konsole ausführe, läuft das Script sauber durch.
Jetzt möchte dieses gerne per Crontab -e für den Start jede Minute ausführen.
Der Cronjob wird auch gestartet. Es werden aber nicht sauber die Daten gelesen.
Ich habe schonmal mit dem Entwickler gesprochen. Er meinte, das dem Cronjob die Rechte für die USB-Schnittstelle fehlt.
Kann mir hier einer weiterhelfen? Ich habe schonmal versucht, über
sudo usermod -a -G dialout pi
die rechte zu setzten.
Aber das hat nicht funktioniert.
Grüße
Kasper027