Geraçãodeeventosparaatuaçãododisposi1voIoTviaNode-Red
Obje1vos
• AssinaroGalileonumcanalMQTT(alteraçãodecódigonoeclipse).– paradigmapublish-subscribe
• CriarinterfaceparaenviodosdadossobreoNode-Red.• ProcessarosdadosrecebidospeloGalileo,egerarcomportamentos
condicionais.• ConstruirestruturaparaenviodedadosaotópicoemqueoGalileofoi
subscrito.• Construirpequenaaplicaçãowebparainteraçãodousuário.Ousuário
poderávariaraintensidadedeumLEDu1lizandoum‘slider’emumapáginaHTML(funcionanocelulartambém).
• Alterarocódigodoeclipseparaintegraçãocomoprojetodeluminosidade.
ServiçoWeb
• Umaaplicaçãoauto-con1da,iden1ficadaporumURI(UniformResourceIden5fier),cujasinterfaceseligaçõessãodefinidas,descritaselocalizadasporartefatosqueu1lizamalinguagemXML(ExtensibleMarkupLanguage)ouJSON(JavaScriptObjectNota1on).
• DevesercapazdeinteragircomoutrasaplicaçõesatravésdatrocademensagensXML/JSONu1lizandoosprotocolosdecomunicaçãopadrãoatualmentedisponíveisnaInternet.
• Fazcomqueosrecursosdaaplicaçãodoso`wareestejamdisponíveissobrearededeumaformanormalizada.
• REST(Representa1onalStateTransfer)ouRESTfullsãopadrõesarquiteturaisquepermitemdefinireimplementarserviçosweb.
ServiçoWeb
Paradigmapublish-subscribe
• Padrãoarquiteturalusadoparaacomunicaçãoassíncronadeváriosprocessos
FuncionamentogeraldoMQTTMessageQueueTelemetryTransport(MQTT)• OMQTTéumprotocololevedeaplicaçãoqueu1lizaoprotocolodetransporte
TCPcomoviadecomunicaçãodedadosparaIoT.• Oconceitoébaseadonapublicaçãodedadosapar1rdeumpublisher,enaleitura
dosdadosapar1rdainscriçãonumcanal.• ClientesMQTTpodemfuncionar,simultaneamente,comopublisheresubscriber.• Osistemademonitoramentoderespostaséinstanciadoemmul5thread,portanto
osprocessosdeinscriçãoepublicaçãosãoindependentes.
AssinandoGalileonumcanalMQTT(subscriber)• ParaseefetuarainscriçãoénecessárioterumclienteMQTTinstanciado,
devidamenteconfiguradocomobrokerMQTT(host)easinformaçõesdousuário.– Aconexãoestabelecidacomobrokeru1lizaoprotocolodetransporteTCP,epossuia
seguinteestrutura: tcp://organiza5on_id.messaging.internetoAhings.ibmcloud.com:1883Ondeorganiza5on_idéprovenientedacriaçãodasuaorganizaçãoIoTnoIBMBluemix.
• Ascredenciaisdousuáriosãoformadaspeloiddaorganização,1pododisposi1voeiddodisposi1vo,comaseguinteestrutura:– d:organiza5on_id:device_type:device_id(formatostring)– d:zis8fm:Intel_Galileo:984FEE018B08(Exemplo)
AssinandoGalileonumcanalMQTT(subscriber)• Apósacriaçãodoclienteénecessárioconfigurarafunçãocallbacks(),que
temoobje1vodegerenciartodoosistemademensagensderesposta,incluindoasmensagenscomoconteúdodotópicoinscrito.
• Aoreceberumaatualizaçãonotópicoobrokerenviaumamensagemparaosclientesinscritos,alertandoaexistênciadenovosdadosnotópico.
• Destaformaafunçãocallbacks()recebeano1ficaçãodaatualização.Paratratarosdadosrecebidospelobrokerénecessárioimplementarumafunçãocomcabeçalhoprédeterminadoereferencia-lanaconfiguraçãodocallbacks().
• Portantotodosostratamentosdasmensagensserãoefetuadosnafunçãomgsarrvd().• Onomedafunçãopodeserescolhidopeloprogramador,porémo
cabeçalhodeveserman1do.
AssinandoGalileonumcanalMQTT(subscriber)• Demaneirageralosbrokersimplementamosistemademodoqueo
subscriberdevaassinarocanalcomomesmonomeondeosdadosestãosendopublicados.Ouseja,tantoparapublicaçãoquantoparaassinaçãou1liza-seomesmonomedecanal.
• NoentantoobrokerdoBluemixfuncionacomumpadrãodiferente,ondetodosospublishersdevempublicaremtópicoscomosubcaminho“evt”eseinscreveremtópicoscomsubcaminho“cmd”.
• Onde:• iot-2-éoprefixodostópicosu1lizadopeloBluemix• evt-indicaocanalparapublicaçãodeeventos• cmd–indicaocanalparau1lizaçãodecomandos(subscriber)• status–nomedadoaoeventoocorrido(podeserescolhidopelo
usuário)• fmt–indicaqueopróximoparâmetrodeterminao1podedadosque
serápublicado
AssinandoGalileonumcanalMQTT(subscriber)• Apósacriaçãodosdevidoscanais,edainstânciadeumcliente,basta
efetuarocomandoparaseinscrevernotópico:
• Destaformaocliente,apar1rdafunçãocallbacks(),passaarecebertodasasmensagensdeatualizaçãonocanal.
• Nãohánecessidadedemanterumloopsobreafunçãodeassinação,poisosistemamul5threadjácuidadessetrabalho.
• InformaçõessobreabibliotecaMQTTu1lizadanoeclipse:hjp://www.eclipse.org/paho/files/mqjdoc/Cclient/
_m_q_t_t_client_8h.html#aad27d07782991a4937ebf2f39a021f83
ClonandoaaplicaçãoexemplonoNode-Red• ParacopiaraaplicaçãobastaabriroNode-Redreferenteasuaaplicação
IoTecolarnoclipboard(vistonaaulapassada)asinformaçõesdoarquivowebapp.jsondisponibilizadonoMoodle.
• Aestruturaresultantedeveráestarparecidacomaseguinte:OBS:NãoseesqueçamdeeliminarosblocosIoTdaaplicaçãoexemploeconectarosblocosdasuaaplicação!!!
InterfacepararespostaviaNode-Red• Apósaconfiguraçãododisposi1voIoT,énecessárioconfiguraraaplicação
noNode-RedparaqueosdadossejamredirecionadosparaocanalnoqualoGalileofoiassinado.
• Dentrodapáginadaaplicação,noNode-Red,selecioneoblocoIBMIOTnaabaoutput.
• Talcomponenterepresentaocanaldesaídadedadosparaodisposi1voIoTconectado,destaforma,todososdadosinseridosnoblocoserãoenviadosdevoltaparaoGalileo.
• Umadasconfiguraçõesmaisimportantesdocomponentedesaídaéopadrãodosdadosdesaída.Alémderepresentaroformato(JSON)énecessárioescreveraestruturagenéricadesaída,representandooselementosestá1cosdamesma.
Tratamentodosdadospararesposta• ParaefetuararespostaparaoGalileoénecessárioqueexistamdados,
está1cosoudinâmicos.• Éinteressanteapossibilidadedegerardadosapar1rdecondicionais
feitassobreosdadosdeentrada,ouseja,casoumvalorultrapasseumlimiteaaplicaçãoatribuiovalor‘1’paraumaflag,queseráenviadadevoltaparaoGalileo,possibilitandoqueosdadossejamposteriormenteinterpretadospelodisposi1vo,gerandoatuaçõesdesejadas.
• Paraexemplificarfoiconstruídoumblocodefunçãoqueanalisaosdadosdeentrada,egeraumacondiçãobooleanadeacordocomoresultado.Paraissoanalisemosoblocochamado‘condi5on’naaplicaçãoexemplo.
Definiçãodeestruturaparadadosderesposta• Apósobtermosdadosapar1rdoscondicionaispodemosenvia-losde
voltaparaodisposi1voIoT.• Noentanto,énecessárioconstruiraestruturadesaídaapar1rdosdados
ob1dos.Paraissoanalisemosobloco‘buildoutput’:
• Relembrandoqueocampo‘Data’docomponentedesaídafoiconfiguradocom:{"payload":{}}.
• Demaneirageralaestruturaacimarepresentaaexistênciadeumobjetocomapropriedade‘payload’,quetemcomoatributoumaoutraestruturaJSONgenérica(representadopelaschavesvazias).
• Dentrodetalestruturagenéricaépossívelincluirquantoscamposforemnecessários,semquehajanecessidadedealterarocabeçalhodedados.
Executandoaaplicaçãoexemplo• Comoresultadodasequenciadesenvolvidaserápossívelvisualizaros
dadosenviadospelaaplicaçãoapar1rdoterminaldoGalileo.• Demaneirageralosdadosrecebidosserão0e1repe1dos
alternadamente.• OBS:Osdadosconfiguradosanteriormenteremetemàpropriedade
‘autocontrol’.Apropriedade‘ledstate’seráavaliadaposteriormente.
Construindoumaaplicaçãowebparacontroledodisposi1vo• Aaplicaçãowebqueseráconstruídatemcomointuitoobterdadosa
par1rdavariaçãodeumslider.• Osdadosob1dosserãoenviadosparaoGalileo,paracontrolara
luminosidadedeumLED.• ParaconstruiraaplicaçãoWebu1lizaremosconceitosdeHTML,
JavaScriptejQuery.• Demaneirageralaconstruçãodaaplicaçãoéfeitapelosseguintesblocos
doNode-Red:
• Aestruturaédadapor:• RequisiçãoGETHTTPqueobtémasreferênciasparaapáginaWeb.• Construçãodeumtemplatecominterfacegráfica(HTML)e
manipulaçãodedados(JavaScriptejQuery)• TransferênciadosdadosintroduzidosnainterfaceparaoNode-Red
Construindoaplicaçãowebparacontroledodisposi1vo• Observando-seobloco‘hVpin’pode-sedeterminarqualocomplemento
daURLquedisponibilizaraaaplicação.
• ParaalterarocódigoreferenteaaquisiçãodosdadosviaHTML,oualterarolayoutdapáginaweb,bastaeditarocódigodobloco‘PageTemplate’
• PortantoaURLdeacessoparaaaplicaçãowebserádadapelocomplemento/webapp(configuradopelodesenvolvedor).• Nome_app.mybluemix.net/webapp
Interfacewebdaaplicaçãoexemplo
Construindoaplicaçãowebparacontroleremoto• Demaneirageraloconteúdodobloco‘PageTemplate’define:
• OmétodoparaobterovaloratualdoslidereefetuarumarequisiçãoparaatualizarovalordavariávelnoNode-Red
• Construçãodeumformulárioquedefineaexistênciadeumbotãodo1po“Submit”eum“slider”.Edefinequalométodoseráchamadoaoclicarnobotão,apar1rdocampo‘ac5on’noformulário.
• IMPORTANTE!!• Paraqueaaplicaçãoexemplofuncioneemsuaorganização,é
necessáriotrocaronomedaaplicaçãonasURLsinseridasnobloco“PageTemplate”
• Nocasoexemploonomedaaplicaçãoépad-iot-cloud,mude-aparaonomedesuaaplicação
Resultados• Aoexecutaraaplicaçãofinalserápossívelvariarovalordoslidere
observaronovovalorsendoimpressonoterminaldoGalileo.• Alémdisso,haveráoacionamentoPWMdaportadigital11nogalileo,de
acordocomovalorintroduzidonaaplicaçãoweb.• SeránecessárioconectarumLEDnaportadigital11paraveroresultado
prá1co.(OcódigoparaatuaçãodoLEDjáestáimplementadonocódigoexemploparaoeclipse).
• Portantopropõe-sequeseu1lizeocódigoexemploparaimplementar
melhoriasemsuaaplicaçãodosensordeluminosidade.
Referências• hjp://mitsuruog.github.io/what-mqj/(websocketMQTT)• hjp://tech.scargill.net/a-node-red-websockets-web-page/• hjps://www.ibm.com/developerworks/cloud/library/cl-rtchat-app/• hjp://l0l.org.uk/2014/01/simple-node-red-web-page/
• HTML– hjp://www.w3schools.com/
• Node-Red– hjp://nodered.org/docs/
Top Related