Cloud Smart Home. Bahagi 1: Controller at mga sensor

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Ngayon, salamat sa mabilis na pag-unlad ng microelectronics, mga channel ng komunikasyon, mga teknolohiya sa Internet at Artipisyal na Katalinuhan, ang paksa ng mga matalinong tahanan ay nagiging mas may kaugnayan. Ang pabahay ng tao ay sumailalim sa mga makabuluhang pagbabago mula noong Panahon ng Bato at sa panahon ng Industrial Revolution 4.0 at ang Internet of Things, naging komportable, gumagana at ligtas ito. Darating ang mga solusyon sa merkado na gagawing kumplikadong mga sistema ng impormasyon ang isang apartment o isang country house na kinokontrol mula saanman sa mundo gamit ang isang smartphone. Bukod dito, ang pakikipag-ugnayan ng tao-machine ay hindi na nangangailangan ng kaalaman sa mga programming language - salamat sa speech recognition at synthesis algorithm, ang isang tao ay nakikipag-usap sa isang matalinong tahanan sa kanilang sariling wika.

Ang ilang mga smart home system na kasalukuyang nasa merkado ay isang lohikal na pag-unlad ng cloud video surveillance system, ang mga developer kung saan napagtanto ang pangangailangan para sa isang komprehensibong solusyon hindi lamang para sa pagsubaybay, kundi pati na rin para sa pamamahala ng mga malalayong bagay.

Ipinakita namin sa iyong pansin ang isang serye ng tatlong artikulo, na magsasabi sa iyo tungkol sa lahat ng mga pangunahing bahagi ng isang cloud smart home system, na personal na binuo ng may-akda at isinagawa. Ang unang artikulo ay nakatuon sa terminal na kagamitan ng kliyente na naka-install sa loob ng isang matalinong tahanan, ang pangalawa sa arkitektura ng cloud storage at sistema ng pagproseso ng data, at sa wakas, ang pangatlo sa application ng kliyente para sa pamamahala ng system sa mga mobile at stationary na device.

Mga kagamitan sa matalinong bahay

Una, pag-usapan natin kung paano gumawa ng isang matalinong tahanan mula sa isang ordinaryong apartment, dacha o cottage. Upang gawin ito, bilang isang patakaran, kinakailangan upang ilagay ang mga sumusunod na kagamitan sa bahay:

  1. mga sensor na sumusukat sa iba't ibang mga parameter ng kapaligiran;
  2. mga actuator na kumikilos sa mga panlabas na bagay;
  3. isang controller na nagsasagawa ng mga kalkulasyon alinsunod sa mga sukat ng sensor at naka-embed na lohika, at nagbibigay ng mga utos sa mga actuator.

Ang sumusunod na figure ay nagpapakita ng isang diagram ng isang matalinong tahanan, kung saan mayroong mga sensor para sa pagtagas ng tubig (1) sa banyo, temperatura (2) at ilaw (3) sa silid-tulugan, isang smart socket (4) sa kusina at isang video surveillance camera (5) sa pasilyo.

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Sa kasalukuyan, malawakang ginagamit ang mga wireless sensor na gumagamit ng RF433, Z-Wave, ZigBee, Bluetooth at WiFi protocol. Ang kanilang mga pangunahing bentahe ay kadalian ng pag-install at paggamit, pati na rin ang mababang gastos at pagiging maaasahan, dahil Nagsusumikap ang mga tagagawa na dalhin ang kanilang mga device sa mass market at gawing naa-access ang mga ito sa karaniwang gumagamit.

Ang mga sensor at actuator, bilang panuntunan, ay konektado sa pamamagitan ng isang wireless na interface sa isang smart home controller (6) - isang dalubhasang microcomputer na pinagsasama ang lahat ng mga device na ito sa isang network at kinokontrol ang mga ito.

Gayunpaman, ang ilang mga solusyon ay maaaring pagsamahin ang isang sensor, isang actuator at isang controller sa parehong oras. Halimbawa, ang isang smart plug ay maaaring i-program upang i-on o i-off ayon sa isang iskedyul, at ang isang cloud video surveillance camera ay maaaring mag-record ng video batay sa isang motion detector signal. Sa pinakasimpleng mga kaso, magagawa mo nang walang hiwalay na controller, ngunit upang lumikha ng isang nababaluktot na sistema na may maraming mga sitwasyon, ito ay kinakailangan.

