Nieuws:

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

Auteur Topic: Syntax van een MQTT bericht ?  (gelezen 4307 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. ?
𝕸𝖎𝖘𝖈𝖊𝖗𝖊 𝖚𝖙𝖎𝖑𝖊 𝖉𝖚𝖑𝖈𝖎. (Ter leering ende vermaeck)
𝕹𝖎𝖑 𝖛𝖔𝖑𝖊𝖓𝖙𝖎𝖇𝖚𝖘 𝖆𝖗𝖉𝖚𝖚𝖒. (Niets is moeilijk voor hen die willen)
https://henk.oegema.com  (Op RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  24.04 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & TELLO drone (voor AI)

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
𝕸𝖎𝖘𝖈𝖊𝖗𝖊 𝖚𝖙𝖎𝖑𝖊 𝖉𝖚𝖑𝖈𝖎. (Ter leering ende vermaeck)
𝕹𝖎𝖑 𝖛𝖔𝖑𝖊𝖓𝖙𝖎𝖇𝖚𝖘 𝖆𝖗𝖉𝖚𝖚𝖒. (Niets is moeilijk voor hen die willen)
https://henk.oegema.com  (Op RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  24.04 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & TELLO drone (voor AI)