Ich habe mir diese schwenkbare Wandhalterung geleistet: https://www.amazon.de/RICOO-Wandhalterung-SE2544-Fernsehhalterung-Fernsteuerung/dp/B00IAM45KQ
Mit etwas Mühe habe ich meine Harmony-Fernbedienung dazu gebracht, das Teil zu steuern (Kommandos Links, Rechts,OK).
Nächster Schritt: einigermaßen winkelgenau Ansteuerung mit FHEM. Dazu ein einfaches Modell:
- Beim Anlauf dauert es einen Moment, bis die volle Schwenkgeschwindigkeit erreicht wird, und beim Abstoppen dauert es auch einen Moment, bis das Ding steht. Die Summe dieser beiden Zeiten ist startstoptime. Die Schwenkgeschwindigkeit beträgt velocity Grad pro Sekunde.
Diese Werte, so wie die gegenwärtige Position position stecken als Readings in einem Dummy,
Internals:
NAME Wandhalterung
NR 199
STATE 0°
TYPE dummy
READINGS:
2018-06-15 17:49:02 oldposition 0
2018-06-15 17:49:02 position 0
2018-06-15 17:47:12 startstoptime 4.0
2018-06-15 17:48:08 state reset
2018-06-15 17:46:24 velocity 3.8
Attributes:
group Harmony
readingList position oldposition startstoptime velocity
room Multimedia
setList reset:noArg position startstoptime velocity
stateFormat position°
Zusätzlich gibt es ein notify:
Internals:
CFGFN
DEF Wandhalterung:(position|reset).* {setWHposition($EVENT)}
NAME Wandhalterung_IF
NR 2888
NTFY_ORDER 50-Wandhalterung_IF
REGEXP Wandhalterung:(position|reset).*
STATE 2018-06-15 17:49:02
TYPE notify
READINGS:
2018-06-15 17:08:13 state active
Attributes:
group Harmony
room Multimedia
durch das ein Codeschnipsel in der zugehörigen myUtils aufgerufen wird.
##############################################################################
#
# Wandhalterung
#
##############################################################################
sub setWHposition($){
my ($event) = @_;
my ($dummy,$target) = split(" ",$event);
#-- hash of position dummy
my $name = "Wandhalterung";
my $hash = $defs{$name};
my $current = ReadingsVal($name,"oldposition",0);
#-- reset
if( $dummy eq "reset"){
fhem("set harmony_55193254 command Rechts");
readingsSingleUpdate( $hash, "position", 0, 0 );
readingsSingleUpdate( $hash, "oldposition", 0, 0 );
return
}
#-- parameters
my $velo = ReadingsVal($name,"velocity",0);
my $stime = ReadingsVal($name,"startstoptime",0);
my $dir = "";
my $time = 0;
if( $target > $current){
$dir = "Links";
$time = ($target-$current)/$velo - $stime/2;
}elsif( $target < $current){
$dir = "Rechts";
$time = ($current-$target)/$velo - $stime/2;
}else{
Log 1,"[SetWHposition] cannot determine current=$current / target=$target";
return
}
Log 1,"[SetWHposition] current=$current target=$target dir=$dir time=$time";
#-- execute
RemoveInternalTimer($hash);
fhem("set harmony_55193254 command ".$dir);
InternalTimer(gettimeofday()+ $time, "setWHstop",$hash,0);
readingsSingleUpdate( $hash, "oldposition", $target, 0 );
return
}
sub setWHstop(){
fhem("set harmony_55193254 command OK");
}
Funktioniert nach einigem Spielen mit den Parametern bis auf 5 Grad genau aus der Ruheposition. Zum Verfahren zwischen Positionen muss ich das Modell noch etwas verbessern.
LG
pah
Hi,
darf ich zwei Fragen dazu stellen:
1. Wie hat das Anlernen der Harmony funktioniert? Ich scheitere daran nämlich trotz unzähliger Versuche. Wenn das Anlernen des IR-Codes nach unendlich vielen Versuchen endlich geklappt hat, funktioniert der IR-Befehl allerdings trotzdem nicht. Oder lassen sich ggf. sogar angelernte IR Codes irgendwie teilen?
2. Ließe sich nicht auch der IR Befehl für Position 1 bei der Harmony anlernen? Die Originalfernbedienung lässt ja eine Programmierung eines bestimmten Winkels zu, die dann mit "Pos 1" und "OK" abgerufen werden kann. Ließe sich dieser Befehl nicht übertragen?
Danke und viele Grüße!
Hm, ist ja nun schon etwas her - aber ich meine mich zu erinnern, dass das schwierig war. Ging nur aus nächster Nähe, und die Positionsbefehle habe ich gar nicht anlernen können. Nur "OK", "Links", "Rechts" und "Reset".
LG
pah
Danke!