Steuerung von Elero Rollläden

Begonnen von HCS, 26 September 2015, 05:15:25

Vorheriges Thema - Nächstes Thema

nussa

nach einer unglaublichen installationsorgie (was haben sich die elerotypen eigentlich gedacht?!!?  >:( )...
günstgerweise sind alle antriebe an einem stromkreis und wir besitzen 3 fernbedienungen 15 antriebe und jetzt auch noch den stick... wollte ich noch von einem fallstrick berichten.

einige meiner antriebe konnte ich nicht, wenn alle 15 antriebe im lernmodus waren erfolgreich am stick anmelden, .
ich musste sie in dreier/vierer gruppen in den lernmodus versetzten, also ab und anklemmen. erst dann war ein komplettes anlernen möglich. ansonsten gaben die antriebe keine antwort auf die befehle und zuckten nur einmal beim absetzten vom befehl... die dinger fahren scheinbar erst wenn sie erfolgreich geantwortet haben.

ja ein kleines problem habe ich noch... fasse ich die dinger in eine structure zusammen fahren nicht alle... also die befehlsqueue funktioniert bei meinen raffstores nicht. der erste fährt manchmal... beim zweiten zuckt es nur.. rest wird ignoriert.
wenn ich über notify schalte muss ich auch zwischen den set´s einen sleep machen.. nicht schlimm :-)
herzlichen dank für das modul... und beim nächsten haus wird es kein elero zeug mehr.  ;)

lg nussa

   

HCS

Zitat von: nussa am 23 Juni 2016, 16:50:34... habe ich die antrieb zurückgesetzt (auf/ab/stop/prog... für 6 sekunden) danach den stick.. und danach alle fernbedienungen angelern...
Der Fensterbauer hat damals bei mir auch gefühlte 10 Nervenzusammenbrüche durchlebt, bis das komplette System (ohne Stick) bidirektional (worauf ich bestanden habe) gelaufen ist  ;D ;D

Und dann habe ich 5 Nervenzusammenbrüche gebraucht, bis der Stick überall korrekt dazugelernt war, vor allem, nachdem ich mich vertan habe und dann mal zwei Antriebe auf den selben unitec reagiert haben und ein anderer bei "ab" nach oben gefahren ist, und und ...

Danach dachte ich: "Rollladengurte sind eigentlich gar nicht so übel"  ;D ;D ;D

nussa

mein letzter bericht (versprochen!! ;-) )... nachdem ich gescheitert bin, alle meine raffstores auf einen kanal anzulernen um sie gleichzeitig zu steuern (mit den tasten am stick funktionierts aber mit sombrero und fhem nicht), mach ich das jetzt mit "structure".
dabei hatte ich einige schwierigkeiten... anders als bei euch, muss ich 10 sec. async_delay einstellen damit sie "sicher" nacheinander abgearbeitet werden.
folgendes problem hat sich dadurch ergeben: ich hatte für die einzelne fenster "toptobuttomtime" festgelegt. durch den langen delay sind mir dann die "refresh´s" der ersten fenster bei den befehlen für die letzten fenster in die quere gekommen und haben gestört. auch musste ich das refresh interval beim stick so hoch drehen, dass er nur mehr alle heiligen zeiten kommt.

störend ist bei meinem langen delay auch, dass structure auch beim ersten gerät den delay abwartet... wenn jemand da eine idee hat bin ich dankbar.

@HCS in deinen source schreibst du ja... # [ ] Perhaps we need a cache for incoming commands that delays the incoming commands for "ChannelTimeout" seconds to give the previous command a chance to hear its acknowledge

kann ich hoffen du baust das noch ein...?

lg


HCS

Zitat von: nussa am 29 Juni 2016, 15:05:09
@HCS in deinen source schreibst du ja... # [ ] Perhaps we need a cache for incoming commands that delays the incoming commands for "ChannelTimeout" seconds to give the previous command a chance to hear its acknowledge
Verdammt - mal sollte echt achtgeben, was man wo hinschreibt  ;D ;D ;D

Ich bin mir aber auch nicht sicher, ob genau das zu einem brauchbaren Ergebnis führt. Wenn wir z.B. 3 Sekunden Channel timeout haben, dann würde alle 3 Sekunden ein Antrieb in Bewegung gesetz. Nach 10 Antrieben sind dann 30 Sekunden rum und der erste meldet zurück, dass er die Endposition erreicht hat. Wir sind aber gerade dabei, die nächsten 5 noch in Gang zu setzen.

Falls Du das hinbekommst, könntest Du Folgendes mal probieren:
Alle delays aus dem structure raus
Die 36_EleroStick.pm ändern:
sub EleroStick_StartQueueTimer($) {
  my $hash = shift;
  my $name = $hash->{NAME};
  my $timerName = $name . "#QueueTimer";

  my $interval = 0.5;

  InternalTimer(gettimeofday() + $interval, "EleroStick_OnQueueTimer", $timerName, 0);

  ###debugLog($name, "Timer started: $timerName");
}

