MQTT: протокол обмена данными
MQTT — это стандартизированный протокол обмена сообщениями для взаимодействия между компьютерами. Протокол отличается простой реализацией и высокой эффективностью передачи данных. MQTT поддерживает обмен сообщениями в обоих направлениях: от устройств к облаку и обратно.
Вам необходимо добавить следующие параметры в файл config.yaml:
MQTT:
url: "amqp://guest:guest@localhost:5672/%2F"
exchange_name: "unicounter"
queue_name: "unicounter"
routing_key: "unicounter"
app_id: "unicounter-1"
period_sec: 1
debug: true
Мы используем стандартный протокол ampq.
Вы можете использовать RabbitMQ как вариант, но можете заменить его на свой адрес ampq вместе с логином и паролем.
Программа отправляет сообщения следующего вида:
'{"some_camera_1": {"default": 6}}'
То есть одно сообщение может содержать обновление для нескольких камер, в каждой из которых — для нескольких типов подсчитанных объектов.
Отображается только то, что было подсчитано, то есть не накопленный итог, а просто количество, прошедшее за период.
Для тестирования вы можете установить Erlang и Rabbit и запустить эти два скрипта Python.
sender_example.py:
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='unicounter')
channel.basic_publish(exchange='', routing_key='unicounter', body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
consumer_example.py:
import pika, sys, os
def main():
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='unicounter')
def callback(ch, method, properties, body):
print(f" [x] Received {body}")
channel.basic_consume(queue='unicounter', on_message_callback=callback, auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print('Interrupted')
try:
sys.exit(0)
except SystemExit:
os._exit(0)