Subido por Isabel Cuillavi

telegram nodemcu

Anuncio
TELEGRAM Y RAPSBERRY
Referencias:







Telegram Bot with Raspberry PI:
https://www.hackster.io/Salman_faris_vp/telegram-bot-with-raspberry-pi-f373da
Creando bots para Telegram para automatizar respuestas:
https://www.hackster.io/Salman_faris_vp/telegram-bot-with-raspberry-pi-f373da
Como ejecutar un program automáticamente al arrancar la Raspberry PI:
https://nideaderedes.urlansoft.com/2013/12/20/como-ejecutar-un-programa-automaticamente-al-arrancar-la-raspberry-pi/
1. Instalar Telegram en su móvil
2. Telegram tiene un bot para crear bots llamado BotFather, buscar en Telegram y
pulsar sobre éste para iniciar una conversación.
3. Iniciar BotFather con /start
4. Crear un bot en BotFather enviando el mensaje: /newbot
5. A continuación BotFather preguntará:
* El nombre visible del bot: Cascabel
* El nombre público del bot, éste tiene que terminar en bot o _bot, como pasa con
los dominios es posible que el nombre ya esté registrado: Cascabeltelegrambot
6. Si todo ha salido bien devolverá un token que usaremos para interactuar con nuestro
bot, por ejemplo:
342025387:AAHVGuFiL2z3uX9M5e9hc9OXZI-SUbS8GUc (este token es inventado)
7. Instalar en la Raspberry "Python Package Index":
sudo apt-get install python-pip
8. Instalar "telepot":
sudo pip install telepot
9. Obtener el Código Python:
git clone https://github.com/salmanfarisvp/TelegramBot.git
Con el anterior comando, se crea el directorio TelegramBot.
Dentro de ese directorio se encuentra el archivo telegrambot.py:
import
import
import
import
import
import
sys
time
random
datetime
telepot
RPi.GPIO as GPIO
#Encendido y apagado de LED en el pin físico 40
def on(pin):
GPIO.output(pin,GPIO.HIGH)
return
def off(pin):
GPIO.output(pin,GPIO.LOW)
return
# Sistema de numeración de la Raspberry Pi
GPIO.setmode(GPIO.BOARD)
# Configurar pin 40 como salida
GPIO.setup(40, GPIO.OUT)
def handle(msg):
chat_id = msg['chat']['id']
command = msg['text']
print 'Got command: %s' % command
if command == 'On':
bot.sendMessage(chat_id, on(40))
elif command =='Off':
bot.sendMessage(chat_id, off(40))
bot = telepot.Bot('342025387:AAHVGuFiL2z3uX9M5e9hc9OXZI-SUbS8GUc')
bot.message_loop(handle)
print 'I am listening...'
while 1:
time.sleep(10)
Ejecutar telegrambot.py:
python telegrambot.py
Iniciamos nuestro bot: Cascabel
/start
Enviamos las palabras On y Off
CREAR PROCESO, VERLO Y ELIMINARLO
Crear: Python telegrambot.py &
Ver: ps aux
Eliminar: pkill -f telegrambot.py
EJECUTAR UN PROGRAMA AL ARRANCAR LA RASPBERRY
El primer paso es crear un script que se encargue de arrancar nuestro software de manera automática. En
nuestro caso era el script detector-init (para poner en marcha automáticamente un sensor de presencia). Para
crearlo hacemos:
sudo nano /etc/init.d/detector-init
Y copiamos el siguiente contenido:
#! /bin/sh
# /etc/init.d/detector-init
### BEGIN INIT INFO
# Provides:
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:
# Short-Description:
# Description:
### END INIT INFO
detector-init
$all
$remote_fs $syslog
2 3 4 5
0 1 6
Script de ejemplo de arranque automático
Script para arrancar el detector de presencia
# Dependiendo de los parámetros que se le pasen al programa se usa una opción u otra
case "$1" in
start)
echo "Arrancando detector-init"
# Aquí hay que poner el programa que quieras arrancar automáticamente
/usr/bin/python /home/pi/telegrambot.py
;;
stop)
echo "Deteniendo detector-init"
;;
*)
echo "Modo de uso: /etc/init.d/detector-init {start|stop}"
exit 1
;;
esac
exit 0
Un par de aclaraciones:


