DoorPI / VoIP Door-Intercomstation with Raspberry Pi

So erster Test … und es klappt

Wenn ihr die o.g. App nutzen wollt … ganz einfach. Wieder ein neues IP Telefon in der Fritzbox anlegen

// Installation IP Telefon Fritzbox/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  1. Klicken Sie in der Benutzeroberfläche der FRITZ!Box auf „Telefonie“.
  2. Klicken Sie im Menü „Telefonie“ auf „Telefoniegeräte“.
  3. Klicken Sie auf die Schaltfläche „Neues Gerät einrichten“.
  4. Aktivieren Sie die Option „Telefon (mit und ohne Anrufbeantworter)“ und klicken Sie auf „Weiter“.
  5. Aktivieren Sie die Option „LAN/WLAN (IP-Telefon)“ und klicken Sie auf „Weiter“.
  6. Geben Sie ein frei wählbares Kennwort ein und klicken Sie auf „Weiter“.
  7. Wählen Sie die Rufnummer aus, über die das Telefon ausgehende Telefongespräche führen soll.
  8. Klicken Sie auf „Weiter“.
  9. Legen Sie fest, auf welche Rufnummern das Telefon reagieren soll.
  10. Klicken Sie zum Speichern der Einstellungen auf „Weiter“ und „Fertigstellen“.

// Einrichtung App ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  1. Setup
  2. Benutzerkonten
  3. Kontoname vergeben (z.B. Tablet)
  4. SIP Server = IP Fritzbox
  5. SIP Benutzer ID = gem. Auflistung in der Fritzbox (z.B. 621)
  6. SIP Authen. PIN = gem. Vergabe oben
  7. Benutzername = analog Benutzer ID (z.B. 621)
  8. DTMF Einstellungen = Sende DTMF = RFC2833
  9. Sichern und zurück
  10. Menüpunkt - Steuerbefehle
  11. DTMF Tür öffnen = # einfügen

// Änderung Config Doorpi //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  1. cd /home/DoorPI/conf/
  2. nano doorpi.cfg
  3. entsprechen der o.g. Nummer anpassen
[InputPins]
0 = call:**621
1 = call:**610
2 = call:**610

  1. reboot
  2. Spaß haben (im Moment jedoch ohne Video aber schonmal mit Tür öffnen ;0)

An der Stelle ein kurzer Hinweis / eine kurze Bitte.

Ich mach das alles in meiner Freizeit und „opfere“ davon viel. Da ich Freund von Free Open Source bin, werde ich auch auf lang absehbare Zeit keine Lizenz für den nicht kommerziellen Gebrauch erheben.

Deshalb würde ich mich sehr freuen, wenn Ihr mich hier unterstützen könntet:
[VOTING]DoorPi - VoIP Door-Intercomstation with BananaPi - STEAM - Banana Pro | Banana Pi Forum

Wenn ich dort bis 12.02. eine gewisse Anzahl an „Gefällt mir“ gesammelt habe, bekomme ich als Entwickler von OpenSource einen BananaPi kostenfrei gestellt. Darüber würde ich mich natürlich sehr freuen :slight_smile:

Zusätzlich erregt das Aufmerksamkeit wodurch sich noch mehr Leute am Projekt beteiligen, was wiederum Euch direkt zu Gute kommt.

Danke Euch für den enorm positiven Zuspruch bisher.

Hier möchte ich beim Code die Tür, öffnen, bzw 2 verschiende Codes, ein Code für die Gehtür ein 2ter für das Tor.

Und das mit SIP hab ich auch noch nicht ganz verstanden. funktioniert das nue im Heimnetz oder auch übers Internet?
Wenn die Fritzbox (oder Asterix) als „Server“ funktioniert, bleibt der SIP Call ja nur intern, oder? Video sollte dann auch mal gehen. Und extern würde es dann ein normaler Anruf von der Fritzbox aus. Dann geht kein Video, oder?

gruß garfi

mögliche Beispiellösung in der doorpi.cfg


[DTMF]
"#" = out:0,1,0,3
"*" = out:1,1,0,5

