RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

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

问题[flask]

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
Martin Hope
Vladislav Shvetsov
Asked: 2022-08-17 18:10:39 +0000 UTC

如何在 Flask 中添加动态的 tr 行数?

  • 0

请告诉我如何根据文件中的行数将其添加到模板中?

主要.py:

with open("ping.txt", "r") as file1:
     notavailable = (file1.read())
print(notavailable)
app = Flask(__name__)

@app.route('/', methods=["POST", "GET"])
def index():
    return render_template("index.html", noavailable=notavailable)

if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0', port=8080)

索引.py:

{% extends 'base.html' %}
{% block title %}
Главная страница
{% endblock %}

{% block body %}
<table class="table table-striped table-sm">
          <thead>
            <tr>
              <th>Доступность комплекса: </th>
            </tr>
          </thead>
            <tr>
              <td>{{noavailable}}</td>
            </tr>
        </table>
{% endblock %}

notavailable在控制台中逐行显示,并且在页面上所有内容都包含在一行中(

python flask
  • 1 个回答
  • 15 Views
Martin Hope
MayorLeon19
Asked: 2022-08-12 00:18:47 +0000 UTC

烧瓶页面生成

  • 0

例如,有 192.168.0.150 并添加了一个人,结果是这样的 192.168.0.150/33274657843735,我需要在页面上显示这些数字:就像人们访问站点 192.168.0.150/33274657843735 和 33274657843735 一样对他,请帮助

python flask
  • 1 个回答
  • 29 Views
Martin Hope
Алексей Белкин
Asked: 2022-09-08 15:47:25 +0000 UTC

加入 SQLAlchemy

  • 0

我加入 2 个表(依赖项 (TABLE_1 : TABLE_2) =>> (1:M) ):

all_rows = db.session.query(
    TABLE_1
    ).filter(
            TABLE_1.field1 == value1,
            TABLE_2.field2 == value2
    ).join(
           TABLE_2
    ).filter(
             TABLE_2.field3 == value3
    ).all()

然后我想打印结果:

for rows in all_rows :
    print('*', rows )

由于某种原因,它只提供 1 行,然后只提供 TABLE_1 数据

我做错了什么?

python flask
  • 1 个回答
  • 25 Views
Martin Hope
MisterD
Asked: 2022-08-08 13:27:43 +0000 UTC

flask slqalchemy 动态字段名称替换

  • 0

烧瓶 + SQLAlchemy。有一个页面有大量相同类型的表单(测试),通过AJAX进行表单序列化,问题是表单是动态生成的(form_1,form_2等),因为它们是统一的。每个表单对应于数据库表中的一条记录。问题是我找不到如何动态替换路由中的字段名称。

@app.route('/check', methods=['POST'])
def check():
    form = Form()
    if request.method == "POST":
        field = request.form.get('answerField')
        ans_number = 'task_' + request.form.get('answerNumber')
        answer.ans_number = field

因此,表中不存在 ans_number 属性;它必须是该变量的值。是否有标准的 SQLAlchemy 工具或者我应该使用 sqlite 吗?将来会有过渡到 MySQL,所以 sqlite 不是一个选项。

python flask
  • 1 个回答
  • 18 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