NEWS
Jalousie Steuerung / Rolladensteuerung • Z-Wave
-
So, nachdem ich jetzt so ziemlich alles probiert habe um die Lamellenstellung zu programmieren und es ja immer funktioniert wenn nur eine und keine Gruppe genutzt wird.
Poste ich mal meinen Ansatz, damit man sieht was ich versucht habe.
Das Problem besteht in der Kommunikation, denn ich möchte ja das ich wenn alle Jalousien irgendwo stehen z.b. die Südseite aufgestellt wird für 500ms, mein Problem ist nur, das die erste dann funktioniert und die zweite erst 15 Sekunden später los fährt und nach 100ms stoppt obwohl 500ms angegeben sind.
Meiner Meinung nach hakt es am Sendepuffer und der dazugehörigen ACK Abfrage, wobei mich danach wiederum wundert, das die Zweite Jalousie ja erst 15 Sekunden später den Befehl annimmt egal ob ich das Callback mit Timeout starte oder auch mit einem Callback innerhalb des setState.
Wenn ich aber allen Jalousien einen Fahrbefehl erteile dann liegen ms zwischen den Befehlen.
Meine Ansatz:
Bei Einzelanbindung wenn also item ein String ist, insofern nur ein Aktor geht alles. Wenn ich das gleiche auf alle anwende wie in dem Einzelaktor fahren die Jalousien nur noch wie wild, eine 500ms, eine 1500ms eine 800ms etc etc. und dann steht ja nichts gleichmässig. Und deswegen lieber so wie ich es gemacht habe.
Das mit function und return function verhindert ein überschreiben der variablen, dadurch wird es etwas unübersichtlicher aber es bei asyncronem Zugriff der Variablen nichts passieren.
Also die erste der Schleife fährt genau so wie sie soll 500ms, die anderen maximal 100ms…. bis die zweite etc dann fährt vergehen allerdings auch 15 sekunden.
! function pushbutton( item, timeout=200, append='', index=0 )
! {
! log( 'Item: ' + item);
! log( 'timeout: ' + timeout);
! log( 'append: ' + append);
! log( 'index: ' + index);
! if( typeof(item) == 'string' )
! {
! setState(item + append, true);
! setStateDelayed( item + append, false, timeout );
! }
! else
! {
! setState( item[index]+append, true, (function(brr_item, brr_timeout, brr_append, brr_index ){
! return function () {
! setTimeout( (function(crr_item, crr_timeout, crr_append, crr_index) {
! return function() {
! setState( crr_item[crr_index]+crr_append, false, (function( drr_item, drr_timeout, drr_append, drr_index ) {
! return function() {
! if( ++drr_index < drr_item.length )
! {
! pushbutton( drr_item, drr_timeout, drr_append, drr_index );
! }
! };})(crr_item,crr_timeout,crr_append,crr_index) );
! };})(brr_item,brr_timeout,brr_append,brr_index), brr_timeout );
! };})(item, timeout,append,index ) );
! }
! } -
Hier der erste übersichtlichere Ansatz:
! function pushbutton( item, timeout=200, append='', index=0 )
! {
! if( typeof(item) == 'string' )
! {
! setState(item, true);
! setStateDelayed( item, false, timeout );
! }
! else
! {
! setState( item[index], true );
! setTimeout( (function(arr_item, arr_timeout, arr_append, arr_index ){ return function () {
! setState( arr_item[arr_index], false );
! if( ++arr_index < arr_item.length )
! {
! pushbutton( arr_item, arr_timeout, arr_append, arr_index );
! }
! }})(item, timeout, append, index ),timeout)
! }
! }mit gleichem Ergebniss.
Der Aufruf ist z.b. pushbutton( ['zwave.0.NODE6', 'zwave.0.NODE7'], 500, '.SWITCH_MULTILEVEL.Bright_1' );
So kann ich meine Arrays und der funktionen der Google Home Integration entsprechend klein halten…...
-
Kein Schwein ruft mich an, keine Sau interessiert sich für mich
Push