Bei drücken der Taste „#“ am Telefon wird für 3 Sek der Öffner für die Tür mit Ausgang0 (Relais am PiFace) eingeschalten.
Bei drücken der Taste „*“ am Telefon wird für 5 Sek der Öffner für das Tor mit Ausgang1 (Relais am PiFace) eingeschalten.

sollte auch übers Internet funktionieren, habe es aber noch nicht getestet: siehe hierzu Kapitel 4 Telefon für Anmeldung aus dem Internet einrichten bei http://avm.de/nc/service/fritzbox/fritzbox-7390/wissensdatenbank/publication/show/42_IP-Telefon-an-FRITZ-Box-anmelden-und-einrichten/

BG,
Hermann

Nur kurz meine 2 Cents dazu, damit du etwas Feedback bekommst:

Voten wäre ja kein Problem - wegen Datensparsamkeit und so hab ich aber 'n Problem damit, mich nur für das Vote irgendwo anzumelden, womit ich sonst nix zutun hab.
Poste lieber deine Paypal-Adresse damit der ein oder andere 1-5€ spendet, dann ist der BananaPi auch schnell zusammen.

Gruß,
ika

Daumen hoch
mir waers sogar nen Zehner wert, wenn ich ueberlege was ich gespart habe wenn das alles fertig ist.

Danke nochmal fuer die klasse Arbeit. Im Moment laeuft eigentlich schon alles (DECT, Mobilfunk, Android)
Jetzt noch die Anbindung an IPS und passende Tuersprechstellen bauen,PERFEKT.

Geht mir ähnlich - hab ja auch Tage lang überlegt ob ich mich dort dafür anmelde.

Darum geht es weniger. So fängt es halt an und dann kommt der Gedanke: „Wenn ihr nicht mehr spendet, dann entwickel ich nicht mehr weiter.“ Davor graut es mir. Ich mach das aus „Spaß“ und dem Reiz etwas zu schaffen was anerkannt wird.

Ich komm drauf zurück :stuck_out_tongue:

Hab Deine Nachricht im IRC erst jetzt gelesen - ist bei mir 24/7 an aber reinschauen ist nicht so oft :slight_smile:

PS: Es würden noch 3 Votes fehlen - dann wäre es komplett…

Hallo zusammen,

ich habe eine Script erstellt was die folgenden Variablen schaltbar machen soll:

> Türöffner
> Reboot Raspberry
> restart Service DoorPI

und die Statis

>Gespräch aktiv

anzeigen kann. Leider funktioniert nur die DTMF übergabe nicht. Probiert doch bitte mal aus ob es bei euch klappt.

Installation:
> Integer Profil anlegen (s. Bild)


> Script anlegen und folgenden Inhalt einfügen und konfigurieren

<?
//***** Konfigurationsbereich *************************************************

$doorname = 'Haustür';
$doornr = '**620';
$fritzbox_ip = '192.168.1.1';
$password    = 'password';

//***** Scriptbereich *********************************************************
//INSTALLER
if ($_IPS['SENDER'] == "Execute")
{
    $object = IPS_GetObject($_IPS['SELF']);    // Hole alle Scripteigenschaften
    $ishidden = $object['ObjectIsHidden']; // Script versteckt?

    if (!$ishidden)
    {
        $device = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
        if (IPS_ApplyChanges($device))
        {
            $parent = IPS_GetParent($_IPS['SELF']);
            IPS_SetName($device, $doorname);
            IPS_SetParent($device, $parent);
            IPS_SetParent($_IPS['SELF'], $device);
            IPS_SetHidden($_IPS['SELF'], true);
            $restart = IPS_CreateVariable(1);
            IPS_SetParent($restart, $device);
            IPS_SetIdent($restart, "restart");
            IPS_SetName($restart, "DoorPI Service neu starten");
            IPS_SetPosition($restart, 1);
            IPS_SetVariableCustomAction($restart, $_IPS['SELF']);
            IPS_SetVariableCustomProfile($restart, "DoorPI");
            $reboot = IPS_CreateVariable(1);
            IPS_SetParent($reboot, $device);
            IPS_SetIdent($reboot, "reboot");
            IPS_SetName($reboot, "Raspberry neu starten");
            IPS_SetPosition($reboot, 2);
            IPS_SetVariableCustomAction($reboot, $_IPS['SELF']);
            IPS_SetVariableCustomProfile($reboot, "DoorPI");
            $door = IPS_CreateVariable(1);
            IPS_SetParent($door, $device);
            IPS_SetIdent($door, "door");
            IPS_SetName($door, "Tür öffnen");
            IPS_SetPosition($door, 3);
            IPS_SetVariableCustomAction($door, $_IPS['SELF']);
            IPS_SetVariableCustomProfile($door, "DoorPI");
            $talk = IPS_CreateVariable(0);
            IPS_SetParent($talk, $device);
            IPS_SetIdent($talk, "talk");
            IPS_SetName($talk, "Kommunikation aktiv");
            IPS_SetPosition($talk, 4);
            IPS_SetVariableCustomAction($talk, $_IPS['SELF']);
            IPS_SetVariableCustomProfile($talk, "~Switch");
            
        };
    };
};
//=============================================================================

$ch = curl_init('http://' .$fritzbox_ip. '/login_sid.lua');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->SID != '0000000000000000')
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));

   curl_setopt($ch, CURLOPT_POSTFIELDS, "response={$response}&page=/login_sid.lua");
    $sendlogin = curl_exec($ch);
   $session_status_simplexml = simplexml_load_string($sendlogin);

   if ($session_status_simplexml->SID != '0000000000000000')
   {
   $SID = $session_status_simplexml->SID;
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}

curl_close($ch);

//=============================================================================
$deviceid = IPS_GetParent($_IPS['SELF']);
$restartID = IPS_GetObjectIDByIdent("restart", $deviceid);
$rebootID = IPS_GetObjectIDByIdent("reboot", $deviceid);
$doorID = IPS_GetObjectIDByIdent("door", $deviceid);
$talkID = IPS_GetObjectIDByIdent("talk", $deviceid);

//=============================================================================

if($IPS_SENDER == "WebFront")
{
  	SetValue($IPS_VARIABLE, $IPS_VALUE);
}
if($IPS_VARIABLE == $restartID) {
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, "http://$fritzbox_ip/fon_num/dial_foncalls.lua?sid={$SID}&dial=$doornr**7378278*&xhr=1&t1359124076683=nocache");
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_exec($ch);
   curl_close($ch);
}
if($IPS_VARIABLE == $rebootID) {
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, "http://$fritzbox_ip/fon_num/dial_foncalls.lua?sid={$SID}&dial=$doornr**732668*&xhr=1&t1359124076683=nocache");
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_exec($ch);
   curl_close($ch);
}
if($IPS_VARIABLE == $doorID) {
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, "http://$fritzbox_ip/fon_num/dial_foncalls.lua?sid={$SID}&dial=$doornr#&xhr=1&t1359124076683=nocache");
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_exec($ch);
   curl_close($ch);
}
?>
  1. Script ausführen (Fehler sind normal und können ignoriert werden)
  2. Testen

VG

Andreas

Kann, zumindest meinem Wissen nach, nicht gehen. Denn Du ergänzt die DTMF-Signale einfach an die Telefonnummer.
Müsste aber getrennt gesendet werden - zuerst anrufen und warten bis Anruf aufgebaut ist und danach die DTMF-Signale senden.

Das denke ich nämlich auch. Konnte aber nirgends finden wie man eine Pause einfügt.

Gesendet von iPhone mit Tapatalk

Hallo wuppi83,

habe es mit der LanCapi und dem IPS-ISDN-Modul hinbekommen.
Allerdings mit dem Nachteil, daß man hier keinen internen Teilnehmer der FritzBox direkt anrufen kann.
Die Lösung ist für mich so nicht brauchbar, weil ich eine externe Verbindung aufbauen muss.

Falls es dennoch möglich sein sollte einen internen Teilnehmer (z.B.: **620) anzurufen, dann lasst es mich bitte wissen.

<?
//***** Konfigurationsbereich *************************************************

$doorname = 'Türsprechanlage';
$doornr = 'MSN incoming';
$fritzbox_ip = '192.168.178.1';
$password    = 'password';
$isdn = 32560  /*[Technik\Telefonanlage\ISDN Module]*/;
$pfad="D:/IP-Symcon/media/8000KHz_Mono_16Bit/";
            $dtmf_1 = $pfad."dtmf_1.wav";
            $dtmf_2 = $pfad."dtmf_2.wav";
            $dtmf_3 = $pfad."dtmf_3.wav";
            $dtmf_4 = $pfad."dtmf_4.wav";
            $dtmf_5 = $pfad."dtmf_5.wav";
            $dtmf_6 = $pfad."dtmf_6.wav";
            $dtmf_7 = $pfad."dtmf_7.wav";
            $dtmf_8 = $pfad."dtmf_8.wav";
            $dtmf_9 = $pfad."dtmf_9.wav";
            $dtmf_0 = $pfad."dtmf_0.wav";
            $dtmf_raute = $pfad."dtmf_raute.wav";
            $dtmf_stern = $pfad."dtmf_stern.wav";


            

//***** Scriptbereich *********************************************************
//INSTALLER
if ($_IPS['SENDER'] == "Execute")
{
    $object = IPS_GetObject($_IPS['SELF']);    // Hole alle Scripteigenschaften
    $ishidden = $object['ObjectIsHidden']; // Script versteckt?

    if (!$ishidden)
    {
        $device = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
        if (IPS_ApplyChanges($device))
        {
            $parent = IPS_GetParent($_IPS['SELF']);
            IPS_SetName($device, $doorname);
            IPS_SetParent($device, $parent);
            IPS_SetParent($_IPS['SELF'], $device);
            IPS_SetHidden($_IPS['SELF'], true);
            $restart = IPS_CreateVariable(1);
            IPS_SetParent($restart, $device);
            IPS_SetIdent($restart, "restart");
            IPS_SetName($restart, "DoorPI Service neu starten");
            IPS_SetPosition($restart, 1);
            IPS_SetVariableCustomAction($restart, $_IPS['SELF']);
            IPS_SetVariableCustomProfile($restart, "DoorPI");
            $reboot = IPS_CreateVariable(1);
            IPS_SetParent($reboot, $device);
            IPS_SetIdent($reboot, "reboot");
            IPS_SetName($reboot, "Raspberry neu starten");
            IPS_SetPosition($reboot, 2);
            IPS_SetVariableCustomAction($reboot, $_IPS['SELF']);
            IPS_SetVariableCustomProfile($reboot, "DoorPI");
            $door = IPS_CreateVariable(1);
            IPS_SetParent($door, $device);
            IPS_SetIdent($door, "door");
            IPS_SetName($door, "Tür öffnen");
            IPS_SetPosition($door, 3);
            IPS_SetVariableCustomAction($door, $_IPS['SELF']);
            IPS_SetVariableCustomProfile($door, "DoorPI");
            $talk = IPS_CreateVariable(0);
            IPS_SetParent($talk, $device);
            IPS_SetIdent($talk, "talk");
            IPS_SetName($talk, "Kommunikation aktiv");
            IPS_SetPosition($talk, 4);
            IPS_SetVariableCustomAction($talk, $_IPS['SELF']);
            IPS_SetVariableCustomProfile($talk, "~Switch");

        };
    };
};

//=============================================================================
$deviceid = IPS_GetParent($_IPS['SELF']);
$restartID = IPS_GetObjectIDByIdent("restart", $deviceid);
$rebootID = IPS_GetObjectIDByIdent("reboot", $deviceid);
$doorID = IPS_GetObjectIDByIdent("door", $deviceid);
$talkID = IPS_GetObjectIDByIdent("talk", $deviceid);

//=============================================================================

if($IPS_SENDER == "WebFront")
{
      SetValue($IPS_VARIABLE, $IPS_VALUE);
}

if($IPS_VARIABLE == $doorID) {
   			$id = ISDN_Connect($isdn, $doornr); // ISDN Verbindung herstellen
            do {
            	IPS_Sleep(500);
            	$callinfo = ISDN_GetConnectionInfo($isdn, $id);
            } while ( $callinfo["State"] != "4") ; // warten, bis abgenommen wurde; nach 30 Sekunden Timeout des PHP Skriptes
            IPS_Sleep(3000); //3 Sek. warten bis verbindung korrekt verbunden ist - evtl. reicht auch 1-2 Sek.
            $len = ISDN_PlayWave($isdn, $id, $dtmf_raute);
            IPS_Sleep ($len + 500);
            ISDN_StopPlay($isdn, $id);
            ISDN_Disconnect($isdn, $id);

}
?>

