tech explorers, welcome!

Etiqueta: smat home

🌡UNIHIKER sensor de temperatura en tiempo real funcionando en 2 minutos

Sigo experimentando con la placa UNIHIKER de DFRobot y es increíblemente rápido hacer que las cosas funcionen en ella. Hoy traigo cómo configurar en 2 minutos la visualización en tiempo real de un sensor de temperatura, usando un módulo BMP-280 y absolutamente nada de programación.

Prerrequisitos

Aquí está el truco, y es que esperaba que tuvieras un par de cosas configuradas antes de activar el cronómetro:

  • Descarga e instala Mind+, el IDE para UNIHIKER de DFRobot.
    En Linux se trata de fichero .deb que se toma su tiempo para instalar:
    https://mindplus.cc/download-en.html
  • Suelda un modulo de presión y temperatura BMP-280 y conéctalo a un cable I2C que vienen con la placa. Tendrás que doblar ligeramente algunos pines para que encajen en el conector que parece un nano JST de 1mm.

Ya estás listo!

Configuración

  1. En Mind+, ve al Blocks editor y abre el menú Extensions.
  2. En la pestaña pinpong selecciona el propio módulo pinpong (que habilita la interacción con los pines de la UNIHIKER) y el módulo de extensión BMP-280, que añade la interacción con estos módulos.
  1. Vuelve al Blocks editor y comienza a construir tu bloque de código. Simplemente navega por el menú lateral izquierdo y arrastra todo lo que necesitas debajo del bloque Python program start:
    • pinpong - initialize board.
    • bmp280 - initialize I2C address 0x76 para inicializar el módulo.
    • control - bloque forever (introduce un bucle while True).
    • unihiker - añade objetos a la pantalla. Primero añado un objeto filled rectangle para limpiar texto anterior, luego añado el objeto text. Especifica coordenadas X,Y donde se mostrará cada objeto, al igual que su color.
    • bmp280 - objeto read temperature. Arrástralo dentro del campo de texto del objeto text.
    • python - (opcional) añade un objeto print para mostrar los datos en terminal. Yo he incluido todas las otras propiedades que devuelve el sensor.
    • control - añade un objeto wait para detener el programa durante 1 segundo antes del siguiente bucle.

      Debería quedar todo así (haz click para ampliar)

Ejecución

Y ya está todo el programa montado, sin programar! Pulsa RUN en la parte superior de Mind+ y observa cómo se carga y se muestra por la pantalla de la UNIHIKER. Toca el sensor ligeramente con el dedo para ver cómo varían los valores con el incremento de temperatura.

Han sido sólo 2 minutos no?

🐦 @RoamingWorkshop

Shelly 1: interruptor/programador wifi, configuración de API HTTP local y ensamblaje en caja de enchufe.

Hoy os traigo mi segunda oportunidad que le voy a dar a Shelly. Y es que mi primer Shelly Dimmer petó por exceso de temperatura, al tenerlo dentro de una caja de conexiones, pero el Shelly 2.5 que controla dos luces está aguantando también insertado en la pared.

Quizás la diferencia son los 5ºC más que soportan, así que hoy voy a montar un enchufe de pared con interruptor/programador wifi añadiéndole un diminuto Shelly 1, y esperemos que aguante.

Además de su pequeño tamaño, los Shelly son muy fáciles de configurar, así que también veremos cómo controlarlos localmente mediante su API HTTP.

Requisitos

Mi objetivo es habilitar un enchufe de pared que pueda controlar y programar mediante WIFI, en mi caso, para controlar el calentador de agua eléctrico. Veamos qué voy a usar:

  • Shelly 1.
  • Cable eléctrico de dos hilos (fase y neutro).
  • Clavija de enchufe macho.
  • Clavija de enchufe hembra.
  • Material para ensamblar una carcasa (impresora 3D, madera, etc).

Conexión eléctrica

Veamos el manual de Shelly a ver cómo nos indica que realicemos las conexiones:

https://www.shelly.com/documents/user_guide/shelly_1_multi_language.pdf

