FRITZBOX - Fritz!Box und Fritz!Fon sprechen - Jetzt auch ohne Telnet

Begonnen von tupol, 28 November 2014, 23:46:54

Vorheriges Thema - Nächstes Thema

tupol


JoWiemann

Hallo,

nach dem nun das Modul fehlerfrei auf meinem Test-RPi läuft wollte ich es in die Produktionsumgebung übernehmen und siehe da ich bekomme leider folgende Fehlermeldung beim Starten von FHEM: configfile: Unknown module FritzBox

Mit verbose 5 wird auch keine weitere Information protokoliert. Ein reload 72_FRITZBOX.pm verläuft fehlerfrei. Ich bin ratlos!!!

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

tupol


JoWiemann

Das ist ja das Komische. Es wird FritzBox ausgegeben. Meine Defines sehen übrigens so aus:

define Meine FRITZBOX
attr Meine verbose 5
attr Meine fritzBoxIP 192.168.0.1
attr Meine pwdFile /usr/share/fhem/fb_pw.file
attr Meine room FB7272
attr Meine icon icoTelefon

Ich habe zunächst an einen Cross Over Fehler gedacht und alle Einträge FritzBox umbenannt (Ich hatte SVGs mit FritzBox benannt). Hat leider keinen Erfolg gebracht. Wenn ich die attr Zeilen weg lasse bleibt der Fehler bestehen, wenn ich das define auskommentiere verschwindet auch der Fehler.

Das FHEM befindet sich übrigens auf dem aktuellen SVN Stand vom 22.12. (Heute n Nachmittag nach 10 Sunden Probelauf auf Test auch im Prod nachgezogen)

Grüße Jörg

Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

tupol

shutdown restart?
von hand über die Befehlszeile probieren?

JoWiemann

Alles schon probiert.

Das Starten von Hand zeigt nicht besonderes auf der Konsole. Ich hab auch schon den RPi neu gebootet. Eigentlich alles versucht, was sonst von der freundlichen Hotline vorgeschlagen wird.

- FHEM neu gestartet
- RPi neu gebootet
- FHEM auf der Konsole gestartet
- fhem.save gelöscht
- FritzBox als Text aus allen fhem.cfg Einträgen gelöscht
- 72_FRITZBOX.pm gelöscht und aus dem SVN neu geladen
- verbose 5 gesetzt und LOG analysiert

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

tupol

#171
Ich meine damit, nicht die cfg zu nutzen - sondern das kleine Befehlsfenster

Gunther

Zitat von: tupol am 23 Dezember 2014, 19:59:33
Nur im Log.

Danke, habe hier etwas neues:
2014.12.23 21:34:09 1: FRITZBOX Fritzbox: Readout_Start.462 Old readout process still running. Killing old process HASH(0x377d1d8)
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

tupol

Das ist der selbe Fehler. Ich glaube aber nicht, dass es an FRITZBOX liegt. Das läuft laut LOG sauber.
Normalerweise hilft bei dem blocking-Fehler ein shutdown restart und dann einige Minuten zu warten ohne irgendwelche Befehle abzusetzen.

JoWiemann

#174
Zitat von: tupol am 23 Dezember 2014, 21:41:52
Ich meine damit, nicht die cfg zu nutzen - sondern das kleine Befehlsfenster

Update: Fehler gefunden!!!

Ich habe ein Modul 99_FritzBox.pm

In der fhem.pl wird folgendes durchsucht:

  if(!$modules{$m}) {                           # Perhaps just wrong case?
    foreach my $i (keys %modules) {
      if(uc($m) eq uc($i)) {
        $m = $i;
        last;
      }
    }
  }

Vielleicht kann Rudolph hier die Umwandlung in Upper Case heraus nehmen bzw auf redundante Namen prüfen. Ich war bisher davon ausgegangen, dass durch die Nummerierung eine Eineindeutigkeit hergestellt wird. Habe meine 99_FritzBox.pm nun umbenannt und nun läuft es.

Als Hilfestellung würde ich gerne die beiden Log3-Einträge von Rudolph in der fhem.pl ergänzt wisssen, da diese mir weiter geholfen haben:


