Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
amipo_mqtt [2019/11/09 09:36]
bigMax
amipo_mqtt [2019/11/12 00:19] (Version actuelle)
Benjamin Labomedia [Visualisation]
Ligne 18: Ligne 18:
 Pour visualiser les données publiées en live : [[ https://​www.amipo.mby.ovh/​grafana/​d/​l9dEFqAWz/​amipo-capteurs?​refresh=5s&​orgId=1 | lien vers le grafana de l'​Amipo ]] Pour visualiser les données publiées en live : [[ https://​www.amipo.mby.ovh/​grafana/​d/​l9dEFqAWz/​amipo-capteurs?​refresh=5s&​orgId=1 | lien vers le grafana de l'​Amipo ]]
  
-{{tag>​amipo realisations_logicielles}}+===== Envoyer des données issues d'un port série via mqtt ===== 
 +Un script gore en python : 
 +<code lang="​python">​ 
 +#​!/​usr/​bin/​python 
 +
 +#simple app to read string from serial port 
 +#and publish via MQTT 
 +
 +#uses the Python MQTT client from the Mosquitto project 
 +#​http://​mosquitto.org 
 +
 +#Andy Piper http://​andypiper.co.uk 
 +#​2011/​09/​15 
 + 
 +import serial 
 +import paho.mqtt.client as mqtt #import the client1 
 +import os 
 +import time 
 + 
 +serialdev = '/​dev/​ttyACM0'​ 
 +broker_address="​amipo.mby.ovh"​ 
 +port = 1883 
 + 
 + 
 +#MQTT callbacks 
 + 
 +def on_connect(rc):​ 
 +    if rc == 0: 
 +    #rc 0 successful connect 
 +        print "​Connected"​ 
 +    else: 
 +        raise Exception 
 + 
 + 
 +def on_publish(val):​ 
 +    print "​Published ", val 
 + 
 +############​ 
 +def on_message(client,​ userdata, message): 
 +    print("​message received " ,​str(message.payload.decode("​utf-8"​))) 
 +    print("​message topic=",​message.topic) 
 +    print("​message qos=",​message.qos) 
 +    print("​message retain flag=",​message.retain) 
 +########################################​ 
 + 
 + 
 +#called on exit 
 +#close serial, disconnect MQTT 
 + 
 +def cleanup():​ 
 +    print "​Ending and cleaning up" 
 +    ser.close() 
 +    client.disconnect() 
 + #​mqttc.disconnect() 
 + 
 + 
 +try: 
 +    print "​Connecting... ", serialdev 
 +    #connect to serial port 
 +    ser = serial.Serial(serialdev,​ 115200, timeout=20) 
 +except: 
 +    print "​Failed to connect serial"​ 
 +    #unable to continue with no serial input 
 +    raise SystemExit 
 + 
 + 
 +try: 
 +    #​ser.flushInput() 
 +    #create an mqtt client 
 +    mypid = os.getpid() 
 +    client_uniq = "​arduino_pub_"​+str(mypid) 
 + #​print("​creating new instance"​) 
 +    client = mqtt.Client(client_uniq) #create new instance 
 +    client.on_message=on_message #attach function to callback 
 +    print("​connecting to broker"​) 
 +    client.connect(broker_address) #connect to broker 
 +    client.loop_start() #start the loop 
 +    print("​Subscribing to topic","​amipo/​radioactiviy1"​) 
 +    client.subscribe("​amipo/​radioactiviy1"​) 
 +    #remain connected to broker 
 +    while True: 
 +    #read data from serial and publish 
 +        line = ser.readline() 
 +        print(line) 
 +        #split line as it contains V,temp 
 +        list = line.split("​ ") 
 +        #second list element is temp 
 +        temp = list[1].rstrip() 
 +        print("​Publishing message to topic","​amipo/​radioactiviy1",​ temp) 
 +        client.publish("​amipo/​radioactiviy1",​temp) 
 +        #​time.sleep(4) # wait 
 +    client.loop_stop() #stop the loop 
 + 
 + 
 +# handle list index error (i.e. assume no data received) 
 +except (IndexError):​ 
 +    print "No data received within serial timeout period"​ 
 +    cleanup() 
 +# handle app closure 
 +except (KeyboardInterrupt):​ 
 +    print "​Interrupt received"​ 
 +    cleanup() 
 +except (RuntimeError):​ 
 +    print "​uh-oh! time to die" 
 +    cleanup() 
 +</​code>​ 
 +{{tag>​amipo realisations_logicielles ​mqtt }}
  • amipo_mqtt.txt
  • Dernière modification: 2019/11/12 00:19
  • par Benjamin Labomedia