Homematic Wired - Homebrew Devices

Begonnen von Thorsten Pferdekaemper, 27 April 2014, 00:13:17

Vorheriges Thema - Nächstes Thema

Regmus

Ihr seid wirklich der hammer!
Allerdings bekomme ich es leider trotzdem nicht zum laufen.
Habe es jetzt nochmal mit allen 5 neuen Modulen von Markus versucht, aber ich bekomme Sie nicht von FHEM erkannt.
Sind denn die Module alle mit dem Arduino Uno kompatibel? Habe aktuell nur diesen im Einsatz. Habe es direkt mit der HEX und auch mit den source-Dateien versucht.
Bekomme im HM_LAN.log immer crc-Fehler...


2016.05.12 13:41:18.197 3: HM485d: Rx: data -> crc error I[0](1,Y,F)(B0)  -> 33 [2] {3979}
2016.05.12 13:41:19.023 3: HM485d: Rx: data -> crc error I[3](0,Y,F)(96)  -> 59 [49] 21(!) ABDBC829AAC83B3838A0FFFF276B6F4EE152B53EF9F701773C3976E94EDBFF5D71BA7BB3E20530B47B9A2F91BD20 {E436}
2016.05.12 13:41:19.348 3: HM485d: Rx: data -> crc errorACK(0,B)(19)  -> A2 [26] 24($) BCA57D2E6A3F21BABABAB9F130D8A238F5356175B82918 {34EE}
2016.05.12 13:41:19.489 3: HM485d: Rx: data -> crc errorDISCOVERY(8) 00000000 -> A8
2016.05.12 13:41:19.627 3: HM485d: Rx: data -> crc error(2)(C5)  -> B0 [8] B8(�) 39A8F3733A {E9B3}
2016.05.12 13:41:19.777 3: HM485d: Rx: data -> crc error I[0](1)(20)  -> 65 [51] 33(3) 61546548002AC8B1B190E0131AFFE2F230A82D13184FED2C0D58DEC9310A2761FF606456B9A52F30A330AA21CC0AAEAD {8860}
2016.05.12 13:41:19.870 3: HM485d: Rx: data -> crc errorDISCOVERY(9) 00000000 -> 66
2016.05.12 13:41:19.923 3: HM485d: Rx: data -> crc error(1)(37)  -> E8 [41] 77(w) 27F62DC301BA60BDABE820B8AB6EFFEC293B31E8B3723728F3AC6F186C7ADA75FFF4A0EFC133 {38B9}
2016.05.12 13:41:21.115 3: HM485d: Rx:  I[0](3,Y,F,B)(F8) 0008353B -> FFFFFFFF [18] 41(A) 008200030648425730353337393135 {2582}
2016.05.12 13:41:21.116 4: HM485d: Tx: FD1B0065FFFFFFFFF80008353B41008200030648425730353337393135


Kann mir da vielleicht noch jemand helfen? Haben die crc-Fehler überhaupt etwas mit der Erkennung eines neuen Gerätes zu tun? Muss ich den FHEM irgendwie auf eine bestimmte Art und Weise neu starten wenn ich ein neues Modul am Bus angeschlossen habe?
Bin mit meinem "Anfänger-Latein" am Ende... :-/

MarkusO

Hallo,

Es gibt aber Fehler bei der Übertragung der Position.
Die CCU zeigt mir ein Bug-Symbol an oder die angezeigte Position springt nach einer Weile auf einen anderen Wert.

Ich habe leider keine CCU und kann daher das Problem nicht komplett nachvollziehen. Bei meiner FHEM-Zentrale wird die Position allerdings auch nicht immer korrekt angezeigt. Ein Auslesen mit "Get Level" liefert zwar immer korrekte Werte, aber irgendwie werden die Werte, die der Aktor von selbst verschickt (also nicht auf eine Anfrage der Zentrale antwortet), nicht immer als Ist-Werte übernommen.

