FHEM Forum

FHEM => Automatisierung => Thema gestartet von: stay_tuned am 11 Februar 2020, 13:41:46

Titel: Befehl einmalig für 2 sekunden
Beitrag von: stay_tuned am 11 Februar 2020, 13:41:46
Hallo zusammen,
ich komme leider nicht dahinter wie ich einen Befehl einmalig für 2 sekunden ausführen kann. Daher bitte ich dieses Forum um Hinweise wie ich das umsetzten könnte?

Dieses Command möchte ich genau für 2 Sekunden ausführen:
*{sunset(0,"17:00","22:00")} set EG_Blind_.*_down TRIGGER

Bin für jeden Tipp dankbar
mlg
Titel: Antw:Befehl einmalig für 2 sekunden
Beitrag von: Beta-User am 11 Februar 2020, 13:50:50
Hallo und willkommen im FHEM-Forum!

Das geht leider so nicht, FHEM setzt die Befehle ab und läuft dann weiter (sonst besteht das Risiko, dass Events verloren gehen oder andere Aktionen zu spät ausgeführt werden).

Aber was genau soll "TRIGGER" sein? Wenn es sich auf  Geräte bezieht, die die "SetExtensions" kennen oder auf interne Weise "on-for-timer" unterstützen (CUL_HM-Geräte, z.B.), könnte folgendes klappen:
*{sunset(0,"17:00","22:00")} set EG_Blind_.*_down on-for-timer 2
Da hier regex verwendet wird und daher vermutlich mehrere Geräte angesprochen werden: Ggf. kommt sich da funktechnisch was ins Gehege; dann mußt du den Befehl entzerren, z.B. über Mechanismen, die structure bereitstellt.

(Meine weitere Vermutung ist, dass es sich um verschiedene Relays handelt, die zur Rollladensteuerung eingesetzt werden. Dann würde ich mal einen Blick auf das Modul ROLLO empfehlen, und danach dann auf AutoShuttersControl  ;) ;D ;) ::) ).

Gruß und weiter viel Spaß,

Beta-User
Titel: Antw:Befehl einmalig für 2 sekunden
Beitrag von: Otto123 am 11 Februar 2020, 13:52:15
Hi,

was genau meinst Du damit?

Ein Befehl wird doch ausgeführt und weg ist er?
Du willst nach 2 sec nach dem Befhel  set EG_Blind_.*_down TRIGGER einen Anderen ausführen?
set EG_Blind_.*_down TRIGGER;; sleep 2;; set EG_Blind_.*_down Flups

Du willst 2 sec lang Dauerfeuer senden? Ne oder? :o

Oder das was Beta-User empfohlen hat, während ich schrieb :)

