2017-02-06 2 views
0

Я подключаю свой малиновый pi с датчиком PIR ... Я написал скрипт Python, чтобы получить вход датчика ... Теперь я хочу получить выход из скрипта python в PHP для дальнейших действий на моем веб-сайте ... Я попробовал следующий код: Это PHP код:Как получить динамический вывод из скрипта python на PHP?

<?php  
    $output=shell_exec('python/sense1.py'); 
    echo $output; 
?> 

Это код Python:

import RPi.GPIO as GPIO 
import time 
GPIO.setmode(GPIO.BOARD) 
PIR_PIN = 26 
GPIO.setup(PIR_PIN, GPIO.IN) 
while True: 
    time.sleep(1) 
    if GPIO.input(PIR_PIN): 
     print ("Human Moving") 
    else: 
     print ("No human moving") 

Я попробовал один оператор печати в питон и получил выход в PHP ... Но теперь проблема Python-скрипт возвращает выходные данные каждые 1 секунду бесконечно ... Поэтому я не могу получить результат из сценария python (из бесконечного цикла) ... Но я хочу, чтобы t он выводит каждую секунду, чтобы проверить состояние PIR-датчиков ... Как я могу это сделать ??? Пожалуйста, помогите мне ...

+1

Возможный дубликат [Выполнение процесса с выходом в реальном времени в PHP] (http://stackoverflow.com/questions/1281140/run-process-with-realtime-output-in-php) – insertusernamehere

+0

Эй вы можете сохранить свои и каждый журнал активности сенсора на локальный SQL-сервер или любую другую БД и запускать скрипт для обновления в вашем центральном БД, в котором связано ваше приложение PHP. – webDev

+0

Другим возможным способом является создание конечной точки REST API с использованием колбы python и поместить этот код в код конечной точки отдыха в колбе. колба имеет небольшой вес и просто для записи небольшого файла, включая этот код датчика.Вызовите эту конечную точку отдыха из своего php легко, используя метод GET или POST. – webDev

ответ

-2

В вашем скрипте python вы должны написать значение датчика в текстовом файле (вместо его отображения) и прочитать его с помощью php в цикле.

Или просто удалите цикл из сценария python. Затем, когда вы запустите свой скрипт python, он выведет только одно значение, и вы сделаете свой скрипт в php. Проблема в том, что PHP будет генерировать вашу страницу один раз и не перезагружать значение. Затем вы можете просто перезагрузить страницу каждую секунду, чтобы реализовать значение.

+0

Датчик должен непрерывно считывать активность, датчик должен регистрировать каждое действие и сообщать на PHP. – webDev

+0

Я не понимаю, почему вы подчеркиваете мой ответ. Это способ, которым я использую дома с моим оборудованием, и он отлично работает. Датчик непрерывно считывает данные, просто вместо цикла вы снова запускаете свой скрипт. – saperlipopette

+0

Я не подчеркивал приятеля, я просто прокомментировал. – webDev

0

Я делаю что-то подобное с датчиком температуры с малиновым PI. Я получаю температурный уровень комнаты с любопытством, вызывая REST API, который я создал с помощью флешки python.

Вот что я делаю (вам просто нужно заменить код датчика температуры с кодом датчика)

МОЕЙ питон колбы код:

@app.route('/room-temp') //This is my get rest endpoint, i call from php 
@requires_auth //You dont need authentication, so you should remove this 
def room_temp(): 
    pi = pigpio.pi() 
    pigpio.exceptions = False 
    c, files = pi.file_list("/sys/bus/w1/devices/28-00*/w1_slave") 
    pigpio.exceptions = True 
    if c >= 0: 
     for sensor in files[:-1].split("\n"): 
      devid = sensor.split("/")[5] # Fifth field is the device Id. 

      h = pi.file_open(sensor, pigpio.FILE_READ) 
      c, data = pi.file_read(h, 1000) # 1000 is plenty to read full file. 
      pi.file_close(h) 

      if "YES" in data: 
      #gc.collect() 
      (discard, sep, reading) = data.partition(' t=') 
      t = float(reading)/1000.0 
      #print("{} {:.1f}".format(devid, t)) 
      data5 = {'temp':"{} {:.1f}".format(devid, t)} 
      pi.stop() 
      return jsonify(data5) 
      else: 
      #print("999.9") 
      #gc.collect() 
      data6 = {'temp':"999.9"} 
      return jsonify(data6) 

Я бег этой фляги АФИ в моей малине и Я делаю вызов ajax из своего PHP-приложения. Я звоню AJAX в http://raspberryip:port/room-temp с моего PHP.

Примечание: Просто вы должны увидеть REST, REST с флагом Python (Link) и AJAX от PHP.

Это очень простой способ получить результат от датчиков, но проблема в том, что для подачи запроса AJAX на конечную точку REST, написанной в колбе питона, потребуется несколько миллисекунд. Таким образом, вам нужно хранить каждую активность каждого сенсора в локальной базе данных, постоянно запуская скрипт python, и вы можете получать значения из этого легко взвешенного DB. После извлечения из малины вы можете удалить записи из малины, чтобы игнорировать накладные расходы.
Для всех видов деятельности на датчике.
Моя Рекомендация: Пожалуйста, сохраните результат датчика в локальной базе данных и затем напишите конечную точку REST, чтобы получить данные из БД. Поместите ваш вызов AJAX из вашего приложения PHP в эту конечную точку REST, чтобы получить данные из локальной базы данных этой малины.

Смежные вопросы