Como obtener el numero llamante con Arduino


CLI, también conocido como Identificador de llamadas y entrega de números de llamada (CND), es un servicio ofrecido por el proveedor de servicios telefónicos a los clientes para obtener el número de parte que llama y la fecha / hora de la llamada. La activación del servicio y el formato de información de la CLI son diferentes de un operador de red telefónica a otro.

Para decodificar la modulación FSK del número llamante (Caller ID) de forma sencilla con Arduino, la forma más práctica es usar un módulo decodificador dedicado como el HT9032D que soporta la decodificación FSK Bell 202, que es el estándar usado para enviar la información del número llamante en sistemas analógicos telefónicos. Este módulo se conecta entre la línea telefónica (RJ11) y el Arduino, que recibe los datos ya demodulados en forma digital serial para procesarlos y mostrar el número en una pantalla LCD o enviar la información por puerto serie.

Hardware mínimo

  • Arduino (cualquier modelo básico como Arduino Uno o Nano es suficiente).
  • Módulo demodulador FSK Bell 202, típicamente el HT9032D:
    • Este módulo convierte la señal FSK analógica de la línea telefónica en una señal digital serial que el Arduino puede leer.
  • Aislamiento y acoplamiento a línea telefónica:
    • Un adaptador o un transformador de audio para aislar eléctricamente la línea telefónica del Arduino y proteger el equipo.
    • Resistencias y condensadores para el acoplamiento y filtrado según el esquema del módulo HT9032D.
  • Fuente de alimentación estable para Arduino y el módulo.

Opcionales (pero recomendados)

  • Pantalla LCD o display serial para mostrar el número llamante.
  • Cables y conectores RJ11 para conectar la línea telefónica al módulo demodulador.

Resumen de los componentes:

ComponenteFunción
Arduino Uno/NanoProcesa la señal digital decodificada
Módulo HT9032DDemodula la señal FSK analógica
Aislamiento (transformador)Protección y acoplamiento a la línea telefónica
Cables RJ11Conexión con línea telefónica

Este conjunto es el hardware mínimo básico para un sistema funcional de decodificación de Caller ID FSK con Arduino sin desarrollar desde cero la parte de demodulación FSK, lo que implicaría más componentes analógicos y circuitos complejos.

El HT9032D es un circuito integrado específicamente diseñado para la decodificación de señales FSK Bell 202, que es el esquema de modulación utilizado en las señales de Caller ID en líneas telefónicas analógicas. Funciones principales del HT9032D:

  • Demodula la señal FSK recibida desde la línea telefónica, convirtiendo las variaciones de frecuencia en datos digitales seriales.
  • Soporta la decodificación del protocolo estándar Bell 202 para Caller ID.
  • Proporciona una salida digital compatible con microcontroladores como Arduino para facilitar la lectura de los datos.
  • Incluye control y filtrado interno para separar la información útil relacionada con el número llamante (MDMF).

Desde la hoja de características del fabricante Holtek podemos ver un ejemplo típico de aplicación:

Vemos en el circuito como la señal de la línea telefònica en lugar de usar un transformador usa dos condensadores de 0.2microFaradios cuyos extremos van acoplados a un puente de diodos y su salida mediante un divisor de tensión es la que usaremos en el microcontrolador como RING-SENSE. Además de la línea telefónica también directamente van sendas resistencias de 200k y condensadores de 0.01microFaradios hacia los pines TIP y RING del. Respecto a la parte superior derecha, es solo opcional y es la parte de alimentación de 5V DC pues HT1050 es simplemente un regulador de 5v del propio fabricante.

Ojo porque el esquema entregado por el fabricante anterior presenta varias imprecisiones respecto al terminal X2 y las conexiones del microcontrolador, por lo que es mejor usar el siguiente esquema:

Es interesante destacar como la señal de la línea telefònica en lugar de usar un transformador usa dos condensadores de 0.2microFaradios cuyos extremos van acoplados a un puente de diodos y su salida mediante un divisor de tensión es la que usaremos en el microcontrolador como RING-SENSE.

Asimismo de la línea telefónica directamente también mediante sendas resistencias de 200k y condensadores de 0.01microFaradios son las señales de TIP y RING que van conectados directamente al chip.

El circuito se complementa con un circuito resonante conectados a los terminales X1 y X2 (ojo porque en el esquema del fabricante han obviado el terminal X2). Este circuito esta conectado al chip por un cristal del cuarzo de 3.58Mhz, una resistencia de 10M en paralelo y dos pequeños condensadores de 33pF conectados a masa. Por cierto, la señal PDWN se obtiene del chip derivándola también a masa con una resistencia de 22k

Por ultimo la salida de DATA del chip corresponde a la salida DOUT que usaremos en el microcontrolador.

En la imagen podemos ver el circuito montado, aunque si lo deseamos dado el numero reducido de componentes ( 7 resistencia s y 7 condensadores , el puente, el cristal y el chip HT9032D) también podemos montar en una placa de prototipos.

Este es el detalle de los componentes:

  • C1, C3 : 0.01μF / 400V Mylar Capacitor
  • C2 : 0.1μF / 50V Mylar Capacitor
  • C4, C5 : 33pF Ceramic Capacitor
  • C6, C7 : 0.22μF / 400V Mylar Capacitor
  • D1 : 2W10 Bridge rectifier
  • R1, R2 : 200KΩ
  • R3 : 22KΩ
  • R4 : 10MΩ
  • R5 : 470KΩ
  • R6 : 18KΩ
  • R7 : 15KΩ
  • U1 : HT9032D (DIP-8)
  • Y1 : 3.58MHz (HC49) Crystal
  • J1 : Molex 52018-6616 or equivalent RJ11 / 6P6C PCB socket
  • J2 : 5-pin 2.54mm Pin header

Como vemos pues en resumen , estas son las fases para obtener el numero llamante:

  • Utilizar un módulo HT9032D (o similar) para demodular la señal FSK de la línea telefónica.
  • Conectar el pin de salida digital (DATA OUT) del módulo HT9032D a una entrada RX del Arduino.
  • El Arduino lee la señal digital, que sigue el protocolo Bell 202 (1200 baud, mark 1200Hz, space 2200Hz).
  • Procesar la trama de datos MDMF (Multiple Data Message Format) para extraer el número llamante, fecha y hora.
  • Opcionalmente mostrar esos datos en un display LCD o enviarlos a un ordenador.

Ventajas de esta configuración:

  • No se requiere implementar desde cero la demodulación FSK (que es compleja).
  • El HT9032D está específicamente diseñado para este propósito.
  • Hay ejemplos de códigos para Arduino que leen los datos y los decodifican fácilmente.

Ejemplo de uso

Se pueden encontrar esquemas y código Arduino en proyectos como «Arduino Telephone Caller ID Unit» con HT9032D, donde se conecta la línea telefónica al módulo y éste al Arduino, y el código lee la información serial codificada en FSK ya demodulada por el módulo.

Esta solución es sencilla para un usuario Arduino que desea mostrar el número llamante sin tener que desarrollar un demodulador FSK desde cero, que sería bastante más complejo.

Circuito auxiliar

Este seria el montaje final:

Por tanto, para un método sencillo de decodificar la modulación FSK del número llamante con Arduino, se recomienda usar un módulo HT9032D con Arduino para recibir datos seriales decodificados y procesar la trama Caller ID. Para decodificar FSK Caller ID con Arduino, el hardware mínimo que se recomienda es el siguiente:

Aplicación típica

En proyectos con Arduino para decodificar el número llamante, el HT9032D se conecta directamente a la línea telefónica (con el debido aislamiento), y su salida digital se conecta a una entrada del Arduino. El Arduino luego interpreta los datos seriales para extraer y mostrar el número.

Codigo arduino con comentarios

/*****************************************************************************
 Copyright 2021 Dilshan R Jayakody.
 
*/

#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>

// Crear interfaz serial para callerID en el pin 10 (RX) y 11 (TX).
#define CALLER_ID_RX  10
#define CaLLER_ID_TX  11

#define LCD_RS      2
#define LCD_EN      3
#define LCD_DATA4   4
#define LCD_DATA5   5
#define LCD_DATA6   6
#define LCD_DATA7   7

#define LCD_BACKLED         12
#define LCD_CALL_ALERT_LED  13

#define RING_DET_PIN  8
#define CLI_PWDN_PIN  9

