{"id":21,"date":"2016-11-19T12:59:31","date_gmt":"2016-11-19T14:59:31","guid":{"rendered":"https:\/\/gaboliveirablog.wordpress.com\/?p=21"},"modified":"2022-06-28T10:40:50","modified_gmt":"2022-06-28T13:40:50","slug":"luz-de-ambiente-inteligente-parte-1","status":"publish","type":"post","link":"https:\/\/gabrieloliveira.eti.br\/blog\/luz-de-ambiente-inteligente-parte-1\/","title":{"rendered":"Smart Home &#8211; Luz de Ambiente Inteligente"},"content":{"rendered":"<p>Este projeto \u00e9 bem grande, que envolve v\u00e1rias etapas. Pretendo divid\u00ed-lo em v\u00e1rios posts diferentes. Este primeiro falar\u00e1 da motiva\u00e7\u00e3o, pesquisa inicial e primeiros passos. Conforme for postando as outras etapas, irei criando links para todos os posts.<\/p>\n<p>Parte 2:\u00a0<a href=\"https:\/\/gabrieloliveira.eti.br\/blog\/integrando-a-luz-inteligente-com-o-homekit\/\" target=\"_blank\" rel=\"noopener noreferrer\">Integrando a luz inteligente com o HomeKit<\/a><\/p>\n<h3><em>Smart bedroom<\/em><\/h3>\n<p>Com a mudan\u00e7a de volta pro Rio de Janeiro e reforma do meu novo quarto, eu pensei em tornar meu cantinho um pouco mais &#8220;S<em>mart<\/em>&#8220;. Eu nunca tinha feito algo do tipo, apesar de sempre ler sobre. S\u00f3 que, mesmo com pouco <em>know-how<\/em>, o mais importante estava faltando &#8212; ideias.<\/p>\n<p>Procurando uma ideia de bancada para armazenar minha tralha (queria ter um &#8220;live blog&#8221; dos meus <em>video-games<\/em>, expondo todos na bancada), <a href=\"https:\/\/br.pinterest.com\/pin\/535576580658474179\/\" target=\"_blank\" rel=\"noopener noreferrer\">encontrei uma estante<\/a>\u00a0que utilizava fitas LED para criar uma luz interior. Gostei muito da ideia, e pensei:<br \/>\n&#8220;E se a cor das luzes mudassem de acordo com o console que eu estou usando?&#8221;<br \/>\nE comecei a pesquisar.<!--more--><\/p>\n<h2>Planejamento<\/h2>\n<p>Eu tinha um combo de roteador e <em>Smart Hub<\/em> chamado <em><a href=\"https:\/\/www.securifi.com\/rg\/almondplus\" target=\"_blank\" rel=\"noopener noreferrer\">Securifi Almond+<\/a><\/em> que comprei em uma viagem aos EUA, mas que at\u00e9 ent\u00e3o s\u00f3 havia utilizado a parte de roteador dele (que \u00e9 at\u00e9 que OK, conseguindo entregar <a href=\"https:\/\/pt.wikipedia.org\/wiki\/IEEE_802.11ac\" target=\"_blank\" rel=\"noopener noreferrer\">802.11ac<\/a> no meu apartamento inteiro quando estava em SP, mas n\u00e3o no do Rio). Agora era a hora perfeita de come\u00e7ar a colocar alguns <em>appliances<\/em> nele. Para conseguir terminar o meu projeto, eu precisava:<\/p>\n<ol>\n<li>Interligar as fitas LED com o <em>Almond+<\/em>;<\/li>\n<li>Criar cenas no <em>Almond+<\/em> para cada console, com cores distintas;<\/li>\n<li>Enviar pro <em>Almond+<\/em> a informa\u00e7\u00e3o de que certo console foi ligado;<\/li>\n<li>Ativar a cena correta de acordo com o console.<\/li>\n<\/ol>\n<p>Minha primeira ideia foi ter uma fita LED Smart (como a <em><a href=\"http:\/\/www2.meethue.com\/en-us\/productdetail\/philips-hue-lightstrip\" target=\"_blank\" rel=\"noopener noreferrer\">Hue Lightstrips<\/a><\/em>) que se comunica diretamente com o <em>Almond+<\/em>. Por\u00e9m essas fitas LED s\u00e3o super caras, e ach\u00e1-las no Brasil \u00e9 um parto. Al\u00e9m disso, comprar l\u00e1 de fora algo experimental e que precisa de tamanho\/conectores bem definidos n\u00e3o me pareceu uma boa ideia. Se eu precisasse de mais fita (ou at\u00e9 mesmo fritasse a fita &#8212; eu disse que n\u00e3o tinha muita experi\u00eancia nessa \u00e1rea), eu gastaria um dinheiro absurdo e ficaria alguns meses esperando eles chegarem. Ent\u00e3o abortei esse plano\u00a0momentaneamente e parti para uma l\u00e2mpada RGBW, que \u00e9 mais barata\u00a0que um rolo pequeno de fita LED <em>Smart<\/em> e \u00e9 &#8220;<em>plug and play<\/em>&#8221; com o <em>Almond+<\/em> (<a href=\"https:\/\/www.amazon.com\/SYLVANIA-LIGHTIFY-Osram-Connected-separately\/dp\/B0197840KQ?th=1&amp;psc=1\" target=\"_blank\" rel=\"noopener noreferrer\">Sylvania Lightify by Osram<\/a>).<\/p>\n<p>Com a listinha de compras feita, comecei a pensar na parte mais pr\u00e1tica &#8212; como eu ia programar isso tudo.<\/p>\n<h3>L\u00e1 vem o Pi<\/h3>\n<p>Li bastante sobre o tema, e acabei tendo uma luz (<em>no pun intended<\/em>) que reviveu o plano\u00a0inicial de usar fitas LED. Eu tinha um <em><a href=\"https:\/\/www.raspberrypi.org\/products\/model-a-plus\/\" target=\"_blank\" rel=\"noopener noreferrer\">Raspberry Pi A+<\/a><\/em> encostado em casa que eu planejava utilizar como uma <em><a href=\"https:\/\/www.plex.tv\/pt-br\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plex<\/a> Box<\/em> (usando o <em><a href=\"http:\/\/www.rasplex.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">RasPlex<\/a><\/em>). Pois bem, o <em>Raspberry Pi<\/em> ia ficar ligado e conectado na TV o dia inteiro (consumo baix\u00edssimo de energia &lt;3), ent\u00e3o por qu\u00ea n\u00e3o deixar ele com a fun\u00e7\u00e3o de controlar as fitas LED? Eu j\u00e1 tinha visto um projeto absurdo que utiliza o <em>Raspberry Pi<\/em> para simular o <a href=\"http:\/\/www.philips.com.br\/c-m-so\/televisores\/p\/ambilight\" target=\"_blank\" rel=\"noopener noreferrer\"><em>Ambilight<\/em> da <em>Phillips<\/em><\/a>, ent\u00e3o sabia que era perfeitamente poss\u00edvel.<\/p>\n<p>Ent\u00e3o o meu Pi ficaria preso na TV 24\/7, rodando o <em>RasPlex<\/em> e trocando a cor das fitas LED da mesma forma que o <em>Almond+<\/em> trocaria a cor da l\u00e2mpada. Show, resta agora saber como (a) o Pi ia saber o console que se conectou; (b) O <em>Almond+<\/em> saber qual console se conectou; e (c) coordenar tudo isso. \ud83d\ude42<\/p>\n<h3>TV antiga, problemas de primeiro mundo<\/h3>\n<p>Enquanto eu pensava em toda essa parte <em>Smart<\/em> do quarto, esqueci da parte &#8220;<em>dumb<\/em>&#8221; &#8212; a TV tem 4 portas HDMI, devidamente ocupadas pela TV a cabo e pelos consoles. Ou seja, se eu ligasse o Pi e a TV a cabo, n\u00e3o conseguiria plugar todos os consoles. Foi a\u00ed que baixou um megaloman\u00edaco em mim e comecei a procurar <em>switches<\/em> HDMI (daqueles que se pluga 500 aparelhos, e s\u00f3 vai um cabo pra TV). Achei esse <em>switch<\/em> de 5 portas com controle remoto da foto abaixo\u00a0 e pensei: &#8220;E se o Pi captasse o <em>input<\/em> do controle remoto do HDMI pra saber a entrada que vai ser jogada pra TV, e com uma tabela de-para simples, descobrir o console?&#8221; R\u00e1! Eu sou um g\u00eanio! #sqn<\/p>\n<p><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/http2.mlstatic.com\/hub-switch-hdmi-5-portas-splitter-full-hd-controle-remoto-D_NQ_NP_798627-MLB28484563182_102018-F.webp\" \/><\/p>\n<p>Comprei <a href=\"https:\/\/www.vishay.com\/docs\/82491\/tsop382.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">esse<\/a> diodo receptor de infravermelhos e reservei (At\u00e9 porque nunca precisei dele).<\/p>\n<h3>Problemas<\/h3>\n<p>O primeiro problema que pensei \u00e9 que alguns consoles (de cara me veio em mente o PS3), quando ligados, trocam a entrada da TV para a entrada que ele tiver conectado, o que tornaria desnecess\u00e1rio a troca da entrada pelo controle remoto, e o Pi nunca ia saber que a mudan\u00e7a ocorreu. Tamb\u00e9m tem o problema de fazer o Pi se comunicar com o <em>Almond+<\/em>. Eu poderia tirar o Pi da jogada e usar uma Fita LED Smart, mas dinheiro n\u00e3o d\u00e1 em \u00e1rvore e dessa forma n\u00e3o teria gra\u00e7a nenhuma. Olha o quanto eu j\u00e1 escrevi antes mesmo de por a m\u00e3o na massa!<\/p>\n<p>Tamb\u00e9m tem a quest\u00e3o dos consoles antigos. Os consoles que usam outras portas da TV (como a RCA) n\u00e3o tem controle remoto que o Pi possa ler. A solu\u00e7\u00e3o r\u00e1pida para esse problema \u00e9 captar o controle remoto da TV da mesma forma, mas eu n\u00e3o saberia dizer qual console est\u00e1 sendo ligado (precisarei utilizar um S<em>witch<\/em> RCA igual ao <em>switch<\/em> HDMI, devido \u00e0 quantidade de consoles). Esse da\u00ed vai ficar pra um projeto futuro.<\/p>\n<p>Pois bem, vamos por partes. Primeiramente, a comunica\u00e7\u00e3o entre o Pi e o <em>Almond+<\/em>.<\/p>\n<h3>Se isso ent\u00e3o (talvez) aquilo<\/h3>\n<p>Tentando colocar a comunica\u00e7\u00e3o entre o Pi e o <em>Almond+<\/em> em uma forma <em><a href=\"https:\/\/pt.wikipedia.org\/wiki\/Programa%C3%A7%C3%A3o_orientada_a_eventos\" target=\"_blank\" rel=\"noopener noreferrer\">event-driven<\/a><\/em>, eu teria basicamente dois eventos:<\/p>\n<ol>\n<li>Quando o Pi ler o sinal IR, colocar a cor certa nas fitas LED e avisar ao <em>Almond+<\/em> que esse evento ocorreu, para que ele pudesse ativar a cena apropriada;<\/li>\n<li>Quando o <em>Almond+<\/em> ativar uma cena, avisar ao Pi para trocar a cor das fitas LED.<\/li>\n<\/ol>\n<p>Logo de cara, eu pensei no <a href=\"https:\/\/ifttt.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">IFTTT<\/a> (<em>If This Then That<\/em>), uma plataforma que conecta servi\u00e7os e permite que um sirva de gatilho para o outro. Atrav\u00e9s do <em><a href=\"https:\/\/ifttt.com\/maker\" target=\"_blank\" rel=\"noopener noreferrer\">IFTTT Maker<\/a><\/em>, eu conseguiria tornar o meu Pi mais &#8220;conectado&#8221;, ativando rotinas conforme uma URL fosse chamada.<\/p>\n<p>Parece bom, mas o IFTTT n\u00e3o permite usar &#8220;cena ativada&#8221; do <em>Almond+<\/em> como condi\u00e7\u00e3o de ativa\u00e7\u00e3o de alguma receita. O lado bom \u00e9 que eu descobri que existe a condi\u00e7\u00e3o de ativa\u00e7\u00e3o &#8220;dispositivo conectado&#8221;, ent\u00e3o uma parte dos meus problemas estaria resolvida (os meus consoles que acessam a rede podem ativar esse gatilho, ligando a cena e avisando ao Pi). Eu tamb\u00e9m vi que o inverso tamb\u00e9m era poss\u00edvel &#8212; Se eu recebesse uma requisi\u00e7\u00e3o\u00a0W<em>eb <\/em>enviada pelo Pi, poderia ativar uma cena no <em>Almond+<\/em>. \u00d3timo! Mas eu tamb\u00e9m queria que as fitas LED trocassem de cor se eu ativasse manualmente uma cena.<\/p>\n<p>Pesquisando um pouco mais, me deparei com a <a href=\"https:\/\/wiki.securifi.com\/index.php\/Websockets_Documentation\" target=\"_blank\" rel=\"noopener noreferrer\">API de Web Sockets do Almond+<\/a>, que me pareceu perfeita! Ela possu\u00eda um evento de &#8220;cena ativada&#8221;, outro de &#8220;dispositivo conectado&#8221; e me permitia passar comandos como &#8220;ativar cena&#8221;. Al\u00e9m disso, dessa forma eu trabalharia totalmente na minha rede local, o que \u00e9 mais r\u00e1pido e n\u00e3o me torna dependente de ter Internet para ligar a l\u00e2mpada da minha casa. O futuro chegou, mas calma l\u00e1 n\u00e9.<\/p>\n<p>Agora eu consigo saber que um console ligou, ativar as luzes e&#8230; a\u00ed eu pego o controle remoto pra colocar na HDMI certa. Ou n\u00e3o?<\/p>\n<h3>O poder do HDMI<\/h3>\n<p>A magia que o PS3 usa para ligar a TV na HDMI certa se chama <a href=\"https:\/\/en.wikipedia.org\/wiki\/Consumer_Electronics_Control\" target=\"_blank\" rel=\"noopener noreferrer\">HDMI-CEC<\/a>. Batendo bastante cabe\u00e7a, descobri que o <em>RasPlex<\/em> implementa o HDMI-CEC. Se o <em>RasPlex<\/em> implementa, por qu\u00ea eu n\u00e3o posso implementar tamb\u00e9m?<br \/>\nDepois de estudar, descobri que \u00e9 poss\u00edvel sim controlar a TV atrav\u00e9s de uma biblioteca chamada <a href=\"https:\/\/github.com\/Pulse-Eight\/libcec\" target=\"_blank\" rel=\"noopener noreferrer\">libCEC<\/a>. Com ela, eu posso trocar a porta HDMI da TV (e do <em>Switch<\/em>, se ele for compat\u00edvel com o protocolo &#8212; o vendedor disse que \u00e9!). S\u00f3 que a biblioteca \u00e9 bem pouco intuitiva, e essa solu\u00e7\u00e3o provavelmente vai sair baseado na tentativa e erro. Por isso, deixei para outro momento (e post).<\/p>\n<h2>M\u00e3os na massa!<\/h2>\n<p>Por um acaso do destino, tanto a l\u00e2mpada quanto o <em>Almond+<\/em> chegaram ao mesmo tempo. O processo de parear com o <em>Almond+<\/em> foi um tanto\u00a0chato &#8212; a l\u00e2mpada achava que tinha pareado, mas dava um erro no\u00a0<em>Almond+\u00a0<\/em>na hora de buscar informa\u00e7\u00f5es sobre o dispositivo &#8212; principalmente pela forma de <em>resetar<\/em> a l\u00e2mpada (desligar por 3 segundos, depois ligar por mais 3, e repetir isso CINCO vezes). Mas depois de algumas tentativas, o <em>Almond+\u00a0<\/em>pareou e me mostrou uma telinha muito bonitinha que me permitia escolher a cor e a intensidade da luz. Bingo!<\/p>\n<p>Um detalhe que me deixou um tanto apreensivo \u00e9 que a interface (tanto a tela LED do aparelho quanto o aplicativo para iOS) n\u00e3o acertavam muito na hora de trocar a cor da l\u00e2mpada. Eu ainda n\u00e3o consegui descobrir a causa, mas parece que \u00e9 porque a l\u00e2mpada calcula sua cor atrav\u00e9s de fatores <span class='tooltipsall tooltip_post_id_custom_2b7862b93b10333c11b941e63e3afd17 classtoolTipsCustomShortCode' style='border-bottom:2px dotted #888;'>RGBW<\/span><script type=\"text\/javascript\">jQuery(\"document\").ready(function(){ toolTips('.tooltip_post_id_custom_2b7862b93b10333c11b941e63e3afd17','Red, Green, Blue, White, ou seja, a intensidade do vermelho, verde, azul e banco gera a cor'); });<\/script>, enquanto os aplicativos enviam para ela valores <span class='tooltipsall tooltip_post_id_custom_0cd8a93a0bc48b7ca9e8648b3579992e classtoolTipsCustomShortCode' style='border-bottom:2px dotted #888;'>HSB<\/span><script type=\"text\/javascript\">jQuery(\"document\").ready(function(){ toolTips('.tooltip_post_id_custom_0cd8a93a0bc48b7ca9e8648b3579992e','Hue, Saturation, Brightness, ou seja, a matiz, satura\u00e7\u00e3o e brilho geram a cor'); });<\/script>. Isso seria um problema maior ainda na hora de criar automatiza\u00e7\u00f5es com a API de <em>websockets<\/em>\u00a0do Almond, onde seria necess\u00e1rio fazer a convers\u00e3o correta na hora de enviar os dados.<\/p>\n<p>No entanto, deixei isso para depois. O meu primeiro dispositivo <em>Smart<\/em> estava configurado e funcionando! A luz liga e desliga no toque de um bot\u00e3o e, com uma pequena configura\u00e7\u00e3o, tamb\u00e9m liga sempre que o meu celular estiver no Wi-Fi de casa ap\u00f3s o p\u00f4r do sol. Vit\u00f3ria!<\/p>\n<h3>E agora?<\/h3>\n<p>Vou terminar esse post por aqui. Focar cada post em um dispositivo ser\u00e1 mais produtivo e f\u00e1cil de digerir do que sair cuspindo informa\u00e7\u00e3o.<\/p>\n<p>O pr\u00f3ximo passo vai ser aumentar a facilidade de uso, integrando com a assistente virtual do iOS e permitindo que eu fale &#8220;E a\u00ed Siri, liga a luz&#8221; e a luz ligue. Isso faz com que eu n\u00e3o dependa mais do aplicativo do Almond e possa usar as automatiza\u00e7\u00f5es da Apple.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este projeto \u00e9 bem grande, que envolve v\u00e1rias etapas. Pretendo divid\u00ed-lo em v\u00e1rios posts diferentes. Este primeiro falar\u00e1 da motiva\u00e7\u00e3o, pesquisa inicial e primeiros passos. Conforme for postando as outras etapas, irei criando links para todos os posts. Parte 2:\u00a0Integrando a luz inteligente com o HomeKit Smart bedroom Com a mudan\u00e7a de volta pro Rio &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gabrieloliveira.eti.br\/blog\/luz-de-ambiente-inteligente-parte-1\/\" class=\"more-link\">Continue lendo<span class=\"screen-reader-text\"> &#8220;Smart Home &#8211; Luz de Ambiente Inteligente&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[15,13,14,12,11],"class_list":["post-21","post","type-post","status-publish","format-standard","hentry","category-smart-home","tag-ambiente","tag-lights","tag-luzes-inteligentes","tag-smart","tag-smart-home"],"_links":{"self":[{"href":"https:\/\/gabrieloliveira.eti.br\/blog\/wp-json\/wp\/v2\/posts\/21","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gabrieloliveira.eti.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gabrieloliveira.eti.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gabrieloliveira.eti.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gabrieloliveira.eti.br\/blog\/wp-json\/wp\/v2\/comments?post=21"}],"version-history":[{"count":10,"href":"https:\/\/gabrieloliveira.eti.br\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions"}],"predecessor-version":[{"id":561,"href":"https:\/\/gabrieloliveira.eti.br\/blog\/wp-json\/wp\/v2\/posts\/21\/revisions\/561"}],"wp:attachment":[{"href":"https:\/\/gabrieloliveira.eti.br\/blog\/wp-json\/wp\/v2\/media?parent=21"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gabrieloliveira.eti.br\/blog\/wp-json\/wp\/v2\/categories?post=21"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gabrieloliveira.eti.br\/blog\/wp-json\/wp\/v2\/tags?post=21"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}