@nekitosikpendosik

Почему не отправляются сообщения в telegram через php?

esp 8266 получает данные с датчика dht11 и отправляет на сервак , а на серваке php скрипт который должен отправлять сообщение если превышена температура (задаётся в коде), стал тестить не работает , в чём проблема не могу понять , температуру заданную в коде превышаю , а сообщения нема. P.s скрип не мой .
<?php


// получаем текущую время и дату
// данный метод мы вызовем позже, когда он понадобится
function get_current_date_and_time() {
    
    // определение времени без привязки к текущему времени сервера хостера
    $tz = 'Europe/Moscow';
    $timestamp = time();
    $dt = new DateTime("now", new DateTimeZone($tz));
    $dt->setTimestamp($timestamp);
    $ret_str = $dt->format('d.m.Y H:i');    
    
    return $ret_str;
}
// =============================
    
    
// если от датчика приходят данные, то будем писать их в текстовый файл в корне сайта
if(isset($_GET['temp'])) {
        
    // текущая дата и время
    $current_date_and_time = get_current_date_and_time();

    
    // в этот файл мы будем писать данные
    $file = 'temp_log.txt';
    
    // считываем текущие данные из файла
    $current = file_get_contents($file);
    
    // к данным, которые уже в файле были, добавляем новые данные
    $current .= $current_date_and_time.' -> '.$_GET['temp']."\n";

    // закидываем их в файл
    file_put_contents($file, $current);
    
    // получим числовые значения датчиков
    $data = explode("temp", trim($_GET['t']));
    
    // влажность 
    $hum     = str_replace("hum","",$data[0]);
    
    // температура
    $temp     = $data[1]; 
    
    // теперь можем проверить температуру и если она высокая, то прислать сообщение в телеграм
    if($temp > 27) {
                
        // пишем в телеграм
        $text = 'Критичная температура в серверной! - '.$temp.' C';
        $bot_token = '1810527993:AAE_Fv-bdQpnjVOHo9q4_yOiWGKVC0Hr6uU';
        $chat_id = '437840601';
        $mess_url = "https://api.telegram.org/bot".$bot_token."/sendMessage?chat_id=".$chat_id."&text=".$text."";
        $res = file_get_contents($mess_url);

    }
}
// =============================

?>


Код самой ESP 8266
// подключение библиотек
#include <ESP8266WiFi.h>
#include "DHT.h"

// параметры сети Wi-Fi ==================
const char* ssid      = "НАЗВАНИЕ_ВАШЕЙ_WI-FI_СЕТИ";
const char* password  = "ПАРОЛЬ_ВАШЕЙ_WI-FI_СЕТИ";

// номер пина, к которому подключен сигнальный провод датчика температуры DHT11
int temp_pin = 5;
DHT dht(temp_pin, DHT11);

// адрес домена или айпи адрес, куда будут отправляться данные о температуре - например example.com или 123.124.240.11
String host_temp = "ИМЯ_ИЛИ_IP_ВАШЕГО_ДОМЕНА";

// алрес скрипта PHP на сервере, который будет принимать данные, в данном случае скрипт map.php лежит в корневом каталоге сайта
String get_request_temp = "/map.php?temp=";

// номер пина встроенного светодиода, ним микросхема будет моргать в определенных условиях, которые мы пропишем 
int pin = 2;  






// данный метод запускается один раз при включении микросхемы
void setup() {

  // инициализируем порт мигалки светодиодом
  pinMode(pin, OUTPUT);
  // --------------------------  

  // иницируем датчик температуры и влажности
  dht.begin();
  // ========================================
      
  // пытаемся подключиться к сети Wi-Fi
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  // ========================================

   // в цикле будем пытаться подключиться к Wi-Fi, пока не подключимся
   while (WiFi.status() != WL_CONNECTED) {
  
                    // -------------------
                    // будем моргать светодиодом - "один длинный - два коротких"
                    // т.е. если микросхема после заливки прошивки и включения мигает таким образом, то она еще подключается к сети Wi-Fi
                    digitalWrite(pin, HIGH);  
                    delay(2000);
                    digitalWrite(pin, LOW);
                    delay(500);
                    digitalWrite(pin, HIGH);
                    delay(100);
                    digitalWrite(pin, LOW);
                    delay(100);
                    // --------------------- 
  
    }
    // ==============================
    
}








// главный цикл приложения, который запускается снова и снова по кругу
// именно здесь и описывается, что же будет происходить во время работы микросхемы
void loop() {

      digitalWrite(pin, LOW);

      // создаем экземплар класса WiFiClient, с которым будем дальше работать
      WiFiClient client;
      
      // делаем задержку 2 секунды, чтобы медленный датчик DHT11 успел "растормозиться"
      delay(2000);
                
      //Считываем влажность с датчика (раз уж ее можно считать, то считаем ))
      float h = dht.readHumidity();
                
      // Считываем температуру
      float t = dht.readTemperature();
                
      // Проверка удачно прошло ли считывание
      if (isnan(h) || isnan(t)) {

                  // если считывание с датчика прошло неуспешно, то передаем строку "data_error" и возвращаемся к началу циклв
                  if(client.connect(host_temp, 80)) {

                        // формируем строку для передачи ее нашему серверу
                        // в данном случае строка получится такаая: http://host_temp/map.php?temp=data_error
                        client.println( "GET " + get_request_temp + "data_error" + " HTTP/1.1\r\nHost: " + host_temp + "\r\n\r\n");

                        // -------------------
                        // двойная моргалка  "короткий - длинный - короткий" - понимаем, что данные с датчика не получены
                        //digitalWrite(pin, LOW);
                        delay(100);
                        digitalWrite(pin, HIGH);
                        delay(500);
                        digitalWrite(pin, LOW);
                        delay(100);
                        // --------------------- 
                  }
                  
                  // возвращаемся к началу цикла 
                  return;
                  
      } else {

                  // если считывание с датчика успешно, то передаем температуру и влажность нашему скрипту на сервере
                  if(client.connect(host_temp, 80)) {

                        // формируем строку для передачи ее нашему серверу
                        // в данном случае строка получится такаая: http://host_temp/map.php?temp=hum26.00temp27.80
                        // где цифры после hum и temp - это реальные значения влажности и температуры соответственно
                        client.println( "GET " + get_request_temp + "hum" + String(h) + "temp" + String(t) + " HTTP/1.1\r\nHost: " + host_temp + "\r\n\r\n");

                        // -------------------
                        // двойная моргалка  "длинный - короткий - короткий" - понимаем, что данные с датчика получены и успешно переданы
                        //digitalWrite(pin, LOW);
                        delay(500);
                        digitalWrite(pin, HIGH);
                        delay(100);
                        digitalWrite(pin, LOW);
                        delay(100);
                        // --------------------- 
                  }
                  
                }
                
            // =============================================
            // программа заканчивается и мы снова переходим к началу цикла
            // и так до бесконечности, пока включена плата
            // =============================================
            
}
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 2
@humoured
Вы всё на свете найдёте в коробке с карандашами
Отправляете параметр temp:
String get_request_temp = "/map.php?temp=";
...
client.println( "GET " + get_request_temp + "hum" + String(h) + "temp" + String(t) + " HTTP/1.1\r\nHost: " + host_temp + "\r\n\r\n");


Проверяете наличие параметра temp:
if(isset($_GET['temp'])) {

Используете значение параметра t:
$data = explode("temp", trim($_GET['t']));

Полагаю, ошибка в этом. А может и не одна. Смотрите логи сервера, PHP об ошибках пишет.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Самый простой способ проверки: в консоли на сервере с PHP сделать команду
wget -dSO- "https://api.telegram.org/bot1810527993:AAE_Fv-bdQpnjVOHo9q4_yOiWGKVC0Hr6uU/sendMessage?chat_id=437840601&text=Testing"

и смотреть в консоли, на отправленные данные и на ответ Telegram API.
Там прилетает JSON, с "ok" или "error", не сложно разобраться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы