Arduino Asksin library

Begonnen von trilu, 06 August 2013, 10:02:17

Vorheriges Thema - Nächstes Thema

trilu

Hallo Zusammen,

mal wieder ein kleines Update zur Weiterentwicklung

- Register Definition über ein Perl Script von Martin
- Lesen und schreiben der Registerinhalte und Speicherung im EEprom
- Handling der meißten Config Befehle

Was noch fehlt

- ACK/NACK Handling
- INFO_PARAMETER_CHANGE, INFO_ACTUATOR_STATUS und diverse andere Befehle
- Event Handling
- Power Management
- Tests, tests, tests

Die Sourcen werde ich Mitte der Woche hier posten...

Viele Grüße
Horst



trilu

Ach ja - eine Frage
was antwortet eigentlich ein Device auf einen Peer Request wenn die Peer Liste voll ist?

Kommt dann ein NACK oder keine Antwort zurück?

martinp876

wie meinst du das?
ein "get peers" sendet natürlich alle peers.
ein "set peer" wird mit NACK beantwortet.

trilu

ist das generell unter HM so.
Alle ungültigen Fragen werden mit einem NACK beantwortet?
Z.b. ich frage Channel 0 nach List1?

trilu

Hi Martin,

habe heute mal ein wenig mit deinem Config-Script gespielt.
Funktioniert gut!

Device config, size: 536 byte
cnl lst slcPtr slcEnd phyAddr phyLen
0 0 0 2 0 4
1 1 2 1 4 1
1 3 3 2 5 22
2 1 15 1 137 1
2 3 16 2 138 22
3 1 28 1 270 1
3 3 29 2 271 22
4 1 41 1 403 1
4 3 42 2 404 22

Peer Database, size: 96 byte
cnl pIdx slcPtr slcEnd phyAddr phyLen peer
1 0 3 2 5 22 00 00 00 00
1 1 5 2 27 22 00 00 00 00
1 2 7 2 49 22 AA BB CC 04
1 3 9 2 71 22 AA BB CC 03
1 4 11 2 93 22 00 00 00 00
1 5 13 2 115 22 00 00 00 00
2 0 16 2 138 22 00 00 00 00
2 1 18 2 160 22 00 00 00 00
2 2 20 2 182 22 00 00 00 00
2 3 22 2 204 22 00 00 00 00
2 4 24 2 226 22 00 00 00 00
2 5 26 2 248 22 00 00 00 00
3 0 29 2 271 22 00 00 00 00
3 1 31 2 293 22 00 00 00 00
3 2 33 2 315 22 00 00 00 00
3 3 35 2 337 22 00 00 00 00
3 4 37 2 359 22 00 00 00 00
3 5 39 2 381 22 00 00 00 00
4 0 42 2 404 22 00 00 00 00
4 1 44 2 426 22 00 00 00 00
4 2 46 2 448 22 00 00 00 00
4 3 48 2 470 22 00 00 00 00
4 4 50 2 492 22 00 00 00 00
4 5 52 2 514 22 00 00 00 00


Viele Grüße
Horst

trilu

schon wieder eine frage - kann unter HM ein device mit mehreren channeln gleichzeitig gepeert werden?
also ist sowas zulässig?

Peer Database, size: 96 byte
cnl pIdx slcPtr slcEnd phyAddr phyLen peer
1 0 3 2 5 22 00 00 00 00
1 1 5 2 27 22 00 00 00 00
1 2 7 2 49 22 AA BB CC 04
1 3 9 2 71 22 AA BB CC 03  <- siehe weiter unten...
1 4 11 2 93 22 00 00 00 00
1 5 13 2 115 22 00 00 00 00
2 0 16 2 138 22 AA BB CC 04
2 1 18 2 160 22 AA BB CC 03  <- gleicher peer eintrag auf verschiedenen channeln?
2 2 20 2 182 22 00 00 00 00
2 3 22 2 204 22 00 00 00 00
2 4 24 2 226 22 00 00 00 00
2 5 26 2 248 22 00 00 00 00

trilu

#171
Anscheinend führe ich hier Alleinunterhaltungen :-)
Ich bin ganz begeistert. Bisher waren es nur Trockenübungen am Modul, gerade aber der Test
in Verbindung mit FHEM. Scheint ganz gut zu klappen!

Serial: PS00000001, HMID: 3F A6 5C, FreeMem: 1200 byte's

S- 1A 00 A2 00 3F A6 5C 00 00 00 10 00 67 50 53 30 30 30 30 30 30 30 31 9F 41 01 01 (l:27)(4196)
<- sendStr (4229)
<- sendStr (4530)
-> 10 01 A0 01 63 19 63 3F A6 5C 00 05 00 00 00 00 00 (l:17)(4601)
   start config mode; Cnl: 0, PeerID: 00 00 00, PeerCnl: 0, ParmLst: 0
S- 0A 01 80 02 3F A6 5C 63 19 63 00 (l:11)(4620)
-> 10 01 A0 01 63 19 63 3F A6 5C 00 05 00 00 00 00 00 (l:17)(4800)
   start config mode; Cnl: 0, PeerID: 00 00 00, PeerCnl: 0, ParmLst: 0
S- 0A 01 80 02 3F A6 5C 63 19 63 00 (l:11)(4818)
<- sendStr (4837)
-> 13 02 A0 01 63 19 63 3F A6 5C 00 08 02 01 0A 63 0B 19 0C 63 (l:20)(5210)
   write data: 02 01 0A 63 0B 19 0C 63
S- 0A 02 80 02 3F A6 5C 63 19 63 00 (l:11)(5224)
<- sendStr (5242)
-> 0B 03 A0 01 63 19 63 3F A6 5C 00 06 (l:12)(5521)
   end config mode; Cnl: 0
S- 0A 03 80 02 3F A6 5C 63 19 63 00 (l:11)(5529)
<- sendStr (5548)
-> 10 04 A0 01 63 19 63 3F A6 5C 00 04 00 00 00 00 00 (l:17)(32407)
   config param request; Cnl: 0, PeerID: 00 00 00, PeerCnl: 0, ParmLst: 0
S- 14 01 A0 10 3F A6 5C 63 19 63 02 02 01 0A 63 0B 19 0C 63 00 00 (l:21)(32430)
<- sendStr (32456)
-> 0A 01 80 02 63 19 63 3F A6 5C 00 (l:11)(32579)
   ACK (32581)

-> 10 05 A0 01 63 19 63 3F A6 5C 01 04 00 00 00 00 01 (l:17)(33683)
   config param request; Cnl: 1, PeerID: 00 00 00, PeerCnl: 0, ParmLst: 1
S- 0E 02 A0 10 3F A6 5C 63 19 63 02 08 00 00 00 (l:15)(33703)
<- sendStr (33726)
-> 0A 02 80 02 63 19 63 3F A6 5C 00 (l:11)(33853)
   ACK (33853)

-> 0B 06 A0 01 63 19 63 3F A6 5C 01 03 (l:12)(34734)
   config peer list request; Cnl: 1
S- 1A 03 A0 10 3F A6 5C 63 19 63 01 11 22 33 04 11 22 33 03 AA BB CC 04 AA BB CC 03 (l:27)(34750)
<- sendStr (34783)
-> 0A 03 80 02 63 19 63 3F A6 5C 00 (l:11)(34899)
   ACK (34902)

S- 0E 04 A0 10 3F A6 5C 63 19 63 01 00 00 00 00 (l:15)(34908)
<- sendStr (35074)
-> 0A 04 80 02 63 19 63 3F A6 5C 00 (l:11)(35194)
   ACK (35194)

-> 10 07 A0 01 63 19 63 3F A6 5C 02 04 00 00 00 00 01 (l:17)(35469)
   config param request; Cnl: 2, PeerID: 00 00 00, PeerCnl: 0, ParmLst: 1
S- 0A 07 80 02 3F A6 5C 63 19 63 80 (l:11)(35487)
<- sendStr (35506)
-> 0B 08 A0 01 63 19 63 3F A6 5C 02 03 (l:12)(35784)
   config peer list request; Cnl: 2
S- 0A 08 80 02 3F A6 5C 63 19 63 80 (l:11)(35794)
<- sendStr (35813)
-> 10 09 A0 01 63 19 63 3F A6 5C 03 04 00 00 00 00 01 (l:17)(36096)
   config param request; Cnl: 3, PeerID: 00 00 00, PeerCnl: 0, ParmLst: 1
S- 0A 09 80 02 3F A6 5C 63 19 63 80 (l:11)(36114)
<- sendStr (36134)
-> 0B 0A A0 01 63 19 63 3F A6 5C 03 03 (l:12)(36411)
   config peer list request; Cnl: 3