Habt Ihr mal das Protokoll von einem Originalaktor abgelauscht?
Nicht direkt - ich selbst habe keinen Originalaktor. Habe nur mal ein paar Ausschnitte aus der Kommunikation im Forum gesehen. Falls jemand ein paar gute Logs vom Originalaktor hat, wäre ich aber auch daran interessiert.


UND Wie funktioniert die Referenzfahrt nach Reset des Aktors?
Was muss ich dafür machen?

Die Referenzfahrt wird automatisch bei der ersten Fahrt nach einem Reset ausgeführt - man muss nichts manuell triggern.
Bei der ersten Fahrt nach einem Reset (d.h. wenn die Ist-Position unbekannt ist) steuert der Aktor das Rollo immer für die gesamte programmierte Fahrzeit an, um sicherzustellen, dass wirklich die Endlage erreicht wird. Falls eine Zwischenposition angefordert wird (also nicht 0 oder 100), fährt der Aktor auch erst komplett nach oben und von dort aus in die Zielposition. Falls das Rollo schon in der "oben" Position ist, kann das dazu führen, dass sich das Rollo zunächst nicht bewegt, da der Aktor erst noch die "Oben"-Richtung ansteuert und erst nach dieser Referenzfahrt auf die Zielposition fährt. Also nicht gleich in Panik verfallen, falls der sich das Rollo bei der ersten Ansteuerung nicht sofort bewegt.


Sind denn die Module alle mit dem Arduino Uno kompatibel? Habe aktuell nur diesen im Einsatz. Habe es direkt mit der HEX und auch mit den source-Dateien versucht.

Ja, die Module laufen definitiv auf dem ATMega328P Controller. Für meine Module habe ich eigene Platinen gelötet, nutze aber auch immer wieder Arduino Uno oder Nano zum testen.


Bekomme im HM_LAN.log immer crc-Fehler...
Mit CRC hatte ich noch nie Probleme. Ich würde davon ausgehen, dass die SW korrekt läuft und das Problem irgendwo bei der Busanbindung liegt. Ist der Arduino richtig mit dem RS485-Treiber verbunden? Sind die RS485-Leitungen vielleicht vertauscht? https://arduino-info.wikispaces.com/RS485-Modules

Für die Inbetriebnahme von neuen Modulen nehme ich immer einen weiteren Arduino, der auch ein RS485-Interface hat und einfach nur den Bus mitliest und über die RS232/USB-Schnittstelle ausgibt. Damit kann man dann die Rohdaten auf dem Bus lesen und solche Probleme analysieren. Den Sketch für ein solches Interface hänge ich einfach mal an.


Viele Grüße
Markus

Regmus

#362
Danke für die Tipps Markus - habs jetzt hinbekommen!  :)
Es hilft doch sehr wenn man den "Transmit-Enable"  auch wirklich auf den 4er Pin anschließt... ::)

EDIT: Jetzt weiß ich auch wo meine Verwirrung her kommt... in den Readme-Dateien ist das"RS485 Enable" noch dem Pin 2 zugeordnet. Entscheidend ist aber natürlich das, was im Programm einprogrammiert ist. Das gleiche gilt auch für die restliche Belegung der Kanäle...

StefanGa

Hallo Markus,

wenn Du die Position *512 nimmst, wird sie richtig angezeigt. Zumindest von der CCU.

Beste Grüße

Stefan

maiknms

Zitat von: MarkusO am 20 Januar 2015, 22:17:19
Hallo zusammen,

ich habe mich in letzter Zeit mal wieder mit den Homebrew-Devices beschäftigt und ein paar neue Module zusammen gebaut.

HBW-LC-Sw8: 8fach Relaismodul. Damit können mit einem Arduino und einem einfachen Relaismodul für ca. 6€ acht 230V Kanäle geschaltet werden https://github.com/kc-GitHub/HM485-Lib/tree/markus/HBW-LC-Sw8

HBW-Sen-SC8: 8fach Tastermodul. Ließt acht Eingänge ein. Neben den langen und kurzen Tastendrücke werden auch Doppelklicks erkannt und ein Event geschickt, wenn ein langer Tastendruck wieder losgelassen wird. Hilfreich, wenn z.B. ein Rollo nur so lange fahren soll, wie eine Taste gedrückt ist. https://github.com/kc-GitHub/HM485-Lib/tree/markus/HBW-Sen-SC8

HBW-Sen-KEY: Ließt mit einem RFID-Modul Transponder aus und schickt die ID an die Zentrale. Könnte man z.B. für die Türöffnung verwenden (wenn man der Sicherheit der RFID-Karten vertraut) https://github.com/kc-GitHub/HM485-Lib/tree/markus/HBW-Sen-KEY

HBW-Sen-EP: Wertet die S0-Schnittstelle aus, wie sie z.B. von Strom-, Gas-, Wasserzählern verwendet wird. Die gezählten Impulse werden an die Zentrale geschickt. https://github.com/kc-GitHub/HM485-Lib/tree/markus/HBW-Sen-EP


Was mir jetzt noch fehlt ist ein 230V Mehrfachdimmer (Phasenanschnittsteuerung). Hierfür gibt es im Netz auch einige ganz gute Vorlagen, z.B. hier: http://www.instructables.com/id/Arduino-controlled-light-dimmer-The-circuit/?lang=de
Allerdings würde ich mir gerne den Aufwand sparen, den Dimmer selbst zu entwerfen und würde lieber einen vorhandenen Dimmer über den Arduino an den HM485-Bus anbinden.

Kennst jemand günstige Dimmermodule, die z.B. über DMX oder andere kabelgebundene Protokolle gesteuert werden können?


Viele Grüße
Markus


Hallo Markus,
hast Du die Dimmer schon gesehen?
http://stores.ebay.de/KRIDA-Electronics/AC-Dimmers-/_i.html?_fsub=14851800011
Gruß
Maik

Treibhaus

Moin,

da ich nun einige Zeit hatte mich mit den unterschiedliche Arduino's zu beschäftigen und ein paar Geräte zum Testen nachgebaut habe, ist mir aufgefallen, das die pm-Dateien zu den Geräten im Git-Hub unterschiedlich sind.

z.B funktionieren die von Thorsten. 
Bsp: hbw_sen_sc8.pm    (github - kc-GitHub/HM485-Lib - Branch:Thorsten)

Hingegen funktioniert die hbw_lc_sw8.pm   (github - kc-GitHub/HM485-Lib - Branch:Markus)  bei mir nicht. (diese erreicht man über die Wiki-page.)

Das bedeutet in meinem Fall, daß das neue Gerät nach einem Reset in FHEM erkannt und angelegt wird, ich es aber unter Model nicht auswählen kann - da nicht vorhanden.
Die Ansteuerung per RAW-Befehl funktioniert!
Ich würde mir gerne eine Passende *.pm für ein 8-fach-Relais schreiben/erzeugen. Könnte jemand so freundlich sein und mir erklären wie das am Einfachsten möglich ist ?



PS: flashen von hex-files per Linux (raspberry)
#sudo apt-get install avrdude
Ard. Nano:
#avrdude -v -p atmega328p -c arduino -P /dev/ttyUSB0 -b 57600 -D -U flash:w:file.hex:i
Ard. Uno:
#avrdude -v -p atmega328p -c arduino -P /dev/ttyUSB0 -D -U flash:w:HBW-LC-Sw8.hex:i
(die Endziffer am USB-Device "ttyUSBx" muss ggf. angepasst werden)

Gruß Jörg

Signatur:
Odroid -C2 + BSC EnOcean USB 300-TCM310 + HM485
Enocean-Taster-Fensterkontakt,-Bewegungsmelder
HM-Module über 3 Etagen + Garage/Garten
+ 1-wired Temp-Sensoren, S0-Schnittstellen + RHASSPY-Spracherkennung

