FHEM Forum

FHEM => Automatisierung => Thema gestartet von: layman am 21 August 2013, 18:34:24

Titel: Automatischer Anruf eines internen Fons bei Klingelsignal
Beitrag von: layman am 21 August 2013, 18:34:24
Hallo,

ich benutze eine ELV FS20 KSE Funk-Klingelsignal-Erkennung und habe
FHEM vom fhem-5.4-fb7390.image installiert.
Der CUL-Stick CC1101-USB-Lite 868MHz (CUL) ist erfolgreich
geflasht und funktioniert mit der auf einer Fritz!Box
installierten FHEM-Version.
Die Konfigurationsdatei fhem.cfg wurde um die
folgenden Zeilen ergänzt:
##########################################################################################
#Haustuerklingel 1
define haustuerklingel_1 FS20 3ed4 01
attr haustuerklingel_1 room FS20
define FileLog_haustuerklingel_1 FileLog ./log/haustuerklingel_1-%Y.log haustuerklingel_1
attr FileLog_haustuerklingel_1 logtype text
attr FileLog_haustuerklingel_1 room FS20
define haustuerklingel_1_on notify haustuerklingel_1:on {FBCall("**610")}
##########################################################################################
#Haustuerklingel 2
define haustuerklingel_2 FS20 3ed4 00
attr haustuerklingel_2 room FS20
define FileLog_haustuerklingel_2 FileLog ./log/haustuerklingel_2-%Y.log haustuerklingel_2
attr FileLog_haustuerklingel_2 logtype text
attr FileLog_haustuerklingel_2 room FS20
#
#define haustuerklingel_2_off notify haustuerklingel_2:off {FBHangOn("0")}
##########################################################################################

Wie man sicher bemerkt, orientieren sich diese Änderungen an einem Vorschlag eines
anderen Teilnehmers aus dem FHEM-Forum.
Die weiteren Empfehlungen dieses Teilnehmers (sinngemäß an die eigenen
Klingelbezeichnungen und an die eigene internen Rufnummer eines Fritz!Fons angepasst)
führen nicht zum Erfolg:

Der andere Teilnehmer fügte der Datei 99_myUtils.pm folgende Zeilen hinzu:

##############################################
#
package main;

use strict;
use warnings;
use POSIX;

sub
FBCall ($)
{
  my ($callnr) = @_;
  $callnr = "ATP3 ATDT".$callnr."#";
  my $ret = "ATD: " . `echo $callnr | nc 127.0.0.1 1011`;
  $ret =~ s,[\r\n]*,,g;
  InternalTimer(gettimeofday()+8, "FBHangOn", "", 0);
  return;
}

sub FBHangOn ()
{
  my $ret = " ATH0: " . `echo "ATH0" | nc 127.0.0.1 1011`;
  $ret =~ s,[\r\n]*,,g;
 return;
}

Obwohl ein Teilnehmer einer früheren Diskussion fragte, was
die IP 127.0.0.1 zu bedeuten hat und sie durch die IP der eigenen
Fritz!Box zu ersetzen sei, wurde diese Frage, soweit ich sehen konnte,
nie beantwortet.

Ich bin kein Informatiker. Seit zwanzig Jahren habe ich mir vorgenommen,
Perl zu lernen, habe aber auf dem iMac gelegentlich mit anderer Software
programmiert. Mir würde sehr helfen, wenn ich  zum Einfügen in
die Datei 99_myUtils über das Webfrontend einen passenden Code-Schnipsel
erhalten könnte, der bewirkt, dass (über die evtl. auch zu korrigierenden
Zeilen in fhem.cfg) bei einem Klingelimpuls  mehrere Sekunden lang  
die interne Rufnummer **610 meines Fritz!Fons angerufen wird.

Obwohl ich nicht genau weiß, ob der CallMonitor aktiviert sein muss,
habe ich ihn vorsichtshalber mit #96*5* angeschaltet.

MfG K. F. (alias layman)
Titel: Aw: Automatischer Anruf eines internen Fons bei Klingelsignal
Beitrag von: fiedel am 21 August 2013, 19:06:22
Hallo Layman,

127.0.0.1 steht für "localhost" und meint damit das lokale System. Nur wenn FHEM auf einem anderen Rechner läuft, muss man dort die IP der FB eintragen. Ansonsten - testen, gucken, was im Log steht, ggf. Loglevel erhöhen und wenn es geht, hier posten, woran es gehangen hat. ;o)
Testen kannst du am Besten, wenn du erst mal ohne Notify "{FBCall("**610")}" in der FHEM- Befehlszeile eingibst.
Anstelle der IP- Adresse könntest du noch probieren "nc localhost 1011" zu verwenden. Manchmal funktioniert eines davon nicht, obwohl es das Selbe ist.

Viel Erfolg

Frank

