Arduino Asksin library

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

Vorheriges Thema - Nächstes Thema

betateilchen

falls es Dir hilft:


# 4-Tasten-Fernbedienung
# Button 2 short
-> 00 A6 40 21 23 FC 12 70 00 02 00 (l:11)(11421)
-> 01 A2 40 21 23 FC 12 70 00 02 00 (l:11)(11672)
-> 02 A2 40 21 23 FC 12 70 00 02 00 (l:11)(11923)

# Button 1 short
-> 03 A6 40 21 23 FC 12 70 00 01 00 (l:11)(130043)
-> 04 A2 40 21 23 FC 12 70 00 01 00 (l:11)(130294)
-> 05 A2 40 21 23 FC 12 70 00 01 00 (l:11)(130545)

# Button 4 short
-> 06 A6 40 21 23 FC 12 70 00 04 00 (l:11)(135548)
-> 07 A2 40 21 23 FC 12 70 00 04 00 (l:11)(135798)
-> 08 A2 40 21 23 FC 12 70 00 04 00 (l:11)(136049)

# Button 3 short
-> 09 A6 40 21 23 FC 12 70 00 03 00 (l:11)(137201)
-> 0A A2 40 21 23 FC 12 70 00 03 00 (l:11)(137452)
-> 0B A2 40 21 23 FC 12 70 00 03 00 (l:11)(137703)

# Button 2 long
-> 0C 84 40 21 23 FC 12 70 00 42 01 (l:11)(170140)
-> 0D 84 40 21 23 FC 12 70 00 42 01 (l:11)(170391)
-> 0E 84 40 21 23 FC 12 70 00 42 01 (l:11)(170642)
-> 0F 84 40 21 23 FC 12 70 00 42 01 (l:11)(170893)
-> 10 A2 40 21 23 FC 12 70 00 42 01 (l:11)(171144)
-> 11 A2 40 21 23 FC 12 70 00 42 01 (l:11)(171395)
-> 12 A2 40 21 23 FC 12 70 00 42 01 (l:11)(171645)

# Button 1 long
-> 13 84 40 21 23 FC 12 70 00 41 01 (l:11)(178594)
-> 14 84 40 21 23 FC 12 70 00 41 01 (l:11)(178845)
-> 15 84 40 21 23 FC 12 70 00 41 01 (l:11)(179096)
-> 16 84 40 21 23 FC 12 70 00 41 01 (l:11)(179347)
-> 17 A2 40 21 23 FC 12 70 00 41 01 (l:11)(179598)
-> 18 A2 40 21 23 FC 12 70 00 41 01 (l:11)(179849)
-> 19 A2 40 21 23 FC 12 70 00 41 01 (l:11)(180100)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: martinp876 schrieb am Mi, 07 August 2013 22:341) Seriennummer: Jedes HM device hat eine 10-stellige Seriennummer
  Bedeutung: für den Betrieb unwichtig.
  Kann man eine Solche Nummer aus dem Device ableiten?
  Vorgabe für den Test "PS00000001" = 50533030303030303031
  Offen: wie soll die Nummer generiert werden? Fixer Wert?

Vorschlag: wir binden die TrueRandom Library mit ein (vermutlich gibt es im Laufe der Entwicklung und Anwendungsszenarien noch andere Stellen, an denen echte Zufallszahlen gebraucht werden) und lassen uns daraus einmalig eine Seriennummer generieren, die ins EEPROM kommt. Falls beim Starten der Hardware im EEPROM eine S/N gefunden wird, wird sie verwendet.

Ich könnte mir durchaus auch vorstellen, diese Initialisierung, auch mit den anderen Werten wie HMID FW usw. in einen eigenen Sketch auszulagern, das dies ja nur ein einziges Mal gebraucht wird.

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

justme1968

wenn der platz im sketch nicht reicht das erzeugen dieser serien nummern im standard sketch mit unter zu bringen würde ich es komplett ausserhalb machen (z.b. in fhem) und mit einem speziellen init kommando übertragen. extra einen sketch drauf zu brennen um die werte zu erzeugen ist eher unpraktisch und sollte nur der ausweg sein wenn noch nicht mal mehr platz für das empfangen und speichern ist.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

