Სარჩევი:

FlowerCare და Nymea ჩემი მცენარეების გადასარჩენად: 5 ნაბიჯი
FlowerCare და Nymea ჩემი მცენარეების გადასარჩენად: 5 ნაბიჯი

ვიდეო: FlowerCare და Nymea ჩემი მცენარეების გადასარჩენად: 5 ნაბიჯი

ვიდეო: FlowerCare და Nymea ჩემი მცენარეების გადასარჩენად: 5 ნაბიჯი
ვიდეო: აღმოაჩინეთ საიდუმლო, რომელსაც ყველა იყენებს მცენარეებზე 2024, ივლისი
Anonim
FlowerCare და Nymea ჩემი მცენარეების გადასარჩენად
FlowerCare და Nymea ჩემი მცენარეების გადასარჩენად

ხელების დაბინძურება მცენარეთა მოვლის სენსორების ჩემს არსებულ ღია წყაროზე ჭკვიან სახლში. ნაბიჯ -ნაბიჯ nymea– ს მოდულის განვითარების შესახებ.

Ამბავი

როგორც ბევრი სხვა დამჭერი და ჰაკერი, მეც მაწუხებს ის საკითხი, რომ ნივთების გატეხვა იმდენად დიდ დროს მაკავებს, რომ ხანდახან მავიწყდება მცენარეების მორწყვა. მას შემდეგ, რაც ჩემს Monstera Deliciosa– ს კიდევ ერთხელ აწუხებდა მშრალი ნიადაგი, მე გადავწყვიტე ვნახო, შემიძლია თუ არა ამის გაკეთება, რომ შემახსენოს, როცა მწყურია.

ინტერნეტში სწრაფმა კვლევამ ჩემი ყურადღება მიიპყრო Xiaomi FlowerCare– ზე, ასევე ცნობილი როგორც MiCare ან PlantCare. ეს არის Bluetooth დაბალი ენერგიის მოწყობილობა და ზოგიერთმა ძირითადმა კვლევამ აჩვენა, რომ მისი პროტოკოლი, როგორც ჩანს, საკმაოდ ადვილი გასაგებია. მიუხედავად იმისა, რომ Xiaomi არ იძლევა რაიმე საჯარო სპეციფიკაციას, ინტერნეტში ამ მოწყობილობისთვის ჯერ კიდევ არსებობს საკმაოდ საპირისპირო ინჟინერია. ამიტომაც გადავწყვიტე ერთი ასეთი შემეკვეთა.

რამდენიმე დღის შემდეგ ის გადმოვიდა და, რა თქმა უნდა, მაშინვე დავიწყე თამაში. მე მოკლედ შევამოწმე აპლიკაცია, რომელიც მოყვება, მაგრამ როგორც თქვენ ალბათ მიხვდით, მისი ნაგულისხმევი პარამეტრების გამოყენება არასოდეს ყოფილა ჩემი გეგმა. რასაკვირველია, ეს უნდა იყოს ინტეგრირებული ჩემს არსებულ ჭკვიან სახლის კონფიგურაციასთან. როგორც აქ აღწერილი ვარ, მე ვიყენებ nymea- ს, როგორც ჩემს ჭკვიან სახლის გადაწყვეტას (დიახ, თქვენ შეგიძლიათ შენიშნოთ Monstera ერთ -ერთ სურათზე იქ:)). სამწუხაროდ, nymea– მ არ დაუჭირა მხარი ამ სენსორს, ასე რომ, ზოგიერთი IDE სროლა წესრიგში იყო.

ნაბიჯი 1: მიიღეთ მოდულის სტატუსის დატვირთვა

მოდულის სტატუსის დატვირთვა
მოდულის სტატუსის დატვირთვა
მოდულის სტატუსის დატვირთვა
მოდულის სტატუსის დატვირთვა
მოდულის სტატუსის დატვირთვა
მოდულის სტატუსის დატვირთვა

ასე რომ, პირველი რაც გავაკეთე იყო არსებული Texas Instruments Sensor Tag მოდულის კოპირება, როგორც ჩანს, საკმარისად ჰგავდა იმას, რასაც ვფიქრობდი, რომ ის ასევე უნდა მუშაობდეს FlowerCare მოწყობილობაზე. Plugininfo.json– ში საგნების ძირითადი სახელის გადარქმევისა და სენსორტაგის მოდულის კოდის უმეტესობის კომენტირების შემდეგ, მე მზად ვიყავი ჩავტვირთო ახალი მოდულის სტატუსი.

როგორც მოსალოდნელი იყო, აღმოჩენა უკვე აჩვენებდა სენსორს მაშინვე და საშუალებას მომცემდა სისტემაში ჩამემატებინა. რასაკვირველია, ის ამ ეტაპზე რაიმე მნიშვნელოვან მონაცემს არ გამოიმუშავებს.

ნაბიჯი 2: მონაცემების მოძიება სენსორზე

მონაცემების მოძიება სენსორზე
მონაცემების მოძიება სენსორზე

როგორც ნებისმიერი Bluetooth LE მოწყობილობა, პირველი რაც გსურთ გააკეთოთ არის გაეცნოთ მის მიერ შემოთავაზებულ სერვისებს და მათ მახასიათებლებს. სადღაც იქ რეალური მონაცემები იმალება. ყველა აღმოჩენილ სერვისზე სწრაფი ბეჭდვის მარკირებით და მათი მახასიათებლების დაბეჭდვით მე ვიყავი იმ წერტილში, სადაც შემეძლო შემედარებინა ინტერნეტში მოძიებული ინფორმაცია იმასთან, რასაც რეალურად აცხადებს მოწყობილობა.

