Пока L oop с time.sleep () без перезагрузки страницы - PullRequest
0 голосов
/ 07 февраля 2020

Я устанавливаю таймер для некоторых насосов на моем Raspberry Pi с веб-сайта. Когда я ввожу, сколько секунд я хочу, чтобы насос включился, я посылаю mqtt-сообщение пи, чтобы включить его на требуемое время. Однако, если я делаю это без сна до тех пор, пока не будет выполнено условие, я посылаю чрезмерное количество сообщений mqtt в pi. Когда я делаю это, используя сон в коде, мой веб-сайт перезагружает все в течение введенного мной периода. У кого-нибудь есть более эффективный способ решения этой проблемы?

   @app.route("/pump1_timer", methods=["GET", "POST"])
    def pump1_timer():
        if request.method == "POST":
            seconds = float(request.form.get('pump1_timer'))
            t_end = time.time() + (seconds)
            while time.time() <= t_end:
                publish.single("MY TOPIC", "pump1:on", hostname="MY IP")
                time.sleep(seconds)
            else:
                publish.single("MY TOPIC", "pump1:off", hostname="MY IP")
            return main1.html 

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Ваш input нуждается в атрибуте name, а не в форме:

<input name="pump1_timer" ... />
0 голосов
/ 07 февраля 2020

Я новичок в программировании и не осознавал всю прелесть асинхронных запросов во время этого вопроса. Для тех, кто видит этот пост и является новичком в программировании, эти запросы могут быть сделаны с использованием языка, подобного javascript в интерфейсе вашего проекта, чтобы сделать запрос без перезагрузки и приостановки страницы во время выполнения кода ... что является особенно полезно, если код использует time.sleep (). Это вместо использования flask и встроенных html методов запроса формы для отправки информации на клиент и сервер.

Итак, я использовал этот метод публикации AJAX (javascript library) для отправки данных. Есть и другие способы сделать это в javascript, но я использовал этот для простоты. Это можно использовать внутри функции, чтобы отправлять ее при нажатии кнопки и т. Д. c ...

$.post('/pump_timer', $('#pump1_timer').val().toString())
...