FHEM Forum

FHEM => Automatisierung => Thema gestartet von: mcbain2k am 19 Mai 2013, 10:34:59

Titel: Stromstossschalter
Beitrag von: mcbain2k am 19 Mai 2013, 10:34:59
Hallo Leute,
verfolge dieses Forum schon seit einiger Zeit bin echt begeistert.
Nun hänge ich aber einem Problem und komm einfach nicht weiter.

Ich möchte einen Stromstosschalter in Fhem programmieren.

Taster (Eingang) und Relais (Ausgang) sind Hardwaremäßig über Arduino mit Firmata angebunden.

define IN3 FRM_IN 3
attr IN3 room Arduino
attr IN3 stateFormat reading

define OUT05 FRM_OUT 26
attr OUT05 devStateIcon An:FS20.on Aus:FS20.off
attr OUT05 eventMap off:Aus on:An
attr OUT05 restoreOnReconnect off
attr OUT05 restoreOnStartup off
attr OUT05 room Arduino
attr OUT05 stateFormat value

define Arduino2_notify notify IN3.*on { if (Value("OUT05") eq "Aus") { fhem "set OUT05 An"} else { fhem "set OUT05 Aus"} }
attr Arduino2_notify room Arduino

Das Problem ist das der Ausgang wird nur für eine sehr kurze Zeite auf An gesetzt wird.

Danke schonmal

MFG McBain
Titel: Aw: Stromstossschalter
Beitrag von: Ralph am 19 Mai 2013, 17:55:44
define HofLicht FS20 xxxx xx
attr HofLicht eventMap on:EIN off:AUS
attr HofLicht room Test

define nWS1HofOn notify HofLicht:EIN set WS1Hof on-for-timer 1

define WS1Hof FS20 yyyy yy
attr WS1Hof eventMap on:EIN off:AUS
attr WS1Hof room Test

wobei WS1Hof = http://www.elv.de/unterputz-funk-wechselschalter-fs20-ws1-komplettbausatz.html (//www.elv.de/unterputz-funk-wechselschalter-fs20-ws1-komplettbausatz.html) ,
das ist eigentlich ein Wechselschalter, dessen Kontakt für 1 sek ein- und sodann wieder ausgeschaltet wird.
Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 19 Mai 2013, 18:03:38
Danke

Aber Hardware ist vorhanden wie oben zu lesen.

Das Script in fhem soll einen stromstossschalter simulieren.
Nur muss dieser nur einmal pro Sekunde und oder entprellt reagieren.

Taster Drücken Relais Ausgang schaltet ein wenn aus und umgekehrt.
Titel: Aw: Stromstossschalter
Beitrag von: Ralph am 20 Mai 2013, 14:00:43
Das sollte nur eine Denkanregung sein, Deine Hardwareumgebung ist mir unbekannt.

Obiges steuert ein Stromstoßrelais, welches dann Licht an- oder ausschaltet.

Entschuldige bitte, dass ich Dir einen Tipp geben wollte.
Es wird nicht wieder vorkommen.
Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 20 Mai 2013, 23:30:05
Sorry Ralph,

aber
ZitatTaster (Eingang) und Relais (Ausgang) sind Hardwaremäßig über Arduino mit Firmata angebunden.
beschreibt meine Hardware schon ziemlich genau.
Auch das ich ein Fhem-Script mit Stromstossschalter-Logik brauch und keinen Stromstossschalter ansteueren möchte steht in meinem 1. Post.
Hab mich aber evtl. etwas umständlich ausgedrückt.

Also nochmal das Fhem-Script sollte folgende Funktion erfüllen:

Durch drücken des Tasters soll das Relais anziehen (wenn es abgefallen war)
durch nochmaliges drücken des Tasters soll das Relais wieder abfallen usw.
http://de.wikipedia.org/wiki/Stromsto%C3%9Fschaltung (//de.wikipedia.org/wiki/Stromsto%C3%9Fschaltung)

