FitzBox LAN Utilities

Begonnen von bugster_de, 01 Juni 2013, 00:11:43

Vorheriges Thema - Nächstes Thema

bugster_de

Hi,

nachdem ich mich bei eurem Wissen nun auch schon reichlich bedient habe, möchte ich die Ergebnisse meines verregneten Freitages nun natürlich auch hier wieder posten. Es handelt sich um einen Schwung Routinen, um mit den Geräten, die im sich im LAN / WLAN der Fritzbox befinden zu arbeiten. Getestet auf einer 7390.

Ich habe mir die Funktionen geschrieben, um im weiteren Verlauf z.B. meine Squeezeboxen ansteuern zu können
Szenarien:

    Wecker -> SqueezeboxServer per WoL ein --> Verstärker ein --> SqueezeboxSlave ein --> Radio im Badezimmer.
    Sprachausgabe zu "Waschmaschine ist fertig" über die Squeezeboxen ausgeben zu können.
    Rolladen runter --> kleines Licht an --> Fernseher und HTPC per WoL an

    Grundprinzip:
    es werden alle Devices, die die FB kennt im einem Array of Hashes abgelegt (Funktion FB_GET_LANDevices). Diese Funktion kann man z.B. periodisch aufrufen und hat so immer eine aktuelle Liste der Geräte inkl. Zustand (online, active, IP, MAC, Name, ID). Danach kann man einer bestimmten Funktion, die halt irgendwas mit so einem Gerät machen soll irgendeinen bekannten Wert des Gerätes mitgeben (z.B. Wake-on-LAN per Device-Name).

    Die Funktionen sollten eigentlich soweit alle im jeweiligen Header beschrieben sein und somit selbsterklärend.

    Hier ein Beispiel, wie man z.B. die Anwesenheitserkennung machen kann (das geht mit anderen Funktionen sicher einfacher, aber die Routinen sind ja für mehr gedacht):
    In der fhem.cfg:
    # Update der Anwesenheit
    define Anwesenheit dummy
    attr Anwesenheit room _Server
    attr Anwesenheit setList Anwesend Abwesend
    define HomeCheck notify HomeCheck {SomeBodyAtHome( "Anwesenheit" );;}
    define UpdateHomeCheck at +*00:05:00 trigger HomeCheck


    In der 99_myUtils.pm:
    sub SomeBodyAtHome( $ ) {
        my @tmp_devices = ( "Nokia-Vater", "iPhone-Mutter", "Android-Sohn", "iPod-Tochter" );
        my $tmp_success = 0;
        my $tmp_result = 0;
        my $tmp_ret = "Abwesend";

        # erstmal die Geräteliste aktualisieren
        ($tmp_result) = FB_Get_LANDevices( );
        if( $tmp_result ne true ) {
    # hier noch nichts zu tun, da eh kein Fehler kommen kann
        }

        foreach( @tmp_devices ) {
    ($tmp_success, $tmp_result) = FB_Get_LANDeviceStatus( $_ );
    if( $tmp_result eq true ) {
       $tmp_ret = "Anwesend";
    }
        }
        fhem( "set @_[0] $tmp_ret" );

        # TODO: beim Zustandswechsel Anwesend nach Abwesend soll eine Mail geschickt werden
    }


    In den Funktionen habe ich nur auf die Routinen von BusyBox sowie ctlmgr_ctl (siehe http://www.wehavemorefun.de/fritzbox/Ctlmgr_ctl) zurück gegriffen. Damit sollten die Routinen robust gegen Firmware Upgrades o.ä. sein.


    Da ich aus der C/C++ Welt komme sieht mein Code auch so aus. Echte Perl Programmierer können das bestimmt effizienter, aber nach meiner Ansicht sieht echter Perl dann auch so effizient aus, dass man schon nach 1 Stunde nicht mehr weiß, was man programmiert hat :-)
    Über Anmerkungen, Verbesserungen, Erweiterungen bin ich natürlich dankbar.

    Puschel74

    Hallo,

    dann mal ab ins Wiki damit.
    Nur durch sowas kann dieses Projekt leben - finde ich.

    ZitatEchte Perl Programmierer können das bestimmt effizienter, aber nach meiner Ansicht sieht echter Perl dann auch so effizient aus, dass man schon nach 1 Stunde nicht mehr weiß, was man programmiert hat :-)

    Das kann dir auch in C/C++ passieren ;-)
    Und auch in jeder anderen Programmiersprache.
    Wobei ich meine in meinem Perl-für Dummies-Buch auch so ein Zitat gelesen zu haben ^^

    Grüße

    P.S.: Ich finde es einfach genial wie man sich hier einbringen kann
    Zitatmöchte ich die Ergebnisse meines verregneten Freitages
    Dieses Wetter hat auch Vorteile ;-)
    Zotac BI323 als Server mit DBLog
    CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
    Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

    bugster_de

    Hi,

    tja, so hat das schlechte Wetter tatsächlich auch seine Vorteile. Zumal ich gestern dann Funktionen für den Zugriff auf die Telefonfunktionen der FB umgesetzt habe. Sobald der Code in einem Zustand ist, dass ich mich traue in hier rein zu setzen, lade ich den natürlich auch hoch. Momentan kann man die angeschlossenen Telefone, die Rufumleitungen, die Anrufliste und die Wecker auslesen (in der gleichen Manier wie die LAN Devices). Auch kann man somit die Wecker und die Rufumleitungen setzen. Dies ergibt nun die nette Funktion, dass man via FHEM Oberfläche alle Telefone durch Rufumleitung auf den AB stumm schalten kann. Das ist besonders praktisch, wenn unsere Kleine schläft. Dann ist Ruhe. Diese Funktion bietet die FB bisher so nicht (zumindet habe ich nichts gefunden). Somit kann man nun in der Kombination aus LAN und und Anrufliste sehr nett realisieren, dass FHEM die Anrufliste ausliest, sobald man nach Hause kommt und einem auf dem Smartphone signalisiert, ob es während der Abwesenheit Anrufe gab. Nice :-)

    ns WIKI würde ich das zwar gerne einstellen, allerdings finde ich den Knopf zum Erstellen eines Login nicht. Ich finde nur den Login, falls man schon einen Account hat.

    Die Diskussione bzgl. Programmiersprachen nimmt natürlich auch immer gleich religiöse Züge an. Ich bin kein besonders großer Perl Fan ....

    Puschel74

    Hallo,

    Zitatns WIKI würde ich das zwar gerne einstellen, allerdings finde ich den Knopf zum Erstellen eines Login nicht.

    Du musst ne Mail schicken und einen Acc beantragen.
    Ich hab die Mailadresse nicht im Kopf - müsste i-wo auf der Startseite sein.

    Grüße
    Zotac BI323 als Server mit DBLog
    CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
    Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

    PeMue

    Hallo bugster,

    ich verweise mal auf meinen Thread, wo ggf. schon Funktionen für Dich drin sind. Sollen wir die beiden Module zusammenführen? Bin auch gerne bereit, Dein Modul auf meiner Fritz Box 7170 zu testen.
    Bei meinem Modul würde ich gerne aus der Fritz Box die Namen der angeschlossenen Telefone auslesen - habe das aber nirgends gefunden, wie das geht.

    Gruß Peter
    RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
    RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

    bugster_de

    Hi,

    ZitatSollen wir die beiden Module zusammenführen?
    Sehr gerne. Gibt es Sourceforge oder etwas ähnliches?
    Bei mir wird das diese Woche nichts, da Family und Arbeit angesagt sind. Ich komme als frühestens nächste Woche dazu.

    Zitathabe das aber nirgends gefunden, wie das geht.
    anbei mal mein aktueller Stand der Telefonfunktionen. Achtung: das ist so nicht direkt lauffähig, da ich das etwas große File nun auf mehere aufgeteilt habe. Bitte daher diese Funktion in das 99_FritzBoxUtils.pm reinkopieren oder den Code als Anschauungsbeispiel verwenden.

    Mittels sub
    ZitatFB_Get_DECTDevices( )
    wird eine Liste der aktuell via DECT angeschlossenen Schnurlostelefone erstellt und der Name sowie der Hersteller und der aktuelle Login Status ausgelesen. Man kann theoretisch noch mehr Funktionen auslesen, aber ich brauche eignetlich nicht mehr. Auf meiner 7390 funktioniert das einwandfrei. Ich habe keine Telefone via Kabel angeschlossen und habe deshalb gar nicht probiert, ob und wie man das Namen auslesen kann..
    Alle Parameter von DECT siehe hier: http://www.wehavemorefun.de/fritzbox/Dect

    Was allerdings momentan nicht ordentlich geht, ist das auslesen der Nebenstellennummer. Ich habe drei Telefone, bei der Nebenstelle jeweils 610, 611, 612 ist. Wenn ich die Nummer auslese kommt aber 60, 61, 62. In der 7390 Konfig steht alerdings **610, **611, **612. Vermutung wäre mal, dass Perl die ** nicht als String sondern als xhochy interpretiert (oder so). Da muß ich mich noch rein fuchsen, aber wie gesagt erst nächste Woche.



    bugster_de

    und hier auch mal mein Stand der aktuellen Telefonimplementierungen (auch das hier ja Anschauungsbeispiel oder zum rauskopieren).

    Hierin sind umgesetzt:
    - Auslesen der aktuellen gesetzten Rufumleitungen
    - Auslesen der eingestellten Wecker
    - einen Wecker einschalten
    - einen Wecker ausschalten

    Achtung: das mit den Weckern funktioniert echt gut. Ich habe am Samstag abend das ausprobiert und habe wohl im Überschwang der Gefühle vergessen, den Wecker wieder zu löschen. Resultat: Sonntag morgen 5:30h ging das Ding runter. Meine Frau war, sagen wir mal, not amused :-)