RFD-FHEM / RFFHEM

Counterpart of SIGNALDuino, it's the code for FHEM to work with the data received from the uC
GNU General Public License v3.0
44 stars 33 forks source link

00_SIGNALduino.pm - neues Kommando: set sduino raw Wseq #732

Closed Ralf9 closed 4 years ago

Ralf9 commented 4 years ago

Das set sduino raw Wseq wäre u.a. für FSK recht hilfreich. Damit können mit einem Befehl mehrere Write eeprom Kommandos gesendet werden z.B: set sduino raw Wseq W0547 W067A W070E WS36 WS34

Hier sind die dazu notwendigen Anpassungen: https://github.com/Ralf9/RFFHEM/commit/02e24fc34ededaa1ce3c33f64734d95d1d01f287

Ralf9 commented 4 years ago

Da dies anscheinend so nicht gefällt. Neuer Vorschlag. Ein neues raw Kommando WM (write multi) damit kann eine Folge von Registern in den cc1101 und EEPROM geschrieben werden, die Adresse hat dabei keinen Offset von 2. Z.B. die Register 0D 0E 0F 12 werden so geschrieben: set sduino raw WM 0D1E;0EC4;0FEC;1202;

sidey79 commented 4 years ago

Hi Ralf,

Es ist heute schon möglich mehrere Befehle mit einem RAW Kommando zu ändern. Dafür brauchen wir kein neuen Befehl im uC.

Es kommt nur irgendwann zu einem Problem mit den Empfangspuffern. Das dürfte auch noch zwischen ESP und Arduino unterschiedlich sein :( Denkbar ist ja ein Set ccRegister Befehl der dann z.B. in einem Kommando 5 Register ändert, wenn es notwendig ist mehr als 5 Register auf einmal zu ändern.

Ralf9 commented 4 years ago

5 Register sind viel zuwenig, es sollten auch 20-30 möglich sein. Das raw Kommando könnte auch WR (write ccRegister) heissen, damit kann dann ein oder mehrere Register in den cc1101 und EEPROM geschrieben werden,

sidey79 commented 4 years ago

Ich wüsste jetzt auf Anhieb nicht, wieso ein neuer Befehl das Längenproblem im Empfangspuffer umgeht. Beim ESP erwarte ich hier erst einmal kein Problem, da das Limit höchstwahrscheinlich deutlich über der Anzahl der Register liegt. Annahme bis zur TCP MSS Größe kann gespeichert werden.

Beim Arduino liegt der RX Puffer bei 64 Byte zuzüglich dem Puffer des UART Bausteins. Der ist entweder ein oder zwei Byte groß.

@HomeAutoUser Ich denke nach 102 Zeichen hat das Schreiben der Register nicht mehr geklappt. Da kam dann vermutlich die Abarbeitung der Befehle nicht nach, da es ja durchaus etwas dauert, bis so ein Schreibbefehl ausgeführt ist. Vielleicht kann man das Senden einfach etwas verlangsamen :)

HomeAutoUser commented 4 years ago

@Ralf9 dein neuer Vorschlag klingt für mich noch besser :)

1) kein Offset 2) nur einmal das WM und plausible Abgabe

Hast du deine Variante mal getestet mit sofort 20 Registerwerten?

@sidey79, Die Variante von @Ralf9 ist denke ich für den Anwender sehr einfacher Hand zu haben.

Kannst du sicherstellen das man ein volles Register mit einmal schreiben kann?

sidey79 commented 4 years ago

@HomeAutoUser Es können so viele Daten übergeben werden, bis der Eingangspuffer des uC Voll ist. Das scheint nach deinen Versuchen aktuell bei 102 Zeichen erreicht zu werden.

Ich bin aktuell nicht überzeugt, einem RAW Befehl, eine Umwandlung zu verpassen. Die Idee das RAW Befehls ist ja, dass es 1:1 übergeben wird und keine Veränderung stattfindet. Die RAW Befehle sollten ja auch funktionieren, wenn es jemand direkt an den uC sendet ohne das FHEM Modul zu verwenden.

Ich habe aber verstanden, dass ihr den Bedarf habt 30 Register auf einen Rutsch zu schreiben.

Ob es dafür nun einen neuen Befehl auf uC Seite benötigt, bin ich auch nicht sicher. Denn auch hier wird das Limit des Eingangspuffers wieder zum Tragen kommen, da die Serielle Übertragung schneller voran schreitet, als die Registerbefehle abgearbeitet werden können.

Zunächst möchte ich klären was ist das Ziel?

30 Register mit einem uC Befehl schreiben, so dass es unabhängig vom Modul funktioniert oder 30 Register über das FHEM Modul schreiben.

HomeAutoUser commented 4 years ago

Ich denke, es ist aus meiner Sicht, Ziel aus FHEM direkt 30 Register mit einmal zu senden bzw. senden. Siehst du es auch so @Ralf9 ?

Sehr wünschenswert ist natürlich, wenn man dabei kein Offset mehr hat. (kompakte und direktere Eingabe für den Benutzer)

Wenn du den RAW Befehl nicht „manipulieren möchtest“, so ist doch ein wie von Ralf vorgeschlagenes neues Kommando günstig.

Bei einer günstigen und überlegten SET Bezeichnung könnte man auch überlegen ein Save Register / load (write) Register vorsehen. Aber erst ist es wichtig mehrere Register mit einmal zu schreiben.