Ich halte eine Antwort keineswegs für selbstverständlich und deswegen weiß Deine Mühe auch zu schätzen, sogar mit Link usw.
Musste mich gestern kurz fassen weil ich unterwegs war und nicht viel Zeit hatte, wenn Du da was in den flaschen Hals bekommen,
oder ich dich in irgend einer Form beleidigt haben sollte tut es mir Leid.


Titel: Aw: Stromstossschalter
Beitrag von: abc2006 am 22 Mai 2013, 13:50:24
Hi,

vielleicht liege ich völlig falsch, aber mir würde sofort ein


on-for-timer 3


oder ein


set OUT5 on;; define OUT5_AUS at +00:00:01 set OUT5 off

einfallen ... ?

lg
stephan
Titel: Aw: Stromstossschalter
Beitrag von: stromer-12 am 22 Mai 2013, 17:36:24
Sollte das nicht durch die "toggle" Funktion erreicht werden?
Titel: Aw: Stromstossschalter
Beitrag von: Puschel74 am 22 Mai 2013, 17:59:00
Hallo,

on-for-timer ist, glaube ich, nur FS20 vorbehalten und keine Eigenschaft von FHEM - zumindest nicht vom Arduino.
Ich kann damit natürlich auch daneben liegen.

Der Arduino wird also mit on-for-timer oder toogle nicht viel anfangen können.
Es wird somit nur der Weg über Stephans Vorschlag
Zitatset OUT5 on;; define OUT5_AUS at +00:00:01 set OUT5 off
zielführend sein.

Sollte ich nicht Recht haben - bitte nicht gleich steinigen ;-)

Grüße
Titel: Aw: Stromstossschalter
Beitrag von: justme1968 am 22 Mai 2013, 18:13:52
on-for timer gibt es nucht nur für FS20 sondern z.b. auch für homematic und noch ein paar andere.

für alle devices die das nicht nativ können kann fhem über die SetExtensions on-for-timer (und off-for timer,on-till,off-till,blink) mit einem internen timer simulieren wenn das device on und off anbietet und der entwickler die SetExtensions aufruft.

gruss
  andre
Titel: Aw: Stromstossschalter
Beitrag von: Puschel74 am 22 Mai 2013, 18:14:55
Hallo,

danke - wieder was gelernt.

Grüße
Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 22 Mai 2013, 18:59:52
Hey Danke für die vielen Antworten,

wie man on-for timer mit Arduino nutzen kann ist wirklich ein super Tipp danke.

Aber leider löst es nicht mein Problem.

Problem:
Ein Taster soll eine Lampe (Relais) schalten. Ohne Zeit.
1x tasten = Lampe aus wenn Lampe an
1x tasten = Lampe an wenn Lampe aus
Titel: Aw: Stromstossschalter
Beitrag von: Puschel74 am 22 Mai 2013, 19:15:04
Hallo,

dein Beitragstitel heisst aber "Stromstossschalter" und im Eingangspost liest es sich so das der Ausgang für eine
bestimmte Zeit eingeschaltet werden soll wenn der Eingang (Taster) gedrückt wird.

Dieses Problem haben wir dir mit on-for-timer geholfen zu erledigen.

Nun soll der Taster den Eingang umschalten.
Das ist aber kein Stromstossschalter sondern ein Umschalter.

Könntest du nochmal so nett sein und uns erklären was den genau passieren soll wenn du den Taster drückst und was bisher
passiert?
Evtl. muss ja der Beitragstitel auch angepasst werden bzw. wäre es besser einen neuen Beitrag auf zu machen für eine
neue Problemstellung.

Grüße
Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 22 Mai 2013, 22:22:12
ZitatEingangspost liest es sich so das der Ausgang für eine bestimmte Zeit eingeschaltet werden soll
Ja irgendwie dumm beschrieben von mir ;-) von Grammatik mal ganz zu schweigen.
mit
ZitatDas Problem ist das der Ausgang wird nur für eine sehr kurze Zeite auf An gesetzt wird.
..sollte das Fehlverhalten beschrieben werden.

