Nieuws:

We zijn er weer.

Na lange tijd van afwezigheid zijn we er weer  :laugh:
We hebben alle wachtwoorden gereset, je oude wachtwoord werkt niet meer.Je moet via het "wachtwoord vergeten"-linkje je wachtwoord resetten. Je krijgt hiervoor een mailtje op het adres dat je bij ons geregistreerd hebt.

De komende tijd zijn we nog druk bezig om de rest van de site op te bouwen, dus het kan zijn dat sommige onderdelen (tijdelijk) niet werken.

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

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

Offline henkoegema

  • Lid
    • PA2HO
  • Steunpunt: Nee
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 18.04.  Radio Amateur callsign: PA2HO Interesses: Raspberry Pi & Arduino

Offline nahjo

  • Lid
  • Steunpunt: Nee
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]}

Offline henkoegema

  • Lid
    • PA2HO
  • Steunpunt: Nee
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 18.04.  Radio Amateur callsign: PA2HO Interesses: Raspberry Pi & Arduino