#! /usr/bin/env python
# -*- coding: utf-8 -*-
import MySQLdb
import sys
import Adafruit_DHT
import csv
import ephem
import datetime
import time
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT) # lumiere
GPIO.setup(24, GPIO.OUT) # chauffage
somewhere = ephem.Observer() # ici on régle en fonction des coordonnées de sa ville, ici: Gardanne 13120 france
somewhere.lat = '43.45' # latitude
somewhere.lon = '5.4667' # longitude
somewhere.elevation = 170 # altitude
#
# Heure actuelle ( du pi, GMT) convertie en chiffres
#
heurenow = int(time.strftime('%H%M'))
#
# r1 = heure lever soleil UTC
# s1 = heure coucher soleil UTC
#
sun = ephem.Sun()
r1 = somewhere.next_rising(sun)
s1 = somewhere.next_setting(sun)
#
# coucher = heure du coucher du soleil, en chiffres
# on commence par convertir l'heure de coucher en chiffres
# après avoir extrait les informations inutiles (date, etc.)
#
heurec = str(s1)
long = len(heurec)
fin = long - 8
heurec = heurec[fin:long-3]
coucher = int(heurec[0:2] + heurec[3:5])
#
# lever = heure du lever du soleil, en chiffres
# on commence par convertir l'heure de lever en chiffres
# après avoir extrait les informations inutiles (date, etc.)
#
heurel = str(r1)
long = len(heurel)
fin = long - 8
heurel = heurel[fin:long-3]
lever = int(heurel[0:2] + heurel[3:5])
lever = lever + 200 # +2hrs UTC/GMT
coucher = coucher + 200 # +2hrs UTC/GMT
if lever < heurenow < coucher: # si l'heure actuelle est comprise entre l'heure du lever et du coucher, s'il faut jour quoi.
GPIO.output(4, True) # on allume la lumière (on intervertira True et False suivant le branchement du relais 'normalement ouvert ou fermer' )
target = 29 # on donne 29 °C comme temperature de jour au point chaud
else:
GPIO.output(4, False) # sinon on éteint la lumière
target = 24 # on passe la temperature du point chaud a 24 °C
fname1 = "/var/www/html/terraspi/csv/ephem.csv" # on créer le fichier
file1 = open(fname1, "wb")
try:
#
# Création de CSV.
#
writer1 = csv.writer(file1)
#
# Écriture de la ligne d'en-tête avec le titre
# des colonnes.
writer1.writerow( ('lever' ,'coucher') )
# Écriture des quelques données.
writer1.writerow( (lever, coucher) )
finally:
#
# Fermeture du fichier source
#
file1.close()
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 22) # on lit la sonde
humidityC, temperatureC = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 23) # on lit la sonde
humidity = round(humidity,2) # on arrondi a 2 chiffres
temperature = round(temperature,2)
humidityC = round(humidityC,2)
temperatureC = round(temperatureC,2)
if temperatureC > target: # si la température du point chaud dépasse la target (24 la nuit et 29 le jour)
GPIO.output(24, False) # on coupe le chauffage
else:
GPIO.output(24, True) # sinon on l'allume
fname = "/var/www/html/terraspi/csv/result.csv" # on créer le fichier
file = open(fname, "wb")
try:
#
# Création de CSV.
#
writer = csv.writer(file)
#
# Écriture de la ligne d'en-tête avec le titre
# des colonnes.
writer.writerow( ('Humidity' ,'Temperature') )
# Écriture des quelques données.
writer.writerow( (humidity, temperature) )
writer.writerow( (humidityC, temperatureC) )
finally:
#
# Fermeture du fichier source
#
file.close()
sys.exit(1)