Jalousiesteuerung (HM-LC-Bl1-FM)

Begonnen von Gizemo, 08 Juli 2015, 13:23:12

Vorheriges Thema - Nächstes Thema

Gizemo

Hallo zusammen :)

Ich bin noch recht neu in dem Thema FHEM und hätte da eine Frage zur meiner Jalousiesteuerung.
Ich habe 3 Jalousien (HM-LC-Bl1-FM) die über den 6-Fach Taster ( HM-PB-6-WM55) gesteuert werden.
FHEM läuft bei mir auf einem Raspberry Pi mit einem HMLAN als transceiver.
Ich habe die Aktoren vor dem anmelden an FHEM miteinander bekannt gemacht, so dass sie auch ohne FHEM miteinander kommunizieren könnten.

Mein Problem lautet wie folgt:
Meine Jalousien fahren mit dem Sonnenuntergang herunter und mit dem Sonnenaufgang wieder herauf. Sollte ich nun während dieses herab oder herauffahrens den Vorgang mit der entgegen gesetzten Richtungstaste unterbrechen fährt er direkt  nach einem kurzen Stop in die entgegengesetzte Richtung. Genau dies möchte ich vermeiden.
Kann es sein das ich nur ein Register im Aktor anders setzen muss?

Gruß


martinp876

was willst du? Stop? dann sende stop

rapster

#2
Servus,

da ich heute meine beiden BlindAktors ebenfalls in Betrieb genommen habe, und mir gerade eben über das selbe Gedanken mache interessiert mich die Frage gerade ebenfalls sehr :-)

@Martin,
Was er denke ich meint ist (was mein Problem zumindest ist):

- Short auf Taster1 sendet "set Blindaktor up 50"
- Short auf Taster2 sendet "set Blindaktor down 50"

Nur wie stoppe ich den Aktor jetzt manuell bei z.B. 25 wenn ich nur diese 2 Tasten zur Verfügung habe?
Der Aktor meldet ja an Fhem soweit ich das beurteilen kann auch erst etwas zurück nachdem er bei 50 angekommen ist, also kann ich ja vor dem "set up/down" auch nicht abfragen ob er gerade in bewegung ist?

Oder muss ich mir dafür selber einen Hilfs-Dummy hinstellen (wäre jetzt so eine Lösungsidee hierfür), welchen ich vor jedem "set up | down" abfrage ob er auf dem gleichen Stand wie der Blindaktor ist, und andernfalls (bedeutet Blindaktor müsste gerade in bewegung sein) ein Stop anstelle des up/down sendet?

Grüße

EDIT:
- Unterschied zu Gizemos Problem ist dass ich das ganze komplett über Fhem realisieren möchte,
- und Gizemo über direktes peering der Devices.
Ansonsten sollte die Problemstellung die selbe sein.

rapster

#3
Hab das ganze jetzt erstmal für mich zufriedenstellend so gelöst:

1. Ein notify auf den(die) BlindActuator erstellen, mit der Definition:
BlindActuator(01|02|03):\s*([\d.]{1,4}|off|on|set_.*)\s*$ {
if($EVENT =~ /(?!set_stop)set_.*/) {
    CommandSetReading(undef, "$NAME myState moving");
    CommandSetReading(undef, "$NAME myStateTime ". time);
    }elsif( time_str2num(ReadingsTimestamp($NAME,'state',0)) - ReadingsVal($NAME,'myStateTime',0) >= 0.5 ) {
    CommandSetReading(undef, "$NAME myState $EVENT");
    }
}

??? => http://forum.fhem.de/index.php/topic,38951.0.html

2. Diese Sub in die myUtils:
sub blind($$) {
my ($NAME,$CMD) = @_;
if( !ReadingsVal($NAME,'myState',0) || Value($NAME) eq ReadingsVal($NAME,'myState','') ){
CommandSet(undef, "$NAME $CMD");
}else {
CommandSet(undef, "$NAME stop");
}
}


3. Zum set'ten nicht mehr das device direkt ansprechen, sondern über die blind-sub Befehle absetzen, z.B.:
{ blind('BlindActuator01','up 25') }
{ blind('BlindActuator01','off') }
{ blind('BlindActuator01','pct 80') }


somit kann jeder set Befehl welcher über Fhem an den Actuator abgesetzt wird, über einen Taster welcher die blind() function verwendet gestopt werden.

Beispiele:
- Taste1 macht beim ersten Druck ein "up 50", falls dieser Zustand noch nicht erreicht ist macht ein erneuter Druck auf die Taste ein "stop", und nächstes mal wieder "up 50":
Zitat{ blind('BlindActuator01','up 50') }  ==> 1. Druck lässt den Aktor anlaufen
{ blind('BlindActuator01','up 50') } ==>  2. Druck auf Taster während der Aktor noch läuft, stopt ihn
{ blind('BlindActuator01','up 50') } ==> 3. Druck auf Taster lässt ihn wieder anlaufen
- Wenn der BlindActuator durch irgend einen anderen Grund (z.B. fhem Befehl) gerade in "Bewegung" ist, setzt ein Druck auf die Taste1 ein "stop" ab, und nächsten mal falls der Actor gerade in Ruhestellung ist die "up 50".
Zitatset BlindActuator01 on ==> Fhem Befehl lässt den Aktor anlaufen
{ blind('BlindActuator01','up 50') } ==> 1. Druck auf Taster während der Aktor noch läuft, stopt ihn
{ blind('BlindActuator01','up 50') } ==> 2. Druck auf Taster lässt ihn wieder anlaufen


Evtl. kennt jemand noch eine einfachere Lösung, dann gerne her damit...

Ich denke das wird bei Gizemo allerdings nicht funktionieren, da er den Wandtaster und BlindActuator direkt miteinander gepeert hat.


Gruß

martinp876

Ich wuerde ein stop ueber die statemachin machen. Das ist im einsteigerdoc beschreiben