Timingprobleme beim HM485d-Server und Fehler bei DevIo.pm und TcpServerUtils.pm

Begonnen von Ralf9, 28 Januar 2015, 14:34:07

Vorheriges Thema - Nächstes Thema

UweH

OK, ich glaube, ich habe es hinbekommen. Jetzt bekomme ich beim Start von FHEM diese Meldung:
Undefined subroutine &main::TimeNow called at /opt/fhem/FHEM/lib/HM485/HM485d/../../../DevIo.pm line 20.

Was kann ich jetzt dagegen noch tun?

Danke

Ralf9

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

UweH

OK, Danke, Zeile 20 auskommentieren war der letzte Kick.
Also alles in allem habe ich "use Errno qw(:POSIX);" in HM485d.pl eingefügt und Zeile 20 in DevIO.pm auskommentiert... ::)

Danke für die Hilfe

Ralf9

Hallo Uwe,

wo hast Du das "use Errno qw(:POSIX);" in die HM485d.pl eingefügt?

Bei der aktuellen DevIO.pm
"# $Id: DevIo.pm 7099 2014-11-30 08:51:47Z rudolfkoenig $"
wurde außer dem "setReadingsVal(.." in Zeile 20 noch die beiden folgenden Änderungen vorgenommen.
Diese Änderungen dürften nur das RS485 LAN-Interface betreffen.

Interessant wäre, ob diese beiden Änderungen Vor- oder Nachteile haben. Beim Starten und beim normalen Betrieb dürfen in der fhem-log keine "Response TimeOut" stehen.


Hier wurde die bufsize von 256 auf 4096 erhöht:

sub
DevIo_DoSimpleRead($)
{
  my ($hash) = @_;
  my ($buf, $res);

  if($hash->{USBDev}) {
    $buf = $hash->{USBDev}->input();

  } elsif($hash->{DIODev}) {
    $res = sysread($hash->{DIODev}, $buf, 4096);
    $buf = undef if(!defined($res));

  } elsif($hash->{TCPDev}) {
    $res = sysread($hash->{TCPDev}, $buf, 4096);
    $buf = "" if(!defined($res));

  }
  return $buf;
}



Und hier wurde aus
$buf = DevIo_DoSimpleRead($hash);
das hier
$buf = DevIo_SimpleReadWithTimeout($hash, 1);

# If called directly after a select, it should not block.
sub
DevIo_SimpleRead($)
{
  my ($hash) = @_;
  my $buf = DevIo_DoSimpleRead($hash);

  ###########
  # Lets' try again: Some drivers return len(0) on the first read...
  if(defined($buf) && length($buf) == 0) {
    $buf = DevIo_SimpleReadWithTimeout($hash, 1);
  }

  if(!defined($buf) || length($buf) == 0) {
    DevIo_Disconnected($hash);
    return undef;
  }
  return $buf;
}


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

UweH

Hallo Ralf,

da sich die Zeile in der TcpServerUtils unterhalb von "package main;" befand, habe ich sie in der HM485d.pl auch unter "package main;" eingefügt, steht jetzt in Zeile 174.
Ich habe bisher keine TimeOuts oder andere böse Meldungen im Log.

Zitat
Bei der aktuellen DevIO.pm
"# $Id: DevIo.pm 7099 2014-11-30
Ich habe die 7930 vom 10.02.15., ist aber mit Deinen Angaben identisch.

Gruß
Uwe

Ralf9

Zitat von: UweH am 15 Februar 2015, 12:03:41
Ich habe die 7930 vom 10.02.15., ist aber mit Deinen Angaben identisch.

Kannst Du diese Datei mal hier anhängen?

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

UweH

Ist von hier. Ich meine aber, dass ich die gestern auch über das Update bekommen habe.

Ralf9

Danke für den Link, da kann man mit compare direkt 2 Versionen vergleichen und hat ein Hinweis zu dem entsprechenden Forumsbeitrag.
Diese Lösung mit dem nur auskommentieren der Zeile 20 hat aber den Nachteil, daß Du dies beim nächsten Update evtl wieder tun mußt.

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

UweH

Da mir dieser Mist mit der DevIo.pm schon zweimal passiert ist, habe ich die jetzt vom Update ausgeschlossen...bis dann eine mal wieder eine andere Datei geändert wird, und dann gar nichts mehr geht...  ::)

holzwurm83

Hallo zusammen,


ich würde gerne mein Fhem auch auf den neusten Stand bring. Allerdings habe ich nach dem letzten Totalausfall große bedenken! Habe jetzt auch wieder mein Testsystem am lauen und würde es damit gerne wagen. Könnt ihr mir alle Dateien, die ihr angepasst habt und die ersetzt werden müssen hier hochladen und zur Verfügung stellen?

Danke euch!
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN

UweH

Hier sind die Dateien, Folgendes ist geändert: Diese Zeile: "use Errno qw(:POSIX);" (ohne " ") eingefügt in fhem/FHEM/lib/HM485/HM485d.pl unter "package main;", Zeile 174, in fhem/FHEM/DevIo.pm Zeile 20 mit einem # auskommentiert.