Para ikonekta ang smart home controller sa pandaigdigang network, maaaring gumamit ng regular na Internet router (7), na matagal nang naging karaniwang gamit sa bahay sa anumang tahanan. Narito ang isa pang argumento na pabor sa isang smart home controller - kung ang koneksyon sa Internet ay nawala, ang smart home ay patuloy na gagana bilang normal salamat sa logic block na nakaimbak sa loob ng controller, at hindi sa cloud service.

Smart home controller

Ang controller para sa cloud smart home system na tinalakay sa artikulong ito ay binuo batay sa isang single-board microcomputer Raspberry Pi 3 modelo B+, na inilabas noong Marso 2018 at may sapat na mapagkukunan at performance para sa mga gawain sa smart home. May kasama itong quad-core Cortex-A53 processor na batay sa 64-bit ARMv8-A architecture, na may orasan sa 1.4 GHz, pati na rin ang 1 GB ng RAM, Wi-Fi 802.11ac, Bluetooth 4.2 at isang gigabit Ethernet adapter na tumatakbo sa pamamagitan ng USB 2.0 .

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Ang pag-assemble ng controller ay napaka-simple - ang microcomputer (1) ay naka-install sa isang plastic case (2), pagkatapos ay isang 8 GB memory card sa microSD format na may software (3) at isang USB Z-Wave network controller (4) ay naka-install sa ang kaukulang mga puwang. Ang smart home controller ay konektado sa power supply sa pamamagitan ng 5V, 2.1A power adapter (5) at isang USB - micro-USB cable (6). Ang bawat controller ay may natatanging numero ng pagkakakilanlan, na nakasulat sa configuration file noong unang inilunsad at kinakailangan upang makipag-ugnayan sa mga serbisyo sa cloud smart home.

Ang software ng smart home controller ay binuo ng may-akda ng artikulong ito batay sa operating system Linux Raspbian Stretch. Binubuo ito ng mga sumusunod na pangunahing subsystem:

  • proseso ng server para sa pakikipag-ugnayan sa smart home equipment at sa cloud;
  • graphical na user interface para sa pagtatakda ng configuration at operating parameter ng controller;
  • database para sa pag-iimbak ng configuration ng controller.

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Database Ang smart home controller ay ipinatupad batay sa isang naka-embed na DBMS SQLite at ito ay isang file sa isang SD card na may software ng system. Nagsisilbi itong imbakan para sa configuration ng controller - impormasyon tungkol sa konektadong kagamitan at kasalukuyang estado nito, isang bloke ng lohikal na mga panuntunan sa produksyon, pati na rin ang impormasyon na nangangailangan ng pag-index (halimbawa, mga pangalan ng file ng isang lokal na archive ng video). Kapag ang controller ay na-reboot, ang impormasyong ito ay nai-save, na ginagawang posible na ibalik ang controller sa kaganapan ng power failure.

GUI Ang smart home controller ay binuo sa PHP 7 gamit ang isang microframework payat. Ang web server ay may pananagutan sa pagpapatakbo ng application. lighttpd, kadalasang ginagamit sa mga naka-embed na device dahil sa mahusay na pagganap nito at mababang mga kinakailangan sa mapagkukunan.

Cloud Smart Home. Bahagi 1: Controller at mga sensor
(i-click ang larawan upang buksan ito sa mas mataas na resolution)

Ang pangunahing function ng graphical interface ay upang ikonekta ang smart home equipment (IP surveillance camera at sensor) sa controller. Binabasa ng web application ang configuration at kasalukuyang estado ng controller at mga device na konektado dito mula sa database ng SQLite. Upang baguhin ang configuration ng controller, nagpapadala ito ng mga control command sa JSON format sa pamamagitan ng RESTful API interface ng proseso ng server.

Proseso ng server

Proseso ng server - isang pangunahing bahagi na gumaganap sa lahat ng pangunahing gawain sa pag-automate ng mga proseso ng impormasyon na bumubuo sa batayan ng isang matalinong tahanan: pagtanggap at pagproseso ng sensory data, pag-isyu ng mga aksyong kontrol depende sa naka-embed na lohika. Ang layunin ng proseso ng server ay makipag-ugnayan sa smart home equipment, magsagawa ng mga lohikal na panuntunan sa produksyon, tumanggap at magproseso ng mga command mula sa graphical na interface at cloud. Ang proseso ng server sa smart home controller na isinasaalang-alang ay ipinatupad bilang isang multi-threaded na application na binuo sa C++ at inilunsad bilang isang hiwalay na serbisyo systemd operating system Linux Raspbian.

