Motorisierte TV-Wandhalterung einigermaßen winkelgenau einstellen

Begonnen von Prof. Dr. Peter Henning, 17 Juni 2018, 10:52:31

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

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

j_o_e

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!

Prof. Dr. Peter Henning

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