Python: Smart skohylla - väderdata-API slutar att uppdateras efter ett tag

Trädvy Permalänk
Medlem
Registrerad
Sep 2008

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()

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2003

Hej, kul idé!

Du laddar bara ner väderdatan en enda gång, i början av scriptet.

Du får lägga den under "if GPIO.input(PIR_PIN):" om du vill att den ska hämta om varje gång du aktiverar den.

Brass knuckles and a 2x4

Trädvy Permalänk
Medlem
Registrerad
Sep 2008

@jonasc: Aaah! Såklart, hur kunde jag missa det, det borde vara felet ja!

Tack