RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-460220

WizAnd's questions

Martin Hope
WizAnd
Asked: 2023-11-09 03:25:05 +0000 UTC

为什么使用 ESP8266 模块发送请求时没有重定向到 Telegram API?

  • 6

我正在开发一个小项目(https://flask-bot-xabor.amvera.io/),包括: Flask 上的服务器;电报机器人;Arduino模块(测量电源电压和温湿度)。

在服务器的view.py中有一个API点:

#API для добавление в БД данных сенсоров на arduino
@app.route('/ard_update',methods = ['POST', 'GET'])
def ard_update():
    key = request.args.get('key')
    temp = float(request.args.get('field1'))
    humidity = int(request.args.get('field2'))
    voltage = int(request.args.get('field3'))

    if key == "********************":
        TELEGRAM_URL = "https://api.telegram.org/bot"
        part_url_for_1 = "/sendMessage?chat_id="
        chat_id = BaseConfig.CHAT_ID
        part_url_for_2 = "&text="
        text = "Внимание: ОТКЛЮЧЕНИЕ ЭЛЕКТРИЧЕСТВА. ДАТА: "
        BOT_TOKEN = BaseConfig.BOT_TOKEN
        now = datetime.datetime.now()
        now_str = str(now)

        request_telegram = TELEGRAM_URL + BOT_TOKEN + part_url_for_1 + chat_id + part_url_for_2 + text + now_str

        new_values = Sensors(temp=temp, humidity=humidity, voltage=voltage)
        try:
            db.session.add(new_values)
            db.session.commit()
        except:
            db.session.rollback()
            print("Ошибка добавления данных сенсоров в БД")
            return "Ошибка добавления данных сенсоров в БД"
        if voltage == 0:
            text = "Внимание: отключение электричества. Время: "
            #request_telegram = TELEGRAM_URL + BOT_TOKEN + part_url_for_1 + chat_id + part_url_for_2 + text + now_str
            voltage_off = VoltageOff(voltage=voltage)
            try:
                db.session.add(voltage_off)
                db.session.commit()
            except:
                db.session.rollback()
                print("Ошибка добавления данных сенсоров в БД")

            return redirect(request_telegram)
        else:
            return redirect("/")
        #return redirect(request_telegram)
    else:
        print("Неправильный API")
        # tasks = Todo.query.order_by(Todo.date_created).all()
        # sensor_values = Sensors.query.order_by(Sensors.date_send).all()

        #https://api.telegram.org/bot*********************************/sendMessage?chat_id=************&text=тдтолидлилил

        return redirect("/")

思路是,当电压出现故障时,ESP8266 发送 GET 请求;服务器收到此信息,如果电压== 0,则向电报API发送请求并将消息发送给我。

问题是,如果您通过浏览器发送请求,通过链接并将 field3 替换为 0:https://flask-bot-xabor.amvera.io/ard_update ?key=&field1=29.00&field2=60& field3=220 那么电报中的通知消失

如果 ESP8266 模块发送请求,则值将添加到数据库中,绘制图表,但消息不会发送到电报。

那些。满足电压 == 0 的条件,理论上应该发生重定向并且应该发送消息,但由于某种原因这不会发生。

以防万一,ESP8266 草图的一部分:

  WiFiClientSecure client;
  const int httpPort = 443; // 80 is for HTTP / 443 is for HTTPS!
  
  client.setInsecure(); // this is the magical line that makes everything work
  
  if (!client.connect(host1, httpPort)) { //works!
    Serial.println("connection failed");
    return;
  }
  else {
    Serial.print("Connected to: ");
    Serial.println(host1);
  }
//......................................................................
  String url = "/update?key=";         // Thingspeak
         url += APIkey;
         url += "&field1=";
         url += t;                     //DHT Температура
         url += "&field2=";
         url += h;                     //DHT Влажность 
         url += "&field3=";
         url += voltage;     
         url += "\r\n\r\n";

  String url1 = "/ard_update?key=";     // String для другого сервера
         url1 += APIkey;
         url1 += "&field1=";
         url1 += t;                     //DHT Температура
         url1 += "&field2=";
         url1 += h;                     //DHT Влажность 
         url1 += "&field3=";
         url1 += voltage;     
//         url1 += "\r\n\r\n";

  Serial.println("Sending data: ");
  //Serial.println(url);

                                       // Передача запроса серверу Thingspeak
  //client.print(String("GET ") + url + " HTTP/1.1\r\n" +
  //             "Host: " + host + "\r\n" +
  //             "Connection: close\r\n\r\n");  
                                       // Чтение данных от сервера и отправка в последовательный порт



  client.println(String("GET ") + url1 + " HTTP/1.1\r\n" +
               "Host: " + host1 + "\r\n" + 
               "Connection: close\r\n\r\n");
  //Serial.println(String("GET ") + url1 + " HTTP/1.1\r\n" +
  //             "Host: " + host1 + "\r\n" + 
  //             "Connection: close\r\n\r\n");
                   
  while (client.available()) 
  {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  Serial.println();

  delay(500);
  client.flush();     // ждем отправки всех данных

  Serial.println("closing connection");


  client.stop();

告诉我寻找问题的方向吗?服务器端或 ESP8266 是否存在某些问题,例如,它提前断开连接并且没有时间重定向?

flask
  • 2 个回答
  • 31 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5