2017-03-21 4 views
1

Ich habe einen Fotowiderstand mit meinem Raspberry PI über einen 1uF Kondensator verbunden und ein einfaches Programm zur Überprüfung der Werte ausgeführt. Es sind meist zusammengeführte Skripte von anderen Programmen, die ich habe, also könnte es Buggy sein. Ich bin neu in diesem Zeug. Ich habe 2 Variablen festgelegt. Wenn der Wert des Fotowiderstandes unter 1000 liegt, ist es wahr, andernfalls ist es falsch. Ich würde meinen LED's durch JSON Befehl zum Openhab Server nicht steuern. Wenn der Fotowiderstand True liefert, sendet er den Befehl "ON" an Openhab, andernfalls sendet er den Befehl "OFF". Alles ist in Ordnung, außer einer Sache. Skript sendet Befehle an Openhab mit jedem Maß des Fotowiderstandswerts. Ich möchte, dass der Befehl erst dann "EIN" gesendet wird, wenn der Wert unter 1000 erkannt wird (True), dann bleibe dort und sende keine Befehle an Openhab, wenn der Fotowiderstand eine Ausgabe über 1000 (Falsch) usw. liefert. Hauptziel ist hier, die LED-Farbe zu ändern, wenn die Hauptbeleuchtung eingeschaltet ist, und sie zu ändern, wenn die Hauptbeleuchtung ausgeschaltet ist. Ich hoffe ich habe es gut erklärt. Bitte helfen Sie.Befehle an Openhab senden, abhängig von den Lichtsensorwerten Python Raspberry Pi

Mein aktuelles Programm:

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

Antwort

0

Ok. Ich habe es irgendwie herausgefunden. Wenn jemand jemals eine Lösung wie diese benötigt, hier ist ein laufendes Programm. Es ist kein professionelles Handwerk, also ist es wahrscheinlich fehlerhaft, testet immer noch. So etwas habe ich anderswo nicht gefunden, also besser als nichts.

KURZ: Wenn das Hauptlicht aus ist, wenn der Fotowiderstand feststellt, dass die Hauptbeleuchtung eingeschaltet ist, speichert das Skript die aktuellen Farb- und Helligkeitsstatus in Dateien und ändert dann die Farbe in die vordefinierten OpenHAB-Skripte über REST API. Wenn der Fotowiderstand dann erkennt, dass die Hauptbeleuchtung ausgeschaltet ist, liest das Skript den Inhalt der zuvor gespeicherten Dateien und stellt die vorherige Farbe und Helligkeit der LEDs wieder her. Dieses Skript handhabt Fotowiderstände und sendet Befehle, aber die meiste Aktion läuft auf Openhab ab.

Wenn jemand einige Vorschläge haben, würde ich mich freuen, sie hier zu haben.

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