Edit: Dieser Thread (http://forum.fhem.de/index.php?topic=13305.msg82051#msg82051) sollte interessant für dich sein, oder auch dieser (http://forum.fhem.de/index.php?topic=12959.msg78853#msg78853).
Titel: Aw: Automatischer Anruf eines internen Fons bei Klingelsignal
Beitrag von: layman am 23 August 2013, 20:02:32
Hallo,
danke für die Antwort. Vor meiner ersten Mail hatte ich schon
einige Tage vergeblich eine Lösung gesucht. Dann ist eine
Empfehlung, dass man weiter probiern soll, nicht sehr
motivierend. Ich habe aber weiter gesucht und probiert:

Jetzt habe ich den automatischen Anruf eines internen Fons bei einem  
Klingelsignal über die ELV FS20 KSE Funk-Klingelsignal-Erkennung
und den CUL-Stick mit FHEM mit Erfolg eingerichtet.

Ich folgte dem Hinweis aus dem Forumsbeitrag
<Link (http://forum.fhem.de/index.php?topic=13026.msg79645#msg79645)>
zur Einrichtung eines in Wirklichkeit gar nicht vorhandenen
Telefongeräts (FON 1 als analoges Gerät mit der Fritz!Box eingerichtet,
eine von den ungesnutzten ISDN-Nummern zugeteilt und danach als
anrufendes Gerät mit der Rufnummer **1 in den Code geschrieben).
[Zu beachten ist, dass die Meldung der Fritz!Box, die Anmeldung des
ja gar nicht vorhandenen Geräts gescheitert ist, einfach ignoriert
werden muss.]

Die Veränderungen der Dateien config.fmg und 99_Utils.pm sind
durch die Forumsbeiträge
<Link (http://forum.fhem.de/index.php?topic=13305.msg87200#msg87200)> und
<Link (http://forum.fhem.de/index.php?topic=13305.msg87269#msg87269)>
inspiriert:

config.fmg wurde von mir durch die folgenden Zeilen ergänzt:

######################## Beginn ################################
#Haustuerklingel 1
define haustuerklingel_1 FS20 3ed4 01
attr haustuerklingel_1 room FS20
define FileLog_haustuerklingel_1 FileLog ./log/haustuerklingel_1-%Y.log haustuerklingel_1
attr FileLog_haustuerklingel_1 logtype text
attr FileLog_haustuerklingel_1 room FS20
define haustuerklingel_1_on notify haustuerklingel_1:on {FBCallr("**1","**610",20,"192.168.178.1","IFzB19EtdL")}
define haustuerklingel_1_off notify haustuerklingel_2:off {FBHangOn("0")}
##################################################################
#Haustuerklingel 2
define haustuerklingel_2 FS20 3ed4 00
attr haustuerklingel_2 room FS20
define FileLog_haustuerklingel_2 FileLog ./log/haustuerklingel_2-%Y.log haustuerklingel_2
attr FileLog_haustuerklingel_2 logtype text
attr FileLog_haustuerklingel_2 room FS20
#
######################### Ende ################################

Den zweiten Teil zur Haustürklingel 2 könnte ich gegenwärtig
auch weglassen, weil die Signale von mir gegenwärtig nicht
ausgewertet werden.

99_Utils.pm wurde von mir vor dem abschließenden ";1" um die folgenden
Zeilen ergänzt:

######################## Beginn ################################
sub
FBCallr($$$$$)
{
 use Net::Telnet;
 my $name = "FBCallr";
 my ($Fon,$CallNr,$Duration,$Port,$Password)= @_;
 my $telnet = new Net::Telnet ( Timeout=>10, Errmode=>'die');
 Log GetLogLevel($name,4), "$name: Connecting to FritzBox:$Port...";
 $telnet->open($Port);
 $telnet->waitfor('/password: $/i');
 $telnet->print($Password);
 $telnet->waitfor('/# $/i');
 Log GetLogLevel($name,4), "$name: Dialing to FritzBox: from:$Fon to:$CallNr...";
 $telnet->print('echo "ATP'.$Fon.'2 ATD**'.$CallNr.'" | nc 127.0.0.1 1011');
 my $output = $telnet->waitfor('/# $/i'); print $output;
 Log GetLogLevel($name,4), "$name: Dialing:$Duration seconds...";
 sleep($Duration);
 Log GetLogLevel($name,4), "$name: HangOn to FritzBox...";
 $telnet->print('echo "ATH0" | nc 127.0.0.1 1011');
 my $output = $telnet->waitfor('/# $/i'); print $output;
 Log GetLogLevel($name,4), "$name: Disconnecting...";
 $telnet->print('exit');
 return;
}
######################### Ende ################################

Selbstverständlich muss vor der Benutzung mit einem Fritz!Fon mit
der Tastenkombination #96*7* Telnet angeschaltet werden.
Ebenso darf nicht vergessen werden, nach der Sicherung
der Änderungen in den Dateien config.fmg und 99_Utils.pm mit
der Befehlsfolge "shutdown restart" FHEM neu zu starten.
Wenn danach der Webbrowser anzeigt, dass die gewählte Seite
nicht mehr erreichbar ist, ist in den meisten Fällen
nach dem Aufruf der Adresse
<http://192.168.178.1:8083/fhem (//192.168.178.1:8083/fhem)> alles wieder in Ordnung.

Fazit: Das Ziel ist erreicht, aber auf einem sehr umständlichen Weg.
Die Verwendung einer vom Telefonanbieter zugeteilten, aber nicht
genutzten Telefonnummer wird in vielen Fällen gar nicht möglich sein.
Vermutlich helfen in diesen Fällen VoIP-Rufnummern.

Doch hoffe ich, dass mir jemand noch eine elegantere Lösung
mitteilen kann, bei der eine Information direkt an eine
interne Rufnummer geschickt wird.

MfG K. F. (alias layman)
Titel: Aw: Automatischer Anruf eines internen Fons bei Klingelsignal
Beitrag von: fiedel am 24 August 2013, 09:12:47
Was genau möchtest du denn erreichen (welche/s Telefon/e soll/en klingeln, wenn es an der Tür klingelt?) und welche Fritzbox hast du?

Du richtest normalerweise in der FB eine Kurzwahl ein (z.B. **123) die ein beliebiges Telefon ruft. Diese Kurzwahl verwendest du im Code zum Wählen.

Vermutlich geht es kaum einfacher: Es klingelt und FHEM soll das erkennen (KSE -> CUL), dann soll FHEM eine Telefonnummer wählen (Notify -> Code zum wählen in der 99_MyUtils.pm), dann soll die FB das entspr. Tel. rufen (Einrichtung einer Kurzwahl an eine Nebenstelle oder ein externes Telefon).

Gruß

Frank