Notes de programme simples Pub / Sub en Python

Site de référence

Spécifications MQTT La partie de base a été expliquée et la compréhension de MQTT a été approfondie.

J'ai fait référence au programme. https://www.sunbit.co.jp/blog/2019/11/21802/ https://qiita.com/rui0930/items/1d139248b440650dc952

Préparation à l'utilisation

Pour utiliser mosquitto broker avec python, utilisez pho-mqtt.

pip install pho-mqtt

Cette fois, le courtier, l'abonné et l'éditeur fonctionnent tous sur le même terminal.

Informations sur le terminal
Linux mqtt-test 4.15.0-43-generic #46~16.04.1-Ubuntu SMP Fri Dec 7 13:31:08 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

** Lancer le courtier ** Cette fois, pour vérifier le fonctionnement sur localhost, il démarrera avec le port et l'adresse IP par défaut. Puisqu'il n'est pas nécessaire de modifier les paramètres ou de créer la configuration, démarrez le courtier avec la commande suivante.

mosquitto

** Description du programme de fonctionnement ** L'éditeur et l'abonné fonctionnent dans une boucle infinie. "Hello" est envoyé 4 fois en boucle vers "Topic1" comme données de transmission de l'éditeur. Après cela, le contenu est que les informations telles que l'utilisation de la mémoire acquise en exécutant la commande libre sont continuellement envoyées à "Topic / Mem" toutes les minutes. Vous pouvez l'envoyer ou le modifier à l'abonné en modifiant la structure hiérarchique du sujet.

Le programme d'abonné continue d'obtenir les données de sujet souscrites dans une boucle infinie.

** programme d'abonné **

 #!/usr/bin/env python
 # -*- coding: utf-8 -*-

#Subscriber
import paho.mqtt.client as mqtt

#mqtt broker
MQTT_HOST = 'localhost'
MQTT_PORT = 1883
MQTT_KEEP_ALIVE = 60

#broker connection
def on_connect(mqttc, obj, flags, rc):
    print("rc:" + str(rc))

#receve message
def on_message(mqttc, obj, msg):
    print(msg.topic + " " + str(msg.qos) + " " + str(msg.payload))

mqttc = mqtt.Client()
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.connect(MQTT_HOST, MQTT_PORT, MQTT_KEEP_ALIVE)


#Abonnez-vous au sujet1
mqttc.subscribe("Topic1/#")

#boucle
mqttc.loop_forever()

** programme éditeur **

 #!/usr/bin/env python
 # -*- coding: utf-8 -*-

#Publisher
from time import sleep
import subprocess
import paho.mqtt.client as mqtt

#MQTT Broker
MQTT_HOST = 'localhost'
MQTT_PORT = 1883
MQTT_KEEP_ALIVE = 60
MQTT_TOPIC = 'Topic1'
MQTT_SUB_TOPIC_MEM='Topic1/Mem'

def on_connect(mqttc, obj, flags, rc):
    print("rc:" + str(rc))

def res_cmd(cmd):
    return subprocess.Popen(cmd, stdout=subprocess.PIPE,shell=True).communicate()[0]

mqttc = mqtt.Client()
mqttc.on_connect = on_connect

#Connexion courtier
mqttc.connect(MQTT_HOST, MQTT_PORT, MQTT_KEEP_ALIVE)
#Commencer le traitement
mqttc.loop_start()
for i in range(3):
    mqttc.publish(MQTT_TOPIC, 'hello')
    sleep(1)

cmd = 'free'
ans_str = res_cmd(cmd)
while True:
    mqttc.publish(MQTT_SUB_TOPIC_MEM, ans_str)
    sleep(60)

mqttc.disconnect()

Résultat d'exécution

subscriber スクリーンショット 2020-06-25 20.10.55.png

publisher スクリーンショット 2020-06-25 20.10.39.png

Recommended Posts

Notes de programme simples Pub / Sub en Python
Ecrire un programme de dynamique moléculaire super simple en python
Implémentation d'un algorithme simple en Python 2
Exécutez un algorithme simple en Python
Lors de l'écriture d'un programme en Python
[MQTT / Python] Implémentation d'une classe qui fait Pub / Sub de MQTT en Python
Un client HTTP simple implémenté en Python
J'ai fait un programme de gestion de la paie en Python!
Essayez de dessiner une animation simple en Python
Créer une application GUI simple en Python
Ecrire un programme de chiffrement Caesar en Python
Ecrire une méthode de cupidité simple en Python
Ecrire un plugin Vim simple en Python 3
Configurer un serveur HTTPS simple avec Python 3
GRPC simple en Python
Un programme qui supprime les instructions en double en Python
Analyse de données en Python: une note sur line_profiler
Créer un modèle d'investissement dynamique simple en Python
Configurer un serveur SMTP simple en Python
J'ai créé un programme cryptographique César en Python.
Recevez des données de dictionnaire à partir de programmes Python avec AppleScript
Créez un Slackbot simple avec un bouton interactif en python
Choses à noter lors de l'initialisation d'une liste en Python
Créer une fonction en Python
Créer un dictionnaire en Python
Note d'entrée Python dans AtCoder
Créer un bookmarklet en Python
Analyse de régression simple avec Python
Dessinez un cœur en Python
Client IRC simple avec python
Une note sur [python] __debug__
Programme Python du "Livre qui enseigne facilement la programmation difficile"
J'ai fait un jeu de frappe simple avec tkinter de Python
Un moyen simple d'éviter plusieurs boucles for en Python
Une note quand j'ai touché l'API de reconnaissance faciale de Microsoft avec Python
J'ai essayé "un programme qui supprime les déclarations en double en Python"
[Note] Importation de fichiers dans le répertoire parent en Python
Probablement dans un serpent Nishiki (Titre original: Peut-être en Python)
[python] Gérer les fonctions dans une liste
Première analyse de régression simple en Python
[Note] Projet Euler en Python (problème 1-22)
OAuth 2 simple avec Python (urllib + oauthlib)
Créer un conteneur DI avec Python
Python: une note sur les classes 1 "Résumé"
Dessinez une matrice de diagramme de dispersion avec python
Remarque à propos de get_scorer de sklearn
ABC166 en Python A ~ C problème
Ecrire des algorithmes A * (A-star) en Python
Programme de diagnostic de compatibilité écrit en python
Créer un fichier binaire en Python
Résoudre ABC036 A ~ C avec Python
Ecrire un graphique à secteurs en Python
Ecrire le plugin vim en Python
Écrire une recherche de priorité en profondeur en Python
Clé étrangère dans SQLite de Python [Note]