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

Перечислить несколько ID для бота телеграм и добавить отправку сообщения

mishaber

New member
Привет всем. Собираю мой первый скетч. Прошу помощи. собственно скетч:
C++:
#ifdef ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <ESP8266WebServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <UniversalTelegramBot.h>



// скетч база
// Шина данных подключена к выводу D2 на ESP8266
#define ONE_WIRE_BUS D2

// Настройка объекта oneWire для связи с любыми устройствами OneWire
OneWire oneWire(ONE_WIRE_BUS);

// Передаем ссылку на объект oneWire объекту Dallas Temperature.
DallasTemperature sensors(&oneWire);

float tempSensor1, tempSensor2, tempSensor3, tempSensor4, tempSensor5, tempSensor6;
String T1,T2,T3,T4,T5,T6;  // Строковая переменная

uint8_t sensor1[8] = { *  };
uint8_t sensor2[8] = { *  };
uint8_t sensor3[8] = { *  };
uint8_t sensor4[8] = { *  };
uint8_t sensor5[8] = { *  };
uint8_t sensor6[8] = { *  };

/* Введите SSID и пароль от вашей сети*/
const char* ssid = "***";   // SSID
const char* password = "***";  // пароль


ESP8266WebServer server(80);

//телега
// Инициализация Telegram BOT
#define BOTtoken "***"  // Здесь введите Ваш Bot Token, сгенерированный Botfather

// Здесь введите идентификатор пользователя Telegram (UserID)
#define CHAT_ID "***"

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

// Проверяет наличие новых сообщений каждые секунду.
int botRequestDelay = 1000;
unsigned long lastTimeBotRan;

//телега1
// Обработка новых сообщений
void handleNewMessages(int numNewMessages) {
  Serial.println("handleNewMessages");
  Serial.println(String(numNewMessages));

  for (int i = 0; i < numNewMessages; i++) {
    // Chat id of the requester
    String chat_id = String(bot.messages[i].chat_id);
    if (chat_id != CHAT_ID) {
      bot.sendMessage(chat_id, "Неизвестный пользователь", ""); // Неавторизованный пользователь
      continue;
    }

    // Вывод полученного сообщения
    String text = bot.messages[i].text;
    Serial.println(text);

    String from_name = bot.messages[i].from_name;

    if (text == "/start") {
      String welcome = "Добро пожаловать, " + from_name + ".\n";
      welcome += "Для управления устройством используйте следующий команды:\n\n"; // Используйте следующие команды
      welcome += "/T1 - Темпратура на улице \n";       // Темпратура на улице
      welcome += "/T2 - Темпратура котла \n";     // Темпратура котла
    welcome += "/T2 - Темпратура горячего водоснабжения \n";     // Темпратура горячего водоснабжения
      welcome += "/T4 - Темпратура теплоаккумулятора верхняя \n";    // Темпратура теплоаккумулятора верхняя
      welcome += "/T5 - Темпратура теплоаккумулятора средняя \n"; // Темпратура теплоаккумулятора средняя
    welcome += "/T6 - Темпратура теплоаккумулятора нижняя \n"; // Темпратура теплоаккумулятора нижняя
      bot.sendMessage(chat_id, welcome, "");
    }


    if (text == "/T1") {
      bot.sendMessage(chat_id, "Считываю температуру...\n", ""); // Читаем температуру
      bot.sendMessage(chat_id, (T1), "Темпратура на улице\n");
    }

    if (text == "/T2") {
      bot.sendMessage(chat_id, "Считываю температуру...\n", ""); // Читаем температуру
      bot.sendMessage(chat_id, (T2), "Темпратура котла\n");
    }
    
    if (text == "/T3") {
      bot.sendMessage(chat_id, "Считываю температуру...\n", ""); // Читаем температуру
      bot.sendMessage(chat_id, (T3), "Темпратура горячего водоснабжения\n");
    }

    if (text == "/T4") {
      bot.sendMessage(chat_id, "Считываю температуру...\n", ""); // Читаем температуру
      bot.sendMessage(chat_id, (T4), "Темпратура теплоаккумулятора верхняя\n");
    }
 
      if (text == "/T5") {
      bot.sendMessage(chat_id, "Считываю температуру...\n", ""); // Читаем температуру
      bot.sendMessage(chat_id, (T5), "Темпратура теплоаккумулятора средняя\n");
    }
 
      if (text == "/T6") {
      bot.sendMessage(chat_id, "Считываю температуру...\n", ""); // Читаем температуру
      bot.sendMessage(chat_id, (T6), "Темпратура теплоаккумулятора нижняя\n");
    }
 
 
  }
}