auch eine Idee, dann könnte man die gesamte Grundkonfiguration auslagern. Warten wir mal ab, ob am Ende der Entwicklung noch Platz im Sketch bleibt.


sub createHmFields(){
use UUID::Tiny;
my $hmUuid = uc(create_UUID_as_string());
$hmUuid =~ s/-//g;
return(substr($hmUuid,0,8)."/".substr($hmUuid,length($hmUuid)-6,6));
}


könnte z.B. eine 8-stellige Seriennummer und eine 6-stellige HMID liefern.

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

trilu

Macht euch doch wegen der Seriennummer keinen Kopf. Im Moment ist sie als Variable im Flash und kann vor dem kompileren geändert werden.
Wie wir das später lösen können wir ja dann immer noch überlegen.
Die HMID und Seriennummer könnte man auch über die serielle Konsole setzen. Hat dann aber den Nachteil das sie ins eeprom muss und lt. Martin ist der Eeprom mehr als knapp.
Mit dem Pairing bin ich auch einen guten Schritt weiter. Muss nur noch die Zentrale ID irgendwo merken und dann sollte Pairing klappen.

@betateilchen - danke noch einmal für den Hinweis mit den Messagetypen, die Auflistung ist Gold Wert.
Was ich noch nicht verstanden habe ist das Register Handling...

betateilchen

Zitat von: trilu schrieb am Mo, 12 August 2013 20:03Macht euch doch wegen der Seriennummer keinen Kopf.

Tu ich nicht. Ich kam da nur drauf, weil ich heute zufällig dienstlich mit einem ähnlichen Thema zu tun hatte.
 
Bestimmte Geräteparameter werden immer ins EEPROM müssen, dazu zähle ich die S/N, die HMID und die anderen schon von Martin hier genannten Werte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

trilu

#111
so, mal wieder was zum testen - pairing funzt soweit, speichert nur noch nichts...
ACK handling für gesendete strings sollte funktionieren. strings ohne ack request werden nur einmal gesendet,
strings mit ack request werden 3 x gesendet ausser es kommt ein ack zurück...

send routine umgebaut, so dass sie einen fortlaufenden message zähler benutzt...
ack handling für empfangene strings im config mode (also pairing ) funzt auch

viel spass beim testen


betateilchen

pairing von Arduino an fhem oder pairing von HM-Komponenten mit dem Arduino?

edit: ok - Frage gestrichen *g*


<- 00 84 00 FF 00 01 00 00 00 0A 80 02 50 53 30 30 30 30 30 30 30 31 9F 04 01 01 (l:26) <- SE (57093)
-> 13 A0 01 12 70 00 FF 00 01 00 05 00 00 00 00 00 (l:16)(57266)
start config mode
<- 13 80 02 FF 00 01 12 70 00 00 (l:10) <- SE (57394)
-> 14 A0 01 12 70 00 FF 00 01 00 08 02 01 0A 12 0B 70 0C 00 (l:19)(57696)
config write index, channel: 02,01
needs to be written
<- 14 80 02 FF 00 01 12 70 00 00 (l:10) <- SE (57714)
-> 15 A0 01 12 70 00 FF 00 01 00 06 (l:11)(58012)
config end
<- 15 80 02 FF 00 01 12 70 00 00 (l:10) <- SE (58018)
-> NA (58319)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Auch das mit den Registern hat Martin hier im Thread schon recht verständlich erklärt:

Link


D) Lesen von Registern durch die Zentrale
Register lesen darf nur die eingetragene Zentrale.
Es wird IMMER eine komplette Registerbank gelesen. Einzelne Register können nicht gelesen werden.
Message zu Lesen:
<no>A001<src><dst><chan>04<peer><list>
no: Message counter
src,dst: Source und Destination HM ID. Jeweils 3 Byte in Uppercase HEX, also je 6 Byte Ascii
chan: Nummer des Kanals, der gelesen werden soll
peer: PeerID ist 4 Byte lang: 3 Byte HMId des peers plus 1 Byte des Peer Channels
list: Nummer der zu lesenden Liste
Beispiele
nn A001 1743BF 1A0A02 00 04 00000000 00 # lesen List0: channel, peer und list ist "0"
nn A001 1743BF 1A0A02 01 04 00000000 01 # lesen List1 den Channel 1: peer ist "0"
nn A001 1743BF 1A0A02 05 04 00000000 01 # lesen List1 den Channel 5: peer ist "0"
nn A001 1743BF 1A0A02 02 04 12345604 03 # lesen List3 den Channel 2: peer ist 123456, chan 04
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

trilu

@betateilchen

In deinem Log ist ein -> NA (58319)
Kann es sein, dass du FHEM nicht im pairing mode hattest?

Du scheinst den Thread ja auswendig zu kennen :-)
Aber in diesem Fall hilft das nicht ganz so viel - ich würde zuerst gerne die Struktur von Channels und Registern verstehen.
Welche Funktion braucht ein Register, was ist der Inhalt von Registern. Oder muss ich die Adressierung der Zentrale verwenden?
Was muss in den Channels abgelegt werden, usw.

Dirk

Hi trillu,

hast du schon mal in die XML-Files der CCU geschaut?
Hier sind die Register für jedes Device spezifiziert.
Obwohl ich hier auch noch nicht alles verstehe, kann man das hier glaube ich ganz gut die Registerzuordnung herrauslesen.

Gruß
Dirk

trilu

nein, habe ich nicht, wo finde ich die?

Kannst du die irgendwo hoch laden?

betateilchen

Zitat von: trilu schrieb am Mo, 12 August 2013 21:02In deinem Log ist ein -> NA (58319)
Kann es sein, dass du FHEM nicht im pairing mode hattest?

fhem war in pairforseconds 300 und hat gelauert...

Zitat von: trilu schrieb am Mo, 12 August 2013 21:02Aber in diesem Fall hilft das nicht ganz so viel - ich würde zuerst gerne die Struktur von Channels und Registern verstehen.
Welche Funktion braucht ein Register, was ist der Inhalt von Registern.

Ich versuchs mal mit meinen Worten zu erklären (kennst Du eigentlich das Homematic Grundlagendokument von Martin schon - da steht vieles drin)

Jedes Homematic Gerät besteht aus einem "device" und mindestens einem "Channel"

Beispiel: Fernbedienung mit HMID 123456

Channel0 hat die ID 12345600
Channel1 hat die ID 12345601
...
Channel4 hat die ID 12345604

Die Channel braucht man, um irgendwas mit dem HM-Gerät machen zu können. Der Channel1 der Fernbedienung entspricht dem Button1 Und nur Channel können gepeert werden, also der Button1 der Fernbedienung wird mit dem Channel1 eines Schalters gepeert. Das funktioniert über peerChan.

Für das Device gibt es eine List0 - dort steht zB. das Pairing zwischen HM-Gerät und Zentrale drin.

Für jeden Channel gibt es (zumindest) eine List1


Ich hoffe, ich hab nicht zuviel Unsinn erzählt, und es ist auch bei weitem noch nicht vollständig. Aber das ist das Wichtigste, um vielleicht das Prinzip zu durchschauen.


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

betateilchen

Zitat von: trilu schrieb am Mo, 12 August 2013 21:15nein, habe ich nicht, wo finde ich die?

Kannst du die irgendwo hoch laden?

bei eq3 in den Downloads vermutlich. Bisschen was solltest Du schon selbst machen ;)


-----

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

Dirk

Hier z.B. http://www.eq-3.de/Downloads/Software/HM-CCU1-Firmware_Updates/1.509/hm-ccu-1509.zip
Darin das *.img in *.tgz umbenennen und entpacken.
Wieder darin das root_fs.tar.gz entpacken.
Die Files sind dann unter /firmware/rftypes

Gruß
Dirk