Skip to content
This repository has been archived by the owner on Apr 27, 2023. It is now read-only.

Add API documentation #4

Open
gandy92 opened this issue Jun 2, 2015 · 26 comments
Open

Add API documentation #4

gandy92 opened this issue Jun 2, 2015 · 26 comments

Comments

@gandy92
Copy link
Collaborator

gandy92 commented Jun 2, 2015

I'currently trying to figure out how to best use the library and I noticed there is little to no API documentation. What do you think of inline documentation using doxygen (https://github.com/doxygen/doxygen)?

It would allow keeping the documentation close to the implementation and following this HOWTO, it could even be hosted on github alongside the library repository.

If you agree, I will start adding API documentation to my fork and send you pull-requests.

@trilu2000
Copy link
Owner

Hi Andy,

not sure if it is enough to have an explanation of the different
functions for the library. How to deal with the register.h explanation?
But it is a good start, definately and if you are willing to work on the
lib, you are very welcome.
I could provide you direct access to the git which is much better,
because i hate to review things :-)
You are free to add or change smaller things, while fixing bugs - for
new functions we should have a short conversation via mail, thats it -
what do you think?
By the way, where you are comming from?

Best regards
Horst

Am 02.06.2015 um 10:46 schrieb Andy:

I'currently trying to figure out how to best use the library and I
noticed there is little to no API documentation. What do you think of
inline documentation using doxygen (https://github.com/doxygen/doxygen)?

It would allow keeping the documentation close to the implementation
and following this HOWTO
http://rickfoosusa.blogspot.de/2011/10/howto-use-doxygen-with-github.html,
it could even be hosted on github alongside the library repository.

If you agree, I will start adding API documentation to my fork and
send you pull-requests.


Reply to this email directly or view it on GitHub
#4.

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 2, 2015

Hi Horst,

you're right, documentation for classes and methods in one thing, explaining how to use them is another. The big advantage of using doxygen is that links between pages are easily done, most of them automatically. The result is a cross-referenced browsable set of HTML pages. Examples can be included in this documentation or somewhere else.
I guess I can live with direct access to the repository, if you don't mind. Some conversation will be necessary one way or another, so let's do that by email or in a new thread in the FHEM forum (I'm from germany, so switching to german for that matter stands to reason 😄)

Cheers,
Andy.

@trilu2000
Copy link
Owner

You should have access by now.
It's also a good training to stay with english language :-)

Ich fasse mal beide Mails zusammen. Der Zweig destillRegs ist eigentlich
tot. Ich arbeite nur noch an dem Zweig der destillRegs2.
Das Script - createRegisterFromFile.pl - war mehr für mich um die
verschiedenen Files besser zu verstehen. Das fliegt bestimmt auch
irgendwann raus.
Was möchtest du denn eigentlich bauen?

Viele Grüße
Horst

Am 02.06.2015 um 16:41 schrieb Andy:

Hi Horst,

you're right, documentation for classes and methods in one thing,
explaining how to use them is another. The big advantage of using
doxygen is that links between pages are easily done, most of them
automatically. The result is a cross-referenced browsable set of HTML
pages. Examples can be included in this documentation or somewhere else.
I guess I can live with direct access to the repository, if you don't
mind. Some conversation will be necessary one way or another, so let's
do that by email or in a new thread in the FHEM forum (I'm from
germany, so switching to german for that matter stands to reason 😄)

Cheers,
Andy.


Reply to this email directly or view it on GitHub
#4 (comment).

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 2, 2015

Danke 😄

Was ich bauen möchte ist eine Überwachung meiner 4 dezentralen Wohnraumlüfter. Existiert momentan als Prototyp und hat im wesentlichen 1 Analogeingang zur Auswertung des Sollwerts für die Lüfterdrehzahl, 2xDHT22, 2xDS18B20 und optional 1xBMP180. Weiters ein paar Statusflags die z.T. von digitalen Eingängen abgeleitet werden. Ein Event Frame (21 Byte incl. msgCnt, deshalb auch send_generic_event()) soll alle Messwerte beinhalten und übertragen werden, wenn eine einstellbare Zeit verstrichen ist (Sendeintervall-Parameter) oder der Stellwert für den Lüfter sich geändert hat. Letzteres passiert für alle 4 Lüfter gleichzeitig, was bei der aktuellen Implementierung mit SWAP das Problem mit sich bringt, dass ohne ACK-Mechanismus die meisten Events schlicht verloren gehen, weil alle gleichzeitig senden. Und bevor ich dafür Workarounds suche, nutze ich das als willkomene Gelegenheit, mir endlich NewAskSin näher anzusehen. Im Forum lese ich seit geraumer Zeit mit, finde aber in den 80+ Seiten beim besten Willen nicht die relevaten Informationen...

@trilu2000
Copy link
Owner

gerne :-)
Verstehe ich noch nicht ganz - 4 dezentrale Lüfter heißt, es werden 4
eigenständige Geräte?
Stimmt, das gibt gerne das Problem, dass sich Telegramme überlagern, vor
allem, wenn alle 4 Geräte gleichzeitig in Betrieb genommen werden, wie
nach einem Stromausfall.

Da hat HM etwas ziemlich cleveres gebaut, die hatten das selbe Problem
mit den Heizkörpern. Die errechnen den Sendeslot per Messagenummer und HMID.
Das gibt keine Überschneidungen und das Remote Gerät kann sogar
vorhersagen wann die nächste Message kommen müsste.
Die 21 Byte sind ganz schön viel für einen String, den längsten den ich
kenne ist eigentlich der Pair-String, aber der hat nur 16 byte payload.
So wirklich HM kompatibel ist das dann nicht mehr. Kannst du nicht mit
weniger auskommen und byte zusammenfassen?
"53" => { txt => "SensorData" , params => {
CMD => "00,2",
Fld1=> "02,2",
Val1=> '04,4,$val=(hex($val))',
Fld2=> "08,2",
Val2=> '10,4,$val=(hex($val))',
Fld3=> "14,2",
Val3=> '16,4,$val=(hex($val))',
Fld4=> "20,2",
Val4=> '24,4,$val=(hex($val))'} },
Das wäre doch eine ganz gute alternative - Val1-4 sind 4 Integer, die
Fields sind byte und so wie ich das sehe - müsste man um sicher zu sein,
aber noch mal in dem xml-file nachschauen -
zur Identifikation gedacht.

Viele Grüße
Horst

Am 02.06.2015 um 17:31 schrieb Andy:

Danke 😄

Was ich bauen möchte ist eine Überwachung meiner 4 dezentralen
Wohnraumlüfter. Existiert momentan als Prototyp und hat im
wesentlichen 1 Analogeingang zur Auswertung des Sollwerts für die
Lüfterdrehzahl, 2xDHT22, 2xDS18B20 und optional 1xBMP180. Weiters ein
paar Statusflags die z.T. von digitalen Eingängen abgeleitet werden.
Ein Event Frame (21 Byte incl. msgCnt, deshalb auch
send_generic_event()) soll alle Messwerte beinhalten und übertragen
werden, wenn eine einstellbare Zeit verstrichen ist
(Sendeintervall-Parameter) oder der Stellwert für den Lüfter sich
geändert hat. Letzteres passiert für alle 4 Lüfter gleichzeitig, was
bei der aktuellen Implementierung mit SWAP das Problem mit sich
bringt, dass ohne ACK-Mechanismus die meisten Events schlicht verloren
gehen, weil alle gleichzeitig senden. Und bevor ich dafür Workarounds
suche, nutze ich das als willkomene Gelegenheit, mir endlich NewAskSin
näher anzusehen. Im Forum lese ich seit geraumer Zeit mit, finde aber
in den 80+ Seiten beim besten Willen nicht die relevaten Informationen...


Reply to this email directly or view it on GitHub
#4 (comment).

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 2, 2015

Stimmt, guter Punkt, das sollte möglich sein. ich verstehe das so, dass ich meine 9-10 Messwerte auf mehrere frames aufteilen kann, anhand der fld-id werden sie dann Readings zugeordnet. Bliebe die Frage, wie das im Detail in der Sensorklasse aussieht.

Mein erster Teilerfolg sah so aus, dass ich mit hmPairSerial pairen konnte, der paired-to, serial, etc wird auch korrekt abgelesen, beim getConfig kommt es aber häufig zu dbg- Meldungen "timed out" in der Firmware. Möglicherweise weil mein Register.h unvollständig ist? die sensor_poll() meiner Sensorklasse wird noch nicht mal aufgerufen, evtl aus dem selben Grund.

Mein Ziel bei diesen Sensoren ist weniger HM kompatibel zu sein, als vielmehr die Vorzüge des Protokolls zu nutzen. Ausserdem habe ich schon derart viele HM Geräte, dass ich die Frequenz nicht noch mit einem anderen Protokoll belegen möchte. Ein Teil der verlorenen Events geht augenscheinlich auf Kosten von HM-Geräten, die da jeweils gerade gesendet haben. Sendeslotberechnung klingt nach einer eleganten Lösung.

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 2, 2015

Und ja, es handelt sich um 4 identische Sensoren, die jeweils 8 Messwerte + statusflags liefern.

Eine Poweron-Meldung ähnlich zu den Rolloschaltern wäre irgendwann auch nett, aber erstmal die essenziellen Dinge 😄

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 2, 2015

So, meine register.h habe ich (mit etwas Raten) händisch angepasst und nun wird auch sensPoll() aufgerufen. Die 21 Byte scheinen übertragen zu werden, allerdings bekomme ich augenscheinlich kein ACK zurück (das ist auch so wenn der Frame nur 12 Byte payload hat). Wie kann ich das debuggen?

@trilu2000
Copy link
Owner

der send und receive dbg ist ja per default an, was ist in deiner
seriellen konsole?
da müssten die gesendeten strings und deren antworten drin sein....
schick mal...

Am 02.06.2015 um 20:13 schrieb Andy:

So, meine register.h habe ich (mit etwas Raten) händisch angepasst und
nun wird auch sensPoll() aufgerufen. Die 21 Byte scheinen übertragen
zu werden, allerdings bekomme ich augenscheinlich kein ACK zurück (das
ist auch so wenn der Frame nur 12 Byte payload hat). Wie kann ich das
debuggen?


Reply to this email directly or view it on GitHub
#4 (comment).

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 2, 2015

Danke dass Du dir das anschauen willst. So sieht die Konsole direkt nach einem Neustart des Sensors aus:

--- Miniterm on /dev/ttyUSB0: 57600,8,N,1 ---
--- Quit: Ctrl+]  |  Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
AsksinNew Test
AskSin-Lib V 0.2.2
initConfKey()
initPCINT: 0
hm.init()
AS.
SN.
RV.
PW.
hm.confButton()
PowerMode: 0
CCE, lst1: 00
HMID: AF FE 01, MAID: AA AA AA

FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 596
AS::send_generic_event 71 len=22
<- 1F 00 A4 71 AF FE 01 AA AA AA 01 00 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (1237)
<- 1F 00 A4 71 AF FE 01 AA AA AA 01 00 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (1457)
<- 1F 00 A4 71 AF FE 01 AA AA AA 01 00 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (2326)
  timed out (2508)
m> 0A 00 80 02 AA AA AA AF FE 01 00 (4664)
b> 0C 53 86 70 27 5E 1E 00 00 00 00 E3 42 (130664)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 538
AS::send_generic_event 71 len=22
<- 1F 01 A4 71 AF FE 01 AA AA AA 01 01 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (150157)
<- 1F 01 A4 71 AF FE 01 AA AA AA 01 01 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (150858)
<- 1F 01 A4 71 AF FE 01 AA AA AA 01 01 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (151623)
  timed out (151772)
<- 1A 02 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (153249)
<- 1A 02 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (153556)
<- 1A 02 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (153855)
  timed out (154258)
b> 0C 28 86 70 25 FB 04 00 00 00 01 0A 29 (216761)
FanStation::sensPoll()
FanStation::sensPoll()                                                                                                    
calcSendSlot: 679                                                                                                         
AS::send_generic_event 71 len=22                                                                                          
<- 1F 03 A4 71 AF FE 01 AA AA AA 01 02 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (285381)               
<- 1F 03 A4 71 AF FE 01 AA AA AA 01 02 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (286146)               
<- 1F 03 A4 71 AF FE 01 AA AA AA 01 02 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (286911)               
  timed out (287059)                                                                                                      
<- 1A 04 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (288485)                              
<- 1A 04 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (288790)                              
<- 1A 04 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (289090)                              
  timed out (289470)                                                                                                      
m> 0A 04 80 02 AA AA AA AF FE 01 00 (290697)                                                                              
b> 14 9F 84 5E 24 A9 EF 00 00 00 CC 84 13 00 33 8E 02 FB 09 17 FF (372525)                                                
FanStation::sensPoll()                                                                                                    
FanStation::sensPoll()
calcSendSlot: 564
AS::send_generic_event 71 len=22
<- 1F 05 A4 71 AF FE 01 AA AA AA 01 03 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (454905)
<- 1F 05 A4 71 AF FE 01 AA AA AA 01 03 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (455364)
<- 1F 05 A4 71 AF FE 01 AA AA AA 01 03 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (455823)
  timed out (455906)
<- 1A 06 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (456842)
<- 1A 06 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (457142)
<- 1A 06 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (457855)
  timed out (458099)
m> 0A 06 80 02 AA AA AA AF FE 01 00 (460296)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 704
AS::send_generic_event 71 len=22
<- 1F 07 A4 71 AF FE 01 AA AA AA 01 04 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (595743)
<- 1F 07 A4 71 AF FE 01 AA AA AA 01 04 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (595953)
<- 1A 08 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (596485)
  timed out (601593)
m> 0A 08 80 02 AA AA AA AF FE 01 00 (602517)
b> 0C F6 86 70 1B 09 BD 00 00 00 00 FB 2C (605388)
b> 0C F5 86 70 19 7D 4E 00 00 00 00 EE 3D (667047)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 589
AS::send_generic_event 71 len=22
<- 1F 09 A4 71 AF FE 01 AA AA AA 01 05 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (772136)
<- 1F 09 A4 71 AF FE 01 AA AA AA 01 05 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (772709)
<- 1F 09 A4 71 AF FE 01 AA AA AA 01 05 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (773283)
  timed out (775059)
m> 0A 09 80 02 AA AA AA AF FE 01 00 (775891)

Ein getConfig führt hierzu:

m> 10 29 A0 01 AA AA AA AF FE 01 00 04 00 00 00 00 00 (2842229)
cnl: 0 s: 0
<- 1A 29 A0 10 AF FE 01 AA AA AA 02 05 00 0A AA 0B AA 0C AA 14 00 24 00 26 00 27 00 (2842324)
<- 1A 29 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2842676)
<- 1A 29 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2843240)
  timed out (2843456)
<- 0C 2A A0 10 AF FE 01 AA AA AA 03 00 00 (2843765)
<- 0C 2A A0 10 AF FE 01 AA AA AA 03 00 00 (2846519)
<- 0C 2A A0 10 AF FE 01 AA AA AA 03 00 00 (2846850)
  timed out (2847137)
<- 1A 2A A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2847916)
<- 1A 2A A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2848216)
<- 1A 2A A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2848676)
  timed out (2849147)
