Добрый день! Написал (точнее скопипастил) такой сервер:
from http.server import HTTPServer, CGIHTTPRequestHandler
import time
server_address = ('192.168.0.198', 800)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
begin_time = time.asctime()
print('Server started on', begin_time)
print('Server is running on address', server_address[0], 'on port', server_address[1])
httpd.serve_forever()
Он принимает данные (GET-запрос) с платы ESP8266. Эти данные в консоли отображаются, но вот нормально их обработать не могу (хочу выводить на отдельной странице).
Что посоветуете?
UPD. С точки зрения пользователя должно быть так: зашел на 192.168.0.198:800/... и увидел окошко со значением температуры (её я и получаю get-запросом). На этом же адресе запущен сервер.
Ответ
микроконтроллер с датчиком температуры отправляет показания методом get
Чтобы создать http-сервер, который записывает температуру, полученную в GET запросе от микроконтроллера, и показывает её позже в последующих запросах, можно использовать bottle библиотеку
#!/usr/bin/env python
from bottle import route, request, run, template # $ pip install bottle
temperature = None
@route('/')
def index():
global temperature
temperature = request.query.temperature or temperature
return template('Temperature: {{temperature}}',
temperature=temperature)
run(host='localhost', port=8000)
При запуске этого Питон-скрипта, запускается http-cервер, который слушает на локальной машине на 8000 порту.
При получении GET-запроса, содержащего temperature параметр, глобальная переменная temperature обновляется и тут же показывается как html. Если temperature параметр не указан, то возвращается предыдущее значение или None, если ещё ни разу не был temperature параметр задан.
То есть ожидается, что часть читающая температуру с датчика выполняет запросы типа:
$ http ':8000?temperature=20'
что устанавливает значение (20).
Чтобы прочитать это значение, достаточно не указывать параметр:
$ http :8000
Можно в браузере посмотреть (тот же запрос):
$ python -mwebbrowser http://localhost:8000
http команду можно получить, установив httpie библиотеку
$ pip install httpie
Обычно вместо использования глобальных переменных используется база данных (что позволяет сохранять значение температуры между запусками серверного процесса или его экземплярами в разных процессах). В простейшем случае, простой плоский текстовый файл может использован. Вот пример c sqlite
Если не хочется ставить bottle с помощью команды (предпочтительно внутри virtualenv):
$ pip install bottle
то достаточно скачать bottle.py и положить его рядом с кодом сервера.
Комментариев нет:
Отправить комментарий