S- 0A 0A 80 02 3F A6 5C 63 19 63 80 (l:11)(36421)
<- sendStr (36440)
-> 10 0B A0 01 63 19 63 3F A6 5C 01 04 11 22 33 03 03 (l:17)(36722)
   config param request; Cnl: 1, PeerID: 11 22 33, PeerCnl: 3, ParmLst: 3
S- 1A 05 A0 10 3F A6 5C 63 19 63 02 02 00 03 00 06 00 07 00 08 00 09 00 0A 00 82 00 (l:27)(36749)
<- sendStr (36782)
-> 0A 05 80 02 63 19 63 3F A6 5C 00 (l:11)(36898)
   ACK (36900)

S- 18 06 A0 10 3F A6 5C 63 19 63 02 83 00 86 00 87 00 88 00 89 00 8A 00 00 00 (l:25)(36913)
<- sendStr (37081)
-> 0A 06 80 02 63 19 63 3F A6 5C 00 (l:11)(37193)
   ACK (37193)

-> 10 0C A0 01 63 19 63 3F A6 5C 01 04 11 22 33 04 03 (l:17)(37468)
   config param request; Cnl: 1, PeerID: 11 22 33, PeerCnl: 4, ParmLst: 3
S- 1A 07 A0 10 3F A6 5C 63 19 63 02 02 00 03 00 06 00 07 01 08 63 09 19 0A 63 82 00 (l:27)(37494)
<- sendStr (37525)
-> 0A 07 80 02 63 19 63 3F A6 5C 00 (l:11)(37644)
   ACK (37644)

S- 18 08 A0 10 3F A6 5C 63 19 63 02 83 00 86 00 87 00 88 00 89 00 8A 00 00 00 (l:25)(37656)
<- sendStr (37824)
-> 0A 08 80 02 63 19 63 3F A6 5C 00 (l:11)(37937)
   ACK (37937)

-> 10 0D A0 01 63 19 63 3F A6 5C 01 04 AA BB CC 03 03 (l:17)(38211)
   config param request; Cnl: 1, PeerID: AA BB CC, PeerCnl: 3, ParmLst: 3
S- 1A 09 A0 10 3F A6 5C 63 19 63 02 02 00 03 00 06 00 07 00 08 00 09 00 0A 00 82 00 (l:27)(38238)
<- sendStr (38270)
-> 0A 09 80 02 63 19 63 3F A6 5C 00 (l:11)(38387)
   ACK (38387)

S- 18 0A A0 10 3F A6 5C 63 19 63 02 83 00 86 00 87 00 88 00 89 00 8A 00 00 00 (l:25)(38402)
<- sendStr (38569)
-> 0A 0A 80 02 63 19 63 3F A6 5C 00 (l:11)(38682)
   ACK (38684)

-> 10 0E A0 01 63 19 63 3F A6 5C 01 04 AA BB CC 04 03 (l:17)(38957)
   config param request; Cnl: 1, PeerID: AA BB CC, PeerCnl: 4, ParmLst: 3
S- 1A 0B A0 10 3F A6 5C 63 19 63 02 02 00 03 00 06 00 07 00 08 00 09 00 0A 00 82 00 (l:27)(38983)
<- sendStr (39016)
-> 0A 0B 80 02 63 19 63 3F A6 5C 00 (l:11)(39133)
   ACK (39133)

S- 18 0C A0 10 3F A6 5C 63 19 63 02 83 00 86 00 87 00 88 00 89 00 8A 00 00 00 (l:25)(39145)
<- sendStr (39315)
-> 0A 0C 80 02 63 19 63 3F A6 5C 00 (l:11)(39428)
   ACK (39428)

-> 10 0F A0 01 63 19 63 3F A6 5C 01 01 1F A6 5C 04 03 (l:17)(120741)
   config peer add; Cnl: 1, PeerID: 1F A6 5C, PeerCnl_A: 4, PeerCnl_B: 3, ret: 1
S- 0A 0F 80 02 3F A6 5C 63 19 63 00 (l:11)(120856)
<- sendStr (120875)



Device config, size: 117 byte
cnl lst slcPtr slcEnd phyAddr phyLen
0 0 0 2 0 4
1 1 2 1 4 1
1 3 3 4 5 14

Peer Database, size: 32 byte
cnl pIdx slcPtr slcEnd phyAddr phyLen peer
1 0 3 4 5 14 11 22 33 04
1 1 7 4 19 14 11 22 33 03
1 2 11 4 33 14 AA BB CC 04
1 3 15 4 47 14 AA BB CC 03
1 4 19 4 61 14 1F A6 5C 04
1 5 23 4 75 14 1F A6 5C 03
1 6 27 4 89 14 00 00 00 00
1 7 31 4 103 14 00 00 00 00