m> 0A 2A 80 02 AA AA AA AF FE 01 00 (2850286)
m> 0B 2B A0 01 AA AA AA AF FE 01 01 03 (2854103)
<- 0E 2B A0 10 AF FE 01 AA AA AA 01 00 00 00 00 (2854149)
<- 0E 2B A0 10 AF FE 01 AA AA AA 01 00 00 00 00 (2854450)
<- 0E 2B A0 10 AF FE 01 AA AA AA 01 00 00 00 00 (2854918)
  timed out (2855197)
<- 1A 2C A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2856641)
<- 1A 2C A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2856948)
<- 1A 2C A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2857252)
  timed out (2857690)
m> 0A 2C 80 02 AA AA AA AF FE 01 00 (2858867)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 560
AS::send_generic_event 71 len=22
<- 1F 2D A4 71 AF FE 01 AA AA AA 01 13 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (2919133)
<- 1F 2D A4 71 AF FE 01 AA AA AA 01 13 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (2919737)
<- 1F 2D A4 71 AF FE 01 AA AA AA 01 13 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (2920316)
  timed out (2920433)
<- 1A 2E A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2921658)
<- 1A 2E A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2921963)
<- 1A 2E A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (2922513)
  timed out (2922893)
m> 0A 2E 80 02 AA AA AA AF FE 01 00 (2924776)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 701
AS::send_generic_event 71 len=22
<- 1F 2F A4 71 AF FE 01 AA AA AA 01 14 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (3058583)
<- 1F 2F A4 71 AF FE 01 AA AA AA 01 14 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (3058822)
<- 1F 2F A4 71 AF FE 01 AA AA AA 01 14 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (3059472)
  timed out (3059628)
m> 0A 2F 80 02 AA AA AA AF FE 01 00 (3061058)
  timed out (3061076)
b> 0C 14 86 70 27 5C DD 00 00 00 00 E2 3E (3218751)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 585
AS::send_generic_event 71 len=22
<- 1F 31 A4 71 AF FE 01 AA AA AA 01 15 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (3234679)
<- 1F 31 A4 71 AF FE 01 AA AA AA 01 15 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (3235451)
<- 1A 32 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (3238310)
  timed out (3238520)
<- 1A 33 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (3239767)
<- 1A 33 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (3240069)
<- 1A 33 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (3240529)
  timed out (3241012)
m> 0A 33 80 02 AA AA AA AF FE 01 00 (3242177)
b> 0C F6 86 70 19 7D 4E 00 00 00 00 EE 3D (3258977)
b> 0C 2D 86 70 27 5D B8 00 00 00 00 E4 3C (3278727)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 610
AS::send_generic_event 71 len=22
<- 1F 35 A4 71 AF FE 01 AA AA AA 01 16 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (3380784)
<- 1F 35 A4 71 AF FE 01 AA AA AA 01 16 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (3381363)
<- 1F 35 A4 71 AF FE 01 AA AA AA 01 16 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (3381942)
  timed out (3382047)
<- 1A 36 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (3383113)
<- 1A 36 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (3383413)
<- 1A 36 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (3383910)
  timed out (3389079)
m> 0A 36 80 02 AA AA AA AF FE 01 00 (3389902)
b> 09 99 81 12 23 A3 63 00 00 00 (3485568)

In der Folge logt FHEM immer wieder Device HM_AFFE01 added to ActionDetector with 000:10 time und die Readings für firmware und serialNr werden dabei neu gesetzt.

@trilu2000
Copy link
Owner

Ahh, du hast calcslot schon gefunden. Eigentlich sieht das alles nicht so schlecht aus. Das Problem kommt, so wie es aussieht, von fhem.
Fhem braucht 2000ms für den ACK. Ich vermute mal, dass fhem das device aber auch nicht kennt. Als was ist das ding gepairt in fhem?
Das die config nicht gelesen werden kann ist auch klar, fhem kennt weder das device, noch die Kanäle, noch die listen darin.
Das war der Grund warum ich bisher auf bekannte devices gesetzt habe, da konnte ich Fehler über fhem ausschliessen.

On 2. Juni 2015 20:44:49 MESZ, Andy [email protected] wrote:

Danke dass Du dir das anschauen willst. So sieht die Konsole direkt
nach einem Neustart des Sensors aus:

--- Miniterm on /dev/ttyUSB0: 57600,8,N,1 ---
--- Quit: Ctrl+]  |  Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
AsksinNew Test
AskSin-Lib V 0.2.2
initConfKey()
initPCINT: 0
hm.init()
AS.
SN.
RV.
PW.
hm.confButton()
PowerMode: 0
CCE, lst1: 00
HMID: AF FE 01, MAID: AA AA AA

FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 596
AS::send_generic_event 71 len=22
<- 1F 00 A4 71 AF FE 01 AA AA AA 01 00 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (1237)
<- 1F 00 A4 71 AF FE 01 AA AA AA 01 00 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (1457)
<- 1F 00 A4 71 AF FE 01 AA AA AA 01 00 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (2326)
 timed out (2508)
m> 0A 00 80 02 AA AA AA AF FE 01 00 (4664)
b> 0C 53 86 70 27 5E 1E 00 00 00 00 E3 42 (130664)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 538
AS::send_generic_event 71 len=22
<- 1F 01 A4 71 AF FE 01 AA AA AA 01 01 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (150157)
<- 1F 01 A4 71 AF FE 01 AA AA AA 01 01 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (150858)
<- 1F 01 A4 71 AF FE 01 AA AA AA 01 01 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (151623)
 timed out (151772)
<- 1A 02 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (153249)
<- 1A 02 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (153556)
<- 1A 02 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (153855)
 timed out (154258)
b> 0C 28 86 70 25 FB 04 00 00 00 01 0A 29 (216761)
FanStation::sensPoll()
FanStation::sensPoll()                                                 

calcSendSlot: 679                                                      

AS::send_generic_event 71 len=22                                       

<- 1F 03 A4 71 AF FE 01 AA AA AA 01 02 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (285381)               
<- 1F 03 A4 71 AF FE 01 AA AA AA 01 02 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (286146)               
<- 1F 03 A4 71 AF FE 01 AA AA AA 01 02 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (286911)               
timed out (287059)                                                     

<- 1A 04 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (288485)                              
<- 1A 04 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (288790)                              
<- 1A 04 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (289090)                              
timed out (289470)                                                     

m> 0A 04 80 02 AA AA AA AF FE 01 00 (290697)                           

b> 14 9F 84 5E 24 A9 EF 00 00 00 CC 84 13 00 33 8E 02 FB 09 17 FF
(372525)                                                
FanStation::sensPoll()                                                 

FanStation::sensPoll()
calcSendSlot: 564
AS::send_generic_event 71 len=22
<- 1F 05 A4 71 AF FE 01 AA AA AA 01 03 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (454905)
<- 1F 05 A4 71 AF FE 01 AA AA AA 01 03 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (455364)
<- 1F 05 A4 71 AF FE 01 AA AA AA 01 03 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (455823)
 timed out (455906)
<- 1A 06 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (456842)
<- 1A 06 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (457142)
<- 1A 06 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (457855)
 timed out (458099)
m> 0A 06 80 02 AA AA AA AF FE 01 00 (460296)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 704
AS::send_generic_event 71 len=22
<- 1F 07 A4 71 AF FE 01 AA AA AA 01 04 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (595743)
<- 1F 07 A4 71 AF FE 01 AA AA AA 01 04 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (595953)
<- 1A 08 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (596485)
 timed out (601593)
m> 0A 08 80 02 AA AA AA AF FE 01 00 (602517)
b> 0C F6 86 70 1B 09 BD 00 00 00 00 FB 2C (605388)
b> 0C F5 86 70 19 7D 4E 00 00 00 00 EE 3D (667047)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 589
AS::send_generic_event 71 len=22
<- 1F 09 A4 71 AF FE 01 AA AA AA 01 05 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (772136)
<- 1F 09 A4 71 AF FE 01 AA AA AA 01 05 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (772709)
<- 1F 09 A4 71 AF FE 01 AA AA AA 01 05 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (773283)
 timed out (775059)