Ang mga pangunahing bloke ng proseso ng server ay:

  1. Tagapamahala ng Mensahe;
  2. server ng IP camera;
  3. Z-Wave device server;
  4. Server ng produksyon lohikal na mga panuntunan;
  5. Database ng pagsasaayos ng controller at block ng mga lohikal na panuntunan;
  6. RESTful API server para sa pakikipag-ugnayan sa graphical na interface;
  7. MQTT client para sa pakikipag-ugnayan sa cloud.

Ang mga bloke ng proseso ng server ay ipinapatupad bilang magkahiwalay na mga thread, ang impormasyon sa pagitan ng kung saan ay inililipat sa anyo ng mga mensahe sa JSON na format (o mga istruktura ng data na kumakatawan sa format na ito sa memorya ng proseso).

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Ang pangunahing bahagi ng proseso ng server ay tagapamahala ng mensahe, na nagruruta ng mga mensahe ng JSON sa lahat ng mga block ng proseso ng server. Ang mga uri ng mga field ng impormasyon ng mensahe ng JSON at ang mga value na maaari nilang tanggapin ay nakalista sa talahanayan:

uri ng device
protokol
uri ng mensahe
deviceState
utos

camera
onvif
sensorData
on
streaming(On/Off)

sensor
zwave
utos
off
pagre-record(On/Off)

effector
MQTT
businessLogicRule
streaming(On/Off)
evice(Add/Remove)

lohika ng negosyo
configurationData
pagre-record(On/Off)

Bluetooth
deviceState
mali

wifi

rf

Halimbawa, ganito ang hitsura ng isang mensahe mula sa isang camera motion detector:

{
	"vendor": "*****",
	"version": "3.0.0",
	"timestampMs": "1566293475475",
	"clientType": "gateway",
	"deviceId": "1616453d-30cd-44b7-9bf0-************",
	"deviceType": "camera",
	"protocol": "onvif",
	"messageType": "sensorData",
	"sensorType": "camera",
	"label": "motionDetector",
	"sensorData": "on"
}

Logic ng produksyon

Upang makatanggap o magpadala ng mensahe mula sa dispatcher, nagsu-subscribe ang block ng proseso ng server sa mga mensahe ng isang partikular na uri. Ang subscription ay isang lohikal na panuntunan ng produksyon ng uri "Kung... kung gayon...", ipinakita sa format na JSON, at isang link sa handler ng mensahe sa loob ng block ng proseso ng server. Halimbawa, upang payagan ang IP camera server na makatanggap ng mga command mula sa GUI at sa cloud, kailangan mong idagdag ang sumusunod na panuntunan:

{
	"if": {
	    "and": [{
		"equal": {
		    "deviceId": "1616453d-30cd-44b7-9bf0-************"
		}
	    },
	    {
		"equal": {
		    "messageType": "command"
		}
	    }
	    ]
	},
	"then": {
	    "result": "true"
	}
}

Kung tinukoy ang mga kundisyon sa nauna (kaliwang bahagi) ang mga patakaran ay totoo, pagkatapos ito ay nasiyahan kinahinatnan (kanang bahagi) ng mga panuntunan, at ang handler ay nakakakuha ng access sa katawan ng mensahe ng JSON. Sinusuportahan ng antecedent ang mga lohikal na operator na naghahambing ng mga pares ng key-value ng JSON:

  1. katumbas ng "pantay";
  2. hindi katumbas ng "not_equal";
  3. mas kaunti "mas";
  4. mas "mas malaki";
  5. mas mababa sa o katumbas ng "less_or_equal";
  6. mas malaki sa o katumbas ng "greater_or_equal".

Ang mga resulta ng paghahambing ay maaaring nauugnay sa bawat isa gamit ang mga operator ng Boolean algebra:

  1. At at"
  2. O "o";
  3. Hindi hindi".

Kaya, sa pamamagitan ng pagsulat ng mga operator at operand sa Polish notation, maaari kang lumikha ng medyo kumplikadong mga kondisyon na may malaking bilang ng mga parameter.

Eksakto ang parehong mekanismo, batay sa mga mensahe ng JSON at mga panuntunan sa produksyon sa JSON na format, ang ginagamit sa production logic server block upang kumatawan sa kaalaman at magsagawa ng lohikal na hinuha gamit ang sensory data mula sa mga smart home sensor.

