FHEM Forum

FHEM - Hausautomations-Systeme => RFXTRX => Thema gestartet von: dero am 17 Januar 2016, 19:30:09

Titel: Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: dero am 17 Januar 2016, 19:30:09
Manchmal verschluckt mein RFXTRX Kommandos, evtl. Sendequalität, Störungen, Kollisionen...

Folgender Patch fügt ein Attribut "repeat" zu TRX_LIGHT hinzu.

Bespiel: attr SD_Light repeat 5

Kommandos an SD_Light werden 5 mal gesendet.



diff --git a/fhem/FHEM/46_TRX_LIGHT.pm b/fhem/FHEM/46_TRX_LIGHT.pm
index 304dadd..23e74e8 100755
--- a/fhem/FHEM/46_TRX_LIGHT.pm
+++ b/fhem/FHEM/46_TRX_LIGHT.pm
@@ -159,7 +159,7 @@ TRX_LIGHT_Initialize($)
   $hash->{DefFn}     = "TRX_LIGHT_Define";
   $hash->{UndefFn}   = "TRX_LIGHT_Undef";
   $hash->{ParseFn}   = "TRX_LIGHT_Parse";
-  $hash->{AttrList}  = "IODev ignore:1,0 do_not_notify:1,0 ".
+  $hash->{AttrList}  = "IODev ignore:1,0 do_not_notify:1,0 repeat ".
                         $readingFnAttributes;

}
@@ -509,7 +509,9 @@ TRX_LIGHT_Set($@)
        return "No set implemented for $device_type . Unknown protocol type";   
   }

-  IOWrite($hash, $hex_prefix, $hex_command);
+  for (my $repeat = $attr{$name}{repeat} || 1; $repeat >= 1; $repeat = $repeat - 1) {
+    IOWrite($hash, $hex_prefix, $hex_command);
+  }

   my $tn = TimeNow();
   $hash->{CHANGED}[0] = $command_state;


dero
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: ext23 am 23 Januar 2016, 12:30:31
Moin,

nicht schlecht, nimmt Willi das mit auf, haste schon mal gefragt?

Gruß
Daniel
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: dero am 23 Januar 2016, 17:54:59
Hey Willi,

Würdest du bitte den Patch mergen?

Danke!

Dero
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: Willi am 25 Januar 2016, 22:49:07
Danke für den Patch.  8)

Habe ich soeben ins SVN gepackt.
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: Timmy.m am 28 Januar 2016, 21:07:30
Spitze, vielen Dank. Das ist eine echte Bereicherung!
Bisher habe ich mit Sleep die gleichen Kommandos mehrfach gesendet.
Grüße Tim
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: ext23 am 29 Januar 2016, 17:02:08
Auf jeden Fall, echt Klasse! Das fehlt mir jetzt noch für FS20 ;-) Da habe ich auch eine Dose die immer nicht so recht schalten möchte.

/Daniel
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: Markus M. am 31 Januar 2016, 02:35:29
Ihr habt leider mein Post von vor einem Jahr übersehen :)
ITrepetition für mehrmaliges Senden eines Kommandos (http://forum.fhem.de/index.php?topic=32811.0)


Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: Willi am 31 Januar 2016, 09:15:27
Ja, habe ich nicht gesehen.

Was ist an dieser Lösung besser als an der jetzt eingebauten? Evtl. macht es ja auch Sinn beide Lösungen eingebaut zu haben. Wenn Du das so siehst, poste doch bitte das Diff. Danke!
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: Markus M. am 31 Januar 2016, 11:54:55
War im Prinzip die gleiche Lösung.
Die Unterschiede sind im Attributnamen ITrepetition (weil es den im InterTechno Modul genau so bereits gibt), der Art wie die Wiederholungen gezählt werden (1 = 1 Wiederholung = 2x Senden, wie bei IT) und dass ich die Wiederholungen im Attribut und Code auf max. 9 beschränkt habe.
Wenn ich mir das nochmal genauer ansehe, gefällt mir meins doch ein klein wenig besser. Eigentlich sehr viel besser :)

Code (DIFF) Auswählen
Index: FHEM/46_TRX_LIGHT.pm
===================================================================
--- FHEM/46_TRX_LIGHT.pm (revision 10674)
+++ FHEM/46_TRX_LIGHT.pm (working copy)
@@ -159,7 +159,7 @@
   $hash->{DefFn}     = "TRX_LIGHT_Define";
   $hash->{UndefFn}   = "TRX_LIGHT_Undef";
   $hash->{ParseFn}   = "TRX_LIGHT_Parse";
-  $hash->{AttrList}  = "IODev ignore:1,0 do_not_notify:1,0 repeat ".
+  $hash->{AttrList}  = "IODev ignore:1,0 do_not_notify:1,0 ITrepetition:0,1,2,3,4,5,6,7,8,9 ".
                         $readingFnAttributes;

}
@@ -509,10 +509,15 @@
return "No set implemented for $device_type . Unknown protocol type";
   }

-  for (my $repeat = $attr{$name}{repeat} || 1; $repeat >= 1; $repeat = $repeat - 1) {
     IOWrite($hash, $hex_prefix, $hex_command);
-  }

+  if (defined($attr{$name}{ITrepetition}) ) {
+    my $repetition = int($attr{$name}{ITrepetition});
+    $repetition = 9 if($repetition > 9);
+    for (my $i = 0; $i < $repetition; $i += 1) {
+      IOWrite($hash, $hex_prefix, $hex_command);
+  } }
+
   my $tn = TimeNow();
   $hash->{CHANGED}[0] = $command_state;
   $hash->{STATE} = $command_state;
