FHEM Home Automation 7270

d1dd1

Neuer User
Mitglied seit
25 Jun 2009
Beiträge
31
Punkte für Reaktionen
0
Punkte
6
Hallo,

ich versuche grad verzweifelt FHEM nach der folgenden Anleitung zu installieren.
http://www.koeniglich.de/fhem/fritzbox.html

Leider bekomme ich es nicht wirklich hin :((
Brauche ich noch Perl oder reicht das Freetz-Paket MicroPerl ?

Hat es jemand am Laufen und kann mir helfen?

Gibt es irgendwo eine genauere Anleitung beziehungsweise ist in nächster Zeit eine Integration einer aktuelleren Version (aktuell 5.0) als Paket in Freetz geplant?
 
Nun, wenn du der Anleitung folgen würdest, wüsstest du, dass dort Perl gebaut wird. Wenn du es mit Microperl nicht hinbekomms,t versuch doch mal den angegebenen Weg. Sonst hat das wenig mit Freetz zu tun, wie ich das sehe.
 
lib Probleme mit Freetz

Hallo,
ich habe ein Problem mit den libs in freetz.

Ich versuche fhem laufen zu lassen mit einem Perl Packet, dass fuer die Fritzbox gebaut wurde.

Wenn ich das original AVM image nehme geht das auch.

Wenn ich jedoch ein gefreetztes Image nehme erhalte ich folgenden Fehler:

Code:
perl: can't resolve symbol '__unpack_d'
Zur Info ich habe eine 7270 v2 mit 04.86 und freetz-devel-6017 firmware.

Das Perl Packet stammt von hier:
http://www.koeniglich.de/fhem/fritzbox.html

Kann mir einer der Experten helfen, wo ich anfangen soll zu suchen.

Danke

Gruss,
Wolle

PS das ganze wird zurzeit auch hier im FHEM Forum diskutiert, ich denke aber es ist eher eine Freetz Sache:
http://groups.google.com/group/fhem-users/browse_thread/thread/7e6f2996d8ef194a#
 
Als erstes ohne Deine .config wird Dir keiner helfen können und auch wollen, denn Glaskugeln sind grade Mangelware...

Ausnahmsweise, wirklich ausnahmsweise, bemühe ich mal meine Glaskugel. In Deiner .config ist folgender Eintrag FREETZ_STRIP_LIBRARIES=y zu finden. Und die Lösung des Problems ist entweder die entsprechende menuconfig-Option abzuschalten (bevorzugt) oder diese Patches anzuwenden 1, 2 und anschließend alles nötige tun, damit diese auch greifen... Was es alles ist, wirst Du selbst rausfinden müssen. Deine .config wird Dir dabei helfen.
 
Hi,
hier meine config. (siehe nächster Post)

FREETZ_STRIP_LIBRARIES ist nicht gesetzt.

(Ich hab allerdings nicht gefunden, wo das im menuconfig gesetzt wird.)

Was ich jedoch gefunden habe ist unter compiler options:
uclibc config = 8MB oder = mod

Was bedeutet das denn? Wird hierdurch die lib abgespeckt?

Gruss,
Wolle
 
sorry der upload hat nicht geklappt und über edit kann ich keine datei ergänzen

=> 2. Versuch
 

Anhänge

  • config.txt
    6.1 KB · Aufrufe: 54
Dann hat sich meine Glaskugel getäuscht...

Lösche mal folgende Dateien unter perl/lib/ libgcc_s* und libutil* - es hat noch nie zu was gutem geführt, uClibc- und gcc-Libraries wild zu mischen, sie sind schon abwährtkompatibel aber aufwährts hat noch keiner versprochen (AVM verwendet gcc-3.4, die von fhem-perl sind mit gcc-4.2.0 übersetzt und in freetz wird 4.4.5 verwendet, daher mag es mit original firmware laufen, aber nicht mit freetz 3.4 < 4.2 < 4.4.5). Danach ersetze in dem rc.fhem-Script die Zeile
Code:
export LD_LIBRARY_PATH=/var/perl/lib
durch
Code:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}/var/perl/lib/perl5/5.6.2

und schau, obs was gebracht hat
 
Leider wirft mich das eher wieder zurück. Ich erhalte die Fehlermeldung:

Code:
Compilation failed in require at /var/usr/lib/perl5/5.6.2/IO/ 
 Handle.pm line 256. 
   BEGIN failed--compilation aborted at /var/usr/lib/perl5/5.6.2/IO/ 
 Handle.pm line 256. 
   Compilation failed in require at /var/usr/lib/perl5/5.6.2/IO/ 
 Socket.pm line 11. 
   BEGIN failed--compilation aborted at /var/usr/lib/perl5/5.6.2/IO/ 
 Socket.pm line 11. 
   Compilation failed in require at fhem.pl line 34. 
   BEGIN failed--compilation aborted at fhem.pl line 34.
Das lässt sich beheben, wenn man die libc.so.0 in /var/usr/lib kopiert.
Mit beheben meine ich ich erhalte dann stattdessen die Fehlermeldung:
Code:
perl: can't resolve symbol '__unpack_d'
Dabei ist die lib auch in /lib vorhanden (ich hab /lib auch in den LD_LIBRARY_PATH eingefügt.)
 
@er13
Das verwendete Perl Binary ist ja nicht mit der uClibc (Freetz) gebaut, die auf der Box ist.

Vielleicht hätte der Autor ein statisches Perl Binary bereitstellen sollen.

Gruß
Oliver
 
Das lässt sich beheben, wenn man die libc.so.0 in /var/usr/lib kopiert.
Mit beheben meine ich ich erhalte dann stattdessen die Fehlermeldung:
Code:
perl: can't resolve symbol '__unpack_d'
Lässt sich beheben??? Machst Du Witze? Der steigt doch noch eher aus. unpack_d-Meldung bedeutet, dass perl-Binary nicht mal geladen werden konnte, es kommt nicht mal zur Ausführung von diesem. "Compilation failed in require at" bedeutet, dass perl zwar geladen werden konnte, aber irgendwelche perl-Module-Abhängigkeiten nicht aufgelöst werden konnten...

/lib und /usr/lib in LD_LIBRARY_PATH aufzunehmen macht (oder heißt es hat) überhaupt keinen Sinn, in diesen wird immer gesucht.

@er13
Das verwendete Perl Binary ist ja nicht mit der uClibc (Freetz) gebaut, die auf der Box ist.
Dennoch wüsste ich nicht, warum es nicht laufen sollte. Es läuft ja angeblich ohne freetz, d.h. sollte schon binär kompatibel sein.
 
Zuletzt bearbeitet:
So, damit perl von der fhem-Seite bei mir startet musste ich folgendes tun:

  • export PERL5LIB=/var/media/ftp/uStor01/perl/lib/perl5:/var/media/ftp/uStor01/perl/lib/perl5/5.6.2
  • in dem 5.6.2 Verzeichnis Symlink mit dem Namen IO auf io anlegen (sonst kam 'Can't locate IO/Socket.pm')
  • danach kam die Meldung 'can't resolve symbol 'gcvt''

Um dieses Problem zu beheben, könnte man in der .config von uClibc die Option UCLIBC_SUSV3_LEGACY aktivieren. Aber ich war zu faul, uClibc neu zu übersetzen. Daher habe ich in lib/perl5/5.6.2/Config.pm d_Gconvert='gcvt((x),(n),(b))' durch d_Gconvert='sprintf((b),"%.*g",(n),(x))' ersetzt und folgenden Code als shared library übersetzt (d.h. $(TARGET_CC) -shared -o gcvt.so gcvt.c) (da das Symbol durch obige Änderung sowieso nicht verwendet wird, darf die Funktion null liefern):
Code:
char* gcvt(double d, int i, char* c) {
  return 0;
}

danach konnte ich perl starten:
Code:
LD_PRELOAD=/var/media/ftp/uStor01/gcvt.so /var/media/ftp/uStor01/perl/bin/perl fhem.pl fhem.cfg


Edit:
@wollet42: für Dich wäre es wahrscheinlich doch am einfachten wenn Du keine download- sondern selbstgebaute toolchain verwenden würdest und eben UCLIBC_SUSV3_LEGACY aktivierst.
 
Zuletzt bearbeitet:
so, hat ein bischen gedauert.

Leider bin ich nicht weiter gekommen. Ich hab wie von er13 beschrieben die toolchain neu gebaut und alles neu kompiliert mit UCLIBC_SUSV3_LEGACY aktiviert.

Leider erhalte ich wieder die Meldung
Code:
Compilation failed in require at /var/usr/lib/perl5/5.6.2/IO/ 
 Handle.pm line 256. 
   BEGIN failed--compilation aborted at /var/usr/lib/perl5/5.6.2/IO/ 
 Handle.pm line 256. 
   Compilation failed in require at /var/usr/lib/perl5/5.6.2/IO/ 
 Socket.pm line 11. 
   BEGIN failed--compilation aborted at /var/usr/lib/perl5/5.6.2/IO/ 
 Socket.pm line 11. 
   Compilation failed in require at fhem.pl line 34. 
   BEGIN failed--compilation aborted at fhem.pl line 34.
Irgendwie glaube ich fehlen libs oder die libs sind irgendwie abgespeckt.

Hier meine lib Liste
Code:
ld_uClibc
libFLAC
libart_lgpl_2
libavcodec
libavformat
libavutil
libcrypt
libdl
libexif
libfreetype
libfreetz
libgcc_s
libglib_2
libid3tag
libintl
libjpeg
libltdl
libm
libmatrixssl
libnsl
libogg
libpcap
libpcre
libpcreposix
libpng12
libpopt
libpthread
libresolv
librt
libsqlite3
libuClibc
libusb
libutil
libvorbis
libz
Fehlt da was, bzw hast evtl andere libs noch drin?

Oder gibts in freetz oder der toolchain irgendwo ne Option die libc abzuspecken?
 
Hast Du die Libraries unter perl/lib gelöscht, den Symlink (IO auf io) angelegt? Wie gesagt, bei mir geht es mit den oben beschriebenen Änderungen?

Fehlt da was, bzw hast evtl andere libs noch drin?
Würde irgendeine Library fehlen, so würde die Fehlermeldung anders lauten

Oder gibts in freetz oder der toolchain irgendwo ne Option die libc abzuspecken?
FREETZ_STRIP_LIBRARIES, laut Deiner .config ist diese bei Dir jedoch aus
 
Zuletzt bearbeitet:
ja, libs geloescht.

symlink nicht gesetzt, da usb stick fat formatiert ist. Ich erhalte so jedoch nicht die Meldung 'Can't locate IO/Socket.pm'

Ich hab jedoch mal testweise io/ umbenannt in io_mod/ und dann erhalte ich 'Can't locate IO/Socket.pm'.

D.h. er findet die io/... auch unter IO/... und es sollte somit bei fat auch ohne symlink gehen, oder verstehe ich was falsch?

Wo kann ich denn noch ansetzen? :confused:
 
Zuletzt bearbeitet:
Würd es auch gerne auf mein 3270 installieren aber ohne ne deutsche anleitung werd ich es wohl nicht hinbekommen :(
 
etwas OT: welche Hardware benötige ich da?wie sieht es mit der verkabelung aus? die teuer ist der Spaß?
 
Moin wollet42,

ich habe die gleiche Fehlersituation wie Du:
Compilation failed in require at /var/usr/lib/perl5/5.6.2/IO/Handle.pm line 256.
...
Ausgangssituation:
- FritzBox 7270
- Firmware: 54.04.80
- FHEM: fhem45-on-fritzbox.tgz
Hast Du inzwischen eine Lösung gefunden?

Schönen Gruß
Manfred
 
Hi Manfred,
ich hatte es aufgegeben bis ich über einen anderen Fritzbox mod gestolpert bin:

http://wiki.ip-phone-forum.de/router:firmware-mods:phoenix:start

Der installiert dir quasi ein debian in einem chroot (leider ist der Stand noch etch sodass apt-get update diverse file not found liefert)
perl ist vorhanden und fhem klappt mit dem offiziellen download der version 5 von fhem.de

Hab es derzeit auf einer alten 7170 laufen, die ich noch hatte.
FHZ/CUL/CUN weiss ich nicht obs geht, da ich keines habe. Ich hab derzeit ein IPWE angeschlossen, das geht.

PS freetz kann auch ein debootstrap installieren => weitere Möglichkeit ein debian zu installieren

Edit:
- die apt-get update Fehler kriegt man ueber eine geaenderte sources.list weg
Das hat mir geholfen:
http://www.huschi.net/16_396_de-debian-etch-sources-list.html

- CUL benoetigt warscheinlich Kernel Module. Falls die im AVM Kernel nicht da sind kann man per freetz.org eine neue Firmware bauen und darin einen neuen Kernel backen. Anschliessend den Phoenix starten, sollte eigentlich auch bei einem freetz image gehen.
 
Zuletzt bearbeitet:
Hi,
mittlerweile geht fhem auch mit freetz:
http://www.fhemwiki.de/index.php/AVM_Fritz!Box

Hab es auf einer 7170 am Laufen.
Wichtig ist jedoch, dass man den stable Zweig verwendet, sonst kommt wieder 'can't resolve symbol 'gcvt''

@ Freetz Entwickler:
Soweit ich die Erklärungen oben verstehe liegt dass an der uClibc un der Option UCLIBC_SUSV3_LEGACY

Kann man das evtl im freetz-trunk bzw in der hinterlegten toolchain wieder ändern (wie oben erwähnt geht es ja im stable Zweig)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.