Go Down

Topic: telegram esp8266 (Read 126 times) previous topic - next topic

gianni_liuzzi

Ciao, ho realizzato un bot in telegram e l'ho interfacciato con l'esp-01 per attivare un relay, le tipiche operazioni /ledon /ledoff /status e funziona perfettamente.
Se apro telegram dal cellulare funzione alla grande il relay si accende e si spegne.
Il problema nasce quando cerco di attivare il relay dalla barra del browser con il link

https://api.telegram.org/botxxxxxxxxxxxxxxxxxx/sendMessage?text=/ledon&chat_id=xxxxxxx.

Arriva il testo su telegram ma non attiva il relay, come se fosse necessario fare il tap dallo smartphone per poter accendere il relay. Qualcuno ha incontrato lo stesso problema, ha risolto e può aiutarmi?
Grazie a tutti.

Standardoil

no, mai provato
cosa ti arriva, esattamente, hai provato a mandare in stampa?
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

gianni_liuzzi

sul cellulare (telegram) arriva il testo "/ledon" senza attivare il relay
mentre sul browser arriva il codice json con i dati relativi alla richiesta.

 

Standardoil

no, intendevo su arduino
io non uso da browser, ho telegram desktop, e funzia benissimo
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

gianni_liuzzi

Sia che uso telegram da cellulare che da desktop funziona ed in risposta mi da "Led is on" o "Led is off"    secondo se accendo o spengo il relay.
 
In genere si può usare telegram da browser per inviare messaggi, usando le api di telegram tipicamente nella forma
https://api.telegram.org/bot[token]/sendMessage?text=/ledon&chat_id=xxxxxxxxx
ed i messaggi testuali arrivano, come nel mio caso arriva "/ledon".

Quando invio il link(di cui sopra) dal browser subito dopo il bot risponde "Led is on" ma nella realtà non si accende, è come se volesse per forza l'invio ol il tap del cellulare o l'invio o il click di telegram.desktop per attivarsi.

Mandare i segnali sotto forma di link mi può essere utile per implementare il tutto in una pagina web e con ajax controllare (accendere e spegnere)  il led oppure leggere le informazioni json che rimanda e conoscere lo stato del led.

Spero di aver chiarito il mio problema e la necessità.     

Standardoil

per nulla
io ti ho chiesto se hai fatto debug lato arduino, non come spedire comandi lato PC
descrivi un po' lo HW e il SW
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

gianni_liuzzi

Si tratta del modulo ESP-01 e non di arduino, mi chiedi il debug di arduino e non capisco che intendi.
Comunque ad ogni buon conto questo il software che  ho caricato su ESP-01

Code: [Select]

/*******************************************************************
 *  An example of how to use a custom reply keyboard markup.       *
 *                                                            *
 *  written by Brian Lough                                         *
 *******************************************************************/
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

char ssid[] = "xxxxxxxxx";     // your network SSID (name)
char password[] = "xxxxxxxx"; // your network key

// Initialize Telegram BOT
#define BOTtoken "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  // your Bot Token (Get from Botfather)


WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

int Bot_mtbs = 1000; //mean time between scan messages
long Bot_lasttime;   //last time messages' scan has been done

const int ledPin = 0;
int ledStatus = 0;

void handleNewMessages(int numNewMessages) {
  Serial.println("handleNewMessages");
  Serial.println(String(numNewMessages));

  for (int i=0; i<numNewMessages; i++) {
    String chat_id = String(bot.messages[i].chat_id);
    String text = bot.messages[i].text;

    String from_name = bot.messages[i].from_name;
    if (from_name == "") from_name = "Guest";

    if (text == "/ledon") {
      digitalWrite(ledPin, HIGH);   // turn the LED on (HIGH is the voltage level)
      ledStatus = 1;
      bot.sendMessage(chat_id, "Led is ON", "");
    }

    if (text == "/ledoff") {
      ledStatus = 0;
      digitalWrite(ledPin, LOW);    // turn the LED off (LOW is the voltage level)
      bot.sendMessage(chat_id, "Led is OFF", "");
    }

    if (text == "/status") {
      if(ledStatus){
        bot.sendMessage(chat_id, "Led is ON", "");
      } else {
        bot.sendMessage(chat_id, "Led is OFF", "");
      }
    }

    if (text == "/options") {
      String keyboardJson = "[[\"/ledon\", \"/ledoff\"],[\"/status\"]]";
      bot.sendMessageWithReplyKeyboard(chat_id, "Choose from one of the following options", "", keyboardJson, true);
    }

    if (text == "/start") {
      String welcome = "Welcome to Universal Arduino Telegram Bot library, " + from_name + ".\n";
      welcome += "This is Reply Keyboard Markup example.\n\n";
      welcome += "/ledon : to switch the Led ON\n";
      welcome += "/ledoff : to switch the Led OFF\n";
      welcome += "/status : Returns current status of LED\n";
      welcome += "/options : returns the reply keyboard\n";
bot.sendMessage(chat_id, welcome, "Gianni");
    }
  }
}

void setup() {
  Serial.begin(115200);

  // Set WiFi to station mode and disconnect from an AP if it was Previously connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  // attempt to connect to Wifi network:
  Serial.print("Connecting Wifi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  pinMode(ledPin, OUTPUT); // initialize digital ledPin as an output.
  delay(10);
  digitalWrite(ledPin, HIGH); // initialize pin as off
}

void loop() {
  if (millis() > Bot_lasttime + Bot_mtbs)  {
    int numNewMessages = bot.getUpdates(bot.last_message_received + 1);

    while(numNewMessages) {
      Serial.println("got response");
      handleNewMessages(numNewMessages);
      numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    }

    Bot_lasttime = millis();
  }
}


 
 
su telegram ho creato il bot

Il resto come ho detto sopra

Standardoil

OK, hai ragione, ESP01, non arduino
ma sempre debug serve di fare
primo: se ti risponde "led is ON" puo' essere stata eseguita solo una di due righe
la 41, dove hai appena fatto un digitalwrite e quindi il led è acceso sul serio
oppure la 52, dove hai appena controllato la variabile ledstatus,
quindi se ti risponde "led is on" l'uscita del led è alta, dato il programma solo questo puo' essere
ci sono nel programma alcune incongruenze e problemi, anche gravi, ma non riguardano questa fase
quindi quello che dici non può essere vero
ti conviene cambiare il testo alle righe 41 47 52 e 54 per avere testi differenti e sapere quindi quela parte del programma viene eseguita
questo io intendo per debug (anzi, solo per cominciarlo)
quindi comincia a cambiare queste scritte, in maniera che se accendi ti risponda magari "ho acceso il led" e se chidi lo stato ti risponda magari "il led adesso è acceso"
in questa maniera sai quale parte del programma viene realmente eseguita
potresti anche aggiungere una parte che "prima" di eseguire ti fa una eco (in italiano eco è femminile) di quello che ha ricevuto, quindi se ci sono differenze tra un metodo e l'altro lo vedi dalla differenza della eco
facci sapere
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

Go Up