void FlowerCare:: onServiceDiscoveryFinished () {BluetoothLowEnergyDevice *btDev = static_cast (გამგზავნი ()); qCDebug (dcFlowerCare ()) << "აქვს სერვისი uuids" controller ()-> createServiceObject (sensorServiceUuid, ეს); დაკავშირება (m_sensorService, & QLowEnergyService:: stateChanged, this, & FlowerCare:: onSensorServiceStateChanged); დაკავშირება (m_sensorService, & QLowEnergyService:: characterRead, this, & FlowerCare:: onSensorServiceCharacteristicRead); m_sensorService-> DiscoverDetails (); } void FlowerCare:: onSensorServiceStateChanged (const QLowEnergyService:: ServiceSate & state) {if (state! = QLowEnergyService:: ServiceDiscovered) {return; } foreach (const QLowEnergyCharacteristic & დამახასიათებელი, m_sensorService-> მახასიათებლები ()) {qCDebug (dcFlowerCare ()). nospace () <"<< დამახასიათებელი. uuid (). toString () <<" ("<< დამახასიათებელი. სახელური () << "სახელი:" << დამახასიათებელი. სახელი () << "):" << დამახასიათებელი. მნიშვნელობა () << "," << დამახასიათებელი. მნიშვნელობა (). ToHex (); foreach (const QLowEnergyDescriptor & descriptor, დამახასიათებელი. descriptors ()) {qCDebug (dcFlowerCare ()). nospace () <"<< descriptor.uuid (). toString () <<" ("<< descriptor.handle () <". სახელი () << "):" << descriptor.value () << "," << descriptor.value (). toHex (); }}}

Firmware ვერსია და ბატარეის დონე ადვილი იყო. მე უკვე ვხედავდი მონაცემების ჩამოთვლის ამ პირველ მცდელობაში დაბეჭდილ მნიშვნელობებს. სენსორის რეალური მნიშვნელობები იმალება იქ ოდნავ უფრო ღრმად, მაგრამ ინტერნეტის მონაცემებთან შერწყმამ მაშინვე მიანიშნა სად ვიპოვო და განსაკუთრებით როგორ წავიკითხო.

void FlowerCare:: onSensorServiceCharacteristicRead (const QLowEnergyCharacteristic & დამახასიათებელი, const QByteArray & value) {qCDebug (dcFlowerCare ()) << "დამახასიათებელი წაკითხვა" << QString:: ნომერი (დამახასიათებელი. სახელური (), 16) ტემპერატურა; qint8 გამოტოვება; ნაკადი >> გამოტოვება; quint32 lux; ნაკადი >> ლუქსი; qint8 ტენიანობა; ნაკადი >> ტენიანობა; qint16 ნაყოფიერება; ნაკადი >> ნაყოფიერება; გამოსხივება დასრულებულია (m_batteryLevel, 1.0 * temp / 10, lux, ტენიანობა, ნაყოფიერება); }

ამის გაერთიანებით, მოდულმა უკვე დაიწყო მნიშვნელოვანი მონაცემების წარმოება.

ნაბიჯი 3: შეხების დასრულება

დასრულების შეხება
დასრულების შეხება

ასე რომ, ის ძირითადად მუშაობდა ახლა, თუმცა, ერთი საკითხი მაინც დარჩა იქ. FlowerCare სენსორი, Texas Instruments SensorTag– ისგან განსხვავებით, რამდენიმე წამში ჩამოშორდება Bluetooth კავშირს. გამოყენების შემთხვევის გათვალისწინებით, ეს არ ჩანს, რადგან ის საკმაოდ საიმედოა კავშირის მცდელობებზე რეაგირებისას. იმის გათვალისწინებით, რომ მცენარე ჩვეულებრივ არ იწოვს ლიტრ წყალს წუთებში, არამედ რამდენიმე დღის განმავლობაში, არ არის აუცილებელი, რომ მუდმივად იყოს დაკავშირებული. ასევე, ამით ბატარეა საკმაოდ დაიღვრება. ამიტომ გადავწყვიტე დავამატო PluginTimer, რომელიც ყოველ 20 წუთში ხელახლა დააკავშირებდა სენსორს და მისგან მოიტანდა მონაცემებს. თუ რაიმე მიზეზით, სენსორი არ პასუხობს კავშირის მცდელობას, კოდი დაიწყებს სხვა ტაიმერს, რომელიც ცდილობს ყოველ წუთს ხელახლა დაუკავშიროს იმ მომენტიდან სანამ არ მოახერხებს მონაცემების მიღებას. შემდეგ ის კვლავ დაბრუნდებოდა მონაცემების მოსაპოვებლად 20 წუთის ინტერვალით. თუ მოწყობილობა ვერ შეძლებს ზედიზედ ორჯერ დაკავშირებას (იგულისხმება 20 + 1 წუთის შემდეგ), ის სისტემაში ხაზგარეშე იქნება მონიშნული და მომხმარებელს შეუძლია გააფრთხილოს ამის შესახებ.

void DevicePluginFlowercare:: onPluginTimer () {foreach (FlowerCare *flowerCare, m_list) {if (--m_refreshMinutes [flowerCare] <= 0) {qCDebug (dcFlowerCare ()) << "გამაგრილებელი" მისამართი (); flowerCare-> refreshData (); } else {qCDebug (dcFlowerCare ()) << "არ არის გამაგრილებელი" მისამართი () << "შემდეგი განახლება" << m_refreshMinutes [flowerCare] << "წუთში"; } // თუ ჩვენ გვქონდა კავშირის 2 ან მეტი წარუმატებელი მცდელობა, მონიშნეთ როგორც გათიშული, თუ (m_refreshMinutes [flowerCare] <-2) {qCDebug (dcFlowerCare ()) << "განახლება ვერ მოხერხდა" << (m_refreshMinutes [flowerCare] * -1) <setStateValue (flowerCareConnectedStateTypeId, false); }}}

ამ სტრატეგიით, nymea– მ ამ სენსორისგან შესანიშნავად მიაწოდა მონაცემები.

ნაბიჯი 4: მისი გამოყენება უფრო დიდ კონტექსტში

მისი გამოყენება უფრო დიდ კონტექსტში
მისი გამოყენება უფრო დიდ კონტექსტში
მისი გამოყენება უფრო დიდ კონტექსტში
მისი გამოყენება უფრო დიდ კონტექსტში

სენსორისგან მხოლოდ მნიშვნელობების მიღება არც თუ ისე სასარგებლოა, მე ასევე შემეძლო გამოვიყენო ორიგინალური აპლიკაცია ამისათვის. ახლა მოდით გავაკეთოთ რამდენიმე ჭკვიანი რამ მასთან ერთად.

Nymea მხარს უჭერს push შეტყობინებების გაგზავნას, ან nymea– ს ტელეფონებზე: დაინსტალირებული აპლიკაცია, ან PushBullet– ის საშუალებით. ასე რომ, აშკარაა, რომ გამომიგზავნოთ შეტყობინებები, როდესაც ნიადაგის ტენიანობა 15%-ზე დაბლა მოდის. საკმაოდ ადვილია ამის დაყენება აპლიკაციაში. როგორც წინაპირობა, ან გჭირდებათ ანგარიში nymea: cloud ან PushBullet– ზე. Nymea: ღრუბელზე დაფუძნებული push შეტყობინებებისათვის საკმარისია ჩართოთ nymea: cloud on nymea: core და nymea: app. როგორც კი ორივე დაკავშირებულია, შეტყობინების ობიექტი ავტომატურად გამოჩნდება. PushBullet– ისთვის დაამატეთ ახალი რამ სისტემაში, თქვენ ნახავთ PushBullet– ს სიაში. ის მოგთხოვთ API გასაღებს, რომელსაც მიიღებთ PushBullet– ით დარეგისტრირებისას. მას შემდეგ რაც თქვენ გაქვთ შეტყობინების ბიუჯეტი ნიმეაში, შეგიძლიათ შექმნათ წესი.

რა თქმა უნდა, თქვენ შეგიძლიათ გააკეთოთ რაც გინდათ … ასევე შეგიძლიათ ჩართოთ შუქი სენსორის მნიშვნელობების ასახვის მიზნით, ან გამოიყენოთ HTTP მეთაურის მოდული, რომ განათავსოთ სენსორის მნიშვნელობები სერვერზე ინტერნეტში, მაგალითად. მე არ მაქვს წყლის სარქველი რომლის კონტროლი შესაძლებელია ციფრულად (ჯერჯერობით) მაგრამ რა თქმა უნდა, თუ თქვენ გაქვთ ასეთი რამ და ის ჯერ არ არის მხარდაჭერილი nymea– ით, ამისთვის მოდულის დამატება უფრო მსგავსი იქნება ვიდრე ეს.

ნაბიჯი 5: სიტყვების დახურვა

სიტყვების დახურვა
სიტყვების დახურვა

Flowercare მოდული უკვე მიღებულია დინების ზემოთ და თუ თქვენ გაქვთ ერთი მათგანი, ის მზადაა გამოვიყენოთ nymea– ით. თუმცა, ვიმედოვნებ, რომ ეს სტატია შეიძლება იყოს საინტერესო, თუ ვინმეს სურს დაამატოს მხარდაჭერა სხვა მოწყობილობებისთვის. ეს უნდა იყოს ნაბიჯი იმის შესახებ, თუ როგორ უნდა შექმნათ თქვენი საკუთარი მოდული nymea– სთვის.

თუ გსურთ უბრალოდ შექმნათ ეს კონფიგურაცია თქვენს სახლში, ყველაფერი რაც გჭირდებათ არის FlowerCare სენსორი, Raspberry Pi, nymea საზოგადოების სურათი (ის მოიცავს ყვავილების მოვლის მოდულს) და nymea: აპლიკაცია, რომელიც ხელმისაწვდომია აპლიკაციის მაღაზიებში. ასევე, ჯერჯერობით ჩემი Monstera Deliciosa კვლავ ბედნიერია და როგორც თქვენ ალბათ გინახავთ ეკრანის სურათებში, მე მივიღე მეორე სენსორი, რომელიც თვალყურს ადევნებდა ჩემი ლიმონის ხის ჯანმრთელობასაც. ამისთვის მე თვითონ ვაგზავნი push შეტყობინებას, როდესაც გარეთ იყინება, ასე რომ შემიძლია ზამთარი უსაფრთხოდ გავატარო.

გირჩევთ: