Ausgang bei erfüllter Bedingung frei definierte Anzahl X takten

Begonnen von MPunkt, 14 Juni 2020, 15:56:00

Vorheriges Thema - Nächstes Thema

MPunkt

Hallo zusammen.

Ich habe einen LED-Lichtschlauch mit verschiedenen Lichteffekten allerdings OHNE Memo-Funktion.
Das heißt, beim (Wieder)einschalten ist der erste (von acht) Lichteffekten aktiv.
Ausgewählt wird dann über einen Taster (drücken → nächste Effekt etc.)
Nun möchte ich den Raspi dazu verwenden, mit einem Ausgang den Lichtschlauch einzuschalten und
mit einem zweiten Ausgang einen definierten Effekt (über die Anzahl der Takte) anzuwählen.
Also:
wenn Bedingung erfüllt: schalte Lichtschlauch ein (Ausgang 1)
wenn Lichtschlauch ein: Takte x mal zum einstellen des Effektes (Ausgang 2)

Ist sowas denn überhaupt möglich oder muss ich das auf dem Raspi separat programmieren?

Sollte dieses Thema schon bearbeitet worden sein reicht ein link auf den thread — hab diesbezüglich
allerdings, auch mit der erweiterten Suche nichts gefunden.

Herzlichen Dank schon vorab für die Unterstützung.
Mit der Bitte um Nachsicht bei eventueller Mehrfachfrage

MPunkt

MadMax-FHEM

#1
Zitat von: MPunkt am 14 Juni 2020, 15:56:00
Ist sowas denn überhaupt möglich oder muss ich das auf dem Raspi separat programmieren?

Beides möglich ;)

Also in fhem (weil da geht [fast] alles) und bestimmt auch als shell-Script...

Erst mal Hinweise zum selbst probieren bzw. Fragen um (weiter)helfen zu können:

Wenn Bedingung erfüllt: welche Bedingung!?

Wenn es ein "Ereignis"/Event (in fhem) ist -> Notify/DOIF

Eventmonitor öffnen und auf geeignetes/bzw. "dieses" Ereignis "warten" markieren und anlegen lassen (create/modify)...

https://wiki.fhem.de/wiki/Event_monitor
https://wiki.fhem.de/wiki/Notify
https://wiki.fhem.de/wiki/DOIF
https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen


Ausgang setzen!?
Bereits in fhem eingebunden!?

Ja, dann einfach: set Ausgang1 on
(oder wie auch immer genau das set für das Device heißt)


Dann entweder eine Zeit warten ODER eben wieder auf das Event für "LEDs sind an" warten: notify/DOIF (siehe zuvor)


Eine schleife geht zwar auch in fhem ABER: entweder implementierst du diese "non blocking" ODER fhem "blockiert" solange die Schleife läuft...

Alternative (wenn immer selbe Anzahl und "quick&dirty"):

set Ausgang2 on;sleep1;set Ausgang2 off; ...

wäre "ein Takt"...

EDIT: wichtig! es müssen fhem-Sleeps sein. Klingt unverständlich/schlimm, isses aber nicht ;) Solange du "einfach" fhem set-Befehle abarbeitest, bist du (schwer vermutlich) auf fhem-Ebene und somit ist das Sleep (sehr wahrscheinlich) ein "ungefährliches" fhem-Sleep. Wichtig ist dann nur, dass am Ende IMMER ein letzter fhem-Befehl stehen muss! (wird aber mittlerweile auch "angemosert")...


Alternative:

unterstützt deine PI-Einbindung der Ausgänge setExtensions!?

Dann gibt es dort auch "Blink" usw.



Evtl. wäre auch LightSceene-Modul eine Möglichkeit...

https://wiki.fhem.de/wiki/LightScene


Du siehst: viel Möglich...
...fehlt nur noch (gewaltig) Input/Infos... ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MPunkt

Grüß Dich Joachim!

Vorneweg gleich mal ein Dankeschön für die rasche Antwort!
Die allerdings im ersten Moment »erschlagend« wirkt weil sooo viel Input...  ;)

Also die Bedingung zum schalten des ersten Ausgangs wäre die Uhrzeit. Meinetwegen
täglich um 18:00 Uhr Ausgang 1 setzen.
Und damit wäre das Licht auch schon an.
Das wäre dann die (zweite) Bedingung für den zweiten Ausgang.
Also Licht an, dann takte den zweiten Ausgang X mal. X steht dann dementsprechend
für den Lichteffekt der eingestellt werden soll (zwischen 1 und 7 Takten).
Wenn die Anzahl der Takte erreicht ist, dann ist auch die Aufgabe des zweiten Ausgangs erfüllt.
Erst, wenn Ausgang 1 wieder gesetzt wird kommt der Ausgang 2 ins Spiel und taktete wieder X mal.

Somit wäre für den Ausgang 1 ein "DOIF" nächstliegend.
Und für den Ausgang zwei eventuell auch → mit dem Unterschied einer Schleife als Ausführung.
X steht im Prinzip fest, Varianten wären dann in der entsprechenden Anzahl der Schleifen programmierbar.

Bei weiteren Fragen → einfach Fragen!

Werde mir gleich mal Deine Links zu Gemüte führen.

Nochmals besten Dank für Deine Vorschläge,
schönes Rest-WoE aus dem Schwarzwald

Markus

MadMax-FHEM

#3
Hallo Markus,

gerne und sorry ;)



Zitat von: MPunkt am 14 Juni 2020, 16:51:18
Also die Bedingung zum schalten des ersten Ausgangs wäre die Uhrzeit. Meinetwegen
täglich um 18:00 Uhr Ausgang 1 setzen.
Und damit wäre das Licht auch schon an.

Dafür würde ein 'at' reichen.

Z.B. (wobei nat. immer noch nicht klar ist WIE der Einschaltbefehl denn nun lautet/lauten muss, daher diesen Teil evtl. anpassen):


defmod atLichtEin at *18:00:00 set Ausgang1 on


https://wiki.fhem.de/wiki/At


Zitat von: MPunkt am 14 Juni 2020, 16:51:18
Und damit wäre das Licht auch schon an.
Das wäre dann die (zweite) Bedingung für den zweiten Ausgang.
Also Licht an, dann takte den zweiten Ausgang X mal. X steht dann dementsprechend
für den Lichteffekt der eingestellt werden soll (zwischen 1 und 7 Takten).
Wenn die Anzahl der Takte erreicht ist, dann ist auch die Aufgabe des zweiten Ausgangs erfüllt.
Erst, wenn Ausgang 1 wieder gesetzt wird kommt der Ausgang 2 ins Spiel und taktete wieder X mal.

Dafür "reicht" dann ein notify ;)

Frage: ist die Anzahl nun FIX oder nicht!?
Wenn fix, sagen wir mal 3x "Toggle", dann sowas (auch hier: unbekannt wie der Event aussieht für "Licht ist angegangen" -> EventMonitor):


defmod nLichtSequenz notify Ausgang1:on set Ausgang2 on;; sleep 1;; set Ausgang2 off;; sleep 1;; set Ausgang2 on;; sleep 1;; set Ausgang2 off;; sleep 1;; set Ausgang2 on;; sleep 1;; set Ausgang2 off


Die sleep halt anpassen und wenn mehr als 3, dann eben "verlängern"...
...die Eingaben sind jeweils gedacht für "Raw definition".
Entweder per "Plus" links oben...
...oder "irgendein Device" anklicken und dann (ganz) unten auf "Raw Definition".
Was drin steht einfach löschen (KEINE ANGST ;)  ) und dann einfügen und "Execute commands"...


Aber wie geschrieben: (very) Quick and Dirty!!
Wenn man wüsste wie die Einbindung ist, könnte (wie geschrieben) auch evtl. setExtensions genutzt werden...
Schleife mit "Unterbrechungen" geht nat. auch, ist aber etwas "komplizierter"...

Aber auch dafür habe ich irgendwo ein Beispiel (falls du diesen Weg gehen willst suche ich's raus)...


Zitat von: MPunkt am 14 Juni 2020, 16:51:18
Somit wäre für den Ausgang 1 ein "DOIF" nächstliegend.

In einem DOIF kannst du BEIDES machen, also quasi einschalten (Zeitbedingung) und dann eben das "Toggeln" (Licht-An-Bedingung)...


Tja und (leider) erneut: wenn man wüsste WIE die genutzten? Devices sind, welche Befehle sie "können" und wie die Events aussehen, dann könnte man auch konkret helfen ;)



