desktop

Control de Arduino desde e-mail

Se nota que lo manejas al dedillo
No te creas, me pelié bastante para entenderlo, hasta que encontre esa librería/framework para QT, y como no estaba compliado nada, empece a leer el código fuente, que aparte tenía algunos errores...

Lo que no entiendo porqué Whatsapp no lo hace
Lo había buscado en su momento, pero las API de 3ros que hay, son de pago, y los datos que iba a usar eran delicados.

Por cierto, me estoy peleando para entender bien JSON, ya que con ello en general quiero aprenderlo bien para guardar archivos de configuración desde C#, antes lo hacía con XML, ahora me toca lo más moderno y eficaz
Aún me cuesta entenderlo, pero puedes mirarlo como si fuese un Array, pero la notación es un poco distinta.

- Siempre empieza con "{" y termina con "}".

- Los datos son "clave":"valor", y se separan con una coma (",").

- Si hay unos "[" y "]" son unos subvalores, al estilo:
JavaScript:
"clave1":[{"clave2":"valor2"}]
, y se acceden como:
JavaScript:
variable.clave1[0].clave2


¿Puedes hacer una interfaz propia tuya aplicación para móviles y que envíe comandos por botones?
Te refieres a realizar de 0 una App con botones, o sigues hablando de Telegram?

Con lo primero, si podría, aunque estoy probando Cordova ya que Android Studio es muy pesado para mi maquina y tarda una eternidad en complilar (mas de 15 minutos, contra 3 de Cordova).

Con lo segundo, se envía un cierto parametro con algunas especificaciones para que la App de Telegram identifique como botones.
 
Buenas camaradas:

Estoy haciendo un programa que funciona una parte, por ejemplo, recibir e-mail del quien yo quiera y comandos para enviarlos al puerto serie.

Por ejemplo, desde mi móvil, envío un correo electrónico que en el asunto ponga, Luz_ON, mi ordenador o PC lo detecta y envía datos al puerto serie en el cual lo muestra en el Led 13 y lo indica en el LCD 16x2 de Arduino. (En el futuro pondré un LCD más grande y mejor, ahora estoy de pruebas).

Lo único que me falta es poder enviar mensaje como lo hace al enviar al puerto serie, que en estos momentos estoy con ello. Así sabrás que realmente se ha ejecutado tus comandos.

Aunque ahora estoy trabajando en modo consola, este programa me vale para ponerlo a la Raspberry Pi y conectarlo al puerto serie de Arduino. Ya se hará programas en modo gráfico para PC en el futuro.

Básicamente lo que hace es controlar Arduino para poder encender y apagar luces sea interiores o exteriores de la vivienda, abrir y cerrar persianas de las ventanas, ventiladores o lo que se te ocurra.

Todo controlado desde su propio gestor de e-mail sea gmail, hotmail o el que te guste. Por supuesto, desde la versión de PC se hará un gestor de escritorio y desde el móvil, me gusta más, pero esto, ya es otra historia.

¿Qué les parece la propuesta?

Si quieren les paso los códigos de C# para que prueben, les funciona a la primera. Tienes que descargar Visual Studio Community 2022 y tener Arduino UNO, que es el que uso por ahora. Si nunca lo han usado, me preguntan. Ya verás que funciona y mola.
Te has planteado usar un bot por telegram ?
 
Hola a todos.

Tal y como ha comentado Dr. Zoidberg y otros compañeros, la mejor opción es usar un ESP32 y Telegram.

Aparte de que la comunicación es prácticamente inmediata, puedes incluso crear botones para realizar las acciones, y una cosa que hay que tener en cuenta, si instalas Telegram en tu PC portátil, también puedes monitorear y controlar el ESP.

Yo hice un sistema de alarma, con 4 sensores, y le di acceso a un amigo para que probara su control desde el otro lado del Atlántico (Chile). Cuando activó el sitema, disparé uno de los sensores, y al recibir él la señal del disparo, mandó el comando para desactivar el sistema. Esta prueba la hicimos en varias ocasiones y a distintas horas; el tiempo medio entre que se envía la señal y se recibe en el otro extremo era como mucho de 5 - 6 segundos, lo que es notable teniendo en cuenta que era una comunicación entre Chile y España.

