Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Když pivo kvasí, měli byste denně sledovat jeho gravitaci a teplotu. Je snadné na to zapomenout a nemožné, pokud jste pryč.
Po nějakém googlování jsem našel několik řešení pro automatické monitorování gravitace (jedna, dvě, tři). Jeden z nich, s velmi chytrým konceptem, se jmenoval Tilt. Tilt se ve vašem pivu vznáší a měří svůj vlastní úhel náklonu. Tento úhel závisí na hustotě kapaliny, a proto může měřit gravitaci kvasícího piva.
Tilt je dodáván s mobilní aplikací, která se k němu připojuje a může odesílat data do jakékoli webové služby. Problém je v tom, že musíte být kousek od Tiltu, abyste to dokázali. Existuje také program Raspberry Pi, který pracuje s Tilt.
Krok 1: Získání dat náklonu v Pythonu
Ke sledování teploty ve sklepě již používám Raspberry Pi a službu cloudového ovládacího panelu cloud4rpi.io. Pokud Tilt může mluvit s Raspberry Pi, mělo by být možné k němu připojit cloud4rpi. Tilt používá bezdrátový protokol, takže budete potřebovat Raspberry Pi s bezdrátovým čipem (Rasbperry Pi 3 nebo Zero W).
Naštěstí existuje GitHub repo pro software Tilt s několika vzorky. Při pohledu na https://github.com/baronbrew/tilt-scan můžete vidět, že Tilt vypadá ostatním jako BLE iBeacon s „Color“kódovaným v UUID a teplota a gravitace jsou ve velkých a menších bajtech.
Jejich ukázkový kód je pro Node.js a mám řídicí program Pythonu založený na šabloně cloud4rpi
Potřebuji tedy získat data Tilt v Pythonu. Po chvilce googlování jsem našel https://github.com/switchdoclabs/iBeacon-Scanner-- skener Python iBeacon. Toto je program, ne knihovna, takže jsem ho upravil tak, aby místo řetězce vrátil slovník. A také jsem napsal modul specifický pro náklon, abych získal barvu, teplotu a gravitaci prvního nalezeného náklonu (mám pouze jeden) a jednoduchý testovací program pro kontrolu, zda vidí můj náklon:
importovat naklonění časového importu
zatímco pravda:
res = tilt.getFirstTilt () tisk res time.sleep (2)
Spusťte a zkontrolujte, zda funguje. Nyní jej mohu připojit k mému řídicímu programu. Už mám program python připojený k cloud4rpi.io, ale dovolte mi ukázat, jak to udělat od začátku.
Krok 2: Připojení zařízení ke cloudu
Nejprve se přihlaste na cloud4rpi.io a poté vytvořte nové zařízení.
Dostanete token zařízení a pokyny k instalaci. Pro Raspberry Pi postupujte podle pokynů zde https://docs.cloud4rpi.io/start/rpi/-ujistěte se, že je váš systém aktuální:
sudo apt update && sudo apt upgrade
Nainstalujte předpoklady:
sudo apt install git python python-pip
Nainstalujte balíčky python cloud4rpi:
sudo pip install cloud4rpi
pak získejte ukázkovou aplikaci python pro Raspberry Pi (do ovládací složky):
git clone https://github.com/cloud4rpi/cloud4rpi-raspberryp… ovládání
ovládání CD
Upravit control.py - do řádku zadejte token svého zařízení
DEVICE_TOKEN = „_YOUR_DEVICE_TOKEN_“
Odstraňte nepotřebné položky z deklarací proměnných zařízení, ponechte pouze CPUTemp pro testování připojení zařízení:
# Sem vložte deklarace proměnných = {'CPU Temp': {'type': 'numeric', 'bind': rpi.cpu_temp}}
Nyní proveďte zkušební provoz:
sudo python control.py
Pokud je vše v pořádku, stránka vašeho zařízení bude okamžitě aktualizována diagnostickými daty.
Krok 3: Odesílání dat do cloudu
Nyní musíme upravit control.py, aby četl a hlásil Tiltovu barvu, teplotu a gravitaci. Výsledek vypadá takto:
z os import uname z socket import gethostname import sys import time import cloud4rpi import rpi import tilt
# Sem vložte token svého zařízení. Chcete -li získat token, # zaregistrujte se na https://cloud4rpi.io a vytvořte zařízení. DEVICE_TOKEN = '_YOUR_DEVICE_TOKEN_'
# Konstanty
DATA_SENDING_INTERVAL = 60 # s DIAG_SENDING_INTERVAL = 600 # s POLL_INTERVAL = 0,5 # 500 ms
maják = {}
def F2C (stupně F):
návrat (stupně F - 32) / 1,8
def getTemp ():
vrátit F2C (int (beacon ['Temp'])), pokud beacon else None
def getGravity ():
return beacon ['Gravity'] if beacon else None
def main ():
# Sem vložte deklarace proměnných
variables = {'Gravity': {'type': 'numeric', 'bind': getGravity}, 'Beer Temp': {'type': 'numeric', 'bind': getTemp}}
diagnostika = {
'CPU Temp': rpi.cpu_temp, 'IP Address': rpi.ip_address, 'Host': gethostname (), 'Operating System': "".join (uname ())}
zařízení = cloud4rpi.connect (DEVICE_TOKEN)
device.declare (proměnné) device.declare_diag (diagnostika)
device.publish_config ()
# Přidá 1sekundové zpoždění k zajištění vytváření proměnných zařízení
time.sleep (1)
Snaž se:
data_timer = 0 diag_timer = 0 while True: if data_timer <= 0: global beacon beacon = tilt.getFirstTilt () device.publish_data () data_timer = DATA_SENDING_INTERVAL
if diag_timer <= 0: device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL
time.sleep (POLL_INTERVAL)
diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL
kromě KeyboardInterrupt:
cloud4rpi.log.info ('Bylo přijato přerušení klávesnice. Zastavování …')
kromě výjimky jako e:
chyba = cloud4rpi.get_error_message (e) cloud4rpi.log.error ("CHYBA! %s %s", chyba, sys.exc_info () [0])
Konečně:
sys.exit (0)
if _name_ == '_main_':
hlavní()
Nyní spusťte ručně, abyste zjistili, zda funguje:
sudo python control.py
Pokud je vše v pořádku, uvidíte své proměnné online.
Chcete -li spustit control.py při spuštění systému, nainstalujte jej jako službu. Cloud4rpi k tomu poskytuje instalační skript service_install.sh. Zařadil jsem to do svého repo. Chcete -li nainstalovat control.py jako službu, spusťte
sudo bash service_install.sh control.py
Nyní můžete spustit | zastavit | restartovat tuto službu spuštěním příkazu
sudo systemctl start cloud4rpi.service
Služba udržuje svůj předchozí stav při zapnutí, takže pokud byla spuštěna, bude spuštěna po restartu nebo ztrátě napájení.
Krok 4: Konečný výsledek
To je ono, teď mám své parametry Tilt odesílané do cloudu, takže pro to mohu nastavit pěkný cloudový ovládací panel. Přejděte na https://cloud4rpi.io/control-panels a vytvořte nový ovládací panel, přidejte widget a jako zdroj dat vyberte/Gravity and Beer Temp. Nyní mohu sledovat, co se děje, i když jsem mimo domov.
Kód, který jsem zkopíroval a napsal, je k dispozici zde: https://github.com/superroma/tilt-cloud4rpi. Není to zdaleka dokonalé, funguje to pouze s jediným náklonem, nezáleží mu na „barvě“zařízení, ať už to znamená cokoli, a já nejsem žádný Python, takže opravy, návrhy nebo vidlice jsou vítány !