Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
Kada fermentira pivo, trebali biste svakodnevno pratiti njegovu gravitaciju i temperaturu. Lako je zaboraviti to učiniti, a nemoguće ako ste odsutni.
Nakon guglanja, pronašao sam nekoliko rješenja za automatizirano praćenje gravitacije (jedno, dva, tri). Jedan od njih, s vrlo pametnim konceptom, zove se Tilt. Nagib pluta u vašem pivu i mjeri vlastiti kut nagiba. Ovaj kut ovisi o gustoći tekućine i stoga može mjeriti težinu fermentiranog piva.
Tilt dolazi s mobilnom aplikacijom koja se povezuje s njom i može objavljivati podatke na bilo kojoj web usluzi. Problem je u tome što morate biti nedaleko od Tilta da biste to mogli učiniti. Postoji i program Raspberry Pi koji radi sa Tilt -om.
Korak 1: Dobijanje podataka o nagibu u Pythonu
Već koristim Raspberry Pi za praćenje temperature podruma i uslugu oblačne kontrolne ploče cloud4rpi.io. Ako Tilt može razgovarati s Raspberry Pi, trebalo bi biti moguće povezati cloud4rpi s njim. Tilt koristi bežični protokol, pa će vam trebati Raspberry Pi s bežičnim čipom (Rasbperry Pi 3 ili Zero W).
Srećom, postoji GitHub repo za Tilt softver s nekim uzorcima. Gledajući https://github.com/baronbrew/tilt-scan možete vidjeti da Tilt drugima izgleda kao BLE iBeacon, s "Bojom" kodiranom u UUID-u, a temperatura i gravitacija su u velikim i sporednim bajtovima.
Njihov uzorak koda je za Node.js, a ja imam Python kontrolni program zasnovan na cloud4rpi predlošku
Zato moram nabaviti Tilt podatke u Pythonu. Nakon guglanja, našao sam https://github.com/switchdoclabs/iBeacon-Scanner-- Python iBeacon skener. Ovo je program, a ne biblioteka, pa sam ga izmijenio da umjesto rječnika vrati rječnik. Napisao sam i modul specifičan za nagib kako bih dobio boju, temperaturu i težinu prvog pronađenog nagiba (imam samo jedan) i jednostavan testni program za provjeru može li vidjeti moj nagib:
import timeimport nagib
dok je True:
res = tilt.getFirstTilt () ispis res time.sleep (2)
Pokrenite i provjerite radi li. Sada ga mogu priključiti na svoj upravljački program. Već imam python program povezan s cloud4rpi.io, ali dopustite mi da vam pokažem kako to učiniti od nule.
Korak 2: Povezivanje uređaja s oblakom
Prvo se prijavite na cloud4rpi.io, a zatim stvorite novi uređaj.
Dobit ćete token uređaja i upute za instalaciju. Za Raspberry Pi slijedite upute ovdje https://docs.cloud4rpi.io/start/rpi/-provjerite je li vaš sistem ažuriran:
sudo apt ažuriranje && sudo apt nadogradnja
Preduvjeti za instaliranje:
sudo apt install git python python-pip
Instalirajte cloud4rpi python pakete:
sudo pip install cloud4rpi
tada nabavite uzorak python aplikacije za Raspberry Pi (u kontrolnu mapu):
git clone https://github.com/cloud4rpi/cloud4rpi-raspberryp… kontrola
cd kontrola
modify control.py - navedite token vašeg uređaja u redu
DEVICE_TOKEN = ‘_YOUR_DEVICE_TOKEN_’
Uklonite nepotrebne unose iz deklaracija varijabli uređaja, ostavite samo CPUTemp za testiranje veze uređaja:
# Ovdje stavite deklaracije varijabli varijable = {'CPU Temp': {'type': 'numeric', 'bind': rpi.cpu_temp}}
Sada napravite probni rad:
sudo python control.py
Ako je sve u redu, stranica vašeg uređaja bit će odmah ažurirana dijagnostičkim podacima.
Korak 3: Slanje podataka u oblak
Sada moramo izmijeniti control.py za čitanje i izvještavanje o Tilt -ovoj boji, temperaturi i gravitaciji. Rezultat izgleda ovako:
iz os uvoz uname iz utičnice uvoz gethostname uvoz sys vrijeme uvoza uvoz cloud4rpi uvoz rpi uvoz nagib
# Ovdje stavite žeton uređaja. Da biste dobili žeton, # prijavite se na https://cloud4rpi.io i kreirajte uređaj. DEVICE_TOKEN = '_YOUR_DEVICE_TOKEN_'
# Konstante
DATA_SENDING_INTERVAL = 60 # sekundi DIAG_SENDING_INTERVAL = 600 # sekundi POLL_INTERVAL = 0,5 # 500 ms
svjetionik = {}
def F2C (stupnjeviF):
povratak (stepeniF - 32) / 1.8
def getTemp ():
vrati F2C (int (beacon ['Temp'])) ako je beacon else None
def getGravity ():
return beacon ['Gravity'] ako beacon nijedan None
def main ():
# Ovdje stavite deklaracije varijabli
varijable = {'Gravitacija': {'type': 'numeric', 'bind': getGravity}, 'Beer Temp': {'type': 'numeric', 'bind': getTemp}}
dijagnostika = {
'CPU Temp': rpi.cpu_temp, 'IP Address': rpi.ip_address, 'Host': gethostname (), 'Operating System': "".join (uname ())}
uređaj = cloud4rpi.connect (DEVICE_TOKEN)
device.declare (varijable) device.declare_diag (dijagnostika)
device.publish_config ()
# Dodaje kašnjenje od 1 sekunde kako bi se osiguralo stvaranje varijabli uređaja
time.sleep (1)
probaj:
data_timer = 0 diag_timer = 0 while True: if data_timer <= 0: globalni beacon beacon = tilt.getFirstTilt () device.publish_data () data_timer = DATA_SENDING_INTERVAL
ako je diag_timer <= 0: device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL
time.sleep (POLL_INTERVAL)
dijag_timer -= POLL_INTERVAL tajmer podataka -= POLL_INTERVAL
osim KeyboardInterrupt:
cloud4rpi.log.info ('Primljen prekid tastature. Zaustavljanje …')
osim izuzetka kao e:
greška = cloud4rpi.get_error_message (e) cloud4rpi.log.error ("GREŠKA! %s %s", greška, sys.exc_info () [0])
konačno:
sys.exit (0)
if _name_ == '_main_':
main ()
Sada ga ručno pokrenite da vidite radi li:
sudo python control.py
Ako je sve u redu, na internetu ćete vidjeti svoje varijable.
Da biste pokrenuli control.py pri pokretanju sistema, instalirajte ga kao uslugu. Cloud4rpi nudi instalacijsku skriptu service_install.sh za to. Uključio sam ga u svoj repo. Da biste instalirali control.py kao uslugu, pokrenite
sudo bash service_install.sh control.py
Sada možete pokrenuti | stop | ponovo pokrenuti ovu uslugu pokretanjem naredbe
sudo systemctl pokrenite cloud4rpi.service
Usluga zadržava prijašnje stanje pri uključivanju, pa ako je radila, radit će nakon ponovnog pokretanja ili gubitka napajanja.
Korak 4: Konačni rezultat
To je to, sada se moji parametri nagiba šalju u oblak, tako da mogu postaviti lijepu kontrolnu ploču u oblaku. Idite na https://cloud4rpi.io/control-panels i kreirajte novu kontrolnu ploču, dodajte widget i odaberite/Gravity and Beer Temp kao izvor podataka. Sada mogu pratiti šta se događa čak i ako sam daleko od kuće.
Kôd koji sam kopirao i napisao dostupan je ovdje: https://github.com/superroma/tilt-cloud4rpi. Daleko je od savršenog, radi samo s jednim nagibom, nije ga briga za "boju" uređaja, što god to značilo, a ja uopće nisam Python tip, pa su ispravci, prijedlozi ili viljuške dobrodošli !