Gamit ang isang mobile application, gumagawa ang user ng mga senaryo ayon sa kung saan dapat gumana ang smart home. Halimbawa: "Kung ang sensor para sa pagbubukas ng pintuan sa harap ay na-trigger, pagkatapos ay i-on ang ilaw sa pasilyo". Binabasa ng application ang mga identifier ng mga sensor (opening sensor) at actuator (smart socket o smart lamp) mula sa database at bumubuo ng lohikal na panuntunan sa JSON format, na ipinapadala sa smart home controller. Ang mekanismong ito ay tatalakayin nang mas detalyado sa ikatlong artikulo ng aming serye, kung saan pag-uusapan natin ang application ng kliyente para sa pamamahala ng isang matalinong tahanan.

Ang mekanismo ng lohika ng produksyon na tinalakay sa itaas ay ipinatupad gamit ang library RapidJSON β€” SAX parser para sa JSON na format sa C++. Nagbibigay-daan sa iyo ang sunud-sunod na pagbabasa at pag-parse ng isang hanay ng mga panuntunan sa produksyon na madaling ipatupad ang function ng paghahambing ng data sa loob ng mga antecedent:

void CRuleEngine::Process(PProperties pFact)
{
    m_pActions->clear();

    rapidjson::Reader   reader;
    for(TStringMap::value_type& rRule : m_Rules)
    {
        std::string sRuleId   = rRule.first;
        std::string sRuleBody = rRule.second;

        CRuleHandler            ruleHandler(pFact);
        rapidjson::StringStream ruleStream(sRuleBody.c_str());
        rapidjson::ParseResult  parseResult = reader.Parse(ruleStream, ruleHandler);
        if(!parseResult)
        {
            m_Logger.LogMessage(
                        NLogger2::ePriorityLevelError,
                        std::string("JSON parse error"),
                        "CRuleEngine::Process()",
                        std::string("RuleId: ") + sRuleId);
        }

        PProperties pAction = ruleHandler.GetAction();
        if(pAction)
        {
            pAction->Set("ruleId", sRuleId);
            m_pActions->push_back(pAction);
        }
    }
}

Dito pFact β€” isang istraktura na naglalaman ng mga pares ng key-value mula sa isang mensahe ng JSON, m_Mga Panuntunan β€” string array ng production rules. Ang paghahambing ng papasok na mensahe at ang panuntunan ng produksyon ay isinasagawa sa function reader.Parse(ruleStream, ruleHandler)Saan ruleHandler ay isang bagay na naglalaman ng lohika ng Boolean at mga operator ng paghahambing. sRuleId β€” isang natatanging identifier ng panuntunan, salamat sa kung saan posible na mag-imbak at mag-edit ng mga panuntunan sa loob ng database ng smart home controller. m_pActions β€” isang array na may mga resulta ng lohikal na hinuha: Mga mensahe ng JSON na naglalaman ng mga kahihinatnan mula sa base ng panuntunan at ipinadala pa sa manager ng mensahe upang maproseso sila ng mga thread ng subscriber.

Ang pagganap ng RapidJSON ay maihahambing sa function strlen(), at ang pinakamababang kinakailangan sa mapagkukunan ng system ay nagbibigay-daan sa paggamit ng library na ito sa mga naka-embed na device. Ang paggamit ng mga mensahe at lohikal na panuntunan sa JSON na format ay nagbibigay-daan sa iyo na magpatupad ng isang flexible na sistema ng pagpapalitan ng impormasyon sa pagitan ng lahat ng bahagi ng smart home controller.

Mga Sensor at Actuator ng Z-Wave

