ESP8266-ի կառավարումը առանց պորտի փոխանցման. MQTT-ի արտաքին ուղի
Ինտերնետից հասանելի broker-ը թույլ է տալիս կառավարել տան սարքը այն կապով, որը նա ինքն է բացել։ Ինչ է դա փոխում TLS հիշողության, թեմաների և կրկնության համար։
Սարքը գտնվում է տնային երթուղիչի հետևում՝ առանց պորտի փոխանցման և առանց հանրային հասցեի, և այնուամենայնիվ պետք է կարգավորումը ստանա մի քանի վայրկյանում։ Հնարքը firewall-ի անցք չէ։ Դա կապ է, որը սարքը բացում է դեպի դուրս՝ դեպի broker, որին կարող է հասնել, և այն հետո հաղորդագրությունները վերադարձնում է նույն արդեն հաստատված ուղով։ Այս ձևավորման մեջ մարդկանց դուր եկած յուրաքանչյուր հատկություն և դրա մեջ եղած յուրաքանչյուր թակարդ գալիս է հենց այդ շրջումից։
Ինչն է իրականում անցնում NAT-ով
Երբ սարքը TCP կապ է բացում broker-ի հետ, տնային երթուղիչը ստեղծում է քարտեզագրում և պահում այն կենդանի հոսքի ողջ ընթացքում։ Այդ հոսքի պատասխանները վերադառնում են սարքին, որովհետև քարտեզագրումն արդեն գոյություն ունի։ Broker-ը երբեք ոչինչ չի սկսում դեպի տուն, ուստի չկա չպահանջված ներմուծվող փաթեթ, որը երթուղիչը պետք է մերժի։ Սա է ամբողջ ցանցային փաստարկը, և դրա համար է, որ մոտեցումն աշխատում է այն ցանցերում, որոնք դուք չեք վերահսկում։
Սարքը պետք է կապը պահի կենդանի կամ վերահաստատի այն, ինչը ճարտարապետությունը հաստատելուց հետո դառնում է հուսալիության հարց։
Broker-ը երթուղավորում է թեմաները, այն HTTP-ի պրոքսի չէ
MQTT-ն սահմանում է հրապարակման և բաժանորդագրության փոխանակումներ. սարքը բաժանորդագրվում է թեմայի զտիչի, որը նրան թույլատրված է կարդալ, իսկ լիազորված կարգավորիչը հրապարակում է համապատասխան թեմայում։ Broker-ը համադրում է հրապարակումները բաժանորդագրությունների հետ և առաքում պատճեններ։ Այն չգիտի, թե ինչ է զննարկիչի հարցումը, և չի փոխանցի HTTP GET սարքի վեբ սերվերին։ Եթե առկա firmware-ը խոսում է միայն HTTP-ով, broker-ի ձևավորումը պահանջում է հավելվածի փոփոխություն կամ դիտավորյալ թարգմանության բաղադրիչ։
Թեմաների անունները նույնպես լիազորում չեն։ Broker-ների մեծ մասը աջակցում է հաճախորդի հասանելիության կառավարման ցանկերին, և սարքերը պետք է սահմանափակվեն իրենց սեփական հրապարակման և բաժանորդագրության ծառերով՝ փոխարենը չկիսելով մեկ գլոբալ անվանատարածք։
Սարքի ռեսուրսներն են որոշում TLS-ի ձևը
ESP8266-ն ունի սահմանափակ RAM, և TLS ձեռքսեղմումը ամենաթանկ բանն է, որ այն անում է։ Arduino միջուկը BearSSL-ը մատակարարում է հենց այս սահմանափակման պատճառով, և CA-ի ստուգման ու մատնահետքի ամրացման միջև ընտրությունը փոխում է ինչպես հիշողության հետքը, այնպես էլ այն, ինչ կարող է անել այլ անվան համար վավեր վկայական ունեցող հարձակվողը։ Broker-ի CA-ի ստուգումն ավելի ուժեղ տարբերակ է, երբ կույտը թույլ է տալիս։ Օգտակար բեռի չափը նույնպես կարևոր է. MQTT հաճախորդը բուֆեր է պահում, և դրանից մեծ հաղորդագրությունները լուռ կտրվում են, եթե բուֆերը դիտավորյալ չի մեծացվում։
Keepalive-ը և socket-ի ժամկետները նույն բյուջեի մասն են, որովհետև մեռած կապը երբեք չնկատող հաճախորդը դադարում է հրամաններ ստանալ՝ առանց սխալի մասին հայտնելու։
Հաղորդագրությունների իմաստաբանությունը, որը կծում է
Պահված հաղորդագրությունը broker-ը պահում է և հանձնում ավելի ուշ համապատասխան բաժանորդներին, ինչը հիանալի է ընթացիկ վիճակի համար և վտանգավոր՝ մեկանգամյա հրամանների համար. վերակապվող սարքը կարող է ստանալ երեկվա հրամանը որպես նոր։ QoS 1-ը երաշխավորում է առաքումը առնվազն մեկ անգամ, ուստի կրկնօրինակները նորմալ են, և հավելվածը պետք է լինի կրկնության նկատմամբ անվտանգ՝ իդեալականորեն նույնացուցիչով կամ ժամանակի դրոշմով, որը կարող է մերժել։ Վերջին կտակը ձեզ կարգավիճակի ազդանշան է տալիս, երբ սարքը ընկնում է, բայց միայն այն դեպքում, եթե կապն իսկապես ձախողվում է, այլ ոչ թե կախվում։
Մաքուր նստաշրջանի վարքը որոշում է՝ broker-ը պահում է ձեր բաժանորդագրությունները, մինչ դուք բացակայում եք, և դա սխալ անելն է պատճառը, որ որոշ սարքեր բաց են թողնում առաջին հաղորդագրությունը յուրաքանչյուր վերակապումից հետո։
TLS-ը պաշտպանում է broker-ին հասնող հատվածը։ Սա օգտակար բեռի ծայրից ծայր գաղտնագրում չէ broker-ի օպերատորի դեմ, որը կարող է կարդալ այն ամենը, ինչ դուք հրապարակում եք դրա միջով։
Սահմանափակեք կյանքի ցիկլը և փորձարկեք այն անվնաս տվյալներով
Պլանավորեք վերակապումը հետընթացով, այլ ոչ թե խիտ կրկնափորձերի հանգույցով, բացահայտորեն նորից բաժանորդագրվեք, եթե նստաշրջանը մշտական չէ, և գրանցեք կապի արդյունքը, որպեսզի լուռ օֆլայն սարքը ապացույց թողնի։ Փորձարկեք վերակապման ուղին նմուշային օգտակար բեռներով, որոնք ոչինչ չեն անում, որովհետև հրամանների ալիքի առաջին արտադրական փորձարկումը չպետք է իրական հրաման լինի։ Այնուհետև հաստատեք, թե ինչ է անում հնացած պահված հաղորդագրությունը վերակապման ժամանակ, և որոշեք՝ արդյոք այդ վարքն ընդունելի է յուրաքանչյուր թեմայի համար։
Այսպես արված՝ ձևավորումը հեռացնում է մեկ ներմուծվող ցանցային պահանջ և սարքի ծրագրաշարը, broker-ի քաղաքականությունը և հաղորդագրությունների իմաստաբանությունը թողնում է որպես տեսանելի աշխատանք՝ թաքնված ենթադրությունների փոխարեն։