PRESENCE-RemoteFritzbox

Begonnen von erwin, 27 Dezember 2013, 21:39:11

Vorheriges Thema - Nächstes Thema

erwin

Hi Dirk,

ZitatWie lange dauert's bis das script fertig ist? - schon länger, teilweise bis 15sec.
Das ist das Problem, irgendwas beschäftigt deine Fritzbox heftig, wenn du dort nichts findest, kannst du versuchen, das Timeout in der FritzBoxScan.pl etwas hinaufzuschrauben, allerdings mehr als 15 Sekunden wird nicht funktionieren, da dann das Timeout der PRESENCE Funktion zuschlägt.
etwa ab Zeile 56:
#### create telnet conn to FB
my $t = new Net::Telnet (Timeout => 5,  Prompt =>  '/# $/', Errmode =>  'return');
my $errmsg = $t->errmsg();
print "RFritzBoxScan: error on open Telnet to Fritzbox" if !($errmsg eq "");

l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

Luco

Servus,

bei der Suche nach Anwesenheitsfunktionen bin ich auf das hier vorgestellte Skript gestoßen.
Da ich eine gestellte Fritzbox Kabel nutze, würde ich gerne Variante 2 nutzen, komme jedoch nicht weiter.

Auf meinem Raspberry habe ich unter /opt/fhem-5.6 die credentials.cfg erstellt und unter /opt/fhem-5.6/FHEM die 99_RFritzBox.pm gefolgt von einem reload 99_RFritzBox.pm

Die credentials.cfg sieht so aus:


$credentials{RemoteFritzBox}{ipadress} = '192.168.178.1';
$credentials{RemoteFritzBox}{username} = '';
$credentials{RemoteFritzBox}{password} = 'xxxxxxxxxxxxxx';
$credentials{RemoteFritzBox}{model}    = 'FBLAN';


Einen Benutzernamen gibt es übrigens eigentlich gar nicht auf der Weboberfläche der Fritzbox.

Im Log taucht nun folgendes auf:


2015.05.16 21:44:50 1: PERL WARNING: Use of uninitialized value $serverbin in concatenation (.) or string at ./FHEM/99_RFritzBox.pm line 123.
2015.05.16 21:44:50 2: RemoteFritzBox Server-Task  starting
2015.05.16 21:44:52 1: PERL WARNING: Use of uninitialized value $serverbin in concatenation (.) or string at ./FHEM/99_RFritzBox.pm line 127.
2015.05.16 21:44:52 1: RemoteFritzBox Server could not be started
2015.05.16 21:44:52 2: PRESENCE (myEiFonStatus) - error while processing check: unexpected function output (expected 0 or 1): RemoteFritzBox Server could not be started


Logisch, serverbin muss bei Variante 2 auch gar nicht definiert werden oder gibt es da einen Fehler im Wiki?
Den Fehler Use of uninitialized value $serverbin in concatenation gab es hier im Thread schon mal, wurde aber dann nicht drauf eingegangen.
Was übersehe ich hier bei Variante 2 ?

Vielen Dank für eure Hilfe

erwin

Servus,

bitte poste doch auch mal deine definition, ich denke du hast dort einen Fehler drin....
PS: Username gibts sehr wohl in der FB, man muss ihn nur aktivieren, und das wird auch von AVM empfohlen...
... es geht aber grundsätzlich auch ohne, deine credentials.cfg ist ok!
Frage: was steht als letztes datum in der update history in 99_RFritzbox.pm ? (Zeile: 29ff)
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

melu

Hallo Zusammen,

an dieser Stelle möchte ich auch der Forum aktiv beiwohnen.

Ich habe dasselbe Problem wie Luco!

Zu der Hardware:

1 x Pi mit Wheezy (FHEM 5.6)
1 x FB 7390

Wenn ich nun nach Wiki die Methode 2 anwende, schmeißt mir die Log folgendes als Antwort:


2015.05.18 12:55:38 0: Server started with 10 defined entities (version $Id: fhem.pl 8574 2015-05-14 07:59:32Z rudolfkoenig $, os linux, user fhem, pid 11674)
2015.05.18 12:56:21 3: telnetForBlockingFn: port 36653 opened
2015.05.18 12:56:21 1: PERL WARNING: Use of uninitialized value $serverbin in concatenation (.) or string at ./FHEM/99_RFritzBox.pm line 123.
2015.05.18 12:56:21 2: RemoteFritzBox Server-Task  starting
2015.05.18 12:56:23 1: PERL WARNING: Use of uninitialized value $serverbin in concatenation (.) or string at ./FHEM/99_RFritzBox.pm line 127.
2015.05.18 12:56:23 1: RemoteFritzBox Server could not be started
2015.05.18 12:56:23 2: PRESENCE (Note4) - error while processing check: unexpected function output (expected 0 or 1): RemoteFritzBox Server could not be started


