Autor Thema: Impuls per webCmd ausgeben?  (Gelesen 706 mal)

Offline jw9

  • Jr. Member
  • **
  • Beiträge: 62
Impuls per webCmd ausgeben?
« am: 10 Mai 2022, 23:48:24 »
Hallo allerseits,

ich möchte im Web-Interface zwei Knöpfe haben, die auf jeweils eine GA einen Impuls ausgeben. Das heisst, es soll ein "on" und unmittelbar danach ein "off" kommen.

Der erste Versuch ist:
define Alle_Rollaeden KNX 3/0/12:dpt1.001:Up 3/0/26:dpt1.001:Down
attr Alle_Rollaeden IODev KNXIF
attr Alle_Rollaeden alias Alle-Rolläden
attr Alle_Rollaeden cmdIcon Hoch:remotecontrol/black_btn_YELLOW Runter:remotecontrol/black_btn_BLUE
attr Alle_Rollaeden group Zentral
attr Alle_Rollaeden icon fts_shutter_all
attr Alle_Rollaeden room Rolläden
attr Alle_Rollaeden webCmd Hoch:Runter
Das sieht schon mal nicht schlecht aus, die Knöpfe zeigen jedoch (logischerweise) noch keine Wirkung.

Wenn ich die Datenpunkte wie folgt umbenenne:
define Alle_Rollaeden KNX 3/0/12:dpt1.001:Hoch 3/0/26:dpt1.001:Runter
dann komme ich meinem Ziel etwas näher: es erscheinen Pulldown-menus, in denen man "on", "off" und "toggle" wählen kann. Die Telegramme werden auch ausgesendet. Aber wie bekomme ich "impuls"? Und die Icons sollen ebenfalls bleiben.

Ich stehe hier auf dem Schlauch. Bei webCmd kann man ja keinen Perl-Code angeben?

Das sollte doch nicht so kompliziert sein? Was übersehe ich?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18378
Antw:Impuls per webCmd ausgeben?
« Antwort #1 am: 11 Mai 2022, 17:55:29 »
Wenn das hier noch richtig ist:
Um das ganze halbwegs typsicher zu machen, sind für die dpt1 generell nur on/off zugelassen.
Sollte on/off auch weiter der einzige zugelassene Wert sein. Dann müßte auch "on-for-timer 0.1" (als sehr kurzer Impuls) absetzbar sein.

Das mappen auf deutsche Begrifflichkeiten ist m.E. eine "Unsitte", die man vermeiden sollte, weil dadurch auch andere Dinge nicht reibungslos klappen (z.B. die Integration in eine Sprachsteuerung). Die Icons entsprechend "hübsch" zu wählen sollte auch mit englischen Begrifflichkeiten gehen, und ein "open" auf "on-for-timer 200" (per eventMap-Attribut) umzubiegen, müßte auch in der KNX-Welt funktionieren.
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline jw9

  • Jr. Member
  • **
  • Beiträge: 62
Antw:Impuls per webCmd ausgeben?
« Antwort #2 am: 11 Mai 2022, 23:22:06 »
Wenn das hier noch richtig ist:Sollte on/off auch weiter der einzige zugelassene Wert sein. Dann müßte auch "on-for-timer 0.1" (als sehr kurzer Impuls) absetzbar sein.
Aber wo kann ich das eintragen? Wenn man bei webCmd irgendwie perl-code eintragen könnte, dann könnte man sich das ja zusammendefinieren wie man es braucht. Aber das scheint ja  nicht der Fall zu sein...

Zitat
Das mappen auf deutsche Begrifflichkeiten ist m.E. eine "Unsitte", die man vermeiden sollte, weil dadurch auch andere Dinge nicht reibungslos klappen (z.B. die Integration in eine Sprachsteuerung). Die Icons entsprechend "hübsch" zu wählen sollte auch mit englischen Begrifflichkeiten gehen, und ein "open" auf "on-for-timer 200" (per eventMap-Attribut) umzubiegen, müßte auch in der KNX-Welt funktionieren.
Soweit stimme ich Dir zu.

Nur will ich in der Oberfläche, die dem Endbenutzer präsentiert wird, deutsche Begriffe haben. Wenn man bei der Recherche keine Hinweise findet wie die Zusammenhänge sind, dann behilft man sich eben mit dieser "Unsitte"...

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18378
Antw:Impuls per webCmd ausgeben?
« Antwort #3 am: 12 Mai 2022, 09:27:02 »
Nur will ich in der Oberfläche, die dem Endbenutzer präsentiert wird, deutsche Begriffe haben. Wenn man bei der Recherche keine Hinweise findet wie die Zusammenhänge sind, dann behilft man sich eben mit dieser "Unsitte"...
...da, wo ich heute noch (funktionale) deutsche Begriffe habe, bedauere ich das zutiefst, weil das verhindert, dass man Code "einfach so" teilen kann...

Wenn man was anzeigen will, sind stateFormat und devStateIcon die richtigen Adressen, das betrifft "eher" nur das "skinning"...

Über devStateIcon kann man dann auch definieren, welcher Befehl gesendet werden soll, wenn man "diesen Knopf" drückt.

