Homematic Wired - Homebrew Devices

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

Vorheriges Thema - Nächstes Thema

Thorsten Pferdekaemper

Zitat von: Ralf9 am 16 Juli 2015, 12:36:06
Ich wusste nicht ob ich den ganzen Ethernet-Kram in die HMWRS485.h/cpp reinschreiben darf.
Da kannst Du machen was Du willst, so lange das nicht in den "offiziellen" Branch ins Git kommt.

Zitat
Ich habe es schon versucht die Ethernetdefinition in die HMWRS485.cpp reinzuschreiben, ich bekomme aber die Fehlermeldung, daß die Datei Ethernet.h nicht gefunden wird. Im Hauptsketch funktioniert es aber ohne Probleme.
Ich habe die Ethernet library in das entsprechende Verzeichnis /usr/share/Anduino.. kopiert.
Verwendest Du die Arduino-IDE? Wenn ja: versuch mal eine richtige IDE zu finden. Mit der Arduino-IDE muss jedes #include auch im Hauptsketch stehen, auch wenn die Deklarationen daraus nur in anderen Libs verwendet werden.

Zitat
Falls dies gegenüber dem Hauptsketch keine Nachteile hat, werde ich es erstmal versuchen ob ich den Ethernet-Kram in der HMWRS485.h zum laufen bekomme.
Es gibt dann bei Dir eben zwei Versionen von HMWRS485: Die normale und die per Ethernet.

Zitat
Das Ethernet Homebrew Modul verhält sich gegenüber fhem wie ein normales HMW-Homebrew Modul, es wird aber kein HM485d Dämon benötigt.
Ich bin immer noch gespannt, ob Du das tatsächlich so hinbekommst.

Zitat
Falls die Ethernetroutinen in der HMWRS485.cpp nicht funktionieren oder es notwendig wird, daß die Ethernetroutinen in den Hauptsketch müssen, werde ich ein neues Thema aufmachen.
Ich verstehe die Abhängigkeit nicht...
FUIP

Bromm

Hallo Thomas, Markus, Thorsten und natürlich alle anderen zusammen!

Nun, nach doch ein paar verstrichenen Wochen, möchte ich doch einmal wieder ein Lebenszeichen senden... ;-) Die liebe Zeit fehlte mir in den letzten Wochen leider etwas um aktiver in der Entwicklung und auf der "Bildfläche" zu sein. Trotzdem hat sich, immer Stück für Stück, das angekündigte Board welches ich als universelles Modul für UP und DIN-Hutschiene entwerfe, gut weiterentwickelt. Also im Computer ist das Teil schon quasi fertig. Nur noch ein paar Überprüfungen bzw. eventuelle Korrekturen. Der nächste Schritt wären dann zwei, drei Prototypen. Auf Grund meiner beruflichen Arbeit kann ich zur Zeit leider noch keine konkreten Angaben zum zeitlichen Fortschritt machen. Nur, es geht vorwärts und ist schon sehr vielversprechend...

Viele Grüße
Björn

Ralf9

#302
Zitat von: Thorsten Pferdekaemper am 16 Juli 2015, 13:46:47
Verwendest Du die Arduino-IDE? Wenn ja: versuch mal eine richtige IDE zu finden. Mit der Arduino-IDE muss jedes #include auch im Hauptsketch stehen, auch wenn die Deklarationen daraus nur in anderen Libs verwendet werden.
Ich verwende die Arduino-IDE. Danke für diesen Hinweis.

Zitat
Ich bin immer noch gespannt, ob Du das tatsächlich so hinbekommst.
Ich habe nun die Ethernetroutinen in der HMWRS485.cpp zum Laufen bekommen. Es funktioniert bis jetzt alles wie gewünscht. Die debug Ausgabe mache ich über eine zusätzliche Telnet session.
Das Modul verhält sich gegenüber fhem wie ein LAN Gateway. Die Routinen in der HMWRS485.cpp sind fast fertig. Das empfangen von Frames und das senden von Keepalive- und Response Frames funktioniert auch schon.

Jetzt kommt noch die Einbindung der HMWModule.cpp. In der HMWModule.cpp werde ich auch noch einige änderungen vornehmen müssen. Bei einigen Befehlen, wo ich nicht nachvollziehen konnte ob das was zurückgesendet wird so passt, werde ich etwas umbauen.

Gruß Ralf

Nachtrag:
Ich sehe gerade, daß ich bei den Response Nachrichten einen Denkfehler hatte, ich dachte daß bei diesen die Daten immer mit einem 0x69 anfangen. Dies ist aber anscheinend nicht so.
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

