Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Podczas fermentacji piwa należy codziennie monitorować jego wagę i temperaturę. Łatwo o tym zapomnieć, a jeśli jesteś daleko, jest to niemożliwe.
Po jakimś czasie googlowania znalazłem kilka rozwiązań do automatycznego monitorowania grawitacji (jeden, dwa, trzy). Jeden z nich, o bardzo sprytnej koncepcji, nazywa się Tilt. Tilt unosi się w twoim piwie i mierzy swój własny kąt nachylenia. Kąt ten zależy od gęstości cieczy i dlatego może mierzyć grawitację fermentującego piwa.
Tilt jest dostarczany z aplikacją mobilną, która łączy się z nim i może publikować dane w dowolnym serwisie internetowym. Problem polega na tym, że musisz znajdować się niedaleko od Tiltu, aby móc to zrobić. Istnieje również program Raspberry Pi współpracujący z Tilt.
Krok 1: Pobieranie danych Tilt w Pythonie
Używam już Raspberry Pi do monitorowania temperatury w piwnicy oraz usługi panelu sterowania w chmurze cloud4rpi.io. Jeśli Tilt może rozmawiać z Raspberry Pi, powinno być możliwe podłączenie do niego cloud4rpi. Tilt korzysta z protokołu bezprzewodowego, więc będziesz potrzebować Raspberry Pi z chipem bezprzewodowym (Rasbperry Pi 3 lub Zero W).
Na szczęście istnieje repozytorium GitHub dla oprogramowania Tilt z kilkoma przykładami. Patrząc na https://github.com/baronbrew/tilt-scan można zauważyć, że Tilt wygląda dla innych jak BLE iBeacon, z „Kolorem” zakodowanym w UUID, a temperatura i grawitacja są w bajtach większych i mniejszych.
Ich przykładowy kod jest dla Node.js, a ja mam program sterujący Pythona oparty na szablonie cloud4rpi
Więc muszę uzyskać dane Tilt w Pythonie. Po kilku googlowaniach znalazłem https://github.com/switchdoclabs/iBeacon-Scanner- - Python iBeacon Scanner. To jest program, a nie biblioteka, więc zmodyfikowałem go, aby zwracał słownik zamiast łańcucha. Napisałem również moduł dla Tilt, aby uzyskać kolor, temperaturę i grawitację pierwszego znalezionego Tiltu (mam tylko jeden) oraz prosty program testowy, aby sprawdzić, czy widzi mój Tilt:
czas importuimport tilt
podczas gdy prawda:
res = tilt.getFirstTilt() print res time.sleep(2)
Uruchom i sprawdź, czy działa. Teraz mogę podłączyć go do mojego programu sterującego. Mam już program python podłączony do cloud4rpi.io, ale pokażę, jak to zrobić od podstaw.
Krok 2: Podłączanie urządzenia do chmury
Najpierw zaloguj się do cloud4rpi.io, a następnie utwórz nowe urządzenie.
Otrzymasz token urządzenia i instrukcje instalacji. W przypadku Raspberry Pi postępuj zgodnie z instrukcjami tutaj https://docs.cloud4rpi.io/start/rpi/ - upewnij się, że Twój system jest aktualny:
aktualizacja sudo apt i aktualizacja sudo apt
Wymagania wstępne instalacji:
sudo apt zainstaluj git python python-pip
Zainstaluj pakiety cloud4rpi Pythona:
sudo pip zainstaluj cloud4rpi
następnie pobierz przykładową aplikację Pythona dla Raspberry Pi (do folderu kontrolnego):
git clone https://github.com/cloud4rpi/cloud4rpi-raspberryp… kontrola
sterowanie cd
zmodyfikuj control.py - podaj swój token urządzenia w linii
DEVICE_TOKEN = „_TWOJE_TOKEN_URZĄDZENIA_”
Usuń niepotrzebne wpisy z deklaracji zmiennych urządzenia, pozostaw tylko CPUTemp do testowania połączenia urządzenia:
# Umieść tutaj deklaracje zmiennych zmienne = { 'CPU Temp': { 'typ': 'numeric', 'bind': rpi.cpu_temp } }
Teraz wykonaj test:
sudo python control.py
Jeśli wszystko jest w porządku, strona Twojego urządzenia zostanie natychmiast zaktualizowana danymi diagnostycznymi.
Krok 3: Wysyłanie danych do chmury
Teraz musimy zmodyfikować plik control.py, aby odczytywał i raportował kolor, temperaturę i grawitację Tiltu. Wynik wygląda tak:
z systemu operacyjnego import uname z gniazda import gethostname import sys import czasu import cloud4rpi import rpi import tilt
# Umieść tutaj swój token urządzenia. Aby otrzymać token, # zarejestruj się na https://cloud4rpi.io i utwórz urządzenie. DEVICE_TOKEN = '_TWOJE_TOKEN_URZĄDZENIA_'
# Stałe
DATA_SENDING_INTERVAL = 60 # s DIAG_SENDING_INTERVAL = 600 # s POLL_INTERVAL = 0,5 # 500 ms
latarnia = {}
def F2C(stopnieF):
powrót (stopnie F - 32) / 1,8
def pobierzTemp():
return F2C(int(beacon['Temp'])) if beacon inny Brak
def getGravity():
return beacon['Gravity'] jeśli beacon inny Brak
zdefiniuj główne():
# Umieść tutaj deklaracje zmiennych
zmienne = { 'Gravity': { 'type': 'numeric', 'bind': getGravity }, 'Beer Temp': { 'type': 'numeric', 'bind': getTemp } }
diagnostyka = {
'CPU Temp': rpi.cpu_temp, 'Adres IP': rpi.ip_address, 'Host': gethostname(), 'System operacyjny': " ".join(uname()) }
urządzenie = cloud4rpi.connect(DEVICE_TOKEN)
device.declare(zmienne) device.declare_diag(diagnostyka)
urządzenie.publish_config()
# Dodaje 1 sekundę opóźnienia, aby zapewnić utworzenie zmiennych urządzenia
czas.sen(1)
próbować:
data_timer = 0 diag_timer = 0 while True: if data_timer <= 0: globalny sygnał nawigacyjny = tilt.getFirstTilt() device.publish_data() data_timer = DATA_SENDING_INTERVAL
if diag_timer <= 0: device.publish_diag() diag_timer = DIAG_SENDING_INTERVAL
czas.snu(POLL_INTERVAL)
diag_timer -= POLL_INTERVAL licznik_danych -= POLL_INTERVAL
z wyjątkiem KeyboardInterrupt:
cloud4rpi.log.info('Odebrano przerwanie klawiatury. Zatrzymywanie…')
z wyjątkiem Wyjątku, jak e:
error = cloud4rpi.get_error_message(e) cloud4rpi.log.error("BŁĄD! %s %s", błąd, sys.exc_info()[0])
wreszcie:
sys.exit(0)
if _name_ == '_main_':
Główny()
Teraz uruchom go ręcznie, aby sprawdzić, czy działa:
sudo python control.py
Jeśli wszystko jest w porządku, zobaczysz swoje zmienne online.
Aby uruchomić control.py podczas uruchamiania systemu, zainstaluj go jako usługę. Cloud4rpi udostępnia w tym celu skrypt instalacyjny service_install.sh. Dołączyłem to do mojego repozytorium. Aby zainstalować control.py jako usługę, uruchom
sudo bash service_install.sh control.py
Teraz możesz uruchomić|zatrzymać|zrestartować tę usługę, uruchamiając polecenie
sudo systemctl start cloud4rpi.service
Usługa zachowuje swój poprzedni stan po włączeniu, więc jeśli była uruchomiona, będzie działać po ponownym uruchomieniu lub utracie zasilania.
Krok 4: Wynik końcowy
To wszystko, teraz moje parametry Tilt są wysyłane do chmury, więc mogę skonfigurować dla niego ładny panel sterowania w chmurze. Wejdź na https://cloud4rpi.io/control-panels i utwórz nowy panel sterowania, dodaj widżet i wybierz /Gravity i Beer Temp jako źródło danych. Teraz mogę monitorować, co się dzieje, nawet gdy jestem poza domem.
Kod, który skopiowałem i napisałem, jest dostępny tutaj: https://github.com/superroma/tilt-cloud4rpi. Daleko mu do ideału, działa tylko z jednym Tiltem, nie dba o „Kolor” urządzenia, cokolwiek to znaczy, a ja w ogóle nie jestem pythonem, więc poprawki, sugestie lub forki są mile widziane !