Zitat von: MPunkt am 14 Juni 2020, 16:51:18
Bei weiteren Fragen → einfach Fragen!

Werde mir gleich mal Deine Links zu Gemüte führen.

Bereits geschehen ;)
Vermutung: du hast noch nichts in fhem laufen!? Oder kannst du bereits per FHEMWeb ein-/ausschalten und auch das Toggle-Dingens manuell machen?

Wenn ja, dann poste doch mal lists der Devices:


list Devicename


in die FHEMWeb-Eingabezeile und die Ausgabe hier in "code-Tags" posten (das '#' im "Menü")...

Zitat von: MPunkt am 14 Juni 2020, 16:51:18
Werde mir gleich mal Deine Links zu Gemüte führen.

Gute Idee!
Viel Spaß!

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

MPunkt

Hallo Joachim,

hier mal exemplarisch »Ausgang_1« für acht Ausgange auf dem Raspi:

Internals:
   DEF        4
   FUUID      5eb05f0c-f33f-b6ca-5183-b827a15e1001de2c
   GPIO_Basedir /sys/class/gpio
   GPIO_Nr    4
   NAME       Ausgang_1
   NR         20
   STATE      off
   TYPE       RPI_GPIO
   WiringPi_gpio
   READINGS:
     2020-06-14 18:18:41   Pinlevel        low
     2020-06-14 17:00:01   state           off
   fhem:
     interfaces switch
Attributes:
   direction  output
   group      Keller
   room       Schaltleiste_1


Die Funktion "at" ist mir bereits über den Weg gelaufen. Und damit kann ich auch schon
einen Ausgang schalten. Bei mir jetzt grad mal eine LED (wird später durch entsprechende Relais ersetzt  ;))

defmod Brunnen_1_an at *17:59:00 set Ausgang_3 on


Zum größten Verwirrungsfaktor: X ist fix (hier sieben mal) es sei denn ich würde irgendwann mal einen anderen Effekt bevorzugen.
Dann müsst ich eben den event entsprechend 'umprogrammieren'...


Damit würde dann auch Dein q&d-Vorschlag ausreichen.
Werd ich gleich nochmal 'durchkauen' ;)

Ich find's übrigens überwältigend wie viel Zeit Du Dir für mich nimmst!
Besten Dank dafür!!!

Beste Grüsse

Markus

MPunkt

Nachtrag —

mit den Funktionen:

defmod Brunnen_1_an at *19:08:00 set Ausgang_3 on


und dem 'Bandwurm'

defmod LED_Wahl notify Ausgang_3:on sleep 1;; set Ausgang_5 on;; sleep 0.5;; set Ausgang_5 off;; sleep 0.5;; set Ausgang_5 on;; sleep 0.5;; set Ausgang_5 off;; sleep 0.5;; set Ausgang_5 on;; sleep 0.5;; set Ausgang_5 off;; sleep 0.5;; set Ausgang_5 on;; sleep 0.5;; set Ausgang_5 off;; sleep 0.5;; set Ausgang_5 on;; sleep 0.5;; set Ausgang_5 off;; sleep 0.5;; set Ausgang_5 on;; sleep 0.5;; set Ausgang_5 off;; sleep 0.5;; set Ausgang_5 on;; sleep 0.5;; set Ausgang_5 off


bekomme ich das gewünschte Ergebnis.
LED-Schlauch einschalten, eine Sekunde warten und dann sieben mal das Programm wechseln bis ich den gewünschten Effekt eingestellt habe.

Das würde mir prinzipiell reichen, wenn man es natürlich eleganter gestalten kann wäre ich für ein entsprechenden Vorschlag dankbar ;)...

Besten Dank Joachim,
der Abend ist gerettet, der Tatort kann kommen.

Liebe Grüsse aus dem Schwarzwald
Markus

rudolfkoenig

Apropos Bandwurm:
da RPI_GPIO (wenn ich es richtig sehe) die SetExtensions unterstuetzt, sollte die Aufgabe mit dem blink Befehl kuerzer zu schreiben sein:
defmod LED_Wahl notify Ausgang_3:on sleep 1;; set Ausgang_5 blink 7 0.5

MPunkt

Hallo Rudolf(?),

habe eben den Code getestet und muss sagen: Du hast es richtig gesehen!
Funktioniert einwandfrei!!!

Besten Dank für das Input
und Grüsse

Markus