-> 0B 6A A4 40 1F A6 5C 3F A6 5C 04 00 (l:12)(169619)

Remote_Event; cnl: 04, data: 00

   recv_Event, cnl: 1, data: 04 00
S- 0A 6A 80 02 3F A6 5C 1F A6 5C 00 (l:11)(169635)
<- sendStr (169656)
-> 0B 6B 84 40 1F A6 5C 3F A6 5C 44 01 (l:12)(174143)

Remote_Event; cnl: 44, data: 01

   recv_Event, cnl: 1, data: 44 01
-> 0B 6C 84 40 1F A6 5C 3F A6 5C 44 01 (l:12)(174409)

Remote_Event; cnl: 44, data: 01

   recv_Event, cnl: 1, data: 44 01
-> 0B 6D 84 40 1F A6 5C 3F A6 5C 44 01 (l:12)(174675)

Remote_Event; cnl: 44, data: 01

   recv_Event, cnl: 1, data: 44 01
-> 0B 6E 84 40 1F A6 5C 3F A6 5C 44 01 (l:12)(174944)

Remote_Event; cnl: 44, data: 01

   recv_Event, cnl: 1, data: 44 01
-> 0B 6F 84 40 1F A6 5C 3F A6 5C 44 01 (l:12)(175210)

Remote_Event; cnl: 44, data: 01

   recv_Event, cnl: 1, data: 44 01
-> 0B 70 84 40 1F A6 5C 3F A6 5C 44 01 (l:12)(175476)

Remote_Event; cnl: 44, data: 01

   recv_Event, cnl: 1, data: 44 01
-> 0B 71 A0 40 1F A6 5C 3F A6 5C 44 01 (l:12)(175742)

Remote_Event; cnl: 44, data: 01

   recv_Event, cnl: 1, data: 44 01
S- 0A 71 80 02 3F A6 5C 1F A6 5C 00 (l:11)(175759)
<- sendStr (175777)

-> 0E 18 A0 11 63 19 63 3F A6 5C 02 01 C8 00 00 (l:15)(470085)
-> 0E 18 A0 11 63 19 63 3F A6 5C 02 01 C8 00 00 (l:15)(470284)


Was sieht man in dem Log? Zuerst einmal das Pairing mit der Zentrale, danach ein get config.
Hier sind einige NACK's drin, da ich nur einen Kanal definiert habe, FHEM aber bei diesem Device zwei Kanäle erwartet.
Danach folgt das Peeren mit einem Funktaster...

-> 10 0F A0 01 63 19 63 3F A6 5C 01 01 1F A6 5C 04 03 (l:17)(120741)
   config peer add; Cnl: 1, PeerID: 1F A6 5C, PeerCnl_A: 4, PeerCnl_B: 3, ret: 1
S- 0A 0F 80 02 3F A6 5C 63 19 63 00 (l:11)(120856)
<- sendStr (120875)


Das hier ist die Wiederholungssequenz von einem Funktaster:
-> 0B 6C 84 40 1F A6 5C 3F A6 5C 44 01 (l:12)(174409)

Remote_Event; cnl: 44, data: 01

   recv_Event, cnl: 1, data: 44 01
-> 0B 6D 84 40 1F A6 5C 3F A6 5C 44 01 (l:12)(174675)


Mit cnl ist peerChannel gemeint, also Taste 4 - in Data seht ihr den eigentlichen Kanal.

Als nächstes werde ich jetzt noch ein wenig mit der Config spielen und mir mal die Sache mit List4 anschauen.
Was mir auch noch nicht klar ist, wie muss der Payload für einen Status aussehen. Wäre Klasse wenn ihr hier
mithelfen könntet.

Viele Grüße
Horst

Dirk

Hallo Horst,

aktuell lese ich mit. Aber die Zeit kommt, dass ich deine Lib einsetzen werde.
Bis dahin werkle ich noch an den anderen Baustellen in FHEM die ich aufgerissen habe :)

Gruß
Dirk

betateilchen

Hallo Horst,

keine Sorge, ich lese hier aufmerksam mit.

Zu Deiner Frage: Ein Device wird überhaupt nicht gepeert. Es werden nur Channels untereinander gepeert. Deshalb muss jedes Device mindestens einen Channel besitzen.
Und ein Channel kann natürlich gleichzeitig mit mehreren anderen Channeln gepeert werden.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