Ang pangunahing bentahe ng isang matalinong tahanan ay maaari itong nakapag-iisa na masukat ang iba't ibang mga parameter ng panlabas na kapaligiran at magsagawa ng mga kapaki-pakinabang na pag-andar depende sa sitwasyon. Upang gawin ito, ang mga sensor at actuator ay konektado sa smart home controller. Sa kasalukuyang bersyon, ito ay mga wireless na device na tumatakbo gamit ang protocol Z-Wave sa isang espesyal na inilaan na dalas 869 MHz Para sa Russia. Upang gumana, pinagsama ang mga ito sa isang mesh network, na naglalaman ng mga repeater ng signal upang mapataas ang lugar ng saklaw. Ang mga aparato ay mayroon ding isang espesyal na mode ng pag-save ng enerhiya - ginugugol nila ang karamihan ng oras sa mode ng pagtulog at nagpapadala lamang ng impormasyon kapag nagbago ang kanilang estado, na maaaring makabuluhang pahabain ang buhay ng built-in na baterya.

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Makakahanap ka na ngayon ng medyo malaking bilang ng iba't ibang Z-Wave device sa merkado. Tingnan natin ang ilang halimbawa:

  1. Masusukat ng Zipato PAN16 smart socket ang mga sumusunod na parameter: konsumo ng kuryente (kWh), power (W), boltahe (V) at kasalukuyang (A) sa electrical network. Mayroon din itong built-in na switch kung saan maaari mong kontrolin ang konektadong electrical appliance;
  2. Nakikita ng Neo Coolcam leak sensor ang pagkakaroon ng natapong likido sa pamamagitan ng pagsasara ng mga contact ng remote probe;
  3. Ang Zipato PH-PSG01 smoke sensor ay na-trigger kapag ang mga particle ng usok ay pumasok sa gas analyzer chamber;
  4. Sinusuri ng Neo Coolcam motion sensor ang infrared radiation ng katawan ng tao. Bukod pa rito ay mayroong light sensor (Lx);
  5. Sinusukat ng Multisensor Philio PST02-A ang temperatura (Β°C), liwanag (%), pagbubukas ng pinto, presensya ng isang tao sa silid;
  6. Z-Wave USB Stick ZME E UZB1 network controller, kung saan nakakonekta ang mga sensor.

Napakahalaga na ang mga aparato at ang controller ay gumana sa parehong dalas, kung hindi man ay hindi nila makikita ang isa't isa sa sandali ng koneksyon. Hanggang 232 na device ang maaaring ikonekta sa isang Z-Wave network controller, na sapat na para sa isang apartment o isang country house. Upang palawakin ang saklaw ng network sa loob ng bahay, ang isang smart socket ay maaaring gamitin bilang isang signal repeater.

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Sa proseso ng smart home controller server na tinalakay sa nakaraang talata, ang Z-Wave server ay may pananagutan sa pakikipag-ugnayan sa mga Z-Wave device. Gumagamit ito ng library upang makatanggap ng impormasyon mula sa mga sensor OpenZWave sa C++, na nagbibigay ng interface para sa pakikipag-ugnayan sa Z-Wave network USB controller at gumagana sa iba't ibang sensor at actuator. Ang halaga ng parameter ng kapaligiran na sinusukat ng sensor ay naitala ng Z-Wave server sa anyo ng isang mensahe ng JSON:

{
	"vendor": "*****",
	"version": "3.0.0",
	"timestampMs": "1566479791290",
	"clientType": "gateway",
	"deviceId": "20873eb0-dd5e-4213-a175-************",
	"deviceType": "sensor",
	"protocol": "zwave",
	"messageType": "sensorData",
	"homeId": "0xefa0cfa7",
	"nodeId": "20",
	"sensorType": "METER",
	"label": "Voltage",
	"sensorData": "229.3",
	"units": "V"
}

Pagkatapos ay ipapasa ito sa tagapamahala ng mensahe ng proseso ng server upang matanggap ito ng mga subscriber thread. Ang pangunahing subscriber ay ang production logic server, na tumutugma sa mga halaga ng field ng mensahe sa antecedents ng logic rules. Ang mga resulta ng inference na naglalaman ng mga control command ay ipapadala pabalik sa message manager at mula doon ay pumunta sa Z-Wave server, na nagde-decode ng mga ito at nagpapadala ng mga ito sa Z-Wave network USB controller. Pagkatapos ay ipinasok nila ang actuator, na nagbabago sa estado ng mga bagay sa kapaligiran, at ang matalinong tahanan ay nagsasagawa ng kapaki-pakinabang na gawain.

Cloud Smart Home. Bahagi 1: Controller at mga sensor
(i-click ang larawan upang buksan ito sa mas mataas na resolution)

