Tabla de Contenidos

Notas de configuración Tasmota

Tasmota é un firmware moi versátil para placas con ESP8266 que integra moitos dispositivos para control automatizado. O seu éxito vén dado polo baixo prezo dos microcontroladores e a popularización do dispositivo orixinal Sonoff.

Nesta entrada explicamos como configurar o firmware e servidor para establecer unha canle segura, como configurar correctamente o dispositivo para que os temporizadores funcionen coa túa zona horaria, mesmo se hai cambios de hora de verán (DST) e como cambiar o comportamento do botón toggle para que funcione coma un pulsador temporizado.

 Wemos D1-mini con shield de relé funcionando con firmware Tasmota

Conexión segura con MQTT

É moi importante que se conectas o teu dispositivo a un servidor en Internet sexa cunha conexión segura. Isto non é normalmente necesario se estás a facer probas sen sair da túa rede segura (ollo, a túa wifi caseira podería non selo), pero moita xente pensa que a seguridade é unha opción e deixan os sistemas desprotexidos en contornas de produción.

Deixar a conexión desprotexida implica que calquera pode examinar o tráfico de rede ou, simplemente ofrecendo un acceso WiFi máis forte ou cercano, pode tomar o control da túa instalación. Deixas as chaves da túa casa na porta, día e noite, cando estás e non estás?

Firmware Tasmota

Os binarios precompilados de firmware Tasmota non veñen con soporte TLS, polo que é necesario recompilar o firmware a partir do código fonte. Os pasos a seguir en GNU/Linux son:

  1. Instalar Platformio Core
  2. Descargar o código fonte
  3. Activar a opción TLS
  4. Compilar e cargar o firmware na placa
# paso 1. Instalar Platformio Core
cd /tmp
wget https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py
python3 get-platformio.py
wget https://raw.githubusercontent.com/platformio/platformio-core/master/scripts/99-platformio-udev.rules
sudo cp 99-platformio-udev.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
sudo usermod -a -G dialout $USER && sudo usermod -a -G plugdev $USER
# reinicia a túa sesión de usuario para que os permisos tomen efecto...

# paso 2. Descargar o código fonte:
cd /tmp
wget https://github.com/arendst/Tasmota/archive/master.zip
unzip master.zip && cd Tasmota-master

# paso 3. Activar a opción TLS:
sed -i 's///#define USE_MQTT_TLS/#define USE_MQTT_TLS/' tasmota/my_user_config.h

# paso 4. Compilar e cargar o firmware (adapta --upload-port ao que apareza cando conectas a túa placa)
pio run -e tasmota -t upload --upload-port=/dev/ttyUSB0

Configuración de Mosquitto

Tasmota usa MQTT como protocolo para comunicarse na rede como dispositivo a ser controlado. Unha instalación típica ten varios dispositivos conectados por rede TCP/IP a un servidor que executa un broker (intercambiador) de mensaxes MQTT. Un dos máis coñecidos é Mosquitto para o que explicamos como securizalo.

# mosquitto.conf
port 8883
keyfile /mosquitto/config/server.key
certfile /mosquitto/config/server.crt
cafile /mosquitto/config/ca.crt
password_file /mosquitto/config/users.passwd

O porto 8883 é o porto estándar asignado pola IANA para o MQTT sobre TLS.

Para xenerar os ficheiros de certificados podes seguir os pasos 1-7 desta guía de Mosquitto securizado.

Os certificados para clientes non se usan en Tasmota polas restriccións de memoria o procesador e, para isto, usamos o ficheiro de usuarios definido en password_file . Para xenerar os usuarios podes seguir o método 2 desta guía.

O ficheiro de CA non é necesario en Tasmota (aínda que tamén sería posible engadilo en duro no fonte) porque dispón dun inxenioso método que simplifica a validación da conexión co servidor lexítimo. A primeira vez que conecta garda a sinatura do certificado do servidor e a comproba nas seguintes conexións. Se cambias de servidor podes executar a seguinte orde na consola de Tasmota para borrar a sinatura e conectar por primeira vez co novo servidor para gardar a sinatura:

MqttFingerprint1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Podes atopar máis información en:

Hora local correcta cos cambios de hora (DST)

Para configurar a túa zona horaria local e que funcionen os temporizadores como se espera, dende a consola de Tasmota executar:

    TimeDST 0 0 3 1 2 120
    TimeSTD 0 0 10 1 3 60
    Timezone 99

Que de acordo aos comandos de Tasmota vén sendo que DST comeza no último domingo de marzo ás 2:00 con 120 minutos sobre UTC e que finaliza no último domingo de outubro ás 3:00 con 60 minutos sobre UTC. Timezone 99 indica que queremos usar a zona horaria configurada con TimeDST e TimeSTD.

Os campos para TimeSTD e TimeDST son:

Agora podemos ver que a hora local correcta (Local) e cando se van producir os cambios de hora (StartDST e EndDST):

    Status 7
    15:03:31 MQT: stat/tasmota_DE57D0/STATUS7 =
      {
        "StatusTIM": {
          "UTC": "2020-08-14T13:03:31",
          "Local": "2020-08-14T15:03:31",
          "StartDST": "2020-03-29T02:00:00",
          "EndDST": "2020-10-25T03:00:00",
          "Timezone": 99,
          "Sunrise": "06:42",
          "Sunset": "21:06"
        }
      }

Botón coma pulsador temporizado

Cos seguintes comandos de consola cambiamos o comportamento de todos os relés para que cando se prema o botón toggle quede activo durante 4 segundos:

SwitchMode 13
PulseTime 40

O parámetro de SwitchMode configura o comportamento segundo os seguintes valores:

e *PulseTime*:

Se usas varios relés podes configurar os modos e tempos poñendo o GPIO no que está o relé como primeiro parámetro. Para aplicar o exemplo a un relé no GPIO 5:

SwitchMode 5 13
PulseTime 5 40