Лытко біріктіреді

Біраз уақыт бұрын біз сізді таныстырдық ақылды термостат. Бұл мақала бастапқыда оның микробағдарламасы мен басқару жүйесін көрсету үшін арналған. Бірақ термостаттың логикасын және біз нені жүзеге асырғанымызды түсіндіру үшін тұтастай алғанда бүкіл тұжырымдаманы сипаттау қажет.

Лытко біріктіреді

Автоматтандыру туралы

Шартты түрде барлық автоматтандыруды үш санатқа бөлуге болады:
1 санаты — бөлек «ақылды» құрылғылар. Сіз әртүрлі өндірушілерден шамдарды, шәйнектерді және т.б. сатып аласыз. Артықшылықтары: Әрбір құрылғы мүмкіндіктерді кеңейтеді және жайлылықты арттырады. Кемшіліктері: Әрбір жаңа өндіруші өз қолданбасын қажет етеді. Әртүрлі өндірушілердің құрылғыларының хаттамалары жиі бір-бірімен үйлеспейді.

2 санаты — бір тақталы компьютерді орнату немесе x86 үйлесімді. Бұл есептеу қуатына қатысты шектеулерді жояды және MajorDoMo немесе смарт үйді басқаруға арналған кез келген басқа сервер дистрибуциясы осы құрылғыда орнатылған. Осылайша, көптеген өндірушілердің құрылғылары бір ақпараттық кеңістікте қосылған. Анау. смарт үйге арналған жеке сервер пайда болады. Артықшылықтары: кеңейтілген басқару мүмкіндіктерін қамтамасыз ететін бір орталықтың үйлесімділігі. Кемшіліктері: егер сервер сәтсіз болса, бүкіл жүйе 1-кезеңге оралады, яғни. бөлшектенеді немесе жарамсыз болып қалады.

3 санаты - ең қатал нұсқа. Жөндеу сатысында барлық коммуникациялар тартылып, барлық жүйелер қайталанады. Артықшылықтары: бәрі жетілдірілді, содан кейін үй шынымен ақылды болады. Кемшіліктері: 1 және 2 санаттармен салыстырғанда өте қымбат, бәрін алдын ала ойластырып, әрбір ұсақ-түйекті ескеру қажет.

Көптеген пайдаланушылар бірінші опцияны таңдайды, содан кейін екінші опцияға біртіндеп өтеді. Содан кейін ең табандылары 3-ші нұсқаға жетеді.

Бірақ таратылған жүйе деп атауға болатын опция бар: әрбір жеке құрылғы сервер де, клиент те болады. Негізінде, бұл 1-нұсқа мен 2-нұсқаны қабылдау және біріктіру әрекеті. Алтын ортаны ұстау үшін олардың барлық артықшылықтарын алыңыз және кемшіліктерін жойыңыз.

Мүмкін біреу мұндай нұсқа әзірленді деп айтатын шығар. Бірақ мұндай шешімдер тар шеңберде бағытталған; бағдарламалауды жақсы білетін адамдар үшін. Біздің мақсатымыз - соңғы құрылғылар түрінде де, бар құрылғыларды жүйемізге біріктіру түрінде де осындай бөлінген жүйелерге кіру кедергісін төмендету. Термостат жағдайында пайдаланушы жай ғана ескі термостатты алып тастап, смартты орнатады және оған бар сенсорларын қосады. Ешқандай қосымша қадамдарсыз.

Мысал арқылы жүйемізге интеграцияны қарастырайық.

Біздің желімізде 8 Sonoff модулі бар деп елестетейік. Кейбір пайдаланушылар үшін Sonoff бұлты арқылы басқару (1-санат) жеткілікті болады. Кейбіреулер үшінші тарап микробағдарламасын пайдалана бастайды және 2-санатқа оңай ауысады. Үшінші тарап микробағдарламасының негізгі бөлігі бірдей принцип бойынша жұмыс істейді: деректерді MQTT серверіне тасымалдау. OpenHub, Majordomo немесе кез келген басқа бір мақсатқа қызмет етеді - әртүрлі құрылғыларды Интернетте немесе жергілікті желіде орналасқан бір ақпараттық кеңістікке біріктіру. Сондықтан Сервердің болуы міндетті болып табылады. Мұнда негізгі мәселе туындайды - егер Сервер сәтсіз болса, бүкіл жүйе автономды түрде жұмысын тоқтатады. Бұған жол бермеу үшін жүйелер күрделірек болады, Сервер істен шыққан жағдайда автоматтандырудың қайталанатын қолмен басқару әдістері қосылады.

Біз әр құрылғы өзін-өзі қамтамасыз ететін басқа жолды ұстандық. Осылайша, Сервер шешуші рөл атқармайды, тек функционалдылықты кеңейтеді.

Ойлау экспериментіне қайта оралайық. Сол 8 Sonoff модулін қайтадан алып, оларға Lytko микробағдарламасын орнатайық. Барлық Lytko микробағдарламаларында функция бар SSDP. SSDP – желілік қызметтерді жарнамалауға және ашуға арналған Интернет протоколдар жиынтығына негізделген желілік протокол. Сұранысқа жауап стандартты немесе кеңейтілген болуы мүмкін. Стандартты функциялардан басқа, біз бұл жауапқа желідегі құрылғылар тізімін жасауды қостық. Осылайша, құрылғылардың өзі бір-бірін табады және олардың әрқайсысында осындай тізім болады. SSDP парағының мысалы:

"ssdpList": 
	{
		"id": 94967291,  
		"ip": "192.168.x.x",
                "type": "thermostat"
	}, 
	{
		"id": 94967282,
		"ip": "192.168.x.x",
                "type": "thermostat"
	}

Мысалдан көріп отырғаныңыздай, тізімде құрылғы идентификаторлары, желідегі IP мекенжайы, блок түрі (біздің жағдайда Sonoff негізіндегі термостат). Бұл тізім екі минут сайын жаңартылып отырады (бұл кезең желідегі құрылғылар санының динамикалық өзгерістеріне жауап беру үшін жеткілікті). Осылайша біз қосылған, өзгертілген және өшірілген құрылғыларды пайдаланушы әрекетінсіз бақылаймыз. Бұл тізім браузерге немесе мобильді қосымшаға жіберіледі және сценарийдің өзі берілген блоктар саны бар бетті жасайды. Әрбір блок бір құрылғыға/датчикке/контроллерге сәйкес келеді. Көрнекі түрде тізім келесідей көрінеді:

Лытко біріктіреді

Бірақ егер басқа радио сенсорлар esp8266/esp32 құрылғысына cc2530 (ZigBee) немесе nrf24 (MySensors) арқылы қосылған болса ше?

Жобалар туралы

Нарықта әртүрлі бөлінген жүйелер бар. Біздің жүйе ең танымалдарымен біріктіруге мүмкіндік береді.

Төменде әртүрлі өндірушілердің бір-бірімен үйлеспеуімен жағдайды өзгертуге тырысатын жобалар бар. Бұл, мысалы, SLS шлюзі, MySensors немесе ZESP32. ZigBee2MQTT MQTT серверіне байланысты, сондықтан ол мысал үшін жарамсыз.

MySensors жүйесін енгізудің бір нұсқасы - ESP8266 негізіндегі шлюз. Қалған мысалдар ESP32 нұсқасында. Және оларда сіз құрылғылар тізімін анықтау және құру бойынша біздің жұмыс принципін жүзеге асыра аласыз.

Тағы бір ой экспериментін жасайық. Бізде ZESP32 шлюзі немесе SLS шлюзі немесе MySensors бар. Оларды бір ақпараттық кеңістікте қалай біріктіруге болады? Біз SSDP протоколдарының кітапханасын осы шлюздердің стандартты функцияларына қосамыз. Бұл контроллерге SSDP арқылы қол жеткізген кезде ол стандартты жауапқа оған қосылған құрылғылардың тізімін қосады. Осы ақпарат негізінде браузер бет жасайды. Жалпы ол келесідей болады:

Лытко біріктіреді
Веб-интерфейс

Лытко біріктіреді
PWA қолданбасы

"ssdpList": 
{
   "id": 94967291, // уникальный идентификатор устройства
   "ip": "192.168.x.x", // ip адрес в сети
   "type": "thermostat" // тип устройства
},
{
   "id": 94967292,
   "ip": "192.168.x.x",
   "type": "thermostat"
},
{
   "id": 94967293,
   "ip": "192.168.x.x",
   "type": "thermostat"
},
{  
   "id": 13587532, 
   "type": "switch"  
},
{  
   "id": 98412557, 
   "type": "smoke"
},
{  
   "id": 57995113, 
   "type": "contact_sensor"
},
{  
   "id": 74123668,
   "type": "temperature_humidity_pressure_sensor"
},
{
    "id": 74621883, 
    "type": "temperature_humidity_sensor"
}

Мысал құрылғылардың бір-бірінен тәуелсіз қосылатынын көрсетеді. Жеке IP мекенжайлары бар 3 термостат және бірегей идентификаторлары бар 5 түрлі сенсор қосылған. Егер сенсор Wi-Fi желісіне қосылса, оның жеке IP мекенжайы болады; егер ол шлюзге қосылған болса, құрылғының IP мекенжайы шлюздің IP мекенжайы болады.

Біз құрылғылармен байланысу үшін WebSocket пайдаланамыз. Бұл сұрауларды алумен салыстырғанда ресурс шығындарын азайтуға және қосылу немесе өзгерту кезінде ақпаратты динамикалық түрде алуға мүмкіндік береді.

Деректер серверді айналып өтіп, блок тиесілі құрылғыдан тікелей алынады. Осылайша, құрылғылардың кез келгені істен шыққан жағдайда жүйе жұмысын жалғастырады. Веб-интерфейс тізімдегі жоқ құрылғыны көрсетпейді. Бірақ жоғалту туралы сигнал қажет болған жағдайда пайдаланушының қосымшасында хабарлама түрінде келеді.

Бұл тәсілді енгізудің бірінші әрекеті PWA қолданбасы болды. Бұл пайдаланушының құрылғысында блоктық базаны сақтауға және тек қажетті деректерді сұрауға мүмкіндік береді. Бірақ құрылымның ерекшеліктеріне байланысты бұл опция толық емес. Шығудың бір ғана жолы бар - қазіргі уақытта белсенді түрде әзірлену үстіндегі Android және IOS үшін жергілікті қосымша. Әдепкі бойынша, қолданба тек ішкі желіде жұмыс істейді. Қажет болса, барлығын сыртқы басқаруға беруге болады. Сонымен, пайдаланушы жергілікті желіден шыққан кезде қолданба автоматты түрде бұлтқа ауысады.

Сыртқы бақылау – бетті толық көшіру. Бет іске қосылған кезде пайдаланушы серверге кіріп, құрылғыларды жеке кабинеті арқылы басқара алады. Осылайша, Сервер үйден тыс уақытта құрылғыларды басқаруға мүмкіндік беретін және портты қайта жіберуге немесе арнайы IP-ке байланыстырылмай, өз функционалдығын кеңейтеді.

Осылайша, жоғарыда аталған опция серверлік тәсілдің кемшіліктеріне ие емес, сонымен қатар жаңа құрылғыларды қосудағы икемділік түріндегі бірқатар артықшылықтарға ие.

Термостат туралы

Мысал ретінде біздің термостатты пайдаланып басқару жүйесін қарастырайық.

Берілген:

  1. Әрбір термостат үшін температураны реттеу (бөлек блок ретінде көрсетіледі);
  2. Термостаттың жұмыс кестесін орнату (таңертең, түстен кейін, кешке, түнде);
  3. Wi-Fi желісін таңдау және оған құрылғыны қосу;
  4. Құрылғыны «ауа арқылы» жаңарту;
  5. MQTT орнату;
  6. Құрылғы қосылған желіні конфигурациялаңыз.

Лытко біріктіреді

Веб-интерфейс арқылы басқарудан басқа, біз дисплейді басу арқылы классикалық нұсқасын ұсындық. Бортта Nextion NX3224T024 2.4 дюймдік монитор бар. Құрылғымен жұмыс істеудің қарапайымдылығына байланысты таңдау оған түсті. Бірақ біз STM32 негізінде өз мониторымызды жасап жатырмыз. Оның функционалдығы Nextion-тен жаман емес, бірақ оның құны аз болады, бұл құрылғының соңғы бағасына оң әсер етеді.

Лытко біріктіреді

Кез келген өзін-өзі құрметтейтін термостат экраны сияқты, біздің Nextion:

  • пайдаланушыға қажетті температураны орнату (оң жақтағы түймелерді пайдалану);
  • жоспарланған жұмыс режимін қосу және өшіру (H түймесі);
  • реле жұмысын көрсету (сол жақтағы көрсеткі);
  • балаларды қорғау мүмкіндігі бар (құлыпты алып тастағанша физикалық шертулер блокталады);
  • WiFi сигналының күшін көрсетеді.

Сонымен қатар, мониторды пайдалана отырып, сіз:

  • пайдаланушы орнатқан сенсор түрін таңдаңыз;
  • балалардан қорғау мүмкіндігін басқару;
  • микробағдарламаны жаңартыңыз.

Лытко біріктіреді

WiFi жолағын басу арқылы пайдаланушы қосылған желі туралы ақпаратты табады. QR коды құрылғыны HomeKit микробағдарламасында жұптау үшін пайдаланылады.

Лытко біріктіреді

Дисплеймен жұмыс істеу демонстрациясы:

Лытко біріктіреді

Біз дамыттық демо беті қосылған үш термостатпен.

«Сіздің термостатыңыздың ерекшелігі неде?» деп сұрауыңыз мүмкін. Қазір нарықта Wi-Fi функциясы, жоспарланған жұмысы және сенсорлық басқаруы бар көптеген термостаттар бар. Ал энтузиастар ең танымал смарт үй жүйелерімен (Majordomo, HomeAssistant және т.б.) өзара әрекеттесу үшін модульдер жазды.

Біздің термостат осындай жүйелермен үйлесімді және жоғарыда аталғандардың барлығына ие. Бірақ айрықша ерекшелігі - жүйенің икемділігі арқасында термостат үнемі жетілдірілуде. Әрбір жаңартумен функция кеңейеді. Жүйені басқарудың стандартты әдісіне (кестеге сәйкес) біз адаптивті қосамыз. Қолданба пайдаланушының геолокациясын алуға мүмкіндік береді. Осының арқасында жүйе орналасқан жеріне байланысты жұмыс режимдерін динамикалық түрде өзгертеді. Ал ауа райы модулі ауа райы жағдайына бейімделуге мүмкіндік береді.

Және кеңейту мүмкіндігі. Кез келген адам өзінің бар әдеттегі термостатын біздікімен алмастыра алады. Ең аз күшпен. Біз нарықтағы ең танымал 5 сенсорды таңдадық және оларға қолдау қостық. Бірақ сенсордың эксклюзивті сипаттамалары болса да, пайдаланушы оны термостатымызға қоса алады. Мұны істеу үшін термостатты белгілі бір сенсормен жұмыс істеу үшін калибрлеу керек. Біз нұсқаулар береміз.

Термостатты немесе кез келген басқа құрылғыны қосқанда, ол бір уақытта барлық жерде пайда болады: веб-интерфейсте де, PWA қолданбасында да. Құрылғыны қосу автоматты түрде орындалады: оны Wi-Fi желісіне қосу жеткілікті.

Біздің жүйеге Сервер қажет емес, егер ол сәтсіз болса, ол асқабаққа айналмайды. Құрамдастардың бірі істен шыққан жағдайда да, жүйе төтенше жағдай сценарийінде жұмыс істей алмайды. Контроллерлер, сенсорлар, құрылғылар - әрбір элемент бір мезгілде сервер де, клиент те, сондықтан толығымен автономды.

Қызығушылық танытқандар үшін біздің әлеуметтік желілер: Telegram, Instagram, Telegram жаңалықтары, VK, Facebook.

Пошта: [электрондық пошта қорғалған]

PS Біз сізді Серверден бас тартуға шақырмаймыз. Біз сондай-ақ MQTT серверін қолдаймыз және өз бұлтымыз бар. Біздің мақсатымыз – жүйенің тұрақтылығы мен сенімділігін жаңа деңгейге шығару. Сервер әлсіз жер емес, функционалдылықты толықтырады және жүйені ыңғайлы етеді.

Ақпарат көзі: www.habr.com

пікір қалдыру