Hauptmenü

FB_CALLMONITOR

Begonnen von onkeldittmeyer, 26 Dezember 2019, 14:56:15

Vorheriges Thema - Nächstes Thema

onkeldittmeyer

Gute Tag,

ich versuche gerade, den Bildschirm eines Tablets einzuschalten, wenn ein Anruf eingeht. Dazu muß FHEM in FB_CALLMONITOR ein Event "ring" abgreifen und in der Folge ein http-Event auslösen.

Kann mir jemand sagen, wie ich das hinbekomme?

Danke!

Otto123

Hi,

ich mache etwas anderes wenn es klingelt, aber vielleicht hilft es als erster Ansatz.

defmod nty_AnrufKlingelt notify FBMon:.*ring { \
  my $number = ReadingsVal("FBMon","internal_number",99);;\
  my $Anrufer = ReadingsVal("FBMon","external_number",99);;\
  my $AnruferName = ReadingsVal("FBMon","external_name",'');;\
  if (($number =~ m/123456[7,8]/) and Value("VUPLUS1") eq "on"){ \
    fhem "set VUPLUS1 showtext Anruf von $AnruferName $Anrufer";;\
  } \
}


Du hast ja nicht detailliert geschrieben wo genau Dein Problem ist :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

onkeldittmeyer

Mein Problem ist, dass ich keine Ahnung habe. ;-)

Muß ich ein Gerät definieren, das bemerkt, wenn das Telefon klingelt und dann ein http-Ergeinis auslöst?

Otto123

Die Beschreibung: Ich habe keine Ahnung finde ich unzureichend ;)
Hast Du ein Telefon? ::)
Wenn ja: hast Du einen Callmonitor in FHEM? Wenn Du es nicht weißt mach bitte:
list TYPE=FB_CALLMONITOR
Wenn da ein Gerät gelistet wird ist es Dein Callmonitor ;)
Wenn Du also einen hast, baust Du ein notify (mein Beispiel) und reagierst auf einen Anruf.
Mein notify reagiert auf einen eingehenden Anruf von irgendeiner Nummer auf den eigenen Nummern 1234567 und 1234568
Das notify führt einen Befehl aus, in meinem Beispiel zeigt es einen Text auf meinem Satreceiver
set VUPLUS1 showtext Anruf von $AnruferName $Anrufer

Diesen Befehl müsstest Du mit deinem HTTP Befehl austauschen. Hast Du schon einen HTTP Befehl der funktioniert?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

onkeldittmeyer

ZitatDie Beschreibung: Ich habe keine Ahnung finde ich unzureichend 

OK, sehe ich ein, trifft den Nagel aber leider auf den Kopf.....


Zitat(...) Wenn ja: hast Du einen Callmonitor in FHEM?  (...)

Ja, das Biest nennt sich "Fritz". Ich habe ja auch Anruflisten angelegt und in FTUI eingebunden.

Einen funktionierenden http-Befehl habe ich auch. Lautet http://interne.ip:8765/broadcast?ring 
Wenn ich den in den Browser eingebe, macht der, was er soll (auf dem Tablet wird die gewünschte Seite in FTUI angezeigt).

Jetzt muß ich aber fhem erklären, dass beim Klingeln einer der drei Fritz-Box-Telefonnummern o.g. http-Befehl aufgerufen wird.

Wie funktioniert das denn mit dem notify? Wo wende ich den von Dir geposteten Code an? Einfach in die FHEM-Befehlszeile kopieren oder ein Gerät definieren?

Otto123

Fang vielleicht nochmal hier an?
Mein Codebeispiel ist für die Raw Definition, die erreichst Du so wie hier.