m> 0A 09 80 02 AA AA AA AF FE 01 00 (775891)

Ein getConfig führt hierzu:

m> 10 29 A0 01 AA AA AA AF FE 01 00 04 00 00 00 00 00 (2842229)
cnl: 0 s: 0
<- 1A 29 A0 10 AF FE 01 AA AA AA 02 05 00 0A AA 0B AA 0C AA 14 00 24 00
26 00 27 00 (2842324)
<- 1A 29 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2842676)
<- 1A 29 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2843240)
 timed out (2843456)
<- 0C 2A A0 10 AF FE 01 AA AA AA 03 00 00 (2843765)
<- 0C 2A A0 10 AF FE 01 AA AA AA 03 00 00 (2846519)
<- 0C 2A A0 10 AF FE 01 AA AA AA 03 00 00 (2846850)
 timed out (2847137)
<- 1A 2A A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2847916)
<- 1A 2A A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2848216)
<- 1A 2A A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2848676)
 timed out (2849147)
m> 0A 2A 80 02 AA AA AA AF FE 01 00 (2850286)
m> 0B 2B A0 01 AA AA AA AF FE 01 01 03 (2854103)
<- 0E 2B A0 10 AF FE 01 AA AA AA 01 00 00 00 00 (2854149)
<- 0E 2B A0 10 AF FE 01 AA AA AA 01 00 00 00 00 (2854450)
<- 0E 2B A0 10 AF FE 01 AA AA AA 01 00 00 00 00 (2854918)
 timed out (2855197)
<- 1A 2C A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2856641)
<- 1A 2C A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2856948)
<- 1A 2C A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2857252)
 timed out (2857690)
m> 0A 2C 80 02 AA AA AA AF FE 01 00 (2858867)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 560
AS::send_generic_event 71 len=22
<- 1F 2D A4 71 AF FE 01 AA AA AA 01 13 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (2919133)
<- 1F 2D A4 71 AF FE 01 AA AA AA 01 13 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (2919737)
<- 1F 2D A4 71 AF FE 01 AA AA AA 01 13 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (2920316)
 timed out (2920433)
<- 1A 2E A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2921658)
<- 1A 2E A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2921963)
<- 1A 2E A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (2922513)
 timed out (2922893)
m> 0A 2E 80 02 AA AA AA AF FE 01 00 (2924776)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 701
AS::send_generic_event 71 len=22
<- 1F 2F A4 71 AF FE 01 AA AA AA 01 14 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (3058583)
<- 1F 2F A4 71 AF FE 01 AA AA AA 01 14 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (3058822)
<- 1F 2F A4 71 AF FE 01 AA AA AA 01 14 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (3059472)
 timed out (3059628)
m> 0A 2F 80 02 AA AA AA AF FE 01 00 (3061058)
 timed out (3061076)
b> 0C 14 86 70 27 5C DD 00 00 00 00 E2 3E (3218751)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 585
AS::send_generic_event 71 len=22
<- 1F 31 A4 71 AF FE 01 AA AA AA 01 15 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (3234679)
<- 1F 31 A4 71 AF FE 01 AA AA AA 01 15 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (3235451)
<- 1A 32 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (3238310)
 timed out (3238520)
<- 1A 33 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (3239767)
<- 1A 33 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (3240069)
<- 1A 33 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (3240529)
 timed out (3241012)
m> 0A 33 80 02 AA AA AA AF FE 01 00 (3242177)
b> 0C F6 86 70 19 7D 4E 00 00 00 00 EE 3D (3258977)
b> 0C 2D 86 70 27 5D B8 00 00 00 00 E4 3C (3278727)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 610
AS::send_generic_event 71 len=22
<- 1F 35 A4 71 AF FE 01 AA AA AA 01 16 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (3380784)
<- 1F 35 A4 71 AF FE 01 AA AA AA 01 16 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (3381363)
<- 1F 35 A4 71 AF FE 01 AA AA AA 01 16 FA 00 BC 02 04 01 C6 02 0E 01 DC
00 F0 00 94 26 00 00 A1 01 (3381942)
 timed out (3382047)
<- 1A 36 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (3383113)
<- 1A 36 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (3383413)
<- 1A 36 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35
00 41 01 00 (3383910)
 timed out (3389079)
m> 0A 36 80 02 AA AA AA AF FE 01 00 (3389902)
b> 09 99 81 12 23 A3 63 00 00 00 (3485568)

In der Folge logt FHEM immer wieder Device HM_AFFE01 added to ActionDetector with 000:10 time und die Readings für firmware und
serialNr werden dabei neu gesetzt.


Reply to this email directly or view it on GitHub:
#4 (comment)

Diese Nachricht wurde von meinem Mobiltelefon mit Kaiten Mail gesendet.

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 2, 2015

hmm.. für FHEM hatte ich ein HMConfig_VentoSense.pm gebaut, eine Bezeichnung HB-VS-I zum Devicetyp 0xAFFE vergeben (wird auch korrekt in model eingetragen, so wie der subType VentoSense). Das Event-Frame 0x71 parse ich mit CUL_HM_ParseVentoSense() und die Readings werden korrekt aus dem Frame übernommen. Das alles habe ich vom WetterSensor abgekupfert und nach gutdünken abgewandelt. So kam auch das mit dem calcslot zustande: Ich habe einfach großzügig deine Klasse THSensor für meine Klasse FanStation zweckentfremdet und teilweise angepasst. Die Frage ist, was habe ich dabei übersehen? 😄

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 2, 2015

Die FHEM Testumgebung besteht im Wesentlichen aus dem HM-CFG-USB mit hmland als IO, einem VCCU und dem Sensor-Device, sonst gibts dort fast nichts weiter. Der Sensor hängt zusammen mit dem HM-CFG-USB am selben Linux-Rechner. Kann die relativ kurze Entfernung von ~50cm eine Rolle spielen?

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 2, 2015

Kann es evtl sein dass der Sensor denkt per Burst an FHEM senden zu müssen? Es kommen häufig 3x in sehr kurzen Abständen die gleichen Pakete und dann gleich ein timed out.

@trilu2000
Copy link
Owner

OK, fhem sollte das device also kennen.

<- 1F 00 A4 71 AF FE 01 AA AA AA 01 00 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (1237)
<- 1F 00 A4 71 AF FE 01 AA AA AA 01 00 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (1457)
<- 1F 00 A4 71 AF FE 01 AA AA AA 01 00 FA 00 BC 02 04 01 C6 02 0E 01 DC 00 F0 00 94 26 00 00 A1 01 (2326)
timed out (2508)
m> 0A 00 80 02 AA AA AA AF FE 01 00 (4664)

Die Werte in klammern sind die Systemzeit in milli Sekunden
Du sendest eine Nachricht 71 für den Kanal 1, dann wird 300 ms auf einen ACK gewartet. Dann das senden wiederholt.
Was mich ein wenig wundert, bei der 3 wiederholung wird 800ms gewartet. Das dürfte eigentlich nicht sein.
Was mich auch wundert ist die a4, du signalisiert das du von der zentrale 0x80 einen ACK 0x20 haben möchtest, packet aber ein 0x04 mit dazu. Das deine config noch offen ist?
Muss jetzt mal in die Arbeit, schau mir heute abend noch genauer an....

On 2. Juni 2015 21:50:16 MESZ, Andy [email protected] wrote:

Kann es evtl sein dass der Sensor denkt per Burst an FHEM senden zu
müssen? Es kommen häufig 3x in sehr kurzen Abständen die gleichen
Pakete und dann gleich ein timed out.


Reply to this email directly or view it on GitHub:
#4 (comment)