my $interval = 0.5; auf etwas mehr als Dein ChannelTimeout setzen, also z.B.
my $interval = 4.0;

Dann sammelt die queue die eingehenden Befehle und schickt alle 4 Sekunden einen raus.
Falls das funktionieren sollte, kann ich dann was "ordentliches" draus machen.

Ich kann das leider nicht nachstellen, ich habe keine Raffstores und mit meinen Antrieben funktioniert das mit einem structure wie gewünscht:
Internals:
   ATTR       level
   DEF        level EleroBedroom EleroTerrace EleroLivingRoomEast EleroLivingRoomSouth EleroLivingKitchen EleroTerrace EleroStairwell1 EleroStairwell0
   NAME       AllShutters1stFloor
   NR         244
   NTFY_ORDER 50-AllShutters1stFloor
   STATE      undefined
   TYPE       structure
   Content:
     EleroBedroom top_position
     EleroLivingKitchen top_position
     EleroLivingRoomEast stopped_in_undefined_position
     EleroLivingRoomSouth top_position
     EleroStairwell0 top_position
     EleroStairwell1 stopped_in_undefined_position
     EleroTerrace stopped_in_undefined_position
   Readings:
     2016-06-29 16:32:17   LastDevice      EleroStairwell0
     2016-06-29 16:32:17   LastDevice_Abs  EleroStairwell0
     2016-06-29 16:32:17   state           undefined
Attributes:
   room       .Elero

nussa

das bekomm ich hin... ich werde berichten.
danke!!!
lg nussa

HCS

Zitat von: nussa am 29 Juni 2016, 15:05:09
mein letzter bericht (versprochen!! ;-) )...
Zitat von: nussa am 29 Juni 2016, 17:34:47
das bekomm ich hin... ich werde berichten.
;D ;D ;D ;D

Kannst so lange berichten bis es funktioniert und wir das mit den Raffstores gerafft haben  ;D

Ich muss nochmal in einer ruhigen Minute (sofern sich dieser Wunsch mal erfüllt) über die Abläufe nachdenken, was wann wie sendet und wann welche Antwort kommt und was prio hat (also z.B. Befehl zum Antrieb absetzen) und wann der verfl.... Elero-Stick keine Befehle akzeptiert usw.

Das Protokoll vom Stick löst ähnliche Begeisterung aus wie das Anlernverfahren der Antriebe ...

nussa

mit 8 Sekunden delay funktioniert das jetzt zuverlässig  :) ... ich hatte vorher eine multitel2 mit einem homematic aktor per tastensequenzen gesteuert.... das war herber  ;)
wenn du den delay erst ab dem zweiten motor in der queue hinbekommst, passt der WAF auch noch..

das der stick bzw. das protokoll umständlich ist wundert kaum ;) die entwickler bei elero bekommen sicher Prämien fürs umständliche denken.. ich mach mittlerweile schon hausbesuche in der nachbarschaft weil die fernbedienungen plötzlich nicht mehr funktionieren und die bewohner tagelang im dunklen sitzen, weil sie sie gebrauchsanweisung von elero nicht kapieren ;-)
als bei uns einer der aktoren getauscht wurde, hat sich sogar der monteur der fensterfirma geweigert die fernbedienung anzulernen.  ;D

auf jeden fall ist das jetzt schon super und man kann von einer vernünftigen steuerung sprechen!
danke dafür!

lg 





HCS

Zitat von: nussa am 30 Juni 2016, 21:33:07
wenn du den delay erst ab dem zweiten motor in der queue hinbekommst, passt der WAF auch noch..

Das u.A. meine ich mit dann was "ordentliches" draus machen.

Dann mache ich ein Attribut "delay", in dem man den Wert einstellen kann und sorge dafür, dass der erste sofort raus geht.
Allerdings ist mir noch nicht ganz klar wie. Wenn der erste sofort raus ist, ist der zweite wieder ein erster  :o
Es sein denn, der zweite kommt innerhalb der 0.5 Sekunden, die der erste verzögert wird.

Oder zwei Attribute?
delayFirst
delayFollowing

Ich bin aber generell noch nicht von der Sache überzeugt. Eigentlich würde ich gerne verstehen, warum man in Deinem Fall nur alle 8 Sekunden einen Antrieb losschicken kann.

nussa

bei mir verbaut sind "Combio-868 JA/Pulse"
aufgefallen ist mir, wenn ich die raffstores mit sombrero steuere, dass erst wenn die antwort vom antrieb kommt das teil losfährt.
bei der antwort lässt er sich ziemlich zeit. vielleicht weil er abwartet ob wir nur einen impuls zum lamellenverstellen schicken?... oder es handelt sich um funklaufzeiten? ich glaub jeder combio ist auch repeater um alle raffstores erreichen zu können.

