Se você faz automação em casa com Arduino precisa conhecer o firmware Tasmota

Eu só fiquei sabendo da existência do Tasmota uma semana atrás, quando estava pesquisando outra coisa e esbarrei numa menção a ele. Não se trata de novidade: os vídeos mais velhos que encontrei no youtube glorificando o firmware são de 2018, época em que entrei para a faculdade e tive que deixar de lado muitos “prazeres”, o que explica em parte eu só ter tomado conhecimento dele agora. O firmware certamente é mais velho do que isso, mas deve ter alcançado massa crítica por volta de 2018.

O Tasmota é um projeto  de código aberto para ESP8266 do holandês Theo Arends que começou como uma alternativa de firmware para o Sonoff, da Itead, mas que agora é compatível com centenas de outros dispositivos e, melhor ainda, pode ser usado no seu próprio projeto. A versão atual do firmware requer pelo menos 1MB de memória flash, o que não é problema para quase todo ESP8266 comprado hoje, mas como eu tenho uma centena (não é hipérbole) de módulos ESP-01 com apenas 512KB de RAM, tive que aprender a compilar meu próprio firmware. Isso é fácil depois que você entende como se faz. O firmware é baseado em Arduino Core e inicialmente podia ser compilado no próprio IDE Arduino, mas agora você precisa do VSCode com a extensão PlatformIO (ambos gratuitos).

Eu fiquei impressionado com a estabilidade e a velocidade de conexão, mesmo no ESP-01 que é danado de problemático por causa da ausência de capacitores de desacoplamento. Mas mesmo que você não precise compilar sua própria versão, não é para qualquer um: Embora seja certamente mais fácil do que criar seu próprio programa, se você precisa realmente aproveitar o poder do firmware tem que se preparar para ler muita documentação. O firmware tem centenas de opções e não é fácil entendê-las antes de você precisar delas. E algumas opções padrão provocam umas doideiras no comportamento que você jura que é defeito da sua gambiarra, até descobrir que é o default do firmware e que você resolve dando um simples comando pela serial.

Eu instalei uma máquina virtual do Home Assistant no meu PC e  pude sem grandes complicações operar meus projetos no meu celular android usando a app fornecida por eles. A única coisa que está faltando é integração com o Google Assistant, que é possível, mas nem de longe tão fácil quanto a da Sonoff.

O concorrente mais próximo do Tasmota é o ESPHome, mas com esse ainda não tenho nenhuma experiência. Eu sequer arranhei as possibilidades do Tasmota até agora.