Also ich möchte einen "Stromstossschalter in Fhem programmieren" wie es auch im 1. Post steht.
Soll heißen ich hab einen Taster und ein Relais und Fhem soll die Stromstosschalter-Logik beinhalten.

Lampe aus (bleibt aus bis) -> 1x tasten -> Lampe ein (bleibt ein bis) -> 1x tasten -> Lampe aus.................usw

Mit diesem Code klappt es genau so wie ich möchte (Dummy anstatt Taster):
define Arduino2_notify notify Dummy:on { if (Value("OUT05") eq "Aus") { fhem "set OUT05 An"} else { fhem "set OUT05 Aus"} }


Mit dem Arduinotaster IN3 hingegen Schaltet das Relais nur für einige Millisekunde aus oder ein, je nach vorherigem Zustand (meist nur an der parallel zum Relais geschalteten LED zu erkenen):
define Arduino2_notify notify IN3.*on { if (Value("OUT05") eq "Aus") { fhem "set OUT05 An"} else { fhem "set OUT05 Aus"} }
Meine Vermutung ist das IN3 ca 10 mal pro Sekunde "Ein" meldet wärend der Taster gedrückt wird



http://de.wikipedia.org/wiki/Stromsto%C3%9Fschalter (//de.wikipedia.org/wiki/Stromsto%C3%9Fschalter)
Erfüllt genau die vom mir beschriebene Funktion.
Der Name ist verwirrend weil dieser Schalter keinen "Stromstoss" schaltet! Er schaltet nämlich bei einem "Stromstoss".

In der Digitaltechnik: "Toggle-Flipflop".
http://de.wikipedia.org/wiki/T-Flipflop#T-Flipflop (//de.wikipedia.org/wiki/T-Flipflop#T-Flipflop)
Titel: Aw: Stromstossschalter
Beitrag von: abc2006 am 23 Mai 2013, 10:32:59
Zitat von: str0mer schrieb am Mi, 22 Mai 2013 17:36Sollte das nicht durch die "toggle" Funktion erreicht werden?

An was ich mich kommentarlos anschließe ...

lg
stephan
Titel: Aw: Stromstossschalter
Beitrag von: Puschel74 am 23 Mai 2013, 17:31:44
Hallo,

toogle sollte das Problem lösen aber ...

ich vermute das der am Eingang des Ardiuno verbaute Taster prellt und daher mehrmals on/off/on/off ausgelöst wird.
Das lässt sich auch mit toogle nicht abfangen - vermute ich mal.

Die einzige Möglichkeit, die ich sehe, ist den Taster zu entprellen.

Grüße
Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 24 Mai 2013, 20:31:16
Also erst mal Danke für die Antworten

hab eure Ratschläge befolgt und weiter getestet:

Habe IN3 durch einen Dummy ersetzt.

ein "set dummy on" schaltet das relais obwohl der Dummy schon voher auf on war,

ist das ein Bug?

Weil logisch ist es nicht. Mein notify sollte die Zustandsänderung des Dummys auf on abfragen und sonst nichts.

Änderung von on auf on sollte es nicht geben. Ein klar definierter Zusand der gleich bleibt schließt das vorhandensein einer Änderung aus.

Titel: Aw: Stromstossschalter
Beitrag von: Puschel74 am 24 Mai 2013, 20:40:52
Hallo,

egal welchen Zustand der Dummy vor dem absetzen des set-Befehls hatte wird der Befehl zum setzen des Relais auf alle Fälle abgegeben.

Ich vermute mal du hast das versucht:

Zitatdefine Arduino2_notify notify Dummy:on { if (Value("OUT05") eq "Aus") { fhem "set OUT05 An"} else { fhem "set OUT05 Aus"} }

Dieses notify löst immer! aus wenn du ein set Dummy on eingibst.
Erst in diesem Notify prüfst du ob der Ausgang An oder Aus ist und schaltest entsprechend um.

Wenn dein Notify nicht auf den Befehl reagieren würde, was sollte ein notify dieser Form machen (egal ob so ein notify sinnvoll ist oder nicht)?
define Arduino2_notify notify Dummy:.* { if (Value("OUT05") eq "Aus") { fhem "set OUT05 An"} else { fhem "set OUT05 Aus"} }