Ang pagkonekta ng mga Z-Wave device ay ginagawa sa graphical na interface ng smart home controller. Upang gawin ito, pumunta sa page na may listahan ng mga device at i-click ang "Add" button. Ang add command sa pamamagitan ng RESTful API interface ay pumapasok sa proseso ng server at pagkatapos ay ipinadala ng message manager sa Z-Wave server, na naglalagay ng Z-Wave network USB controller sa isang espesyal na mode para sa pagdaragdag ng mga device. Susunod, sa Z-Wave device kailangan mong gumawa ng isang serye ng mga mabilisang pagpindot (3 pagpindot sa loob ng 1,5 segundo) ng pindutan ng serbisyo. Ikinokonekta ng USB controller ang device sa network at nagpapadala ng impormasyon tungkol dito sa Z-Wave server. Na, sa turn, ay lumilikha ng isang bagong entry sa database ng SQLite na may mga parameter ng bagong device. Pagkatapos ng isang tinukoy na agwat ng oras, ang graphical na interface ay babalik sa pahina ng listahan ng Z-Wave device, nagbabasa ng impormasyon mula sa database at ipinapakita ang bagong device sa listahan. Ang bawat device ay tumatanggap ng sarili nitong natatanging identifier, na ginagamit sa mga panuntunan sa inference ng produksyon at kapag nagtatrabaho sa cloud. Ang pagpapatakbo ng algorithm na ito ay ipinapakita sa diagram ng UML:

Cloud Smart Home. Bahagi 1: Controller at mga sensor
(i-click ang larawan upang buksan ito sa mas mataas na resolution)

Pagkonekta ng mga IP camera

Ang cloud smart home system na tinalakay sa artikulong ito ay isang pag-upgrade ng cloud video surveillance system, na binuo din ng may-akda, na ilang taon nang nasa merkado at may maraming installation sa Russia.

Para sa cloud video surveillance system, ang isa sa mga matinding problema ay ang limitadong pagpili ng kagamitan kung saan maaaring maisagawa ang pagsasama. Ang software na responsable para sa pagkonekta sa cloud ay naka-install sa loob ng video camera, na agad na naglalagay ng malubhang pangangailangan sa hardware nito - ang processor at ang dami ng libreng memorya. Pangunahing ipinapaliwanag nito ang mas mataas na presyo ng mga cloud CCTV camera kumpara sa mga regular na IP camera. Bilang karagdagan, ang isang mahabang yugto ng mga negosasyon sa mga kumpanya ng pagmamanupaktura ng CCTV camera ay kinakailangan upang makakuha ng access sa sistema ng file ng camera at lahat ng kinakailangang mga tool sa pag-unlad.

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Sa kabilang banda, ang lahat ng modernong IP camera ay may mga karaniwang protocol para sa pakikipag-ugnayan sa iba pang kagamitan (sa partikular, mga video recorder). Kaya, ang paggamit ng isang hiwalay na controller na kumokonekta sa pamamagitan ng isang karaniwang protocol at nagbo-broadcast ng mga video stream mula sa mga IP camera patungo sa cloud ay nagbibigay ng makabuluhang competitive na mga bentahe para sa cloud video surveillance system. Bukod dito, kung ang kliyente ay naka-install na ng isang video surveillance system batay sa mga simpleng IP camera, kung gayon posible na palawakin ito at gawing isang ganap na cloud smart home.

Ang pinakasikat na protocol para sa mga IP video surveillance system, na sinusuportahan na ngayon ng lahat ng mga tagagawa ng IP camera nang walang pagbubukod, ay Profile sa ONVIF S, na ang mga pagtutukoy ay umiiral sa isang wika ng paglalarawan ng mga serbisyo sa web wsdl. Paggamit ng mga utility mula sa toolkit gSOAP Posibleng bumuo ng source code para sa mga serbisyong gumagana sa mga IP camera:

$ wsdl2h -o onvif.h 
	https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl 
	https://www.onvif.org/ver10/events/wsdl/event.wsdl 
	https://www.onvif.org/ver10/media/wsdl/media.wsdl 
	https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl

$ soapcpp2 -Cwvbj -c++11 -d cpp_files/onvif -i onvif.h

Bilang resulta, nakakakuha kami ng isang set ng header na "*.h" at source na "*.cpp" na mga file sa C++, na maaaring direktang ilagay sa isang application o isang hiwalay na library at i-compile gamit ang GCC compiler. Dahil sa maraming pag-andar, malaki ang code at nangangailangan ng karagdagang pag-optimize. Ang Raspberry Pi 3 model B+ microcomputer ay may sapat na pagganap upang maisakatuparan ang code na ito, ngunit kung may pangangailangan na i-port ang code sa isa pang platform, kinakailangang piliin ang tamang arkitektura ng processor at mga mapagkukunan ng system.

Ang mga IP camera na sumusuporta sa pamantayan ng ONVIF, kapag nagpapatakbo sa isang lokal na network, ay konektado sa isang espesyal na multicast group na may address 239.255.255.250. May protocol WS Pagtuklas, na nagbibigay-daan sa iyong i-automate ang paghahanap ng mga device sa lokal na network.

Ang graphical na interface ng smart home controller ay nagpapatupad ng function ng paghahanap para sa mga IP camera sa PHP, na napakaginhawa kapag nakikipag-ugnayan sa mga serbisyo sa web sa pamamagitan ng mga XML na mensahe. Kapag pumipili ng mga item sa menu Mga Device > IP Camera > Pag-scan Ang algorithm para sa paghahanap ng mga IP camera ay inilunsad, na ipinapakita ang resulta sa anyo ng isang talahanayan:

Cloud Smart Home. Bahagi 1: Controller at mga sensor
(i-click ang larawan upang buksan ito sa mas mataas na resolution)

Kapag nagdagdag ka ng camera sa controller, maaari mong tukuyin ang mga setting ayon sa kung saan ito makikipag-ugnayan sa cloud. Gayundin sa yugtong ito, awtomatiko itong itinatalaga ng isang natatanging identifier ng device, kung saan madali itong makikilala sa loob ng cloud.

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Susunod, ang isang mensahe ay nabuo sa JSON na format na naglalaman ng lahat ng mga parameter ng idinagdag na camera at ipinadala sa proseso ng server ng smart home controller sa pamamagitan ng RESTful API command, kung saan ang mga parameter ng camera ay na-decode at nai-save sa panloob na database ng SQLite, at ginamit din upang ilunsad ang mga sumusunod na thread sa pagproseso:

  1. pagtatatag ng koneksyon sa RTSP upang makatanggap ng mga video at audio stream;
  2. transcoding audio mula sa G.711 mu-Law, G.711 A-Law, G.723, atbp. na mga format. sa AAC format;
  3. transcoding video stream sa H.264 format at audio sa AAC format sa isang FLV container at ipinapadala ito sa cloud sa pamamagitan ng RTMP protocol;
  4. pagtatatag ng koneksyon sa endpoint ng IP camera motion detector sa pamamagitan ng ONVIF protocol at pana-panahong pagboto nito;
  5. pana-panahong pagbuo ng thumbnail na preview na imahe at ipinapadala ito sa cloud sa pamamagitan ng MQTT protocol;
  6. lokal na pag-record ng mga video at audio stream sa anyo ng magkahiwalay na mga file sa MP4 na format papunta sa isang SD o Flash card ng isang smart home controller.

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Upang magtatag ng koneksyon sa mga camera, transcode, proseso at pag-record ng mga video stream sa proseso ng server, ginagamit ang mga function mula sa library FFmpeg 4.1.0.

Sa eksperimento sa pagsubok sa pagganap, 3 camera ang nakakonekta sa controller:

  1. HiWatch DS-I114W (resolution - 720p, compression format - H.264, bitrate - 1 Mb/s, sound G.711 mu-Law);
  2. Microdigital MDC-M6290FTD-1 (resolution - 1080p, compression format - H.264, bitrate - 1 Mb/s, walang tunog);
  3. Dahua DH-IPC-HDW4231EMP-AS-0360B (resolution - 1080p, compression format - H.264, bitrate - 1.5 Mb/s, AAC audio).

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Ang lahat ng tatlong stream ay sabay-sabay na na-output sa cloud, ang audio transcoding ay isinagawa mula sa isang camera lamang, at ang lokal na pag-record ng archive ay hindi pinagana. Ang pag-load ng CPU ay humigit-kumulang 5%, ang paggamit ng RAM ay 32 MB (bawat proseso), 56 MB (kabuuan kasama ang OS).

Kaya, humigit-kumulang 20 - 30 camera ang maaaring ikonekta sa smart home controller (depende sa resolution at bitrate), na sapat para sa isang video surveillance system para sa isang tatlong palapag na cottage o isang maliit na bodega. Para sa mga gawaing nangangailangan ng higit na pagganap, maaari kang gumamit ng nettop na may multi-core Intel processor at Linux Debian Sarge OS. Ang controller ay kasalukuyang sumasailalim sa trial operation, at ang data sa performance nito ay ia-update.

Pakikipag-ugnayan sa ulap

