Python: Smart skohylla - väderdata-API slutar att uppdateras efter ett tag
Kod längst ner
Jag har en skohylla som som belyser mina skor, i hyllan sitter en PIR-sensor, när den aktiveras laddar jag ner väderinformation med en API för Darksky. Då får jag aktuell temperatur och regnrisk och då släcks alla lampor förutom en som lyser upp de skorna som passar bäst.
Här är en gif som visar hur den fungerar:
http://i.imgur.com/lssn09n.gifv
Så om det är 17 grader och 0 regnrisk, ska det lysa för sneakers. Detta fungerar bra, det kan stå 16,9 grader efter någon minut. Men när jag testar efter någon timme så blir det fortfarande 16,9 grader, står den över natten är det på morgonen 16,9 grader och det är sneakers som belys hela tiden. Om jag startar om python-scriptet eller Raspberryn fungerar det som det ska igen. Jag har testat att byta väder-API men det är samma på andra sajter.
Har ni någon idé om vad problemet kan vara?
Här är min kod om det är till någon nytta, jag är nybörjare så om den ser klumpig ut så vet ni:
from urllib.request import urlopen
import json
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)
GPIO.setup(27, GPIO.OUT) //LED lights//
GPIO.setup(12, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
GPIO.setup(25, GPIO.OUT)
PIR_PIN = 7
GPIO.setup(PIR_PIN, GPIO.IN) //Sensor//
GPIO.output(17, True)
GPIO.output(22, True)
GPIO.output(27, True)
GPIO.output(23, True)
GPIO.output(12, True)
GPIO.output(25, True)
response = urlopen("https://api.darksky.net/forecast/API_KEY/LAT-LONG?units=si").read().decode('utf8') #get weather data
parsed_json = json.loads(response)
temp_c = parsed_json['currently']['temperature']
rain_mm = parsed_json['currently']['precipIntensity']
try:
print ("testing...")
time.sleep(2)
print ("ready")
while True:
if GPIO.input(PIR_PIN):
print ("Motion Detected!")
print (temp_c)
print (rain_mm)
//weather data decides which shoe to wear with LED lights//
if (temp_c >= 25) and (rain_mm <= 2):
print ("flip flop")
GPIO.output(22, False)
GPIO.output(27, False)
GPIO.output(12, False)
GPIO.output(25, False)
GPIO.output(17, False)
time.sleep(5)
elif (temp_c <= 24) and (temp_c >= 21) and (rain_mm <= 2) or (temp_c >= 24) and (rain_mm > 2):
print ("canvas")
GPIO.output(27, False)
GPIO.output(17, False)
GPIO.output(22, False)
GPIO.output(12, False)
GPIO.output(23, False)
time.sleep(5)
elif (temp_c <= 20) and (temp_c > 18) and (rain_mm <= 2) or (temp_c >= 20) and (temp_c < 24) and (rain_mm > 2):
print ("spring shoes")
GPIO.output(27, False)
GPIO.output(17, False)
GPIO.output(12, False)
GPIO.output(25, False)
GPIO.output(23, False)
time.sleep(5)
elif (temp_c <= 18) and (temp_c > 13) and (rain_mm <= 2) or (temp_c >= 18) and (temp_c < 20) and (rain_mm > 2):
print ("Sneakers")
GPIO.output(27, False)
GPIO.output(17, False)
GPIO.output(22, False)
GPIO.output(25, False)
GPIO.output(23, False)
time.sleep(5)
elif (temp_c <= 13) and (temp_c >= 3) and (rain_mm <= 2) or (temp_c >= 13) and (temp_c < 18) and (rain_mm > 2) and (rain_mm < 4):
print ("Bigger Sneakers")
GPIO.output(22, False)
GPIO.output(17, False)
GPIO.output(12, False)
GPIO.output(25, False)
GPIO.output(23, False)
time.sleep(5)
else:
print ("Boots")
GPIO.output(22, False)
GPIO.output(27, False)
GPIO.output(12, False)
GPIO.output(25, False)
GPIO.output(23, False)
time.sleep(5)
time.sleep(5)
GPIO.output(17, True)
GPIO.output(22, True)
GPIO.output(27, True)
GPIO.output(12, True)
GPIO.output(25, True)
GPIO.output(23, True)
except KeyboardInterrupt:
print " Quit"
GPIO.cleanup()