Thorsten Pferdekaemper

Hi,
Zitat von: Treibhaus am 19 Mai 2016, 01:11:07Ich würde mir gerne eine Passende *.pm für ein 8-fach-Relais schreiben/erzeugen. Könnte jemand so freundlich sein und mir erklären wie das am Einfachsten möglich ist ?
Ein paar Beiträge vorher hat Markus ein paar .zip-Files hier eingestellt. Da müssten funktionierende .pm-Files dabei sein.
Gruß,
   Thorsten

EDIT: Hier ist der Link https://forum.fhem.de/index.php/topic,22952.msg448374.html#msg448374
FUIP

Treibhaus

Hallo Thorsten,

eigentlich hatte ich gedacht das Forum ordentlich gelesen zu haben.
Habe es wohl eher ordentlich überlesen. ::)

Vielen Dank für den Hinweis. Teste ich später.  :D

Gruß Jörg
Signatur:
Odroid -C2 + BSC EnOcean USB 300-TCM310 + HM485
Enocean-Taster-Fensterkontakt,-Bewegungsmelder
HM-Module über 3 Etagen + Garage/Garten
+ 1-wired Temp-Sensoren, S0-Schnittstellen + RHASSPY-Spracherkennung

Funsailor

Hallo,
da sich an der HomBrew Front nun viel getan hat und ich im Moment wieder etwas mehr Zeit zum "Spielen" habe, wollte ich den Dino (V1 mit enc28j60) Testweise als HM485_LAN Adapter einsetzen.

Allerdings ist mir nicht ganz klar welchen Sketch ich dazu nehmen muss.
Ich habe da verschiedene Beispiele getestet aber erfolgreich war ich noch nicht. :-\

Kann mir da jemand den richtigen Link nennen? Ich suche schon mehrere Tage im Netz und bin immer noch nicht zu einem Ergebnis gekommen.

Danke
Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Thorsten Pferdekaemper

Zitat von: Funsailor am 12 Juli 2016, 15:42:13wollte ich den Dino (V1 mit enc28j60) Testweise als HM485_LAN Adapter einsetzen.
Allerdings ist mir nicht ganz klar welchen Sketch ich dazu nehmen muss.
Die ganzen Homebrew-Sketches sind für HMW-"End"geräte. Ein LAN-Aadapter ist nicht dabei. Ich glaube nicht, dass das schon einmal jemand gebaut hat. Möglicherweise hat Dirk da schonmal was herumexperimentiert. Schau Dir mal diesen Thread an: https://forum.fhem.de/index.php/topic,14096.0.html
Möglicherweise kannst Du Dich da mal reinhängen.
Ich kann mir vorstellen, dass es gar nicht sooo schwierig ist, das hinzubekommen. Die WIZ...-Module machen glaube ich nichts anderes, als die Bytes 1:1 weiterzugeben. Die Kür wäre dann natürlich, die ganze Logik des HM485d auf dem Arduino laufen zu lassen...
Gruß,
   Thorsten
FUIP

Funsailor

Hallo Thorsten,
da nicht mehr an den DINO rankomme, habe ich mir nun aus einem Arduino und einem ENC28J60 Modul die LAN / Ether Schnittstelle "nachgebaut" und diesen Sketch geladen:
"http://kmtronic.com/kmtronic-dino-udp-to-rs485-example.html"
(IP Adresse, serielle Init etc angepasst)
Wenn ich mich nun über einen FTDI seriell an die Arduino Schnittstelle hänge, kann ich mit diesem Programm
"KMTronic DINo 4 Relay UDP Test Software.zip"
eine Message im HTERM (oder anderem seriellem Monitor) sehen.
Also UDP geht schon mal...

Versuche ich etwas über FHEM abzusetzen (Discovery oder RAW) kommen keine Daten an.

