Sommario:
- Passaggio 1: caricamento di uno stub del plug-in
- Passaggio 2: ricerca dei dati sul sensore
- Passaggio 3: ritocchi finali
- Passaggio 4: utilizzarlo in un contesto più ampio
- Passaggio 5: parole di chiusura
Video: FlowerCare e Nymea per salvare le mie piante: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
Sporcarsi le mani collegando i sensori per la cura delle piante alla mia casa intelligente open source esistente. Una guida allo sviluppo di plugin per nymea.
La storia
Come molti altri armeggiatori e hacker, anch'io soffro del problema che l'hacking delle cose richiede così tanto del mio tempo che a volte mi dimentico di annaffiare le mie piante. Dopo che la mia Monstera Deliciosa ha sofferto ancora una volta di terreno arido, ho deciso di vedere se posso fare qualcosa per ricordarmi quando ha sete.
Una rapida ricerca sul web ha portato la mia attenzione sullo Xiaomi FlowerCare, noto anche come MiCare o PlantCare. È un dispositivo Bluetooth Low Energy e alcune ricerche di base hanno rivelato che il suo protocollo sembra essere abbastanza facile da capire. Sebbene Xiaomi non sembri fornire alcuna specifica pubblica, c'è stata ancora un po' di reverse engineering su Internet per questo dispositivo. Così ho deciso di ordinarne uno.
Pochi giorni dopo è stato consegnato e ovviamente ho iniziato a giocarci subito. Ho controllato brevemente l'app fornita con esso, ma come probabilmente puoi immaginare, utilizzarlo nella sua configurazione predefinita non è mai stato il mio piano. Ovviamente questo deve essere integrato con la mia configurazione di casa intelligente esistente. Come descritto anche qui, sto usando nymea come soluzione per la mia casa intelligente (Sì, puoi persino individuare il Monstera in una delle immagini lì:)). Purtroppo, nymea non supportava ancora quel sensore, quindi era necessario avviare un po' di IDE.
Passaggio 1: caricamento di uno stub del plug-in
Quindi la prima cosa che ho fatto è stata copiare il plug-in Texas Instruments Sensor Tag esistente, sembrava abbastanza simile a quello che pensavo dovesse funzionare anche per il dispositivo FlowerCare. Dopo la ridenominazione di base delle cose nel plugininfo.json e commentando la maggior parte del codice del plugin sensortag, ero pronto per caricare il nuovo stub del plugin.
Come previsto, la scoperta mostrerebbe già subito il sensore e mi consentirebbe di aggiungerlo al sistema. Ovviamente non produrrebbe alcun dato significativo a questo punto.
Passaggio 2: ricerca dei dati sul sensore
Come con qualsiasi dispositivo Bluetooth LE, la prima cosa che vuoi fare è informarti sui servizi che offre e sulle loro caratteristiche. Da qualche parte lì dentro i dati reali sono nascosti. Con una rapida stampa di debug che esegue il ciclo su tutti i servizi rilevati e stampa le loro caratteristiche, sono arrivato al punto in cui ho potuto confrontare le informazioni che ho trovato su Internet con ciò che il dispositivo riporta effettivamente.
void FlowerCare::onServiceDiscoveryFinished(){ BluetoothLowEnergyDevice *btDev = static_cast(sender()); qCDebug(dcFlowerCare()) << "disponi di uuid di servizio"
La versione del firmware e il livello della batteria erano facili. Potevo già vedere i valori corrispondenti stampati in questo primissimo tentativo di elencare i dati. I valori effettivi del sensore sono nascosti un po' più in profondità, ma combinandoli con i dati da Internet ha subito indicato dove trovarlo e soprattutto come leggerlo.
void FlowerCare::onSensorServiceCharacteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value){ qCDebug(dcFlowerCare()) << "Lettura caratteristica" << QString::number(characteristic.handle(), 16) temp; qint8 salta; flusso >> salta; quint32 lux; flusso >> lux; qint8 umidità; flusso >> umidità; qint16 fertilità; ruscello >> fertilità; emetti finito (m_batteryLevel, 1.0 * temp / 10, lux, umidità, fertilità); }
Mettendo insieme questo, il plugin ha già iniziato a produrre dati significativi.
Passaggio 3: ritocchi finali
Quindi fondamentalmente ha funzionato ora, tuttavia, un problema era ancora rimasto lì. Il sensore FlowerCare, contrariamente al SensorTag di Texas Instruments, interromperebbe la connessione Bluetooth dopo pochi secondi. Considerando il caso d'uso, tuttavia, questo non sembra essere un problema in quanto è abbastanza affidabile nel rispondere ai tentativi di connessione. Dato che normalmente una pianta non aspira un litro d'acqua in pochi minuti, ma in giorni, non sembra necessario rimanere sempre connessi. Anche questo consumerebbe parecchio la batteria. Quindi ho deciso di aggiungere un PluginTimer che riconnettesse il sensore ogni 20 minuti e recuperasse i dati da esso. Se, per qualche motivo, il sensore non rispondesse al tentativo di connessione, il codice avvierà un altro timer che tenterà di riconnettersi ogni minuto da quel momento in poi fino a quando non riesce a ottenere i dati. Quindi tornerà a recuperare nuovamente i dati nell'intervallo di 20 minuti. Se il dispositivo non riesce a connettersi due volte di seguito (ovvero, dopo 20 + 1 minuti), verrà contrassegnato offline nel sistema e l'utente può essere avvisato.
void DevicePluginFlowercare::onPluginTimer(){ foreach (FlowerCare *flowerCare, m_list) { if (--m_refreshMinutes[flowerCare] <= 0) { qCDebug(dcFlowerCare()) << "Refreshing" address(); flowerCare->refreshData(); } else { qCDebug(dcFlowerCare()) << Indirizzo "Non aggiornato"() << " Prossimo aggiornamento tra" << m_refreshMinutes[flowerCare] << "minuti"; } // Se abbiamo avuto 2 o più tentativi di connessione falliti, contrassegnalo come disconnesso if (m_refreshMinutes[flowerCare] < -2) { qCDebug(dcFlowerCare()) << "Impossibile aggiornare per"<< (m_refreshMinutes[flowerCare] * -1) <setStateValue(flowerCareConnectedStateTypeId, false); } } }
Con questa strategia nymea ora sembrava fornire dati perfettamente affidabili da questo sensore.
Passaggio 4: utilizzarlo in un contesto più ampio
Anche solo ottenere i valori dal sensore non è molto utile, avrei anche potuto usare l'app originale per quello. Ora facciamo alcune cose intelligenti con esso.
Nymea supporta l'invio di notifiche push, sia ai telefoni con nymea:app installata, sia tramite PushBullet. Quindi la cosa più ovvia da fare è inviarmi alcune notifiche push ogni volta che l'umidità del suolo scende al di sotto del 15%. È piuttosto facile configurarlo nell'app. Come prerequisito hai bisogno di un account in nymea:cloud o su PushBullet. Per le notifiche push basate su nymea:cloud è sufficiente abilitare nymea:cloud su nymea:core e in nymea:app. Non appena entrambi sono collegati, apparirà automaticamente una notifica. Per PushBullet aggiungi una nuova cosa nel sistema, troverai PushBullet nell'elenco lì. Ti chiederà la chiave API che ottieni quando ti registri con PushBullet. Una volta che hai una notifica push in nymea, puoi creare una regola.
Ovviamente puoi fare qualsiasi altra cosa tu voglia… Può anche accendere un po' di luce per riflettere i valori del sensore, o usare il plugin del commander HTTP per inviare i valori del sensore a un server su Internet, ad esempio. Non ho una valvola per l'acqua che può essere controllato digitalmente (ancora) ma ovviamente, se hai una cosa del genere e non è ancora supportata da nymea, aggiungere un plug-in sarebbe piuttosto simile a questo.
Passaggio 5: parole di chiusura
Il plugin flowercare è stato accettato a monte ormai e se ne hai uno è pronto per essere usato con nymea ora. Tuttavia, spero che questo articolo possa essere di interesse se qualcuno desidera aggiungere il supporto per altri dispositivi. Dovrebbe essere una guida dettagliata su come creare il proprio plugin per nymea.
Se vuoi semplicemente creare questa configurazione a casa tua, tutto ciò di cui hai bisogno è il sensore FlowerCare, un Raspberry Pi, l'immagine della community nymea (che ora include il plug-in per la cura dei fiori) e nymea: app che è disponibile negli app store. Inoltre, finora la mia Monstera Deliciosa è di nuovo felice e come potresti aver visto negli screenshot, mi sono procurato un secondo di quei sensori per monitorare anche la salute del mio albero di limoni. Per quello mi invio una notifica push ogni volta che fuori fa freddo così posso portarlo in sicurezza durante l'inverno.
Consigliato:
Avviso acqua: un dispositivo per salvare la tua barca: 5 passaggi (con immagini)
Avviso acqua - un dispositivo per salvare la tua barca: se sei un proprietario di una barca, c'è un solido conforto nel portare finalmente la barca sulla terraferma. Non può affondare lì. Ovunque affronta una battaglia continua per vincere la tendenza a scivolare sotto le onde e scomparire. Durante l'inverno qui ad Ahimè
Salvare un caricabatterie per auto?: 6 passaggi
Rescue a Car Charger?: Questo è il caricabatterie per auto per il mio iPhone. I vortici gialli si accendono quando è in funzione. Succede solo a intermittenza. Ho deciso di vedere cosa si poteva fare
Alimentatore automatico per piante WiFi con serbatoio - Impostazione coltivazione indoor/outdoor - Piante acquatiche automaticamente con monitoraggio remoto: 21 passaggi
Wi-Fi Automatic Plant Feeder With Reservoir - Configurazione coltivazione indoor/outdoor - Innaffiare le piante automaticamente con monitoraggio remoto: In questo tutorial dimostreremo come configurare un sistema di alimentazione piante interno/esterno personalizzato che irriga automaticamente le piante e può essere monitorato da remoto utilizzando la piattaforma Adosia
Alexa, dove sono le mie chiavi?: 4 passaggi
Alexa, dove sono le mie chiavi?: Alexa è particolarmente adatto per le attività di recupero delle informazioni e il monitoraggio delle risorse utilizzando le reti domestiche wireless. È naturale considerare l'inserimento di oggetti di valore sulla griglia per un rapido recupero. Abbiamo hackerato beacon bluetooth a basso consumo energetico per la rete
La mia tastiera Le mie mani: 8 passaggi (con immagini)
La mia tastiera Le mie mani: ho usato il nuovissimo laser cutter Epilog che Instructables ha recentemente ottenuto per incidere al laser un'immagine delle mie mani sulla tastiera del mio laptop… in modo permanente. Ora questo sta annullando la tua garanzia in stile fai-da-te! Ho inciso al laser più laptop della maggior parte da quando ho aiutato o