Hallo zusammen,
mein SH/SV System läuft wie bei vielen auf einem Raspberry Pi wunderbar und das schon seit Jahren.
nun möchte ich über einen weiteren Pi per GPIO einen HC-SR04 Sensor Entfernungen messen.
Dazu habe ich mir aus dem Internet folgendes Script zusammen kopiert....:
Führe ich das Python Script per Hand aus, funktioniert es wunderbar, lasse ich es aber per etc/logic.yaml ausführen bekomme ich folgende Meldung im sh.log:
Kann mir BITTE jemand erklären wo der Fehler liegt und wie ich es lösen kann? Ich möchte es auch verstehen damit ich das beim nächsten mal selbst lösen kann.
Vielen Dank im voraus!
mein SH/SV System läuft wie bei vielen auf einem Raspberry Pi wunderbar und das schon seit Jahren.
nun möchte ich über einen weiteren Pi per GPIO einen HC-SR04 Sensor Entfernungen messen.
Dazu habe ich mir aus dem Internet folgendes Script zusammen kopiert....:
Code:
import RPi.GPIO as GPIO
import time
# GPIOs fuer den US-Sensor
GPIO.setmode(GPIO.BOARD)
TRIG = 18
ECHO = 24
# Dauer Trigger-Impuls
PULSE = 0.00001
# Anzahl Messwerte fuer Mittelwertbildung
BURST = 25
# Schallgeschwindigkeit/2
SPEED_2 = 17150
# BCM GPIO-Referenen verwenden (anstelle der Pin-Nummern)
# und GPIO-Eingang definieren
GPIO.setup(TRIG, GPIO.OUT)
GPIO.setup(ECHO, GPIO.IN)
GPIO.output(TRIG, False)
time.sleep(1) # Setup-Zeit fuer Sensor
def measure():
GPIO.output(TRIG, True) # Trigger-Impuls
time.sleep(PULSE)
GPIO.output(TRIG, False)
starttime = time.time() # Zeit initialisieren
stopp = starttime
start = starttime
# Warten auf steigende Flanke, max. 2 Sekunden
while GPIO.input(ECHO) == 0 and start < starttime + 2:
start = time.time() # Startzeit
# Warten auf fallende Flanke, max. 2 Sekunden
while GPIO.input(ECHO) == 1 and stopp < starttime + 2:
stopp = time.time() # Endezeit
delta = stopp - start # Zeitdifferenz und Entfernung berechnen
distance = delta * SPEED_2
return distance
def measure_range():
values = []
sum = 0
for i in range(0, 25):
values.append(measure()) # Messung starten
sum = sum + values[i] # Wert im Array speichern und aufsummieren
print("Messwert: %1.1f" % values[i]) # Kontrollausgabe
time.sleep(0.05)
sum = max(values)
return sum;
# do it
try:
# while True:
Distance = measure_range()
print("Range = %1.1f cm" % Distance)
time.sleep(1)
load = 12750 * (2 / Distance)
print("Inhalt = %3d " % (load))
sh.zisterne.level(load)
time.sleep(1)
GPIO.cleanup()
2018-07-23 14:46:01 ERROR logics.Logic_Zisterne Logic: logics.Logic_Zisterne, File: /usr/local/smarthome/logics/hcsr04.py, Line: 46, Method: measure_range, Exception: name 'measure' is not defined
Traceback (most recent call last):
File "/usr/local/smarthome/lib/scheduler.py", line 493, in _task
exec(obj.bytecode)
File "/usr/local/smarthome/logics/hcsr04.py", line 56, in <module>
Distance = measure_range()
File "/usr/local/smarthome/logics/hcsr04.py", line 46, in measure_range
values.append(measure()) # Messung starten
NameError: name 'measure' is not defined
Traceback (most recent call last):
File "/usr/local/smarthome/lib/scheduler.py", line 493, in _task
exec(obj.bytecode)
File "/usr/local/smarthome/logics/hcsr04.py", line 56, in <module>
Distance = measure_range()
File "/usr/local/smarthome/logics/hcsr04.py", line 46, in measure_range
values.append(measure()) # Messung starten
NameError: name 'measure' is not defined
Vielen Dank im voraus!


Kommentar