Connection Tracking (FRITZ!Box) mit der Zipabox

Hallo Zusammen,

ich bin seit Kurzem im Besitz der Zipabox und ein Freund von Helle.
Neulich bin ich auf Helle zugegangen und ich habe Ihn gefragt, ob ich auch mal einen Beitrag verfassen kann, wenn ich was interessantes zu berichten habe …. und das habe ich jetzt:

Ich persönlich finde das Thema „Connection Tracking“ spannend, also daß man sehen kann, wer zu Hause ist und wer nicht.
Mit so einem Connection Tracking Modul, würde man neue /erweiterte Optionen zur Verfügung haben. Da ich nichts gefunden habe, was die Zipabox selbst nativ unterstützt, habe ich mir selber was programmiert, auf Basis der Zipato API, die die Zipabox zur Verfügung stellt. Das möchte ich euch nun einmal vorstellen wollen.

Die Grundidee ist, dass ich mir von meiner FRITZ!Box alle bekannten Geräte ausgeben lasse und ob die gerade online bzw. offline sind. Dieser Output wird dann in einer Datei gespeichert.

Im nächsten Schritt legen wir in einer weiteren Datei die Geräte fest, die überwacht werden sollen.
Zu guter Letzt gibt es dann ein Programm, dass die virtual Endpoints (Sensoren) auf der Zipabox erstellt und den Status auf my.zipato.com minütlich aktualisiert, ob das entsprechende Gerät online oder offline ist.

Voraussetzung:

Um das Connection Tracking Skript verwenden zu können, wird ein Router von AVM benötigt, also eine FRITZ!Box, ein Server in meinem Fall ein Raspberry Pi 2 und Grundlagen in Linux wären natürlich vom Vorteil.
Wenn ihr Bock habt und die Gerätschaften zu Hause habt, dann könnt Ihr euch das folgende Zip File herunterladen connection_tracking_03. Das ZIP File könnt Ihr euch dann auf eurem Raspberry Pi in einem beliebigen Verzeichnis entpacken.
Wenn sich jemand für den Source Code interessiert, dann findet ihr ihn hier:
Source Code.

Bevor wir jetzt richtig loslegen können, müssen wir  sicherstellen, dass die entsprechenden Python Module installiert sind.

Logt euch per SSH auf euren Raspberry ein und führt folgenden Befehl aus:

sudo apt-get install python-yaml python-requests python-pycurl python-json python-lxml

Wenn Ihr das ZIP File entpackt habt, findet Ihr die folgenden Dateien.

  • connection_tracking.py
  • connection_tracking.yaml
  • fritzconnection.py, und fritzhosts.py
  • Zipatoapi.py

Ihr könnt nun einmal das Skript „fritzhosts.py“ ausführen, um zu schauen, ob die Daten aus der FRITZ!Box gelesen werden können.

python fritzhosts.py -p "FRITZBOX_PASSWORD"

Wenn das Skript erfolgreich durchgelaufen ist, sollte sich nun im selben Verzeichnis eine Datei mit dem folgenden Namen „known_hosts.yaml“ befinden. In der Datei solltet Ihr nun einige MAC Adressen, Name und den Online Status sehen können. Wenn das tut, können wir im nächsten Schritt die Datei „connection_tracking.yaml“ editieren, welche MAC Adressen wir überhaupt in der Zipabox tracken möchten. Hier ist ein Beispiel, wie die Syntax der Datei auszusehen hat.

- mac: 80:AF:23:D2:3F:12
 name: Dad
- mac: 8F:AA:33:D2:3D:1D
 name: Mum

Im vorletzten Schritt müssen wir nur noch in dem Skript „connection_tracking.py“ in der Zeile 29 und 30 unsere Login Daten für die Zipabox hinterlegen. Dieses Skript verwendet nun die Zipabox API und schaut nach, ob es schon einen virtual Endpoint Sensor mit dem Namen „Dad“ und „Mum“ gibt und wenn nicht, werden die erstellt und der Status wird aktualisiert. Wenn die virtual Endpoints angelegt worden sind, müsst Ihr zur Zeit die Zipabox einmal manuell synchronisieren.

Im letzten Schritt kann man nun einen Cronjob erstellen, dass z.B. der Status jede Minute abgefragt wird auf der FRITZ!Box und den aktuellen Status dann an die Zipabox sendet. Der Cronjob könnte dann folgendermassen aussehen auf eurem Server.

