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
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
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
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
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
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
Apropos Bandwurm:
da RPI_GPIO (wenn ich es richtig sehe) die SetExtensions unterstuetzt, sollte die Aufgabe mit dem blink Befehl (https://fhem.de/commandref_modular.html#setExtensions) kuerzer zu schreiben sein:
defmod LED_Wahl notify Ausgang_3:on sleep 1;; set Ausgang_5 blink 7 0.5
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