#####################################
sub
CommandDefine($$)
{
  my ($cl, $def) = @_;
  my @a = split("[ \t][ \t]*", $def, 3);
  my $name = $a[0];

  return "Usage: define <name> <type> <type dependent arguments>" if(int(@a) < 2);

  return "$name already defined, delete it first" if(defined($defs{$name}));

  return "Invalid characters in name (not A-Za-z0-9.:_): $name" if($name !~ m/^[a-z0-9.:_]*$/i);

  my $m = $a[1];

  Log3 undef, 5, "CommandDefine " . $m;

  if(!$modules{$m}) {                           # Perhaps just wrong case?
    foreach my $i (keys %modules) {
      if(uc($m) eq uc($i)) {
        $m = $i;
        last;
      }
    }
  }

  my $newm = LoadModule($m);

  Log3 undef, 5, "CommandDefine " . $newm;

  return "Cannot load module $m" if($newm eq "UNDEFINED");
  $m = $newm;

  return "Unknown module $m" if(!$modules{$m} || !$modules{$m}{DefFn});

  my %hash;

  $hash{NAME}  = $name;
  $hash{TYPE}  = $m;
  $hash{STATE} = "???";
  $hash{DEF}   = $a[2] if(int(@a) > 2);
  $hash{NR}    = $devcount++;
  $hash{CFGFN} = $currcfgfile
        if($currcfgfile ne AttrVal("global", "configfile", ""));

  # If the device wants to issue initialization gets/sets, then it needs to be
  # in the global hash.
  $defs{$name} = \%hash;

  my $ret = CallFn($name, "DefFn", \%hash, $def);
  if($ret) {
    Log 1, "define $name $def: $ret";
    delete $defs{$name};                            # Veto
    delete $attr{$name};

  } else {
    foreach my $da (sort keys (%defaultattr)) {     # Default attributes
      CommandAttr($cl, "$name $da $defaultattr{$da}");
    }
    if($modules{$m}{NotifyFn} && !$hash{NTFY_ORDER}) {
      $hash{NTFY_ORDER} = ($modules{$m}{NotifyOrderPrefix} ?
                $modules{$m}{NotifyOrderPrefix} : "50-") . $name;
    }
    %ntfyHash = ();
    DoTrigger("global", "DEFINED $name", 1) if($init_done);
  }
  $lastDefChange++ if(!$hash{TEMPORARY});
  return $ret;
}



Ok, ergänze meine Liste:

define Meine FRITZBOX über FHEM-Kommandozeile eingegeben -> Rückmeldung: Unknown module FritzBox

Habe etwas gerätselt bis ich verstanden habe, was Du mit "von hand über die Befehlszeile probieren?" noch meine könntest. Für mich las sich das wie: Starten FHEM von der RPi-Befehlszeile !

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

Hallo tupol,

kannst Du noch folgende readings implementieren:

    "FritzCPUTemperature" => int(`ctlmgr_ctl r power status/act_temperature`).'°'
    "FritzDslConnectionStatus" => `ctlmgr_ctl r dslstatistic status/ifacestat0/connection_status`
    "FritzDslIP-Adress" => `ctlmgr_ctl r dslstatistic status/ifacestat0/ipaddr`
    "FritzWLANAktiveStations" => `ctlmgr_ctl r wlan settings/active_stations`

Danke Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Gunther

Ich habe ebenfalls eine 99_myFritzboxUtils (oder so ähnlich) gehabt. Diese habe ich zur Sicherheit mal rausgeworfen. Genauso den Aufruf der FritzboxUtils in der 99_myUtils.

Hoffe, das ist ok. Meine Probleme scheinen sich damit leider nicht gelegt zu haben.

Muss die Fritzbox auf Initializing stehen?
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

tupol

Zitat von: JoWiemann am 24 Dezember 2014, 00:17:48
Hallo tupol,

kannst Du noch folgende readings implementieren:

    "FritzCPUTemperature" => int(`ctlmgr_ctl r power status/act_temperature`).'°'
    "FritzDslConnectionStatus" => `ctlmgr_ctl r dslstatistic status/ifacestat0/connection_status`
    "FritzDslIP-Adress" => `ctlmgr_ctl r dslstatistic status/ifacestat0/ipaddr`
    "FritzWLANAktiveStations" => `ctlmgr_ctl r wlan settings/active_stations`

Danke Jörg

Gibt es die nicht schon in sysmon? Was automatisierst Du damit?

JoWiemann

Zitat von: Gunther am 24 Dezember 2014, 02:18:00
Muss die Fritzbox auf Initializing stehen?

Die 72_FRITZBOX.pm setzt kein entsprechendes state. Vielleicht kann tupol ja noch folgendes unterbringen:

72_FRITZBOX.pm auf einer FritzBox:    $hash->{STATE} = 'initialized';

72_FRITZBOX.pm remote:    $hash->{STATE} = 'waiting'; # if IP and/or Password not set

72_FRITZBOX.pm remote:    $hash->{STATE} = 'opened'; # if IP and Password and connect to Telnet Ok

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

Zitat von: tupol am 24 Dezember 2014, 11:26:37
Gibt es die nicht schon in sysmon? Was automatisierst Du damit?

Du hast recht, war gestern Abend doch schon spät :-)

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM