Hallo,
Da mir aufgefallen ist, das in fhem und in der 00_HM485_LAN.pm schon vorbereitungen für mehrere HM485_LAN getroffen wurden, habe ich es einfach mal versucht. Es war viel problemloser als ich dachte. Ich musste nur sehr wenig anpassen, damit es funktioniert hat,
Mehrere HM485_LAN dürften auch für andere interessant seit, damit ist z.B. ein HMLan-Adapter pro Etage möglich.
in die fhem.cfg habe ich folgendes eingetragen:
define HM485_LAN HM485_LAN 192.168.0.7:2000
attr HM485_LAN hmwId 00000001
attr HM485_LAN room HM485
define HM485_LAN2 HM485_LAN 192.168.0.94:1000
attr HM485_LAN2 hmwId 00000002
attr HM485_LAN2 room HM485
In der "10_HM485.pm" habe ich in der "sub HM485_Initialize" bei "$hash->{'AttrList'}" "IODev " ergänzt.
Danach muß bei jedem Modul beim attribut IODev das ensprechende HM485_LAN eingetragen werden.
In der "00_HM485_LAN.pm" hat bei mir in der "sub HM485_LAN_Attr" die Übergabe des hmwId vom HM485_LAN2 nicht funktioniert. Es wurde in $val 00000001 anstatt 00000002 übergeben. Ich habe als Workaround bis der Fehler beseitigt ist, eine if-Abfrage eingefügt:
sub HM485_LAN_Attr (@) {
my (undef, $name, $attr, $val) = @_;
my $hash = $defs{$name};
my $msg = '';
print Dumper("LAN_Attr val", $val);
print Dumper("LAN_Attr name", $name);
print Dumper("LAN_Attr", $hash);
if ($name eq 'HM485_LAN2') {
$val = '00000002';
}
Mit den print Dumper bekomme ich die folgende Ausgabe:
$VAR1 = 'LAN_Attr val';
$VAR2 = '00000001';
$VAR1 = 'LAN_Attr name';
$VAR2 = 'HM485_LAN2';
$VAR1 = 'LAN_Attr';
$VAR2 = {
'STATE' => '???',
'NAME' => 'HM485_LAN2',
'NR' => 15,
'TYPE' => 'HM485_LAN',
'DEF' => '192.168.0.94:1000'
};
Bei der HM485: Assigned Anzeige ist noch ein Fehler bei der Anzeige des HM485_LAN, es wird immer HM485_LAN2 angezeigt
2015.08.10 23:16:47 2: HM485: Assigned HMW_IO_12_FM_JEQ0189933 (00008C69) to HM485_LAN2
2015.08.10 23:16:47 3: HM485: Warte auf Initialisierung Gateway
2015.08.10 23:16:47 2: HM485: Assigned HMW_IO_12_FM_GEQ0254410 (00003E95) to HM485_LAN2
2015.08.10 23:16:47 3: HM485: Warte auf Initialisierung Gateway
2015.08.10 23:16:47 2: HM485: Assigned HMW_Sen_SC_12_DR_LEQ1184675 (00010CA8) to HM485_LAN2
2015.08.10 23:16:47 3: HM485: Warte auf Initialisierung Gateway
2015.08.10 23:16:47 2: HM485: Assigned HBW_IO_SW_HBW8555631 (42ABCDEF) to HM485_LAN2
2015.08.10 23:16:47 3: HM485: Warte auf Initialisierung Gateway
hier ist ein Auszug von "list HM485_LAN"
DEF 192.168.0.7:2000
DeviceName 192.168.0.7:2000
FD 4
HM485_LAN_MSGCNT 175
HM485_LAN_TIME 2015-08-10 23:47:32
InterfaceType HMW-SOFT-GW
LASTInputDev HM485_LAN
Last_Sent_RAW_CMD 00010CA8 18 00000001 530B
Last_Sent_RAW_CMD_State ACK
MSGCNT 175
NAME HM485_LAN
NR 13
PARTIAL
ProtokolVersion 01
STATE open
SerialNumber SGW0123456
TYPE HM485_LAN
Version 0.2.1
currentQueueId 0
hmwId 00000001
msgCounter 40
queueId 175
...
Ctrl:
00003E95 1C
00008C69 18
00010CA8 18
und hier ist ein Auszug von "list HM485_LAN"
DEF 192.168.0.94:1000
DeviceName 192.168.0.94:1000
FD 13
HM485_LAN2_MSGCNT 75
HM485_LAN2_TIME 2015-08-10 23:47:33
InterfaceType HMW-ArduinoMega-GW
LASTInputDev HM485_LAN2
Last_Sent_RAW_CMD 42ABCDEF 1C 00000002 5317
Last_Sent_RAW_CMD_State ACK
MSGCNT 75
NAME HM485_LAN2
NR 15
PARTIAL
ProtokolVersion 01
STATE open
SerialNumber HGW0123456
TYPE HM485_LAN
Version 0.0.1
currentQueueId 0
hmwId 00000002
msgCounter 84
queueId 75
...
Ctrl:
42ABCDEF 1C
Nachtrag:
Liest hier jemand mit, der sich das mit dem "sub HM485_LAN_Attr (@)" und "AssignIoPort($hash);" in der fhem.pl mal anschauen kann, oder gibt es dafür eine passendere Gruppe?
Hier ist ein Auszug aus der 10_HM485.pm:
sub HM485_Initialize($) {
my ($hash) = @_;
$hash->{'Match'} = '^FD.*';
$hash->{'DefFn'} = 'HM485_Define';
$hash->{'UndefFn'} = 'HM485_Undefine';
sub HM485_Define($$) {
my ($hash, $def) = @_;
my @a = split('[ \t][ \t]*', $def);
my $hmwId = uc($a[2]);
my $chNr = (length($hmwId) > 8) ? substr($hmwId, 9, 2) : undef;
my $addr = substr($hmwId, 0, 8);
...
# We defined a the device
AssignIoPort($hash);
HM485::Util::logger(
HM485::LOGTAG_HM485, 2, 'Assigned ' . $name . ' (' . $addr . ') to ' . $hash->{IODev}->{NAME});
https://github.com/kc-GitHub/FHEM-HM485/blob/dev/FHEM/00_HM485_LAN.pm
https://github.com/kc-GitHub/FHEM-HM485/blob/dev/FHEM/10_HM485.pm
Gruß Ralf
anscheinend steckt in der "00_HM485_LAN.pm" bei der "sub HM485_LAN_Attr (@)" noch ein Fehler.
Wenn ich die Abfrage "if (AttrVal($d, 'hmwId', '00000001') eq $val)" auskommentiere, sieht es besser aus.
Kann mir jemand erklären was das " AttrVal($d, 'hmwId', '00000001') " macht?
sub HM485_LAN_Attr (@) {
my (undef, $name, $attr, $val) = @_;
my $hash = $defs{$name};
my $msg = '';
print Dumper("LAN_Attr val", $val);
print Dumper("LAN_Attr name", $name);
print Dumper("LAN_Attr", $hash);
if ($attr eq 'hmwId') {
$hash->{hmwId} = $val;
my $hexVal = (defined($val)) ? hex($val) : 0;
if (!defined($val) || $val !~ m/^[A-F0-9]{8}$/i || $hexVal > 255 || $hexVal < 1) {
$msg = 'Wrong hmwId defined. hmwId must be 8 digit hex address within 00000001 and 000000FF';
} else {
#foreach my $d (keys %defs) {
# next if($d eq $name);
#
# if($defs{$d}{TYPE} eq 'HM485_LAN') {
# if(AttrVal($d, 'hmwId', '00000001') eq $val) {
# $msg = 'hmwId ' . $val . ' already used. Please use another one.';
# }
# }
#}
}
}
return ($msg) ? $msg : undef;
}
Hier sind die print Dumper log-Einträge. Dabei fällt auf, daß pro LAN die "sub HM485_LAN_Attr" drei mal aufgerufen wird. 2 mal mit $val = hmwId und 1 mal mit dem room.
Beim HM485_LAN2 kommt das erste mal die hmwId 00000001 und das zweite mal die richtige hmwId 00000002. Ist dies normal?
$VAR1 = 'LAN_Attr val';
$VAR2 = '00000001';
$VAR1 = 'LAN_Attr name';
$VAR2 = 'HM485_LAN';
$VAR1 = 'LAN_Attr';
$VAR2 = {
'STATE' => '???',
'DEF' => '192.168.0.7:2000',
'TYPE' => 'HM485_LAN',
'NAME' => 'HM485_LAN',
'NR' => 13
};
$VAR1 = 'LAN_Attr val';
$VAR2 = '00000001';
$VAR1 = 'LAN_Attr name';
$VAR2 = 'HM485_LAN';
$VAR1 = 'LAN_Attr';
$VAR2 = {
'msgCounter' => 0,
'TYPE' => 'HM485_LAN',
'NAME' => 'HM485_LAN',
'NR' => 13,
'DEF' => '192.168.0.7:2000',
'STATE' => '',
'hmwId' => '00000001'
};
$VAR1 = 'LAN_Attr val';
$VAR2 = 'HM485';
$VAR1 = 'LAN_Attr name';
$VAR2 = 'HM485_LAN';
$VAR1 = 'LAN_Attr';
$VAR2 = {
'msgCounter' => 0,
'TYPE' => 'HM485_LAN',
'NAME' => 'HM485_LAN',
'NR' => 13,
'DEF' => '192.168.0.7:2000',
'STATE' => '',
'hmwId' => '00000001'
};
$VAR1 = 'LAN_Attr val';
$VAR2 = '00000001';
$VAR1 = 'LAN_Attr name';
$VAR2 = 'HM485_LAN2';
$VAR1 = 'LAN_Attr';
$VAR2 = {
'DEF' => '192.168.0.94:1000',
'NR' => 15,
'TYPE' => 'HM485_LAN',
'NAME' => 'HM485_LAN2',
'STATE' => '???'
};
$VAR1 = 'LAN_Attr val';
$VAR2 = '00000002';
$VAR1 = 'LAN_Attr name';
$VAR2 = 'HM485_LAN2';
$VAR1 = 'LAN_Attr';
$VAR2 = {
'hmwId' => '00000001',
'STATE' => '',
'DEF' => '192.168.0.94:1000',
'TYPE' => 'HM485_LAN',
'msgCounter' => 0,
'NAME' => 'HM485_LAN2',
'NR' => 15
};
$VAR1 = 'LAN_Attr val';
$VAR2 = 'HM485';
$VAR1 = 'LAN_Attr name';
$VAR2 = 'HM485_LAN2';
$VAR1 = 'LAN_Attr';
$VAR2 = {
'hmwId' => '00000002',
'STATE' => '',
'DEF' => '192.168.0.94:1000',
'TYPE' => 'HM485_LAN',
'msgCounter' => 0,
'NAME' => 'HM485_LAN2',
'NR' => 15
};
Gruß Ralf
Hallo Ralf,
vielleicht ist beim das Glück mit dem Dummen, aber ich habe zwei Lan Gateways und das ohne Probleme.
Das erste Gateway eingerichtet mit hmwid0000001, danach sind alle angeschlossenen Geräte erkannt worden und im Feld IODev das Gateway auch eingetragen.
Nach Anschaffung eines weiteren, habe ich versucht den Zweiten einfach einzurichten, funktionierte erst nicht, da die hmwid0000001 schon vergeben war. Pragmatisch die erste umbenannt auf hmwid0000002, dachte erste das geht in die Hose, aber alle Funktionen blieben erhalten.
Der Weg war nun frei das Zweite einzubinden, alle Geräte wurde wie erwartet eingebunden und in den Eigenschaften ist das richtige Gateway zu finden.
Vielleicht war es Glücksache - funktioniert aber bis jetzt ( seit 3 Tagen).
Herzliche Grüße aus der Eifel
Holger
Hallo,
ich krame dieses Thema noch mal hervor, da ich gerade versuche, zwei HM485_LAN in einem gemeinsamen FHEM einzubinden.
Kann es sein, dass das nicht geht? Die ports sind verschieden, die hmwId ebenfalls. Dennoch wechseln die eingebundenen Adapter immer zwischen opened und disconnected bzw bleiben disconnected.
Meine Konfiguration:
Rechner 1: FHEM
Rechner 2: DIGITUS DA-70157 mit hm485d.sh; Port 2000
Rechner 3: DIGITUS DA-70157 mit hm485d.sh; Port 3000
schöne Grüße
Jo
Ein HM485_LAN funktioniert nicht per fhem2fhem im RAW-Modus oder?
Man kann ihn zwar anlegen und er geht auch auf "opened", aber irgendwie steht da ziemlich viel "NACK" :-\
Bin für jeden Tipp dankbar, der einen zweiten oder dritten HM485_LAN bedienbar macht.
schöne Grüße
Jo
Ich habe vier HM485_LAN.
Du musst dazu den hm485d auf Rechner 2 + 3 manuell starten
z.B.
Rechner 2:
..fhem-5.5> /usr/bin/perl ./FHEM/lib/HM485/HM485d/HM485d.pl --hmwId 00000002 --serialNumber SGW0123456 --device /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_xxxx-if00-port0 --verbose 2&
Rechner 3:
..fhem-5.5> /usr/bin/perl ./FHEM/lib/HM485/HM485d/HM485d.pl --hmwId 00000003 --serialNumber SGW0123456 --device /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_xxxx-if00-port0 --verbose 2&
und dann bei Rechner1
z.B.
HM485_LAN2:
DEF IPRechner2:2000
hmwId 00000002
HM485_LAN3:
DEF IPRechner3:2000
hmwId 00000003
und dann bei den angeschlossenen Modulen bei central_address die passende hmwId eingeben. Z.B. 00000003, wenn das Modul an Rechner3 hängt
Gruß Ralf
Danke für die Rückmeldung.
Aber ich verstehe das nicht so ganz ::)
Auf Rechner 2 und 3 habe ich jeweils ein hm485d.sh Skript welches automatisch gestartet wird.
Z.B.
Rechner 2: Port 3000 und hmwId 0000003
Rechner 3: Port 2222 und hmwId 0000010
Bisher noch ohne Geräte. Die bloße Definition auf Rechner 1 führt dann schon zu permanenten connects/disconnects.
Was macht denn den Unterschied, wenn ich die hm485d's manuell starte?
Auf Rechner 1 läuft übrigens noch ein HM485_LAN, aber mit einem lokal angeschlossenen Adapter (USB). hmwId ist auch hier eine andere.
Die oben beschriebenen Änderungen in der 00_HM485_LAN.pm habe ich nicht vorgenommen. War das zwischenzeitlich in den Code eingeflossen oder liegt da vielleicht der Fehler?
schöne Grüße
Jo
Wenn sich das HM485_LAN2 auf Rechner1 mit dem HM485d.pl auf Rechner2 connecten soll, darf das HM485_LAN vom Rechner2 nicht gleichzeitig auf das HM485d.pl connected sein.
Dazu musst Du das HM485_LAN auf Rechner 2 und 3 löschen.
Du musst dann das HM485d.pl manuell starten, da es dann nicht mehr durch das HM485_LAN gestartet werden kann
Auf Rechner 2 und 3 läuft zwar fhem, aber es ist kein HMW_LAN definiert.
ZitatAuf Rechner 2 und 3 habe ich jeweils ein hm485d.sh Skript welches automatisch gestartet wird.
Bitte poste mal das hm485d.sh Skript
Auf Rechner 2:
sudo perl /opt/fhem/FHEM/lib/HM485/HM485d/HM485d.pl --hmwId 00000003 --serialNumber A907AExT --device /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A907AExT-if00-port0 --localPort 3000 &
Auf Rechner 3:
sudo perl /opt/fhem/FHEM/lib/HM485/HM485d/HM485d.pl --hmwId 00000010 --serialNumber AB0LH7xT --device /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_AB0LH7xT-if00-port0 --localPort 2222 &
Eingebunden hatte ich das dann so:
define HM485b HM485_LAN 192.xxx.xxx.209:3000
attr HM485b HM485d_bind 1
attr HM485b HM485d_device 192.xxx.xxx.209:3000
attr HM485b hmwId 00000003
und
define HM485a HM485_LAN 192.xxx.xxx.215:2222
attr HM485a HM485d_bind 1
attr HM485a HM485d_device 192.xxx.xxx.215:2222
attr HM485a hmwId 00000010
Was mir jetzt aufgefallen ist: Das HMW12/7, welches am Rechner 3 hängt (eigentlich 00000010) zeigt eine
R-central_address 00000016
Das ist der Dezimalwert vom hex-Wert 00000010?
schöne Grüße
Jo
auf Rechner1
Zitatattr HM485a HM485d_bind 1
attr HM485b HM485d_bind 1
bitte ändere dies auf "bind 0"
Mit "bind 1" wird der HM485d automätisch gestartet, dies funktioniert nur, wenn der HM485d auf dem selben Rechner ist wie der HM485_LAN.
Die attr HM485b HM485d_device kannst Du löschen.
Falls es immer noch nicht funktioniert, ist mit einem Portscan bei Rechner 2 der Port 3000 und bei Rechner 3 der Port 2222 als offen sichtbar?
Gruß Ralf
Verrückt, das war es :)
Alle HM485 sind jetzt stabil auf "opened". Und ich war mir so sicher, dass ich zumindest mit "bind" auch schon probiert hatte.
Herzlichen Dank Ralf! Damit kann ich jetzt weiter machen.
schöne Grüße
Jo