Es müsste ja sonst erst geprüft werden welchen Zustand das Device hat und danach müsste FHEM entscheiden ob das Notify ausgelöst wird oder nicht.
Einfacher ist es doch das Notify bei zutreffendem Regexp aus zu lösen und dem Anwender die Entscheidungsfreiheit zu lassen was danach passieren soll.

Grüße
Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 25 Mai 2013, 11:18:04
Hallo

1. Problem ist das die Variable IN3 nicht einmal, sondern wiederholt auf on gesetzt wird sobald der Taster gedrückt wird.
2. Problem ist das Fhem anscheinend nicht den Status der Variablen auswertet sondern nur die Befehle die auf die Variable wirken.
   Bei einem Umweg über Dummys wird der sich wiederholende "set on" Befehl mit durchgereicht.

ZitatEs müsste ja sonst erst geprüft werden welchen Zustand das Device hat und danach müsste FHEM entscheiden ob das Notify ausgelöst wird oder nicht.
Einfacher ist es doch das Notify bei zutreffendem Regexp aus zu lösen und dem Anwender die Entscheidungsfreiheit zu lassen was danach passieren soll.

Wenn man das ganze Steuerungstechinsch betrachtet wäre es meiner Meinung einfacher weil logischer den Status der Variable auszuwerten und nicht den Befehl der auf sie wirkt.
Die Möglichkeiten und die Entscheidungsfreiheit des Anwenders wird sogar noch erhöht, siehe meinen Fall als Beispiel.

Evtl. liege ich ja völlig daneben aber bis jetzt hat mir hier noch niemand eine brauchbare Lösung für mein Stromstossschalterproblem aufgezeigt.
 
Hab folgende vorläufige Notlösung:
define Arduino2_notify notify IN3.*off { if (Value("OUT05") eq "Aus") { fhem "set OUT05 An"} else { fhem "set OUT05 Aus"} }

der off Befehl wird anscheinend nur einmal gesetzt, wenn der Taster aus ist.

Leider ist das nicht die optimale Bedienung für eine Lichtsteuerung, und weitere Möglichkeiten wie Taster lange drücken, Taster kurz drücken fallen auch flach.

Gruesse
 McBain
 
Titel: Aw: Stromstossschalter
Beitrag von: Puschel74 am 25 Mai 2013, 12:06:59
Hallo,

zu

ZitatEvtl. liege ich ja völlig daneben aber bis jetzt hat mir hier noch niemand eine brauchbare Lösung für mein Stromstossschalterproblem aufgezeigt.

kann ich nur sagen:

ZitatDie einzige Möglichkeit, die ich sehe, ist den Taster zu entprellen.

Dafür das der Taster am Eingang prellt und on/off/on/off/on an fhem gesendet wird kann fhem nichts.

Grüße
Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 25 Mai 2013, 15:20:45
Hallo



Es liegt leider nicht am Taster, der prellt definitiv nicht.

define Arduino2_notify notify IN3.*off { if (Value("OUT05") eq "Aus") { fhem "set OUT05 An"} else { fhem "set OUT05 Aus"} }

funktioniert ja auch, und würde nicht funktionieren wenn der Taster prellt.



Gruesse

 McBain

Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 27 Mai 2013, 19:25:28
So hab das Problem jetzt soweit eingegrenzt um sagen zu können,

dass es an daran liegt, dass Fhem IN3 solange der Taster gedrückt ist alle paar Millisekunden auf on setzt.

Bei jedem on von IN3 erfolgt eine Umschaltung des OUT05 (Relais), dh. das Relais rattert wie ein MG.

Wie kann ich Fhem jetzt dazu überreden, IN3 nur einmal pro Druck auf den Taster auf on zu setzen?


define IN3 FRM_IN 3
attr IN3 room Arduino
attr IN3 stateFormat reading

