Время обращения к Python - 24 часа - PullRequest
0 голосов
/ 25 сентября 2018

Я начинаю работать с Python (и программирую все вместе).

Я сравниваю время события с текущим временем для управления внешним / полузамкнутым садом с травами, используя GPIO для управления реле.У меня все отвечает так, как я ожидаю в текущих тестах - включая хакерский способ инициирования water (), но пока я в порядке с этим, пока мои навыки не улучшатся.

У меня проблемы с вызовом функции lighton () после сна.Ниже мой код и вывод ...

import RPi.GPIO as GPIO
import time
import datetime
import os
os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')
GPIO.setwarnings(False)
GPIO.cleanup()
GPIO.setmode(GPIO.BCM)

TEMPHIGH = 23
TEMPOK = 17
LIGHTS = 18
WATER = 22
FAN = 24
HEATER = 25

GPIO.setup(TEMPHIGH,GPIO.OUT)
GPIO.setup(TEMPOK,GPIO.OUT)
GPIO.setup(LIGHTS,GPIO.OUT) # relay IN1
GPIO.setup(FAN,GPIO.OUT) # relay IN2
GPIO.setup(WATER,GPIO.OUT) # relay IN3
GPIO.setup(HEATER,GPIO.OUT) #relay IN4

timenow = time.strftime("%X")
awake = "21:06:00"
sleep = "21:30:00"
optimalroom = 24
optimalheat = 30
watering = "07:34:00"
water1 =   "07:34:01"
water2 =   "07:34:02"
water3 =   "07:34:03"
water4 =   "07:34:04"
water5 =   "07:34:05"
watering1 = "21:34:00"
water11 =   "21:34:01"
water12 =   "21:34:02"
water13 =   "21:34:03"
water14 =   "21:34:04"
water15 =   "21:34:05"
roomtemp_sensor = "/sys/bus/w1/devices/28-000007c0ab9b/w1_slave" #room temp sensor
heatertemp_sensor = "/sys/bus/w1/devices/28-000007c666b9/w1_slave" #heater temp sensor

def temphigh():
    GPIO.output(TEMPOK, GPIO.HIGH)
    GPIO.output(TEMPHIGH, GPIO.LOW)
def tempok():
    GPIO.output(TEMPOK, GPIO.LOW)
    GPIO.output(TEMPHIGH, GPIO.HIGH)
def fanon():
    GPIO.output(FAN, GPIO.LOW)
def fanoff():
    GPIO.output(FAN, GPIO.HIGH)
def lightson():
    GPIO.output(LIGHTS, GPIO.LOW)
def lightsoff():
    GPIO.output(LIGHTS, GPIO.HIGH)
def water():
    GPIO.output(WATER, GPIO.LOW)
    time.sleep(30)
def wateroff():
    GPIO.output(WATER, GPIO.HIGH)
def heateron():
    GPIO.output(HEATER, GPIO.LOW)
def heateroff():
    GPIO.output(HEATER, GPIO.HIGH)

print ("Resetting Room")
GPIO.output(LIGHTS, GPIO.HIGH) # turn lights off
GPIO.output(WATER, GPIO.HIGH) # turn water off
GPIO.output(FAN, GPIO.HIGH) # turn fan off
GPIO.output(HEATER, GPIO.HIGH) # turn heater off
time.sleep(1)    

while True:
    timenow = time.strftime("%X")
    time.sleep(1)
    print (timenow)
    #start water block
    if timenow == watering or timenow == water1 or timenow == water2 or timenow == water3 or timenow == water4 or timenow == water5 or timenow == watering1 or timenow == water11 or timenow == water12 or timenow == water13 or timenow == water14 or timenow == water15:
        print ("Watering Now")
        water()
    else:
        wateroff()
    # start lighting block
    if timenow == sleep and timenow >= sleep:
        print ("1Lights Off")
        lightsoff()

    elif timenow == awake and timenow >= awake:
        print ("1Lights On")
        lightson()

    elif sleep <= timenow:
        print ("2Lights Off")
        lightsoff()

    elif awake == timenow or awake < sleep and sleep > timenow:
        print ("2Lights On")
        lightson()
    # Open temp sensors and check temps etc... but this is working fine.

Мой вывод ниже, поскольку он считается пробужденным = "21:05:00"

Resetting Room
21:05:41
2Lights On
Heat Source Temp: 16.062
Room Temp: 16.25
Temperature OK
Heater On
21:05:46
2Lights On
Heat Source Temp: 16.062
Room Temp: 16.25
Temperature OK
Heater On
21:05:50
2Lights On
Heat Source Temp: 16.125
Room Temp: 16.25
Temperature OK
Heater On
21:05:54
2Lights On
Heat Source Temp: 16.062
Room Temp: 16.25
Temperature OK
Heater On
21:05:58
2Lights On
Heat Source Temp: 16.062
Room Temp: 16.25
Temperature OK
Heater On
21:06:02
2Lights On
Heat Source Temp: 16.062
Room Temp: 16.25
Temperature OK
Heater On
21:06:06
2Lights On
Heat Source Temp: 16.062
Room Temp: 16.25
Temperature OK
Heater On

В настоящее время я надеялся, чтосвет выключен как в 21: 05: 57 ... как 21:05:57 до пробуждения = "21:06:00"

Я собираюсь установить пробуждение = "07:30:00 "и пусть он побежит посмотреть, что будет потом ...

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 25 сентября 2018

Причиной сбоя большей части этого кода является то, что вы сравниваете время в строке с < и >.Попробуйте проанализировать эти строки для объектов DateTime или преобразовать их в метки времени, прежде чем сравнивать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...