Hallo,
nach intensiver Suche in diversen Foren und vor allem hier, habe ich folgende Lösung im Einsatz.
Der Rahmen ist aus diesem Forum, die Sensoren habe ich eingefügt.
Matthias
#!/usr/bin/python
# -*- coding: latin-1 -*-
from MCP3008 import MCP3008
import RPi.GPIO as GPIO
import requests
import json
from requests.auth import HTTPBasicAuth
import time
import Adafruit_DHT
#####################################################################
#
# I2C vorbereiten
# wenn keine I2C-Sensoren im Einsatz, dann kommentieren
#
#####################################################################
# I2C-Daten
import Adafruit_GPIO.I2C as I2C
from time import sleep, strftime
from datetime import datetime
deviceAddr = 0x20 # fuer Chirp-Bodenfeuchtesensor
i2c = I2C.Device( deviceAddr, -1, False )
i2c = I2C.Device(deviceAddr,1)
#####################################################################
#
# JSON-RPC zu IPS definieren
#
#####################################################################
def IPSrpc(methodIps, paramIps):
url = "http://192.168.xxx.yyy:3777/api/" # IP-Adresse des Symcon-Servers und Port
auth=HTTPBasicAuth('emailaddresse', 'symconpassword') # Zugangsdaten
headers = {'content-type': 'application/json'}
payload = {
"method": methodIps,
"params": paramIps,
"jsonrpc": "2.0",
"id": "0",
}
response = requests.post(url, auth=auth, data=json.dumps(payload), headers=headers).json
try:
while True:
start_time = time.time()
#############################################################
#
# AM2302 auslesen
# GPIO17
#
#############################################################
sensor = Adafruit_DHT.AM2302
humidity, temperature = Adafruit_DHT.read_retry(sensor, 17)
print("Lufttemperatur : %.2f" % temperature)
print("Luftfeuchtigkeit : %.2f" % humidity)
# Variable z.B. 29863 in Symcon anlegen und hier eintragen
IPSrpc("SetValue", [29863, temperature])
IPSrpc("SetValue", [15622, humidity])
#############################################################
#
# VH400 auslesen
# GPIO08.09.10.11
#
#############################################################
adc = MCP3008()
value = adc.read( channel = 0 ) # auszulesender Channel
v400u = ( value / 1023.0 * 3.3 )
print("Anliegende Spannung : %.2f" % v400u)
v400f = ( value / 2.77 / 1023.0 * 3.3 * 100 )
print("Substratfeuchtigkeit : %.2f" % v400f)
vwc=(11.6552* v400u **4+7.10835* v400u **2-0.569557)/( v400u **2 + 1)
print("volumetrische Bodenfeuchte : %.2f" % vwc)
IPSrpc("SetValue", [46226, v400u])
IPSrpc("SetValue", [38013, v400f])
IPSrpc("SetValue", [54482, vwc])
#############################################################
#
# DS18B20 auslesen
# GPIO04
#
#############################################################
# 1-wire Slave Datei lesen Sensor_28-031655b44fff
file = open('/sys/bus/w1/devices/28-031655b44fff/w1_slave')
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("
")[1].split(" ")[9]
tempds = float(stringvalue[2:]) / 1000
# Temperatur ausgeben
print("Bodentemperatur : %.2f" % tempds)
IPSrpc("SetValue", [30772, tempds])
#############################################################
#
# I2C Chirp auslesen
# GPIO02.03
#
#############################################################
# reset sensor
i2c.write8( deviceAddr, 0x06 )
sleep(5)
# Helligkeit lesen
i2c.write8(deviceAddr, 3)
sleep(3)
light = i2c.readU16(4, False)
# Temperatur lesen
temp = i2c.readS16(5, False)/float(10)
# Bodenfeuchte lesen
moisture = i2c.readU16(0, False)
# Berechnungen
print "Chirp Temperature Moisture Brightness"
print str(temp) + " " + str(moisture) + " " + str(light)
IPSrpc("SetValue", [45574, temp])
IPSrpc("SetValue", [44157, moisture])
IPSrpc("SetValue", [19004, light])
#############################################################
end_time = time.time()
# delay = float(end_time - start_time)
# time.sleep(10 - delay)
time.sleep(10)
except KeyboardInterrupt:
GPIO.cleanup()
GPIO.cleanup() # clean up GPIO on normal exit