FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: BioBier am 24 August 2015, 08:06:32

Titel: [SOLVED] MQTT Device + on-for-timer ?
Beitrag von: BioBier am 24 August 2015, 08:06:32
Hallo zusammen,

ich habe ein separaten Raspberry pi der über GPIO's Sender der Garage und Einfahrtstor steuert. Die Ansteuerung in FHEM wollte ich über MQTT bewerkstelligen (wie meine meisten devices). Die Kommunikation funktioniert soweit gut. Jedoch möchte ich dass nach dem senden des "on"-Befehls eine Sekunde später "off" hinterher geschickt wird.

Soweit ich raus gefunden habe benötige ich wahrscheinlich ein Dummy der mit set gate_test on-for-timer 1 das device schaltet. Leider bekomme ich es aber nicht gebacken. Habt ihr einen Tipp?

Dies ist die device config:
define gate_test MQTT_DEVICE
attr gate_test IODev RouterMQTT
attr gate_test devStateIcon on:rc_GREEN:on
attr gate_test eventMap 1:on 0:off
attr gate_test publishSet 1 0 /mqtt-gpio-test/in/15
attr gate_test room TEST
attr gate_test stateFormat state


LG
BioBier
Titel: Antw:MQTT Device + on-for-timer ?
Beitrag von: Zrrronggg! am 24 August 2015, 12:24:50
Da sind zumindest für mich zu wenig Informationen.
Der Aktor kann also keine on-for-timer nehme ich an?

Wie wird der denn ausgelöst?
Hast du eine Konstrukt, wo das drücken eines Senders eine Define...notify auslöst?

Wenn ja, dann sowas wie:

define Garagentor notify Mein_Schalter:on set Garagentor_aktor on ;; sleep 1.0 ;;  set Garagentor_aktor off

Wenn du hingegen mit einem Sender direkt schaltest, dann nur so:

define Garagentor notify Mein_Schalter:on  sleep 1.0 ;;  set Garagentor_aktor off

Oder ich verstehe dein Problem nicht richtig.

Was ist eigentlich ein MQTT?
Titel: Antw:MQTT Device + on-for-timer ?
Beitrag von: JoWiemann am 24 August 2015, 12:43:55
MQTT

MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport.

http://mqtt.org/

Das on-for-timer kann eigentlich als Nachricht mit gegeben werden und wird dann im MQTT Server dem Device mitgegeben. Somit ist es eine Frage des Aktors, ob er on-for-timer kann.

Grüße Jörg
Titel: Antw:MQTT Device + on-for-timer ?
Beitrag von: BioBier am 25 August 2015, 08:19:38
Zitat von: Zrrronggg! am 24 August 2015, 12:24:50

Wenn du hingegen mit einem Sender direkt schaltest, dann nur so:

define Garagentor notify Mein_Schalter:on  sleep 1.0 ;;  set Garagentor_aktor off


Dies funktioniert wunderbar! Für meinen Fall angepast:
define Gate notify gate_test:on  sleep 1.0 ;;  set gate_test off
Nun ist mir auch klar was ein notify macht. Herzlichen Dank!
Titel: Antw:[SOLVED] MQTT Device + on-for-timer ?
Beitrag von: JoWiemann am 25 August 2015, 11:23:48
Mit sleep wird Fhem für die sleep Zeit angehalten. Ist das so von Dir berücksichtigt.


Grüße Jörg

Gesendet von iPhone mit Tapatalk
Titel: Antw:[SOLVED] MQTT Device + on-for-timer ?
Beitrag von: BioBier am 25 August 2015, 16:39:15
Zitat von: JoWiemann am 25 August 2015, 11:23:48
Mit sleep wird Fhem für die sleep Zeit angehalten. Ist das so von Dir berücksichtigt.