Ich habe dann noch die DevIo.pm vom Update ausgeschlossen:
attr global exclude_from_update DevIo.pm

Gruß
Uwe

rudolfkoenig

Zitatattr global exclude_from_update DevIo.pm

Waere es nicht klueger in HM485d.pl
use Errno qw(:POSIX);

und eine Kopie von TimeNow() einzufuegen?

UweH

Zitat von: rudolfkoenig am 15 Februar 2015, 19:04:38
Waere es nicht klueger
Mit Sicherheit...wenn man weiß, was man tut  ;)
Aber wenn man sich den ganzen Kram zusammenstoppelt, dann ist man froh, wenn es funktioniert und einem beim nächsten Update nicht wieder alles zusammenstürzt.
Zitatuse Errno qw(:POSIX);
in HM485d.pl einfügen haben wir ja getan, aber
ZitatKopie von TimeNow()
Siehe oben: Wenn man weiß, was man tut. Wo eine Kopie einfügen und was bewirkt das?

Gruß
Uwe

Ralf9

Zitat von: rudolfkoenig am 15 Februar 2015, 19:04:38
und eine Kopie von TimeNow() einzufuegen?
Würden wir gerne machen, aber mit dem TimeNow() ist es nicht getan.
Reicht dieses, oder muß noch mehr rein?

# Forward declarations
#
sub FmtDateTime($);
sub TimeNow();
sub setReadingsVal($$$$);


sub
TimeNow()
{
  return FmtDateTime(time());
}


sub
FmtDateTime($)
{
  my @t = localtime(shift);
  return sprintf("%04d-%02d-%02d %02d:%02d:%02d",
      $t[5]+1900, $t[4]+1, $t[3], $t[2], $t[1], $t[0]);
}


sub
setReadingsVal($$$$)
{
  my ($hash,$rname,$val,$ts) = @_;
  $hash->{READINGS}{$rname}{VAL} = $val;
  $hash->{READINGS}{$rname}{TIME} = $ts;
}



Bei use ist bis jetzt dieses drin:

package main;

use strict;
use warnings;
use Time::HiRes qw(gettimeofday);
use Cwd qw(abs_path);
use File::Basename;
use Getopt::Long;
use Pod::Usage;
use bytes;
use Errno qw(:POSIX);

use FindBin;
use lib abs_path("$FindBin::Bin/..");

use Constants;
use Util;
use HM485d::HM485_Protocol;

use vars qw(%selectlist);  # devices which want a "select"
use vars qw(%readyfnlist); # devices which want a "readyfn"
use vars qw($devcount);    # To sort the devices
use vars qw(%defs);        # FHEM device/button definitions
use vars qw(%hash);
use vars qw(%attr);

# Todo: for development only.
use Data::Dumper;


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

holzwurm83

Zitat von: UweH am 15 Februar 2015, 17:39:59
Hier sind die Dateien, Folgendes ist geändert: Diese Zeile: "use Errno qw(:POSIX);" (ohne " ") eingefügt in fhem/FHEM/lib/HM485/HM485d.pl unter "package main;", Zeile 174, in fhem/FHEM/DevIo.pm Zeile 20 mit einem # auskommentiert.

Ich habe dann noch die DevIo.pm vom Update ausgeschlossen:
attr global exclude_from_update DevIo.pm

Gruß
Uwe

Hallo Uwe,

danke für die Dateien. Bei mir läuft das leider noch nicht ganz. Der Bus startet zwar, bricht allerdings ohne Meldung wieder ab.

2015.02.19 16:53:28 3: HM485_LAN: Connect to HM485d delayed for 2 seconds
2015.02.19 16:53:28 3: HM485_LAN: Start HM485d with command line: ./FHEM/lib/HM485/HM485d/HM485d.pl --serialNumber SGW0123456 --device 192.168.136.22:5000
2015.02.19 16:53:28 3: HM485_LAN: HM485d was started with PID: 90209
2015.02.19 16:53:28 3: HM485: RESPONSE TIMEOUT for 0000A374
2015.02.19 16:53:29 3: HM485: RESPONSE TIMEOUT for 0000A374
2015.02.19 16:53:30 3: HM485: RESPONSE TIMEOUT for 0000A374
2015.02.19 16:53:30 3: Opening HM485_LAN device localhost:2000
2015.02.19 16:53:31 3: HM485: RESPONSE TIMEOUT for 0000A374
2015.02.19 16:53:32 3: HM485: RESPONSE TIMEOUT for 0000A374
2015.02.19 16:53:33 3: HM485: RESPONSE TIMEOUT for 0000A374
2015.02.19 16:53:36 3: Can't connect to socket!
- Fhem auf einem MacMini Server
- CUL; HMLAN; CUNO2 für FS20; HM-Wired RS485 LAN Gateway
- HMW_Sen_SC_12_FM; HMW_LC_Sw2_DR; HMW_LC_Bl1_DR; HMW_IO_12_Sw7; HMW_IO_12_Sw14_DR; HMW_IO_12_FM; HBW_1W_T10
- HM-TC-IT-WM-W-EU; HM-CC-RT-DN