Inhoudsopgave:
- Stap 1: Een plug-in-stub laden
- Stap 2: Gegevens zoeken op de sensor
- Stap 3: Afwerking
- Stap 4: Gebruik het in de grotere context
- Stap 5: Slotwoorden
Video: FlowerCare en Nymea om mijn planten te redden - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Handen vuil maken bij het aansluiten van plantenverzorgingssensoren op mijn bestaande open source smart home. Een overzicht van de ontwikkeling van plug-ins voor nymea.
Het verhaal
Net als veel andere knutselaars en hackers, heb ik ook last van het probleem dat het hacken van dingen zoveel van mijn tijd in beslag neemt dat ik af en toe vergeet mijn planten water te geven. Nadat mijn Monstera Deliciosa weer last had van droge grond, heb ik besloten om te kijken of ik er iets aan kan doen om me eraan te herinneren wanneer hij dorst heeft.
Een snel onderzoek op het web bracht mijn aandacht op de Xiaomi FlowerCare, ook wel bekend als MiCare of PlantCare. Het is een Bluetooth Low Energy-apparaat en wat basisonderzoek heeft uitgewezen dat het protocol vrij eenvoudig te begrijpen lijkt. Hoewel Xiaomi geen openbare specificaties lijkt te bieden, is er op internet nog behoorlijk wat reverse-engineering voor dit apparaat geweest. Dus besloot ik er een te bestellen.
Een paar dagen later werd het bezorgd en natuurlijk begon ik er meteen mee te spelen. Ik heb even de app bekeken die erbij hoort, maar zoals je waarschijnlijk wel kunt raden, was het nooit mijn plan om het in de standaardconfiguratie te gebruiken. Dit moet natuurlijk worden geïntegreerd met mijn bestaande smart home-opstelling. Zoals ook hier beschreven, gebruik ik nymea als mijn smart home-oplossing (Ja, je kunt de Monstera zelfs op een van de foto's daar zien:)). Helaas ondersteunde nymea die sensor nog niet, dus het opstarten van wat IDE was in orde.
Stap 1: Een plug-in-stub laden
Dus het eerste wat ik deed, was de bestaande Texas Instruments Sensor Tag-plug-in kopiëren, het leek voldoende op wat ik aannam dat ook voor het FlowerCare-apparaat zou moeten werken. Na het hernoemen van dingen in de plugininfo.json en het wegwerken van de meeste code van de sensortag-plug-in, was ik klaar om de nieuwe plug-in-stub te laden.
Zoals verwacht, zou de ontdekking de sensor al meteen laten zien en me in staat stellen om deze aan het systeem toe te voegen. Natuurlijk zou het op dit moment geen zinvolle gegevens opleveren.
Stap 2: Gegevens zoeken op de sensor
Zoals bij elk Bluetooth LE-apparaat, is het eerste wat u wilt doen te weten komen over de aangeboden diensten en hun kenmerken. Ergens daarin zijn de feitelijke gegevens verborgen. Met een snelle debug-afdruk die alle ontdekte services doorloopt en hun kenmerken afdrukt, was ik op het punt waar ik de informatie die ik op internet vond, kon vergelijken met wat het apparaat daadwerkelijk rapporteert.
ongeldig FlowerCare::onServiceDiscoveryFinished(){ BluetoothLowEnergyDevice *btDev = static_cast(sender()); qCDebug(dcFlowerCare()) << "service uuids hebben"
De firmwareversie en het batterijniveau waren eenvoudig. Ik kon de overeenkomstige waarden al zien afgedrukt in deze allereerste poging om de gegevens op te sommen. De werkelijke sensorwaardes zitten daar wat dieper in verstopt, maar door deze te combineren met de data van internet werd meteen duidelijk waar ze te vinden waren en vooral hoe ze te lezen.
void FlowerCare::onSensorServiceCharacteristicRead(const QLowEnergyCharacteristic &characteristic, const QByteArray &value){ qCDebug(dcFlowerCare()) << "Karakteristiek gelezen" << QString::number(characteristic.handle(), 16) temp; qint8 overslaan; streamen >> overslaan; quint32 lux; stroom >> lux; qint8 vocht; stroom >> vocht; qint16 vruchtbaarheid; stroom >> vruchtbaarheid; uitstoten afgewerkt (m_batteryLevel, 1.0 * temp / 10, lux, vocht, vruchtbaarheid); }
Door dit samen te voegen, begon de plug-in al zinvolle gegevens te produceren.
Stap 3: Afwerking
Dus het werkte nu in principe, maar er was nog steeds een probleem. De FlowerCare-sensor zou, in tegenstelling tot de Texas Instruments SensorTag, na enkele seconden de Bluetooth-verbinding wegvallen. Gezien de use-case lijkt dit echter geen probleem te zijn, omdat het behoorlijk betrouwbaar is in het reageren op verbindingspogingen. Aangezien een plant normaal gesproken geen liter water opzuigt binnen enkele minuten, maar dagen, lijkt het niet nodig om constant verbonden te blijven. Ook zou dit de batterij behoorlijk leegtrekken. Dus besloot ik een PluginTimer toe te voegen die de sensor elke 20 minuten opnieuw zou verbinden en er gegevens van zou ophalen. Als de sensor om de een of andere reden niet reageert op de verbindingspoging, start de code een andere timer die vanaf dat moment elke minuut opnieuw verbinding probeert te maken totdat het erin slaagt de gegevens te krijgen. Dan zou het teruggaan om opnieuw gegevens op te halen over het interval van 20 minuten. Als het apparaat twee keer achter elkaar geen verbinding kan maken (dat wil zeggen, na 20 + 1 minuut), wordt het in het systeem als offline gemarkeerd en kan de gebruiker hierover worden gewaarschuwd.
void DevicePluginFlowercare::onPluginTimer(){ foreach (FlowerCare *flowerCare, m_list) { if (--m_refreshMinutes[flowerCare] <= 0) { qCDebug(dcFlowerCare()) << "Vernieuwend" adres(); flowerCare->refreshData(); } else { qCDebug(dcFlowerCare()) << "Niet vernieuwend" adres() << " Volgende verversen over" << m_refreshMinutes[flowerCare] << "minuten"; } // Als we 2 of meer mislukte verbindingspogingen hebben gehad, markeer deze dan als verbroken if (m_refreshMinutes[flowerCare] < -2) { qCDebug(dcFlowerCare()) << "Kan niet vernieuwen voor"<< (m_refreshMinutes[flowerCare] * -1) <setStateValue(flowerCareConnectedStateTypeId, false); } } }
Met deze strategie leek nymea nu perfect betrouwbare gegevens van deze sensor te leveren.
Stap 4: Gebruik het in de grotere context
Alleen waarden van de sensor krijgen is echter niet zo handig, daar had ik ook de originele app voor kunnen gebruiken. Laten we er nu wat slimme dingen mee doen.
Nymea ondersteunt het verzenden van pushmeldingen, hetzij naar telefoons waarop nymea:app is geïnstalleerd, hetzij via PushBullet. Het ligt dus voor de hand om mezelf enkele pushmeldingen te sturen wanneer het bodemvocht onder de 15% daalt. Het is vrij eenvoudig om dat in de app in te stellen. Als voorwaarde heb je ofwel een account nodig in nymea:cloud of op PushBullet. Voor op nymea:cloud gebaseerde pushmeldingen is het voldoende om nymea:cloud in te schakelen op de nymea:core en in nymea:app. Zodra beide zijn verbonden, verschijnt er automatisch een melding. Voor PushBullet iets nieuws toevoegen in het systeem, daar vind je PushBullet in de lijst. Het zal u vragen om de API-sleutel die u krijgt wanneer u zich aanmeldt bij PushBullet. Zodra je een pushmelding hebt in nymea, kun je een regel maken.
Je kunt natuurlijk doen wat je nog meer wilt… Je kunt ook wat licht aanzetten om sensorwaarden weer te geven, of de HTTP-commander-plug-in gebruiken om bijvoorbeeld sensorwaarden naar een server op internet te posten. Ik heb geen waterklep die (nog) digitaal kan worden bestuurd, maar natuurlijk, als je zoiets hebt en het wordt nog niet ondersteund door nymea, zou het toevoegen van een plug-in vrij gelijkaardig zijn dan dit.
Stap 5: Slotwoorden
De plug-in voor bloemenverzorging is inmiddels upstream geaccepteerd en als je er een hebt, is deze nu klaar om te worden gebruikt met nymea. Ik hoop echter dat dit artikel van belang kan zijn als iemand ondersteuning voor andere apparaten wil toevoegen. Het zou een uitleg moeten zijn over hoe u uw eigen plug-in voor nymea kunt bouwen.
Als je deze opstelling gewoon bij je thuis wilt bouwen, heb je alleen de FlowerCare-sensor, een Raspberry Pi, de nymea-gemeenschapsafbeelding (deze bevat nu de plug-in voor bloemenverzorging) en nymea:app nodig die beschikbaar is in app-winkels. Tot nu toe is mijn Monstera Deliciosa weer gelukkig en zoals je misschien in de screenshots hebt gezien, heb ik mezelf een tweede van die sensoren gegeven om ook de gezondheid van mijn citroenboom te volgen. Daarvoor stuur ik mezelf een pushbericht als het buiten vriest, zodat ik hem veilig de winter door kan komen.
Aanbevolen:
AUTOMATISCHE AFVALBAK OF BIN. DE PLANEET REDDEN: 19 stappen (met afbeeldingen)
AUTOMATISCHE AFVALBAK OF BIN. OM DE PLANEET TE REDDEN: Voordat we beginnen, raad ik je aan de eerste video te bekijken voordat je deze leest, omdat deze erg handig is. Hallo, mijn naam is Jacob en ik woon in het VK. Recycling is een groot probleem waar ik woon. Ik zie veel zwerfvuil op de velden en het kan schadelijk zijn. NS
Het saaie leven redden met een slimme lamp: 3 stappen
Het saaie leven redden met een slimme lamp: we hopen allemaal dat we thuis comfortabeler kunnen leven. Of voel je je vaak ongemakkelijk omdat het dimmen van huishoudlampen niet slim genoeg is? Of voel je je eentonig vanwege de functie van huishoudlamp? Deze lamp kan je tr
Faxapparaat: onderdelen uitleggen en wat het waard is om te redden: 9 stappen
Faxapparaat: uitleg over onderdelen en wat het waard is om te redden: onlangs heb ik dit faxapparaat gevonden. Ik maakte het schoon en verbond het met de stroomkabel en telefoonlijn, en het werkte correct, maar ik heb geen faxapparaat nodig en ik dacht dat het leuk zou zijn om het uit elkaar te halen en er nog een instructable over te maken. L
Dvd-speler: onderdelen uitleggen en wat het waard is om te redden: 9 stappen
Dvd-speler: onderdelen uitleggen en wat de moeite waard is om te redden: vandaag bekijken we deze oude dvd-speler. Het werkte niet goed, dus besloot ik het te openen en te kijken wat erin zit. Het probleem was dat het constant open en dicht ging en niet van de schijf wilde lezen. Ik zal de basis uitleggen
Mijn toetsenbord Mijn handen: 8 stappen (met afbeeldingen)
Mijn toetsenbord Mijn handen: ik heb de gloednieuwe Epilog-lasersnijder gebruikt die Instructables onlangs heeft gekregen om een afbeelding van mijn handen permanent op het toetsenbord van mijn laptop te laseretsen. Dat maakt je garantie ongeldig in doe-het-zelfstijl! Ik heb meer laptops met laser geëtst dan de meeste sinds ik help o