Ab dem Punkt wo ich eine PRECENCE Device definiere, kommt in der Konsole (Putty) die Meldung: "not defined", diese Meldung wiederholt sich dann alle 120 Sekunden.

Als erstes bin ich hin und habe den dummy und auch das device wieder gelöscht, anschließend ein Update gezogen und wieder alles wie im Wiki angewendet.
Die Varianten mit und ohne Benutzer - Anmeldung an der FB hab ich auch schon probiert, leider ohne Erfolg

Um auf die Frage einzugehen, was in der 99_RFritzbox.pm steht:


# update history:
# 2013-12-20 initial version (for RPI)
# 2014-02-02 improved starting of daemon and some debug msgs
# 2014-02-14 RemoteFrizBoxWeb added
# 2014-02-20 somec improvement to RemoteFrizBoxWeb & RemoteFrizBox (ping/ok handshake)
# 2014-03-25 minor fix of unitialized message
# 2014-10-20 public version 1.3 minor fixes & MAC-address support in addition to name
# 2014-11-18 public version 1.4 fixes in RFritzBoxScan, fix for connection refused on startup
# 2015-01-08 test   version 1.5 persistent login to FB for RemoteFrizBoxWeb
# 2015-01-20 test   version 1.6 avoid parallel queries for RemoteFrizBoxWeb
#                      support Fritz1750E Repeater (via RemoteFrizBoxWeb)
#                      support 2 Fritzboxes (2 ip-Addresses) at same time   
# 2015-01-22 public version 1.7
# 2015-03-22 public version 1.9 improved startup, use telnetforblocking for reporting back
#                               changed 'pidof' to 'ps -ef' for OSX compatibility
# 2015-03-25 public version 1.9.1 Loglevel change, fix unint msg on not found (line 272), no modification of global vars ($ipadress,...)
##############################################

Also die Aktuelle Datei...

muss in der fhem.pl nun noch ein Dienst zu den Startbedingungen geschrieben werden. Denn leider verstehe ich den "RemoteFritzBox Server-Task" noch nicht ganz, denn dieser kann scheinbar nicht initialisiert werden.
Was mache ich falsch? Bin für jeden Tipp zu haben!

Danke euch!

erwin

#229
Hi Luco & Melu,

Fehler gefunden - und zwar im wiki!!
nicht so:
define <myName> PRESENCE function {RemoteFritzBoxWeb("<FBdevicename/FB.MAC-Adress>")} 120 120
example by name:
  define myEiFonStatus PRESENCE function {RemoteFritzBox("myEiFon")} 120 120
or with MAC adress:
  define myEiFonStatus PRESENCE function {RemoteFritzBox("11:22:33:44:55:66")} 120 120

sondern so:
define <myName> PRESENCE function {RemoteFritzBoxWeb("<FBdevicename/FB.MAC-Adress>")} 120 120
example by name:
  define myEiFonStatus PRESENCE function {RemoteFritzBoxWeb("myEiFon")} 120 120
or with MAC adress:
  define myEiFonStatus PRESENCE function {RemoteFritzBoxWeb("11:22:33:44:55:66")} 120 120


das erste define war richtig, die Beispiele falsch... ich bessere gleich im WIKI aus!
PS: die commandref war auch richtig.....
sorrry und l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

melu

Hey Erwin,

eigentlich ja total Logisch, hinterher ist man immer schlauer..
Ich hab erst drauf geguckt und gedacht, was hat er nun geändert. Die erste Zeile ist ja noch Richtig, der Fehler ist ja erst im Beispiel. Das ist die Gefahr bei Copy & Paste. Vielen Dank für die Schnelle Hilfe, echt ein Tolle Forum, um so mehr Funktionen ich umgesetzt bekomme um so mehr Spaß macht mir mein neuer PI.

So nebenbei, es funktioniert nun bei mir!

LG Mel

agentclark

Moin,

auch von mir erstmal vielen Dank für den Code.
Bin nach Variante 2 aus dem Wiki vorgegangen. FritzBox ist eine 7490.