Deine URL ist natürlich noch kein funktionierender FHEM Befehl, du kannst eventuell versuchen ihn so in der FHEM Kommandozeile als Shell Befehl abzusetzen und zu testen:
{qx(wget http://interne.ip:8765/broadcast?ring)}
Wenn das funktioniert, kannst Du diesen in dem Codebeispiel von mir einbauen.

Ein notify reagiert auf einen Event FBMon:.*ring wenn das Gerät bei Dir Biest heisst musst Du dies so schreiben Fritz:.*ring. Der rest zwischen den {} ist Perlcode, der fragt die Nummer ab und setzt am Ende den Befehl ab.

Wenn bei Dir nur drei Nummern existieren und es egal ist, kannst Du die ganze Abfrage weglassen. Dann macht er es einfach wenn es klingelt.
define nty_AnrufKlingelt notify Fritz:.*ring {qx(wget http://interne.ip:8765/broadcast?ring)}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

onkeldittmeyer

#6
Hallo Otto,

der letzte Code funktioniert einwandfrei. Danke!

Letzte Frage: Wo muß ich jetzt die Nummer auf die reagiert werden soll (es soll nur auf eine der drei Nummern reagiert werden) genau einbauen?

Es muß ja irgendwo die Bedingung "wenn Nummer 1234 klingelt" davor. Kommt das dann in die geschwungenen Klammern vor das >qx<?

Otto123

Wenn Du nicht mal ein Stück Code selbst probierst wird das nie was :)

Für eine bestimmte Nummer die angerufen wird (der Code ist für die DEF - NICHT für die Raw Definition):
{ my $number = ReadingsVal("Fritz","internal_number",99);if ($number =~ m/12345678/){qx(wget http://interne.ip:8765/broadcast?ring)}}

Oder willst Du das für eine bestimmte Nummer die anruft?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

onkeldittmeyer

Die Befürchtung habe ich auch. Ich habe Probleme mit dem Verständnis dessen, was in den geschwungenen Klammern steht.

Verstanden habe ich (glaube ich), dass

>define nty_AnrufKlingelt notify Fritz:.*ring<

ein Gerät definiert, das auf das Ereignis "Fritz:.*ring" reagiert, also das Telefonklingeln. Mutmaßen würde ich jetzt, dass "qx" und "wget" ein "http-get" absetzen. Aber wirklich begreifen tue ich es nicht. Das ist das Problem, mit dem Probieren von Code-Stücken. Ich verstehe die Syntax nicht, also wo die Bedingung eingebaut werden muss und insbesondere auch, welche Variablennamen wofür stehen. In den "Ersten Schritten" steht da nichts zu.

Der Code, den Du mir geschrieben hast, funktioniert jedenfalls einwandfrei. Ein bestimmtes Telefon im Haus (bestimmte MSN) klingelt, Tablet geht an. Danke nochmal dafür, hätte ich niemals hinbekommen. :-)

Kann man eigentlich auch mehrere Befehle absestzen, also zum Beispiel in dem Fall eine zweite IP aufrufen? Müßte es dann:


{ my $number = ReadingsVal("Fritz","internal_number",99);if ($number =~ m/12345678/){qx(wget http://interne.ip:8765/broadcast?ring)}
{qx(wget http://noch.eine.interne.ip:8765/broadcast?ring)}}


heißen?

Otto123

Das Wissen ist wie oft breit gestreut, die Basis von der FHEM Doku ist die commandref, da muss man nicht alles lesen, aber wenigsten die Einleitung. Leider ist das "Inhaltsverzeichnis" mittlerweile so groß, da kommt man gar nicht bis zur Einleitung :)

Gut fangen wir von "hinten" an :)
Du willst Kommandos in FHEM absetzen, hier sind die drei Möglichkeiten beschrieben
https://fhem.de/commandref_modular.html#command

Was wir hier im Beispiel verwenden ist Perl Code, der steht hier dazwischen {} da geht es dann streng nach der Doku https://perldoc.perl.org/index.html ;)
Was Du jetzt machen willst muss (für unser Beispiel) so aussehen, das kannst Du so in der Kommandozeile testen!:
{qx(wget http://interne.ip:8765/broadcast?ring);;qx(wget http://noch.eine.interne.ip:8765/broadcast?ring)}

Unser Beispiel ist ein notify mit Perl Code
- die Beschreibung kurz und knapp gibt es hier https://fhem.de/commandref_modular.html#notify
- mit viel Erklärung findest Du sie hier https://wiki.fhem.de/wiki/Notify
Wir machen so:
define gerätename notify regExp {PerlCode}
es gibt auch:
define gerätename notify regExp FHEMCode
define gerätename notify regExp "ShellCode"

Ich hoffe es hilft :)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

onkeldittmeyer

Nochmal Danke für Deine Hilfe. Ich fürchte, ich werde sowas wie "Pearl-Code" wohl nicht verstehen lernen. Das scheint ja eher ein Vollzeit-Job zu sein. Jedenfalls sieht es nicht so aus, als könne man das nebenbei Sonntagmittag lernen.  ::)

Otto123

Es sind zwei völlig verschiedene Dinge :)
Pearl Code -> https://en.wikipedia.org/wiki/PEARL_(programming_language)
Ist eine Echtzeit Programmiersprache, die beherrschen hier im Forum wahrscheinlich nur gaanz wenige :)
Perl Code -> https://en.wikipedia.org/wiki/Perl
Das ist die Sprache die FHEM im 💕 spricht :)

Komm - der Sonntagnachmittag hat noch ein bisschen :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

onkeldittmeyer

Deine Ermunterungen in allen Ehren. Aber das sprengt mein Talent. Ich bin froh, mein FHEM so hingebastelt zu haben, wie es jetzt ist.

Dafür danke ich nochmal Dir und einigen weiterne Forenkollegen nochmal ausdrücklich!  :D