MQTT

MQTT es un protocolo de mensajería estandarizado para la comunicación entre computadoras. El protocolo tiene una implementación simple y una alta eficiencia en la transferencia de datos. MQTT admite mensajería en ambas direcciones: de los dispositivos a la nube y viceversa.

Debes agregar estos parámetros al archivo 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

Usamos el protocolo ampq estándar.

Puedes usar RabbitMQ como una opción, pero puedes cambiarlo por tu dirección ampq junto con tu usuario y contraseña.

El programa envía mensajes como:

'{"some_camera_1": {"default": 6}}'

Es decir, un mensaje puede contener una actualización para varias cámaras, en cada cámara para varios tipos de objetos contados.

Solo se recibe lo que fue contado, es decir, no un total acumulado, sino simplemente cuánto ha pasado durante el período.

Para probar, puedes instalar Erlang y Rabbit y ejecutar estos dos scripts de 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)