Gruß Otto
Titel: Antw:Befehl einmalig für 2 sekunden
Beitrag von: stay_tuned am 11 Februar 2020, 13:59:20
Hallo zusammen,
vielen Dank für eure Antworten
meine Rollos werden über eine Simatic S7 gesteuert. FHEM ist an die S7 connected aber ich kein leider nur mit TRIGGER arbeiten. Mit 2 sekunden würden sich die Rollos genau so öffnen wir es mir passen würde.
Ich habe ein attr mit webCmd für den TRIGGER Befehl hinzugefügt
mlg
Titel: Antw:Befehl einmalig für 2 sekunden
Beitrag von: Otto123 am 11 Februar 2020, 14:16:39
Bist Du sicher?
Wenn ich das hier richtig verstehe (https://commandref.fhem.de/commandref_DE.html#S7):
Setset <name> S7_AWrite {ON|OFF|TRIGGER};

Note: TRIGGER sets the bit for 1s to ON than it will set to OFF.

Müsstest Du es nach Deiner Theorie so machen:
set EG_Blind_.*_down TRIGGER;; sleep 1;; set EG_Blind_.*_down TRIGGER

Aber ich würde es so versuchen:
set EG_Blind_.*_down ON;; sleep 2;; set EG_Blind_.*_down OFF
Titel: Antw:Befehl einmalig für 2 sekunden
Beitrag von: KernSani am 11 Februar 2020, 14:31:50
Und wenn das dann umgesetzt ist und funktioniert, lässt es sich wunderbar im ROLLO Modul komfortabel steuern...
Titel: Antw:Befehl einmalig für 2 sekunden
Beitrag von: stay_tuned am 11 Februar 2020, 14:32:48
...ich verwende S7_DWrite.
Leider (aufgrund des aktuellen S7 Programs) kann ich mit ON/OFF nicht arbeiten
Aber ich werde es wie von dir vorgeschlagen (set EG_Blind_.*_down TRIGGER;; sleep 1;; set EG_Blind_.*_down TRIGGER) versuchen.
Ansonsten fällt mir gerade ein, dass ich mit einem dummy einen timer mitlaufen lasse
Vielen Dank Otto
Titel: Antw:Befehl einmalig für 2 sekunden
Beitrag von: Otto123 am 11 Februar 2020, 14:44:12
Naja wenn Du mich fragst, ist die commandref (und damit mein 1:1 Zitat) an der Stelle falsch. Gemeint ist selbstverständlich DWrite.
ZitatS7_DWrite
[EN DE]
This module is a logical module of the physical module S7.
This module is used to set/unset a Bit in ad DB of the PLC.
Note: you have to configure a PLC writing at the physical modul (S7) first.



Definedefine <name> S7_DWrite {db} <DB> <address>

db ... defines where to read. Note currently only writing in to DB are supported.
DB ... Number of the DB
address ... address you want to write. bit number to read. Example: 10.6
Note: the required memory area need to be with in the configured PLC reading of the physical module.
Setset <name> S7_AWrite {ON|OFF|TRIGGER};

Note: TRIGGER sets the bit for 1s to ON than it will set to OFF.
Die Idee mit dem Dummy versteh ich gar nicht  ;D
Aber meine Siematic liegt auch in der Kiste und dich habe davon keine Ahnung. Aber Du kannst keinen Befehl "über eine Zeit" senden. Du kannst einen Befehl senden und der löst irgendetwas mit Zeit aus.
Und Du kannst natürlich einen Befehl x mal wiederholen. Das halte ich für eine "problematische" Betriebsart.  ;)
Titel: Antw:Befehl einmalig für 2 sekunden
Beitrag von: stay_tuned am 11 Februar 2020, 14:50:35
Danke Otto :-)
Ich geb dir dann Feedback wenn ich zum Testen gekommen bin :-)
mlg
Titel: Antw:Befehl einmalig für 2 sekunden
Beitrag von: flummy1978 am 11 Februar 2020, 18:50:28
Holla,

ich habe bei mir auch einie Rollos noch über die S7 gestuert. Bei mir ist es so gelöst, dass das von Beta-User Rollo Modul die entsprechenden DB Bits aktiviert und deaktiviert. Damit hast Du dann schon fast alles Funktionen inne, die Du brauchst:

rl_commandDown  set EG_BAD_RO_ROLLO_AUF off; set EG_BAD_RO_ROLLO_ZU on

steuert dann das device "EG_BAD_RO_ROLLO_ZU/AUF":
defmod EG_BAD_RO_ROLLO_AUF S7_DWrite db 100 2.0
attr EG_BAD_RO_ROLLO_AUF DbLogExclude .*
attr EG_BAD_RO_ROLLO_AUF IODev dev_KG_S7_SPS
attr EG_BAD_RO_ROLLO_AUF event-on-change-reading state
attr EG_BAD_RO_ROLLO_AUF group Z_Rollo
attr EG_BAD_RO_ROLLO_AUF icon fts_shutter_all
attr EG_BAD_RO_ROLLO_AUF room Verbindungen->SPS


Im Programm werden dann nur noch die DB Bits auf entsprechende Ausgänge gelegt (nochmal verriegelt).

Der Vorteil davon ist, dass Du dann weiterhin alle angenehmen Funktionen von ROLLO oder später auch von ASC benutzen kannst. D.h. Du kannst mit einem Knopfdruck auch die Rollos nur 40 % fahren lassen z.B. so wie ich das in einem der Räume mache.

Vielleicht hilft dir das auch weiter ;)