Другим, возможно, более простым вариантом может быть использование Redis . Redis - это высокопроизводительный сервер со структурой данных в памяти. Его легко установить на Raspberry Pi, Mac, Linux Windows или другой компьютер. Он позволяет вам обмениваться атомарными целыми числами, строками, списками, хэшами, очередями, наборами и упорядоченными наборами между любым количеством клиентов в сети.
Таким образом, концепция может заключаться в том, чтобы иметь отдельную программу, контролирующую расходомер и заполнениетекущее чтение в Redis так часто, как вам нравится. Затем другая отдельная программа, считывающая штрих-коды и вставляющая их в Redis так часто, как вам нравится. И, наконец, у вас есть управляющая программа, возможно, где-то еще в вашей сети, которая может захватывать оба значения так часто, как ей хочется.
Обратите внимание, что вы можете запустить сервер Redis на вашем Raspberry Piили любая другая машина.
Итак, вот программа расходомера - просто измените host
на IP-адрес машины, на которой работает Redis:
#!/usr/bin/env python3
import redis
import time
host='localhost'
port=6379
# Connect to Redis
r = redis.Redis(host,port)
reading = 0
while True:
# Generate synthetic reading that just increases every 500ms
reading +=1
# Stuff reading into Redis as "fmReading"
r.set("fmReading",reading)
time.sleep(0.5)
Вот программа считывания штрих-кода:
#!/usr/bin/env python3
import redis
import time
from random import random, seed
host='localhost'
port=6379
# Connect to local Redis server
r = redis.Redis(host,port)
# Generate repeatable random numbers
seed(42)
while True:
# Synthesize barcode and change every 2 seconds
barcode = "BC" + str(int((random()*1000)))
# Stuff barcode into Redis as "barcode"
r.set("barcode",barcode)
time.sleep(2)
А вот главная управляющая программа:
#!/usr/bin/env python3
import redis
import time
host='localhost'
port=6379
# Connect to Redis server
r = redis.Redis(host,port)
while True:
# Grab latest flowmeter reading and barcode
fmReading = r.get("fmReading")
barcode = r.get("barcode")
print(f"Main: fmReading={fmReading}, barcode={barcode}")
time.sleep(1)
Пример вывода
Main: fmReading=b'10', barcode=b'BC676'
Main: fmReading=b'12', barcode=b'BC892'
Main: fmReading=b'14', barcode=b'BC892'
Main: fmReading=b'16', barcode=b'BC86'
Main: fmReading=b'18', barcode=b'BC86'
Main: fmReading=b'20', barcode=b'BC421'
Main: fmReading=b'22', barcode=b'BC421'
Main: fmReading=b'24', barcode=b'BC29'
Обратите внимание, что для отладки этого,Вы также можете получить любые показания с помощью интерфейса командной строки для Redis с любого компьютера в вашей сети, например, в терминале:
redis-cli get barcode
"BC775"
Если вы хотите отобразить значения в Интернете-браузер, написанный на PHP, вы можете использовать привязки PHP к Redis, чтобы получать значения тоже - очень удобно!
Конечно, вы можете настроить программу так, чтобы отправлять временные метки показаний с каждым - возможно,используя Redis хэш , а не простой ключ. Вы также можете реализовать очередь для отправки сообщений между программами, используя Redis LPUSH и BRPOP .
Ключевые слова : Redis, список, очередь, хэш, Raspberry Pi