define OUT05 FRM_OUT 26
attr OUT05 devStateIcon An:FS20.on Aus:FS20.off
attr OUT05 eventMap off:Aus on:An
attr OUT05 restoreOnReconnect off
attr OUT05 restoreOnStartup off
attr OUT05 room Arduino
attr OUT05 stateFormat value

define Arduino2_notify notify IN3.*on { if (Value("OUT05") eq "Aus") { fhem "set OUT05 An"} else { fhem "set OUT05 Aus"} }




MFG
 McBain
Titel: Aw: Stromstossschalter
Beitrag von: Puschel74 am 27 Mai 2013, 19:33:51
Hallo,

ZitatWie kann ich Fhem jetzt dazu überreden, IN3 nur einmal pro Druck auf den Taster auf on zu setzen?

Äh, gar nicht?
FHEM setzt IN3 sicher nicht auf on - das macht der Arduino.
FHEM bekommt nur den Trigger mit das IN3 flattert und reagiert entsprechend des Notify.

Zitatdass es an daran liegt, dass Fhem IN3 solange der Taster gedrückt ist alle paar Millisekunden auf on setzt.
Wie gesagt.
FHEM setzt IN3 nicht auf on - das macht der Arduino resp. der Taster der an IN3 angeschlossen ist.

Das einzige was FHEM macht ist den Ausgang setzen - wobei ich die Zykluszeit von FHEM auf deiner Plattform nicht kenne.

Aber wenn am Taster ja nix prellt kann es nur dran liegen das FHEM den Eingang des Arduino auf on setzt - alle paar Millisekunden.

Grüße
Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 28 Mai 2013, 20:53:37
Hallo,

Äh, gar nicht?
FHEM setzt IN3 sicher nicht auf on - das macht der Arduino.
FHEM bekommt nur den Trigger mit das IN3 flattert und reagiert entsprechend des Notify.


Bist Du dir ganz sicher???
IN3 ist immerhin eine Fhem-Dummy und der Arduino teilt Fhem ja nur mit das PIN3 on ist der weiß gar nichts von IN3.

FHEM bekommt nur den Trigger mit das IN3 flattert und reagiert entsprechend des Notify.

Flattert? Da flattert nichts. IN3 wird von on auf on gesetzt, eigendlich keine Änderung des Zustandes.
Für Fhem aber anscheinend schon, leider.

Aber wenn das nicht der Lösungsansatz ist, wo liegt dann der Hund begraben?  

MFG
 McBain


   
Titel: Aw: Stromstossschalter
Beitrag von: Puschel74 am 29 Mai 2013, 08:19:54
Hallo,

ich mach mir nochmal die Mühe ...

lt. dem hier

define IN3 FRM_IN 3
attr IN3 room Arduino
attr IN3 stateFormat reading

define OUT05 FRM_OUT 26
attr OUT05 devStateIcon An:FS20.on Aus:FS20.off
attr OUT05 eventMap off:Aus on:An
attr OUT05 restoreOnReconnect off
attr OUT05 restoreOnStartup off
attr OUT05 room Arduino
attr OUT05 stateFormat value


ist IN3 ein digitaler Eingang am Arduino - ich seh hier keinen dummy.

ZitatFlattert? Da flattert nichts.
ZitatEs liegt leider nicht am Taster, der prellt definitiv nicht.
Dann poste mal bitte das Bild deines Speicheroszis welches auf steigende Flanke triggert während du den Taster betätigst.
Der Eingang des Oszi muss natürlich mit IN3 oder, besser gesagt, mit dem Eingang des Arduino verbunden sein an dem der Taster angeschlossen ist.

Oder woher weißt du das der Taster definitiv nicht prellt?

Für mich stellt sich dein Aufbau so dar:

Taster am Eingang IN3 des Arduino ---- Verbindung mit dem Netzwerk(?) --- fhem-Server
Relais am Ausgang OUT5 des Arduino ---|

Oder läuft bei dir fhem auf dem Arduino?

Da ich aber leider keinen Arduino besitze sondern nur einen AVR-NET-IO werde ich dir nun nicht mehr weiter helfen können da
ich deinen Aufbau nicht nachstellen (und auch nicht so ganz nachvollziehen) kann.

