Я уже задавал этот вопрос, но мне кажется, что я задал его неправильно, или, по крайней мере, я ошибаюсь не тем деревом, в котором лежит проблема.
У меня есть скрипт Python / Flask со следующим маршрутом:
@app.route('/heatingadjust')
def heatingadjust(hiveSessionId=None, score=None):
import requests
import time
import datetime
import MySQLdb
conn = MySQLdb.connect(host="localhost", user = "admin", passwd = "xxxxxxxxxx", db = "mydb")
cursor = conn.cursor()
cursor.execute("select score from OccScore")
data = cursor.fetchone()
score = data[0]
url = "https://api.prod.bgchprod.info:443/omnia/users"
if 'hiveSessionId' in session:
hiveSessionId = session['hiveSessionId']
headers = {
'Content-Type': "application/vnd.alertme.zoo-6.1+json",
'Accept': "application/vnd.alertme.zoo-6.1+json",
'X-Omnia-Client': "Hive Web Dashboard",
'X-Omnia-Access-Token': hiveSessionId,
'Cache-Control': "no-cache"
}
response = requests.request("GET", url, headers=headers)
data=response.json()
if 'errors' in data:
return redirect(url_for('hivelogin'))
if (score == 0):
url = "https://api-prod.bgchprod.info:443/omnia/nodes/xxxxxxxxxx"
payload = "{\n \"nodes\": [{\n \"attributes\": {\n \"targetHeatTemperature\": {\n \"targetValue\": 15\n }\n }\n }]\n}"
headers = {
'Content-Type': "application/vnd.alertme.zoo-6.1+json",
'Accept': "application/vnd.alertme.zoo-6.1+json",
'X-Omnia-Client': "Dashboard",
'X-Omnia-Access-token': hiveSessionId,
'Cache-Control': "no-cache",
}
response = requests.request("PUT", url, data=payload, headers=headers)
else:
url = "https://api-prod.bgchprod.info:443/omnia/nodes/xxxxxxx"
payload = "{\n \"nodes\": [{\n \"attributes\": {\n \"targetHeatTemperature\": {\n \"targetValue\": 18\n }\n }\n }]\n}"
headers = {
'Content-Type': "application/vnd.alertme.zoo-6.1+json",
'Accept': "application/vnd.alertme.zoo-6.1+json",
'X-Omnia-Client': "Dashboard",
'X-Omnia-Access-token': hiveSessionId,
'Cache-Control': "no-cache",
}
response = requests.request("PUT", url, data=payload, headers=headers)
return str(score)
По сути, у меня есть один маршрут, который вызывается с помощью wget, который анализирует для устройств Bluetooth, увеличивается как оценка, если он находит устройство и записывает оценку в таблицу MySQL. Это чтобы увидеть, есть ли кто-нибудь дома.
Этот маршрут считывает счет и отключает отопление с помощью API Hive, если дом пуст. Вызванный по URL, он делает именно то, что должен, и я вижу, что отопление отключено.
Однако я пытаюсь вызвать скрипт с помощью wget из crontab.
Запускается crontab, и я вижу его в системном журнале. Журнал доступа apache показывает вызываемый URL.
Но отопление не отключается, как если бы я вызывал ту же самую вещь через браузер.
У меня есть подозрение из-за чего-то другого, что я видел, что, возможно, было бы плохо, если бы не понравился тот факт, что другой URL называется.
Может кто-нибудь сказать мне, верно ли мое подозрение? Я видел еще кое-что об использовании urllib вместо wget, но я не знаю, что мне нужно изменить, чтобы вызывать URL с заголовками.