Outils pour utilisateurs

Outils du site


amipo_mqtt

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édentesRévision précédente
Prochaine révision
Révision précédente
amipo_mqtt [2019/11/09 08:36] bigMaxamipo_mqtt [2020/07/25 09:13] (Version actuelle) bigMax
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 max}}
amipo_mqtt.1573288570.txt.gz · Dernière modification : 2019/11/09 08:36 de bigMax