List
list HM485_LAN:
Internals:
   DEF        localhost:2000
   DeviceName localhost:2000
   FD         113
   HM485d_CommandLine ./FHEM/lib/HM485/HM485d/HM485d.pl --serialNumber SGW0123456 --device 192.168.178.77:80 --localPort 2000
   HM485d_PID   511
   HM485d_STATE started
   InterfaceType HMW-SOFT-GW
   Last_Sent_RAW_CMD FFFFFFFF 98 00000001 5A
   NAME       HM485_LAN
   NR         282
   PARTIAL
   ProtokolVersion 01
   STATE      opened
   SerialNumber SGW0123456
   TYPE       HM485_LAN
   Version    0.2.2
   currentQueueId 0
   discoveryRunning 0
   hmwId      00000001
   msgCounter 87
   queueId    16
   queueRunning 0
   Readings:
     2016-07-25 23:37:31   state           opened
   Ctrl:
     FFFFFFFF   98
   Keepalive:
     ok         1
     retry      0
   Sendqueue:
Attributes:
   HM485d_bind 1
   HM485d_device 192.168.178.77:80
   hmwId      00000001
   room       HM485
   verbose    3


So weit so gut, siehst du den Fehler?
Liegt es am UDP Protolkoll?

Ping geht natürlich.

LG
Michael
- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Funsailor

Bin nun ein Stück weiter mit dem Seriell-Ethernet Adapter.

UDP kann da nicht genommen werden, das funktioniert nicht.
Da muss man schon TCP bemühen um an die Daten heran zu kommen.

Ich habe mir den Datenverkehr auf meinem Banana mit tcdump angeschaut, da ist mir etwas nicht ganz klar.
Der RAW Befehl Set RAW FFFFFFFF 98 00000001 ff löst folgende Sendung aus:

        0x0000:  6255 5810 0025 6cfa a71f 4462 0800 4500
        0x0010:  0036 a4b8 4000 4006 afd8 c0a8 b292 c0a8
        0x0020:  b24d 8fe6 0050 616b 4376 0000 1701 5018
        0x0030:  3908 866a 0000 fdff ffff ff98 0000 0001
        0x0040:  03ff bc68

Einmal ist da eine 3 drin die nicht in der Eingabezeile drin ist und nach dem letztem ff kommen noch 2 weitere Bytes (bc und 68)
Kann mir das jemand erklären?
Danke und gute Nacht

Michael


- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Thorsten Pferdekaemper

Hi,
sorry, dass ich hier nicht zum Antworten komme. Mein kleiner 4 Tage alter Sohn hat gerade eine recht hohe Priorität...
Gruß,
   Thorsten
FUIP

Funsailor

#373
Hallo Thorsten,
herzlichen Glückwunsch zu eurem Nachwuchs. ;D

Da sind die Prioritäten ja klar gesetzt, mein Nachwuchs promoviert (27) bzw. studiert (25) und die beiden sind aus dem gröbsten  ;) raus.

Aber es muss sich hier keiner für seine "Auszeiten" entschuldigen, ich finde es immer wieder toll, wieviel Freizeit für FHEM (und andere Projekte) verwendet wird.

-- Nachtrag: Dabei beziehe ich mich auf meine Daten aus dem tcpdump von heute morgen

In der HM485_Protocol.pm finde ich das da:

=head2 NAME
Title: sendRawQueue
Function: Queue a HMW message and start queue if it not running
Returns: nothing
Args: named arguments:
-argument1 => string: $targetAddr 8 hex chars
-argument1 => int: $ctrl ctrl byte
-argument1 => string: $senderAddr 8 hex chars
-argument1 => string: $data n hex chars
=cut
sub sendRawQueue($$$$;$) {
my ($self, $targetAddr, $ctrl, $senderAddr, $data, $msgId) = @_;

# Todo: for check frame must acked?

my $queueId = $self->getQueueId();
my $cmd = substr($data, 0,1);

$self->{sendQueue}{$queueId}{TARGET}     = $targetAddr;
$self->{sendQueue}{$queueId}{CTRL}       = $ctrl;
$self->{sendQueue}{$queueId}{SENDER}     = $senderAddr;
$self->{sendQueue}{$queueId}{DATA}       = $data;
$self->{sendQueue}{$queueId}{MSG_ID}     = $msgId;
$self->{sendQueue}{$queueId}{SEND_COUNT} = 0;

# Messages to broadcast, messages with z or Z command must not acked
if ( (uc( unpack ('H*', $targetAddr)) eq 'FFFFFFFF') || $cmd eq 'z' || $cmd eq 'Z') {
$self->{sendQueue}{$queueId}{STATE} = STATE_IDLE;

} else {
if (grep $_ eq $cmd, @validRequestTypes) {
$self->{sendQueue}{$queueId}{STATE} = STATE_WAIT_RESPONSE;
} else {
$self->{sendQueue}{$queueId}{STATE} = STATE_WAIT_ACK;
}
}

if (!$queueRunning) {
$queueRunning = 1;
$self->sendQueueNextItem();
}
}


bc 68 könnte die msgId sein...

Aber die 03 finde ich nicht.

Wenn ich mir aber die Erklärung von parseCommand anschaue:


# Daten senden
# Startzeichen FD (hab noch kein FE gesehen)
# |  Länge der Nachricht inkl. MessageCounter
# |  |  MessageCounter, wird mit jedem KeepAlive oder anderer Message hochgezählt, Overflow bei 0xFF --> 0x01, startet nach Transparenzbefehl mit 01
# |  |  |  Befehl (S steht für Senden)
# |  |  |  |  ???
# |  |  |  |  |  ab hier kommen die Nutzdaten
# |  |  |  |  |  ---------------------------------------
# |  |  |  |  |  Zieladresse
# |  |  |  |  |  |           CTRL-Byte
# |  |  |  |  |  |           |  Absenderadresse
# |  |  |  |  |  |           |  |           Nutzdaten, könnte das der Jalousie-Aktor-Status sein?
# |  |  |  |  |  |           |  |           |
# -- -- -- -- ----------- -- -- ----------- -----------
# FD 0F 13 53 C8 00 00 59 ED 1A 00 00 00 01 78 0C 00


finde ich zwar die "FD" in meiner tcpdump Aufzeichnung aber alle anderen beschriebenen Daten nicht:
Es fehlen:
"Länge der Nachricht inkl. MessageCounter"
" MessageCounter, wird mit jedem KeepAlive"
"Befehl (S steht für Senden)"
"? ? ?"

Die Nutzdaten sind zu sehen.
Bis auf die verflixte 03.

LG
Michael

- Asus PN 41- mapleCul V1.24.01 - FHEMDuino - FHEM 6.2 - HUE Bridge - ESPEasy Bridge -  Milight HUB - smartVISU 3.40 -

Ralf9

Zitat von: Funsailor am 29 Juli 2016, 01:29:00
Einmal ist da eine 3 drin die nicht in der Eingabezeile drin ist und nach dem letztem ff kommen noch 2 weitere Bytes (bc und 68)
Kann mir das jemand erklären?

Die 03 ist die Framelänge und die bc 68 ist die Checksumme.
Das ganze ist in der HMW-Protokoll-Doku beschrieben:
http://forum.fhem.de/index.php?action=dlattach;topic=10027.0;attach=2441

Mir ist noch nicht so richtig klar was Du vor hast.
Möchstest Du das LAN Gateway nachbauen und dann auch noch die Module selberbauen?
Oder hast Du schon fertige wired Module.

Damit benötigst Du nur ein transparentes Ethernet zu RS485 Modul 
define HM485_LAN HM485_LAN localhost:2000
attr HM485_LAN HM485d_device 192.168.178.15:5000
attr HM485_LAN hmwId 00000001
attr HM485_LAN HM485d_bind 1


Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7