Vielleicht nochmal einen halben Schritt zurück: Wenn ich die Konstruktion richtig verstanden habe, brauchst du eigentlich zwei (!) virtuelle Knöpfe, die jeweils ein kurzes "1" gefolgt von einem Dauer "0" auf den Bus schicken. Vermutlich geht das nicht so gut mit einem einzigen Device, denn für "kurz-ein-aus" muss entweder der angesprochene Aktor das umsetzen können (dann kann man es über ein FHEM-Device realisieren), oder du brauchst eine Art Timer in FHEM, der das für dich macht. Typischerweise wären das dann (vorausgesetzt, das Modul kann es intern (z.B. afaik KNX) oder es unterstützt SetExtensions (viele andere)) via "on-for-timer" zu realisieren, was eben zwei verschiedene Devices voraussetzt.

Dementsprechend würde ich hier zunächst versuchen, diesen virtuellen Taster im KNX-Hardwaresystem selbst (?) so zu konfigurieren, dass er als Taster funktioniert - falls das geht.

Wenn nicht, wären m.E. zwei KNX-Device-Instanzen zu definieren und für jeden Taster on und off vorzusehen (diesen Punkt finde ich in https://wiki.fhem.de/w/index.php?title=KNX_Device_Definition_-_Beispiele&curid=5484&diff=37230&oldid=37228#on.2Foff_Device_-_mit_R.C3.BCckmeldung auch nicht gelungen/vorbildlich dargestelle, das sollte "internationalisiert" sein, und Hin- und Rückweg sollten auf dasselbe Reading gehen, nämlich "state".

Da du hier anscheinend sowieso keinen wirklichen Status für "alle Rollläden" hast, bleiben das einfach "zwei Knöpfe", die man irgendwie halt im Frontend darstellen würde. Wie, hängt m.E. auch davon ab, ob man Status-Rückmeldungen von den einzelnen "Tastern" dann über den Bus zurückbekommt (dann könnte man die beiden Rückmeldungen in einem KNX-Device bündeln und anzeigen, was der letzte Befehl war und das ganze dann z.B. über einen readingsProxy per "side-kick" die beiden Knöpfe "drücken" lassen.

(Das Ganze klingt sehr kompliziert und ist es möglicherweise auch, was eben gerade einer der Gründe ist, hier "internationalisierte" Formen zu verwenden - wenn wir das gelöst haben, kann man es dann relativ einfach teilen...)

Prinzipiell würde ich aber erst mal die Funktionalität herstellen und dann die Frage klären, wie man es für "UI-Benutzer" hübsch darstellen kann...

Nachtrag - falls es in FHEM gelöst werden muss, kannst du ja mal folgendes testen:
define Alle_Rollaeden_Up KNX 3/0/12:dpt1.001:state
attr Alle_Rollaeden_Up webCmd :
attr Alle_Rollaeden_Up devStateIcon off:off:open on:on:open
attr Alle_Rollaeden_Up eventMap /on-for-timer 0.1:open/

define Alle_Rollaeden_Down KNX  3/0/26:dpt1.001:state
attr Alle_Rollaeden_Down webCmd :
attr Alle_Rollaeden_Down devStateIcon off:off:close on:on:close
attr Alle_Rollaeden_Down eventMap /on-for-timer 0.1:close/

« Letzte Änderung: 12 Mai 2022, 09:49:48 von Beta-User »
Server: HP-T620@Debian 11, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Offline erwin

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 734
Antw:Impuls per webCmd ausgeben?
« Antwort #4 am: 17 Mai 2022, 11:02:41 »
HI,
sorry für die verspätete Antwort, ich war ein paar Tage auf Urlaub.

Zitat
ich möchte im Web-Interface zwei Knöpfe haben, die auf ....
Ich möchte deine Anforderung etwas "untechnischer" formulieren:  "Es sollen von FHEM gesteuert alle Rolläden gleichzeitig hoch bzw. runter fahren" 

Falls diese Formulierung richtig ist, sehe ich mehrere Optionen:
1) Es gibt in (fast) allen Rollladen-aktoren sog. "Zentralfunktionen", die auf alle Kanäle wirken.
    z.B: Regen- Wind- Hitze-Alarm und zus. Block u. All-Funktionen. Jeder dieser Funtionen kann mittels ETS eine zusätzliche GA addresse bekommen und eine bestimmte Aktion auslösen. Z.B. Alle Rolläden rauf.....
2) Die üblichen Rollladen-Aktoren haben eine GA (ich nenne sie z.B. "UpDown") die wenn "off" gesendet wird- gehts runter, wenn "on" gesendet wird - gehts rauf (oder umgekehrt), jeweils bis zum Endanschlag. Da ist keine Notwendigkeit Impulse zu senden.
Kannst du bitte uns ein list von einem Rollladen posten, (nicht den Alle_rollladen) und evtl den Typ des Aktors, dann kann man mehr ins detail gehen.

Ich hab mir z.B. eine utility geschrieben, die verhindert, dass die Rollläden an den Türen keinesfalls runter gehen, wenn die betreffende Tür offen ist! (will mich nicht aussperren...) Realisiert über die Block-Funktion...

Falls Impulse bei deinem Rolladen nötig sind, ist der vorige Post von Beta-User der richtige Weg.
on/off_for_timer ist unterstützt - siehe cmd-ref.
nach dem Motto: erst die Funktion, danach die GUI  ;D
l.g. erwin
FHEM aktuell auf RaspberryPI mit Busware ROT / Weinzirl IP731
Maintainer 00_KNXIO.pm 10_KNX.pm
CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT
1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,...
MQTT2, KNX, SONOFF, mySENSORS,...