Además, si estudias la API de Telegram, puedes crear botones de comando para evitar tener que escribir las acciones. Adjunto capturas de pantalla del móvil y de Telegram para PC.
1690930751647.jpeg 1690930797596.jpeg
(Telegram para Android)
1690930911597.png
(Telegram para PC.)
 
Muchas gracias Meta, pero soy compañera, aunque mi nick sea masculino (es para despistar ;) )

La parte más importante para poder usar botones es que hay que crear un menú, y enviarlo en una secuencia JSON al servidor de Telegram.
Aquí os dejo la parte del menú:

Código:
String keyboardJson = "[[{ \"text\" : \"Activar\", \"callback_data\" : \"A\" }, { \"text\" : \"Desactivar\", \"callback_data\" : \"D\" }],";
  keyboardJson += "[{ \"text\" : \"Sensor 1 On\", \"callback_data\" : \"S1 1\" }, { \"text\" : \"Sensor 2 On\", \"callback_data\" : \"S2 1\" }, { \"text\" : \"Sensor 3 On\", \"callback_data\" : \"S3 1\" }],";
  keyboardJson += "[{ \"text\" : \"Sensor 1 Off\", \"callback_data\" : \"S1 0\" }, { \"text\" : \"Sensor 2 Off\", \"callback_data\" : \"S2 0\" }, { \"text\" : \"Sensor 3 Off\", \"callback_data\" : \"S3 0\" }],";
  keyboardJson += "[{ \"text\" : \"Sensores ON\", \"callback_data\" : \"S 1\" }, { \"text\" : \"Sensores OFF\", \"callback_data\" : \"S 0\" }],";
  keyboardJson += "[{ \"text\" : \"Información\", \"callback_data\" : \"Info\" }, { \"text\" : \"Send Log\", \"callback_data\" : \"SendLog\" }]]";

  bot.sendMessageWithInlineKeyboard(chatId, "Hola " + botFrom_name + ".   Menú opciones" , "", keyboardJson);

(Este código corresponde a una versión previa, que usaba sólo 3 sensores y tenía un LCD 2004 en la unidad central presentando el estado de todo el sistema)

La última sentencia es la que envía el menú al servidor por medio de la API, ésta se encarga de determinar el número de elementos, los textos de los encabezados y las acciones (textos) que se deben interpretar.

Aunque la implementación es muy sencilla,hay que tener en cuenta el espacio que tenemos en nuestro móvil, ya que cuantos más elementos tengamos por línea, menor es la cantidad de texto que podemos poner; por lo que lo mejor es ir haciendo pruebas hasta determinar el texto a poner de forma que sea inteligible.

También, aparte de la cantidad de elementos por línea que pongamos, hay que tener en cuenta el número de líneas que ponemos, de forma que quede elegante y no nos llene la pantalla de botones. Incluso se pueden hacer menús que llamen a sub menús, y que éstos realicen las acciones.

Actualmente estoy con un proyecto que tiene estas características ya que quiero controlar un total de 16 reles, repartidos en varias habitaciones.
El primer menú presenta las habitaciones, y al seleccionar cualquiera de ellas, aparece el submenú con los relés disponbles.

Imprescindible es colocar un botón de retorno al menú principal.


NOTA: Todo el código de la aplicación está escrito en C uasando el IDE de Arduino con un ESP32. Conseguí una placa que lleva incorporada una conexión para una batería, de forma que sea inmune a los fallos de corriente, y la conexión WiFi es por medio de un router móvil con tarjeta SIM. también con batería.
De esta forma, el sistema es independiente de los cortes de luz, y sigue funcionando incluso si los "malos" cortan la luz. Además, estoy diseñando e implementando un sensor de fallo de corriente aprovechando que la placa tiene una salida de 5 V que cuando se alimenta de baterías pone el nivel a 0V, con lo que con un simple divisor de tensión puedo detectar los fallos de corriente, intencionados o no, y mandar el mensaje correspondiente.


Un cordial saludo.

Alba (Horus).
 
Última edición:
Atrás
Arriba