//телега1
//телега           
 
void setup()
{
  Serial.begin(115200);
  delay(100);
 
  sensors.begin();

#ifdef ESP8266
  client.setInsecure();
#endif 

  Serial.println("Connecting to ");
  Serial.println(ssid);

  // подключиться к вашей локальной wi-fi сети
  WiFi.begin(ssid, password);

  // проверить, выполнено ли подключение wi-fi сети
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");
 
  //телега

 
#ifdef ESP8266

#endif


  //телега
 
}



void loop()
{


  server.handleClient();
  //телега
// Проверяем наличие новых сообщений каждую секунду.
  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();
  }
 
  sensors.requestTemperatures();
  tempSensor1 = sensors.getTempC(sensor1);
  T1 = "Temp="+String(tempSensor1)+" oC"; // Переводим цифровое значение температуры в строку
  T2 = "Temp="+String(tempSensor2)+" oC"; // Переводим цифровое значение температуры в строку
  T3 = "Temp="+String(tempSensor3)+" oC"; // Переводим цифровое значение температуры в строку
  T4 = "Temp="+String(tempSensor4)+" oC"; // Переводим цифровое значение температуры в строку
  T5 = "Temp="+String(tempSensor5)+" oC"; // Переводим цифровое значение температуры в строку
  T6 = "Temp="+String(tempSensor6)+" oC"; // Переводим цифровое значение температуры в строку
  Serial.print("Temp: ");
  Serial.print(tempSensor1);
  Serial.println(" oC");

//телега
}

void handle_OnConnect()
{
  sensors.requestTemperatures();
  tempSensor1 = sensors.getTempC(sensor1); // Получить значение температуры
  tempSensor2 = sensors.getTempC(sensor2); // Получить значение температуры
  tempSensor3 = sensors.getTempC(sensor3); // Получить значение температуры
  tempSensor4 = sensors.getTempC(sensor4); // Получить значение температуры
  tempSensor5 = sensors.getTempC(sensor5); // Получить значение температуры
  tempSensor6 = sensors.getTempC(sensor6); // Получить значение температуры
  server.send(200, "text/html", SendHTML(tempSensor1,tempSensor2,tempSensor3,tempSensor4,tempSensor5,tempSensor6));
}

void handle_NotFound()
{
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float tempSensor1,float tempSensor2,float tempSensor3,float tempSensor4,float tempSensor5,float tempSensor6)
{
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<meta http-equiv=\"refresh\" content=\"10\">\n";
  ptr +="<title>Boiler room temperature monitor</title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 40px;} h1 {font-size: 34px;color: #890043;margin: 50px auto 30px;}\n";
  ptr +="p {font-size: 24px;;margin-bottom: 10px;}\n";
  ptr +="p4 {color: #007241;}\n";
  ptr +="p1 {color: #FF0D00;}\n";
  ptr +="p2 {color: #9C02A7;}\n";
  ptr +="p3 {color: #206876;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>Boiler room</h1>\n";
  ptr +="<p><p4>Outdoor: ";
  ptr +=tempSensor1;
  ptr +="&deg;C</p4></p>";
  ptr +="<p><p1>Boiler: ";
  ptr +=tempSensor2;
  ptr +="&deg;C</p1></p>";
  ptr +="<p><p2>Hot water: ";
  ptr +=tempSensor3;
  ptr +="&deg;C</p2></p>";
  ptr +="<p><p3>Accumulator 1: ";
  ptr +=tempSensor4;
  ptr +="&deg;C</p3></p>";
  ptr +="<p><p3>Accumulator 2: ";
  ptr +=tempSensor5;
  ptr +="&deg;C</p3>";
  ptr +="<p><p3>Accumulator 3: ";
  ptr +=tempSensor6;
  ptr +="&deg;C</p3></p>";
  ptr +="</div>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}
У меня 2 вопроса, как перечислить несколько id пользователей в #define CHAT_ID "95956214"
и как добавить отправку ботом сообщений не в ответ а при превышении например выше 95 в котле, те примеры что нашел не сработали...
заранее спасибо, 2 дня сижу уже с ним)
 

mishaber

New member
Все оказалось просто, if (tempSensor2 > 90) bot.sendMessage(CHAT_ID, "Перегрев котла!\n", "");
а для информирование нескольких пользователей в CHAT_ID был вписан чат канала куда добавлен бот.
 

Bekar

New member
Можно уточнить пожалуйста, синтаксис написания этой строки
#define CHAT_ID ("-558539441", "375076638" ) // это просто набор цифр
такой будет ?
 
Сверху Снизу