Diese Nachricht wurde von meinem Mobiltelefon mit Kaiten Mail gesendet.

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 3, 2015

hab heut morgen gesehen, dass ich an send_generic_event() tatsächlich burst=1 übergeben habe. werde das heut Abend mal mit 0 versuchen.

das mit den flags habe ich noch nicht ganz verstanden, vielleicht passt meine register.h ja doch noch nicht so ganz.

Grüße,
Andy

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 3, 2015

Hi,

den Burst habe ich rausgenommen, richtig funktinieren mag es aber noch nicht. Fr folgenden Log habe ich zunächst in fhem ein set HM_AFFE01 unpairabgesetzt, danach den panstamp neu gestartet. Bei 264668 folgt dann ein set vccu hmPairSerial gan0000105

AsksinNew Test
AskSin-Lib V 0.2.2
initConfKey()
initPCINT: 0
hm.init()
AS.
SN.
RV.
PW.
hm.confButton()
PowerMode: 0
CCE, lst1: 00
HMID: AF FE 01, MAID: 00 00 00

x> 10 8D A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (4893)
cnl: 1 s: 0
FanStation::sensPoll()
x> 10 8D A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (7981)
cnl: 1 s: 0
FanStation::sensPoll()
calcSendSlot: 596
AS::send_generic_event 71 len=22
<- 1F 00 84 71 AF FE 01 00 00 00 01 00 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (10908)
<- 1A 01 80 00 AF FE 01 00 00 00 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (12312)
b> 14 C7 84 5E 24 A9 EF 00 00 00 CC 9B B2 00 37 20 03 23 09 21 FE (81289)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 481
AS::send_generic_event 71 len=22
<- 1F 02 84 71 AF FE 01 00 00 00 01 01 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (159370)
<- 1A 03 80 00 AF FE 01 00 00 00 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (159815)
b> 0C 4F 86 70 25 FB 04 00 00 00 01 2C 1F (247681)
b> 15 01 84 01 AA AA AA 00 00 00 01 0A 67 61 6E 30 30 30 30 31 30 35 (257650)
<- 1A 15 80 00 AF FE 01 00 00 00 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (257920)
<- 1A 00 80 00 AF FE 01 00 00 00 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (258764)
x> 10 16 A0 01 AA AA AA AF FE 01 00 05 00 00 00 00 00 (261842)
<- 0A 16 80 02 AF FE 01 AA AA AA 00 (261882)
x> 19 17 A0 01 AA AA AA AF FE 01 00 08 02 01 05 00 0A AA 0B AA 0C AA 14 00 24 00 (264668)
x0 :02
x2 :05
x4 :0A
x6 :0B
x8 :0C
x10 :14
x12 :24
x14 :00
new masterid

<- 0A 17 80 02 AF FE 01 AA AA AA 00 (264872)
<- 1A 04 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (265285)
<- 1A 04 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (270709)
<- 1A 04 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (271695)
  timed out (271883)
<- 1A 05 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (273581)
<- 1A 05 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (273888)
<- 1A 05 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (274191)
FanStation::sensPoll()
  timed out (274680)
m> 0A 05 80 02 AA AA AA AF FE 01 00 (275827)
FanStation::sensPoll()
calcSendSlot: 506
AS::send_generic_event 71 len=22
m> 0F 18 A0 01 AA AA AA AF FE 01 00 08 26 04 27 03 (279814)
x0 :26
x2 :27
x4 :0A
new masterid

<- 0A 18 A0 02 AF FE 01 AA AA AA 00 (279995)
<- 1A 06 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (280645)
<- 1A 06 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (281226)
  timed out (281610)
<- 1F 08 A4 71 AF FE 01 AA AA AA 01 02 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (281657)
<- 1F 08 A4 71 AF FE 01 AA AA AA 01 02 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (282331)
<- 1F 08 A4 71 AF FE 01 AA AA AA 01 02 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (285289)
  timed out (285438)
<- 1A 09 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (286809)
<- 1A 09 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (287109)
<- 1A 09 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (287607)
  timed out (292761)
m> 0A 09 80 02 AA AA AA AF FE 01 00 (293595)
m> 0B 19 A0 01 AA AA AA AF FE 01 00 06 (297435)
<- 0A 19 A0 02 AF FE 01 AA AA AA 00 (297473)
<- 1A 0B A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (298060)
<- 1A 0B A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (298358)
  timed out (298719)
m> 0A 0B 80 02 AA AA AA AF FE 01 00 (299872)
m> 10 0C A0 01 AA AA AA AF FE 01 00 04 00 00 00 00 00 (326043)
cnl: 0 s: 0
<- 1A 0C A0 10 AF FE 01 AA AA AA 02 05 00 0A AA 0B AA 0C AA 14 00 24 00 26 04 27 03 (326187)
<- 1A 0C A0 10 AF FE 01 AA AA AA 02 05 00 0A AA 0B AA 0C AA 14 00 24 00 26 04 27 03 (326411)
<- 1A 0C A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (331855)
  timed out (332099)
<- 0C 0D A0 10 AF FE 01 AA AA AA 03 00 00 (332486)
<- 0C 0D A0 10 AF FE 01 AA AA AA 03 00 00 (332847)
<- 1A 0D A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (334925)
  timed out (335142)
m> 0A 0D 80 02 AA AA AA AF FE 01 00 (337019)
m> 10 0C A0 01 AA AA AA AF FE 01 00 04 00 00 00 00 00 (362533)
cnl: 0 s: 0
<- 1A 0C A0 10 AF FE 01 AA AA AA 02 05 00 0A AA 0B AA 0C AA 14 00 24 00 26 04 27 03 (362678)
<- 1A 0C A0 10 AF FE 01 AA AA AA 02 05 00 0A AA 0B AA 0C AA 14 00 24 00 26 04 27 03 (362904)
<- 1A 0E A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (363306)
  timed out (363711)
<- 0C 0D A0 10 AF FE 01 AA AA AA 03 00 00 (364157)
<- 0C 0D A0 10 AF FE 01 AA AA AA 03 00 00 (364540)
<- 0C 0D A0 10 AF FE 01 AA AA AA 03 00 00 (364964)
  timed out (365229)
<- 1A 0F A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (366387)
<- 1A 0F A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (366691)
<- 1A 0F A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (366992)
  timed out (367385)
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (371099)
cnl: 1 s: 0
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (374183)
cnl: 1 s: 0
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (377183)
cnl: 1 s: 0
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 697
AS::send_generic_event 71 len=22
<- 1F 10 A4 71 AF FE 01 AA AA AA 01 03 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (406697)
<- 1F 10 A4 71 AF FE 01 AA AA AA 01 03 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (407088)
<- 1F 10 A4 71 AF FE 01 AA AA AA 01 03 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (407471)
  timed out (407545)
m> 0A 10 80 02 AA AA AA AF FE 01 00 (409286)
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (427693)
cnl: 1 s: 0
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (430603)
cnl: 1 s: 0
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (433689)
cnl: 1 s: 0
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (504487)
cnl: 1 s: 0
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (507467)
cnl: 1 s: 0
b> 14 0F 84 5E 25 1E 11 00 00 00 81 A0 96 00 02 32 00 3E 09 19 FF (507696)
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (510163)
cnl: 1 s: 0
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (573363)
cnl: 1 s: 0
FanStation::sensPoll()
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (575996)
cnl: 1 s: 0
m> 10 0E A0 01 AA AA AA AF FE 01 01 04 00 00 00 00 01 (579439)
cnl: 1 s: 0
FanStation::sensPoll()
calcSendSlot: 639
AS::send_generic_event 71 len=22
<- 1F 11 A4 71 AF FE 01 AA AA AA 01 04 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (581009)
<- 1F 11 A4 71 AF FE 01 AA AA AA 01 04 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (581398)
<- 1A 12 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (582574)
  timed out (582814)
