Dateien nach "/" hochladen
check in
This commit is contained in:
43
relays.py
Normal file
43
relays.py
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#import RPi.GPIO as GPIO
|
||||||
|
import time
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
Relay = [5, 6, 13, 16, 19, 20, 21, 26]
|
||||||
|
All_Relays = "5,6,13,16,19,20,21,26"
|
||||||
|
ON = 1
|
||||||
|
OFF = 0
|
||||||
|
# GPIO.HIGH -> relay off
|
||||||
|
# GPIO.LOW -> relay on
|
||||||
|
|
||||||
|
#GPIO.setmode(GPIO.BCM)
|
||||||
|
#GPIO.setwarnings(False)
|
||||||
|
|
||||||
|
|
||||||
|
def init():
|
||||||
|
# alle Relais auf output und ausschalten
|
||||||
|
res = subprocess.run(["pinctrl", All_Relays, "op", "dh"])
|
||||||
|
|
||||||
|
|
||||||
|
def on(id):
|
||||||
|
# GPIO.output(Relay[id], GPIO.LOW)
|
||||||
|
res = subprocess.run(["pinctrl", f"{Relay[id]}", "op", "dl"])
|
||||||
|
|
||||||
|
def off(id):
|
||||||
|
# GPIO.output(Relay[id], GPIO.HIGH)
|
||||||
|
res = subprocess.run(["pinctrl", f"{Relay[id]}", "op", "dh"])
|
||||||
|
|
||||||
|
def setOnOff(id, state):
|
||||||
|
if state==ON:
|
||||||
|
on(id)
|
||||||
|
elif state==OFF:
|
||||||
|
off(id)
|
||||||
|
|
||||||
|
def onoffstatus(id):
|
||||||
|
res = subprocess.run(["pinctrl", "lev", f"{Relay[id]}"], capture_output=True, text=True)
|
||||||
|
if res.returncode == 0:
|
||||||
|
out = int(res.stdout)
|
||||||
|
if out == 1:
|
||||||
|
return OFF
|
||||||
|
if out == 0:
|
||||||
|
return ON
|
||||||
|
raise ValueError
|
||||||
40
sensors.py
Normal file
40
sensors.py
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
import smbus2
|
||||||
|
import bme280
|
||||||
|
import time
|
||||||
|
|
||||||
|
# I2C bus ini initialisieren
|
||||||
|
bus = smbus2.SMBus(1)
|
||||||
|
|
||||||
|
class EnvironmentSensor:
|
||||||
|
def __init__(self, addr):
|
||||||
|
self.addr = addr
|
||||||
|
|
||||||
|
def temperature(self):
|
||||||
|
return bme280.sample(bus, self.addr).temperature
|
||||||
|
def humidity(self):
|
||||||
|
return bme280.sample(bus, self.addr).humidity
|
||||||
|
def pressure(self):
|
||||||
|
return bm2280.sample(bus, self.addr).pressure
|
||||||
|
|
||||||
|
env=[EnvironmentSensor(0x76), EnvironmentSensor(0x77)]
|
||||||
|
|
||||||
|
lightMeasurementTime=0.2
|
||||||
|
|
||||||
|
def readBH1750(bus, addr = 0x23):
|
||||||
|
bus.write_byte(addr, 0x01) # power on
|
||||||
|
bus.write_byte(addr, 0x20) # set high res onetime measurement mode
|
||||||
|
time.sleep(lightMeasurementTime) # 0.1 should already be enough time for measurement
|
||||||
|
data = bus.read_i2c_block_data(addr, 0, 2) # get measurement result
|
||||||
|
return ((data[0] << 8) + data[1]) / 1.2 # factor 1.2 is from sensor datasheet
|
||||||
|
|
||||||
|
|
||||||
|
def illuminance():
|
||||||
|
return readBH1750(bus)
|
||||||
|
|
||||||
|
def environment(sensor):
|
||||||
|
if sensor == 0:
|
||||||
|
return bme280.sample(bus, 0x76)
|
||||||
|
elif sensor == 1:
|
||||||
|
return bme280.sample(bus, 0x77)
|
||||||
|
else:
|
||||||
|
raise ValueError
|
||||||
128
zazalab.py
Normal file
128
zazalab.py
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
#!/home/ralf/python/zazalab/venv/bin/python
|
||||||
|
# -*- coding:utf-8 -*-
|
||||||
|
|
||||||
|
#import morse
|
||||||
|
import relays
|
||||||
|
import sensors
|
||||||
|
import time
|
||||||
|
#import RPi.GPIO as GPIO
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
class ArgumentParser(argparse.ArgumentParser):
|
||||||
|
def _check_value(self, action, value):
|
||||||
|
if value is action.default:
|
||||||
|
return
|
||||||
|
return super()._check_value(action, value)
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
env0 = sensors.environment(0)
|
||||||
|
env1 = sensors.environment(1)
|
||||||
|
lux = sensors.illuminance()
|
||||||
|
|
||||||
|
# Ausgabe der Messwerte
|
||||||
|
print("Sensor Umwelt 0:")
|
||||||
|
print(f"Temperatur: {env0.temperature:.2f} °C")
|
||||||
|
print(f"Luftfeuchtigkeit: {env0.humidity:.0f} %")
|
||||||
|
print(f"Luftdruck: {env0.pressure:.0f} hPa")
|
||||||
|
print()
|
||||||
|
|
||||||
|
print("Sensor Umwelt 1:")
|
||||||
|
print(f"Temperatur: {env1.temperature:.2f} °C")
|
||||||
|
print(f"Luftfeuchtigkeit: {env1.humidity:.0f} %")
|
||||||
|
print(f"Luftdruck: {env1.pressure:.0f} hPa")
|
||||||
|
|
||||||
|
print()
|
||||||
|
print("Sensor Beleuchtung:")
|
||||||
|
print(f"Beleuchtungsstärke: {lux:.2f} lux")
|
||||||
|
'''
|
||||||
|
|
||||||
|
def initFunc(args):
|
||||||
|
relays.init()
|
||||||
|
|
||||||
|
def setFunc(args):
|
||||||
|
for relay in args.relay:
|
||||||
|
if args.state == 'on':
|
||||||
|
relays.on(relay)
|
||||||
|
else:
|
||||||
|
relays.off(relay)
|
||||||
|
|
||||||
|
def getFunc(args):
|
||||||
|
if args.subparser == 'relay':
|
||||||
|
for i in args.relay:
|
||||||
|
if args.header == True:
|
||||||
|
print(f'Relay {i}:')
|
||||||
|
print(relays.onoffstatus(i))
|
||||||
|
return
|
||||||
|
if ['temperature', 'pressure', 'humidity', 'sensor'].count(args.subparser) != 0:
|
||||||
|
if args.unit == True:
|
||||||
|
units = ['°C', '%', 'mbar', 'lux']
|
||||||
|
else:
|
||||||
|
units = ['', '', '', '']
|
||||||
|
for i in args.sensortype:
|
||||||
|
if args.header == True:
|
||||||
|
print(f'Sensor {i}:')
|
||||||
|
if i < 2:
|
||||||
|
env = sensors.environment(i)
|
||||||
|
if args.subparser == 'temperature' or args.subparser == 'sensor':
|
||||||
|
print(f'{env.temperature:.2f} {units[0]}')
|
||||||
|
if args.subparser == 'humidity' or args.subparser == 'sensor':
|
||||||
|
print(f'{env.humidity:.2f} {units[1]}')
|
||||||
|
if args.subparser == 'pressure' or args.subparser == 'sensor':
|
||||||
|
print(f'{env.pressure:.2f} {units[2]}')
|
||||||
|
elif i == 2:
|
||||||
|
light = sensors.illuminance()
|
||||||
|
print(f'{light:0.0f} {units[3]}')
|
||||||
|
else:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
|
||||||
|
#relays.init()
|
||||||
|
|
||||||
|
# local ArgumentParser
|
||||||
|
parser = ArgumentParser(
|
||||||
|
prog = 'zazactl',
|
||||||
|
description = 'Auslesen der am Raspberry Pi angeschlossenen Sensoren und Steuerung der Relais.',
|
||||||
|
epilog = ''
|
||||||
|
)
|
||||||
|
|
||||||
|
subparsers = parser.add_subparsers(required = True)
|
||||||
|
subparserGet = subparsers.add_parser('get', help = 'type ''get -h'' for more help')
|
||||||
|
subparserGet.add_argument('-u', dest='unit', default=False, action='store_true', help='show values with units')
|
||||||
|
subparserGet.add_argument('-s', dest='header', default=False, action='store_true', help='show sensor number')
|
||||||
|
subparserGetSubs = subparserGet.add_subparsers(required = True, dest='subparser')
|
||||||
|
subparserGetTemperature = subparserGetSubs.add_parser('temperature')
|
||||||
|
subparserGetTemperature.add_argument('sensortype', metavar='sensornumber', type=int, choices=[0, 1], default=[0, 1], nargs='*', help='sensor number(s): 0, 1')
|
||||||
|
subparserGetTemperature.set_defaults(func = getFunc)
|
||||||
|
subparserGetHumidity = subparserGetSubs.add_parser('humidity')
|
||||||
|
subparserGetHumidity.add_argument('sensortype', metavar='sensornumber', type=int, choices=[0, 1], default=[0, 1], nargs='*', help='sensor number(s): 0, 1')
|
||||||
|
subparserGetHumidity.set_defaults(func = getFunc)
|
||||||
|
subparserGetPressure = subparserGetSubs.add_parser('pressure')
|
||||||
|
subparserGetPressure.add_argument('sensortype', metavar='sensornumber', type=int, choices=[0, 1], default=[0, 1], nargs='*', help='sensor number(s): 0, 1')
|
||||||
|
subparserGetPressure.set_defaults(func = getFunc)
|
||||||
|
subparserGetSensor = subparserGetSubs.add_parser('sensor')
|
||||||
|
subparserGetSensor.add_argument('sensortype', metavar='sensornumber', type=int, choices=[0, 1, 2], default=[0, 1, 2], nargs='*', help='sensor number(s): 0, 1, 2')
|
||||||
|
subparserGetSensor.set_defaults(func = getFunc)
|
||||||
|
subparserGetRelay = subparserGetSubs.add_parser('relay')
|
||||||
|
subparserGetRelay.add_argument('relay', metavar='relaynumber', type=int, choices=range(0,6), default=range(0,6), nargs='*', help='relay number(s): 0-7 (6 and 7 not connected to plugs)')
|
||||||
|
subparserGetRelay.set_defaults(func = getFunc)
|
||||||
|
|
||||||
|
subparserSet = subparsers.add_parser('set', help = 'set help')
|
||||||
|
subparserSetSubs = subparserSet.add_subparsers(required = True)
|
||||||
|
subparserSetRelay = subparserSetSubs.add_parser('relay')
|
||||||
|
subparserSetRelay.add_argument('relay', metavar = 'relaynumber', type=int, choices=range(0,6), nargs='*', default=range(0,6), help = 'relay number(s) in the range 0..7')
|
||||||
|
subparserSetRelay.add_argument('state', choices=('on', 'off'))
|
||||||
|
subparserSetRelay.set_defaults(func = setFunc)
|
||||||
|
|
||||||
|
subparserInit = subparsers.add_parser('init', help = 'init help')
|
||||||
|
subparserInit.set_defaults(func = initFunc)
|
||||||
|
args = parser.parse_args()
|
||||||
|
args.func(args)
|
||||||
|
|
||||||
|
'''
|
||||||
|
#relays.init()
|
||||||
|
#morse.morse("eis eis", 1)
|
||||||
|
for i in range(0, 8):
|
||||||
|
status = relays.onoffstatus(i)
|
||||||
|
print(f"no:{i}, status:{status}")
|
||||||
|
'''
|
||||||
Reference in New Issue
Block a user