Hallo Mike,
deinem Ansatz werde ich folgen.
Da mein Sensor aber keine sauberen Werte liefert (Gruss nach Fernost...),
brauche ich den höchsten Wert der zehn Messungen.
Ich werde also noch umbauen müssen.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Logik Problem
Einklappen
X
-
Hallo,
Ich hab den SR04 Sensor bei mir auch erfolgreich am laufen, ich messe damit den Salzinhalt meiner Enthärtungsanlage.
Der Code macht 10 Messungen, und schreibt den Mittelwert dann in ein item.
Logik wird mit Crontab 1x am Tag ausgeführt.
Gruß, Mike
Code:
Code:#!/usr/bin/env python3 # import time import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) trig=33 echo=35 GPIO.setup(echo,GPIO.IN) GPIO.setup(trig,GPIO.OUT) voll=10 # 50 cm von Sensor bis Wasseroberfläche = voll leer=70 # 230 cm von Sensor bis Wasseroberfläche= leer entfernung=0 gesamt=0 #Größe = 46x30x80 LxBxH #liter_pro_cm=3.1415*112.5*112.5*1/1000 #pi * radius * radius * 1cm /1000 sonst milliliter liter_pro_cm=46*30*1/1000 #Länge x Breite x Höhe /1000 sonst milliliter #print ("Liter pro cm: ",liter_pro_cm) for i in range(0,10): GPIO.output(trig,True) time.sleep(0.00001) GPIO.output(trig,False) start=time.time() while GPIO.input(echo) == 0: start=time.time() while GPIO.input(echo) == 1: ende = time.time() entfernung=((ende - start) * 34300) / 2 #print (entfernung) gesamt=gesamt+entfernung time.sleep(0.75) mittelwert=round(gesamt/10, 2) volumen=round((leer-mittelwert)*liter_pro_cm, 2) GPIO.cleanup() sh.enthaerter.mittelwert(mittelwert) sh.enthaerter.volumen(volumen)
Einen Kommentar schreiben:
-
Versuch Mal, eine Funktion def main() um alles zu machen.
Kann ich selbst gerade nicht ausprobieren.
Einen Kommentar schreiben:
-
Hallo,
@psilo:
ich glaube das Plugin hilft mir hier nicht weiter. Trotzdem danke für den Tip.
@Msinn:
ich hätts wie in der folgenden Fehlermeldung umgesetzt:
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(logics.measure()) # Messung starten
NameError: name 'logics' is not defined
Einen Kommentar schreiben:
-
Ich habe Logiken mit Funktionen drin, bin aber vereinzelt auch auf dieses Problem gestoßen. Das ist so lange her, dass ich im Moment nicht mehr sagen kann wie ich es gelöst habe.
Das Problem tritt auf, wenn man in einer Funktion eine Funktion aufruft, die man in der Logik definiert hat. Das hängt mit dem Namensraum zusammen. Ohne es getestet zu haben: Probier mal die Funktion mit logic. oder logics. davor aus.
Einen Kommentar schreiben:
-
gpio plugin evtl? https://github.com/smarthomeNG/plugins/tree/master/gpio
Einen Kommentar schreiben:
-
eine andere Möglichkeit die gemessenen Werte in ein Item zu bekommen gibts ja so nicht oder? Ich muss es ja über etc/logic.yaml laufen lassen?
Mal abgesehen von "zuerst in eine Textdatei übergeben" und dann "von Textdatei wieder auslesen in Item......
Einen Kommentar schreiben:
-
Hallo Bernd,
danke für die Info.
hm, schade. Ich versuch es dann auch flach. Hab schon dran gedacht dass das wohl in Frage kommt.
Werden dann nur die def Methoden unterstützt die auch in der Doku auf smarthomeNG.de stehen?
Einen Kommentar schreiben:
-
Das ist IMHO eine Limitation in Python der durch die Einbindung mit exec entsteht. Ich habe so etwas ähnliches auch mal probiert, habe das aber nicht hinbekommen.
Damals war die Antwort vom Urvater Marcus ich müßte halt ein Plugin schreiben und dort die benötigten Funktionen einbauen. Ich habe dann einfach alles flach gemacht ohne Unterroutinen und es ging.
Kannst ja mal testen ob das für Dich erstmal eine Lösung wäre.
Einen Kommentar schreiben:
-
Logik Problem
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....:
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
Vielen Dank im voraus!Stichworte: -
Einen Kommentar schreiben: