Ankündigung

Einklappen
Keine Ankündigung bisher.

Haustürklingel mit Wiregate und Fritzbox

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    Hallo swiss,

    hab mal deine Kommandos auf meiner FB7170 getestet.
    Es geht nur : echo "ATDT<Rufnummer>" | nc 127.0.0.1 1011
    wenn Rufnummer eine externe ist z.B mein Handy.

    Wenn ich aber für Rufnummer **9 (sollte Rundruf sein) nehme passiert nichts.
    Zur Info ich habe momentan nur ein schnurloses Tel. an FON1.

    Kommentar


      #17
      Hallo Mario

      Hmmm... Das ist seltsam. Naja wenn ich mich richtig erinnere müssen gewisse Kurzwahlnummern bei der 7170 manuell im Telefonbuch abgelegt werden. Sonst funktioniert der Aufruf nicht.

      Probier mal **1 dann sollte der Aparat am anschluss FON1 klingeln. Wen nicht überprüfe mal das interne Telefonbuch der FB ob dort die internen Telefone eingetragen sind.
      Gruss Patrik alias swiss

      Kommentar


        #18
        Hallo swiss,

        wenn ich **1 nehme klingelt das Fon 1.
        Warum es aber bei dem Sammelruf nicht tut weiß ich noch nicht.

        Anbei mal mein Skript:
        #!/bin/sh
        ( sleep 3
        echo "echo "ATDT**1" | nc 127.0.0.1 1011"
        sleep 12
        echo "echo "ATH" | nc 127.0.0.1 1011"
        sleep 6
        echo "exit"
        ) | telnet 192.168.178.1

        Kommentar


          #19
          Ich glaube das Problem ist folgendes...

          Sammelruf funktioniert nur von einem internen Aparat an alle übrigen. (Soll ja ein Anruf zwischen 2 Endgeräten sein)

          **1 Ist die Amtsholung für FON1
          **2 Ist die Amtsholung für FON2

          Beim abheben sollte einfach der normale Telefonsummton zu hören sein. Das hat eine ganz andere Funktion wie der Sammelruf. Ich denke das funktioniert so nicht. Aber ich sehe mal ob es eine andere Möglichkeit gibt.
          Gruss Patrik alias swiss

          Kommentar


            #20
            So, das Skript funktioniert jetzt hier auch, allerdings nur unter 1 Bedingung:

            Das Telefon, das klingeln soll, darf NICHT an FON1 hängen. Der ATDT Befehl führt nämlich eigentlich die Wahlhilfe durch, das heisst, die Fritzbox versucht einen Anruf von FON1 an die Zielrufnummer aufzubauen. Hängt nun das Telefon, dass den Anruf annehmen soll an FON1, kann das nicht funktionieren.

            So ist das jedenfalls hier bei mir, keine Ahnung warum bei johnson **1 funktioniert, evtl. ein anderes Fritzbox Modell (bei mir 7170)? Oder vielleicht sind noch ISDN Geräte mit angschlossen? Oder es ist nicht nur 1 Telefon angeschlossen wie bei mir?

            Bei mir hängt jetzt das Fax an FON1 und Telefon an FON2, und es haut hin. Man darf den Anruf nur nicht annehmen, sonst läuft das Fax Amok und fängt auch an zu läuten, was ja wegen der Wahlhilfe auch logisch ist.

            Auf jeden Fall ist das schonmal eine große Verbesserung zu meinem vorherigen Konstrukt, da ich jetzt 2 Point-of-failures weniger habe.

            Kommentar


              #21
              Hallo Shoko,

              hast du alles in einem Plugin also in Perl am laufen oder rufst du aus dem Plugin heraus ein Shell-Skript auf.

              Wenn ich aus dem Plugin das Shell-Skript aufrufe stürzt der Wiregate-Prozess immer ab.

              Deshalb versuch ich alles innerhalb des Plugins zu realisieren.

              Kommentar


                #22
                Zitat von johnson Beitrag anzeigen
                Wenn ich aus dem Plugin das Shell-Skript aufrufe stürzt der Wiregate-Prozess immer ab.
                Ich würde es etwas anders nennen, das Ergebniss ist aber dasselbe
                Er beendet & startet neu, um dich vor einem totalen Stillstand zu bewahren (entweder durch lange timeouts oder zombies zu vermeiden..)
                Das Problem ist, Perl verwechselt da ein paar Sachen, z.B. Threads (billig) mit forken (teuer, ausser man hat 4GB freien RAM..), sagt einem vorher aber leider keiner..
                Der Königsweg ist vermutlich gefunden (die ganze Suppe in C(++)) mit Kompatibilität zu den vorh. Plugins, aber noch lange nicht umgesetzt, ist jedoch deutlich in Arbeit (Monate, nicht Tage! aber auch keine Jahre mehr..), solange müssen wir damit leben, das ein Plugin eben einfach nicht rumbummeln darf, also für xy 10s brauchen ist derzeit nicht drin..

                Makki
                EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                -> Bitte KEINE PNs!

                Kommentar


                  #23
                  Zitat von johnson Beitrag anzeigen
                  Hallo Shoko,

                  hast du alles in einem Plugin also in Perl am laufen oder rufst du aus dem Plugin heraus ein Shell-Skript auf.

                  Wenn ich aus dem Plugin das Shell-Skript aufrufe stürzt der Wiregate-Prozess immer ab.

                  Deshalb versuch ich alles innerhalb des Plugins zu realisieren.
                  Ich rufe ein Skript auf. Hier der Code, den ich auch irgendwo hier aus dem Forum habe, oder aus dem SVN, das weiß ich nicht mehr so genau. Auf jeden Fall ist er nicht von mir.

                  Code:
                  # Definitionen
                  my $klingel_ga = "0/2/5";
                  my $fritzscript = "/usr/local/bin/haustuere.sh &";
                  # Plugin an Gruppenadresse "anmelden"
                  $plugin_subscribe{$klingel_ga}{$plugname} = 1;
                  
                  $plugin_info{$plugname.'_cycle'} = 0;
                  
                  # Nur bei einer gesendeten 1 reagieren
                  if ($msg{'apci'} eq "A_GroupValue_Write" && $msg{'dst'} eq $klingel_ga) { 
                  	if ($msg{'value'} == "1" ) {
                  plugin_log($plugname,'Führe Skript aus');
                  my $pluginforkpid = fork();
                  if (!$pluginforkpid) {
                  	# ich bin das dicke child - aber dank exec gleich weg
                          # aber hier sind wir ein eigener, sep. prozess!
                  	exec $fritzscript;
                          # `sleep 30` wÃŒrde dagegen 30 sekunden lang >30 MB RAM verbraten! da reichen 5 lahme plugins, dann ist schicht im Schacht..
                  	# das hier passiert nie, ausser exec ist syntaktisch falsch, trotzdem Leichen vermeiden:
                  	exit;
                  } 		
                  		
                  	plugin_log($plugname,'Skript ausgeführt');
                  		
                  	}
                  
                  }
                  Noch lieber wäre mir ein permanent offener Socket auf den Telnet Port der Fritz.Box in den ich dann die Befehle direkt reinschreiben kann. Da hatte ich aber noch keine Zeit um da durchzusteigen.

                  Kommentar


                    #24
                    Hallo Michael

                    Ich würde die socket Variante vorziehen. Ist im grunde nicht soo kompliziert und kann noch für diverse andere Dinge genutzt werden

                    Also ein kurzer crashkurs:

                    Im Webmin unter Seriell/LAN/Socketverbindungen einen neuen Soket mit folgenden Eigenschaften anlegen:

                    Name: z.B. FritzBox

                    bei Aktiv und Bidirektional einen Hacken

                    Unter Socket1:
                    • tcp-connect
                    • Socket: IP der Fritzbox : Port (z.B. 192.18.1.1:23)
                    • optionen: cr,interval=1,forever

                    Unter Socket2:
                    • udp-datagram
                    • Socket: localhost:50134
                    • optionen: bind=localhost:50135,reuseaddr

                    Damit steht schonmal die Verbindung zur Fritzbox.


                    Dann noch der Aufruf im Plugin...


                    In den configzeilen:


                    Code:
                    my $socknum = 121; # Eindeutige Nummer des Sockets +1
                    
                    my $send_ip = "localhost"; # Sendeport (UDP, siehe in Socket-Einstellungen)
                    my $send_port = "50135"; # Sendeport (UDP, siehe in Socket-Einstellungen)
                    my $recv_ip = "localhost"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
                    my $recv_port = "50134"; # Empfangsport (UDP, siehe in Socket-Einstellungen)
                    Dann erst mal den Soket im Plugin aufrufen:

                    Code:
                    if (!$socket[$socknum]) { # socket erstellen
                            $socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port,
                                                      Proto => "udp",
                                                      LocalAddr => $recv_ip,
                                                      PeerPort  => $send_port,
                                                      PeerAddr  => $send_ip,
                                                      ReuseAddr => 1
                                                       )
                        or return ("open of $recv_ip : $recv_port failed: $!");
                    
                        $socksel->add($socket[$socknum]); # add socket to select
                    
                        $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin
                        return "opened Socket $socknum";
                        plugin_log($plugname,'Soket verbunden. Soketnummer: ' . $socknum);
                    }
                    Dann noch die Befehle zum senden und empfangen:

                    Um einen Befehl zu senden...

                    $command enthält den zu übertragenden Befehl

                    Code:
                    syswrite($socket[$socknum], $command);
                    Wenn du eine Rückmeldung empfangen willst:

                    Code:
                    if (){ #Normale Verarbeitung
                    ....
                    ....
                    } elsif ($fh) { # Wenn die FB ein Antworttelegramm sendet, ab hier auswerten
                        my $buf = <$fh>;
                    ...Hier den Inhalt von $buf weiter verarbeiten...
                    }
                    Ich hoffe ich habe mich da nirgend's vertippt und konnte dir auf die Schnelle helfen
                    Gruss Patrik alias swiss

                    Kommentar


                      #25
                      Zitat von swiss Beitrag anzeigen
                      Ich würde die socket Variante vorziehen. Ist im grunde nicht soo kompliziert und kann noch für diverse andere Dinge genutzt werden
                      100% Ack!

                      Makki
                      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                      -> Bitte KEINE PNs!

                      Kommentar


                        #26
                        Hallo
                        Wenn ich aus dem Plugin das Shell-Skript aufrufe stürzt der Wiregate-Prozess immer ab.
                        Ich habe mal mit nohup ein PHP-Script aus den Plugin augerufen,
                        dann gehts.
                        Code:
                        system("/usr/bin/nohup ./var/www/myhouse/fritzbox/fritzbox_api_php/fritzbox_ring_phone.php");
                        Gruß NetFritz
                        KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                        WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                        PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                        Kommentar


                          #27
                          Nur am Rande, habs jetzt nicht getestet; Wenns geht: gut
                          Aber drauf achten, das keine Zombies übrigbleiben..

                          Makki
                          EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                          -> Bitte KEINE PNs!

                          Kommentar


                            #28
                            Hallo Swiss,

                            wie würde denn das ganze Plugin aussehen, um z.B. mit der ga 0/2/5
                            einen anruf auszulösen ?

                            Verstehe das noch nicht so ganz.

                            Gruß Manuel

                            Kommentar


                              #29
                              Hallo Manuel

                              Naja dass kann ich dir so als Trockenübung nicht ganz genau sagen.

                              Im Prinzip brauchst du im WG einen Socket auf die FB einzurichten. Dann noch die paar Codeschnipsel die ich oben gepostet habe und ein bischen Code drum herum für GA an Plugin anmelden und Rückmeldung auswerten.

                              Die Parameter für den Socket weiss ich auch nicht ausswändig. -> Dass habe ich nie ganz verstanden. Habe fast immer durchprobiert oder die vorgeschlagenen Parameter der Programmierer genommen Die oben genannten Parameter die ich vorgeschlagen habe, sollte man mal testen.

                              Wäre im Prinzip eine sehr stark abgespeckte Version des Denon-Plugin
                              Gruss Patrik alias swiss

                              Kommentar


                                #30
                                Hallo Patrick,

                                ich werde mir morgen Abend mal das Denon-Plugin anschauen.
                                Eventuell bekomme ich es ja ans laufen.

                                Gruß Manuel

                                Kommentar

                                Lädt...
                                X