Pikachus_Tools.zip (458 KB)

WOW - das ist ja von hinten durch die Brust ins linke Auge…

@Hermann: Chat in 3, 2, 1 …

Du sagst es !
Es funktioniert zwar … dafür kann die Nachbarschaft dem Paketdienst gleich über das Telefon die Tür aufmachen :eek:

Vielleicht brauchts doch noch nen SIP-Server auf dem Raspberry :smiley:

Hi kann mir einer sagen, wie ich mit elcom Videofon App für IOS einen Sipgate.de Accout aktiviert bekomme ?

lange war Ruhe - aber jetzt gabs mal wieder nen größeres Update.
Linphone sollte jetzt dabei sein, sofern es ordentlich installiert wird. Anleitung dazu:
raspberrypi:start [Linphone Wiki]

Bei Frage - fragen :slight_smile:

Hi,
interessantes Projekt.
Ich habe wie besprochen eine IP Cam welche den gesamten Eingangsbereich abdeckt und würde gerne deren Bild in einen SIP-Call einbinden. Welche Tools dafür gibt es denn? Ich konnte nichts finden.

Danke!

Viele Grüße
Christian
P.S. Weiter so… ich verfolge das Projekt gespannt.

Hallo Motom,

coole Sache … dann werde ich die Tage gleich mal updaten ;0)
Hab im moment leider zu viel um die Ohren … darum habe ich mich lange nicht mehr
zu dem Thema gemeldet. Aber super Arbeit die du das machst !!! Danke dafür nochmal

Mit Linphone klappt doch auch H264 oder ?!

Vg

Andreas

IP Cam lässt sich atm nicht einbinden, ich arbeite aber an einer Lösung dafür.
Alternativ lässt sich die ELCom App nutzen, die ein Video vom SIP Call getrennt nutzen kann.

Hallo Andreas,

grundsätzlich ja - aber nicht auf dem RPi, da die CPU nicht ausreicht (zumindest atm).
Siehe dazu auch diesen Post:
raspberrypi:start [Linphone Wiki]

Other interesting things to note are that:

[ul]
[li]the echo canceller is disabled because it uses a lot of CPU power which the Raspberry PI does not have. And it is not really useful for that use case.
[/li]> [li]the only audio codecs enabled are PCMU and PCMA for the same reason. Other codecs such as speex or opus require too much CPU if we want to also have the video.
[/li]> [li]the VP8 codec is used for video.
[/li]> [li]the camera device, the sound capture device and the sound playback device are configurable. Just change the corresponding values in the main() function. The available values are listed in the logs when starting the program.
[/li]> [/ul]

What about the Raspberry PI 2 ?

The current package of Linphone Python for Raspberry PI are built for ARMv6. Therefore they are also working correctly on the Raspberry PI 2. However they do not take advantage of its ARMv7 processor and of the neon optimizations. A version specific to the Raspberry PI 2 including these performance improvements should be available soon.

Aktuell ist der Audio- und Video-Codec im Quellcode fest hinterlegt, soll aber in die Config „ausgelagert“ werden.
DoorPi/from_linphone.py at master · motom001/DoorPi · GitHub

Moin,

endlich bin ich jetzt mal wieder dazu gekommen alles zu updaten :0)
Auch eine Türsprechanlage Aussenstation liegt jetzt neben mir. Hab soweit alles wieder zum laufen bekommen.
Was ist denn jetzt die einfachste Möglichkeit z.B. den Türöffner aus IPS anzusprechen.
Damals war die Idee per SHS. Hab mir die ganzen Issues durchgelesen, hab aber nix passendes gefunden.

Ferner könnt ihr bitte nochmal kurz erklären wie bzw. an welchen Ports ihr vom PiFace den RFID Reader angeschlossen habt :0)

Danke !

Andreas

Hallo Wuppi,

welche Türstation hast du dir besorgt? Würde auch gerne mal DoorPi testen…
Hast du einen Link oder dergleichen?

Danke!

Grüße
Dan