Hm einen Schwimmschalter müsste ich halt richtig befestigen und mein Kanister steht schräg, sodass ich nur Wasser darin haben darf. Für einen Schwimmer evtl. zu wenig.
Beiträge von Waischno
-
-
Habe ein kleinen Hardwareproblem.
Um zu prüfen, ob der Kanister leer ist, habe ich einfach ein Kabel hineingesteckt und messe den Wiederstand bzw. Spannung. Wenn dieser zu hoch wird, ist der Kanister leer und die Ventile bleiben zu.
Leider korrodieren die Kabel sehr schnell. War auch irgendwie klar
Gibt es Sonden die ich einsetzen kann, oder sollte ich einen meiner kapazitiven Feuchtigkeitssensoren versenken?
-
Also ich habe jetzt einfach andere Variablen statt immer adc benutzt und es läuft ohne Warnung.
Ist zwar nicht schön, aber das ist mein Skript eh nicht
Vielen Dank für den Hinweis!
-
-
Hi deets,
hast recht sorry!
Habe nun noch eine Füllstandsabfrage mit aufgenommen und ein paar LEDs angeschlossen.
Die Warnung kommt immer noch mit diesem Code. Leider weiß ich nicht was du mit permanent GPIO Objekte erzeugen meinst.
Wo im Skript mache ich das?
Ich definiere die GPIO doch nur zu Beginn des Codes.
Code
Alles anzeigenimport time, gpiozero import RPi.GPIO as GPIO import thingspeak import datetime GPIO.setmode(GPIO.BCM) # up gelb GPIO.setup(23, GPIO.OUT) # mid grun GPIO.setup(24, GPIO.OUT) # down blau GPIO.setup(25, GPIO.OUT) #LED GPIO.setup(26, GPIO.OUT) #rot GPIO.setup(19, GPIO.OUT) #gelb GPIO.setup(13, GPIO.OUT) #gruen GPIO.setup(6, GPIO.OUT) #blau LimitUp=1.9 LimitMid=1.9 LimitDown=1.9 interval=0 channel_id = xxxx # PUT CHANNEL ID HERE w_key = 'xxxxxxxxxx' # PUT YOUR WRITE KEY HERE read_key = 'xxxxxxxxx' # PUT YOUR READ KEY HERE def measure(): try: print('------------') print ('{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime.now())) adc = gpiozero.MCP3008 (channel = 0) moisureUp = adc.voltage print ("Oben" , moisureUp) adc = gpiozero.MCP3008 (channel = 1) moisureMid = adc.voltage print ("Mitte" , moisureMid) adc = gpiozero.MCP3008 (channel = 2) moisureDown = adc.voltage print ("Unten" , moisureDown) # write response = channel.update({'field1': moisureDown, 'field2': moisureMid, 'field3': moisureUp}) # read read = channel.get({}) #Fuellstand if moisureUp > LimitUp or moisureMid > LimitMid or moisureDown > LimitDown: adc = gpiozero.MCP3008 (channel = 3) fuellstand = adc.voltage print ("Füllstand" ,fuellstand) if fuellstand > 0.8: GPIO.output(26, GPIO.LOW) #rote LED #Oben if moisureUp > LimitUp: GPIO.output(23, GPIO.LOW) GPIO.output(19, GPIO.HIGH) #gelbe LED print ("Oben offen") else: GPIO.output(23, GPIO.HIGH) GPIO.output(19, GPIO.LOW) #gelbe LED print ("Oben zu") #Mitte if moisureMid > LimitMid: GPIO.output(24, GPIO.LOW) GPIO.output(13, GPIO.HIGH) #gruene LED print ("Mitte offen") else: GPIO.output(24, GPIO.HIGH) GPIO.output(13, GPIO.LOW) #gruene LED print ("Mitte zu") #Unten if moisureDown > LimitDown: GPIO.output(25, GPIO.LOW) GPIO.output(6, GPIO.HIGH) #blaue LED print ("Unten offen") else: GPIO.output(25, GPIO.HIGH) GPIO.output(6, GPIO.LOW) #blaue LED print ("Unten zu") else: GPIO.output(26, GPIO.HIGH) #rote LED GPIO.output(23, GPIO.HIGH) GPIO.output(24, GPIO.HIGH) GPIO.output(25, GPIO.HIGH) print ("Kanister leer") except: print("connection failed") if __name__ == "__main__": channel = thingspeak.Channel(id=channel_id, api_key=w_key) while True: try: if interval<3: print(interval) measure() time.sleep(15) interval=interval+1 else: print('Wartet') GPIO.output(23, GPIO.HIGH) GPIO.output(24, GPIO.HIGH) GPIO.output(25, GPIO.HIGH) time.sleep(120) interval=0 print('Start') except KeyboardInterrupt: print('Stop') GPIO.output(23, GPIO.HIGH) GPIO.output(24, GPIO.HIGH) GPIO.output(25, GPIO.HIGH) GPIO.output(26, GPIO.LOW) #rot GPIO.output(19, GPIO.LOW) #gelb GPIO.output(13, GPIO.LOW) #gruen GPIO.output(6, GPIO.LOW) #blau break
-
Der Code ist genau der von Gestern 16:38
-
Ehrlich gesagt, verstehe ich nicht ganz, wann die Warnung kommt.
Sie tritt nur sporadisch auf nach dem das Programm in die Erste If Bedingung läuft.
Hier ein Beispiel:
Code
Alles anzeigen0 28.10.2020 19:09:02 1.7201270151441128 Oben zu 1.874890083048363 Mitte zu 1.7749389350268687 Unten zu Exception ignored in: <function GPIOBase.__del__ at 0x764c7390> Traceback (most recent call last): File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 151, in __del__ self.close() File "/usr/lib/python3/dist-packages/gpiozero/spi_devices.py", line 68, in close if getattr(self, '_spi', None): ReferenceError: weakly-referenced object no longer exists ------------ 1 28.10.2020 19:09:21 1.7201270151441128 Oben zu 1.8813385442110404 Mitte zu 1.7813873961895454 Unten zu ------------ 2 28.10.2020 19:09:38 1.7201270151441128 Oben zu 1.878114313629702 Mitte zu 1.7749389350268687 Unten zu Wartet Start ------------ 0 28.10.2020 19:11:37 1.7201270151441128 Oben zu 1.878114313629702 Mitte zu 1.765266243282853 Unten zu ------------ 1 28.10.2020 19:11:53 1.7201270151441128 Oben zu 1.8813385442110404 Mitte zu 1.778163165608207 Unten zu ------------ 2 28.10.2020 19:12:10 1.7201270151441128 Oben zu 1.874890083048363 Mitte zu 1.7749389350268687 Unten zu Wartet Start ------------ 0 28.10.2020 19:14:06 1.7201270151441128 Oben zu 1.878114313629702 Mitte zu 1.7749389350268687 Unten zu ------------ 1 28.10.2020 19:14:26 1.7201270151441128 Oben zu 1.8813385442110404 Mitte zu 1.778163165608207 Unten zu
-
Ich glaube ich habe es gelöst: (von der Thingspeak homepage)
Warning
- read_key and write_key have been replaced with api_key
Habe also einfach api_key=w_key gesetzt und es funktioniert.
Einen Fehler habe ich allerdings noch drin:
Exception ignored in: <function GPIOBase.__del__ at 0x75dd8150>
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 151, in __del__
self.close()
File "/usr/lib/python3/dist-packages/gpiozero/spi_devices.py", line 68, in close
if getattr(self, '_spi', None):
ReferenceError: weakly-referenced object no longer exists
-
Der Code sieht nun so aus:
Code
Alles anzeigenimport time, gpiozero import RPi.GPIO as GPIO import thingspeak import datetime GPIO.setmode(GPIO.BCM) # up gelb GPIO.setup(23, GPIO.OUT) # mid grun GPIO.setup(24, GPIO.OUT) # down blau GPIO.setup(25, GPIO.OUT) interval=0 channel_id = xxxxxxxxxx # PUT CHANNEL ID HERE w_key = 'xxxxxx' # PUT YOUR WRITE KEY HERE read_key = 'xxxxxxxxxx' # PUT YOUR READ KEY HERE def measure(): try: adc = gpiozero.MCP3008 (channel = 0) moisureUp = adc.voltage adc = gpiozero.MCP3008 (channel = 1) moisureMid = adc.voltage adc = gpiozero.MCP3008 (channel = 2) moisureDown = adc.voltage # write response = channel.update({'field1': moisureDown, 'field2': moisureMid, 'field3': moisureUp}) # read read = channel.get({}) print ('{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime.now())) #Oben print (moisureUp) if moisureUp > 1.8: GPIO.output(23, GPIO.LOW) print ("Oben offen") else: GPIO.output(23, GPIO.HIGH) print ("Oben zu") #Mitte print (moisureMid) if moisureMid > 1.8: GPIO.output(24, GPIO.LOW) print ("Mitte offen") else: GPIO.output(24, GPIO.HIGH) print ("Mitte zu") #Unten print (moisureDown) if moisureDown > 1.8: GPIO.output(25, GPIO.LOW) print ("Unten offen") else: GPIO.output(25, GPIO.HIGH) print ("Unten zu") except: print("connection failed") if __name__ == "__main__": channel = thingspeak.Channel(id=channel_id,write_key=w_key,api_key=read_key) while True: try: if interval<3: print('------------') print(interval) measure() time.sleep(15) interval=interval+1 else: print('Wartet') GPIO.output(23, GPIO.HIGH) GPIO.output(24, GPIO.HIGH) GPIO.output(25, GPIO.HIGH) time.sleep(100) interval=0 print('Start') except KeyboardInterrupt: print('Stop') GPIO.output(23, GPIO.HIGH) GPIO.output(24, GPIO.HIGH) GPIO.output(25, GPIO.HIGH) break
Habe Thingspeak mit sudo pip3 install thingspeak installiert und lasse es über python3 laufen
Damals hat es mit Python2 noch funktioniert, allerdings geht das mittlerweile auch nicht mehr.
Wenn ich es mit Python2 laufen lasse bekomme ich die Meldung, dass .Channel nicht existiert. Dann muss ich es klein schreiben und bekomme die folgende Fehlermeldung:
channel = thingspeak.channel(id=channel_id, write_key=w_key, api_key=read_key)
TypeError: __init__() got an unexpected keyword argument 'api_key'
Sorry wenn mein Code so schlimm aussieht. Bin nicht der geborene Programmierer
-
Ah mist, vor lauter Auskommentieren hab ich das verhunst.
Danke!
Jetzt bekomme ich den alten Fehler:
Traceback (most recent call last):
File "/home/pi/Python_Doc/Moisure4.py", line 69, in <module>
channel = thingspeak.Channel(id=channel_id, w_key=w_key, api_key=read_key)
TypeError: __init__() got an unexpected keyword argument 'w_key'
-
Danke für den Vorschlag, das funktioniert allerdings auch nicht
Hat sonst noch jemand eine Idee?
-
Hallo zusammen,
Nach ein paar Umbaumaßnahmen der "Hardware" wollte ich mich wieder dem Thema Thingspeak widmen.
Leider funktioniert das bisher immer noch nicht.
Wenn ich das Skript über Thonny oder das Terminal laufen lasse kommt:
Traceback (most recent call last):
File "/home/pi/Python_Doc/Moisure4.py", line 31
response = channel.update({'field1': moisureDown, 'field2': moisureMid, 'field3': moisureUp})
^
SyntaxError: invalid syntax
Ich habe das Gefühl, dass ich das Thingspeak Paket nicht richtig installiert habe.
In Thonny wird es allerdings als installiert angezeigt.
Mein Code hat sich nicht sehr verändert, dennoch hier nochmal zur Vollständigkeit:
Code
Alles anzeigenimport time, gpiozero import RPi.GPIO as GPIO import thingspeak import datetime GPIO.setmode(GPIO.BCM) # up gelb GPIO.setup(23, GPIO.OUT) # mid grün GPIO.setup(24, GPIO.OUT) # down blau GPIO.setup(25, GPIO.OUT) interval=0 channel_id = xxxxxxxxxxx # PUT CHANNEL ID HERE w_key = 'xxxxxxxxxxx' # PUT YOUR WRITE KEY HERE read_key = 'xxxxxxxxxxxxxx' # PUT YOUR READ KEY HERE def measure(): try: adc = gpiozero.MCP3008 (channel = 0) moisureUp = adc.voltage adc = gpiozero.MCP3008 (channel = 1) moisureMid = adc.voltage adc = gpiozero.MCP3008 (channel = 2) moisureDown = adc.voltage # write response = channel.update({'field1': moisureDown, 'field2': moisureMid, 'field3': moisureUp}) # read read = channel.get({}) print ('{:%d.%m.%Y %H:%M:%S}'.format(datetime.datetime.now())) #Oben print (moisureUp) if moisureUp > 1.8: GPIO.output(23, GPIO.LOW) print ("Oben offen") else: GPIO.output(23, GPIO.HIGH) print ("Oben zu") #Mitte print (moisureMid) if moisureMid > 1.8: GPIO.output(24, GPIO.LOW) print ("Mitte offen") else: GPIO.output(24, GPIO.HIGH) print ("Mitte zu") #Unten print (moisureDown) if moisureDown > 1.8: GPIO.output(25, GPIO.LOW) print ("Unten offen") else: GPIO.output(25, GPIO.HIGH) print ("Unten zu") except: print("connection failed") if __name__ == "__main__": channel = thingspeak.Channel(id=channel_id, w_key=w_key, api_key=read_key) while True: try: if interval<3: print('------------') print(interval) measure() time.sleep(15) interval=interval+1 else: print('Wartet') GPIO.output(23, GPIO.HIGH) GPIO.output(24, GPIO.HIGH) GPIO.output(25, GPIO.HIGH) time.sleep(100) interval=0 print('Start') except KeyboardInterrupt: print('Stop') GPIO.output(23, GPIO.HIGH) GPIO.output(24, GPIO.HIGH) GPIO.output(25, GPIO.HIGH) break
-
Hallo Zusammen,
ich habe das Problem bisher umgangen, indem ich es einfach mit Python2 laufen ließ.
Allerdings möchte ich nun das ganze mit einer GUI versehen und über Python3 laufen lassen.
Könnt ihr mir nochmals zu meiner obigen Fehlermeldung weiterhelfen?
Zitatchannel = thingspeak.Channel(id=channel_id, write_key=w_key, api_key=read_key)
TypeError: __init__() got an unexpected keyword argument 'write_key'
-
Es kommt der gleiche Fehler
Zitatchannel = thingspeak.Channel(id=channel_id, write_key=w_key, api_key=read_key)
TypeError: __init__() got an unexpected keyword argument 'write_key'
Wie kann ich nachschauen, ob thingspeak auf python3 richtig installiert wurde?
-
Es kommt
Zitat>>> %Run Moisure.py
Traceback (most recent call last):
File "/home/pi/Python_Doc/Moisure.py", line 32, in <module>
channel = thingspeak.Channel(id=channel_id, write_key=write_key, api_key=read_key)
TypeError: __init__() got an unexpected keyword argument 'write_key'
Das kommt wohl aus einer alten Version
Wie, bzw. mit welchem Befehl startest Du das Skript?
Wollte es eigentlich über Thonny starten. Geht aber auch nicht über das Terminal mit
-
Hallo Zusammen,
ich habe meinen Code wieder etwas erweitert.
Der funktioniert auch gut mit python2, allerdings nicht mit python3.
Habe thingspeak mit sudo pip3 install thingspeak installiert. War das falsch?
Code
Alles anzeigenimport time, gpiozero import RPi.GPIO as GPIO import thingspeak GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.OUT) channel_id = 972058 # PUT CHANNEL ID HERE write_key = 'xxxxxxxxxxx' # PUT YOUR WRITE KEY HERE read_key = 'xxxxxxxxxxx' # PUT YOUR READ KEY HERE def measure(channel): try: adc = gpiozero.MCP3008 (channel = 0) moisureDown = adc.voltage print (moisureDown) # write response = channel.update({'field1': moisureDown}) # read read = channel.get({}) print("Read:", read) if moisureDown > 2: GPIO.output(23, GPIO.HIGH) else: GPIO.output(23, GPIO.LOW) except: print("connection failed") if __name__ == "__main__": channel = thingspeak.Channel(id=channel_id, write_key=write_key, api_key=read_key) while True: measure(channel) time.sleep(30)
-
Hallo fred0815, Danke für dein Skript, mit diesem funktioniert es.
Kannst du mir sagen, was es macht?
Kann es sein, dass nicht Channel 0 ausgelesen wird?
Verkabelt ist es genau wie im Tutorial.
Wollte Python3 statt Python2 verwenden.. Dachte mir, neuer ist besser
Habe gerade sogar noch ein sehr einfaches Skript gefunden.
Leider habe ich immer noch keine Ahnung warum meins und das vom Tutorial nicht funktioniert.
-
Hallo Zusammen,
habe mir in der Zwischenzeit ein paar Utensilien zugelegt und die ersten Gehversuche unternommen.
Jetzt stehe ich aber schon vor dem ersten Problem.
Gerne möchte ich das analoge Signal des Feuchtigkeitssensors auslesen. Dafür habe ich mich an folgende Anleitung gehalten:
https://tutorials-raspberrypi.de/raspberry-pi-m…gnale-auslesen/
Sprich:
- SPI aktiviert
- python3-dev installiert
- spi-dev-master installiert
- neugestartet
- Code "kopiert"
Leider kommt bei mir immer eine 0 raus.
Daher habe ich mich nochmal auf die Suche gemacht und ein weiteres Skript erstellt.
Leider ebenfalls ohne Erfolg
Der Sensor an sich funktioniert.
Habe das ganze auch mal mit einer LED vor dem Channel 0 versucht. LED leuchtet aber kein Signal.
Welche Möglichkeit gibt es, den Fehler herauszufinden?
Kann ich irgendwie überprüfen, ob der MCP3008 richtig funktioniert und angesteuert wird?
Python
Alles anzeigenimport spidev from time import sleep import os spi=spidev.SpiDev() spi.open(0,0) moisure1Channel=0 def getReading(channel): rawData = spi.xfer([1, (8+channel)<<4,0]) processedData = ((rawData[1]&3)<<8) + rawData[2] return processedData while True: data=getReading(moisure1Channel) print(data) sleep(1)
-
Es wird wohl schon ein 12v System werden.
Mein Hauptproblem am Material ist erstmal ein geeignetes Ventil zu finden, dass sich stufenlos verstellen lässt, sodass ich den Tropf realisieren kann.
Ein Magnetventil ist binär oder?
Dann benötige ich eben noch ein Verteilerventil mit einem Eingang und 3 Ausgängen. Die können dann binär sein.
Ich dachte dabei an sowas: Wasserventil [Anzeige]
Welchsen Feuchtigkeitssensor würded ihr empfehlen? Den: Feuchtigkeitssensor [Anzeige]
-
Hallo Zusammen,
habe schon länger nichts mehr mit meinem Raspberry PI 3 angestellt und wollte nun ein neues Projekt starten.
Es geht um folgendes.
An meiner Wand hängt ein vertikaler Garten bestehend aus 3 Modulen von Karoo. Diese sind übereinander gesetzt.
Diese Module müssen einzeln bewässert werden.
Habe mir nun ein Tropfsystem aufgebaut, das von Hand umgeschalten werden muss
Zur Verdeutlichung habe ich eine Skizze erstellt.
Die meisten Bewässerungen die ich bisher gesehen habe werden mit Pumpen realisiert.
Allerdings möchte ich es über die potentielle Energie machen. Sprich der Wasserbehälter sollte über den Modulen sein.
Zum Einen funktioniert das System bisher sehr gut und zum Anderen würde ich Pumpen benötigen, die das Wasser in ca. 2,5m hoch pumpen können.
Könnt ihr mich ein bisschen bei der Hand nehmen, um das Projekt zu realisieren?
Zunächst brauche ich erstmal eine Einkaufsliste:1. Feuchtigkeitssensoren (3x), welchen würdet ihr empfehlen?
2. 3-Wege Vetnil, am Besten mit sufenloser Verstellung, sodasss ich darüber gleich den Tropf regeln kann.
3. Falls es 2 das nicht gibt brauch ich ein Ventil, das ich als Tropf verwenden kann
Welche Software würdet ihr empfehlen?
Wie ihr seht habe ich nicht sehr viel Erfahrung mit dem Raspberry.
Darum werden wohl noch einige Fragen folgen
Viele Grüße!