Arduino Asksin library

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

Vorheriges Thema - Nächstes Thema

mmatt

Zitat von: PeterS am 16 November 2013, 21:11:18
Hallo trilu

Das letze #endif in der AskSin.h führt zu einem Compilingfehler.

Gruss Peter

Kann ich bestätigen, einfach auskommentieren ?

Gruss Martin
- 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

mmatt

#331
Hallo

Für meine Anwendung breuchte ich einen stromsparenden Batterie Betrieb.
Dazu möchte ich mal den Mode 1 (Burst mode ) über "setPowerMode(1)" der Lib testen.

Ich nehme an (da wir ja ein Dimmer device haben) wird bei einem Kommando ab fhem (zb. "on", "off") der Burst nicht gesendet.
Wenn ich das richtig verstanden habe, sendet fhem den Burst erst, wenn es sich um einen Batterie betriebenen Aktor handelt.

Stimmen meine Überlegungen ?
Falls ja, wie kann ich fhem sagen dass der Burst bei einem Kommando gesendet werden soll ?

Grüsse Martin

@Rohan
Das Wiki ist wirklich Klasse  :D
- 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

trilu

Im Moment hab ich da erst ein paar Versuche in der Lib. Aber ich kann dir beschreiben was ich vorhabe  ;D
Es wird wohl drei Modes geben.
Mode 0 - keine power saving
Mode 1 - Interessant für batteriebetriebene Aktuatoren. Das Funkmodul prüft alle 250 ms ob ein burst signal irgendwo gesendet wird.
Ist keins da, schläft das Funkmodul wieder weiter. Stromaufnahme einige uA.
Findet es ein Burstsignal bleibt es für ein paar Millisekunden wach und wartet auf einen String der die eigene HMID enthält. Kommt eine andere HMID wird wieder geschlafen. Wird die eigene HMID gefunden, dann wird etwas länger wach geblieben.
Mode 2 - Interessant für batteriebetriebene Schalter und Aktoren. Hier ist der RX Mode per default aus. Es gibt eine stayAwake Funktion um den RX Mode für einen definierten Zeitraum einzuschalten. Z.b. um die Konfigurationstaste zu realisieren. Taste wird gedrückt, Funkmodul geht in den RX mode für 20 Sekunden und man kann per FHEM das Gerät konfigurieren oder Peeren. Zusätzlich wird der RX mode für 500 ms nach dem Senden eines Strings eingeschaltet um z.b. einen ACK empfangen zu können. Das ist der sparsamste Modus. Hier braucht das Funkmodul die meisste Zeit nur ein paar uA.

Aber wje gesagt, das ist so noch nicht implementiert. Ich kämpfe zur Zeit wieder mit dem Registerhandling. Hab einen dicken Bug gefunden, der die pairing Probleme von PeterS erklären würde.
Der nächste test sketch wird ein 6 Tasten Schalter. Ich will das List4 Handling einbauen und testen. Zusätzlich eignet er sich um Powermode 2 zu testen.
Viele Grüsse
Horst

PeterS

Hallo trilu
Ich stehe für Tests bereit, wenn es einen neuen Sketch gibt ;D

Gruss Peter

mmatt

Vielen Dank für die Beschreibung, der Power Modes.
Klingt vielversprechend :-)

Grüsse Martin
- 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

trilu

Es gibt mal wieder etwas neues zum testen...

Ich habe den sketch umgebaut als Switch, genauer gesagt emuliere ich einen HM-PB-6-WM55.
Es sind einige Änderungen in der Library zum Thema Pairing und reset. Alles weitere steht im Changelog.

Die Steuerung des Schalters läuft komplett über die serielle Konsole.
Der Schalter hat 6 Channel, gesendet wird ein Tastendruck mit dem Befehl

1 0 b

Die 1 steht für den Channel - es geht also 1 bis 6. Die 0 zeigt an das es ein kurzer Tastendruck war, eine 1 würde einen langen tastendruck anzeigen. Ihr könnt den Schalter wie den echten Schalter konfigurieren, es geht auch burst zu senden.

Neu ist in der register.h die Funktion: mainSettings()
Hier könnt ihr Variablen setzen, die wenn "#define firstLoad;" existiert, in das eeprom übernommen werden.
Der Nachteil ist, es werden bei jedem Reset die konfigurierten Werte im EEprom mit den default Werten überschrieben.
Am besten ist, ihr ladet das Programm beim ersten mal mit definierten firstLoad auf den Arduino, dadurch werden die Werte ins EEprom geschrieben. Überprüfen könnt ihr das mit einem "e" in der seriellen Konsole. Dann kommentiert ihr firstLoad aus und ladet das Programm
erneut auf den Arduino. Die EEprom Werte bleiben jetzt erhalten...

Der Schalter lässt sich auch schön mit der HomeMatic Konfigurationssoftware beschreiben. Leider ist aber bei der Software per default die AES Kommunikation an. d.h. pairen funktioniert, aber dann müsst ihr für jeden Channel auf Standard Kommunikation umstellen.

Mit den power modes hab ich ein wenig angefangen, ist aber noch weit entfernt von funktioniert...

trilu

hat einer von euch eine idee wie AES funktioniert?
es fuxt mich schon sehr, das ich nicht weiss, was in dem string steckt, wie verschlüsselt wird und wie eine antwort generiert wird...

oder hat schon mal jemand versucht ein original hm device auszulesen? oder hat jemand vielleicht ein update file?

Samsi

Zitathat einer von euch eine idee wie AES funktioniert?

Eine Idee hätte ich schon, ob es so gemacht wird, weiss ich nicht.

Nehmen wir mal an der AES Key wäre 1111112222222333333334444444.

Wenn ich jetzt einen Befehl an den Aktor senden würde, z.B. set lampe 100% dann kommt da ja irgend eine Message raus die man per Funk an einen Empfänger schickt z.B.  AABBCC an AACCDD01

Wenn der Empfänger jetzt sicher sein soll, das die Message nicht manipuliert ist, würde ich folgendes machen. Ich shcike die Message, also
AABBCC AACCDD01 und danach z.B. die Message noch mal mit dem AES Key durch nen MD5 also so:

MD5(AABBCCAACCDD011111112222222333333334444444) = 7a42db7cc9e13adfdd16f411724f43c5

Dann schicke ich als Funknachricht:

AABBCC 7a42db7cc9e13adfdd16f411724f43c5  an device AACCDD01. Das Device kann die Nachricht ja im Klartext lesen, also es empfängt

AABBCC hängt seine device ID  AACCDD01 hintendran und den Key AABBCCAACCDD011111112222222333333334444444 und macht daraus genaus den MD5  und vergleicht es mit dem empfangenen 7a42db7cc9e13adfdd16f411724f43c5. Wenn der Vergleich stimmt, wurde die Nachricht mit dem selben AES key signiert und es kann ein ACK senden.

Problem dabei, der MD5 ist unterschiedlich, je nachdem ob ich MD5(AABBCCAACCDD011111112222222333333334444444) oder MD5(AACCDD01AABBCC1111112222222333333334444444) mache. Es sind also etliche Kombinationen denkbar. Außerdem könnte es auch sein das sie nicht MD5 nehmen sondern etwas anderes. Wenn dann vielleicht noch andere Komponenten einfließen, z.B. das bei der MD5 erstellung noch eine 'geheime' zeichenkette verwendet wird also z.B.  MD5(geheimAACCDD01AABBCC1111112222222333333334444444) dann wird man das kaum lösen können.



Viele Grüße




FHEM 5.5 / BBB Debian Wheezy

Homematic CFG-LAN

HM-Sec-MDIR / HM-Sec-SD / HM-Sec-WDS / HM-LC-Sw2-FM / HM-Sec-SC / HM-LC-Sw1PBU-FM / HM-SCI-3-FM / HM-Sec-Key / HM-RC-Key3-B / HM-LC-Dim1TPBU-FM /  HM-CC-RT-DN / HM-PBI-4-FM / HM-RC-Key4-2 / HM-ES-PMSw1-Pl / HM-LC-Sw4-WM

Dirk

Hallo trilu,

mgernoth hatte hier mit der Analyse schon mal begonnen:
http://forum.fhem.de/index.php/topic,14926.msg96151.html#msg96151

Vieleicht ist das ein Einstieg.

Gruß
Dirk

PeterS

Hallo trilu

Der Reset-Befehl "r" funktioniert nun bei mir.
reset device, clear eeprom...
reset done

Pairing wird durchgeführt und Fhem erkennt den 6-fach Switch, allerdings stet weiterhin bei Paired: 63 19 63 ?!
Den Schalter-Kanal kann ich genau 1 mal schalten, dann erkennt fhem nichts mehr.
Wie deaktivere bei FHEM die AES-Option/Parameter pro Kanal?

Gruss Peter

trilu

Hast du firstload mal auskommentiert?
In register.h ist eine funktion mit der du default-parameter setzen kannst. Schreib statt meiner master Id deine rein und es funktioniert. Aes dürfte fuer den ersten kanal gesetzt sein. Ebenfalls in der mainconfig in register.h. also default richtig setzen, oder firstload auskommentieren  8)

PeterS

Hallo trilu

Die pairCentral-ID habe ich nun in der register.h umgeschossen und nun wird diese auch angezeigt.
Allerdings frage ich mich nach der Funktion des Befehls "p", wenn man die ID manuell konfiguriert bzw exportiert.
Sollten hier nicht normalerweise das pairing durchgeführt und die Gerätedaten übertragen werden ?

Mit dem Schalter kann ich einmal via "1 0 b" Fhem schalten, dann werden wieder keine Eingangssignale (Wettersensoren, etc.) empfangen ?!

Welcher Wert steckt in den Klammernwerten ?
<- sendStr (247201)

Gruss Peter

trilu

Hi Peter,
schalte doch einfach firstLoad aus. Einfach zwei Schrägstriche davor setzen. Ich habe das zum testen eingebaut, so dass ich nicht immer erst peeren muss.
Die Tests die du machst verändern ja nicht die Eepromreihenfolge.
Wenn du p drückst, müsstest du doch in der seriellen Konsole sehen ob du Antworten auf deinen pairing request bekommst?
-> sind empangene Messages für dein Device
<- sind vom Device gesendete Messages
l> sind Log Messages, die nichts mit deinem Device zu tun haben.

Der Wert in den Klammern ist die Systemzeit. Nach jedem Boot des Arduinos startet der millis() timer mit 0 und zählt die Millisekunden mit. Damit kann man das Timing der Strings prüfen. Also z.b. wie lange es dauert bis eine Antwort auf einen Request gesendet wird.

Wenn du 1 0 b sendest, solltest du ein peer eingetragen haben. Drück mal t und poste die config...
Viele Grüsse
Horst

PeterS

Hallo trilu
firstload hatte ich bereits auskommentiert.

1 0 b -> 6 0 b bzw. 1 1 b  6 1 b führt zu folgendem Peer-Ergebnis:

Peer Database, size: 144 byte
cnl   pIdx   slcPtr   slcEnd   phyAddr   phyLen   list   peer
1   0   5   1   9   1   4   22 66 08 01
1   1   6   1   10   1   4   00 00 00 00
1   2   7   1   11   1   4   00 00 00 00
1   3   8   1   12   1   4   00 00 00 00
1   4   9   1   13   1   4   00 00 00 00
1   5   10   1   14   1   4   00 00 00 00
2   0   13   1   18   1   4   22 66 08 02
2   1   14   1   19   1   4   00 00 00 00
2   2   15   1   20   1   4   00 00 00 00
2   3   16   1   21   1   4   00 00 00 00
2   4   17   1   22   1   4   00 00 00 00
2   5   18   1   23   1   4   00 00 00 00
3   0   21   1   27   1   4   00 00 00 00
3   1   22   1   28   1   4   00 00 00 00
3   2   23   1   29   1   4   00 00 00 00
3   3   24   1   30   1   4   00 00 00 00
3   4   25   1   31   1   4   00 00 00 00
3   5   26   1   32   1   4   00 00 00 00
4   0   29   1   36   1   4   00 00 00 00
4   1   30   1   37   1   4   00 00 00 00
4   2   31   1   38   1   4   00 00 00 00
4   3   32   1   39   1   4   00 00 00 00
4   4   33   1   40   1   4   00 00 00 00
4   5   34   1   41   1   4   00 00 00 00
5   0   37   1   45   1   4   00 00 00 00
5   1   38   1   46   1   4   00 00 00 00
5   2   39   1   47   1   4   00 00 00 00
5   3   40   1   48   1   4   00 00 00 00
5   4   41   1   49   1   4   00 00 00 00
5   5   42   1   50   1   4   00 00 00 00
6   0   45   1   54   1   4   00 00 00 00
6   1   46   1   55   1   4   00 00 00 00
6   2   47   1   56   1   4   00 00 00 00
6   3   48   1   57   1   4   00 00 00 00
6   4   49   1   58   1   4   00 00 00 00
6   5   50   1   59   1   4   00 00 00 00

Gruss Peter

trilu

hi peter,

danke. du hast zwei peers eingetragen. peer1 ist 22 06 08 01
und peer2 ist 22 06 08 02. das sind beides meine default peers zum testen.
ein 1 o b sendet einen peer string an 22 06 08 an channel 1.
ein 2 o b sendet einen peer string an 22 06 08 an channel 2.

ein 3 0 b wird keinen output liefern, da kein peer eingetragen ist.

viele grüße
horst