Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Syntax van een MQTT bericht ?  (gelezen 3652 keer)

Syntax van een MQTT bericht ?
« Gepost op: 2019/02/22, 16:16:05 »
Ik probeer een ESP-8266 (micro-controller met een RaspberryPi te verbinden via het MQTT message protocol.
(Voor wie het wil weten: Wat is MQTT?:  https://www.at-automation.nl/mqtt/)
(Voor wie het wil weten: Wat is een ESP-8266? : http://domoticx.com/esp8266-wifi-algemene-informatie/

Dat werkt prima.    :)

Blijf echter met een programmeer probleem zitten.   :'(

Even ter verduidelijking:
De "ESP-8266" is de zender
De RPI is de ontvanger (server)

Zender programma:
#ESP8266  Dit is de zender
#Gedeelte van het programma

...............................
...............................
while True:
        # Grab the latest enviromental values
        envi = bme.values
        #print(envi)

        # Publish all the values via MQTT
client.publish(b'wemos', envi[0])  # <------Temperatuur (c)
        client.publish(b'wemos', envi[1])  # <------Luchtdruk (hPa)
        client.publish(b'wemos', envi[2])  # <------Vochtigheid (%)

        client.disconnect()
        sleep(5)


Ontvanger programma:
# Dit is de ontvanger
# Rapberry Pi als MQTT server (broker)
# Gedeelte van het programma

import paho.mqtt.client as mqtt
 
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
     
    # Subscribing in on_connect() - if we lose the connection and
    # reconnect then subscriptions will be renewed.
    client.subscribe("wemos")
 
# The callback for when a PUBLISH message is received fromdef on_message(client, userdata, msg):
   
def on_message(client, userdata, msg):
    print(msg.payload.decode())   # <---------- HET GAAT OM DEZE REGEL
........................................
........................................

De zender zendt dus 3 variabelen uit: env[0], env[1] en env[2]

De ontvanger ontvangt dit als:
def on_message(client, userdata, msg):
    print(msg.payload.decode())   

Het resultaat van bovenstaand print commando is :
21.06C
1034.49hPa
48.22%

Vraag:
Hoe kan ik deze 3 waarden nou toekennen aan 3 variabelen, om er "iets" mee te doen. ?
Miscere utile dulci. (Ter leering ende vermaeck)
http://henk.oegema.com  (On RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  22.04.3 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & Jetson Nano (voor AI & ML)

nahjo

  • Gast
Re: Syntax van een MQTT bericht ?
« Reactie #1 Gepost op: 2019/02/22, 16:43:41 »
iets in de geest van
TEST=msg.payload.decode()
IFS=$'\n'     # < scheidingsteken per veld
array=( $TEST )
echo ${array [0]}
echo ${array [1]}
echo ${array [2]}

Re: Syntax van een MQTT bericht ?
« Reactie #2 Gepost op: 2019/02/22, 22:37:30 »
@nahjo:  bedankt voor je reactie.
Helaas  is het niet de oplossing.

Ik heb zelf een enorme denkfout gemaakt, maar heb nu eindelijk de oplossing gevonden.
Ik was eerst in de veronderstelling dat ik een 2 dimensionale array ontving op de Rpi.
Dat is echter niet het geval:  ik zend 3 x een waarde over:
        client.publish(b'wemos', envi[0])
        client.publish(b'wemos', envi[1])
       client.publish(b'wemos', envi[2])
die niet samen een array vormen.

Heb de 3 client.publish commando's veranderd in 1 commando:
        client.publish(b'wemos', envi[0] + envi[1] + envi[2])

En  nu werkt het wel.     :D
Miscere utile dulci. (Ter leering ende vermaeck)
http://henk.oegema.com  (On RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  22.04.3 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & Jetson Nano (voor AI & ML)