cbpi4 Plugin: Schwimmerschalter
- hiasl
- Posting Freak
- Beiträge: 1948
- Registriert: Samstag 9. Juni 2007, 12:03
- Wohnort: Kulmbach
- Kontaktdaten:
cbpi4 Plugin: Schwimmerschalter
Hallo zusammen,
ich möchte ein Plugin erstellen, das einen Schwimmerschalter im Läutergrant als Sensor darstellt.
Der Schalter ist an einem GPIO angeschlossen (Falling Edge).
Zunächst soll über den Sensor eine Vollmeldung eingehen. Hierz könnte der Sensor den Wert 1 annehmen, wenn geschaltet. Wäre es auch möglich, eine Dashboard-LED leuchten zu lassen, die ja eigentlich an Aktoren gebunden ist? Hat da jemand einen Tip?
Edit:
Ich habe das mittlerweile geschafft:
Habe einen Dummy-Actor eingerichtet mit dem die LED getriggert wird und beim Sensor einen Aktor eingebunden.
Jetzt fehlt mir noch die Umsetzung dass ein Actor immer dann für eine bestimmte Zeit einen anderen Actor schaltet, wenn der Sensor 1 zeigt. Bin gerade am fummeln.
ich möchte ein Plugin erstellen, das einen Schwimmerschalter im Läutergrant als Sensor darstellt.
Der Schalter ist an einem GPIO angeschlossen (Falling Edge).
Zunächst soll über den Sensor eine Vollmeldung eingehen. Hierz könnte der Sensor den Wert 1 annehmen, wenn geschaltet. Wäre es auch möglich, eine Dashboard-LED leuchten zu lassen, die ja eigentlich an Aktoren gebunden ist? Hat da jemand einen Tip?
Edit:
Ich habe das mittlerweile geschafft:
Habe einen Dummy-Actor eingerichtet mit dem die LED getriggert wird und beim Sensor einen Aktor eingebunden.
Jetzt fehlt mir noch die Umsetzung dass ein Actor immer dann für eine bestimmte Zeit einen anderen Actor schaltet, wenn der Sensor 1 zeigt. Bin gerade am fummeln.
Gruß
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
- hiasl
- Posting Freak
- Beiträge: 1948
- Registriert: Samstag 9. Juni 2007, 12:03
- Wohnort: Kulmbach
- Kontaktdaten:
Re: cbpi4 Plugin: Schwimmerschalter
Hallo zusammen,
ich komme gerade mit dem Actor irgendwie nicht weiter.
Der Code soll als Actor folgendes machen:
Warten auf Sensor Wert 1, dann die Pumpe für x Sekunden laufen lassen. Zwischenzeitlich sollte der Sensor wieder 0 zeigen.
Der Sensor funktioniert. Der Schwimmerschalter wechselt je nach Stellung die Werte 0 und 1.
Kann mit bitte jemand helfen?
ich komme gerade mit dem Actor irgendwie nicht weiter.
Code: Alles auswählen
@parameters([Property.Actor(label="Pump", description="Select the actor you would like to add a dependency to."),
Property.Sensor(label="SensorDependency", description="Select the sensor that the base actor will depend upon."),
Property.Number(label="Time", description="Time in seconds the actor will be triggered for pumping wort.")])
class TimedPump(CBPiActor):
def on_start(self):
self.state = False
self.pump = self.props.get("Pump", None)
self.sensor_dependency = self.props.get("SensorDependency", None)
self.time = self.props.get("Time", 0)
pump_actor = self.cbpi.actor.find_by_id(self.pump)
sensor_dep = self.cbpi.sensor.find_by_id(self.sensor_dependency)
self.init = False
pass
async def on(self, power=0):
self.state = True
async def off(self):
logger.info("ACTOR %s OFF " % self.pump)
await self.cbpi.actor.off(self.pump)
self.state = False
def get_state(self):
return self.state
async def run(self):
if self.init == False:
if self.pump is not None:
await self.cbpi.actor.off(self.pump)
self.state = False
self.init = True
while self.running == True:
if self.state == True:
sensor_val = self.cbpi.sensor.get_sensor_value(self.sensor_dependency).get("value")
try:
pump_actor_state = pump_actor.instance.state
except:
pump_actor_state = False
if (sensor_val == 1) and (pump_actor_state == False):
await self.cbpi.actor.on(self.pump)
await asyncio.sleep(self.time)
else:
await self.cbpi.actor.off(self.pump)
Logger.info("Sensor Value = %s" % sensor_val)
else:
await asyncio.sleep(1)
Warten auf Sensor Wert 1, dann die Pumpe für x Sekunden laufen lassen. Zwischenzeitlich sollte der Sensor wieder 0 zeigen.
Der Sensor funktioniert. Der Schwimmerschalter wechselt je nach Stellung die Werte 0 und 1.
Kann mit bitte jemand helfen?
Gruß
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Re: cbpi4 Plugin: Schwimmerschalter
Hi,
was tut der Code schon und was geht noch nicht ?
Gruß JackFrost
was tut der Code schon und was geht noch nicht ?
Gruß JackFrost
Meine Hardware:
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
- hiasl
- Posting Freak
- Beiträge: 1948
- Registriert: Samstag 9. Juni 2007, 12:03
- Wohnort: Kulmbach
- Kontaktdaten:
Re: cbpi4 Plugin: Schwimmerschalter
Die def off Funktion funktioniert. Ansonsten eben nichts.
Gruß
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Re: cbpi4 Plugin: Schwimmerschalter
Du willst bei dem Wechsel Sensor 0 auf 1 die Pumpe für x Sekunden laufen lassen , oder ?
Wo wird sensor_val auf 0 gesetzt wenn die Pumpe gestartet wurde ?
Die Pumpe ist nicht anderweitig aktiv oder ? Wenn sie das wäre würde sie dann abgeschalten werden.
Am einfachsten machst du das mit einer Flankenerkennung von Sensor_val.
Du brauchst eine Hilfsvariable die den Status speichert die müsste global in der Klasse sein, so das sie gespeichert wird.
Die Erkennung startet die Pumpe bei einer Flanke auf true.
Ich hab schon lang keine Python mehr geschrieben und Python und ich sind keine Freunde daher ist der Code ungetestet.
Damit ist es nur von sensor_val abhängig.
Wenn nach den x laufzeit aber der Sensor keine 0 liefert startet die Pumpe nicht mehr neu, da das xor über den alten Zustand 0 bleibt.
Gruß JackFrost
Wo wird sensor_val auf 0 gesetzt wenn die Pumpe gestartet wurde ?
Code: Alles auswählen
if (sensor_val == 1) and (pump_actor_state == False):
Am einfachsten machst du das mit einer Flankenerkennung von Sensor_val.
Du brauchst eine Hilfsvariable die den Status speichert die müsste global in der Klasse sein, so das sie gespeichert wird.
Die Erkennung startet die Pumpe bei einer Flanke auf true.
Ich hab schon lang keine Python mehr geschrieben und Python und ich sind keine Freunde daher ist der Code ungetestet.
Code: Alles auswählen
if (sensor_val^sensor_val_old) and (sensor_val == 1)
await self.cbpi.actor.on(self.pump)
await asyncio.sleep(self.time)
else:
await self.cbpi.actor.off(self.pump)
sensor_val_old = sensor_val
Wenn nach den x laufzeit aber der Sensor keine 0 liefert startet die Pumpe nicht mehr neu, da das xor über den alten Zustand 0 bleibt.
Gruß JackFrost
Meine Hardware:
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
eManometer
IDS2 ohne CBPi
Magnetrührer
Ss-Brewtech 10 Gal Topf
IDS2 Induktionsplatte
- hiasl
- Posting Freak
- Beiträge: 1948
- Registriert: Samstag 9. Juni 2007, 12:03
- Wohnort: Kulmbach
- Kontaktdaten:
Re: cbpi4 Plugin: Schwimmerschalter
Hi Jack,
der Sensor wird ausgelesen.
Aktuell habe ich das in folgender Schleife drin:
Code: Alles auswählen
async def on(self, power=None):
self.state = True
while self.state is True:
sensor_val = self.cbpi.sensor.get_sensor_value(self.sensor_dependency).get("value")
if sensor_val == 1:
await self.cbpi.actor.on(self.pump)
await asyncio.sleep(self.time)
else:
await self.cbpi.actor.off(self.pump)
await asyncio.sleep(1)
Das ist der Auszug aus dem Log:
Code: Alles auswählen
2022-07-16:00:41:03,854 INFO [actor_controller.py:16] Power is none << 1. Klick
2022-07-16:00:41:08,971 INFO [actor_controller.py:16] Power is none << 2. Klick
2022-07-16:00:41:08,974 INFO [web_log.py:206] 192.168.1.100 [15/Jul/2022:22:41:08 +0000] "POST /actor/gnhfNhALKjuYZ79EfqN9Mq/on HTTP/1.1" 204 98 "http://craftbeerpi:8000/cbpi_ui/static/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0" << jetzt wird er grün
2022-07-16:00:41:13,412 INFO [__init__.py:105] ACTOR a34yoDBwhevyoAPLM7QZhe OFF
2022-07-16:00:41:13,417 INFO [web_log.py:206] 192.168.1.100 [15/Jul/2022:22:41:13 +0000] "POST /actor/gnhfNhALKjuYZ79EfqN9Mq/off HTTP/1.1" 204 98 "http://craftbeerpi:8000/cbpi_ui/static/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0" << beim Ausschalten geht er korrekt aus
2022-07-16:00:41:13,875 INFO [web_log.py:206] 192.168.1.100 [15/Jul/2022:22:41:03 +0000] "POST /actor/gnhfNhALKjuYZ79EfqN9Mq/on HTTP/1.1" 204 98 "http://craftbeerpi:8000/cbpi_ui/static/index.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0" << was soll das?
Gruß
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
- hiasl
- Posting Freak
- Beiträge: 1948
- Registriert: Samstag 9. Juni 2007, 12:03
- Wohnort: Kulmbach
- Kontaktdaten:
Re: cbpi4 Plugin: Schwimmerschalter
Vielleicht hat ja Alex Mal einen kleinen Augenblick, mir Input zu geben?
So wie es aussieht verstehe ich nicht, wie ich die Schleife richtig platziere, um nach dem Aktivieren des Aktors kontinuierlich den zweiten Aktor an und ausschalten kann je nach Wert des Sensors. Obiger Code hat das Problem beim Aktivieren, schaltet aber, sobald der Sensor 1 zeigt. Jedoch funktioniert das Abschalten dann nicht.
Gruß
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Re: cbpi4 Plugin: Schwimmerschalter
Kannst du das bitte mal in einem Repo ablegen. Dann kann ich es mal klonen und testen.hiasl hat geschrieben: ↑Samstag 16. Juli 2022, 07:34
Vielleicht hat ja Alex Mal einen kleinen Augenblick, mir Input zu geben?
So wie es aussieht verstehe ich nicht, wie ich die Schleife richtig platziere, um nach dem Aktivieren des Aktors kontinuierlich den zweiten Aktor an und ausschalten kann je nach Wert des Sensors. Obiger Code hat das Problem beim Aktivieren, schaltet aber, sobald der Sensor 1 zeigt. Jedoch funktioniert das Abschalten dann nicht.
EDIT:
Und eine genauere Beschreibung, was das plugin machen soll wäre noch hilfreich.
- Was muss der User machen?
- Was soll automatisch gehen?
- Welches Ereignis löst was aus?
Braumeister 20 | Gärung: SS Brewtech 7 Gal BME | Speidel 30 Liter (Konus)
https://github.com/PiBrewing
https://openbrewing.gitbook.io/craftbeerpi4_support/
https://github.com/PiBrewing
https://openbrewing.gitbook.io/craftbeerpi4_support/
- hiasl
- Posting Freak
- Beiträge: 1948
- Registriert: Samstag 9. Juni 2007, 12:03
- Wohnort: Kulmbach
- Kontaktdaten:
Re: cbpi4 Plugin: Schwimmerschalter
https://github.com/hopfenhuhn/cbpi4_FloatingSwitchmrhyde hat geschrieben: ↑Samstag 16. Juli 2022, 13:39 Kannst du das bitte mal in einem Repo ablegen. Dann kann ich es mal klonen und testen.
EDIT:
Und eine genauere Beschreibung, was das plugin machen soll wäre noch hilfreich.
- Was muss der User machen?
- Was soll automatisch gehen?
- Welches Ereignis löst was aus?
Also das Plugin soll folgendes machen:
Sensor: Abfragen eines GPIO.IN ob ein Schwimmerschalter schließt. (Läutergrant voll)
Der Sensor tut das auch soweit. Im Sensor kann dann noch ein Aktor definiert werden, der anstelle des Sensor Werts (0, 1) eben eine LED im Dashboard zum Leuchten bringt (z.B. Dummy Actor) o.ä.
Actor: Nach seiner Aktivierung soll der Aktor durch kontinuierliches Abrufen des Sensorwerts im Falle von 1 einen weiteren Aktor für eine beliebige Zeit aktivieren, um z.B. den Läutergrand leerzupumpen.
Gruß
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
- hiasl
- Posting Freak
- Beiträge: 1948
- Registriert: Samstag 9. Juni 2007, 12:03
- Wohnort: Kulmbach
- Kontaktdaten:
Re: cbpi4 Plugin: Schwimmerschalter
Es kommt mir fast so vor, als wenn die Funktion def run(self) gar nichts macht. Oder wie kann man das prüfen? Die Routine sollte doch eigentlich mit "while self.running is True" dauerhaft weiterlaufen, oder?
Edit: Ich habe das Schalten der Pumpe mal in den Sensor integriert. Da geht das einwandfrei! Ich würde jedoch lieber die Routine in einen Aktor packen, da der Sensor ja eigentlich der falsche Ort dafür ist. Außerdem kann man einen Aktor an und ausschalten und ist somit nicht vom Sensor dauerhaft abhängig.
Edit: Ich habe das Schalten der Pumpe mal in den Sensor integriert. Da geht das einwandfrei! Ich würde jedoch lieber die Routine in einen Aktor packen, da der Sensor ja eigentlich der falsche Ort dafür ist. Außerdem kann man einen Aktor an und ausschalten und ist somit nicht vom Sensor dauerhaft abhängig.
Gruß
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Re: cbpi4 Plugin: Schwimmerschalter
self.run laüft schon. Es funktioneirt auch beim GPIOActor: https://github.com/avollkopf/craftbeerp ... t__.py#L78hiasl hat geschrieben: ↑Dienstag 19. Juli 2022, 00:20 Es kommt mir fast so vor, als wenn die Funktion def run(self) gar nichts macht. Oder wie kann man das prüfen? Die Routine sollte doch eigentlich mit "while self.running is True" dauerhaft weiterlaufen, oder?
Edit: Ich habe das Schalten der Pumpe mal in den Sensor integriert. Da geht das einwandfrei! Ich würde jedoch lieber die Routine in einen Aktor packen, da der Sensor ja eigentlich der falsche Ort dafür ist. Außerdem kann man einen Aktor an und ausschalten und ist somit nicht vom Sensor dauerhaft abhängig.
Ich schaue mir das an. Gib mir aber etwas zeit, da ich diese WOche in einer Schulung sitze.
Alex
Braumeister 20 | Gärung: SS Brewtech 7 Gal BME | Speidel 30 Liter (Konus)
https://github.com/PiBrewing
https://openbrewing.gitbook.io/craftbeerpi4_support/
https://github.com/PiBrewing
https://openbrewing.gitbook.io/craftbeerpi4_support/
Re: cbpi4 Plugin: Schwimmerschalter
Dein Problem liegt hier:hiasl hat geschrieben: ↑Dienstag 19. Juli 2022, 00:20 Es kommt mir fast so vor, als wenn die Funktion def run(self) gar nichts macht. Oder wie kann man das prüfen? Die Routine sollte doch eigentlich mit "while self.running is True" dauerhaft weiterlaufen, oder?
Edit: Ich habe das Schalten der Pumpe mal in den Sensor integriert. Da geht das einwandfrei! Ich würde jedoch lieber die Routine in einen Aktor packen, da der Sensor ja eigentlich der falsche Ort dafür ist. Außerdem kann man einen Aktor an und ausschalten und ist somit nicht vom Sensor dauerhaft abhängig.
Code: Alles auswählen
def on_start(self):
self.state = False
self.pump = self.props.get("Pump.........
Code: Alles auswählen
async def on_start(self):
self.state = False
self.pump = self.props.get("Pump.....
Alex
Braumeister 20 | Gärung: SS Brewtech 7 Gal BME | Speidel 30 Liter (Konus)
https://github.com/PiBrewing
https://openbrewing.gitbook.io/craftbeerpi4_support/
https://github.com/PiBrewing
https://openbrewing.gitbook.io/craftbeerpi4_support/
- hiasl
- Posting Freak
- Beiträge: 1948
- Registriert: Samstag 9. Juni 2007, 12:03
- Wohnort: Kulmbach
- Kontaktdaten:
Re: cbpi4 Plugin: Schwimmerschalter
Manchmal sieht man den Wald vor Bäumen nicht.
Danke.
Eine Frage noch: Wie lautet denn der Befehl zum abfragen des Status eines anderen Actors?
Da hängts gerade noch.
Gruß
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
- hiasl
- Posting Freak
- Beiträge: 1948
- Registriert: Samstag 9. Juni 2007, 12:03
- Wohnort: Kulmbach
- Kontaktdaten:
Re: cbpi4 Plugin: Schwimmerschalter
Sorry, hatte das wohl schon korrekt, aber aufgrund eines falsch konfigurierten Sensors/Aktors nicht korrekt angezeigt bekommen.
Code: Alles auswählen
self.dashboardled = self.props.get("Dashboard-LED", None)
(...)
self.actor_led = self.cbpi.actor.find_by_id(self.dashboardled)
actor_led_state = self.actor_led.instance.state
Gruß
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!
Matthias
-----------------------------------------------------------------------------------------
Mehr vom Bier wissen, heißt: Mehr vom Bier haben!