Получите значения в реальном времени из скрипта python внутри jquery и php

Я хочу отображать текущую температуру на веб-странице.

Я использую Raspberry Pi 3 в Jessie.
Я использую Chromium в качестве браузера.

Я поместил скрипт Python в цикл для таймера обратного отсчета. Затем я запускаю его каждые 5 секунд. Я сопроводил его console.log("здесь"), чтобы проверить, не зацикливается ли функция. Он отображает множество «здесь», но я получаю только одно значение

  1. Я пробовал <?php shell_exec('sudo python /var/www/html/31856.py'); ?>
    Сценарий добавляет температуру в таблицу Mysql, но запускается только после обновления страницы.
  2. Я пробовал var tout = <?php echo shell_exec('sudo python /var/www/html/31856.py'); ?>
    console.log(tout); Скрипт отображает температуру и зацикливается, однако значение не меняется с первого значения. Меняется только после обновления

1 и 2 работают (получают временное значение), и в /var/log/apache2 нет ошибки, но я не могу заставить его передавать значения в реальном времени.

Вот коды:
1. #!/usr/bin/env python

from Adafruit_MAX31856 import max31856
import RPi.GPIO as GPIO


sensor = max31856.max31856(csPin=8, misoPin=9, mosiPin=10, clkPin=11)    
thermoTempC = sensor.readJunctionTemp()
st = "%.2f" % thermoTempC
print st

GPIO.cleanup()

2. #!/usr/bin/env Python

from Adafruit_MAX31856 import max31856
from datetime import datetime

import RPi.GPIO as GPIO
import MySQLdb
import time


db = MySQLdb.connect(host="192.168.1.10", user="root", passwd="root", db="test")
cur = db.cursor()


data = ""
thermoTempC = 0.00



def send_temp():
    try:
        rt = "%.2f" % thermoTempC
        cur.execute("""INSERT INTO log (Cntl_Id, Temperature) VALUES (%s, %s)""", ("C01", rt))
        #print("Write to DB. Success")
        #print rt 
        db.commit()
    except:
        db.rollback()



try:              
    cur.execute("""SELECT Status FROM controller WHERE Number='C01'""")
    data = cur.fetchone()[0]
    #print data
    db.commit()
except:
    db.rollback()


if str(data) == "1":
    sensor = max31856.max31856(csPin=8, misoPin=9, mosiPin=10, clkPin=11)    
    thermoTempC = sensor.readJunctionTemp()
    send_temp()

    GPIO.cleanup()

Функция цикла

function timer(seconds) {
    var h = Math.floor(seconds / 3600), m = Math.floor(seconds / 60) % 60, s = seconds % 60;

    if (h < 10) { h = "0" + h; }
    if (m < 10) { m = "0" + m; }
    if (s < 10) { s = "0" + s; }


    if (seconds >= 0) {
            if ((seconds % 5) == 0) {
                //var tout = 0;
                //console.log(tout);
                var tout = <?php echo shell_exec('sudo python /var/www/html/31856.py'); ?>              
                console.log(tout);
                console.log("get temp");
            }

        $("#remaining_time").val(h + ":" + m + ":" + s);
    }
    else
    {
        $("#remaining_time").val("00:00:00");
    }
}

person IyaSheep    schedule 24.04.2018    source источник


Ответы (1)


Я не вижу работающего цикла в вашем Javascript. Вы должны использовать setInterval (или что-то подобное), чтобы повторить свой код/функцию/метод....

Попробуйте это:
цикл таймера javascript
или это:

person user966660    schedule 24.04.2018