ich habe überlegt (mit Jerome's Hilfe), ob es nicht möglich wäre, den HM-LC-Sw2PBU-FM mit dem Sketch von Jerome's Sketch des HB-UNI-SenAct-4-4 zu flashen. Das sollte auch erstmal funktionieren.. Nun kommen wir aber zum ersten Problem. Jerome hat mich darauf hingewiesen, das man in der CCU keine Direktverknüpfungen von klassischen HM Geräten mit derselben Seriennummer erstellen (Sprich Button und Relais mit derselben Seriennummer) kann. Bzw. man kann diese erstellen, aber man sieht diese dann nicht in der WEBUI. Da die CCU aber immer direkt zwei Direktverknüpfungen anlegt, kann ich nicht eine löschen und die andere nur auf den kurzen Tastendruck reagieren lassen (weil ich diese ja nicht sehe, kann ich diese im Nachhinein nicht bearbeiten)
Somit gäbe es zwei Möglichkeiten.
1. Die Direktverknüpfung sichtbar machen, vermutlich ist das "nur" ein Filter.. aber da habe ich keine Ahnung wo ich das suchen sollte, und ob es überhaupt im erreichbaren Code zu finden ist.... sehr schwierig bis aussichtslos...
2. Den Sketch anpassen..
Folgendes möchte ich erreichen:
Taste1 Kurz gedrückt ==> Meldung an die CCU und toggel von Relais 1 (mit Meldung an die CCU, das das Relais umgeschaltet wurde)
Taste1 Lang gedrückt ==> Meldung an CCU für Progrmme / Direktverknüpfung zu einem anderen Aktor
Taste2 Kurz gedrückt ==> Meldung an die CCU und toggel von Relais 2 (mit Meldung an die CCU, das das Relais umgeschaltet wurde)
Taste2 Lang gedrückt ==> Meldung an CCU für Progrmme / Direktverknüpfung zu einem anderen Aktor
Also der Aktor soll sich so verhalten wie bisher, also Relais mit Tastendruck direkt umschalten, ohne Abhängigkeit zur CCU (Ausfallsicherheit)
Zusätzlich möchte ich aber den Kurzen/Langen Tastendruck in Programmen als Auslöser, oder per Direktverknüpfung verwenden können..
Beim Rolladenaktor wäre dasselbe Prinzip ebenfalls sinnvoll, so kann man z.B: mit dem kurzen Durck das Licht ein/ausschalten und mit langem Tastendruck die Rolladen fahren lassen(das mache ich persönlich selten manuell, und deshalb ist der Taster leider fast ungenutzt)
Ich gehe davon aus, das diese Funktion von vielen Usern gewünscht wäre.
Meine Überlegung war nun, das man beim Tastendruck "einfach" zusätzlich zum Status senden, das Relais toggelt.
Hier der Original Codeschnipsel:
Code: Alles auswählen
virtual void state(uint8_t s) {
DHEX(BaseChannel::number());
Button::state(s);
RemoteEventMsg& msg = (RemoteEventMsg&)this->device().message();
DPRINT("BATTERY IS LOW? "); DDECLN(this->device().battery().low());
msg.init(this->device().nextcount(), this->number(), repeatcnt, (s == longreleased || s == longpressed), this->device().battery().low());
if ( s == released || s == longreleased) {
this->device().sendPeerEvent(msg, *this);
repeatcnt++;
}
else if (s == longpressed) {
this->device().broadcastPeerEvent(msg, *this);
}
}
uint8_t state() const {
return Button::state();
}
bool pressed () const {
uint8_t s = state();
return s == Button::pressed || s == Button::debounce || s == Button::longpressed;
}
Da ich im Codebearbeiten/lesen noch nicht so fit bin, hoffe ich ihr könnt mir helfen.
Meine Idee war es nun beim Butten released Aktion das Schalten des Relais mit anzustoßen, so das ich auf die Zentralendirektverknüpfung verzichten kann. Wie kann ich an dieser Stelle den aktuellen ButtonPin heraus bekommen? Steht der irgendwo in "s" drin z.B. s.getPin() <-- diese Funktion steht in Button.h drin, aber ob ich hier richtig bin das weiß ich leider nicht..?
Code: Alles auswählen
if ( s == released || s == longreleased) {
if ( s == released ) {
// hier müsste ich irgendwie herausfinden, welcher ButtonPin gedrück wurde und den PIN+9 = RelaisPin schalten.
sdev.channel(s.getPin() + 9).toggleState();
}
Vielen Dank schon mal!
Gruß Carsten