Einrichtung HM485wired: FHEM bleibt beim aktivieren stehen

Begonnen von M.Piet, 27 Januar 2018, 12:24:49

Vorheriges Thema - Nächstes Thema

M.Piet

Hallo Zusammen,

baue grad HomeMatic wired ein. Anschaltung mit einem DIGITUS DA-70157.

Streng nach Wiki vorgegangen.
Das Device device /dev/ttyUSB0 ist vorhanden.

Mein letzter Schritt:
defmod HomeMatic HM485_LAN localhost:2000
attr HomeMatic HM485d_device /dev/ttyUSB0
attr HomeMatic hmwId 00000001
attr HomeMatic room HomeMatic

setstate HomeMatic disconnected

Sobald ich dieses Attribut setzte ist mein FHEM und TabletUI nicht mehr erreichbar:
attr HomeMatic HM485d_bind 1

Die letzten Einträge im Log:
2018.01.26 22:36:08 1: PERL WARNING: Use of uninitialized value $HM485dCommandLine in concatenation (.) or string at ./FHEM/00_HM485_LAN.pm line 1103.
Can't kill a non-numeric process ID at ./FHEM/00_HM485_LAN.pm line 189.

Erst nach einem Reboot des PI ist FHEM wieder erreichbar. Was kann das sein?

Update Pi und Fhem habe ich vorab gemacht, genau wie im Wiki beschrieben.

Thorsten Pferdekaemper

Hi,
Das einzige ungewöhnliche ist das "setstate...disconnected". Lass das mal weg.
Gruß,
Thorsten
FUIP

M.Piet

#2
Das "setstate HomeMatic disconnected" kann ich nicht weglassen.

Ich lege das Gerät an:
define hm485 HM485_LAN localhost:2000
Sobald ich das anlege taucht die Zeile unter "Raw definition" das "setstate HomeMatic disconnected" auf.

In der fhem.cfg ist es so definiert:
define hm485 HM485_LAN localhost:2000
attr hm485 HM485d_device /dev/ttyUSB0
attr hm485 hmwId 00000001
attr hm485 room HM485

Aber direkt nach dem "attr hm485 HM485d_bind 1" ist mein FHEM und TabletUI nicht mehr erreichbar.

Und der letzte Logeintrag ist dieser:
PERL WARNING: Use of uninitialized value $HM485dCommandLine in concatenation (.) or string at ./FHEM/00_HM485_LAN.pm line 1103.
Can't kill a non-numeric process ID at ./FHEM/00_HM485_LAN.pm line 189.

Neue Einträge im Log gibt es erst nach einem Neustart des Pi.

Oder ist der Wikieintrag vielleicht nicht ganz aktuell und ich habe was vergessen?

In der Zeile 189 steht folgendes:
if(!($pid && kill(0, $pid))) {

M.Piet

Mal eine generelle Frage: ich habe doch nichts vergessen oder?

Als Hardware habe ich nur den Busabschluss, den HMW-IO-12 und den DIGITUS DA-70157.
Mehr brauch ich doch nicht oder? Rest streng nach Wiki eingerichtet.

Da muss doch was grundlegendes Faul sein, wenn ich das im Log bekomme: "PERL WARNING: Use of uninitialized value $HM485dCommandLine in concatenation "

Thorsten Pferdekaemper

FUIP

M.Piet

Hey Thorsten. Das hab ich auch. 😂

Vergessen zu erwähnen

Thorsten Pferdekaemper

FUIP

Thorsten Pferdekaemper

Hi,
ich bin jetzt dazugekommen, mir das Coding an den Stellen mal genauer zu betrachten. Ich habe keine Ahnung, warum das jetzt erst hochkommt.
Kannst Du mal versuchen, in der Datei 00_HM485_LAN.pm zwischen Zeile 187 und 188 folgendes einzufügen:

HM485_LAN_updateHM485dCommandLine($hash);

D.h. es müsste in der Gegend dann in etwa so aussehen:

sub HM485_LAN_Ready($) {
my ($hash) = @_;

if ( $hash->{STATE} ne "disconnected" ) {
return undef;  # nothing to do in this case
};
# It seems we are disconnected (not closed intentionally)
# If we handle the Daemon ourselves, then check whether it is still running
# and try to restart, if not
my $name = $hash->{NAME};
my $HM485dBind   = AttrVal($name, 'HM485d_bind', 0);
my $HM485dDevice = AttrVal($name, 'HM485d_device', undef);
if ($HM485dBind && $HM485dDevice) {
        HM485_LAN_updateHM485dCommandLine($hash);
my $pid = HM485_LAN_HM485dGetPid($hash, $hash->{HM485d_CommandLine});
if(!($pid && kill(0, $pid))) {
# seems it is not really running, try to start it
HM485_LAN_HM485dStart($hash);
return undef;  # in this case, an immediate openDev does not make sense
}
};
return HM485_LAN_openDev($hash, 1);
}

Bitte gib mir Bescheid, ob das hilft. Ich habe derzeit gerade kein Testsystem für HM-Wired aufgebaut, aber wenn das bei Dir funktioniert, dann werde ich's einchecken.
Gruß,
    Thorsten
FUIP

M.Piet

Hey Thorsten,

das hört sich an als hättest du einen Fehler gefunden?

OK, ich habe die Datei angepasst. Es sieht in der Tat wie in deinem Beispiel nun aus.
Aber der Fehler bleibt. Sobald ich "attr hm485 HM485d_bind 1" setzte, ist FHEM nicht mehr erreichbar. Erst nach einem Neustart geht FHEM wieder.

Der letzte Eintrag im Log auch diesmal:
2018.01.27 22:11:17 1: PERL WARNING: Use of uninitialized value $HM485dCommandLine in concatenation (.) or string at ./FHEM/00_HM485_LAN.pm line 1103.
Can't kill a non-numeric process ID at ./FHEM/00_HM485_LAN.pm line 189.


Zeile 1103: Ist in der FHEM/00_HM485_LAN.pm leer.....was sagt uns diese Meldung?
Zeile 189 (gleiche Zeile wie beim letzten mal, aber ein anderer Inhalt da wir eine Zeile davor was eingefügt haben):   
my $pid = HM485_LAN_HM485dGetPid($hash, $hash->{HM485d_CommandLine});
Direkt über dieser Zeile ist die Zeile HM485_LAN_updateHM485dCommandLine($hash);

Thorsten Pferdekaemper

Hi,
das heißt wahrscheinlich, dass Du nach Änderung der Datei FHEM nicht durchgestartet hast oder dass Du die Änderung nicht abgespeichert hast...
Da Du aber ja jetzt alles neu gestartet hast müsste sich irgend etwas ändern.
Gruß,
   Thorsten
FUIP

M.Piet

Hi Thorsten,
genau das war es.....vielen Dank für deine Hilfe. Nun klappt es. :) Das Wochenende ist gerettet. :)

Aber was ist das für ein Fehler und warum ist der nur bei mir zum tragen gekommen?

Thorsten Pferdekaemper

Zitat von: M.Piet am 27 Januar 2018, 22:22:01
das hört sich an als hättest du einen Fehler gefunden?
Ja, so ist das.

Zitat von: M.Piet am 27 Januar 2018, 23:41:48Aber was ist das für ein Fehler
Im Fall dass das IO-Device schon angelegt ist (d.h. FHEM wartet schon darauf, dass irgendwas reinkommt), aber das HM485d_bind-Attribut erst später gesetzt wird, dann wurde die Kommandozeile des HM485d nicht zusammengebaut und dem OS wurde ein leerer Befehl geschickt. (Bzw. Perl scheint das abzufangen.) Im Folgenden wird dann versucht, undef als Prozess-Id zu verwenden, was FHEM sehr übel nimmt. 

Zitat
und warum ist der nur bei mir zum tragen gekommen?
Vermutlich bist Du der erste, der HMW mit genau dem FHEM-Stand verwendet. Es kann auch sein, dass Du irgendwas ein ganz klein bisschen anders gemacht hast als alle anderen, wie z.B. an einer anderen Stelle "Save" gedrückt oder durchgestartet.

Ich habe die Korrektur jetzt hochgeladen, sollte also ab jetzt auch per update zu lösen sein.
Gruß,
   Thorsten
FUIP

M.Piet

Hi,

danke für die Erklärung. Und vor allem danke für das fixen. :)

Jetzt bekommt meine Frau beim drücken der Türklingel ein Snapshot der Kamera per Telegram geschickt. Der WAF ist dank deiner Hilfe enorm gestiegen. :)