La idea de este esquema estándar es que conectes el Shelly 1 a una luz y a su interruptor, significando cada símbolo lo siguiente:

  • L: línea o fase
  • N: neutro
  • SW: switch (interruptor)
  • I: input o entrada
  • O: output o salida

Como quiero habilitar una clavija de enchufe, el esquema variará ligeramente, ya que no usaré el interruptor y puedo conectar la línea directamente a la entrada. Por otro lado, y por motivos que desconozco, no tengo cableado en esta caja de conexiones, así que traigo la línea eléctrica mediante un cable que va a otro enchufe... En fin, queda todo así:

TIP! Juraría que me he rayado confundiendo los colores, pero en este caso el circuito propio es cerrado así que no importa demasiado si no eres maniático, ya que el circuito está conectado correctamente.

Ensamblaje

Como verás, me he hecho un pequeño soporte en 3D para guiar las conexiones y también una tapa para cubrir el hueco del enchufe. Además, simular las piezas en 3D, con medidas reales , te ayudará a distribuir bien el espacio y asegurarte de que tu solución se acopla correctamente:

Te dejo los modelos 3D en .stl para mandar a imprimir en software slicer.

Shelly-Plug_support_v1.stl

https://theroamingworkshop.cloud/demos/Shelly-Plug_support_v1.stl

Shelly-Plug_tapa_v1.stl

https://theroamingworkshop.cloud/demos/Shelly-Plug_tapa_v1.stl

Al final, queda todo así montado. No es el ajuste perfecto, pero me vale para cumplir su función.

Conexión a internet

Ahora veamos como traer a la vida al Shelly 1 y manejarlo localmente.

Al contrario que los Sonoff, Shelly nos lo pone mucho más fácil y solo hay que seguir su manual.

  1. Enchufa el Shelly 1 a la corriente mediante el cable con clavija macho.
  2. Se activará un AP (Access Point) o red Wi-Fi con una SSID del estilo "shelly1-01A3B4". Conéctate a esta red Wi-Fi mediante un smartphone o PC.
  3. Cuando te conectes, usa un navegador web para acceder a la IP 192.168.33.1 y accederás a la interfaz web de configuración del dispositivo.
  1. Una vez dentro, deberás configurar el dispositivo (en el menú Internet & Security) para que se conecte automáticamente a tu red Wi-Fi, así como también es recomendable que bloquees el acceso al dispositivo con usuario y contraseña, por lo que pudiera ocurrir...

Con esto ya podemos comunicarnos localmente con nuestro Shelly 1.

Uso de Shelly HTTP API

Para usar los comandos de la API HTTP deberás conocer la IP del dispositivo en la red local.

Averiguar IP mediante router

Puedes acceder al mapa de red de tu router, normalmente mediante la dirección http://192.168.1.1

Tanto la dirección como la contraseña de acceso deberían aparecer en una pegatina en tu router. Luego verás tu dispositivo con algún nombre tipo shelly1-XXXXXXXXXXXX:

Averiguar IP mediante nmap

Mediante un terminal, puedes usar el programa nmap para escanear tu red local.

  • Descárgalo si no lo tienes:
    sudo apt-get update
    sudo apt-get install nmap
  • Escanea tu red (con sudo aportará también la dirección MAC, útil por que la IP podría llegar a cambiar al reiniciar tu router)
    sudo nmap -v -sn 192.168.1.0/24

Enviar solicitudes HTTP al dispositivo

La API HTTP de Shelly viene documentada en su web dedicada:

https://shelly-api-docs.shelly.cloud/gen1/#common-http-api

Para poder comunicarte con el dispositivo necesitas enviar solicitudes HTTP mediante algún programa tipo Postman o mediante curl o wget en un terminal.

La solicitud se hará a la IP del dispositivo con:

$ curl -X GET http://192.168.1.XX/command

Si has definido usuario y contraseña, deberás ingresarlo también en la URL de esta manera o devolverá una respuesta "401 unauthorized":

$ curl -X GET http://user:[email protected]/command

Ahora veamos algunos casos concretos:

Información del dispositivo

http://[user]:[pass]@[ip]/status

  • curl

curl -X GET 'http://user:[email protected]/status

  • Respuesta
{"wifi_sta":{"connected":true,"ssid":"MYWIFINETWORK","ip":"192.168.1.XX","rssi":-70},"cloud":{"enabled":false,"connected":false},"mqtt":{"connected":false},"time":"19:30","unixtime":1699295403,"serial":1,"has_update":false,"mac":"A4CF12F407B1","cfg_changed_cnt":0,"actions_stats":{"skipped":0},"relays":[{"ison":false,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"source":"input"}],"meters":[{"power":0.00,"is_valid":true}],"inputs":[{"input":0,"event":"","event_cnt":0}],"ext_sensors":{},"ext_temperature":{},"ext_humidity":{},"update":{"status":"idle","has_update":false,"new_version":"20230913-112003/v1.14.0-gcb84623","old_version":"20230913-112003/v1.14.0-gcb84623"},"ram_total":51688,"ram_free":39164,"fs_size":233681,"fs_free":146333,"uptime":2679}

Encender/apagar (on/off)

http://[usr]:[pass]@[ip]/relay/0?turn=[on/off]

  • curl

curl -X GET http://user:[email protected]/relay/0?turn=on

  • Respuesta
{"ison":true,"has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"source":"http"}

El valor de 0 en la URL corresponde con el número del relay o interruptor interno del Shelly. En este caso solo hay uno, pero en caso del Shelly 2.5 tienes dos relays, por lo que puedes manejarlos individualmente cambiando este número.

Programador

http://[usr]:[pass]@[ip]/settings/relay/0?schedule_rules=[HHMM]-[0123456]-[on/off]

  • curl

curl -X GET http://user:[email protected]/settings/relay/0?schedule_rules=1945-0123456-on

  • Respuesta
{"name":"CALENTADOR","appliance_type":"General","ison":false,"has_timer":false,"default_state":"off","btn_type":"toggle","btn_reverse":0,"auto_on":0.00,"auto_off":0.00,"power":0.00,"schedule":true,"schedule_rules":["1945-0123456-on"]}

En este caso, en la URL se definen los siguientes parámetros de las reglas:

  • HHMM: hora y minuto que activan la regla
  • 0123456: los días de la semana en los que se produce la regla
  • on/off: estado que se produce al activarse la regla

De esta forma, para programar el encendido y apagado del dispositivo (excepto fines de semana), tendrías una solicitud de este estilo:

curl -X GET http://192.168.1.XX/settings/relay/0?schedule_rules=2300-01234-on,0700-01234-off

Obviamente, también podrás configurar las reglas de programación desde la interfaz web, o comprobar que los comandos han funcionado:

Y con eso estaría todo. Lánzate a llenar tu casa de discretos Shellys totalmente personalizables. Cualquier duda o comentario, al Twitter 🐦, gracias! (aunque visto lo de X, no sé yo lo que me durará...)

🐦 @RoamingWorkshop

Sonoff D1 Dimmer: configuración de API HTTP local (modo DIY) y ensamblaje con alargador para conexión exterior.

Tenía un Shelly Dimmer incrustado en la caja del enchufe en la pared, pero un buen día dejó de funcionar (probablemente por las altas temperaturas, soporta hasta 35ºC). Buscando un repuesto, vi que Sonoff había sacado su equivalente y por 1/3 del precio del Shelly.

Al final, lo barato sale caro, y es que resulta bastante más complicado de configurar que el Shelly Dimmer y tiene un mayor tamaño.

Después de muchas pruebas, y debido a la mala documentación, aquí explico cómo configurar el Sonoff D1 Dimmer para usar su API local y no depender de la aplicación e-weLink.

Además, por su tamaño, no encontrarás mucho sitio en tus cajas de conexiones para incrustar el Sonoff Dimmer, así que te doy la idea de montar un alargador para conectarlo de manera externa.

Requisitos

  • Sonoff D1 Dimmer.
  • Cable eléctrico de dos hilos (fase y neutro).
  • Clavija de enchufe macho.
  • Clavija de enchufe hembra.
  • Mando Sonoff RM-433 (muy recomendado).
  • Material para ensamblar una carcasa (impresora 3D, madera, etc).

Conexión eléctrica

Lo primero que necesitarás es conectar el D1 a la red de 220V de tu casa, según el esquema de montaje que nos facilitan en su manual:

https://sonoff.tech/wp-content/uploads/2021/03/%E8%AF%B4%E6%98%8E%E4%B9%A6-D1-V-1.1-20210305.pdf

El esquema de conexión anterior sigue más o menos la norma Europea:

  • Fase (positivo): negro, marrón o gris (en este caso rojo...)
  • Neutro (negativo): azul.

También te digo que el Shelly Dimmer es mucho más compacto y cabe sin problemas en las cajas que normalmente se usan para alojar los enchufes de pared. En este caso no, así que yo lo voy a conectar de forma externa mediante un cable alargador, y luego detallaré una sencilla carcasa para su ensamblaje.

TIP! Si no tienes mucha experiencia con la electricidad, más vale que investigues un poco y tomes todas las precauciones. No es agradable pegarse un calambrazo con un cable de la red doméstica. Si realizas la conexión de manera externa, como en este caso, no corres tanto peligro.

Por ahora con esto ya podemos hacerlo funcionar.

Conexión a internet

Ahora viene lo complicado, y es que en tanta carcasa se ve que no cabía un simple botón para las habituales tareas de encender/apagar/restaurar.

Si tienes suerte, tu Sonoff no vendrá preconfigurado y podrás conectarte a él de primeras. Si viene preconfigurado, posiblemente porque se haya comprobado su funcionamiento en otra red, el dispositivo ya no es detectable ni si quiera mediante la app e-weLink, a menos que estes en la red donde se configuró.

Para reconocerlo, se deben restaurar los valores de fábrica y para ello tenemos dos opciones:

  • Restaurarlo mediante app e-weLink desde la red donde se configuró (muy poco probable que tengas acceso a ella).
  • Restaurarlo mediante el mando Sonoff RM-433 (al final acabarás teniendo que comprarte este accesorio extra).

Emparejar mando Sonoff RM-433

Al final, el humilde precio del D1 se ha duplicado por la necesidad de comprar el mando RM-433, pero bueno, su precio tampoco es descabellado. Aquí su manual:

https://sonoff.tech/wp-content/uploads/2021/03/%E8%AF%B4%E6%98%8E%E4%B9%A6-RM433-V1.1-20210305.pdf

Lo primero que debemos hacer es emparejar el mando con el D1:

  1. Conectamos el D1 a un enchufe.
  2. Mantenemos el botón 7 pulsado durante unos 5 segundos, hasta que se oiga un pitido (esto elimina la asignación de radiofrecuencia anterior).
  3. Desenchufamos y enchufamos el D1 para reiniciarlo.
  4. Pulsamos cualquier botón del mando para que se asigne al D1.
  5. Se oirá un pitido y el mando queda emparejado, pudiendo manejarse el D1 con él.

Restaurar red WIFI

Ahora necesitamos restaurar también la red asignada al D1.

Para ello, mantenemos pulsado el botón 8 durante unos 5 segundos, o más bien, hasta que veas que empieza a parpadear de la siguiente manera:

Modo "respiración" o breath. Dos pulsos rápidos, uno lento.

Has eliminado la red anterior. Ahora hay que ponerlo en modo emparejamiento.

Volvemos a pulsar el botón 8 durante unos 5 segundos, o más bien, hasta que veas que empieza a parpadear constantemente:

Modo emparejamiento. Pulsos constantes.

De esta forma el dispositivo inicia un Punto de Acceso WIFI (WIFI AP) que tendrá un nombre en la forma ITEAD-XXXXXXXXXX.

Emparejar con e-weLink

Ahora, si quieres el camino fácil, deberás descargarte la aplicación e-weLink y pulsando el botón emparejamiento rápido tendrás tu D1 disponible para usar mediante esta app.

Emparejar en modo DIY

Pero ya sabrás que a mí me gusta complicarme y quiero habilitar el modo DIY (Do It Yourself) para poder acceder a la red del dispositivo y manejarlo mediante los comando de la API HTTP desde mi propia web app.

Para esto, buscamos la red ITEAD-XXXXXXXXXX creada por el dispositivo y nos conectamos introduciendo la contraseña 12345678.

Ahora abrimos un navegador web y accedemos a la dirección http://10.10.7.1 donde veremos las siguientes pantallas.

Aquí introduciremos el nombre (SSID) y la contraseña de nuestra red WIFI, y el dispositivo quedará ya vinculado a ella.

Ensamblaje

Antes de entrar en el detalle del manejo de la API HTTP, te dejo un diseño de carcasa impresa en 3D para evitar que se queden los cables y las conexiones al aire.

Cuenta con dos piezas de PLA (base y tapa) para poder atornillarlas entre sí y las puedes descargar desde mi servidor:

https://theroamingworkshop.cloud/demos/D1case_v1_base.stl

https://theroamingworkshop.cloud/demos/D1case_v1_top.stl

Y aquí puedes previsualizarla:

Uso de D1 HTTP API

Para usar los comandos de la API HTTP deberás conocer la IP del dispositivo en la red local.

Averiguar IP mediante router

Puedes acceder al mapa de red de tu router, normalmente mediante la dirección http://192.168.1.1

Tanto la dirección como la contraseña de acceso deberían aparecer en una pegatina en tu router. Luego verás tu dispositivo con algún nombre tipo ESP-XXXX derivado del dispositivo WIFI que porta (aquí yo ya lo he renombrado):

Averiguar IP mediante nmap

Mediante un terminal, puedes usar el programa nmap para escanear tu red local.

  • Descárgalo si no lo tienes:
    sudo apt-get update
    sudo apt-get install nmap
  • Escanea tu red (con sudo aportará también la dirección MAC, útil por que la IP podría llegar a cambiar al reiniciar tu router)
    sudo nmap -v -sn 192.168.1.0/24

Enviar solicitudes HTTP al dispositivo

La API HTTP del Sonoff D1 viene documentada en su web:

https://sonoff.tech/sonoff-diy-developer-documentation-d1-http-api/

Para poder comunicarte con el dispositivo necesitas enviar solicitudes HTTP mediante algún programa tipo Postman o mediante curl o wget en un terminal.

La solicitud se hará a la IP del dispositivo, en el puerto por defecto 8081, y además deberemos incluir la id del dispositivo en el cuerpo o body de la solicitud (la id coincide con el código XXXXXXXXXX que tenía la red WIFI ITEAD-XXXXXXXXXX).

Veamos algunos casos usando curl y Postman.

Información del dispositivo

http://[ip]:[port]/zeroconf/info

  • curl

curl -X POST 'http://192.168.1.34:8081/zeroconf/info' --data-raw '{"deviceid": "XXXXXXXXXX","data": {}}'

  • Postman
  • Respuesta
{
    "seq": 6,
    "error": 0,
    "data": {
        "deviceid": "XXXXXXXXXX",
        "switch": "off",
        "startup": "off",
        "brightness": 60,
        "brightMin": 0,
        "brightMax": 100,
        "mode": 0,
        "otaUnlock": false,
        "fwVersion": "3.5.0",
        "ssid": "TU_RED_WIFI",
        "bssid": "XX:XX:XX:XX:XX:XX",
        "signalStrength": -58
    }
}

Encender/apagar (on/off)

http://[ip]:[port]/zeroconf/switch

  • curl

curl -X POST 'http://192.168.1.34:8081/zeroconf/switch' --data-raw '{"deviceid": "XXXXXXXXXX","data": {"switch":"on"}}'

  • Postman
  • Respuesta
{
    "seq": 9,
    "error": 0
}

Ajuste del brillo

http://[ip]:[port]/zeroconf/dimmable

  • curl

curl -X POST 'http://192.168.1.34:8081/zeroconf/dimmable' --data-raw '{"deviceid": "XXXXXXXXXX","data": {"switch":"on","brightness":50,"mode":0,"brightmin":0,"brightmax":100}}'

  • Postman
  • Respuesta
{
    "seq": 14,
    "error": 0
}

Y con esto ya puedes programar tu propia aplicación y controlar tu D1 a tu gusto de forma totalmente privada. Espero que te resulte útil, pero si te surgen dudas o comentarios, no dudes dejarlos en Twitter 🐦!

🐦 @RoamingWorkshop