Datenübertragung per MQTT kommt nicht an

ich bitte um tipps (bzw. um username und passwort, denn vielleicht liegts ja daran): ich möchte (nämlich zum ersten mal überhaupt per mqtt) daten einspeisen bei hiveeyes, die ich bereits woanders hochgelanden habe und nun von dort ziehe (erspart mir erstmal die um-/neuprogrammierung des sensor-nodes selbst). folgendes script erledigt die arbeit:

#!/bin/sh
while :
do
  curl -X 'GET' 'https://data.sensor.community/airrohr/v1/sensor/70795/' -H 'accept: */*' -s  | jq '.' > datadump.json
  cpm=`cat datadump.json | jq -r '.[0].sensordatavalues[0].value'`
  time=`cat datadump.json | jq -r '.[0].timestamp'`
  time=`date --date=@$(date -u "+%s" --date="$time") '+%Y-%m-%d %H:%M:%S'`
  sv=`echo "$cpm/60*0.081438" | bc -l | awk '{printf("%.3f \n",$1)}'`
  # publish to hiveeyes
  # define target address
  BROKER=swarm.hiveeyes.org
  CHANNEL=hiveeyes/27041c2a-8afd-4a1e-b3ae-44233fa1f06b/mois/yun
  # send data
  echo '{"geiger_CountPerMinute": '$cpm', "geiger_GammaRadiation": '$sv' }' | mosquitto_pub -h $BROKER -t $CHANNEL/dat>
  echo 'Sending CountPerMinute='$cpm', GammaRadiation='$sv'µSv/h ...'  
  sleep 130
done

das mit der datenextraktion klappt. das script läuft durch:

me@mois:~$ bash /home/me/log-geiger.sh
Sending CountPerMinute=86, GammaRadiation=0.117 µSv/h …
Sending CountPerMinute=79, GammaRadiation=0.107 µSv/h …
Sending CountPerMinute=74, GammaRadiation=0.100 µSv/h …
Sending CountPerMinute=79, GammaRadiation=0.107 µSv/h …
Sending CountPerMinute=73, GammaRadiation=0.099 µSv/h …
Sending CountPerMinute=83, GammaRa…usw…

aber ich sehe nichts ankommen bei Wtee
ich habe mich an der hiveeyes-anleitung für mqtt-datenübermittlung orientiert.
hätte ich sonst noch was berücksichtigen müssen? (sicher, sonst würds ja klappen ;-)
für alle hinweise im voraus dankbar: markus

Ja, bestimmt. Kann ich Dir morgen gern einrichten.

super. eilt nicht. ich freu mich.
m

1 Like

jetzt sind alle panels bereit - fehlt nur noch der datenfluss…

Hi Markus,

ich habe Dir gerade Zugangsdaten für folgenden Kanal per PM geschickt. Das ist Deiner, stimmts?

Ansonsten könntest Du aber auch eine kürzere Imker ID bekommen, wenn Du magst.

Viele Grüße,
Andreas.

danke!

und: gerne auf irgendwas kurzes sprechendes umstellen, z.b. “mois” oder “b-mois”. oder muss ich dann in den bestehenden desktops alle panels und abfragen und alles manuell umstellen? dann lieber erstmal nicht.

Gerne! Viel Freude bei der Datenakquise und -beobachtung.

Genau.

Ack ;].

danke mal wieder!
jetzt laufen die daten rein:

der vollständigkeit halber nochmal meine scripte.

log-geiger.sh:

#!/bin/sh
export PYTHONPATH="/home/me/.local/lib/python3.9/site-packages:/home/me/beescale"
while :
do
  curl -X 'GET' 'https://data.sensor.community/airrohr/v1/sensor/70795/' -H 'accept: */*' -s  | jq '.' > datadump.json
  cpm=`cat datadump.json | jq -r '.[0].sensordatavalues[0].value'`
  time=`cat datadump.json | jq -r '.[0].timestamp'`
  time=`date --date=@$(date -u "+%s" --date="$time") '+%Y-%m-%dT%H:%M:%S'`
  sv=`echo "$cpm/60*0.081438" | bc -l | awk '{printf("%.3f \n",$1)}'`
  python -c "from log_geiger import send_measurement; send_measurement('yun', '$time', '$cpm', '$sv')"
  echo $time': Sending CountPerMinute='$cpm', GammaRadiation='$sv'µSv/h ...'
  sleep 130
done

braucht noch log_geiger.py (angepasst von hier):

import json
import os
import paho.mqtt.client as mqtt

def send_measurement(yun, Timestamp, CountPerMinute, GammaRadiation):

    # The MQTT host
    mqtt_host = 'swarm.hiveeyes.org'

    mqtt_port = 1883
    mqtt_user = 'xxxxxxx'
    mqtt_pass = 'xxxxxxx'

    # The MQTT topic
    # See also: https://hiveeyes.org/docs/system/vendor/hiveeyes-one/topology.html#rationale
    mqtt_topic = u'{realm}/{network}/{gateway}/{node}/message-json'.format(
        realm   = 'hiveeyes',                                   # Kollektiv
        network = '27041c2a-8afd-4a1e-b3ae-44233fa1f06b',       # Imker-ID
        gateway = 'mois',                                       # Standort
        node    = 'yun'                                         # Beute
    )

    # Define measurement
    measurement = {
        'Timestamp':        Timestamp,
        'CountPerMinute':   CountPerMinute,
        'GammaRadiation':   GammaRadiation,
    }

    # Serialize data as JSON
    payload = json.dumps(measurement)

    # Publish to MQTT
    pid = os.getpid()
    client_id = '{}:{}'.format('hiverize', str(pid))
    backend = mqtt.Client(client_id=client_id, clean_session=True)
    backend.username_pw_set(mqtt_user, mqtt_pass)
    backend.connect(mqtt_host, mqtt_port)
    backend.publish(mqtt_topic, payload)
    backend.disconnect()

python brauchte bei mir noch:
pip install paho-mqtt

starten tuts als log-geiger.service.

2 Likes