stephan-221

#303
Hallo Ihr,

ich habe jetzt mal mein erstes selbstgebackenes Modul zusammengestellt.

Es ist ein HBW-1W-T10 geworden, (nachdem ich Arduino IDE aktualisiert habe und wirklich alle Sources zusammenkopiert habe) :-D

Das Gerät ansich existiert. Auf der Debug Console kann ich sehen, das die Sensoren erkannt werden.
Es werden in FHEM leider keine Kanäle angelegt. Wie kann ich die manuell anlegen?

EDITH: Trotz kopiertem devicefile (hbw_1w_t10.pm) bekomme ich folgende Meldung:
2015.07.19 16:43:54 3: HM485: Initialisierungsfehler 42FFFFFF ModelName noch nicht vorhanden
2015.07.19 16:43:54 3: HM485: Initialisierung von Modul 42FFFFFF


Jetzt noch ein paar Detailfragen:

Wo wird die Seriennummer der Bausteine erzeugt?
Ich benötige zwei OneWire Module, wodurch ich erstmal befürchte, die gleiche Seriennummer zu bekommen.
Da müsste ich manuell eingreifen.
Seriennummer: HBW4073471 DEF: 42FFFFFF

Wenn ich einen Arduino benutze, ist der HW UART immer mit dem USB-RS232 Wandler verdrahtet.
Kommt sich da ein angeschlossener MAX485 mit ins Gehege?


Viele Grüße
Stephan

mago0211

Hallo Stephan,

sieht nach einem ähnlichen Problem aus wie bei mir

http://forum.fhem.de/index.php/topic,39281.0.html

Scheinbar werden die HBW Device Files nicht richtig geladen. Habe aber bisher noch nicht herausgefunden warum.

Zitat von: stephan-221 am 19 Juli 2015, 16:41:44
Es werden in FHEM leider keine Kanäle angelegt. Wie kann ich die manuell anlegen?

Ich glaube mit
define HBM_01 HM485 42FFFFFF_01

Gruß
Markus

Thorsten Pferdekaemper

Zitat von: stephan-221 am 19 Juli 2015, 16:41:44
Es ist ein HBW-1W-T10 geworden, (nachdem ich Arduino IDE aktualisiert habe und wirklich alle Sources zusammenkopiert habe) :-D

[Probleme...]


Hi Stephan,
ich schau mir das mal genauer an. Auch das mit der Seriennummer werde ich erklären...
Ich denke, da komme ich heute noch dazu.

Zitat
Es werden in FHEM leider keine Kanäle angelegt. Wie kann ich die manuell anlegen?
Das könnte zwar gehen, würde aber wahrscheinlich nicht viel nutzen.

Zitat
Wenn ich einen Arduino benutze, ist der HW UART immer mit dem USB-RS232 Wandler verdrahtet.
Kommt sich da ein angeschlossener MAX485 mit ins Gehege?
Bei Arduinos habe ich normalerweise MAX485 über SoftwareSerial an anderen Pins. Wir brauchen ja nur 19200 Baud.
...aber wenn es Probleme macht, dann wären die Symptome anders.

Gruß,
   Thorsten
FUIP

stephan-221

Hallo Thorsten,

Zitat von: Thorsten Pferdekaemper am 19 Juli 2015, 18:06:17
Hi Stephan,
ich schau mir das mal genauer an. Auch das mit der Seriennummer werde ich erklären...
Ich denke, da komme ich heute noch dazu.

Das wäre klasse.

Zitat von: Thorsten Pferdekaemper
Bei Arduinos habe ich normalerweise MAX485 über SoftwareSerial an anderen Pins. Wir brauchen ja nur 19200 Baud.
...aber wenn es Probleme macht, dann wären die Symptome anders.

Daran wirds auch nicht liegen. Das ist nur jetzt die Überlegung von Steckbrett auf Lochraster.
Ich habe den ersten Entwurf auch mit SoftSerial für RS485.

Das Problem liegt ja irgendwie daran, dass die Files nicht eingelesen werden.

Viele Grüße
Stephan

Ralf9

#307
Habt ihr im Hauptsketch den Modultyp eingetragen?

hmwmodule = new HMWModule(&hmwdevice, &hmwrs485, 0x19);


Zitat von: mago0211 am 15 Juli 2015, 08:35:23
Ich habe noch die letzte Version von Dirk.
Mit einer alten Version wird nur der HMW_SEN_SC_12_DR und evtl der HMW-LC-Sw2-DR  funktionieren. Für die anderen Homebrew Module benötigt ihr die aktuelle Version von gevoo oder die Version von honk.

