Ich habe einen Xcomfort 2-fach Schaltaktor in IP-Symcion eingebunden. Gibt es eine möglichkeit, in IP-Symcon gerrauszufeinden, ob ein langer Tastendruck oder ein kurzer gemacht wurde?
Leider habe ich ja nur die Statusvariable (True/False), nicht aber den
Command, der vom Taster gesendet wurde…
Ich bin gerade dabei, mir einen Möller-Funkbus zuzulegen und möchte erweiterte Funktionen mit IP-Symcon lösen.
Damit ich gewisse Aktionen starten kann, möchte ich diese direkt durch Drücken eines Möller-Funktasters [z.B. kurz => Funktion 1 & lange => Funktion 2] starten.
Meine Frage:
Wie kann man einen Möller-Funkt-Taster abfragen?
(Die Tastendruckzeit beträgt z.B. für einen kurzen Tastendruck nur einige 100ms oder sogar weniger)
Wenn der Taster nur den Status „True“ und „False“ zurückgibt, hat man ja fast keine Möglichkeit einen Tastendruck auszuwerten?
Ein Taster kann ja z.B. Oben-Kurz / Oben-Lange / Unten-Kurz / Unten-Lange als Funksignal senden.
Wie bekomme ich diese Information über den Datenpunkt der Möller-Kommunikationsschnittstelle zu IP-Symcon, wenn dieser nur den Status „True“ & „False“ annehmen kann?
Ich würde mich freuen, wenn mir jemand bei diesem grundsätzlichen Problem helfen kann!
Bei FS20 gibt es dazu ja eine „Data“ Variable. Ich habe leider keinen Moeller Taster, aber habt Ihr schonmal versucht den Taster als XComfort Remote einzubinden, diese hat eine „Data“ Variable? Nur so eine Idee.
Sa, habe das mal mit „Xcomfort Remote“ getestet.
Die Data-Variable zeigt im normalzustand „2“ an. Wird der Taster gedrückt, so wechselt der Wert zu „1“.
Leider ist die Anzeige viel zu träge, um daraus irgendetwas zu reproduzieren.
Einige Statuswechsel werden auch verschluckt… sehr seldsam
Hast Du es auch geschafft, einen anderen Wert zu bekommen, wenn Du den Taster Länger drückst [Tastendruck Lange] ?
…und gibt es einen Unterschied, wenn man den Taster [oben] oder [unten] betätigt?
=> Somit sollte es 5 Möglichkeiten geben:
1. Ruhezustand
2. Taste [Oben-Kurz] gedrückt
3. Taste [Oben-Lange] gedrückt
4. Taste [Unten-Kurz] gedrückt
5. Taste [Unten-Lange] gedrückt
Wie wird bei Dir dieser Tastendruck in IPS erkannt?
… durch ein Event (sobald der Taster gedrückt wird, kann z.B. ein Script gestartet werden)
oder
… muß man den Status vom Taster ständig abfragen?
Wird die DATA-Variable dann auch sofort wieder 2 [Ruhezustand], wenn ich den Taster wieder loslasse?
=> Somit kann ich den Zustand des Tasters direkt abfragen,
oder gibt die Data-Variable den Wert eines Schalters zurück
(könnte vielleicht auch erklären, warum er nicht jeden Tastendruck erkennt)
z.B.
[Taster wird [Oben] betätigt => Data-Variable wird [EIN]
[Taster wird [Unten] betätigt => Data-Variable wird [AUS]
mfG Erich
[PS: bin noch Anfänger mit IPS - Sorry für vielleicht so grundlegende Fragen]
leider ist kein Unterschied erkennbar, ob der Taster lang oder kurz gedrückt wurde. Entweder er ist 2 (Normalzustand) oder 1, wenn gedrückt (lang oder Kurz spielt keine Rolle).
Zu deiner Frage mit dem abfragen:
Ich habe immer die Sensoren und Aktoren im Xcomfort-System verbunden (mit der Moeller Software), nicht über IP-Symcon. IP-Symcon steuert nur zusatzfunktionen, wie Anwesenheitsautomatik oder reaktion auf bestimmte Ereignisse, wie sonnenaufgang etc.
Um z.B. einen taster abzufragen, benötigst du die Instanz „Xcomfort Binary Input“. Nun kannst du ein Script erstellen, welches an der Status-Variable vom „Xcomfort Binary Input“ bei Änderung getriggert wird. Das wars
Ich möchte mit IPS grundsätzlich auch solche Zusatzfunktionen steuern. Ich möchte aber nicht immer zum PC gehen, wenn ich diese parametrisieren möchte (z.B. bin zu Hause, bin nicht zu Hause, aber ich möchte damit z.B. auch die Raffstore-Steuerung und die Lichtsteuerung etwas komfortabler gestalten. Dafür wäre es aber notwendig, daß ich die Möller-Funktaster direkt abfragen kann (auch mit Unterschied [kurz/lange] und [oben/unten], damit ich nicht unnötig viele Taster dafür benötige).
Aber so wie es aussieht wird dieser Wunsch keine leichte Aufgabe…
wie mischo22 schon geschrieben hat funkt moeller nur ob gedrückt oder nicht.
Aber dafür haben wir ja IPS das diese Unterscheidung kurz/lang machen kann.
Einfach ein Script auf den Status des Tasters ausführen lassen.
Im Script erst kurz warten
IPS_sleep(5);
,damit kannst Du auch festlegen was ein kurzer Druck ist, und dann schauen ob der Status
$data=getvalue($tasterdata);
noch true oder false ist.
Wenn er true ist hast Du einen langen ansonsten eine kurzen Tastendruck. Mit einer While schleife kannst Du z.B. auch solange er gedrückt ist etwas ausführen lassen.
Oder Du wertest aus wielange er gedrückt wurde z.b. 2s/5s/10s und schaltest daraufhin das Licht dann 5m/30m/1h usw. Die Möglichkeiten sind bei IPS immer riesig.
Hier mal ein Beispielscript:
Ein kurzer Druck schaltet die Stereoanlage ein(bzw. um auf den Auxkanal)/aus, ein langer Druck macht lauter/leiser solange man den Taster drückt.
<?
$tasterdata = 56500 /*[EG\WZ\Geräte\Stereo\3 Taster rechts\Status]*/;
$lautleiseid= 51283 /*[EG\WZ\Geräte\Stereo\lautleise]*/; //da nur ein Taster für laut/leise da ist wird einmal lauter und das nächstemal leiser gemacht
IPS_SLEEP(5);
$data=getvalue($tasterdata);
$lautleise=getvalue($lautleiseid);
if ($data==false) //kurzer druck
{
//print "false";
if (getvalue(20739 /*[EG\WZ\Geräte\Stereo\Modus]*/)!= "aux") // wenn stereo an aber nicht auf aux ist umschalten
{
WinLIRC_SendOnce(29416 /*[Diverse\Module\IrTrans]*/,"stereo","aveingang");
WinLIRC_SendOnce(29416 /*[Diverse\Module\IrTrans]*/,"stereo","auxeingang");
SetValue($lautleiseid,true);
setvalue(20739 /*[EG\WZ\Geräte\Stereo\Modus]*/,"aux");
}
else //wenn stereoanlage schon an und auf aux ist dann ausschalten
{
WinLIRC_SendOnce(29416 /*[Diverse\Module\IrTrans]*/,"stereo","aveingang");
WinLIRC_SendOnce(29416 /*[Diverse\Module\IrTrans]*/,"stereo","aus");
setvalue(20739 /*[EG\WZ\Geräte\Stereo\Modus]*/,"aus");
}
}
while ($data == true) // solange ausführen wie Taster gedrückt ist
{
if ($lautleise)
{
if (getvalue(20739 /*[EG\WZ\Geräte\Stereo\Modus]*/)!= "aux") // wenn stereoalnlage aus oder auf tv ist erst ein bzw. umschaltenschalten
{
WinLIRC_SendOnce(29416 /*[Diverse\Module\IrTrans]*/,"stereo","aveingang");
WinLIRC_SendOnce(29416 /*[Diverse\Module\IrTrans]*/,"stereo","auxeingang");
setvalue(20739 /*[EG\WZ\Geräte\Stereo\Modus]*/,"aux");
SetValue($lautleiseid,true);
}
WinLIRC_SendOnce(29416 /*[Diverse\Module\IrTrans]*/,"stereo","lauter"); //lauter machen
}
else
{
WinLIRC_SendOnce(29416 /*[Diverse\Module\IrTrans]*/,"stereo","leiser"); //leiser machen
}
IPS_SLEEP(100); //kurz warten
$data=getvalue($tasterdata);// neuen status vom taster abholen
}
SetValue($lautleiseid,!getvalue($lautleiseid)); // lautleise invertieren
?>
Ja es theoretisch möglich, so was per Script zu realisieren, aber leider macht das Xcomfort System uns da einen strich durch die Rechnung.
Warum?
Nun, durch das Routing im Xcomfort System können manchmal Signale verzögert übertragen werden. Wird z.B. ein Taster lang gedrückt, und das Event, Taster runtergedrückt, braucht länger als das Event Taster losgelassen, wird der lange Tastendruck als kurz interpretiert.
Dies liegt daran, dass das System immer auf Rückmeldungen wartet. Falls ein Timeout auftritt und der Befehl erst beim zweiten mal korrekt empfangen wurde, vergehen rund 1-2 Sekunden. Diese sind entscheidend, ob nun lang oder kurz erkannt wird. In 80% der fälle klappt es, aber in den anderen 20% halt nicht. Lösung wäre, die Lang gedrückt Zeit deulich zu verlängern, aber wer will schon 5 Sekunden den Taster drücken…
Die Lösung wäre, die Instanzen „Xcomfort Binary Input“ und " Xcomfort Remote" so zu erweitern, dass der lange Tastendruck erkannt wird. Dies wird im Xcomfort Protokoll auch signalisiert (MGW_TED_UP = kurz; MGW_UP_PRESSED/RELEASED = lang). leider wertet IpSymcon dies bisher nicht aus.
Ich setze IP-symcon ein fuer erweiterte Funktionen in meinem XComfort domotica und arbeite jetzt an ein Alarmsystem. kurz/lang, up/down fuer jeder Taster macht das aktivieren/deaktivieren viel einfacher.
Die Bedienung der Moellertaster kann ausgewertet worden, wenn es eingegeben ist als MXC_Remote Instanz.
Die Status-Variabele zeigt ob die obere Taste, TRUE, oder die untere Taste, FALSE, gedruckt worden ist.
Die DATA-Variabele aendert sich nach dem Druckverhalten:
0 Taste ist nur kurz eingedruckt worden.
1 Taste wird lang eingedruckt. DATA-Variabele aendert nach 0,5…1 sekunde.
2 Taste ist lang eingedruckt worden. DATA-Variabele aendert sich wenn die Taste nicht mehr eingedruckt wird.
Langere Eindruckzeiten koennen ausgewertet worden mittels ein Delay-Event:
IPS_SetEventCyclicDatebounds($EventDelayID,time()+$EventDelay,0);
IPS_SetEventCyclicTimebounds($EventDelayID,time()+$EventDelay,0);
Ist das nach wie vor der funktionierende Workarround ?
Ich schmeisse die normale „Binary Input“ Instanz raus, lege für meinen Binäreingang eine „xComfort Fernbedienung“ Instanz an und nutze die Data Variable für die Darstellung des langen Tastendrucks ?