#! /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)