[HM-Wired] mehrere HM485_LAN Gateway verwenden -> evtl Fehler in fhem.pl

Begonnen von Ralf9, 11 August 2015, 00:27:44

Vorheriges Thema - Nächstes Thema

Ralf9

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

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

deune

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

Jojo11

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

Jojo11

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

Ralf9

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

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

Jojo11

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

Ralf9

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

Jojo11

Auf Rechner 2 und 3 läuft zwar fhem, aber es ist kein HMW_LAN definiert.

Ralf9

ZitatAuf Rechner 2 und 3 habe ich jeweils ein hm485d.sh Skript welches automatisch gestartet wird.
Bitte poste mal das hm485d.sh Skript
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

Jojo11

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

Ralf9

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

Jojo11

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