trilu

ich bin gerade dabei noch einmal das message handling zu checken und habe noch ein paar offene punkte entdeckt.

01 02 03 04 05       06       07
1A 00 A2 00 3F A6 5C 00 00 00 10 80 02 50 53 30 30 30 30 30 30 30 31 9F 04 01 01

01 Message length indicator
Reflect the size of the message without the indicator

02 Message counter
One Byte counter, increased by every send message. While sending an ACK the message counter from the received message is used.

03 Communication bit field
       1 wakeup
       2 wake me up
       4 config mode (broadcast)
       8 unknown
      10 burst transmission
      20 ACK requested
      40 message from repeater
      80 message to master or message could be repeated

04 Message type; see table below

05 Source Address; 3 Byte length, identification of own device

06 Target Address; 3 Byte length, 00 00 00 means broadcast

07 Payload; max size is 20 bytes


40 - message from repeater
ich gehe davon aus das eine message vom repeater 1:1 weiter gesendet wird und hier nur 0x40 bei byte03 gesetzt wird.
wurde die message bereits empangen, dann verwerfe ich sie.
korrekt?

1 - wakeup
2 - wake me up
10 - burst transmission
keine ahnung - kann das jemand beschreiben, am besten mit beispielen belegen?

danke und viele grüße

trilu

und noch eine Frage - braucht jemand zufällig Funkmodule?
http://www.aliexpress.com/item/25pcs-lot-CC1101-868MHz-wireless-module-1-2k-500-kbps-data-rate-Free-shipping/1104691912.html

Das Stück kostet 3,30€ oder so?


http://www.aliexpress.com/item/5pcs-lot-CC1101-868MHz-wireless-module-distance-for-300m-Free-shipping/1104732817.html
gibts auch in kleineren Stückzahlen :-)
Dafür aber auch etwas teurer,
1 Stück für 4,60€

Sind anscheinend auf 868 MHz abgestimmt, damit wären sie mit einem Arduino Mini Pro eine gute Alternative zur Panstamp.
Und somit auch deutlich günstiger - Arduino Mini Pro bei ebay aus Fernost für etwa 5 Euro + so ein Modul, macht 10€

Viele Grüße
Horst

Dirk

Hi Horst,

wollte genau diese die Tage auch schon mal ordern.
Ich würde zum testen erst mal zwei nehmen.

Wenn du die 25 Stück nicht voll bekommst, dann gerne auch mehr.
Blöderweise ist die Zeit derzeit knapp.

Gruß
Dirk

Update:
Arduino Mini Pro gibts auch schon für $3,90 das Stück

http://www.aliexpress.com/item/Free-Shipping-Version-Pro-Mini-Module-Atmega328-5v-16M-For-Arduino-Compatible/1022001878.html

Porky666

Hallo Horst,

Ich wäre ebenfalls mit min. 3 von jedem dabei, um mich mal in das Thema Ardunio zu beschäftigen.

Gruß

Stefan
ODROID U3 1GB Ubuntu immer aktuell
FHEM immer das aktuellste Development
Defined modules:

COC; CULv3; HMLAN :HM-CC-SCD,HM-CC-TC,HM-LC-SW4-PCB,HM-LC-Sw1PBU-FM,HM-OU-LED16,HM-SCI-3-FM,HM-SEC-SC,HM-SEC-WIN,HM-WDS10-TH-O; ESA2000; FS20; HUEBridge; Huedevices; IT; JeeLink :PCA301 :panstamp:

mmatt

Hallo

Ich würde auch mal ein Funkmodul (zum testen) nehmen.

@Dirk
Währe der Arduino Mini Pro mit 3,3V nicht die bessere Variante.
Dann kann man das Funkmodul ab dem Arduino speisen.

Gruss Martin

PS: Das Project hier, find ich übrigens Klasse :-)
- FHEM 5.5 auf RPI REV.2
- CUL V3 868MHz
- CUL_HM: HM-LC-Dim1TPBU-FM/HM-LC-Swl1PBU-FM/HM-LC-Sw1-BA-PCB/HB-UW-Sen-THPL-O/HM-SEN-MDIR-SM

Dirk

Hi Martin, da hast du recht.

laut Beschreibung kann das Board oben ab 3,3V betrieben werden. Daher sollte das da passen
Zitat7. Support for external 3.3V ~ 12V DC power supply

Gruß
Dirk