Pico 2 W Projekte
Sonnenaufgang - Sonnenuntergang:
Um einen Verbraucher nach den Zeiten für den Sonnenaufgang bzw. Sonnenuntergang zu steuern, braucht man natürlich die entsprechenden
Werte. Da sich diese aber täglich ändern und ausserdem von der geographischen Position abhängen, bezieht man sie am besten
aus dem Internet. Dafür kann man die kostenlose API von https://api.sunrise-sunset.org nutzen und für eine
vorgegeben Position einen Request im json-Format abrufen. Dazu verwendet man folgendes Format:
https://api.sunrise-sunset.org/json?lat=48.137222&lng=11.575277&date=today.
Damit der Pico W das erledigt, muss er mit dem WLAN Netz verbunden werden. Die entsprechenden Werte für 'SSID' und 'Pasword' in der Datei
settings.toml müssen natürlich vorhanden sein. Dann können sie folgenden Code benutzen:
Pico 2 W Projekte
1 import os 2 import ipaddress 3 import ssl 4 import wifi 5 import socketpool 6 import adafruit_requests 7 8 JSON_URL = "https://api.sunrise-sunset.org/json?lat=48.137222&lng=11.575277&date=today" 9 10 print("Verbinde mit: ", os.getenv('CIRCUITPY_WIFI_SSID')) 11 wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD')) 12 13 pool = socketpool.SocketPool(wifi.radio) 14 requests = adafruit_requests.Session(pool, ssl.create_default_context()) 15 16 print("Json abrufen und analysieren von", JSON_URL) 17 response = requests.get(JSON_URL) 18 sunrise = response.json()['results']['sunrise'] 19 sunset = response.json()['results']['sunset'] 20 21 print("-" * 40) 22 print("Sunrise:", response.json()['results']['sunrise']) 23 print("Sunset :", response.json()['results']['sunset']) 24 print("-" * 40) 25 print("done")
Bei Ausführung erscheint in der Kommandozeile der Thonny IDE z.B die Ausgabe wie im unteren Bild. Die Werte für Latitude und Longitude
im Beispiel sind auf dem Münchner Marienplatz und sollten durch Ihre entsprechend ersetzt werden.

Ich zeige noch ein Beispiel zum Ein- und Ausschalten der Onboard LED zur vollen Stunde der Sonnenauf- bzw. Untergangszeit. Dazu wird
die LED in den Zeilen 11 bis 14 initialisiert. Der Pico wird wieder mit dem WLAN verbunden (Zeilen 16 bis 24). Da die Sonnenauf- und
Untergangszeit im UTC-Format erfoglt, ist in den Zeilen 26 bis 36 eine Anpassung an die bei uns übliche mitteleuropäische
Sommerzeit vorgenommen. Schließlich wird in der 'while-Schleife' ab Zeile 43 die aktuelle Stunde (Zeile 45) bestimmt und mit
den Werten von 'hourrise' und 'hourset' verglichen.
1 import os 2 import time 3 import board 4 import ipaddress 5 import ssl 6 import wifi 7 import socketpool 8 import adafruit_requests 9 import digitalio 10 11 # Onboard-LED initialisieren 12 led = digitalio.DigitalInOut(board.LED) 13 led.direction = digitalio.Direction.OUTPUT 14 led.value = False 15 16 JSON_URL = "https://api.sunrise-sunset.org/json?lat=48.137222&lng=11.575277&date=today" 17 wifi.radio.connect(os.getenv('CIRCUITPY_WIFI_SSID'), os.getenv('CIRCUITPY_WIFI_PASSWORD')) 18 pool = socketpool.SocketPool(wifi.radio) 19 requests = adafruit_requests.Session(pool, ssl.create_default_context()) 20 21 print("Json abrufen und analysieren von", JSON_URL, "\n") 22 response = requests.get(JSON_URL) 23 sunrise = response.json()['results']['sunrise'] 24 sunset = response.json()['results']['sunset'] 25 26 # Anpassung der Stunde wegen der MEZS 27 if len(sunrise) == 10: 28 sunrise = sunrise[0:1] 29 else: 30 sunrise = sunrise[0:2] 31 hourrise = int(sunrise) + 1 32 if len(sunset) == 10: 33 sunset = sunset[0:1] 34 else: 35 sunset = sunset[0:2] 36 hourset = int(sunset) + 13 37 38 print("-" * 40) 39 print("Sunrise:", response.json()['results']['sunrise'], "also einschalten", hourset, "Uhr") 40 print("Sunset :", response.json()['results']['sunset'], "also ausschalten ", hourrise, "Uhr") 41 print("-" * 40) 42 43 while True: 44 current_time = time.localtime() 45 hour = current_time.tm_hour 46 # Lampe 18.00 Uhr an / 06.00 Uhr aus 47 if hour >= hourrise and hour < hourset: 48 led.value = False 49 if hour >= hourset and hour < hourrise: 50 led.value = True