# Required-Start: $all – Con esto indicamos al sistema que primero cargue todos los demás módulos.
# Default-Start: 2 3 4 5 – Aquí le decimos al sistema en qué run levels queremos que se ponga en marcha
nuestro script.
Ahora hacemos el fichero ejecutable:
sudo chmod 755 /etc/init.d/detector-init
Comprobamos que todo se ejecuta correctamente:
sudo /etc/init.d/detector-init start
Y por último activamos el arranque automático:
sudo update-rc.d detector-init defaults
Cuando se reinicie la Raspberry debería empezar a funcionar el programa de forma automática. Podemos
comprobarlo haciendo:
ps aux | grep "telegrambot.py"
(Porque detector.py es el programa que pone en marcha el script detector-init).
Como llamamos en Telegram a /on y /off:
PRUEBA DEL TOKEN
En la consola de la Raspberry:
python
import telepot
bot = telepot.Bot('342025387:AAHVGuFiL2z3uX9M5e9hc9OXZI-SUbS8GUc')
bot.getMe()
La respuesta es:
username:
Cascabeltelegrambot
first_name: Cascabel
id:
342025387
TELEGRAM Y NODEMCU
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#define BOTtoken "476599401:AAHejGzJ994y8FhsJUu98-niapEMmLizU5g"
#define LED_BUILTIN 2
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
String id, text;
unsigned long tiempo;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, 1);
WiFi.mode(WIFI_STA);
connect();
}
void loop(){
if (millis() - tiempo > 1000){
connect();
readTel();
tiempo = millis();
}
}
void connect(){
if (WiFi.status() != WL_CONNECTED){
WiFi.begin("COMTECO-95084648", "DNGEL24641");
delay(2000);
}
}
void readTel(){
int newmsg = bot.getUpdates(bot.last_message_received + 1);
for (int i = 0; i < newmsg; i++){
id = bot.messages[i].chat_id;
text = bot.messages[i].text;
text.toUpperCase();
if (text.indexOf("ON") > -1){
digitalWrite(LED_BUILTIN, 0);
bot.sendMessage(id, "LED ON", "");
}
else if (text.indexOf("OFF") > -1){
digitalWrite(LED_BUILTIN, 1);
bot.sendMessage(id, "LED OFF", "");
}
else if (text.indexOf("START") > -1){
bot.sendSimpleMessage(id, id, "");
}
else
{
bot.sendSimpleMessage(id, "Comando Invalido", "");
}
}
}
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#define BOTtoken "476599401:AAHejGzJ994y8FhsJUu98-niapEMmLizU5g" //Token de "su" bot
#define LED_BUILTIN 2
//Led en la placa - pin2
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
String id, text;
unsigned long tiempo;
//Variables para almacenar el ID y TEXTO generado por el Usuario
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
WiFi.mode(WIFI_STA);
connect();
}
void loop()
{
if (millis() - tiempo > 2000)
{
connect();
readTel();
tiempo = millis();
}
}
//pin2 salida
//WiFi como Estación de trabajo
//Función para Conectar al WiFi
//verifica las funciones cada 2 segundos
//Función para verificar si hay conexión
//Función para leer Telegram
//Reset al tiempo
void connect() //Función para Conectar al wifi y verificar la conexión
{
if (WiFi.status() != WL_CONNECTED)
//si no está conectado al WiFi, se conecta
{
WiFi.begin("COMTECO-95084648", "DNGEL24641"); //datos de la red
delay(2000);
}
}
void readTel()
//Función que hace la lectura de Telegram
{
int newmsg = bot.getUpdates(bot.last_message_received + 1);
for (int i = 0; i < newmsg; i++)
{
id = bot.messages[i].chat_id;
text = bot.messages[i].text;
text.toUpperCase();
//para X mensajes nuevos, loop X veces
//almacena ID del Usuario en variable
//almacena texto del usuario en variable
//STRING_TEXT a mayúscula
if (text.indexOf("ON") > -1)
{
digitalWrite(LED_BUILTIN, 0);
bot.sendMessage(id, "LED ON", "");
}
//si el texto recibido contiene "ON"
else if (text.indexOf("OFF") > -1)
{
digitalWrite(LED_BUILTIN, 1);
bot.sendMessage(id, "LED OFF", "");
}
// si el texto recibido contiene "OFF"
else if (text.indexOf("START") > -1)
{
bot.sendSimpleMessage(id, id, "");
}
//si el texto recibido contiene "START"
//enciende LED
//envia mensaje
//apaga LED
//envia mensaje
//envia mensaje con su ID
Else
//si texto no es ninguno de los anteriores, mensaje de error
{
bot.sendSimpleMessage(id, "Comando Invalido", "");
}
}
}
Descargar