Как добавить час ко времени заката? - PullRequest
0 голосов
/ 07 декабря 2018

У меня запущен скрипт Python, который получает время заката, сравнивает его со временем сейчас и включает свет, если наступит позднее.

Он запускается через задание cron каждые 15 минут между определеннымивремя дня, чтобы оно охватывало весь год.

Но я бы хотел, чтобы он не включал свет, если, скажем, через 1 час после заката.

Почему?Я только лег спать около 7:00 вечера, когда у меня была мигрень.Огни зажглись на закате.Я выключил их.Спустя 15 минут я понял, что мои планы домашней автоматизации были сильно испорчены, так как я был грубо разбужен внезапно включенными 2 огнями:)

Это соответствующий бит моего кода:

url = "https://api.sunrise-sunset.org/json?lat=51.218675&lng=-1.467375"
response = requests.request("GET", url)
data=response.json() #Getting JSON Data
sunset_time_str=data['results']['sunset'] #Getting the Sunset Time

current_date=datetime.date.today() #Getting Today Date
sunset_time=datetime.datetime.strptime(sunset_time_str,'%I:%M:%S %p') #Converting String time to datetime object so that we can compare it current time
sunset_date_time=datetime.datetime.combine(current_date,sunset_time.time()) #Combine today date and time to single object
current_date_time=datetime.datetime.now()
stop_time = ??????????????????? + timedelta(hours=1)
print (stop_time)
if current_date_time > sunset_date_time:
    #turn the light on

Это немного с "?"с которым я борюсь.Я пробовал sunset_date_time и несколько других вещей, но я просто получаю сообщение об ошибке (например):

Traceback (most recent call last):
  File "/home/pi/libcoap/light.py", line 41, in <module>
    stop_time = sunset_date_time + timedelta(hours=1)
TypeError: 'module' object is not callable

Может ли кто-нибудь бросить мне спасательный круг, пожалуйста.Я искал, но все примеры говорят о добавлении часа (или чего-то еще) к времени сейчас, а не к другому времени.

Редактировать: Добавление в импорт

from pytradfri import Gateway
from pytradfri.api.libcoap_api import APIFactory
from pytradfri.util import load_json, save_json
from time import sleep
import requests
import datetime
import time
import json
import timedelta

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

На самом деле, мне нужно было следующее:

from pytradfri import Gateway
from pytradfri.api.libcoap_api import APIFactory
from pytradfri.util import load_json, save_json
from time import sleep
import requests
import datetime
import time
import json
from datetime import timedelta #This is the line I was missing

url = "https://api.sunrise-sunset.org/json?lat=51.218675&lng=-1.467375"
response = requests.request("GET", url)
data=response.json() #Getting JSON Data
sunset_time_str=data['results']['sunset'] #Getting the Sunset Time

current_date=datetime.date.today() #Getting Today Date
sunset_time=datetime.datetime.strptime(sunset_time_str,'%I:%M:%S %p') #Converting String time to datetime object so that we can compar$
sunset_date_time=datetime.datetime.combine(current_date,sunset_time.time()) #Combine today date and time to single object
current_date_time=datetime.datetime.now()
stop_time = sunset_date_time + timedelta(hours=1) #This gives me the time of sunset + 1 hour
print (stop_time)

Это печатает дату и время заката + 1 час.

0 голосов
/ 07 декабря 2018

Удалите import timedelta и вместо этого вызовите

datetime.timedelta(hours=1)

.

Вы импортировали модуль с именем "timedelta" и пытаетесь вызвать этот модуль, а не функцию модуля.Однако я не смог найти модуль с именем timedelta, отличный от , который используется в datetime .

...