0-59 * * * * python /pfad/zum/skript/fritzhosts.py -p "FRITZBOX_PASSWORD" && /pfad/zum/skript/connection_tracking.py >/dev/null 2>&1

Im groben und ganzen wars das dann auch. Das Ergebnis würde dann in der Zipabox wie folgt aussehen.

connection_tracking_example_picture

Zur Zeit funktioniert das Connection Tracking Skript nur in Verbindung mit einer FRITZ!Box. Wenn das Interesse da sein sollte und jemand von euch keine FRITZ!Box zur Verfügung hat, aber einen Server. Dann könnte ich mir Connection Tracking in Verbindung mit „nmap“ anschauen, dass wäre dann neutral gegenüber des eingesetzten Routers.

Wenn Ihr irgendwelche Probleme bzw. Fragen habt bzgl. der Skripte, dann hinterlasst einfach ein Kommentar.

Viele Grüße,

Gregor

52 thoughts on “Connection Tracking (FRITZ!Box) mit der Zipabox”

  1. Stefan sagt:

    Cooles Projekt!

    Ich habe zwar keinen Raspi, aber zumindest ne Synology NAS. Da müsste ich ja eigentlich das Python-Script auch zum Laufen bekommen.

    Werde das mal versuchen und berichten…

    1. gregor sagt:

      Hoi Stefan,

      danke für das Feedback.
      im Grunde sollte es kein Problem sein, die Skripte auf der Synology zum laufen zu bekommen, da man Python dort installieren kann. Hier sollte Python 2.X ausreichen. Wahrscheinlich wirst Du eher Probleme bekommen, dass nicht alle benötigten Python Module zur Verfügung stehen wie z.B. python-yaml.
      Du müsstest die fehlenden Module mit „pip“ nachinstallieren, anstatt dann mit „apt-get“ oder „yum“ etc.

      https://forum.synology.com/enu/viewtopic.php?t=59837
      Die erste Anwtwort von jetrit beschreibt gut, wie man „pip“ installiert bekommt. Sobald pip installiert ist, kannst Du dann einfach die Module via „pip install pyyaml …“ dann nachinstallieren. Dann sollten die Skripte Problemlos laufen.

      Wenn Du auf irgendwelche Probleme läufst, dann melde Dich nochmal. Ich habe auch eine Synology zu Hause und ich könnte es im Notfall auch auf der Synology das Szenario einmal durchspielen.

  2. Stefan sagt:

    Das mit yaml ist mir jetzt auch gerade als erstes aufgefallen. Ich habe Python 2.7 aus der synocommunity installiert und bei den mitinstallierten Modulen ist pyYAML aufgeführt. Du schreibst aber, es wäre python-yaml erforderlich. Gibt es da einen Unterschied zwischen pyYAML und python-yaml? Bin da kein Experte…

    Ähnliches bei curl: py-curl ist installiert, du schreibst, python-curl ist erforderlich.

    requests und json sind gar nicht installiert.

    Bin gerade nicht im gleichen Netz wie die Syno, daher kann ich nicht per SSH drauf um das Module-nachinstallieren zu testen.

    1. gregor sagt:

      Ja das sollte das selbe sein. Ich musste den Text noch um das Python Module lxml erweitern. Sag aufjedenfall bescheid, wie Du vorankommst.

  3. Stefan sagt:

    Und da geht es schon los. Ein paar Module habe ich installiert bekommen. Aber json finde ich nicht, das könnte aber ggf. Bestandteil des 2.7er Python aus der synocommunity sein.

    lxml macht mir auch derzeit Sorgen. Da bekomme ich wilde Fehlermeldungen, wenn ich „pip install lxml“ laufen lasse. Im Netz schreiben einige, dass dafür erst libxml2 und libxslt installiert werden müssen. Und da hänge ich gerade. Über pip bekomme ich die nicht installiert. Scheinbar soll es über ipkg gehen, aber das habe ich nicht installiert.

    1. gregor sagt:

      Hi Stefan,

      ich installiere mir gerade Python2 aus dem synology community Repo und ich spiele es mal auf meiner Syno. Box durch. Ich denke das sollte definitiv machbar sein. Ich komme dann nochmal auf Dich zu, weil sobald die Module installiert sind, ist das dann eigentlich ein selbstläufer:).

  4. Stefan sagt:

    Was hast du denn für eine DS? Ich selbst habe eine DS215j.

    ipkg habe ich jetzt installiert bekommen, und damit konnte ich dann auch libxml2 und libxslt installieren. Aber wenn ich dann pip install lxml mache, bricht er nach einer Zeit mit Fehlermeldung ab:

    Could not find function xmlCheckVersion in library libxml2. Is libxml2 installed?

    libxml2 ist aber installiert.

    1. gregor sagt:

      Hi Stefan,

      du kannst das Paket „Python Module“ schon mal installieren aus dem Synology Repo. Das ist ein offizielles Paket von Synology. Damit läuft zumindestens „python fritzhosts.py -p „PASSWORD“ schon mal. Mein Skript benötigt noch pycurl was gerade noch fehlschlägt.

  5. gregor sagt:

    Hi Stefan,

    also nachdem ich das Paket „Python-Module“ installiert habe und die Synology Box restartet habe, liefen die Skripte alle auf Anhieb. Wie sieht es bei Dir aus?

    PS. Meine Synology (DS213j) läuft auf DSM 6.0, was heute veröffentlicht wurde.

  6. Stefan sagt:

    Nicht gut. 🙁

    Habe das Python Module installiert und die Syno restartet. Bin noch auf DSM5.2, da ich nicht sicher war, ob die Packages alle schon problemlos mit der 6.0 laufen.

    Meine Fritzbox (6490) musste ich noch umstellen von User+Passwort auf Kennwort, sonst hätte dein Script vermutlich eh nicht funktioniert.

    Wenn ich aber jetzt die fritzhosts.py aufrufe, kommt folgender Text:

    Traceback (most recent call last):
    File „fritzhosts.py“, line 171, in
    _print_status(_get_cli_arguments())
    File „fritzhosts.py“, line 159, in _print_status
    password=arguments.password)
    File „fritzhosts.py“, line 28, in __init__
    fc = fritzconnection.FritzConnection(address, port, user, password)
    File „/volume1/Test/fritzconnection.py“, line 313, in __init__
    self._read_descriptions(password)
    File „/volume1/Test/fritzconnection.py“, line 324, in _read_descriptions
    parser = FritzDescParser(self.address, self.port, descfile)
    File „/volume1/Test/fritzconnection.py“, line 190, in __init__
    tree = etree.parse(source)
    File „lxml.etree.pyx“, line 3239, in lxml.etree.parse (src/lxml/lxml.etree.c:71811)
    File „parser.pxi“, line 1749, in lxml.etree._parseDocument (src/lxml/lxml.etree.c:104883)
    File „parser.pxi“, line 1775, in lxml.etree._parseDocumentFromURL (src/lxml/lxml.etree.c:105182)
    File „parser.pxi“, line 1679, in lxml.etree._parseDocFromFile (src/lxml/lxml.etree.c:104181)
    File „parser.pxi“, line 1110, in lxml.etree._BaseParser._parseDocFromFile (src/lxml/lxml.etree.c:99398)
    File „parser.pxi“, line 582, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:93701)
    File „parser.pxi“, line 683, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:95002)
    File „parser.pxi“, line 620, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:94169)
    IOError: Error reading file ‚http://169.254.1.1:49000/tr64desc.xml‘: failed to load HTTP resource

    Was mich daran unter anderem wundert: Was ist das für eine IP-Adresse zum Schluss? Die ist bei mir im Netz überhaupt nicht vorhanden!

  7. Stefan sagt:

    So, es geht voran: Die angesprochene IP habe ich in der fritzconnection.py gefunden. Das scheint mir deine IP zu sein! 😉

    Ich vermute mal, das sollte jeder auf seine IP anpassen. In dem Block taucht dann auch noch FRITZ_USERNAME auf. Ist der auch relevant? Also gehört das Passwort beim Aufruf der fritzhosts.py zu diesem Usernamen? Dann müsste ich in der Box doch wieder auf User+PW umstellen.

    Ich installiere gerade DSM6 und werde dann mal die oben genannten Dinge auf meine Box umbiegen.

  8. Stefan sagt:

    Hmpf. Läuft nicht.

    Nach dem Update auf DSM6 und diversen kleinen Hürden (kein root-Account mehr…) war ich dann irgendwann soweit, die fritzconnection.py abzuändern auf meine Fritzbox-Daten (IP und User).

    Dann das Script gestartet und nach dem Parse-Text kommt dann folgende Fehlermeldung:

    IOError: Error reading file ‚http://192.168.178.1:49000/tr64desc.xml‘: failed to load HTTP resource

    Also die gleiche Meldung wie vorher, nur eben jetzt mit meiner IP-Adresse.

  9. Stefan sagt:

    Sorry für die ganzen Nachrichten erstmal. Aber ich hoffe, es hilft anderen Usern (und Gregor selbst):

    Wieder einen Schritt weiter: Der Fehler mit „IOError reading file“ lag daran, dass ich in der FritzBox den „Zugriff für Anwendungen (TR64)“ deaktiviert hatte. Nach Aktivierung und Neustart lief das Script problemlos durch und hat auch ordnungsgemäß eine known_hosts Datei erstellt.

    Jetzt muss ich mich aber erstmal um den Nachwuchs kümmern. Ob die weiteren Scripts dann auch funktionieren, teste ich später. Aber da jetzt nur noch die Verbindung zur Zipabox benötigt wird, vermute ich mal, dass das jetzt auch bei mir problemlos läuft.

    Stefan

  10. Stefan sagt:

    So, da bin ich wieder.

    Das connection-tracking Script funktioniert auch. Die Endpoints wurden angelegt. Cronjob habe ich aber noch nicht eingerichtet.

    Allerdings hätte ich einen Verbesserungsvorschlag:
    Die FritzBox unterscheidet ja zwischen „nicht verbunden“, „Verbunden, nicht im Internet“ (kleiner grüner Punkt) und „Verbunden, im Internet“ (große Weltkugel). Dein Script scheint aber auch bei „verbunden, nicht im Internet“ den Sensor auf inaktiv zu setzen. Nur bei „verbunden, im Internet“ ist der Sensor auf aktiv.

    Wenn man das Ganze aber als Anwesenheitserkennung nutzen möchte, wäre nach meinem Verständnis auch „verbunden, nicht im Internet“ der Status Aktiv zuzuordnen. Das Handy muss ja nicht unbedingt aktiv im Internet sein.

    Was meinst du?

  11. Stefan sagt:

    Korrektur: Das scheint doch zu funktionieren. Allerdings habe ich in der known_hosts Datei nicht alle Einträge, die ich in der Fritzbox habe. In der hosts-Datei sind 16 Einträge, in der FritzBox-Oberfläche stehen 21 Geräte.

    Deswegen hatte ich da eins dauerhaft auf inaktiv, weil ich die MAC-Adresse nicht aus der hosts-Datei ausgelesen habe, sondern aus der Fritzbox. Und da die in der Hosts-Datei gar nicht vorhanden ist, steht sie vermutlich dauerhaft auf inaktiv.

    Gibt es da eine Begrenzung in deinem Script?

  12. gregor sagt:

    Hoi Stefan,

    cool, dass freut mich zu hören, dass Du die paar Hürden nun überwunden hast. Also jetzt ein Punkt nachdem anderen:).
    Die IP „169.254.1.1“ oder auch besser bekannt unter dem Hostnamen „fritz.box“ ist eine FritzBox interne IP. Unter dieser IP ist deine FritzBox normalerweise immer erreichbar, also wie so eine Fallback IP.
    Da gebe ich Dir recht, dass habe ich in meinem Artikel nicht erwähnt, dass ich hier davon ausgehe, dass jeder mit dem default User „admin“ arbeitet. Daher habe ich nur die „-p“ Passwort Option erwähnt und das Skript versucht sich dann defaultmäßig mit dem User admin zu verbinden.
    So nun zum letzten „Problem“.
    Ich habe hier zwei PowerlineAdapter die ich zu Hause verwende. Die FritzBox zeigt Sie mir in der GUI nur mit einem Grünen Punkt an, also keine Weltkugel. Wenn ich mir jetzt die MAC Adresse des Powerline Adapters nehme und die in der Known_Hosts Datei suche, dann finde ich die auch mit dem Status 1. Bei mir passt aber auch die Anzahl der Geräte die mir fritzhosts ausgibt und das was in der FritzBox steht. Darf ich fragen, was das für welche Devices sind die nur einen grünen Punkt haben?
    Also ich tracke zur Zeit nur die MAC Adressen von den Handys die hier in Verwendung sind.
    Was wir aber noch probieren können ist folgendes. Ich habe gerade in mein github Repo die Original fritzhosts.py Datei hochgeladen. Die findest Du hier „https://github.com/ggruner/Zipatoapi/tree/master/examples/connection_tracking_fritzbox“. Die Datei heisst „fritzhosts_originall.py“. Die kannst Du Dir mal herunterladen und in das Verzeichnis kopieren, wo Du auch die anderen Skripte hast. Das Original fritzhosts Skript gibt den Output direkt auf dem Terminal aus. Das kannst Du ja mal ausführen und schauen, ob eventuell bei einigen Devices ein Fehler angezeigt wird auf deinem Terminal Fenster und dann kannst Du auch nochmal die Devices zählen, ob das Original Skript auch nur 16 anstatt >20 Devices anzeigt.

    Du kannst auch folgendes noch machen, dann siehst Du alle Optionen die Du dem Skript geben kannst:

    python fritzhosts_original.py --help
    -i [ADDRESS], --ip-address [ADDRESS]
    ip-address of the FritzBox to connect to. Default:
    169.254.1.1
    --port [PORT] port of the FritzBox to connect to. Default: 49000
    -u USERNAME, --username USERNAME
    Fritzbox authentication username
    -p PASSWORD, --password PASSWORD
    Fritzbox authentication password
    -a, --all Show all hosts (default if no other options given)
    -n, --nums Show number of known hosts
    -d DETAIL, --detail DETAIL
    Show information about a specific host (DETAIL: MAC
    Address)

    Bis später

  13. Stefan sagt:

    Bei mir wurde das Handy meiner Frau vom Script nicht „erkannt“, steht aber in der Fritzbox. Ich habe jetzt mal ein paar (inaktive) Geräte aus der Fritzbox-Liste gelöscht um nur noch 16 Einträge zu haben. Und siehe da, jetzt steht das Handy meiner Frau auch in der known_host Datei und die Übertragung des Status an die Zipabox funktioniert. Da scheint also wirklich irgendwas auf 16 Einträge begrenzt zu sein.

    Ich kann die original fritzhosts-Datei jetzt auch nicht (mehr) testen, weil ich eben nur noch 16 Geräte habe. Ich müsste quasi erstmal wieder ein neues Gerät an die Box bringen, um wieder mehr als 16 zu haben. Und da fehlt mir gerade ein neues Endgerät. 😉

  14. gregor sagt:

    Interessant, dass muss dann eine Begrenzung der FritzBox sein. In den Foren liesst man sehr viel, wie unterschiedlich sich die Boxen von Funktionen etc. zum Teil unterscheiden. Dann viel Spaß mit dem „Connection Tracking“ :).

  15. Paul sagt:

    Hallo Gregor,
    Schöner Bericht. So jetzt habe ich eine Frage? Ich habe jetzt keine Fritzbox, aber einen Raspi 2. Wie kann ich jetzt damit eine Anwesendheitserkennung erstellen?

    Gruß
    Paul

  16. gregor sagt:

    Hi Paul,

    dafür müsste ich mir python-nmap einmal anschauen. Ich schaue es mir mal später an und dann kann ich sehen, ob und wie schnell ich es implementiert bekomme. Ich würde mich dann hier im Kommentar Bereich nochmal melden bzw. auch den Artikel aktualisieren, sobald es mit nmap funtkionieren sollte.

  17. wolf sagt:

    Hi,

    leider läuft der Cronjob auf dem Raspi irgendwie nicht. Wenn man das Script allerdings nacheinander manuell aufruft funktioniert alles.

    Vielleicht Dateirechte?

    1. derHelle sagt:

      Hi Wolf,

      hast du versuche das in der crontab eingetragen auszuführen?

      Gruß Helle

  18. wolf sagt:

    Hi Helle,

    ja, dass funktioniert. Nur im Cronjob eben nicht. Es wird keine Datei angelegt bzw. aktualisiert.

    Gruß

  19. gregor sagt:

    Hallo Wolf,

    kannst Du mir mal sagen, wie Du den Crontjob angelegt hast? War das mit „crontab -e“ oder hast Du eine Datei unter „/etc/cron.d/“ angelegt? Kannst Du mir den Cronjob hier posten? Vergiss das PW nicht herauszunehmen, bevor Du es postet:). Ich habe den cronjob mit „crontab -e“ erstellt und das erstellt Dir automatisch eine Datei unter „/var/spool/cron/crontabs/$BENUTZER“.
    Vergib mal „755“ Berechtigung auf den beiden Python Skripte und starte den „Cron Dienst“ einmal neu „/etc/init.d/cron restart“. Du solltest anschliessend in dem Logfile „/var/log/syslog“ sehen können, ob der Cronjob minütlich am laufen ist, oder eventuell siehst Du eine Fehlermeldung.

  20. wolf sagt:

    Hi Gregor,

    ja das war mit „crontab -e“ – so mache ich das oft 🙂

    So sieht das Ganze aus:
    0-59 * * * * python /home/pi/connection-track/fritzhosts.py -p „PASSWORT“ && python /home/pi/connection-track/connection_tracking.py

    Ich glaube mittlerweile, dass es der 755 war 😉

    Geht wohl jetzt. Allerdings wird die known_hosts.yaml nicht aktualisiert. Oder soll das auch nicht?

    Grüße

  21. gregor sagt:

    Hi Wolf,

    das sieht auf den ersten Blick in Ordnung aus. Wenn Du ein „grep -i cron /var/log/syslog“ ausführst, dann solltest Du sehen, wie der Cronjob jede Minute ausgeführt wird, richtig? Den Cronjob hast Du unter dem User „pi“ vermutlich erstellt und das Verzeichniss „/home/pi/connection-track“ und alle dadrunter liegenden Dateien gehören ebenfalls dem User und der Gruppe „pi“?
    Bei cron kann man eigentlich nicht viel falsch machen, dass muss ein recht „simpler“ Fehler sein:).

  22. Marcel sagt:

    super Sache, finde das super interessant, ganz so Linux versiert bin ich nun leider aber nicht und erhalte beim Veruch folgende Meldung:

    Traceback (most recent call last):
    File „fritzhosts.py“, line 6, in
    import fritzconnection
    File „/home/pi/test/fritzconnection.py“, line 33, in
    import requests
    ImportError: No module named requests

    Hoffe mir kann jemand weiterhelfen….

  23. gregor sagt:

    Hallo Marcel,

    danke für das Feedback.
    Du hast das Problem, dass das Python Skript das „request“ Module nicht finden kann. Je nachdem was Du für ein Linux System hast, musst Du die enstsprechenden Pakete erstmal Installieren:
    Ubuntu/Debian:
    sudo apt-get install python-yaml python-requests python-pycurl python-json python-lxml

    Fedora/RedHat/CentOS:
    sudo yum install python-yaml python-requests python-pycurl python-json python-lxml

    Was für ein Linux verwendest Du? Und worauf läuft dein Linux, also auf einem Raspberry Pi oder irgendwas anderes?

    Viele Grüße,
    Gregor

  24. gregor sagt:

    @Paul: Durch die Herbstferien hatte ich leider nicht soviel Zeit mich mit python-nmap zu beschätigen. Ich bin aber an dem Thema noch dran (Ich kann schon die MAC Adressen im Netzwerk auslesen) und ich werde definitiv versuchen hier nochmal ein extra Artikel bzgl. des Themas zu schreiben, wenn mein Skript soweit ist. Also das man Connection/Device Tracking ohne eine FritzBox machen kann.

    VG,
    Gregor

  25. Marcel sagt:

    Hi Gregor,

    vielen Dank für deine Rückmeldung. Habe das offizielle Raspberry Image auf meine RP2 installiert, also Debian. Ausser FHEM läuft da auch nichts drauf.

    Bei der Installation der Pakete kommt bei mit nur leider folgende Fehlermeldung:

    Package python-json is not available, but is referred to by another package.
    This may mean that the package is missing, has been obsoleted, or
    is only available from another source

    E: Package ‚python-json‘ has no installation candidate

    Hast du noch einen Tipp? Habe auch ne Diskstatin laufen, aber da habe ich bisher noch nichts per Konsole installiert, etc…

    Vielen Dank

    Gruß
    Marcel

  26. gregor sagt:

    Hallo Marcel,

    wie ich sehe ist json ein Standardmodul von Python, daher muss man es nicht installieren. Mit dem folgenden Kommando solltest Du das Modul auch sehen, dass es schon existiert.
    sudo pydoc modules | grep "json"

    Wenn die restlichen Pakete soweit alle installiert sind, dann starte nochmal das Skript und Poste den Output, wenn Du noch gegen einen weiteren Fehler laufen solltest.

  27. wolf sagt:

    Hi Gregor,

    es sollte aber im Cronjob noch ein „>/dev/null 2>&1“ hinten angefügt werden, dann werden nämlich nicht ständig Mails erstellt 😉

    An einer nmap Lösung wär ich auch sehr interessiert.

    Grüße

  28. gregor sagt:

    Hi Wolf,

    danke ich habe den Text aktualisiert. An der nmap Lösung werde ich definitiv die nächsten Tage dran arbeiten. Ich gehe davon aus, dass nun bei Dir das connection tracking funktioniert, oder hast Du noch ein irgendwo ein Problem? Wenn es funktioniert, wo war am Ende das Problem, dass dein Cronjob nicht lief?

    VG,
    Gregor

    1. wolf sagt:

      Hi Gregor,

      wie schon erwähnt die Dateiberechtigungen, wie eigentlich immer… 😉

      Bzgl. NMAP: Super! Bin gespannt.

      Grüße

  29. Marcel sagt:

    Hi,

    habe jetzt das JSON Paket mal ausgelassen, alle anderen Pakete sind durchgelaufen und wurden installiert leider weiterhin eine Fehlermeldung:

    Traceback (most recent call last):
    File „fritzhosts.py“, line 171, in
    _print_status(_get_cli_arguments())
    File „fritzhosts.py“, line 167, in _print_status
    write_hosts_file(fh)
    File „fritzhosts.py“, line 101, in write_hosts_file
    hosts = fh.get_hosts_info()
    File „fritzhosts.py“, line 58, in get_hosts_info
    while index < self.host_numbers:
    File "fritzhosts.py", line 40, in host_numbers
    result = self.action('GetHostNumberOfEntries')
    File "fritzhosts.py", line 32, in action
    return self.fc.call_action(SERVICE, actionname, **kwargs)
    File "/home/pi/test/fritzconnection.py", line 361, in call_action
    action = self.services[service_name].actions[action_name]
    KeyError: 'Hosts'

    habe auch mal Simplejson installiert, aber leider auch nichts…

  30. gregor sagt:

    Hallo Marcel,

    das sieht so aus, ob Du noch keine Daten von deiner FritzBox bekommst.

    Führ das Skript einmal mit den folgenden Optionen aus(IP und Password anpassen):

    python fritzhosts.py -i „IP.DES.ROUTERS.“ -u „admin“ -p ‚PASSWORD‘

    Schreib mir mal, ob sich die Fehlermeldung geändert, oder ob das Skript nun durchläuft.

  31. gregor sagt:

    Ich wollte euch nur einmal kurz mitteilen, dass die connection_tracking „nmap“ Version fertig ist. Die ersten Tests sehen nicht schlecht aus. Ich versuche bis Sonntag Abend einen neuen Blog Eintrag zu veröffentlichen, da es ein paar kleine feine unterschiede zur FRITZ!Box Version gibt.

  32. Thomas sagt:

    Hallo,
    die Programm Idee ist voll gut. So was habe ich schon länger gesucht.
    Leider läuft das Programm noch nicht ganz durch.
    Die fritzhosts.py läuft ohne Probleme durch nach Installation der python Module.
    Bei der connection_tracking.py kommt es noch zu einem Fehler:
    ———————————-
    thomas@RaspHome:/etc/ConnectionTracking$ python connection_tracking.py
    Traceback (most recent call last):
    File „connection_tracking.py“, line 57, in
    virtual_endpoints = a.get_all_virtual_endpoints()
    File „/etc/ConnectionTracking/Zipatoapi.py“, line 119, in
    get_all_virtual_endpoints
    return json.loads(output_init.getvalue())
    File „/usr/lib/python2.7/json/__init__.py“, line 339, in loads
    return _default_decoder.decode(s)
    File „/usr/lib/python2.7/json/decoder.py“, line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File „/usr/lib/python2.7/json/decoder.py“, line 382, in raw_decode
    raise ValueError(„No JSON object could be decoded“)
    ValueError: No JSON object could be decoded
    ———————————————-
    Läuft auf einem Raspberry Pi, Ubuntu Mate

    Vielleicht kann ja jemand helfen.
    Liebe Grüße
    Thomas 🙂

  33. gregor sagt:

    Hallo Thomas,

    danke für das Feedback.
    Hast Du die Zipabox Login Daten in das Skript eingetragen?

    „connection_tracking.py“ – Zeile 29 und 30

    Wenn Du magst und Du Teamviewer hast, dann können wir eine kurze Session machen die Tage und dann richte ich es Dir in 5-10min. ein. Dann würde ich Dir auf deine Private Mail Adresse schreiben und wir könnten kurz ein Termin vereinbaren, wenn Du magst. Das hat jetzt bei ein paar User super geklappt.

    Viele Grüße,
    Gregor

    1. thomas sagt:

      Hallo Gregor,
      Danke für dein Angebot.
      Teamviewer habe ich auf Raspberry installiert. Hab aber nicht rausgefunden wie ich dir eine private Nachricht senden kann.

      Liebe Grüße
      Thomas 🙂

  34. derJan sagt:

    Kann man das auch für Windoof erweitern. Ich hab einen Server mit Windows, leider 😉

  35. gregor sagt:

    Hoi derJan,

    ich habe leider kaum Erfahrung mit Windows. Man kann sich Python auch unter Windows installieren, und das Skript alle x Minuten laufen lassen. Ich kann mir gut vorstellen, dass es auch funktionieren würde:).
    Ja ansonsten reicht auch ein Raspberry Pi aus der ersten Generation für sowas vollkommen aus, was man schon für recht „wenig“ Geld bekommt.

    Viele Grüße,
    Gregor

  36. derJan sagt:

    Ok, danke. Ich habe 2 Rasberrys im Haus, aber dann sind sicherlich die Kinder nicht erfreut, wenn ich ihnen Ihr Kodi wegnehme.
    Ich werde mich in einer ruhigen Minute mal damit beschäftigen.

    Gruß Jan

  37. Piet sagt:

    Hallo,

    würde das Ganze nicht auch ohne ein Drittsystem (Raspberry PI) funktionieren?
    Auf dem Zipatile kann man ja APK Pakete manuell installieren:
    Als Unix Shell z.B. BusyBox und für Python QPthyon
    Damit hätte man doch alles, wozu dann noch ein PI!?

    Gruß
    Piet

    1. gregor sagt:

      Hallo Piet,

      ich kann Dir das leider nicht beantworten, da ich kein Zipatile hier habe, um es mal zu testen. Wenn man in der Lage ist auch einzelne Python Module nachzuinstallieren, dann sollte es theoretisch möglich sein.

      VG,
      Gregor

    2. DUC750 sagt:

      Hallo,
      das würde mich sehr interessieren. Leider bin ich selbst nicht sicher genug auf dem Gebiet um einen Test zu wagen. Wenn sich einer ran traut würde ich mich jedenfalls sehr über einen kleinen Bericht freuen.
      Danke und Gruß
      DUC750

  38. patzschemann sagt:

    Hallo an Alle,

    um meine Scharfschaltung weiter zu verbessern habe ich diese Tracking-Methode bei mir implementiert – DANKE für die Umsetzung!
    Allerdings habe ich nachwievor ein Problem:
    Die Sensoren wurden Erfolgreich entsprechend der Python-Skripte angelegt.
    Soweit laufen diese also..
    Allerdings erfolgt kein Update der Stati durch die Skripte.

    Manuell, über die Zipato Sensor URL, kann ich einen Status verschicken der sich auch entsprechend ändert.
    Kann es daher sein, dass die URL innerhalb der Skripte nicht korrekt erstellt wird? Gab es da noch ein update der Skripte?

    Besteht die Möglichkeit sich die zu sendende Botschaft anzeigen zu lassen?

  39. patzschemann sagt:

    Hallo an Alle,
    nach vielem Ausprobieren und letzendlich online-suport von Gregor hat sich das Problem als eine Schlampigkeit des Users 😉 herausgestellt.
    Bei den MAC-Adressen wurde nicht auf Großschreibung geachtet. Also…alle Buchstaben beim Eintragen der Adresse groß geschrieben und siehe da….es funktioniert…

    VIELEN DANK an Gregor für seine Zeit und Unterstützung!

  40. Alex sagt:

    Hallo, ich habe alles auf der Synlogy zum laufen bekommen. Jetzt scheitert es nur noch am Cron Job, wie kann ich diesen erstellen?

  41. Alexander sagt:

    Hi gregor – unter zipato V3 läuft das Skript nicht mehr. Ich habe bereits versucht die Zipatoapi.py an drei stellen anzupassen und habe aus „my“ „my3“ gemacht, aber das allein scheint es nicht zu sein oder es sind noch mehr stellen die ich nicht gefunden habe.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.