INT 21h

Hi, I am Vladimir Smagin, SysAdmin. Telegram Email GPG

Взаимодействие с MQTT из Python

№ 8455 В разделах: Программирование Электроника от September 8th, 2017,

Так уж случилось, что я стал крутым пацаном и начал делать интернет вещей 😀 В общем, для начала необходимо установить модуль paho-mqtt. А еще лучше сначала сделать виртуальное окружение и уже потом туда установить всё нужное.

sudo apt install python3-venv
cd /opt && pyvenv mymqtt
source mymqtt/bin/activate
pip install wheel
pip install paho-mqtt

Ну вот вроде и всё. Теперь можно приступать к работе 🙂 Открываем документацию и читаем. На этом запись можно заканчивать, но я всё-таки покажу вам пару примеров. Я люблю разносить все в разные файлы поэтому некоторые вещи будут работать через библиотеки в поддиректориях.

Итак, я создал директорию с проектом, где есть поддиректория libs и именно в нее я положу свою библиотечку для работы с mqtt.

import sys 
sys.path.append("..")

import paho.mqtt.subscribe as subscribe
import paho.mqtt.publish as publish
import config

def pub(topic, msg, retained=False):
    print("Connecting {}".format(config.mqtt_cred["hostname"]))
    publish.single(topic,msg,hostname=config.mqtt_cred["hostname"],
        port=config.mqtt_cred["port"],auth=config.mqtt_cred["auth"],retain=retained)

def sub(callback_function, topic, wait=False):
    subscribe.callback(callback_function, topic, hostname=config.mqtt_cred["hostname"],
        port=config.mqtt_cred["port"],auth=config.mqtt_cred["auth"])

Сразу же заметна вторая строка. Прикол в том, что у меня на уровне выше лежит конфигурационный файл и я просто добавил в PYTHON_PATH его местоположение. В функции sub я сделал передачу callback функции через параметры, а сама функция описана в файле основной программы. Конечно, я мог ее написать прямо тут, но тогда бы я считал это говнокодом 🙂

Теперь можно поугарать в файле основной программы

from libs import libmqtt

def any_message_received(client, userdata, message):
    '''Callback function on_message, catch any message and process it'''
    topic=message.topic
    value = message.payload.decode("utf-8")
    print(topic, value)
libmqtt.sub(any_message_received, "#")

any_message_received и есть та самая callback функция. На нее я возложил парсинг всего, что приходит из шины. Муторно, но зато делает то, что мне нужно 🙂

А теперь вишенка! Конфиг

'''Config module'''

mqtt_cred={
    "hostname": "myserver",
    "port": 5883,
    "auth": {"username":"mymqtt","password":"longlongpen1s"}
    }

Нет комментариев »

Повышение точности измерения датчиком DS18B20 с помощью радиатора

№ 8394 В разделе "Электроника" от August 13th, 2017,

Приклеил датчик температуры к радиатору чтобы сгладить резкие перепады температуры при открывании дверей помещения, измерении температуры во время облачности, порывов ветра и даже нагреву самого датчика при его опросе. Обычным клеем не очень удобно, поэтому капаем суперклеем (он же цианакрилат в народе) и щедро засыпаем обычной пищевой содой. Покрепче эпоксидки будет + очень высокая плотность, которая улучшает теплообмен с радиатором.

Нет комментариев »

Микроблог перейти

# 2018-11-14 12:01:24

Hetzner тихо и незаметно обновили свой terraform провайдер для поддержки volumes, который до сих пор в бете, не дает создавать более 100 гигов и работает только в определенных регионах, но по факту он не дает создать более 10 гигов потому, что лимиты аккаунты надо поднять, которые нельзя поднять потому, что volumes сука в бете!

# 2018-11-07 23:17:33

Столько работал над плейбуками, что чувствую себя инженером по прочистке ансибла


© Vladimir Smagin, 2005-2018. Копирование материалов без разрешения запрещено. GPG 0x29AE91B1A37721C3
Яндекс.Метрика

Fortune cookie: There was a young man from Dallas Who had an exceptional phallus. He couldn't find room In any girl's womb Without rubbing it first with Vitalis.