Naja es hat für die eine Sekunde (noch) vermutlich keine große Auswirkung. Gibt es eine elegantere Lösung?
Verstehe leider nicht ganz was du mit
ZitatDas on-for-timer kann eigentlich als Nachricht mit gegeben werden und wird dann im MQTT Server dem Device mitgegeben.
meintest.
Titel: Antw:[SOLVED] MQTT Device + on-for-timer ?
Beitrag von: Zrrronggg! am 26 August 2015, 23:50:58
ZitatMit sleep wird Fhem für die sleep Zeit angehalten. Ist das so von Dir berücksichtigt.
Ja, ist berücksichtig, weil es nämlich nicht so ist soweit ich weiss. Sleep ist ein FHEM Commando, siehe commandref.
http://www.fhem.de/commandref.html#sleep

Dort findet sich z.b. auch folgendes Beispiel:
define n3 notify btn3.* set lamp on;;sleep 1.5;;set lamp off
das doch recht analog zu meinem Vorschlag ist.
Allerdings: Ein sleep in einem PERL Teil blockiert fhem.
Daher riet auch ich selber früher von der Verwendung von sleep eher ab, zumindest solange man als Anfänger noch nicht genau weiss, was FHEM und was perl ist. Die Gefahr besteht darin, dass mein Beispiel oben um eine Perl-if Variant erweitert wird und das sleep dann in den perl Teil rutscht und DANN BLOCKIERT es auch.
Diese Gefahr ist mit dem neuen und einfacher zu erlernenden DOIF Befehl aber eigentlich gebannt.
Ein weiteres Problem ist: falls sleep von keinem Befehl gefolgt wird, DANN wird FHEM auch tatsächlich blockiert.
Die Gefahr, dass einer das schreibt sehe ich als noch geringer an.

Also AFAIK geht sleep IN Fhem und ist quasi ein "define at" ohne Namen.
Die voll ausgeschriebene Variante wäre also z.b.:
define Garagentor notify Mein_Schalter:on define verzoegerung1 at 00:00:01 set Garagentor_aktor off
Das wäre auch die Lösung, wenn man sleep vermeiden will und ich schreibe das auch immer so, wenn das sleep länger als wenige Sekunden ist, unter anderem deswegen, weil man dann in "Everything" unter der Sektion "at" alle eventuell noch wartenden späteren Folgeaktionen sehen kann, wartende sleeps aber nicht.

ZitatVerstehe leider nicht ganz was du mit
ZitatDas on-for-timer kann eigentlich als Nachricht mit gegeben werden und wird dann im MQTT Server dem Device mitgegeben.
meintest.

Das meint, dass "on-for-timer" ein Befehl ist, den viele Aktoren nativ beherrschen, also IM AKTOR.  FS20 und HM Aktoren z.b. kann man anstelle "on" ein "on-for-timer 1" senden, dann schalten die für eine Sekunde ein und dann von alleine wieder aus. Ohne weiteren "off" Befehl von fhem. Der Aktor muss das aber auch können. IT kann das z.b. nicht. Ob bei MQTT die Aktoren das können, oder ob eine Zwischeninstanz ("MQTT-Server") das nachbildet weiss ich nicht, ich kenn MQTT nicht. WENN, dann könnte man sich das Ausschalten nach einer Sekunde sparen sondern dem Aktor gleich befehlen nur eine Sekunde einzuschalten.

Ich ging davon aus, dass es sicherer ist anzunehmen, dass dein Aktor das nicht kann, daher mein Vorschlag. Der geht immer.

Titel: Antw:[SOLVED] MQTT Device + on-for-timer ?
Beitrag von: BioBier am 27 August 2015, 10:04:55
Klasse! Vielen dank für die zusätzlichen Informationen Zrrronggg!
Das MQTT Protokoll beheerst on-for-timer nicht da es nur ein message broker ist. Also zur Nachrichtenverteilung/übermittlung genutzt wird.
Meine selbst programmierten Aktoren nutzen dies immer um so auch mit anderen Heimautomatisierungs-Programmen funktionieren.