Aber leider funktioniert das alles noch nicht so wie es soll.
define RemoteFritzBoxWeb dummy
attr RemoteFritzBoxWeb event-on-update-reading none
attr RemoteFritzBoxWeb verbose 5
define droid PRESENCE function {RemoteFritzBoxWeb("xx:xx:xx:xx:xx:xx")} 120 120


$credentials{RemoteFritzBoxWeb}{ipadress} = '192.168.1.1';
$credentials{RemoteFritzBox}{username} = ''; #Anmeldung ohne Benutzername
$credentials{RemoteFritzBox}{password} = '*****';
$credentials{RemoteFritzBox}{model}    = 'FB';


und hier der Auszug aus dem Logfile:
2015.05.26 16:52:30 4: RemoteFritzBoxWeb(xx:xx:xx:xx:xx:xx) FB-number/model set to 0/FB
2015.05.26 16:52:30 1: PERL WARNING: Use of uninitialized value $FBlockfile in concatenation (.) or string at ./FHEM/99_RFritzBox.pm line 221.
2015.05.26 16:52:30 4: RemoteFritzBoxWeb(xx:xx:xx:xx:xx:xx) waiting 3 seconds for previous scan to complete.
2015.05.26 16:52:33 1: PERL WARNING: Use of uninitialized value $FBlockfile in concatenation (.) or string at ./FHEM/99_RFritzBox.pm line 225.
2015.05.26 16:52:33 4: RemoteFritzBoxWeb(xx:xx:xx:xx:xx:xx) waiting 2 seconds for previous scan to complete.
2015.05.26 16:52:35 4: RemoteFritzBoxWeb(xx:xx:xx:xx:xx:xx) waiting 3 seconds for previous scan to complete.
2015.05.26 16:52:38 4: RemoteFritzBoxWeb(xx:xx:xx:xx:xx:xx) waiting 1 seconds for previous scan to complete.
2015.05.26 16:52:39 4: RemoteFritzBoxWeb(xx:xx:xx:xx:xx:xx) waiting 2 seconds for previous scan to complete.
2015.05.26 16:52:41 2: PRESENCE (droid) - error while processing check: unexpected function output (expected 0 or 1): RemoteFritzBoxWeb(xx:xx:xx:xx:xx:xx) timeout waiting for lockfile


Danke für die Hilfe und Gruß
Agent

erwin

Hi Agent,
das hatten wir nocht nicht.....
Ein paar Fragen:
1) schau mal bitte in die 99_RFritzbox.pm, etwa zeile 95: - sollte so aussehen
  # prevent parallel WEB-queries
  my $FBlockfile = $attr{global}{modpath} . "fhem-RFritzBox-lock.tmp";

2) Was ergibt ein {return "|". $attr{global}{modpath} ."|"}, eingegeben auf der FHEM Kommandozeile?

3) unter welchem user läuft fhem - und darf dieser user auf das fhem-directory auch schreiben ?
das Problem scheint zu sein, daß die temporäre lock-file nicht angelegt bzw. geschrieben werden darf....
ein ls -l | grep fhem-RFitzBox-lock        ergibt bei mir folgendes:
ls -l | grep  fhem-RFritzBox-lock
-rw-r--r--  1 fhem dialout      0 Jan 17 16:16 fhem-RFritzBox-lock.tmp

l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

agentclark

#233
Moin Erwin,

danke für die schnelle Antwort.

Zeile 95 der 99_RFritzBox.pm:
my $FBlockfile = $attr{global}{modpath} . "fhem-RFritzBox-lock.tmp";


Die Ausgabe von return modpath ergibt
|.|
Das sieht ja mal nicht so gut aus.
Auch das ls -l | grep liefert mir nichts zurück.
FHEM läuft unter user fhem, der auch alle Rechte auf die Verzeichnisse hat.

Gruß Agent

erwin

Hi Agent,

das sieht bisher alles richtig aus, außer das fhem die file nicht anlegen kann..
ich versteh's zwar nicht, aber versuch bitte folgendes:
...und zwar in dem directory wo auch die fhem.pl file ist! (das ist bei mir z.B: /opt/fhem)

sudo touch fhem-RFritzBox-lock.tmp
sudo chown fhem:dialout fhem-RFritzBox-lock.tmp
sudo chmod 666 fhem-RFritzBox-lock.tmp
ls -l fhem-*

..und poste den output von dem ls -l

l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

agentclark

Moin Erwin,

hier der Output vom ls -l
-rw-rw-rw- 1 fhem dialout 0 Mai 26 22:53 fhem-RFritzBox-lock.tmp

