gpio schalten per VOIP

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Eigentlich möchte ich etwas recht Einfaches realisieren, und zwar dass durch einen Telefonanruf (VOIP) ein gpio geschaltet wird. Mein RPi hängt per LAN an einer Fritz!Box (7390) und die Weiterleitung eines Anrufes wäre kein Problem. Habe schon stundenlang gesucht und offensichtlich könnten wohl einige Programme wie Asterisk das bewerkstelligen, aber die sind alle monströs groß und viel zu aufwändig für solch eine kleine Aufgabe ... hat hier vielleicht jemand eine Idee? Wäre echt super! :D

    Achja, progammieren in C++ ist kein Thema, und von meinem neu erstandenen RPi bin ich echt begeistert!!! :thumbs1:

  • Wie stellst du dir das vor?

    Wenn du anrufst, dann soll der GPIO geschaltet werden. Bleibt er dann an, bis du das nächste mal anrufst, oder soll er ausgehen, wenn du auflegst?

    Mal die erste Alternative vorrausgesetzt und angenommen das Schalten des GPIO Pins ist nicht zeitkritisch:

    Programmablauf: per Cronjob alle x Minuten

    • Anrufliste als CSV von der Fritzbox laden (die kann sowas definitiv)
    • Mit deinem Programm die CSV auswerten
    • Bei korrekter angerufender (und anrufender) Telefonnummer GPIO schalten
    • Anrufliste von Fritzbox löschen (Alternativ: Zeitpunkt des Schaltens speichern und bei 3. darauf prüfen)
  • Moin ... nein, es wäre kein nochmaliger Anruf nötig denn der gpio könnte einfach zeitgesteuert wieder ausschalten.

    Zusätzliche Auswertungen auf der Fritzbox sind auch nicht nötig denn ich muss nur den Anruf auf die entprechende Nummer (ich habe noch eine unbenutzte Nr. frei) als VOIP weiterleiten an den RPi.

    Sogar welche Nummer anruft ist egal denn es wird nichts Wichtiges dadurch eingeschaltet.


    Also falls es wirklich jemanden interessiert was ich damit vorhabe: Ich will den RPi meine Heizung steuern lassen (sie ist recht komplex mit zwei Holzöfen mit Wasseranschluss, Pufferspeicher, Ölbrenner, Solarthermie ... und bisher funktionierend aber eben strohdoof gesteuert). Um nicht zuviel Energie für die Warmwasserumwälzung zu verschwenden verwende ich eine zeitgesteuerte Pumpe die Morgens und Abends einschaltet, und wenn jemand außerhalb dieser Zeit Warmwasser möchte ohne viel weglaufen zu lassen, ruft er einfach per Telefon diese eine Nummer an und schon läuft die Pumpe für einige Minuten an.

  • Wie wäre es mit einem dect Telefon das an der fritz angemeldet wird. Dann vom klingellautsprecher das Signal mit transistor oder so abgreifen und in den pi leiten. Ich weiß das sollte man dann absichern mit optokoppler und so. Wüsste jetzt auf die schnelle aber auch nicht wie. Wäre aber ein Signal was der pi abfangen könnte als high Signal. Dann daraufhin Aktion starten.

  • Ja, das ginge natürlich schon, aber es wäre schon irgendwie von hinten durch die Brust ins Auge, oder nicht? Schließlich habe ich ja ein direktes (Cat-)Kabel zwischen Fritzbox und dem RPi und muss nur noch irgendwie das Anrufsignal abfangen, das muss doch möglich sein!

    Hat vielleicht jemand Erfahrungen mit Elastix? Aber das hört sich auch schon wieder so riesig und komplex an ... oder vielleicht kann es ja YATE, hat das einer am Laufen?

  • ja, zwar nicht auf direkte Art und Weise aber ich habe "linphone" installiert und dieses Programm schreibt immer bei einem Anruf etwas in die LogDatei "/home/pi/.linphonerc" (falls Du als Pi angemeldet bist), ich checke dann einfach nur noch wann diese Datei geändert wird.
    Ist zwar nicht unbedingt die schönste Methode aber funktioniert! ;)

  • Doch, den gibt es sicherlich, auch linphone funktioniert bei mir tadellos und ich kann damit vom raspy aus anrufen und angerufen werden, aber die meisten können einfach viel zu viel und sind zu umfangreich um einfach nur zum Schalten eines gpio´s zu fungieren! Da muss man sich durch tausende Zeilen Code kämpfen und Unmengen rauslöschen nur um eine kleine "call"-Funktion zu isolieren!

    Kann es sein dass Du deutlich mehr willst als nur irgendetwas per VOIP-Anruf einzuschalten?

  • Ja, klar, kein Problem, aber wie ich bereits gesagt habe schalte ich einfach nur wenn irgendein Anruf hereinkommt, unabhängig von der Nr! Aber die Anrufernummer steht auch in der Datei und man könnte auch die sehr einfach auslesen falls man sie braucht!

  • Hallo
    Wäre natürlich klasse, wenn man dann noch eine Nummer anhängen
    und mehrere Funktionen auslösen könnte.
    Aber im Moment reicht mir die eine Funktion. Mit Linux bezw. Python
    fange ich gerade an und habe schon etwas gebastelt:
    RBPi als Türklingel

    Eigentlich liegt mir aber VS bezw. VCPP näher und da bekomme ich fast alles hin.

    Danke dir

    Gruß
    GJ

  • Die Nummer herauszubekommen ist kein Problem! Hast Du Linphone mal installiert? Wenn Du es fertig konfiguriert und im Router (bei mir ist das eine Fritz Box 7390) die Weiterleitung an den raspy eingerichtet hast, erscheint nach einem Anruf die Datei ".linphonerc" im /home/pi Verzeichnis.

    In dieser Datei ist unter "[call_log_X]" (beim letzten Anruf [call_log_0] die ganzen Anrufe zu sehen und in dieser Section auch ein Eintrag "from=" mit der entsprechenden Nummer. Wäre also ein einfaches dieses mit den Ini-File Funtionen von C++ auszulesen.

    Da ich einige Menüs und ähnliches brauchte habe ich diesmal mit dem CBuilder gearbeitet, der ist für so etwas doch deutlich einfacher als VC, aber der Unterschied im Code ist ja nur minimal.

    Ich habe ein Endlosschleife die immer wieder diese Funktion aufruft und schaut, ob die Datei in den letzten 10s geändert wurde:


    #include <sys\stat.h>

    if ( !access ( "/home/pi/.linphonerc", 4 ) ) { // falls Datei exisitiert

    struct stat s;
    if ( stat ( "/home/pi/.linphonerc", &s ) ) // die Datei-Infos auslesen
    return false;

    time_t now; // aktuelle Zeit holen
    time ( &now );
    if ( ( now - s.st_mtime ) < 10 ) // falls zwischen jetzt und letzter Änderung
    Do something // weniger als 10s vergangen sind
    }

    Linphone selber starte ich automatisch wenn raspy hochfährt.

  • Achso, du machst das von Windows aus. Das will ich vermeiden.
    Der Pi soll völlig autark arbeiten. Er muss selber kontrollieren und reagieren.
    Mal sehen ob ich das hin bekomme.
    Im Moment tut sich noch nichts, weil mein sipgate Account noch
    in der Mache ist.
    Trotzdem vielen Dank - und auch für die schnellen Antworten.

    Gruß
    GJ

  • Nein nein, der pi wurschtelt völlig alleine und autonom vor sich hin, lediglich zur Überwachung habe ich unter Windows ein Programm geschrieben das die entsprechenden Parameter per LAN liest und graphisch darstellt ... mein raspy sitzt ja im Keller als Heizungssteuerung und ist somit fernab jeden Monitors, habe mich wohl vorhin etwas falsch ausgedrückt! :(

    Du brauchst keinen sipgate-Account, das kannst Du alles über die FritzBox einrichten und testen, notfalls über die internen Nummern falls Du keine mehr von außen frei hast!

  • Sorry, mein Fehler. Hätte richtig lesen sollen.
    Sei nicht böse, ich habe eine andere Lösung gefunden:

    Nutze mein Smartphone schon länger mit VPN-Verbindungen zur FritzBox.
    Meine Idee war es, dann eher eine Android App zu schreiben um die GPIO
    anzusprechen. Es gibt aber schon fertige Apps. Habe jetzt Raspberry Control
    installiert und es sieht sehr gut aus. Man hat vollen Zugriff auf die GPIO
    und kann auch noch andere Features nutzen. Es muß aber auch eine kleine
    Software auf dem Pi installiert werden.

    Viele Grüße
    Jo

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!