Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Ko fermentira pivo, morate dnevno spremljati njegovo težo in temperaturo. Na to je enostavno pozabiti in nemogoče, če vas ni.
Po googlanju sem našel več rešitev za avtomatizirano spremljanje gravitacije (eno, dve, tri). Eden od njih, z zelo pametnim konceptom, se imenuje Tilt. Nagib plava v vašem pivu in meri svoj kot nagiba. Ta kot je odvisen od gostote tekočine in zato lahko meri težo fermentiranega piva.
Tilt ima mobilno aplikacijo, ki se poveže z njim in lahko objavi podatke v kateri koli spletni storitvi. Težava je v tem, da morate biti nedaleč od Tilta, da bi to lahko storili. Obstaja tudi program Raspberry Pi, ki deluje s programom Tilt.
1. korak: Pridobivanje podatkov o nagibu v Pythonu
Že uporabljam Raspberry Pi za spremljanje temperature v kleti in storitev nadzorne plošče v oblaku cloud4rpi.io. Če se lahko Tilt pogovarja z Raspberry Pi, bi bilo treba z njim povezati cloud4rpi. Tilt uporablja brezžični protokol, zato boste potrebovali Raspberry Pi z brezžičnim čipom (Rasbperry Pi 3 ali Zero W).
Na srečo obstaja GitHub repo za programsko opremo Tilt z nekaj vzorci. Če pogledate https://github.com/baronbrew/tilt-scan, lahko vidite, da Tilt drugim izgleda kot BLE iBeacon, z oznako »Color« v UUID-u, temperatura in gravitacija pa v velikih in manjših bajtih.
Njihova vzorčna koda je za Node.js in imam nadzorni program Python, ki temelji na predlogi cloud4rpi
Zato moram v Python dobiti podatke o nagibu. Po googlanju sem našel https://github.com/switchdoclabs/iBeacon-Scanner-- skener Python iBeacon. To je program, ne knjižnica, zato sem ga spremenil tako, da je namesto niza vrnil slovar. Napisal sem tudi modul, specifičen za nagib, da dobim barvo, temperaturo in težo prvega najdenega nagiba (imam samo enega), in preprost preskusni program za preverjanje, ali lahko vidi moj nagib:
čas uvoza uvoz nagib
medtem ko je res:
res = tilt.getFirstTilt () natisni res time.sleep (2)
Zaženite in preverite, ali deluje. Zdaj ga lahko priključim na svoj nadzorni program. Že imam program python, povezan z cloud4rpi.io, vendar naj pokažem, kako to storiti iz nič.
2. korak: Povezovanje naprave z oblakom
Najprej se prijavite v cloud4rpi.io, nato pa ustvarite novo napravo.
Dobili boste žeton naprave in navodila za namestitev. Za Raspberry Pi sledite navodilom tukaj https://docs.cloud4rpi.io/start/rpi/-preverite, ali je vaš sistem posodobljen:
sudo apt update && sudo apt upgrade
Predpogoji za namestitev:
sudo apt install git python python-pip
Namestite pakete python cloud4rpi:
sudo pip namestite cloud4rpi
nato dobite vzorčno aplikacijo python za Raspberry Pi (v nadzorno mapo):
git clone https://github.com/cloud4rpi/cloud4rpi-raspberryp… control
cd nadzor
spremeni control.py - v vrstico vnesite žeton naprave
DEVICE_TOKEN = ‘_YOUR_DEVICE_TOKEN_’
Odstranite nepotrebne vnose iz deklaracij spremenljivk naprave, za preizkus povezave naprave pustite samo CPUTemp:
# Tu vnesite deklaracije spremenljivk = {'Temp CPU': {'type': 'numeric', 'bind': rpi.cpu_temp}}
Zdaj naredite preskusno vožnjo:
sudo python control.py
Če je vse v redu, bo stran vaše naprave takoj posodobljena z diagnostičnimi podatki.
3. korak: pošiljanje podatkov v oblak
Zdaj moramo spremeniti control.py za branje in poročanje o Tilttovi barvi, temperaturi in gravitaciji. Rezultat izgleda takole:
iz os uvoz uname iz vtičnice uvoz gethostname uvoz sys čas uvoza uvoz cloud4rpi uvoz rpi uvoz nagib
# Tukaj vnesite žeton naprave. Če želite dobiti žeton, # prijavite se na https://cloud4rpi.io in ustvarite napravo. DEVICE_TOKEN = '_YOUR_DEVICE_TOKEN_'
# Konstante
DATA_SENDING_INTERVAL = 60 # s DIAG_SENDING_INTERVAL = 600 # s POLL_INTERVAL = 0,5 # 500 ms
svetilnik = {}
def F2C (stopinjeF):
povrat (stopinjeF - 32) / 1,8
def getTemp ():
vrni F2C (int (svetilnik ['Temp'])), če svetilnik drugače Jih ni
def getGravity ():
return beacon ['Gravity'] če svetilnik drugače Noben
def main ():
# Tukaj vnesite deklaracije spremenljivk
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 ())}
naprava = cloud4rpi.connect (DEVICE_TOKEN)
device.declare (spremenljivke) device.declare_diag (diagnostika)
device.publish_config ()
# Doda 1 sekundno zamudo za zagotovitev ustvarjanja spremenljivk naprave
time.sleep (1)
poskusi:
data_timer = 0 diag_timer = 0 while True: če je data_timer <= 0: globalni svetilnik = tilt.getFirstTilt () device.publish_data () data_timer = DATA_SENDING_INTERVAL
če diag_timer <= 0: device.publish_diag () diag_timer = DIAG_SENDING_INTERVAL
time.sleep (POLL_INTERVAL)
diag_timer -= POLL_INTERVAL data_timer -= POLL_INTERVAL
razen KeyboardInterrupt:
cloud4rpi.log.info ('Prejet prekinitev tipkovnice. Ustavitev …')
razen izjeme kot e:
error = cloud4rpi.get_error_message (e) cloud4rpi.log.error ("NAPAKA! %s %s", napaka, sys.exc_info () [0])
končno:
sys.exit (0)
če _name_ == '_main_':
main ()
Zdaj ga zaženite ročno in preverite, ali deluje:
sudo python control.py
Če je vse v redu, boste na spletu videli svoje spremenljivke.
Če želite zagnati control.py ob zagonu sistema, ga namestite kot storitev. Cloud4rpi ponuja namestitveni skript service_install.sh. To sem vključil v svoj repo. Če želite namestiti control.py kot storitev, zaženite
sudo bash service_install.sh control.py
Zdaj lahko začnete | stop | znova zaženete to storitev z zagonom ukaza
sudo systemctl začni cloud4rpi.service
Storitev ohranja vklopljeno prejšnje stanje, zato bo delovala po ponovnem zagonu ali izpadu napajanja.
4. korak: Končni rezultat
To je to, zdaj imam svoje parametre nagiba, ki se pošiljajo v oblak, zato lahko zanj nastavim lepo nadzorno ploščo v oblaku. Pojdite na https://cloud4rpi.io/control-panels in ustvarite novo nadzorno ploščo, dodajte pripomoček in izberite/Gravity and Beer Temp kot vir podatkov. Zdaj lahko spremljam, kaj se dogaja, tudi če nisem doma.
Koda, ki sem jo kopirala in napisala, je na voljo tukaj: https://github.com/superroma/tilt-cloud4rpi. Še zdaleč ni popoln, deluje le z enim nagibom, ne zanima ga "barva" naprave, karkoli že pomeni, sploh pa nisem Pythonov tip, zato so popravki, predlogi ali vilice dobrodošli !