Spisu treści:
- Krok 1: Wczytanie wtyczki wtyczki
- Krok 2: Znajdowanie danych na czujniku
- Krok 3: Wykończenie szlifów
- Krok 4: Używanie go w szerszym kontekście
- Krok 5: Słowa zamykające
Wideo: FlowerCare i Nymea ratują moje rośliny: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Brudne ręce przy podłączaniu czujników do pielęgnacji roślin do mojego istniejącego inteligentnego domu typu open source. Przewodnik po tworzeniu wtyczek dla Nymea.
Historia
Jak wielu innych majsterkowiczów i hakerów, ja też cierpię z powodu tego, że hakowanie zajmuje mi tyle czasu, że czasami zapominam o podlewaniu roślin. Po tym, jak moja Monstera Deliciosa po raz kolejny cierpiała na suchą glebę, postanowiłem sprawdzić, czy mogę coś z tym zrobić, aby przypomnieć mi, kiedy jest spragniony.
Szybkie rozeznanie w sieci zwróciło moją uwagę na Xiaomi FlowerCare, znane również jako MiCare lub PlantCare. Jest to urządzenie Bluetooth Low Energy, a niektóre podstawowe badania wykazały, że jego protokół wydaje się dość łatwy do zrozumienia. Chociaż wydaje się, że Xiaomi nie udostępnia żadnych publicznych specyfikacji, w Internecie pojawiło się jeszcze sporo inżynierii wstecznej dla tego urządzenia. Postanowiłem więc zamówić jeden z nich.
Kilka dni później został dostarczony i oczywiście od razu zacząłem się nim bawić. Krótko sprawdziłem dołączoną do niego aplikację, ale jak zapewne się domyślasz, używanie jej w domyślnej konfiguracji nigdy nie było moim planem. Oczywiście musi to być zintegrowane z moją istniejącą konfiguracją inteligentnego domu. Jak również tutaj opisano, używam nymea jako mojego inteligentnego rozwiązania domowego (tak, Monstera można zobaczyć na jednym ze zdjęć:)). Niestety, Nymea nie wspierała jeszcze tego czujnika, więc odpalenie jakiegoś IDE było w porządku.
Krok 1: Wczytanie wtyczki wtyczki
Więc pierwszą rzeczą, którą zrobiłem, było skopiowanie istniejącej wtyczki Texas Instruments Sensor Tag, wydawało się wystarczająco podobne do tego, co zakładałem, że powinno działać również na urządzeniu FlowerCare. Po podstawowej zmianie nazwy rzeczy w plugininfo.json i zakomentowaniu większości kodu wtyczki sensortag byłem gotowy do załadowania nowego stuba wtyczki.
Zgodnie z oczekiwaniami odkrycie od razu pokazałoby czujnik i pozwoliłoby dodać go do systemu. Oczywiście w tym momencie nie dałoby to żadnych znaczących danych.
Krok 2: Znajdowanie danych na czujniku
Podobnie jak w przypadku każdego urządzenia Bluetooth LE, pierwszą rzeczą, którą chcesz zrobić, to dowiedzieć się o oferowanych przez nie usługach i ich cechach. Gdzieś tam ukryte są rzeczywiste dane. Dzięki szybkiemu debugowaniu wydruków w pętli po wszystkich wykrytych usługach i wydrukowaniu ich charakterystyk byłem w miejscu, w którym mogłem porównać informacje, które znalazłem w Internecie, z tym, co faktycznie raportuje urządzenie.
void FlowerCare::onServiceDiscoveryFinished(){ BluetoothLowEnergyDevice *btDev = static_cast(sender()); qCDebug(dcFlowerCare()) << "mieć identyfikatory UUID usług"
Wersja oprogramowania i poziom naładowania baterii były łatwe. Już przy pierwszej próbie zestawienia danych mogłem zobaczyć odpowiednie wartości. Rzeczywiste wartości czujników są tam ukryte nieco głębiej, ale połączenie ich z danymi z internetu od razu wskazało, gdzie je znaleźć, a zwłaszcza jak je odczytać.
void FlowerCare::onSensorServiceCharacteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value){ qCDebug(dcFlowerCare()) << "Odczyt charakterystyki" << QString::number(characteristic.handle(), 16) temp; qint8 pomiń; strumień >> pomiń; kwint32 luksów; strumień >> luks; Qint8 wilgoć; strumień >> wilgoć; płodność qint16; strumień >> płodność; emituj zakończone(m_batteryLevel, 1.0*temp/10, lux, wilgotność, płodność); }
Podsumowując, wtyczka zaczęła już generować znaczące dane.
Krok 3: Wykończenie szlifów
Więc w zasadzie działało to teraz, jednak pozostał jeden problem. Czujnik FlowerCare, w przeciwieństwie do Texas Instruments SensorTag, zrywa połączenie Bluetooth po kilku sekundach. Jednak biorąc pod uwagę przypadek użycia, nie wydaje się to stanowić problemu, ponieważ jest dość niezawodne w reagowaniu na próby połączenia. Biorąc pod uwagę, że normalnie roślina nie zasysa litra wody w ciągu kilku minut, a raczej dni, nie wydaje się konieczne pozostawanie w kontakcie przez cały czas. Spowodowałoby to również znaczne rozładowanie baterii. Postanowiłem więc dodać PluginTimer, który będzie podłączał czujnik co 20 minut i pobierał z niego dane. Jeśli z jakiegoś powodu czujnik nie zareaguje na próbę połączenia, kod uruchomi kolejny timer, który będzie próbował ponownie połączyć się co minutę od tego momentu, aż do uzyskania danych. Następnie wróci, aby ponownie pobrać dane z 20-minutowego interwału. Jeśli urządzenie nie połączy się dwa razy z rzędu (czyli po 20+1 minutach), zostanie ono oznaczone w systemie offline, a użytkownik może zostać o tym ostrzeżony.
void DevicePluginFlowercare::onPluginTimer(){ foreach (FlowerCare *flowerCare, m_list) { if (--m_refreshMinutes[flowerCare] <= 0) { qCDebug(dcFlowerCare()) << "Odświeżanie" adresu(); FlowerCare->refreshData(); } else { qCDebug(dcFlowerCare()) << "Nie odświeżam" adres() << "Następne odświeżenie za" << m_refreshMinutes[flowerCare] << "minuty"; } // Jeśli mieliśmy 2 lub więcej nieudanych prób połączenia, oznacz je jako odłączony if (m_refreshMinutes[flowerCare] < -2) { qCDebug(dcFlowerCare()) << "Nie udało się odświeżyć dla"<< (m_refreshMinutes[flowerCare] * -1) <setStateValue(flowerCareConnectedStateTypeId, false); } } }
Dzięki tej strategii nymea wydawała się teraz dostarczać całkowicie wiarygodne dane z tego czujnika.
Krok 4: Używanie go w szerszym kontekście
Samo pobieranie wartości z czujnika nie jest jednak zbyt przydatne, mogłem też użyć do tego oryginalnej aplikacji. Teraz zróbmy z nim kilka mądrych rzeczy.
Nymea obsługuje wysyłanie powiadomień push, zarówno na telefony z zainstalowaną aplikacją nymea:app, jak i przez PushBullet. Więc oczywistą rzeczą do zrobienia jest wysyłanie sobie powiadomień push, gdy wilgotność gleby spadnie poniżej 15%. Konfiguracja tego w aplikacji jest dość łatwa. Jako warunek wstępny potrzebujesz konta w nymea:cloud lub w PushBullet. W przypadku powiadomień push opartych na nymea:cloud wystarczy włączyć nymea:cloud w nymea:core oraz w nymea:app. Gdy tylko oba zostaną połączone, automatycznie pojawi się powiadomienie. Aby PushBullet dodać nową rzecz w systemie, znajdziesz tam PushBullet na liście. Poprosi Cię o klucz API, który otrzymasz podczas rejestracji w PushBullet. Gdy masz już powiadomienie push w nymea, możesz utworzyć regułę.
Oczywiście możesz robić, co chcesz… Możesz też włączyć trochę światła, aby odzwierciedlić wartości z czujników, lub użyć wtyczki HTTP Commander, aby na przykład przesłać wartości z czujników na serwer w Internecie. Nie mam zaworu wodnego który może być sterowany cyfrowo (jeszcze), ale oczywiście, jeśli masz coś takiego i nie jest jeszcze obsługiwany przez nymea, dodanie wtyczki do tego byłoby raczej podobne niż to.
Krok 5: Słowa zamykające
Wtyczka flowercare została już zaakceptowana i jeśli masz jedną z nich, jest gotowa do użycia z nymea. Mam jednak nadzieję, że ten artykuł może zainteresować, jeśli ktoś chce dodać obsługę innych urządzeń. Powinien to być przewodnik po tym, jak zbudować własną wtyczkę dla nymea.
Jeśli chcesz po prostu zbudować tę konfigurację w swoim domu, wszystko, czego potrzebujesz, to czujnik FlowerCare, Raspberry Pi, obraz społeczności nymea (zawiera teraz wtyczkę do pielęgnacji kwiatów) i nymea:app, który jest dostępny w sklepach z aplikacjami. Ponadto, do tej pory moja Monstera Deliciosa jest znowu szczęśliwa i jak mogliście zobaczyć na zrzutach ekranu, zdobyłem drugi z tych czujników, aby śledzić zdrowie mojego drzewa cytrynowego. W tym przypadku wysyłam sobie powiadomienie push, gdy na dworze jest mróz, abym mógł bezpiecznie przeżyć zimę.
Zalecana:
Automatyczna doniczka na rośliny - Mały ogród: 13 kroków (ze zdjęciami)
Automatyczna doniczka na rośliny - Mały ogród: Jestem studentem na kierunku Multimedia i Technika Komunikacji w Howest Kortrijk. Aby wykonać nasze ostatnie zadanie, musieliśmy opracować wybrany przez nas projekt IoT. Rozglądając się za pomysłami, postanowiłem zrobić coś pożytecznego dla mojej mamy, która uwielbia growi
System ostrzegania o niskiej wilgotności gleby dla Twojej rośliny: 5 kroków
System ostrzegania o niskiej wilgotności gleby dla Twojej rośliny: W kilku domach często można znaleźć słoiki z różnymi rodzajami roślin. A przy dużej liczbie codziennych czynności ludzie zapominają o podlewaniu roślin i umierają z braku wody. Aby uniknąć tego problemu, zdecydowaliśmy
Czy wiesz, jak się czują Twoje rośliny? [Cząstka + Ubidoty]: 6 kroków
Czy wiesz, jak się czują Twoje rośliny? [Particle+Ubidots]: Nic nie zastąpi chodzenia i samodzielnego zajmowania się glebą, ale dzisiejsza technologia umożliwiła zdalne monitorowanie gleby i śledzenie parametrów, których nie da się zmierzyć moimi ludzkimi zmysłami. Sondy glebowe, takie jak SHT10, są teraz niezwykle dokładne i oferują
Rośliny kosmiczne: 5 kroków
Space Plants: Witam, dziękuję za przeczytanie mojej instrukcji. Ten Ogród został zgłoszony do konkursu twórców Growing Beyond the Earth na poziomie szkoły średniej. Ogród może sam nawadniać, ogrzewać, chłodzić i oświetlać. Cały kod znajduje się tutaj, więc możesz go edytować do m
Zbuduj samodzielny doniczek do samodzielnego podlewania z Wi-Fi - automatycznie podlewa rośliny i wysyła alerty, gdy poziom wody jest niski: 19 kroków
Zbuduj samouczek do samodzielnego podlewania z Wi-Fi - automatycznie podlewa rośliny i wysyła alerty, gdy poziom wody jest niski: ten samouczek pokazuje, jak zbudować dostosowaną do własnych potrzeb doniczkę z połączeniem Wi-Fi, używając starej donicy ogrodowej, kosza na śmieci, kleju i samouczka Zestaw podzespołu naczynia do podlewania firmy Adosia