@@ -1133,6 +1138,7 @@
   <a name="TRX_LIGHTattr"></a>
   <b>Attributes</b>
   <ul>
+    <li><a href="#ITrepetition">ITrepetition</a></li>
     <li><a href="#ignore">ignore</a></li>
     <li><a href="#do_not_notify">do_not_notify</a></li>
     <li><a href="#readingFnAttributes">readingFnAttributes</a></li>


Gruss, Markus
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: ext23 am 31 Januar 2016, 14:15:35
Na Hauptsache es geht am Ende und ist Code sparend. Und bitte den Attribut Namen behalten, unter ITrepetitititit kann sich ja keine Sau was drunter vorstellen ;-) Meinetwegen noch TX_Repeat oder HF_Repeat oder sowas in der Art.

/Daniel
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: Markus M. am 03 Februar 2016, 22:17:07
Zitat von: ext23 am 31 Januar 2016, 14:15:35
Na Hauptsache es geht am Ende und ist Code sparend.
Eben deswegen würde ich stattdessen gerne meine Implementierung im offiziellen Modul sehen.
Der Standard-Fall wird in 99% der Fälle der sein, dass das Attribut nicht existiert. Dann wird mit meiner Lösung lediglich defined($attr{$name}{ITrepetition}) zusätzlich ausgeführt und keine Schleife mit Variablenzuweisung etc. aufgemacht.

Willi, möchtest du das vielleicht noch dahingehend ändern?
Die Doku müsste aber dementsprechend angepasst werden da repeat=1 dann insgesamt 2x Senden bedeutet.
Was aber auch Sinn macht, denn 0 Wiederholungen ist der Normalfall.

ZitatUnd bitte den Attribut Namen behalten, unter ITrepetitititit kann sich ja keine Sau was drunter vorstellen ;-) Meinetwegen noch TX_Repeat oder HF_Repeat oder sowas in der Art.
Es geht mir nicht um einen schönen Namen sondern darum dass es das funktionell (fast) identische Attribut ITrepetition in einem anderen Modul bereits gibt.
Ist jetzt für eine Änderung aber meiner Meinung nach eh zu spät.
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: Willi am 03 Februar 2016, 23:17:33
Ich überlege mir mal wie man beide Methoden in einem Code und einer Schleife implementieren kann und melde mich dann. Ich bin dafür beide Anweisungen zu unterstützen, aber natürlich nicht zwei Schleifen zu implementieren.
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: Markus M. am 04 Februar 2016, 01:48:12
Das Attribut brauche ich nicht mehr, hab meine Definitionen bereits geändert.
Nur der Code sollte meiner Meinung nach so aussehen:

  $hash->{AttrList}  = "IODev ignore:1,0 do_not_notify:1,0 repeat:1,2,3,4,5 ".
                        $readingFnAttributes;


  IOWrite($hash, $hex_prefix, $hex_command);

  if (defined($attr{$name}{repeat}) ) {
    for (my $repeat = $attr{$name}{repeat}>5?5:$attr{$name}{repeat}; $repeat > 0; $repeat = $repeat - 1) {
      IOWrite($hash, $hex_prefix, $hex_command);
    }
  }


Das minimiert für den Standardfall den Impact und verhindert sinnfreies Dauersenden.

Viele Grüsse, Markus
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: dero am 04 Februar 2016, 10:37:14
Hauptsache, wir haben die Funktionalität upstream ;)

Ich hatte auch überlegt, ob repeat=1 1x oder 2x senden sollte. Gibt's vielleicht nen besseren Namen?

Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: Willi am 04 Februar 2016, 20:30:14
Danke für die Rückmeldungen. Bin das Wochenende unterwegs und schaue mir das näher nächste Woche an.
Titel: Antw:Patch für TRX_Light zum Repeaten von Kommandos beim Senden
Beitrag von: MarioS1969 am 11 Februar 2016, 22:26:50
Hallo Markus,
ich habe deine beiden Module bei mir eingebaut. Finde ich eine Super Idee. Ich habe auch das Problem, dass die Geräte manchmal nicht geschaltet werden.

http://forum.fhem.de/index.php/topic,32811.msg251925.html#msg251925
(http://forum.fhem.de/index.php/topic,32811.msg251925.html#msg251925)

Ich habe folgende Geräte definiert. Aber wie stelle ich denn jetzt die Wiederholungen ein?


define GartenMaster TRX_LIGHT AC 00d4f8c602 light
attr GartenMaster IODev TRX_0
attr GartenMaster fp_Haus 11,774,1,
attr GartenMaster group 02_Licht
attr GartenMaster room Gesamtansicht
attr GartenMaster webCmd :

define GartenLicht TRX_LIGHT ARC A7 light
attr GartenLicht IODev TRX_0
attr GartenLicht group 02_Licht
attr GartenLicht room Gesamtansicht
attr GartenLicht webCmd :

define Wintergarten TRX_LIGHT PT2262 0010000011 light 30:off,03:on
attr Wintergarten IODev TRX_0
attr Wintergarten eventMap off:zu on:offen
attr Wintergarten group 02_Licht
attr Wintergarten room Gesamtansicht
attr Wintergarten webCmd :


Vielen Dank für deine Hilfe
Mario