vielleich hat jemand den original server mit den combio ja/puls in verwendung und kann berichten wie es sich dort verhält.
oder es gibt eigene befehle die von elero nicht veröffentlicht sind...

wenn ich hilfreich sein kann... ich probier gerne alles aus..

lg

HCS

Zitat von: nussa am 01 Juli 2016, 10:46:20
aufgefallen ist mir, wenn ich die raffstores mit sombrero steuere, dass erst wenn die antwort vom antrieb kommt das teil losfährt.
bei der antwort lässt er sich ziemlich zeit. vielleicht weil er abwartet ob wir nur einen impuls zum lamellenverstellen schicken?
Das klingt sehr plausibel.

Zitat von: nussa am 01 Juli 2016, 10:46:20
... oder es handelt sich um funklaufzeiten?
Eher nicht, in 8 Sekunden schafft es ein Funk-Signal ziemlich genau drei mal zum Mond und zurück  ;D ;D ;D

Aber ich glaube, dass Du die Erklärung geliefert hast. Raffstores warten, ob man drauf bleibt.
Die Doku von Stick sagt das hier:
ZitatThe stick will always try to process the last command received from the host. The command before might be discard if not already done
Wenn also der nächste Befehl geschickt wird, ist der Stick (weil Raffstore) noch am warten, wie es wohl für den vorhergehenden weiter geht.
Und dann passiert: "The command before might be discard if not already done"

Jetzt muss ich mal weiter denken, ob ein EleroDrive-Device eventuell eine Einstellung haben sollte, dass es ein Raffstore ist und es sich dann anders verhält.

In der sensationellen einseitigen Doku steht aber auch kein Wort über Raffstores drin  :(

HCS

Ich habe das Thema nicht vergessen, aber mir mangelt es gerade an Zeit.
Nächste Woche wird das hoffentlich besser.

nussa

ich hab mich zwischenzeitlich an deinem code vergangen. sorry!!, attribut async_delay hinzugefügt und WAF verbessert ... ist sehr stümperhaft, weil ich keinen tau von echter perl programmierung habe, aber alles funktioniert soweit... also bitte keinen stress!! ist ja alles hobby ;-)


danke!!


#=======================================================================================
sub EleroStick_Enqueue($$) {
  my ($hash, $data) = @_;
  my $name = $hash->{NAME};

#  EleroStick_SimpleWrite($hash, $data);

  if(!$hash->{QUEUE}) {
    ##  $hash->{QUEUE} = [$data];   ersetzen durch "" damit nachher nicht gesendet wird
    $hash->{QUEUE} = [""];
    ###debugLog($name, "QUEUE created with: $data");
   
    EleroStick_SimpleWrite($hash, $data);  # sofortiges senden des ersten Eintrags
    my $timerName = $name . "#QueueTimer";
    my $interval = 0.1;
    InternalTimer(gettimeofday() + $interval, "EleroStick_OnQueueTimer", $timerName, 0);
    
  }
  else {
    push(@{$hash->{QUEUE}}, $data);
    ###debugLog($name, "Pushed to QUEUE: $data");
  }

}
#=======================================================================================

sub EleroStick_StartQueueTimer($) {
  my $hash = shift;
  my $name = $hash->{NAME};
  my $timerName = $name . "#QueueTimer";
  my $interval = AttrVal($name, "async_delay", 0.5);
  #my $interval = 7.0;

  InternalTimer(gettimeofday() + $interval, "EleroStick_OnQueueTimer", $timerName, 0);

  ####debugLog($name, "Timer started: $timerName");
}


HCS

Zitat von: nussa am 06 Juli 2016, 13:50:37
ich hab mich zwischenzeitlich an deinem code vergangen. sorry!!
Mach ruhig. Ich nehme es als Anregung oder wie es ist oder sonstwie ...
Hauptsache es läuft bei Dir erst mal wie gewünscht.

Zitat von: nussa am 06 Juli 2016, 13:50:37
weil ich keinen tau von echter perl programmierung habe
Geht mir auch so  ;D ;D ;D

Zitat von: nussa am 06 Juli 2016, 13:50:37
also bitte keinen stress!! ist ja alles hobby ;-)
Sehr gut, dann setze ich die Medikamente wieder ab ...  ;D ;D

chrisu667

Hallo Nussa,

hast du dein Problem gelöst?
Vielleicht kannst du mir helfen, da es bei mir noch immer nicht mit den Raffstores funktionert..
Vielen Dank im voraus

chrisu667

Utze

Wenn man mal gecheckt hat, dass man die pm-Dateien gar nicht auf den Raspi spielen muss, weil die schon drauf sind, funktionierts einwandfrei. Großartige Arbeit, vielen Dank an die Autoren für die Bereitstellung der Infos & Dateien. FHEM macht einfach sau viel Spaß   ::)