Das automatische generieren der Seriennr hat bei mir funktioniert.
Ich habe den HMW_SEN_SC_12_DR nachgebaut, er wurde in fhem komplett erkannt und es funktionieren bis jetzt die ersten beiden Kanäle.

Damit die anderen Kanäle auf funktionieren muß ich sie erst im Hauptsketch und in der HMWRegister.h definieren.
Kann ich dies so im Hauptsketch so machen oder geht es einfacher oder eleganter?

#define Sensor[12] = {22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33}
#define CHANNEL_IO_COUNT 12
#define CHANNEL_IO_BYTES 2
#define CHANNEL_PORTS byte channelPorts[CHANNEL_IO_COUNT] = {Sensor[0], Sensor[1], Sensor[2], Sensor[3],Sensor[4], Sensor[5], Sensor[6], Sensor[7], Sensor[8], Sensor[9], Sensor[10], Sensor[11]};
byte portStatus[CHANNEL_IO_BYTES];


und in der HMWRegister.h steht bis jetzt folgendes. Als Vorlage habe ich das HMW-LC-Sw2-DR genommen. Ich möchte die keys und switche beibehalten und es sollen auch noch Analogeingänge dazukommen.
Was muß ich in der "struct hmw_config_sensor" eintragen damit die 12 Kanäle in 2 Byte kommen?

#define HMW_CONFIG_NUM_KEYS 2        // Anzahl Tastereingaenge
#define HMW_CONFIG_NUM_SENSORS 2     // Anzahl Sensoreingaenge
#define HMW_CONFIG_NUM_SWITCHES 2    // Schalter (Aktoren)

// Sensor
struct hmw_config_sensor {
byte input_locked          :1;   // 0x07:1    0=LOCKED, 1=UNLOCKED
byte                       :7;   // 0x07:2-7
};

// Taster
struct hmw_config_key {
byte input_type            :1;   // 0x07:0    0=SWITCH, 1=PUSHBUTTON
byte input_locked          :1;   // 0x07:1    0=LOCKED, 1=UNLOCKED
byte                       :6;   // 0x07:2-7
byte long_press_time;            // 0x08
};

struct hmw_config_switch {
byte logging:1;    // 0x0B:0     0=OFF, 1=ON
byte        :7;    // 0x0B:1-7
byte        :8;    // 0x0C      // dummy     //TODO: Optimize (?)
};

struct hmw_config {
byte logging_time;     // 0x01
long central_address;  // 0x02 - 0x05
byte direct_link_deactivate:1;   // 0x06:0
byte                       :7;   // 0x06:1-7
    hmw_config_sensor sensors[HMW_CONFIG_NUM_SENSORS];
    hmw_config_key keys[HMW_CONFIG_NUM_KEYS];  // 0x07 - 0x0A
    hmw_config_switch switches[HMW_CONFIG_NUM_SWITCHES];  // 0x0B - 0x0E
};



Nachtrag:
Hat sich inzwischen erledigt. Ich habe es anders gelöst.

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

stephan-221

Hallo Ralf,

ich nutze ja bisher gevoos letzte Version. Daher ist zumindest die Unterstützung da.

Jetzt hilf mal einem newbie für Arduino... WTF ist der Hauptsketch? quasi die .ino Datei?
In meinem Fall dann die umbenannte HBW-1W-T10.ino?

Ich habe in dieser Datei jetzt hmwmodule = new HMWModule(&hmwdevice, &hmwrs485, 0x81);
eingetragen. Bringt aber bisher folgende Fehlermeldung:
HBW-1W-T10:26: error: 'hmwmodule' does not name a type
'hmwmodule' does not name a type


eine HMWRegister.h kenne ich nicht.
Ich habe gerade gesehen, dass je nach HxW Baustein eine HMWRegister.h existiert oder auch nicht.
Für den 1W-T10 bisher nicht.


Viele Grüße
Stephan

mago0211

Hallo Ralf

Zitat von: Ralf9 am 19 Juli 2015, 18:52:08
Habt ihr im Hauptsketch den Modultyp eingetragen?

hmwmodule = new HMWModule(&hmwdevice, &hmwrs485, 0x19);


ich habe das bereits vorhanden Homebrew Device HBW-Sen-SC8 nachgebaut. Da habe ich an dem sketch nichts geändert.

Zitat von: Ralf9 am 19 Juli 2015, 18:52:08
Mit einer alten Version wird nur der HMW_SEN_SC_12_DR und evtl der HMW-LC-Sw2-DR  funktionieren. Für die anderen Homebrew Module benötigt ihr die aktuelle Version von gevoo oder die Version von honk.

Auf dem Testsystem habe ich die aktuelle Version von gevoo aus dem Git geladen.

Wo finde ich die Version von honk?
Ist diese aus dem Thema die richtige?
http://forum.fhem.de/index.php/topic,30804.30.html

Oder gibt es irgendwo ein Git?


Habe übrigens noch mal versucht an meinem Hauptsystem auf dem noch Dirks Version mit einem Original HM-Lan-Gateway läuft, das selbstgebaute HBW-Sen-SC8 zu koppeln. Dies funktionierte auch wunderbar. Er wurde zwar nicht automatisch erkannt aber nach der manuellen Definition hat er ihn einwandfrei und richtig erkannt.

Gruß
Markus

Thorsten Pferdekaemper

Zitat von: stephan-221 am 19 Juli 2015, 16:41:44
ich habe jetzt mal mein erstes selbstgebackenes Modul zusammengestellt.
Es ist ein HBW-1W-T10 geworden,
Das freut mich.

Zitat
Das Gerät ansich existiert. Auf der Debug Console kann ich sehen, das die Sensoren erkannt werden.
Es werden in FHEM leider keine Kanäle angelegt. Wie kann ich die manuell anlegen?
Also ich habe gerade auf einem Arduino Uno den Kram draufgepackt und es hat bei meinem Test-FHEM auf Anhieb funktioniert.
Beim automatischen Anlegen der Kanäle gibt es noch Probleme in der FHEM-Integration. Du musst einmal "get <device> config all" machen und dann ein paar Sekunden warten. Dann ein Refresh auf die FHEM-Oberfläche und die Kanäle müssten erscheinen.

Ach ja: Hast Du das Gerät in FHEM manuell angelegt? Es sollte eigentlich per Autocreate gehen.
Außerdem: Neuste HM485-Version in FHEM? Hol Dir mal im Zweifelsfall den Kram von hier: https://github.com/kc-GitHub/FHEM-HM485/archive/master.zip

Zitat
EDITH: Trotz kopiertem devicefile (hbw_1w_t10.pm) bekomme ich folgende Meldung:
2015.07.19 16:43:54 3: HM485: Initialisierungsfehler 42FFFFFF ModelName noch nicht vorhanden
2015.07.19 16:43:54 3: HM485: Initialisierung von Modul 42FFFFFF
Ok, da war die Vermutung, dass das Device File nicht richtig gelesen wurde. Das glaube ich allerdings nicht so ganz. Man weiß aber nie. Im Logfile müsstest Du eigentlich sowas sehen:

2015.07.19 19:49:49 3: HM485: HM485: Loading available device files
2015.07.19 19:49:49 3: HM485: =====================================
2015.07.19 19:49:49 3: HM485: Loading device file: ./FHEM/lib/HM485/Devices/hbw_1w_t10.pm
2015.07.19 19:49:49 3: HM485: Loading device file: ./FHEM/lib/HM485/Devices/hmw_central.pm
2015.07.19 19:49:49 3: HM485: Loading device file: ./FHEM/lib/HM485/Devices/hmw_generic.pm
2015.07.19 19:49:49 3: HM485: Loading device file: ./FHEM/lib/HM485/Devices/hmw_io12_sw14_dr.pm
2015.07.19 19:49:49 3: HM485: Loading device file: ./FHEM/lib/HM485/Devices/hmw_io12_sw7_dr.pm
2015.07.19 19:49:50 3: HM485: Loading device file: ./FHEM/lib/HM485/Devices/hmw_io12_sw7_dr_V3_02.pm
2015.07.19 19:49:50 3: HM485: Loading device file: ./FHEM/lib/HM485/Devices/hmw_io_12_fm.pm
2015.07.19 19:49:50 3: HM485: Loading device file: ./FHEM/lib/HM485/Devices/hmw_io_4_fm.pm

Das ist vom FHEM-Start. Könntest Du mal nachschauen, ob da was faul ist? hbw_1w_t10.pm sollte zu finden sein.

Vielleicht ist auch was an der Kommunikation faul. Hast Du das SoftwareSerial.cpp von https://github.com/kc-GitHub/HM485-Lib/tree/thorsten oder das Standard-Arduino-SoftwareSerial.cpp?

Ansonsten: Übersetze den Sketch mal mit #define DEBUG_VERSION DEBUG_UNO und RS485 an Pins 5/6 (siehe Arduino Coding). Dann Serial Monitor einschalten. Lösche das Device aus FHEM und drücke danach reset auf dem Arduino. Könntest Du mir mal schicken, was der Serial Monitor dann anzeigt?

ZitatWo wird die Seriennummer der Bausteine erzeugt?
Bei "meinen" Modulen steht die im EEPROM in den letzten 4 Bytes. Bei einem jungfräulichen Arduino steht da 0xFFFFFFFF. In den Fall wird 0x42FFFFFF als Adresse genommen.
Die Seriennummer ist dann "HBW" gefolgt von den letzten 7 Stellen der Addresse in Dezimalnotation.

Zitat
Ich benötige zwei OneWire Module, wodurch ich erstmal befürchte, die gleiche Seriennummer zu bekommen.
Da müsste ich manuell eingreifen.
Seriennummer: HBW4073471 DEF: 42FFFFFF
Du kannst bei den HBW-Modulen die Adresse und damit auch die Seriennummer ändern. Dafür gibt es den Spezialbefehl "@a" (0x4061).
Sobald Du das Device mit 42FFFFFF in FHEM siehst, dann das hier eingeben:

set hm485 RAW 42FFFFFF 1A 00000001 406142000014

Die letzten 4 Bytes (also 8 Zeichen) sind die neue Adresse, im obigen Fall also 42000014.
Danach wird das Device in FHEM neu angelegt. Du solltest das Device 42FFFFFF vorher löschen, sonst kann es momentan noch Probleme geben. (Ich arbeite daran...) FHEM stürzt beim Löschen vielleicht ab, dann einfach neu starten.

Gruß,
   Thorsten
FUIP

Ralf9

Zitat von: stephan-221 am 19 Juli 2015, 19:52:22
Jetzt hilf mal einem newbie für Arduino... WTF ist der Hauptsketch? quasi die .ino Datei?
In meinem Fall dann die umbenannte HBW-1W-T10.ino?
Ich bin genauso wie ihr ein newbie für Arduino. Ein Homebrew Modul mit den Dateien vom Git nachzubauen ist sehr mühsam.
Ja die .ino Datei ist der Hauptsketch.

Zitat
Ich habe in dieser Datei jetzt hmwmodule = new HMWModule(&hmwdevice, &hmwrs485, 0x81);
eingetragen.
Diese Zeile müsste eigentlich schon in der ino Datei bei void setup() drinstehen
https://github.com/kc-GitHub/HM485-Lib/blob/thorsten/HBW-1W-T10/HBW-1W-T10.cpp

Normalerweise wird ein Modul automatisch angelegt.
Wenn fhem einen Tastendruck erkennt, wird das Autocreate gestartet und mit dem Befehl "h" (0x68) der Modultyp abgefragt.
Das Autocreate funktioniert nur wenn das Modul auf den h-Befehl mit dem korrektem Modultyp antwortet. Dies müsstest Du in der Debug Ausgabe verfolgen können.

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

Ralf9

Zitat von: mago0211 am 19 Juli 2015, 19:56:18
Wo finde ich die Version von honk?
hier ist das Git von honk. Der peering branch ist der aktuelle.
https://github.com/hresalg/FHEM-HM485

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

Thorsten Pferdekaemper

Zitat von: stephan-221 am 19 Juli 2015, 19:52:22Jetzt hilf mal einem newbie für Arduino... WTF ist der Hauptsketch? quasi die .ino Datei?
In meinem Fall dann die umbenannte HBW-1W-T10.ino?

Ich habe in dieser Datei jetzt hmwmodule = new HMWModule(&hmwdevice, &hmwrs485, 0x81);
eingetragen. Bringt aber bisher folgende Fehlermeldung:
HBW-1W-T10:26: error: 'hmwmodule' does not name a type
'hmwmodule' does not name a type


eine HMWRegister.h kenne ich nicht.
Hi,
was Ralf9 sagt gilt für den HBW-1W-T10 nicht. Ich habe das Teil geschrieben und auch so ziemlich den Rest vom HM-Wired-Arduino-Kram.
Könntest Du mal meinen Post betrachten?
Gruß,
   Thorsten
FUIP

Thorsten Pferdekaemper

Zitat von: mago0211 am 19 Juli 2015, 19:56:18Auf dem Testsystem habe ich die aktuelle Version von gevoo aus dem Git geladen.
Mit der funktioniert es auch, inklusive autocreate. Das Problem muss woanders liegen.
Gehe mal meinen langen Post von vorher durch.
Gruß,
   Thorsten
FUIP