2017-03-21 16 views
1

J'ai photorésistance connecté à mon Raspberry PI par 1uF condensateur, et un programme simple pour vérifier les valeurs. C'est principalement des scripts fusionnés d'autres programmes que j'ai, donc c'est peut-être en buggy. Je suis nouveau dans ce genre de choses. J'ai mis 2 variables. Si la valeur de la photorésistance est inférieure à 1000, alors c'est vrai, sinon c'est faux. Je ne voulais pas contrôler la commande JSON de ma LED au serveur Openhab. Lorsque la photorésistance donne True, elle envoie la commande "ON" à Openhab, sinon elle envoie la commande "OFF". Tout va bien, sauf une chose. Script envoyant des commandes à Openhab avec chaque mesure de la valeur de la photorésistance. Je veux qu'il envoie la commande "ON" seulement la première fois quand une valeur inférieure à 1000 est détectée (True) alors reste là, n'envoie pas de commandes à Openhab au moment où la photorésistance donne une sortie au dessus de 1000 (False) et ainsi de suite. Le but principal ici est de changer la couleur de la LED lorsque l'éclairage principal est allumé, et de la changer lorsque l'éclairage principal est éteint. J'espère que je l'ai bien expliqué. S'il vous plaît aider.Envoyer des commandes à Openhab en fonction des valeurs de capteur de lumière Python Raspberry Pi

Mon programme actuel:

#!/usr/local/bin/python 
import RPi.GPIO as GPIO, time 
import urllib 
import urllib2 
import requests 



GPIO.setmode(GPIO.BCM) 

def RCtime (PiPin): 
    measurement = 0 
    # Discharge capacitor 
    GPIO.setup(PiPin, GPIO.OUT) 
    GPIO.output(PiPin, GPIO.LOW) 
    time.sleep(0.1) 

    GPIO.setup(PiPin, GPIO.IN) 
    # Count loops until voltage across 
    # capacitor reads high on GPIO 
    while (GPIO.input(PiPin) == GPIO.LOW): 
     measurement += 1 

    return measurement 

def LIGHTcheck(): 
    if RCtime(27)<1000: 
     LIGHT = True 
     print LIGHT 
     return LIGHT 

    if RCtime(27)>1000: 
     LIGHT = False 
     print LIGHT 
     return LIGHT 

def LightON(): 
    url = 'http://openhab-server:8080/CMD?switch2=ON' 
    postdata = {"ON"} 
    print(postdata) 
    resp = requests.get(url=url)   

def LightOFF(): 
    url = 'http://openhab-server:8080/CMD?switch2=OFF' 
    postdata = {"OFF"} 
    print(postdata) 
    resp = requests.get(url=url)  



while True: 
    if LIGHTcheck() == True: 
     LightON() 
    elif LIGHTcheck() == False: 
     LightOFF() 

Répondre

0

Ok. Je l'ai compris d'une certaine manière. Si quelqu'un a besoin d'une solution comme celle-ci, voici un programme en cours d'exécution. Ce n'est pas un métier professionnel, donc c'est probablement buggé, encore en test. Je n'ai pas trouvé quelque chose comme ça ailleurs, tellement mieux que rien. En cas de lumière principale éteinte, si la photorésistance détecte que l'éclairage principal est sur ON, le script enregistre les couleurs et les états de luminosité actuels dans les fichiers, puis change la couleur en prédéfini avec les scripts/règles Openhab via l'API REST. Ensuite, si la photorésistance détecte que l'éclairage principal est éteint, le script lit le contenu des fichiers sauvegardés auparavant et restaure la couleur et la luminosité des LED précédentes. Ce script gère les photorésistances et les commandes d'envoi mais la plupart des actions se déroulent sur Openhab.

Si quelqu'un a des suggestions, je serais ravi de les voir ici.

#!/usr/local/bin/python 
import RPi.GPIO as GPIO, time 
from subprocess import call 
import smbus 
import time 
import urllib 
import urllib2 
import json 
import requests 
from ctypes import c_short 



GPIO.setmode(GPIO.BCM) 

def RCtime (PiPin): 
    measurement = 0 
    # Discharge capacitor 
    GPIO.setup(PiPin, GPIO.OUT) 
    GPIO.output(PiPin, GPIO.LOW) 
    time.sleep(0.1) 

    GPIO.setup(PiPin, GPIO.IN) 

    while (GPIO.input(PiPin) == GPIO.LOW): 
    measurement += 1 

    return measurement 

def LIGHTcheck(): # Checking photoresistor Values, and defining Variables as True/False: 
    if RCtime(27)<150: 
     LIGHT = True 
     return LIGHT 

    if RCtime(27)>150: 
     LIGHT = False 
     return LIGHT 

def LIGHTstatusSaveColor(): # Saving Color State to file: 
    urllib.urlretrieve('http://openhab-server:8080/rest/items/Light_scene/state', 'color.log') 

def LIGHTstatusSaveDimmer(): # Saving Brightness State to file: 
    urllib.urlretrieve('http://openhab-server:8080/rest/items/Brightness_switch/state', 'dimmer.log') 

def LightON(): 
     url = 'http://openhab-server:8080/CMD?Light_scene=43' # Openhab Command to switch color to predefined, in my case "Light_scene" with predefined responses trough Openhab scripts/rules: 
     resp = requests.get(url=url)   


def LightOFFcolor(): # Reading state of color from previously saved file and sending command to Openhab to change color to Value from before Turning Main Lighting on: 
     f = open("color.log", "r") 
     content1 = f.read() 
     # print(content1) 
     url = 'http://openhab-server:8080/CMD?' 
     postdata = {"Light_scene":content1} 
     # print(postdata) 
     resp = requests.get(url=url, params=postdata) 
     f.close() 

def LightOFFdimmer(): # Reading state of brightness from previously saved file and sending command to Openhab to change brightness to Value from before Turning Main Lighting on: 
     f = open("dimmer.log", "r") 
     content2 = f.read() 
     # print(content2) 
     url = 'http://openhab-server:8080/CMD?' 
     postdata = {"Brightness_switch":content2} 
     # print(postdata) 
     resp = requests.get(url=url, params=postdata)   
     f.close() 


waiting_for_high_value = True 

while True: # Loop Waiting for value change, then executing suitable Function: 
    if waiting_for_high_value: 
     if LIGHTcheck() == True: 
      print LIGHTcheck() 
      LIGHTstatusSaveColor() 
      LIGHTstatusSaveDimmer()    
      LightON() 
      waiting_for_high_value = False 
    else: 
     if LIGHTcheck() == False: 
      print LIGHTcheck() 
      LightOFFcolor() 
      time.sleep(2.0) 
      LightOFFdimmer() 
      waiting_for_high_value = True