m> 0A 12 80 02 AA AA AA AF FE 01 00 (584484)
b> 0C 53 86 70 27 5D B8 00 00 00 00 EE 3B (634309)
b> 0C 1E 86 70 1B 09 BD 00 00 00 01 15 24 (671717)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 524
AS::send_generic_event 71 len=22
<- 1F 13 A4 71 AF FE 01 AA AA AA 01 05 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (740461)
<- 1F 13 A4 71 AF FE 01 AA AA AA 01 05 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (741269)
<- 1F 13 A4 71 AF FE 01 AA AA AA 01 05 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (742092)
  timed out (742241)
<- 1A 14 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (743752)
<- 1A 14 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (744062)
<- 1A 14 A0 00 AF FE 01 AA AA AA 01 AF FE 67 61 6E 30 30 30 30 31 30 35 00 41 01 00 (744360)
  timed out (744725)
m> 0A 14 80 02 AA AA AA AF FE 01 00 (746458)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 665
AS::send_generic_event 71 len=22
<- 1F 15 A4 71 AF FE 01 AA AA AA 01 06 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (871628)
<- 1F 15 A4 71 AF FE 01 AA AA AA 01 06 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (871851)
<- 1F 15 A4 71 AF FE 01 AA AA AA 01 06 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (872132)
  timed out (872496)
m> 0A 15 80 02 AA AA AA AF FE 01 00 (874056)
b> 0C 18 86 70 27 5E 20 00 00 00 00 EE 3D (961356)
FanStation::sensPoll()
FanStation::sensPoll()
calcSendSlot: 549
AS::send_generic_event 71 len=22
<- 1F 17 A4 71 AF FE 01 AA AA AA 01 07 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (1038151)
<- 1F 17 A4 71 AF FE 01 AA AA AA 01 07 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (1038614)
<- 1F 17 A4 71 AF FE 01 AA AA AA 01 07 00 FA 02 BC 01 04 02 C6 01 0E 00 DC 00 F0 26 94 FF FF 19 01 (1039010)
  timed out (1040089)
m> 0A 17 80 02 AA AA AA AF FE 01 00 (1041012)

Nach dem pairen sehe in in fhem ein

RegL_00:    05:00 0A:AA 0B:AA 0C:AA 14:00 24:00 26:04 27:03 00:00

Bei HomeMatic-Komponenten sehe ich hier auch Einträge 01:00 (oder 01:01) und 02:01:

Rauchmelder01 RegL_00: 02:01 0A:13 0B:9A 0C:F8 00:00
FensterSensorAA RegL_00: 02:01 09:01 0A:13 0B:9A 0C:F8 10:01 14:06 00:00
RolloSchalter01 RegL_00: 02:01 0A:13 0B:9A 0C:F8 15:FF 18:00 00:00
StandleuchtenWohnzimmer RegL_00: 02:01 0A:13 0B:9A 0C:F8 15:FF 16:00 00:00
TH_Eingang RegL_00: 01:00 02:01 05:00 0A:13 0B:9A 0C:F8 0F:00 00:00

0A, 0B und 0C kenne ich (pairCentral) aber was bedeutet der Rest, gibt es dazu Dokumentation?

Danke,
Andy

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 4, 2015

So, bin ein gutes Stück weiter gekommen - und auch nicht. Zwischenzeitlich habe ich

  • einen ganz frischen Panstamp genommen und AsksinNew_test aufgespielt -> funktioniert
  • AsksinNew_test auf meinen Prototyp aufgespielt -> funktioniert
  • In meiner Firmware register.h durch die von AsksinNew_test ersetzt und statt FanStation THSensor verwendet -> exakt das Problem mit mehrfachem Senden und timeouts.

Ich vermute das liegt an meiner hardware.h, hardware.cpp, evtl den Routinen die ich anstelle von HAL_extern verwende. Fast alle meine Pins am Panstamp sind belegt und die Pins initialisiere ich nicht mit den Port/Pinmask Macros sondern über Arduino-Funktionen. Ist das als Problemquelle bekannt? Kann es sein dass die Kommunikation zwischen Atmel und CC1101 nicht sauber funktioniert, dass ich da evtl Interrupthandling und/oder Pins halbtot-Konfiguriert habe?

@trilu2000
Copy link
Owner

Mhhh, die Kommunikation zwischen Atmel und CC funktioniert eigentlich recht sauber. Ist halt SPI Kommunikation. Die Erkennung das Daten im Puffer sind wird über GDO0 signalisiert und ist PC Interrupt gesteuert. Schick mir mal deine register.h, ich schau mir die mal an.
Schmeiss mal bei deinem Testsketch deine HW Init raus, dann siehst du ob die Kommunikation dann klappt.
Viele Grüsse
Horst

On 4. Juni 2015 18:14:59 MESZ, Andy [email protected] wrote:

So, bin ein gutes Stück weiter gekommen - und auch nicht.
Zwischenzeitlich habe ich

  • einen ganz frischen Panstamp genommen und AsksinNew_test aufgespielt
    -> funktioniert
  • AsksinNew_test auf meinen Prototyp aufgespielt -> funktioniert
  • In meiner Firmware register.h durch die von AsksinNew_test ersetzt
    und statt FanStation THSensor verwendet -> exakt das Problem mit
    mehrfachem Senden und timeouts.

Ich vermute das liegt an meiner hardware.h, hardware.cpp, evtl den
Routinen die ich anstelle von HAL_extern verwende. Fast alle meine Pins
am Panstamp sind belegt und die Pins initialisiere ich nicht mit den
Port/Pinmask Macros sondern über Arduino-Funktionen. Ist das als
Problemquelle bekannt? Kann es sein dass die Kommunikation zwischen
Atmel und CC1101 nicht sauber funktioniert, dass ich da evtl
Interrupthandlung und/oder Pins halbtot-Konfiguriert habe?


Reply to this email directly or view it on GitHub:
#4 (comment)

Diese Nachricht wurde von meinem Mobiltelefon mit Kaiten Mail gesendet.

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 4, 2015

Wie gesagt, im Moment fahre ich mit der register.h von AsksinNew_test. Weils auch damit nicht geht, vermute ich, dass irgenwas mit der Hardwareintitalisierung nicht tut.

Ich versuche jetzt folgendes: Ich hangle mich ausgehend von AsksinNew_test langsam in Richtung meiner Hardware vor und schaue ab welcher Änderung es nicht mehr tut. Hab wohl vor dem ersten Test zuviel geändert, zeigt mal wieder, dass Testen nur durch mehr Testen zu ersetzen ist...

Hier aber schonmal meine ursprüngliche register.h, zu der ich irgendwann in der ein oder anderen Form wieder hin will:

#include <AS.h>

//- settings of HM device for AS class -----------------------------------------------------------------------------------
const uint8_t devIdnt[] PROGMEM = {
    /* Firmware version 1 byte */  0x01,
    /* Model ID         2 byte */  0xaf, 0xfe,
    /* Sub Type ID      1 byte */  0x00,
    /* Device Info      3 byte */  0x41, 0x01, 0x00,
};

//- ----------------------------------------------------------------------------------------------------------------------
//- channel slice address definition -------------------------------------------------------------------------------------
const uint8_t cnlAddr[] PROGMEM = {
    0x05, 0x0a, 0x0b, 0x0c, 0x14, 0x24, 0x26, 0x27, // 8 bytes as in {  0,  0, 0x00,  8,  0x000f },
};  // 8 byte

//- channel device list table --------------------------------------------------------------------------------------------
EE::s_cnlTbl cnlTbl[] = {
    // cnl, lst, sIdx, sLen, pAddr;
    {  0,  0, 0x00,  8,  0x000f }, // next adress:   8 + 0x000f = 0x0017
    {  1,  4, 0x08,  1,  0x0017 }, // next adress: 1*6 + 0x0017 = 0x001D
};  // 12 byte

//- peer device list table -----------------------------------------------------------------------------------------------
EE::s_peerTbl peerTbl[] = {
    // cnl, pMax, pAddr;
    {1, 6, 0x001D}  // next address: 6*4 + 0x001D = 0x0035
};  // 0 byte

//- handover to AskSin lib -----------------------------------------------------------------------------------------------
EE::s_devDef devDef = {
    1, 2, devIdnt, cnlAddr, // channels (w/out ch0), lists (w/ list0)
};  // 10 byte

//- module registrar -----------------------------------------------------------------------------------------------------
RG::s_modTable modTbl[1];



//- ----------------------------------------------------------------------------------------------------------------------
//- only if needed -------------------------------------------------------------------------------------------------------
//- ----------------------------------------------------------------------------------------------------------------------

struct s_lst0Cnl0 {
// 0x05, 0x0a, 0x0b, 0x0c, 0x14, 0x24, 0x26, 0x27,
    uint8_t                           :6;       // 0x05, s:0, e:6
    uint8_t DEVICE_LED_MODE           :2;       // 0x05, s:6, e:8
    uint8_t Master_ID_A               :8;       // 0x0a, s:0, e:8
    uint8_t Master_ID_B               :8;       // 0x0b, s:0, e:8
    uint8_t Master_ID_C               :8;       // 0x0c, s:0, e:8
    uint8_t TRANSMIT_DEV_TRY_MAX      :8;       // 0x14, s:0, e:8
    uint8_t MEASURE_INTERVALL         :16;       // 0x24, s:0, e:16
    uint8_t PWM_STABLE_DELAY          :8;       // 0x26, s:0, e:8
    uint8_t PWM_STABLE_DELTA          :8;       // 0x27, s:0, e:8
};  // 8 byte

HMID und HMSR habe ich in hmserial.cpp ausgelagert, als ich noch dachte, die register.cpp ohne Hand anzulegen automatisch generieren zu können.. Wird sicher noch kommen 😄

@trilu2000
Copy link
Owner

das kann so nicht gehen :-)

|//- ----------------------------------------------------------------------------------------------------------------------
//- channel slice address definition -------------------------------------------------------------------------------------
const uint8_t cnlAddr[] PROGMEM = {
0x05, 0x0a, 0x0b, 0x0c, 0x14, 0x24, 0x26, 0x27, // 8 bytes as in { 0, 0, 0x00, 8, 0x000f },
}; // 8 byte

//- channel device list table --------------------------------------------------------------------------------------------
EE::s_cnlTbl cnlTbl[] = {
// cnl, lst, sIdx, sLen, pAddr;
{ 0, 0, 0x00, 8, 0x000f }, // next adress: 8 + 0x000f = 0x0017
{ 1, 4, 0x08, 1, 0x0017 }, // next adress: 1*6 + 0x0017 = 0x001D
}; // 12 byte
|

in der channel device list sagst du es gibt zwei listen, kanal 0 mit
list 0 und kanal 1 mit einer list 4.
für kanal 0 list 0 definierst du auch die registerwerte im slice address
table, aber für kanal 1 list 4 nicht.

|//- channel slice address definition -------------------------------------------------------------------------------------
const uint8_t cnlAddr[] PROGMEM = {
0x05, 0x0a, 0x0b, 0x0c, 0x14, 0x24, 0x26, 0x27, // 8 bytes as in { 0, 0, 0x00, 8, 0x000f },
0x01,
}; // 8 byte
|

probier das mal...

Am 04.06.2015 um 19:55 schrieb Andy:

Wie gesagt, im Moment fahre ich mit der register.h von AsksinNew_test.
Weils auch damit nicht geht, vermute ich, dass irgenwas mit der
Hardwareintitalisierung nicht tut.

Ich versuche jetzt folgendes: Ich hangle mich ausgehend von
AsksinNew_test langsam in Richtung meiner Hardware vor und schaue ab
welcher Änderung es nicht mehr tut. Hab wohl vor dem ersten Test
zuviel geändert, zeigt mal wieder, dass Testen nur durch mehr Testen
zu ersetzen ist...

Hier aber schonmal meine ursprüngliche register.h, zu der ich
irgendwann in der ein oder anderen Form wieder hin will:

|#include <AS.h>

//- settings of HM device for AS class -----------------------------------------------------------------------------------
const uint8_t devIdnt[] PROGMEM = {
/* Firmware version 1 byte / 0x01,
/
Model ID 2 byte / 0xaf, 0xfe,
/
Sub Type ID 1 byte / 0x00,
/
Device Info 3 byte */ 0x41, 0x01, 0x00,
};

//- ----------------------------------------------------------------------------------------------------------------------
//- channel slice address definition -------------------------------------------------------------------------------------
const uint8_t cnlAddr[] PROGMEM = {
0x05, 0x0a, 0x0b, 0x0c, 0x14, 0x24, 0x26, 0x27, // 8 bytes as in { 0, 0, 0x00, 8, 0x000f },
}; // 8 byte

//- channel device list table --------------------------------------------------------------------------------------------
EE::s_cnlTbl cnlTbl[] = {
// cnl, lst, sIdx, sLen, pAddr;
{ 0, 0, 0x00, 8, 0x000f }, // next adress: 8 + 0x000f = 0x0017
{ 1, 4, 0x08, 1, 0x0017 }, // next adress: 1*6 + 0x0017 = 0x001D
}; // 12 byte

//- peer device list table -----------------------------------------------------------------------------------------------
EE::s_peerTbl peerTbl[] = {
// cnl, pMax, pAddr;
{1, 6, 0x001D} // next address: 6*4 + 0x001D = 0x0035
}; // 0 byte

//- handover to AskSin lib -----------------------------------------------------------------------------------------------
EE::s_devDef devDef = {
1, 2, devIdnt, cnlAddr, // channels (w/out ch0), lists (w/ list0)
}; // 10 byte

//- module registrar -----------------------------------------------------------------------------------------------------
RG::s_modTable modTbl[1];

//- ----------------------------------------------------------------------------------------------------------------------
//- only if needed -------------------------------------------------------------------------------------------------------
//- ----------------------------------------------------------------------------------------------------------------------

struct s_lst0Cnl0 {
// 0x05, 0x0a, 0x0b, 0x0c, 0x14, 0x24, 0x26, 0x27,
uint8_t :6; // 0x05, s:0, e:6
uint8_t DEVICE_LED_MODE :2; // 0x05, s:6, e:8
uint8_t Master_ID_A :8; // 0x0a, s:0, e:8
uint8_t Master_ID_B :8; // 0x0b, s:0, e:8
uint8_t Master_ID_C :8; // 0x0c, s:0, e:8
uint8_t TRANSMIT_DEV_TRY_MAX :8; // 0x14, s:0, e:8
uint8_t MEASURE_INTERVALL :16; // 0x24, s:0, e:16
uint8_t PWM_STABLE_DELAY :8; // 0x26, s:0, e:8
uint8_t PWM_STABLE_DELTA :8; // 0x27, s:0, e:8
}; // 8 byte
|

HMID und HMSR habe ich in |hmserial.cpp| ausgelagert, als ich noch
dachte, die register.cpp ohne Hand anzulegen automatisch generieren zu
können.. Wird sicher noch kommen 😄


Reply to this email directly or view it on GitHub
#4 (comment).

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 5, 2015

Cool, danke, nach vielen Zwischenschritten bin ich jetzt bei der alten register gelandet (incl. Deiner Korrektur) und meine Sensor Klasse liefert meinen superlangen 71er Event mit Testdaten aus. Das alles ohne timeouts und ohne Kollateralschäden für die Produktivumgebung.

Als nächstes steht das Auslesen meiner Sensoren an, es bleibt also spannend.