15 comentários
  • Claudio - 44 Comentários

    Como vc está começando a explorar o Home Assistant, recomendo que dê uma olhada mais a fundo no ESPHome antes de bater o martelo e definir que vai usar o Tasmota.

    A principal vantagem do ESPHome na minha opinião é que vc trata toda a configuração do device como código – vc escreve uma descrição do seu device em um YAML e o framework gera o FW binário a partir disso. Também a integração com o Home Assistant me parece mais simples.

    Depois disso, tem as mesmas coisas que o Tasmota suporta, como updates por OTA, portal para configurar caso não consiga conectar no WiFi, etc. etc.

    Se servir para alguma coisa, eu mantenho uma configuração MUITO SIMPLES do Home Assistant aqui:
    https://github.com/heckler/home-assistant-config

    Os device configs das minhas experiências com o ESPHome estão aqui:
    https://github.com/heckler/esphome-device-configs

    Mas enfim, não consigo oferecer um comparativo entre os dois porque a minha experiência com Tasmota é muito pequena (preciso gastar um tempo com ele para poder avaliar melhor).

    • Diogo - 1 Comentário

      O ESPHome tem o problema de funcionar somente com internet né? enquanto o Tasmota consegue funcionar localmente também

      • Jefferson - 6.253 Comentários

        Eu acho que você está enganado. Se o ESPHome dependesse de acesso à internet eu teria descartado imediatamente como alternativa. E um dos indícios de que isso não é necessário é o site do projeto não ter um botão “login”.

        • Claudio - 44 Comentários

          O Jefferson está 100% correto, ESPHome não depende de nenhum tipo de acesso `a internet para funcionar. Não existe uma “cloud” do ESPHome*

          O firmware expõe uma API (isso pode ser desabilitado via configuração) para que o Home Assistant possa acessar, ler e controlar um device rodando ESPHome (é daí que vem o “Home” do nome), mas normalmente isso roda tudo na sua rede local. E Home Assistant é um “plus a mais”, mas não é obrigatório, só com o proprio firmware do ESPHome já dá pra fazer um bocado de coisa.

          (*) o Home Assistant tem uma opção cloud chamada NabuCasa, mas eu não uso e não conheço direito; me parece que o principal diferencial é uma configuração de certificados e proxy reverso mais simples para acesso remoto ao teu Home Assistant local, mas como disse, não uso então não posso elaborar mais.

  • Claudio - 44 Comentários

    Ah, esse daqui e’ o device que tem a configuração mais legal para “showcase” do que dá pra fazer:

    https://github.com/heckler/esphome-device-configs/blob/master/balcony_sensors_02.yaml

    É um NodeMCU com sensores (temp, humidade, pressão), e um mini-display OLED e também um PIR.

    Daí esse YAML faz o seguinte:

    – expoe os valores dos sensores para o Home Assistant (ok, isso e’ automatico pelo ESPHome)
    – calcula um average recente para tres valores (temp, humidade, pressao)
    – calcula uma linha de tendencia (estavel, subindo, descendo) para esses valores
    – se detectar movimento no PIR, exibe os valores atuais e a linha de tendencia (com os caracteres / \ = )
    – depois de um delay curto, limpa o OLED para evitar burn-in

    Tudo isso roda no NodeMCU, então mesmo que o Home Assitant não esteja online, esse device segue funcional

    • Jefferson - 6.253 Comentários

      Obrigado. Ler o .yaml me deu uma boa idéia do que é possível fazer. Eu dei meus primeiros passos agora com o ESPHome e apesar de achá-lo mais hostil que o Tasmota, seguindo um roteiro bem feito (o que eu segui não era) compilar o ESPHome para um ESP01 com 512KB de RAM é mais rápido que o Tasmota para o mesmo target. Na verdade eu nem precisei fazer nada diferente do que faria para um target de 1MB, porque o addon do Home Assistant detectou a capacidade de flash e fez a alteração necessária.

      • Jefferson - 6.253 Comentários

        A parte que levei mais tempo para entender foi por que eu não tinha nenhuma opção de upload além de over-the-air (impossível com apenas 512KB). O problema é que como eu estava usando um navegador como GUI eu esperava que este detectasse o programador no SO cliente (browsers tem há algum tempo a capacidade de interagir com dispositivos USB), mas eu precisava disponibilizar o programador numa porta USB *do servidor* Home Assistant, que no caso é uma VM Virtualbox. Uma vez sabendo que esse passo era necessário, se tornou muito fácil. O tutorial que eu estava lendo provavelmente assumia que eu estava rodando o navegador no servidor.

  • Jefferson - 6.253 Comentários

    Eu encontrei uma comparação razoável entre Tasmota e ESPHome aqui. Mas tenho ressalvas:

    1)O autor não deixa claro o que chama de “Internal Automation” e “Standalone Operation”, que ele cita como ausentes no Tasmota e presentes no ESPHome. O Tasmota por default conta com um servidor web em cada dispositivo por onde você tanto configura quanto opera o IO e visualiza as leituras. Você pode, por exemplo, fazer uma balança baseada em Tasmota e visualizar o peso medido diretamente no servidor web do dispositivo.

    Ainda não sei o que é possível fazer com o suporte a displays do Tasmota.

    Já se ele está falando que um EspHome equipado com display pode montar um gráfico com informação coletada por outro(s) dispositivo(s) *sem depender de mais nada além do roteador Wifi*, isso realmente não parece ser possível com o Tasmota. E seria a única coisa realmente atraente no ESPHome para mim no momento. Por exemplo, eu tenho um projeto em operação onde um ESP8266 monitora o volume de uma caixa d’água e envia o valor lido para outro ESP8266 instalado com um display na cozinha (na verdade é um broadcast UDP e posso ter n displays mostrando a mesma coisa) e baseado na configuração feita pelo usuário envia um comando para um terceiro ESP8266 ligar ou desligar a bomba dágua (eu não recomendo isso, mas o usuário por alguma razão não consegue fazer a bóia tradicional da caixa dele funcionar direito e ficou muito contente com a solução wireless). Esse tipo de automação não parece ser possível de fazer com Tasmota sem um broker. Se for possível com ESPHome…

    2)Ele diz que o Tasmota requer um broker. Isso é apenas parcialmente verdade. Se você quiser fazer algo sofisticado que requer a interação entre dispositivos ou agrupá-los em uma mesma tela, sim você precisa de um broker. Mas se você só quer controlar relês individualmente ou visualizar sensores como uma balança ou medição de consumo de energia da casa, você não precisa de nada além do dispositivo e o celular.

    3)Ele diz que ambos, Tasmota e ESPHome tem um web server. Mas no Tasmota isso é parte integrante, default do firmware. Você pode contar com um rodando, que é imediatamente útil. No EspHome voê precisa ter adicionado um na configuração e avisa na documentação: “Please note that enabling this component will take up a lot of memory and can lead to problems, especially on the ESP8266.” Ou seja: você não pode exatamente contar com isso.

  • Jefferson - 6.253 Comentários

    Exemplo de problema desconcertante em que você esbarra no firmware Tasmota se não conhecer como ele funciona:

    No relé que estou projetando há um sensor baseado em LDR+lâmpada Neon que detecta quando a carga está efetivamente energizada. Como isso é um sensor muito simples, que funciona como se fosse um botão ou chave, eu configurei a respectiva entrada do ESP8266 como “Button”. Isso teve o efeito de apagar toda a configuração do Tasmota se o sensor ficasse ativado por mais de 40s. Eu só descobri o que estava havendo porque o console mostra a mensagem MQTT dizendo que o reset é proposital, sempre exatamente 40s após reiniciar.

    03:19:45 RSL: stat/tasmota_98E06C/RESULT = {“Reset”:”Reset and Restarting”}

    Depois de alguma pesquisa descobri que a configuração padrão do componente “button” é se comportar como o botão padrão de um sonoff, que se pressionado por mais de x segundos reseta a configuração. Para evitar isso eu usei o componente “switch” mas precisei dar o comando “SetOption114 1” para evitar outro comportamento default do Tasmota: Associar (“attach”) chaves automaticamente aos relés existentes, porque o firmware assume que se você está colocando um relé e uma chave, a chave serve para operar manualmente o relê.

    Em retrospecto, eu estava usando errado o firmware. Sensor não é botão nem chave. Mas você não espera que o firmware seja tão “amigável” que acabe te atrapalhando.

  • Claudio - 44 Comentários

    Sua análise é muito boa, salvei os links aqui para ler com mais calma.

    Uma vantagem que eu vejo no Tasmota é que ele me parece ser mais ativo e ter uma comunidade um pouco mais vibrante que o ESPHome. Eu vejo releases regulares no ESPHome com bastante coisas no changelog, mas também me chama a atenção que o repositório de issues está meio abandonado, talvez estejam faltando voluntários por lá. Reportei um problema minor em novembro e o issue não foi nem tagueado ainda, está lá criando teia de aranha: (a maior parte dos issues recentes se encontram assim meio abandonados)

    https://github.com/esphome/issues/issues/1664

    Por outro lado, uma coisa que eu gosto muito no ESPHome é que toda a configuração do device é código, que eu guardo no git, com histórico e diffs. No Tasmota eu não percebi qual a melhor maneira de obter o mesmo resultado – mas confesso que não dispendi muito tempo procurando soluções.

    • Jefferson - 6.253 Comentários

      No Tasmota, até onde pude ver, você pode fazer toda (ou quase) configuração através de comandos Backlog, que são um “batch” de outros comandos separados por “;”, assim:

      Backlog SSID1 ; Password1 ; SSID2 ; Password2 ; SetOption19 1; MqttHost 10.0.0.122; MqttUser ; MqttPassword ;

      O acima é só um exemplo editado do meu comando Backlog para um dispositivo simples. Você pode precisar de backlogs bem mais extensos

      E a configuração do IO é feita através de um template que você pode importar e exportar, parecido com isto:
      {“NAME”:”Merged”,”GPIO”:[416,0,418,0,417,2720,0,0,2624,32,2656,224,0,0],”FLAG”:0,”BASE”:45}

      Os números que você vê entre colchetes são tirados da tabela de componentes. “416” significa que a saída PWM1 do software deve ser associada ao primeiro GPIO do dispositivo, “0” que o segundo GPIO não está sendo usado e assim por diante. Você não precisa lembrar desses números e raramente tem que consultar a tabela, porque no Tasmota você constrói esse template na GUI do WebServer embutido no dispositivo e pode ir testando o comportamento sem precisar de mais nada além do dispositivo e um navegador web conectado a ele.

  • Jefferson - 6.253 Comentários

    Para quem consegue entender inglês falado, como “guia visual” das possibilidades do Tasmota, eu recomendo os vídeos sobre Tasmota do canal The HookUp. O autor fala seguindo um script (pelo menos em um caso eu achei o texto inteiro do que ele disse no vídeo no site dele), o que ajuda na objetividade, clareza e precisão. Seus vídeos são muito bem editados. Ele fala rápido, sem perder tempo esperando que você observe detalhes ou que coisas demoradas aconteçam (ele acelera o vídeo nesses pontos), porque ele assume que você sempre pode pausar. A impressão que tive com os vídeos dele é que cada minuto assistindo é um minuto bem gasto, ao contrário da impressão que tenho com 99% do youtube.

Deixe um comentário

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »