• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

❌bot.sendMessage в Telegram нескольким Chat_ID

EkaterinaESP

New member
Уважаемые знатоки, вопрос: Удалось подружить DHT22 с NodeMCU v3 и телеграм ботом. Пока в коде был только один CHAT_ID всё было прекрасно, но появилась необходимость добавить несколько человек и оно капризничает. скорее всего дело в незнании мной синтаксиса и свойств/команд. На данный момент оба CHAT_ID добавленные в скетч могут отправлять запрос /climat и получать значения с датчика в ответ, но автоматические сообщения от ESP в телеграм бот приходят только CHAT_ID "111111111" раз в десять секунд,
if (millis() - last_time > 10000) {
String readings = getReadings();
bot.sendMessage("11111111", readings, "");
last_time = millis();
}

а второму пользователю не приходят. Была попытка обоих пользователей скормить одной команде, но не вышло (
if (millis() - last_time > 10000) {
String readings = getReadings();
bot.sendMessage("11111111", "22222222", readings, "");
last_time = millis();

}
Это мои первые шаги на этом поприще, строго не судите. Спасибо за любые советы и подсказки

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#ifdef ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#include <Adafruit_Sensor.h>

const char* ssid = "WF_NAME";
const char* password = "PASS";

#define CHAT_ID ("11111111", "22222222")
#define BOTtoken "TOKEN:TOKENTOKENTOKENTOKENTOKEN"
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
int botRequestDelay = 1000;
unsigned long lastTimeBotRan;
unsigned long last_time;

String getReadings(){
float temperature, humidity;
temperature = dht.readTemperature();
humidity = dht.readHumidity();
String message = "Temperature: " + String(temperature) + " ºC \n";
message += "Humidity: " + String (humidity) + " % \n";
return message;
}

void handleNewMessages(int numNewMessages) {
Serial.println("handleNewMessages");
Serial.println(String(numNewMessages));
for (int i=0; i<numNewMessages; i++) {
String chat_id = String(bot.messages.chat_id);
if (chat_id != CHAT_ID){
bot.sendMessage(chat_id, "Unauthorized user", "");
continue;
}


String text = bot.messages.text;
Serial.println(text);
String from_name = bot.messages.from_name;
if (text == "/start") {
String welcome = "Welcome, " + from_name + ".\n";
welcome += "Use the following command to get current readings.\n\n";
welcome += "/readings \n";
bot.sendMessage(chat_id, welcome, "");
}

if (text == "/climat") {
String readings = getReadings();
bot.sendMessage(chat_id, readings, "");
}
}
}
void setup() {
Serial.begin(115200);

#ifdef ESP8266
client.setInsecure();
#endif

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}

Serial.println(WiFi.localIP());
dht.begin();
}
void loop() {
if (millis() > lastTimeBotRan + botRequestDelay) {
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);
}
lastTimeBotRan = millis();
}
if (millis() - last_time > 10000) {
String readings = getReadings();
bot.sendMessage("11111111", readings, "");
last_time = millis();
}

if (millis() - last_time > 15000) {
String readings = getReadings();
bot.sendMessage("22222222", readings, "");
last_time = millis();
}

}
 

EkaterinaESP

New member
Второй попыткой было создание Группы и добавление туда Бота +добавление в скетч Chat_ID группы, но результата не было . Данные с датчика автоматически не отправлялись , а на отправку пользователями команд приходило в ответ Unauthorized user ...
 

EkaterinaESP

New member
Спасибо за ответы. Отправлять сообщения от бота к подписчикам удалось при помощи кода :

if(...) {
....
bot.sendMessage("11111111", readings, "");
bot.sendMessage("88888888", readings, "");
...
}
 
Сверху Снизу