Un timbre de puerta por Telegram

En mi inagotable afán de hacer complicado lo fácil, e imposible lo complicado, se me ha ocurrido que será utilísimo tener un timbre de puerta que, además de hacer algún soniquete a lo tradicional, avise por Telegram.

Aunque unas primeras búsquedas por san Google parecen indicar que conectar con Telegram para largar un mensaje es algo complicado, nada más lejos de la realidad. De hecho, es la simplicidad misma, y basta un programita de cuatro líneas.

Lo primero que necesitamos es un bot. Esto se hace hablando con el BotFather. A cambio del comando /newbot y responder a dos sencillas preguntas, nos suministará un token para acceder a la API.

Por otra parte, el timbre tiene que ser reconocible como tal y, para ello, nada mejor que instalar un pulsador como los de toda la vida. Ninguna norma dice que un pulsador que se hizo para 230V no pueda funcionar a 3 y un poquito. He cableado este pulsador entre los pines GND y 18 del conector GPIO. ¿Y por qué el 18? Bueno, ¿y por qué no?. Está cerca de GND y así puedo usar una sola carcasa de conector para los dos.

Total, que solo falta un programita que vigile el pin 18 y, si cambia de estado, largue un Telegram.

Paradójicamente, de esto lo complicado es largar el Telegram, y solo por un motivo: Para hacerlo, hay que encontrar el identificador de nuestra cuenta, de nuestro grupo o de dondequiera que sea que queramos mandar las notificaciones. Esto, que parece una chorrada, resulta tan enrevesado de hacer con la propia API que existe un bot, llamado get id, cuyo propósito en la vida es solamente obtener estos identificadores.

Total, que ya lo tenemos todo. Y este es un programita, con datos evidentemente ficticios, que funciona sin más problema que poner los reales y tener instalado Python 3 y las librerías adecuadas:

#!/usr/bin/python3

# Datos averiguados gracias a get_id:
# Hello tumismo
# Your Chat ID = xyzt
# User Name = gniapas238

# Your group Chat ID : -abcde
# Title : Casa

import RPi.GPIO as GPIO
import time
import requests
import logging
import json

telegramToken='el token va aqui'
telegramAPI = "https://api.telegram.org/bot{}/".format(telegramToken)

def mensajear():
 url = telegramAPI + "sendMessage?text={}&chat_id={}".format('Llaman a la puerta', '-abcde')
 resultado=requests.post(url)
 return

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)

logging.basicConfig(filename='/var/log/puerta.log',format='%(asctime)s %(message)s',level=logging.DEBUG)

while True:
 input_state = GPIO.input(18)
 if input_state == False:
  logging.warning('Llamada al timbre')
  time.sleep(0.2)
  # Dar la lata por Telegram
  mensajear()
 time.sleep(0.1)

En el bucle he introducido unos retardos, uno para eliminar rebotes y el otro para dejar que la CPU de la incansable Raspberry Pi descanse. Para un procesador ni medio moderno, una décima de segundo son vacaciones.

2 opiniones en “Un timbre de puerta por Telegram”

  1. Hola,
    Muy interesante este artículo.
    He dado con tu web después de mucho buscar por la red, el caso es que tengo un proyecto en mente: hacer un timbre «casero» de manera que aparte de comunicar con Telegram para enviar mensaje de que están llamando, mi idea es conectar La RaspberryPi al timbre de la casa (quitar el de «serie») de manera que pueda también personalizar el sonido que emite (que reproduzca archivos mp3 por ejemplo).
    Alguna web he encontrado que explica un poco esto pero no demasiado bien, ¿podrías hacer una entrada explicando como se puede hacer lo del timbre con sonido personalizado? Gracias.

  2. Muchas gracias, era justamente lo que buscaba.

    Me ha dado faena con el tema de las librerías que eran y otras configuraciones, pero me funciona perfectamente.

Responder a Juan Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *