Arduino Asksin library

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

Vorheriges Thema - Nächstes Thema

betateilchen

Zitat von: martinp876 schrieb am Sa, 10 August 2013 18:22die temperatur ist 2Byte und Faktor 10.

Hallo Martin, wo kommt das zweite Byte her? In den Messages sehe ich nur ein Byte für die Temperatur und eines für die Feuchtigkeit.

Viele Grüße (und schönen Urlaub, wenn das die zwei Wochen sind)
Udo
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dirk

Hallo,

ich habe mal einen Empfindlichkeitsverleich gemacht. Mit einem TRX01 und dem oben genannten China-Tranceiver.

TRX01 kommt am Testort (im Nachbarzimmer) auf etwa -50db,
Das China-Modul auf etwa -70db.
Wie erwartet schneided das schlechter ab, da dort die Antennenanpassung für 433Mhz vorgesehen ist.

Ich denke für ca. 4,30€ pro Modul kann man damit aber trotzdem was anfangen.

Die Module waren zum testen abwechselnd an einem HM-LC-SW1-BA-PCB angeschlossen.

Gruß
Dirk

betateilchen

Zitat von: trilu schrieb am Sa, 10 August 2013 20:38ich bin gerade dabei die Sende und Empfangsroutine zu durchdenken.

Hast Du Dir schon Gedanken über den Decodierfehler gemacht oder hängt das auch mit dem durchdenken zusammen?

VIele Grüße
Udo
-----------------------
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: Dirk schrieb am So, 11 August 2013 00:11Das China-Modul auf etwa -70db.
Wie erwartet schneided das schlechter ab, da dort die Antennenanpassung für 433Mhz vorgesehen ist.

Ich denke für ca. 4,30€ pro Modul kann man damit aber trotzdem was anfangen.

Reichweitenkrücken hab ich schon genügend hier - für mich kommt so eine (schlechte) Kompromißlösung nicht in Frage, egal wie billig sie wäre.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

martinp876

ZitatGäbe es ein "Messagetype" den man z.B. den Luftdruck benutzen kann bzw. für andere eigene Werte?
das liegt nicht am messagetype. Ein messagetype ist nicht ein-eindeutig, hängt immer auch nicht vom Device/mode/channel ab (oder könnte)
Die best passenden Message aktuell ist wohl
<nn><ff>53<ssssss><dddddd>00<c1><v1v1><c2><v2v2>
C1:v1v1 - ChannelNo mit einem Wert(2 Byte)
C2:v2v2 - ChannelNo mit einem Wert(2 Byte)

Die Auswertung ist an Model/channel gebunden. Für Panstamp können/sollen wir ein flexibles format vorsehen.
Das Format des Werts liegt nicht am messagetype
Das obige Format muss ich noch komplettieren!

Zitatwo kommt das zweite Byte her?
$0C $00 $86 $70 $FF $00 $01 $00 $00 $00 $00 $E0 $3B
--------ff   mt ---src----- ----dst---- -temp-- hum

da sind sie dich

ZitatKannst du mir bitte die möglichen Messagetypes spezifizieren?

schwierig, hätte ich auch gerne. Eine message wird nicht nur durch messageType sondern auch durch subtype spezifiziert.

Schau einmal ans Ende von HMConfig, das gibt einen Überblick. Da es aber nicht operativ genutzt muss nicht alles 100% stimmen.

Dirk

[quote title=betateilchen schrieb am So, 11 August 2013 01:11]
ZitatReichweitenkrücken hab ich schon genügend hier - für mich kommt so eine (schlechte) Kompromißlösung nicht in Frage, egal wie billig sie wäre.
Jetzt währ es nur noch interessant wie das Panstamp hier im Vergleich abschneidet. Nicht das das auch eine "Reichweitenkrücken" wird :)