Grüße,
Andy.

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 7, 2015

Hallo Horst,
hab nochmal einiges dazu gelernt, was die maximale Länge eines Message Frames betrifft, jetzt verstehe ich Deine Affinität zu bekannten Devices:
Während mein HM-CFG-USB die langen Frames sang- und klanglos geschluckt hat, verursacht eine Payload_länge von 18 und Aufwärts reproduzierbar einen Absturz des HM-CFG-LAN. Was zuvor so aussah, als würde der Panstamp den Funkverkehr und damit den Betrieb meines Produktivsystems stören, kann ich jetzt zurückführen auf diese Abstürze. Gut möglich, dass die HM-CFG-LAN Firmware (bei mir v0.961) keine zu langen Frames erlaubt; ob es neuere Firmware gibt hab ich noch nicht gecheckt. Ich werde aber sicherheitshalber die send_generic_event() Methode nochmal so abändern, dass die Payload-Länge auf jeden Fall begrenzt wird. Ansonsten funktioniert meine Firmware mit eigenem Event Frame recht gut.

Nach diesem kleinen OT-Ausflug zurück zum Thema: Ich würde an der Stelle gerne anfangen, ein wenig API Doku zu schreiben, vor allem was die Register Definition betrifft. Ein paar Verständnislücken habe ich da noch, aber die lassen sich sicher füllen. Ich werde erstmal Doxygen aufsetzen und einchecken, dann sehen wir weiter.
Eine Frage an der Stelle: Wieviel Wert legst Du auf die Tabs und Abstände zwischen Ende einer Instruktion und Kommentar dahinter? Mir ist aufgefallen, dass incl. Kommentar die Zeilen irre lang sind, ich vermute Du verwendest einen Editor, bei dem die Tabulatorweite auf 2-4 Zeichen eingestellt ist? Wäre es für Dich akzeptabel wenn ich die Tabs durch Leerzeichen ersetze und ggfls die Kommentare näher nach links an den Code rücke? Würde aus meiner Sicht die Lesbarkeit deutlich erhöhen, aber das ist sicher Geschmacksache. Bei solchen Eingriffen würde ich auf jeden Fall vorher fragen, ob Du an der betreffenden Datei gerade arbeitetest, weil derlei Änderungen erfahrungsgemäß nicht so schön zu mergen sind und Konflikte immer nur zusätzlich Arbeit machen...
Grüße,
Andy.

@gandy92
Copy link
Collaborator Author

gandy92 commented Jun 7, 2015

Hallo Horst,
hier mal der erste Entwurf: http://trilu2000.github.io/NewAskSin/
Fertig dokumentiert ist die Klasse waitTimer, ansonsten habe ich mit AS begonnen. Dabei wird auch gezeigt wie man Beispiel-Code inline (waitTimer) oder aus einer Datei includen (AS) kann, beides zu finden in den doxygen-Kommentaren in AS.h
Grüße,
Andy.

@trilu2000
Copy link
Owner

Hi Andy,

wow, das sieht echt gut aus - machst du das beruflich?
Kann ich daran auch editieren?
Viele Grüße
Horst

Am 07.06.2015 um 16:41 schrieb Andy:

Hallo Horst,
hier mal der erste Entwurf: http://trilu2000.github.io/NewAskSin/
Fertig dokumentiert ist die Klasse waitTimer
http://trilu2000.github.io/NewAskSin/classwaitTimer.html, ansonsten
habe ich mit AS http://trilu2000.github.io/NewAskSin/classAS.html
begonnen. Dabei wird auch gezeigt wie man Beispiel-Code inline
(waitTimer) oder aus einer Datei includen (AS) kann, beides zu finden
in den doxygen-Kommentaren in AS.h
Grüße,
Andy.


Reply to this email directly or view it on GitHub
#4 (comment).

@trilu2000
Copy link
Owner

Hi Andy,

sorry, war am Wochenende mit meiner Markise beschäftigt. Tuch getauscht,
Motor eingebaut und per HM angeschlossen.
Ganz schön aufwändig, da man in den 80'er Jahren nicht über einen
Stromanschluss auf der Terasse nachgedacht hat :-)

Ich hatte mir sowas schon gedacht, HM ist nicht wirklich flexibel. Das
Protokoll scheint über die Zeit gewachsen zu sein. Nur so sind die
ganzen Unstimmigkeiten zu erklären. Für den Transport von
Registerinhalte gehen ein paar Byte mehr als Payload als für
Statusmessages... Naja, das gut bei solchen Aktionen - man lernt dazu ...

Ich bin mir nicht sicher wie Doxygen bei der Register Definition helfen
soll, bin aber gerne bereit zu unterstützen und zu erklären. Doku habe
ich immer viel zu stark vernachlässigt. Das macht es Leuten die mit an
dem Framework arbeiten wollen nicht unbedingt einfach.

Ich nutze die Atmel Soft zum proggen, also das angepasste Visual Studio
und dazu das Visual Micro plugin. Ob Tabs oder Blanks bin ich
leidenschaftslos. Die langen Kommentare kommen vermutlich durch meinen
Monitor - ich nutze einen LG ultra wide Monitor. Die Kommentare dürfen
auch gerne weiter nach links, ich brauche nur Struktur um mich zurecht
zu finden.

Nutzt du eigentlich Hangouts oder sowas?

Viele Grüße
Horst

Am 07.06.2015 um 11:41 schrieb Andy:

Hallo Horst,
hab nochmal einiges dazu gelernt, was die maximale Länge eines Message
Frames betrifft, jetzt verstehe ich Deine Affinität zu bekannten Devices:
Während mein HM-CFG-USB die langen Frames sang- und klanglos
geschluckt hat, verursacht eine Payload_länge von 18 und Aufwärts
reproduzierbar einen Absturz des HM-CFG-LAN. Was zuvor so aussah, als
würde der Panstamp den Funkverkehr und damit den Betrieb meines
Produktivsystems stören, kann ich jetzt zurückführen auf diese
Abstürze. Gut möglich, dass die HM-CFG-LAN Firmware (bei mir v0.961)
keine zu langen Frames erlaubt; ob es neuere Firmware gibt hab ich
noch nicht gecheckt. Ich werde aber sicherheitshalber die
send_generic_event() Methode nochmal so abändern, dass die
Payload-Länge auf jeden Fall begrenzt wird. Ansonsten funktioniert
meine Firmware mit eigenem Event Frame recht gut.

Nach diesem kleinen OT-Ausflug zurück zum Thema: Ich würde an der
Stelle gerne anfangen, ein wenig API Doku zu schreiben, vor allem was
die Register Definition betrifft. Ein paar Verständnislücken habe ich
da noch, aber die lassen sich sicher füllen. Ich werde erstmal Doxygen
aufsetzen und einchecken, dann sehen wir weiter.
Eine Frage an der Stelle: Wieviel Wert legst Du auf die Tabs und
Abstände zwischen Ende einer Instruktion und Kommentar dahinter? Mir
ist aufgefallen, dass incl. Kommentar die Zeilen irre lang sind, ich
vermute Du verwendest einen Editor, bei dem die Tabulatorweite auf 2-4
Zeichen eingestellt ist? Wäre es für Dich akzeptabel wenn ich die Tabs
durch Leerzeichen ersetze und ggfls die Kommentare näher nach links an
den Code rücke? Würde aus meiner Sicht die Lesbarkeit deutlich
erhöhen, aber das ist sicher Geschmacksache. Bei solchen Eingriffen
würde ich auf jeden Fall vorher fragen, ob Du an der betreffenden
Datei gerade arbeitetest, weil derlei Änderungen erfahrungsgemäß nicht
so schön zu mergen sind und Konflikte immer nur zusätzlich Arbeit
machen...
Grüße,
Andy.


Reply to this email directly or view it on GitHub
#4 (comment).

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants