Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Kad pivo fermentira, 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, nazvan je 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 gustoću 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 s Tilt -om.
Korak 1: Dobivanje podataka o nagibu u Pythonu
Već koristim Raspberry Pi za praćenje temperature podruma i uslugu oblačne upravljačke 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 softver Tilt 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 kontrolni program Python temeljen 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 knjižnica, 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 nagnutog nagiba (imam samo jedan) i jednostavan testni program za provjeru vidi li moj nagib:
import timeimport nagib
dok je istina:
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š sustav 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 instalirajte cloud4rpi
zatim nabavite uzorak python aplikacije za Raspberry Pi (u kontrolnu mapu):
git clone https://github.com/cloud4rpi/cloud4rpi-raspberryp… kontrola
cd kontrola
izmijeniti control.py - navedite žeton uređaja u retku
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 izradite uređaj. DEVICE_TOKEN = '_YOUR_DEVICE_TOKEN_'
# Konstante
DATA_SENDING_INTERVAL = 60 # s DIAG_SENDING_INTERVAL = 600 # s POLL_INTERVAL = 0,5 # 500 ms
svjetionik = {}
def F2C (stupnjeviF):
povrat (stupnjeviF - 32) / 1,8
def getTemp ():
return F2C (int (beacon ['Temp']))) ako je beacon else Ništa
def getGravity ():
return beacon ['Gravity'] ako svjetionik nijedan None
def main ():
# Ovdje stavite deklaracije varijabli
variables = {'Gravity': {'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
vrijeme.spavanje (1)
probati:
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)
dijagnostički timer -= POLL_INTERVAL tajmer podataka -= POLL_INTERVAL
osim KeyboardInterrupt:
cloud4rpi.log.info ('Primljen prekid tipkovnice. Zaustavljanje …')
osim iznimke kao e:
error = cloud4rpi.get_error_message (e) cloud4rpi.log.error ("GREŠKA! %s %s", pogreška, sys.exc_info () [0])
konačno:
sys.exit (0)
ako je _naziv_ == '_glavni_':
glavni()
Sada ga ručno pokrenite da vidite radi li:
sudo python control.py
Ako je sve u redu, svoje varijable ćete vidjeti na internetu.
Da biste pokrenuli control.py pri pokretanju sustava, 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 | ponovno pokrenuti ovu uslugu pokretanjem naredbe
sudo systemctl start 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 upravljačku ploču u oblaku. Idite na https://cloud4rpi.io/control-panels i stvorite novu upravljačku ploču, dodajte widget i odaberite/Gravity and Beer Temp kao izvor podataka. Sada mogu pratiti što 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 tip za Python, pa su ispravci, prijedlozi ili vilice dobrodošli !