[quote title=martinp876 schrieb am So, 11 August 2013 08:39]
Zitatdas liegt nicht am messagetype. Ein messagetype ist nicht ein-eindeutig, hängt immer auch nicht vom Device/mode/channel ab
Obwohl. der Messagetype sollte sollte doch eigentlich egal sein.
Das Format der Payload wird z.B. bei der CCU doch über die XML-Files definiert.
Hier sollten wir doch also für jedes eigene spezielle Gerät einen eigenen gültigen Messagetype definieren können.
Mit einer entsprechenden XML-Datei währen solche Module dann ggf. auch für reine CCU Benutzer interessant und zu benutzen. Oder übersehe ich hier was?

Gruß
Dirk

martinp876

Zitatder Messagetype sollte sollte doch eigentlich egal sein.
Das Format der Payload wird z.B. bei der CCU doch über die XML-Files definiert.
Hier sollten wir doch also für jedes eigene spezielle Gerät einen eigenen gültigen Messagetype definieren können.
Mit einer entsprechenden XML-Datei währen solche Module dann ggf. auch für reine CCU Benutzer interessant und zu benutzen.

HM nutzt messagetypes in der gleichen Form, oft identisch. Anzufangen messages von der grünen Wiese zu definieren werde ich nicht machen. Es gibt einige allgemeine Auswertungen - und die sollten mehr, nicht weniger werden.
Möglich, dass wie eine neue message addieren, wenn notwendig. Bis dahin müssen erst die Standards implementiert werden: Register/Peering...

HM macht das auch nicht für jeden messagetype separat.

Ich werden kein XML file für eine CCU schreiben - da fehlen mir zu viele Infos. Selbstverständlich kann es jemand probieren. In den XML files die ich kenne fehlen etliche Infos - oder sind in einer Form kodiert die ich nicht blicke.

@betateilchen
im Anhang ein file, das die Werte auf die Channels verteilen soll (message 53 siehe oben)

Gruss Martin

Nachtrag:ACHTUNG: die erste Datei hatte einen Fehler. Diese sollte besser sein


trilu

Hi Martin,

vielleicht habe ich mich falsch ausgedrückt mit dem MessageType.
Ich brauche irgendwas mit dem ich die Messages, die ich empfange, unterscheiden kann und in die entsprechenden Routinen zur Beantwortung oder Aktion verzweigen kann.
Nehmen wir als Beispiel das Pairing:
Ich sende einen Pairing Request raus, der wird mit einer Message vom Master beantwortet. Wie sehe ich in der Antwort was das für eine Message ist?

Oder, der Master schickt mir eine Message zum Abfragen der Register - an was erkenne ich, dass es ein Request der Register ist?
Das was mir in den Log's bisher aufgefallen ist, Byte 2 & 3 sind die interessanten:

l> AF A2 00 1F A6 5C 63 19 63 11 00 A9 4B 45 51 30 33 31 38 38 31 30 40 06 00 A2 (l:26)(12255)
A2: Message, ACK required, Message to Master
00: Pairing request
l> AF 80 02 63 19 63 1F A6 5C 91 (l:10)(12363)
80: Message
02: ACK in pairing?
l> 32 A0 01 63 19 63 1F A6 5C 00 05 00 00 00 00 90 (l:16)(13832)
A0: Message, ACK required
01: Config, send details?
l> 32 80 02 1F A6 5C 63 19 63 80 (l:10)(13950)
80: Message
02: ACK in pairing?


Falls ich völlig daneben liege ist es auch ok, aber du verstehst mein Problem? Ich brauche im Moment eine Idee wie ich die verschiedenen Nachrichten automatisiert in Routinen verzweigen kann...

Viele Grüße
Horst

betateilchen

Zitat von: trilu schrieb am So, 11 August 2013 10:23Ich brauche im Moment eine Idee wie ich die verschiedenen Nachrichten automatisiert in Routinen verzweigen kann...

Hallo Horst,

das sollte nicht allzu schwierig werden. Aber hast Du das Deocdierproblem bei eingehenden Messages inzwischen gelöst?

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

trilu

mir war nicht bewusst das ich ein decodier problem habe :-)
habs aber eben gesehen an was es lag, eindeutig ein dummer kleiner fehler im kopieren der daten
modul asksin.cpp, routine uint8_t cc1100_recvDone() {   

memcpy(&recv_buf, cc1100_buf, cc1100_buf[0]);

gehört geändert nach
memcpy(&recv_buf, cc1100_buf, cc1100_buf[0]+1);

falls ihr so fehler findet wäre es klasse wenn ihr ein genaues fehlerbild und etwas zum testen mit posten könntet.
ich bin in fhem in keinster weise fit!

betateilchen

Zitat von: trilu schrieb am So, 11 August 2013 12:15falls ihr so fehler findet wäre es klasse wenn ihr ein genaues fehlerbild und etwas zum testen mit posten könntet.
ich bin in fhem in keinster weise fit!

Nur am Rande bemerkt: Ich hatte hier im Thread schon dreimal auf das Problem hingewiesen und das Problem auch am Freitagabend mit Beispielen belegt (http://www.tierkommunikation-forum.com/images/smilies/zwinker.gif)

Ich hatte auch schon versucht, den Fehler zu finden, aber ich habe an der falschen Stelle gesucht (direkt in der decoding-Routine)

Rückmeldung: Das Dekodieren funktioniert nach der Änderung jetzt korrekt. Die Messages von HMLAN und Arduino sind identisch
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

trilu

das ist schön - aber ich brauche immer noch die message typen :-)

betateilchen

Und ich wünsche mir einen 6-kanaligen HM-Gerätetyp, mit dem man einfach die Werte der sechs vorhandenen AD-Wandler an fhem übertragen kann. Das könnte nämlich schon völlig problemlos mit dem aktuellen Softwarestand funktionieren, wenn man die Message einfach an broadcast schickt. Man muss ja nicht alles pairen, wenn man einfach nur ein paar Messwerte haben möchte.  *lach*

Natürlich muss das Protokoll möglichst komplett implementiert werden. Hauptproblem dabei dürfte wohl sein, dass vieles "trial and error" sein könnte.

Aber ich freue mich auch schon über Teilerfolge.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Hallo Horst,

Zitat von: trilu schrieb am So, 11 August 2013 17:35das ist schön - aber ich brauche immer noch die message typen :-)

Vielleicht solltest Du einfach auch mal die Antworten lesen, die Dir hier im Thread gegeben werden, bevor Du immer wieder die gleichen Fragen stellst *lach*

Zitat von: martinp876 schrieb am So, 11 August 2013 08:39schwierig, hätte ich auch gerne. Eine message wird nicht nur durch messageType sondern auch durch subtype spezifiziert.

Schau einmal ans Ende von HMConfig, das gibt einen Überblick. Da es aber nicht operativ genutzt muss nicht alles 100% stimmen.

Und "am Ende von HMConfig" steht:

my %culHmBits = (
  "00"          => { txt => "DEVICE_INFO",  params => {
                     FIRMWARE       => '00,2',
                     TYPE           => "02,4",
                     SERIALNO       => '06,20,$val=pack("H*",$val)',
                     CLASS          => "26,2",
                     PEER_CHANNEL_A => "28,2",
                     PEER_CHANNEL_B => "30,2",
                     UNKNOWN        => "32,2", }},

  "01;p11=01"   => { txt => "CONFIG_PEER_ADD", params => {
                     CHANNEL        => "00,2",
                     PEER_ADDRESS   => "04,6",
                     PEER_CHANNEL_A => "10,2",
                     PEER_CHANNEL_B => "12,2", }},
  "01;p11=02"   => { txt => "CONFIG_PEER_REMOVE", params => {
                     CHANNEL        => "00,2",
                     PEER_ADDRESS   => '04,6,$val=CUL_HM_id2Name($val)',
                     PEER_CHANNEL_A => "10,2",
                     PEER_CHANNEL_B => "12,2", } },
  "01;p11=03"   => { txt => "CONFIG_PEER_LIST_REQ", params => {
                     CHANNEL => "0,2", },},
  "01;p11=04"   => { txt => "CONFIG_PARAM_REQ", params => {
                     CHANNEL        => "00,2",
                     PEER_ADDRESS   => "04,6",
                     PEER_CHANNEL   => "10,2",
                     PARAM_LIST     => "12,2", },},
  "01;p11=05"   => { txt => "CONFIG_START", params => {
                     CHANNEL        => "00,2",
                     PEER_ADDRESS   => "04,6",
                     PEER_CHANNEL   => "10,2",
                     PARAM_LIST     => "12,2", } },
  "01;p11=06"   => { txt => "CONFIG_END", params => {
                     CHANNEL => "0,2", } },
  "01;p11=08"   => { txt => "CONFIG_WRITE_INDEX", params => {
                     CHANNEL => "0,2",
                     DATA => '4,,$val =~ s/(..)(..)/ $1:$2/g', } },
  "01;p11=09"   => { txt => "CONFIG_SERIAL_REQ", params => { } },
  "01;p11=0A"   => { txt => "PAIR_SERIAL", params => {
                     SERIALNO       => '04,,$val=pack("H*",$val)', } },
  "01;p11=0E"   => { txt => "CONFIG_STATUS_REQUEST", params => {
                     CHANNEL => "0,2", } },

  "02;p01=00"   => { txt => "ACK"},
  "02;p01=01"   => { txt => "ACK_STATUS",  params => {
                     CHANNEL        => "02,2",
                     STATUS         => "04,2",
                     DOWN           => '06,02,$val=(hex($val)&0x20)?1:0',
                     UP             => '06,02,$val=(hex($val)&0x10)?1:0',
                     LOWBAT         => '06,02,$val=(hex($val)&0x80)?1:0',
                     RSSI           => '08,02,$val=(-1)*(hex($val))', }},
  "02;p01=02"   => { txt => "ACK2"}, # smokeDetector pairing only?
  "02;p01=04"   => { txt => "ACK-proc",  params => {# connected to AES??
                     Para1          => "02,4",
                     Para2          => "06,4",
                     Para3          => "10,4",
                     Para4          => "14,2",}}, # remote?
  "02;p01=80"   => { txt => "NACK"},
  "02;p01=84"   => { txt => "NACK_TARGET_INVALID"},
  "02"          => { txt => "ACK/NACK_UNKNOWN   "},
 
  "02"          => { txt => "Request AES", params => {  #todo check data
                     DATA =>  "0," } },

  "03"          => { txt => "AES reply",   params => { # send 'old' AES key to actor
                     DATA =>  "0," } },

  "04;p01=01"   => { txt => "To-HMLan:send AES code",   params => { # FHEM req HMLAN to send AES key to aktor ??
                     CHANNEL => "00,2",
TYPE    => "02,2" } },                         #00: old key? 01: new key?
  "04"          => { txt => "To-Actor:send AES key" ,   params => { # HMLAN sends AES key to actor ??
                     CODE    => "00" } },

  "10;p01=00"   => { txt => "INFO_SERIAL", params => {
                     SERIALNO => '02,20,$val=pack("H*",$val)'},},
  "10;p01=01"   => { txt => "INFO_PEER_LIST", params => {
                     PEER1 => '02,8,$val=CUL_HM_id2Name($val)',
                     PEER2 => '10,8,$val=CUL_HM_id2Name($val)',
                     PEER3 => '18,8,$val=CUL_HM_id2Name($val)',
                     PEER4 => '26,8,$val=CUL_HM_id2Name($val)'},},
  "10;p01=02"   => { txt => "INFO_PARAM_RESPONSE_PAIRS", params => {
                     DATA => "2,", },},
  "10;p01=03"   => { txt => "INFO_PARAM_RESPONSE_SEQ", params => {
                     OFFSET => "2,2",
                     DATA   => "4,", },},
  "10;p01=04"   => { txt => "INFO_PARAMETER_CHANGE", params => {
                     CHANNEL => "2,2",
                     PEER    => '4,8,$val=CUL_HM_id2Name($val)',
                     PARAM_LIST => "12,2",
                     DATA => '14,,$val =~ s/(..)(..)/ $1:$2/g', } },
  "10;p01=06"   => { txt => "INFO_ACTUATOR_STATUS", params => {
                     CHANNEL => "2,2",
                     STATUS  => '4,2',
                     UNKNOWN => "6,2",
                     RSSI    => '08,02,$val=(-1)*(hex($val))' } },
  "11;p01=02"   => { txt => "SET"         , params => {
                     CHANNEL  => "02,2",
                     VALUE    => "04,2",
                     RAMPTIME => '06,4,$val=CUL_HM_decodeTime16($val)',
                     DURATION => '10,4,$val=CUL_HM_decodeTime16($val)', } },
  "11;p01=03"   => { txt => "STOP_change" , params => {
                     CHANNEL  => "02,2"} },
  "11;p02=0400" => { txt => "RESET" },
  "11;p01=80"   => { txt => "LED"         , params => {
                     CHANNEL  => "02,2",
                     COLOR    => "04,2", } },
  "11;p02=8100" => { txt => "LEDall"      , params => {
                     Led1To16 => '04,8,$val= join(":",sprintf("%b",hex($val))=~ /(.{2})/g)',
} },
  "11;p01=81"   => { txt => "LEVEL"       , params => {
                     CHANNEL  => "02,2",  
                     TIME     => '04,2,$val=hex($val)',
                     SPEED    => '06,2,$val=hex($val)',
} },
  "11;p01=82"   => { txt => "Sleepmode"   , params => {#only LED16?
                     CHANNEL  => "02,2",
                     MODE     => '04,2,$val=hex($val)',
} },
  "12"          => { txt => "HAVE_DATA"},
  "3E"          => { txt => "SWITCH"      , params => {
                     DST      => "00,6",
                     UNKNOWN  => "06,2",
                     CHANNEL  => "08,2",
                     COUNTER  => "10,2", } },
  "3F"          => { txt => "TimeStamp"   , params => {
                     UNKNOWN  => "00,4",
                     TIME     => "04,2", } },
  "40"          => { txt => "REMOTE"      , params => {
                     BUTTON   => '00,2,$val=(hex($val)&0x3F)',
                     LONG     => '00,2,$val=(hex($val)&0x40)?1:0',
                     LOWBAT   => '00,2,$val=(hex($val)&0x80)?1:0',
                     COUNTER  => "02,2", } },
  "41"          => { txt => "Sensor_event", params => {
                     BUTTON   => '00,2,$val=(hex($val)&0x3F)',
                     LONG     => '00,2,$val=(hex($val)&0x40)?1:0',
                     LOWBAT   => '00,2,$val=(hex($val)&0x80)?1:0',
                     VALUE    => '02,2,$val=(hex($val))',
                     NEXT     => '04,2,$val=(hex($val))',} },
  "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))'} },
  "58"          => { txt => "ClimateEvent", params => {
                     CMD      => "00,2",
                     ValvePos => '02,2,$val=(hex($val))', } },
  "70"          => { txt => "WeatherEvent", params => {
                     TEMP     => '00,4,$val=((hex($val)&0x3FFF)/10)*((hex($val)&0x4000)?-1:1)',
                     HUM      => '04,2,$val=(hex($val))', } },
);


das könnte ja durchaus schon weiterhelfen.

Viele Grüße
Udo



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

trilu

jau, das sieht gut aus - vielleicht sollte ich doch öfter mal lesen :-)
danke!