Grüße
Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 29 Mai 2013, 20:21:40
Hallo,
also erstmal danke für deine Mühe,

Zitatist IN3 ein digitaler Eingang am Arduino - ich seh hier keinen dummy.
Stimmt, dummy ist falsch muss Variable heissen.


Aufbau
Taster -- Entprellung Pulldown-- am Pin 3 des Arduino ---- USB --- fhem-Server Variable IN3
fhem-Server Variable OUT5   ---- USB ---  Pin 26 des Arduino --- Optokoppler---Relais

Taster prellt nicht weil:
Taster wurde Hardwaremäße plus Pulldown entprellt http://blog.cc-robotics.de/2007/03/25/entprellung-ohne-flipflop/ (//blog.cc-robotics.de/2007/03/25/entprellung-ohne-flipflop/).
Funktioniert auch direckt an einem anderen Arduino mit eigenem Programm prellfrei.
Schaltung regiert immer gleich auch nach langem gedrückt halten die gleiche schnelle aus an Folge des Relais
Bei prüfen des notify auf aus
define Arduino2_notify notify IN3.*off
was ohne prellen funktioniert hat.


MFG
 McBain

 

Titel: Aw: Stromstossschalter
Beitrag von: Puschel74 am 29 Mai 2013, 21:05:37
Hallo,

ZitatIN3 wird von on auf on gesetzt, eigendlich keine Änderung des Zustandes.
Für Fhem aber anscheinend schon, leider.

Das ist auch für FHEM keine Änderung des Zustandes.
FHEM reagiert im notify nur auf den regexp - und der lautet .on
FEHM ist es erstmal egal wie der Zustand vorher war (oder jetzt ist).
Wenn IN3 auf on gesetzt wird löst das notify aus, auch wenn der Zustand vorher schon on war da das regexp auf on lautet (ich, für meinen Teil, bin froh das das so ist).

Aber ich denke ich komme langsam drauf was das Problem bei dir ist.
Leider liegt es nicht an fhem sondern am Code.

define Arduino2_notify notify IN3.*on { if (Value("OUT05") eq "Aus") { fhem "set OUT05 An"} else { fhem "set OUT05 Aus"} }

Das notify löst immer aus wenn (warum eigentlich IN3.*on??) IN3:on.*
Du lässt prüfen ob OUT5 eq AUS ist, wenn nicht wird OUT5 An sonst AUS.
Für den Ablauf heisst das (Zykluszeit berücksichtigen!) - sobald IN3 auf on geht prüft fhem ob der Status von OUT5 eq Aus ist.
Wenn ja wird OUT5 auf An gesetzt sonst auf Aus.
Wenn du lange genug auf dem Taster bleibst (IN3 = on) kommt fhem wieder in die If-Abfrage und sieht jetzt
OUT5 ist An (also ungleich Aus) und der Else-Zweig wird abgearbeitet - OUT5 wird auf Aus gesetzt.
Nun bist du aber immer noch am Taster (IN3 = on) und das notify löst wieder aus.
OUT5 ist jetzt Aus daher wird fhem "set OUT05 An" ausgeführt.
Und so weiter und so weiter - das Relais rattert.

Dahingehend hast du recht - der Taster prellt nicht.
Sorry das war mein Fehler - das Verhalten des Notify hab ich nicht von Anfang an (im Kopf) durch gearbeitet.

Ich werd mal in einer ruhigen Minute grübeln wie der Code umgeschrieben werden kann damit OUT5 toogled und nicht rattert.
Evtl. kommt mir ja jemand zuvor ;-)

Grüße
Titel: Aw: Stromstossschalter
Beitrag von: mcbain2k am 29 Mai 2013, 22:58:08
Hey Puschel,

das ist genau das was ich auch denke.



Mir sind bis jetzt auch nur Notlösungen eingfallen.

- IN3.*off abfragen, wie schon beschrieben.

- beim auslösen des notify wird ein dummy für z.B. eine Sekunde auf ein gesetzt welcher dann das notify sperrt.

- Kerzen aufstellen.