Ralf9 commented 4 years ago

ein set sduino cc1101_reg würde ausreichen, damit kann dann ein oder eine Folge von Registern in den cc1101 und EEPROM geschrieben werden

sidey79 commented 4 years ago

Supi, jetzt wissen wir schon mal alle was das Ziel ist :)

Bei einer günstigen und überlegten SET Bezeichnung könnte man auch überlegen ein Save Register / load (write) Register vorsehen. Aber erst ist es wichtig mehrere Register mit einmal zu schreiben.

Das mit dem save und load habe ich noch nicht verstanden. Die Aktuellen Registerwert sollten wir dann ggf. in einem Internal speichern.

Ein set sduino cc1101_reg wäre für mich eine deutliche Bezeichnung. Wie soll das Kommando danach weitegehen?

Gibt man die Startposition an und darauf Folgend n Register oder schreibt man zu jedem Wert das entsprechende Register mit dazu?

Ralf9 commented 4 years ago

Gibt man die Startposition an und darauf Folgend n Register oder schreibt man zu jedem Wert das entsprechende Register mit dazu?

Zu jeder Adr das Register dazu set sduino cc1101_reg 0D1E 0EC4 0FEC 1202 schreibt in die Register 0D 0E 0F 12 Evtl ist das Leerzeichen als Trenner nicht so sinnvoll, evtl eins der folgenden? , ; : #

HomeAutoUser commented 4 years ago

Dem von @Ralf9 stimme ich zu und wäre top.

sidey79 commented 4 years ago

Das Leerzeichen als Trennen wäre okay denke ich. Mit # lassen sich ja heute bereits uC Befehle zusammen hängend verarbeiten.

Die Liste an Register würde man dann mit W<übergebene Wert> an den uC übergeben.

HomeAutoUser commented 4 years ago

Sehe ich das richtig, wir sind mit @Ralf9 Variante alle einverstanden? Top!

@Ralf9, wenn ich dich richtig einschätze hast du schon etwas in der Schublade ;) Kannst du einen PR machen? Doku kann ich gern für dich übernehmen.

Ralf9 commented 4 years ago

habe nichts fertiges, aber ich habe das Wseq dafür angepasst, dies müsste sich auch beim set verwenden lassen.

    if ($arg =~ m/^Wseq /) {
       my @args = split(' ', $arg);
       my $argadr;
       foreach my $argcmd (@args) {
          if ($argcmd ne "Wseq") {
             $argadr = hex(substr($argcmd,0,2));
             $argadr += 2;
             $argcmd = sprintf("W%02X%s",$argadr,substr($argcmd,2,2));
             #Log3 $name, 4, "set $name raw Wseq: $argcmd";
             SIGNALduino_AddSendQueue($hash,$argcmd);
          }
       }
       SIGNALduino_WriteInit($hash);
sidey79 commented 4 years ago

Ich kann es einbauen, da ich die _SET Funktion ohnehin überholen wolle

HomeAutoUser commented 4 years ago

@sidey79 dann leg mal los :-) Kann ich dir zuarbeiten machen?

sidey79 commented 4 years ago

@HomeAutoUser

Bis Weihnachten wird es vermutlich nicht mehr. Bevor ich da was ändere schreibe ich erst mal Tests um sicherzustellen, dass das am Ende noch das gleiche heraus kommt :)

Ich habe mich jetzt einige Zeit damit aufgehalten, die Einträge für die Frequenzanpassung zu verifizieren. Und dabei habe ich noch nicht mal die Registerwerte geprüft, sonder nur, ob die richtigen Register beschrieben werden :(

https://github.com/RFD-FHEM/RFFHEM/blob/d1639dec1ae662c1c7832fc9bb26b4766940b19c/UnitTest/tests/test_sub_SIGNALduino_Set-definition.txt#L57-L69

HomeAutoUser commented 4 years ago

Ich mache schonmal den Vorlauf bzw. etwas Zuarbeit nach bestmöglichen Wissen.

https://github.com/HomeAutoUser/RFFHEM/blob/dev-r34_cc1101_reg/FHEM/00_SIGNALduino.pm

HomeAutoUser commented 4 years ago

@sidey79 hier ist eine Vorlage für dich wenn du diese gern nutzen möchtest. Ich habe zusätzlich eine Prüfung eingebaut der Registeradressen weil wir diese seit letztens mit verankerten. Dazu habe ich nur das Array globalisiert an den Anfang.

Ich lasse diese Version soeben auch testlaufen.

https://github.com/HomeAutoUser/RFFHEM/blob/97776c06427d8d5002008d4aa88a39d109616b6f/FHEM/00_SIGNALduino.pm#L884-L906

HomeAutoUser commented 4 years ago

Die kleinen Feinheiten werde ich morgen mal noch angehen bestmöglich und so ist für dich die Übernahme oder umstellung dann schon vorbereitet ;-)

HomeAutoUser commented 4 years ago

Der morgendliche Gedanke über den Code brachte diese Anpassung welche Dir vermutlich besser passt ;-)

https://github.com/HomeAutoUser/RFFHEM/commit/59d4d366e954359a5ab89ebf762e4cb04e900870

Da wir den Zugriff auf den Hash doppelt nutzen können, so ist es gleich ein Schlag gewurden.

HomeAutoUser commented 4 years ago

Dieses ISSUES sollte abgeschlossen sein, da nun das Kommando cc1101_reg eingebunden ist.