Mir ist noch aufgefallen, dass ich keine Gruppe "dialout" habe. Bis jetzt gehören alle Dateien von FHEM dem User "fhem" und der Gruppe "root".
Habe es nun sowohl mit "dialout" als auch "root" als Gruppe probiert, der Fehler im Log von FHEM bleibt der gleiche.

Danke und Gruß Agent

erwin

#236
in den ls -l output sollten noch andere files vorkommen...
z.b:

-rw-r--r-- 1 fhem root     66008 May 26 20:43 fhem.cfg
-rw-r--r-- 1 fhem dialout  15544 Mar  3 08:36 fhem.cfg.demo
-rw-r--r-- 1 fhem dialout 111284 May 18 12:00 fhem.pl
-rw-rw-rw- 1 fhem dialout      0 May 26 22:43 fhem-RFritzBox-lock.tmp

...andernfalls bist du im falschen directory.
erwin


Am morgen sieht man besser......
Hi Agent,
ich denke ich hab den Fehler gefunden:
ersetze bitte in der 99_RFritzBox.pm die Zeile (etwa Line 95):
  my $FBlockfile = $attr{global}{modpath} . "fhem-RFritzBox-lock.tmp";
durch
  my $FBlockfile = $attr{global}{modpath} . "/fhem-RFritzBox-lock.tmp";
dann ein shutdown restart...
Ich versteh nicht, wieso das bisher nicht aufgefallen ist, und funktioniert hat....
Nur aus Interesse: welches Betriebssystem und welche perl version hast du ?
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

agentclark

Moin Erwin,

die Zeile in der 99_RFritzbox.pm habe ich korrigiert. Sag es ja nur ungern, aber der Fehler ist exakt der gleiche geblieben.

fhem.pl und fhem.cfg hab ich natürlich auch im Verzeichnis, hatte mit ls -l fhem-* gesucht.

Als System kommt Raspbian mit einem 3.18.11+ Kernel zum Einsatz und Perl müsste mit Version 5.14.2-21 auch die aktuelle sein.

Ist die Gruppe "dialout" eine standart FHEM-Gruppe oder hast du die manuell hinzugefügt. Wie gesagt, bei mir existiert die Gruppe nicht.

Danke und Gruß
Agent

erwin

ok, dann wirds brutal ;-))

Versuch bitte folgendes:
kopiere das in eine file "testflock.pl" im fhem-root verzeichnis.

#!/usr/bin/perl
################################################################
# testflock.pl
# testing file open & flock
# usage : sudo -u fhem ./testflock.pl (from fhem root directory)
#
use strict;
use warnings;

my $filename = "test1.txt";
my $wait = 0;

if (! open(FBLOCKFILE,">","$filename")) {
  print "cannot open Lockfile $filename\n";
  exit;
}

  while (! flock(FBLOCKFILE,6) && ($wait < 10)) {
     print "waiting $wait seconds for flock \n";
     $wait++;
     sleep 1;
  }

  unless ($wait < 10) {
    print "waittime exceeded\n";
    exit;
  }

  print "waited $wait seconds for flock \n";
  print "sleeping now for 20 seconds\n";
  sleep 20;

  flock(FBLOCKFILE,8); #unlock
  close(FBLOCKFILE);
  print "ok\n";
  exit;


und dann folgendes:

sudo chmod 777 testflock.pl
sudo chown fhem:dialout testflock.pl
sudo -u fhem ./testflock.pl


... und dann den output hier posten...
wenn alles gut geht, sollte es eine file "test1.txt" im Verzeichnis geben.

wg. dialout group - war beim debian-wheezy schon definiert...
l.g. erwin
FHEM aktuell auf RaspberryPI Mdl 1-4
Maintainer: 00_KNXIO.pm 10_KNX.pm
User: CUNO2 (868 SLOWRF) - HMS100xx, FS20, FHT, 1-Wire  - 2401(iButton), 18x20, 2406, 2413 (AVR), 2450,..,MQTT2, KNX, SONOFF, mySENSORS,....
Hardware:  Busware ROT, Weinzierl IP731, 1-Wire GW,...

agentclark

Sieht gut aus:
pi@smartpi /opt/fhem $ sudo -u fhem ./testflock.pl
waited 0 seconds for flock
sleeping now for 20 seconds
ok


pi@smartpi /opt/fhem $ ls -l test*
-rw-r--r-- 1 fhem dialout   0 Mai 27 15:22 test1.txt
-rwxrwxrwx 1 fhem dialout 738 Mai 27 15:21 testflock.pl


Danke und Gruß
Agent