#define MDMF_HEADER   0x80
#define MDMF_PARAM_TIME   0x01
#define MDMF_PARAM_CID    0x02
#define MDMF_PARAM_NAME   0x07 

#define EEPROM_NUM_OFFSET   1
#define EEPROM_TIME_OFFSET  20

enum CID_STATE {CID_IDLE, CID_SYNC, CID_PACKET, CID_MESSAGE, CID_END};
enum CID_MSG_STATE {CIDMSG_HEADER, CIDMSG_LEN, CIDMSG_DATA};

SoftwareSerial callerID(CALLER_ID_RX, CaLLER_ID_TX);
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_DATA4, LCD_DATA5, LCD_DATA6, LCD_DATA7);

enum CID_STATE cidState;
enum CID_MSG_STATE cidMsg;

unsigned char tempCount, cidData, packetLen, currLen;
unsigned char msgType, msgLen, msgCurrPos;
unsigned long delayStart, watchdogDelay, recallTimeout;
unsigned char lineIdleCounter, watchdogSec;
unsigned char buttonState, tempInfoPos, recall;

char msgData[16];

char tBufferNumber[16];
char tBufferDateTime[9];

void programLastNumber()
{
  unsigned char memPos;

  // Escribir la última información del identificador de llamada en el buffer temporal.
  // Este buffer temporal se usa para evitar problemas de sincronización en el flujo serial (debido a operaciones lentas de escritura en EEPROM). 
  for(memPos = 0; memPos < 16; memPos++)
  {
    tBufferNumber[memPos] = msgData[memPos];
  }
}

void programLastCallTime()
{
  unsigned char memPos;

  // Escribir fecha/hora relacionada con la última llamada en el buffer temporal

En resumen lo ideal para obtener el numero llamante es usar un circuito especializado para Caller ID FSK, evitando tener que hacer una demodulación por software compleja. Eso simplifica el diseño y reduce componentes externos. Además está ampliamente probado y documentado en proyectos de Arduino y telefonía analógica.

Por lo tanto, el HT9032D es el chip indicado para soportar la decodificación FSK Bell 202 del número llamante (Caller ID) en proyectos Arduino con línea telefónica analógica.

Fuente: https://www.instructables.com/Arduino-Telephone-Caller-ID-Unit/

Como empezar con home assistant: el servidor


Home Assistant se presenta como una plataforma de domótica de código abierto diseñada para centralizar el control y la gestión de dispositivos inteligentes en el hogar, independientemente de la marca o protocolo que utilicen. Uno de sus aspectos más importantes es que funciona localmente dentro de la red doméstica, lo que garantiza la privacidad y el control total del usuario sin depender de servicios en la nube y evitando posibles filtraciones de información. Esta característica lo convierte en una opción muy atractiva para quienes valoran la seguridad de sus datos y desean mantener su hogar inteligente autónomo y confiable.

La plataforma es compatible con una enorme variedad de dispositivos, abarcando desde bombillas, termostatos y cámaras, hasta sensores, persianas y electrodomésticos, integrando tecnologías como Zigbee, Z-Wave, Wi-Fi o Matter, y con soporte para asistentes de voz populares como Alexa y Google Home.

Dispositivos compatibles con Home Assistant

Para ampliar tu instalación es recomendable buscar dispositivos con soporte nativo en Home Assistant o vía Zigbee2MQTT o Z-Wave, además de aprovechar la integración oficial de Alexa para control por voz y sincronización con dispositivos compatibles.

Así, Home Assistant puede centralizar una gran cantidad de dispositivos compatibles con Alexa y otras marcas, permitiendo gestión local sin depender siempre de la nube y mayor capacidad para automatizaciones avanzadas.​

Algunos de los dispositivos compatibles:

  • Home Assistant puede integrar dispositivos de muchas marcas y tecnologías: Zigbee, Z-Wave, WiFi, Bluetooth, Matter, etc. Algunos ejemplos populares incluyen Sonoff, Aqara (sensores, interruptores), IKEA Tradfri (bombillas y enchufes), Tuya, Moes, Shelly, Nanoleaf, entre muchos otros.
  • Dispositivos de domótica como sensores de movimiento, sensores de puerta/ventana, cámaras, termostatos, persianas, enchufes inteligentes, y más pueden ser gestionados desde la plataforma.
  • Existen integraciones oficiales y comunitarias para cientos o miles de dispositivos, lo que permite un control local o en la nube según la preferencia.

También es posible la integración de HA con Alexa:

  • Home Assistant puede integrarse con Alexa para aprovechar sus capacidades de control por voz y sincronizar dispositivos.
  • Sin embargo, Alexa no expone todos sus dispositivos directamente a Home Assistant, sino que Home Assistant puede exponer algunos dispositivos para controlarlos por Alexa.
  • Muchos dispositivos que funcionan en Alexa también tienen integración nativa o vía complementos en Home Assistant, por lo que se pueden controlar ambos sistemas en paralelo y hacer automatizaciones más complejas en Home Assistant.

En definitiva y a modo de resumen estos son los tipos de dispositivos comunes integrables (además de Philips Hue) mas comunes:

  • Bombillas inteligentes (IKEA Tradfri, TP-Link Tapo, Govee, LIFX)
  • Enchufes y relés inteligentes (Aqara, Shelly, Sonoff)
  • Sensores de movimiento, humedad, temperatura (Aqara, Sonoff)
  • Termostatos inteligentes (Ecobee, Nest, Honeywell)
  • Cámaras IP (con integración ONVIF o marcas compatibles)
  • Cerraduras electrónicas, persianas y motores de cortinas
  • Sistemas de climatización (aire acondicionado y calefacción)
  • Altavoces inteligentes y dispositivos multimedia (Alexa, Google Home, Sonos)

El servidor HA

Y ahora que hemos hablado de los dispositivos domóticos compatibles toca hablar de una pieza clave sin la cual no es posible HA: el servidor. Para empezar con Home Assistant, la elección del servidor depende de varios factores como la escala del proyecto, el presupuesto, el rendimiento deseado y la facilidad de mantenimiento.

Algunas opciones comunes para el servidor Home Assistant:

  • Raspberry Pi (especialmente la Pi 4 o Pi 5):Es la opción más popular para principiantes. Su tamaño compacto, bajo consumo eléctrico y suficiente potencia para la mayoría de las instalaciones de hogar hacen que sea ideal para empezar. Home Assistant OS se puede instalar fácilmente y la comunidad ofrece abundante soporte para Raspberry Pi. Asimismo, puedes utilizar almacenamiento USB o SSD para mejorar la velocidad y confiabilidad frente a la tarjeta SD clásica. Sin embargo, para proyectos muy grandes o con muchas integraciones intensivas, puede quedar limitada. Ademas el precio no es precisamente su gran baza pues la version 5 ronda los 100€ sin fuente ni SD , aunque hay que reconocer que integra un hardware muy a la altura ( procesador quad-core a 2.4GHz, 64-bit Arm Cortex-A76,GPU VideoCore VII, con soporte OpenGL ES 3.1 y Vulkan 1.2,Dual-band 802.11ac Wi-Fi,Bluetooth 5.0 / Bluetooth Low Energy (BLE),microSD card slot, con soporte para el modo de alta velocidad SDR104 y 2 puertos USB 3.0, cada uno soportando hasta 5Gbps simultáneamente).
raspberry pi 5
  • PC o Mini PC dedicado: Ofrece una potencia de procesamiento superior, ideal para instalaciones grandes o si quieres correr otros servicios junto a Home Assistant, como servidores multimedia, bases de datos o máquinas virtuales. Un mini PC con un procesador Intel i5/i7 o AMD Ryzen, 8 GB o más de RAM y SSD es recomendado para un rendimiento fluido y margen para ampliaciones futuras. También evita problemas típicos de la Raspberry Pi como el desgaste de tarjetas SD y tiene mejor conectividad de red y USB.​ Hoy en dia se pueden adquirir minipc’s por un precio razonable de 139€ (por ejemplo el BMAX Mini PC 8 GB LPDDR4 128 GB eMMC W-11 Pro B1Pro Gemini Lake N4000 hasta 2,6 GHz con pantalla Dual Admite 4K HDMI, WiFi 2,4G/5G, Bluetooth 4.2 PC doméstica Computadora de Oficina PC).
  • Servidor dedicado/Home Assistant Box (como Home Assistant Yellow o Green): Son dispositivos optimizados y diseñados específicamente para ejecutar Home Assistant con un buen balance entre rendimiento, facilidad de uso y estabilidad. Son plug-and-play, pero suelen tener un coste mayor comparado a Raspberry Pi o PCs reutilizados. Son una opción cómoda si prefieres evitar configuraciones manuales complejas y desde luego es la opción mas económica sobre todo si se adquiere en mercados orientales.​

A continuación un resumen comparativo de los pros y contras de cada opción:

ParámetroRaspberry PiPC/Mini PC dedicadoServidor dedicado Home Assistant Box
PotenciaModerada (ideal proyectos pequeños y medianos)Alta (proyectos grandes, multiuso)Media-alta (optimizado para HA)
Consumo energéticoBajoMedio (depende del equipo)Bajo-medio
Facilidad de usoAlta (gran comunidad y documentación)Media (requiere conocimientos)Muy alta (plug-and-play)
ConfiabilidadBuena, aunque tarjeta SD puede desgastarseMuy alta (SSD, hardware robusto)Alta, hardware testeado
PrecioModeradoVariable (puede ser alto)Moderado a bajo

El análisis sobre consumo eléctrico y precio entre Raspberry Pi, Mini PC y Home Assistant Box muestra lo siguiente:

Consumo eléctrico

  • Raspberry Pi 4/5: Consume alrededor de 5 a 7 vatios en uso típico, ligeramente más si se usa con SSD externo.
  • Mini PC de bajo consumo (ej. Intel N100): Consume aproximadamente entre 6 y 15 vatios, dependiendo del modelo y carga. Por ejemplo, el Intel N100 tiene un TDP oficial de 6W, pero el consumo real puede estar cerca de 10-15W promedio.
  • Home Assistant Box (como Home Assistant Yellow): Suelen tener un consumo similar o incluso inferior al de un Mini PC, diseñado específicamente para eficiencia. El consumo típico se sitúa en torno a 5-10 vatios.

Precio

  • Raspberry Pi 5 con accesorios: El costo puede superar los 160€ considerando placa, fuente, caja, tarjeta SD o SSD.
  • Mini PC de gama media: Un modelo como el Beelink Mini S12 Pro está sobre los 180-200€, pero incluye procesador más potente, 16GB RAM y SSD rápido.
  • Home Assistant Box: Puede ser más económico que una Raspberry Pi 5 completa con accesorios. Por ejemplo, Home Assistant Yellow o Green puede costar menos y venir optimizado para la función, aunque con menor capacidad de expansión que un Mini PC.

Aunque el servidor Home Assistant Box puede parecer más económico en compra inicial que una Raspberry Pi equipada descatalogada, esta última es muy popular por su versatilidad y comunidad amplia. El Mini PC ofrece mejor potencia y almacenamiento rápido, con un consumo eléctrico razonable, pero a un coste ligeramente mayor. En eficiencia energética, Home Assistant Box y Raspberry Pi están bastante igualados, ambos con consumos muy bajos ideales para estar siempre encendidos.

Así, el Home Assistant Box puede ser la opción más económica y eficiente en consumo si la prioridad es un equipo dedicado exclusivo para Home Assistant, mientras que Raspberry Pi o Mini PC proporcionan más flexibilidad y potencia según necesidades futuras y presupuesto.​

Recomendación

Lo verdaderamente poderoso aparte de la privacidad y carácter abierto radica en su capacidad para personalizar automatizaciones avanzadas, permitiendo que diferentes dispositivos interactúen entre sí según condiciones específicas, horarios o eventos, facilitando la vida diaria y optimizando el consumo energético. Además, la interfaz amigable y multiplataforma facilita su manejo desde dispositivos móviles o navegadores web, adaptándose a distintos niveles de usuario

Para empezar de forma sencilla y económica si ya cuentas con el hw, la Raspberry Pi 4 o 5 es ideal y suficiente. Si tu proyecto crece o quieres usar otras aplicaciones en el mismo equipo, un mini PC dedicado con Linux o Proxmox será mejor. Si prefieres una solución sencilla y optimizada, un servidor dedicado Home Assistant Box es recomendado.

Así, la elección depende de tus necesidades de rendimiento, presupuesto y el grado de control o simplicidad que busques.​