Ang isang cloud-based na smart home ay nag-iimbak ng data ng user (mga sukat ng video at sensor) sa cloud. Ang arkitektura ng cloud storage ay tatalakayin nang mas detalyado sa susunod na artikulo sa aming serye. Ngayon ay pag-usapan natin ang interface para sa pagpapadala ng mga mensahe ng impormasyon mula sa smart home controller patungo sa cloud.

Ang mga estado ng mga konektadong device at mga sukat ng sensor ay ipinapadala sa pamamagitan ng protocol MQTT, na kadalasang ginagamit sa mga proyekto ng Internet of Things dahil sa pagiging simple nito at kahusayan sa enerhiya. Gumagamit ang MQTT ng modelo ng client-server, kung saan nag-subscribe ang mga kliyente sa mga partikular na paksa sa loob ng broker at nag-publish ng kanilang mga mensahe. Ang broker ay nagpapadala ng mga mensahe sa lahat ng mga subscriber ayon sa mga tuntuning tinutukoy ng antas ng QoS (Kalidad ng Serbisyo):

  • QoS 0 - maximum na isang beses (walang garantiya sa paghahatid);
  • QoS 1 - hindi bababa sa isang beses (na may kumpirmasyon ng paghahatid);
  • QoS 2 - eksaktong isang beses (na may karagdagang kumpirmasyon sa paghahatid).

Sa aming kaso, ginagamit namin Eclipse Mosquito. Ang pangalan ng paksa ay ang natatanging identifier ng smart home controller. Ang kliyente ng MQTT sa loob ng proseso ng server ay nagsu-subscribe sa paksang ito at nagsasalin ng mga mensahe ng JSON na nagmumula sa manager ng mensahe papunta dito. Sa kabaligtaran, ang mga mensahe mula sa MQTT broker ay ipinapasa nito sa tagapamahala ng mensahe, na pagkatapos ay pinarami ang mga ito sa mga subscriber nito sa loob ng proseso ng server:

Cloud Smart Home. Bahagi 1: Controller at mga sensor

Upang magpadala ng mga mensahe tungkol sa katayuan ng smart home controller, ginagamit ang mekanismo ng mga naka-save na mensahe napanatili ang mga mensahe protocol ng MQTT. Nagbibigay-daan ito sa iyo na masubaybayan nang tama ang timing ng mga muling pagkonekta sa panahon ng pagkawala ng kuryente.

Ang kliyente ng MQTT ay binuo batay sa pagpapatupad ng library Eclipse Paho sa wikang C++.

Ang H.264 + AAC media stream ay ipinapadala sa cloud sa pamamagitan ng RTMP protocol, kung saan ang isang cluster ng mga media server ay may pananagutan sa pagproseso at pag-iimbak ng mga ito. Para maipamahagi nang husto ang load sa cluster at piliin ang pinakakaunting na-load na media server, ang smart home controller ay gumagawa ng paunang kahilingan sa cloud load balancer at pagkatapos lamang nito ay ipapadala ang media stream.

Konklusyon

Sinuri ng artikulo ang isang partikular na pagpapatupad ng isang smart home controller batay sa Raspberry Pi 3 B+ microcomputer, na maaaring tumanggap, magproseso ng impormasyon at magkontrol ng mga kagamitan sa pamamagitan ng Z-Wave protocol, makipag-ugnayan sa mga IP camera sa pamamagitan ng ONVIF protocol, at makipagpalitan din ng data at mga command sa cloud service sa pamamagitan ng MQTT at RTMP protocol. Ang isang production logic engine ay binuo batay sa isang paghahambing ng mga lohikal na panuntunan at katotohanan na ipinakita sa JSON na format.

Ang smart home controller ay kasalukuyang sumasailalim sa trial operation sa ilang mga site sa Moscow at sa rehiyon ng Moscow.

Ang susunod na bersyon ng controller ay nagpaplano na ikonekta ang iba pang mga uri ng mga device (RF, Bluetooth, WiFi, wired). Para sa kaginhawahan ng mga gumagamit, ang pamamaraan para sa pagkonekta ng mga sensor at IP camera ay ililipat sa mobile application. Mayroon ding mga ideya para sa pag-optimize ng code ng proseso ng server at pag-port ng software sa operating system openwrt. Papayagan ka nitong makatipid sa isang hiwalay na controller at ilipat ang pag-andar ng isang matalinong tahanan sa isang regular na router ng sambahayan.

Pinagmulan: www.habr.com

Magdagdag ng komento