Alexa soll sagen wer anruft! Fritzbox binding

  • Komisch bei mir macht alexa nichts :( könnte es an dem error hier liegen das die Rule abbricht?:

    2021-01-27 10:11:22.089 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Phone is ringing': Could not cast XXXXXX,XXXXXXXXX to void; line 8, column 25, length 34

    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

  • jup.

    zum testen items

    Code
    Switch  fboxRinging         "Phone ringing [%s]"                {fritzboxtr064="callmonitor_ringing" }
    Switch  fboxRinging_Out     "Phone ringing [%s]"                {fritzboxtr064="callmonitor_outgoing" }
    Call    fboxIncomingCall    "Incoming call: [%1$s to %2$s]"     {fritzboxtr064="callmonitor_ringing" } 
    Call    fboxOutgoingCall    "Outgoing call: [%1$s to %2$s]"     {fritzboxtr064="callmonitor_outgoing" }
    Call    fboxIncomingCallResolved    "Incoming call: [%2$s]"     {fritzboxtr064="callmonitor_ringing:resolveName" }

    und rule

  • Sauber ! Das tut - ich glaub es hat schon gereicht das ich

    // val CallType incCall = fboxIncomingCall.state as CallType

    rausgenommen hab.


    Sehr sehr geil ! Das find ich jetzt richtig angenehm !

    Geht das auch für eine Gruppe von Echos oder muss ich jeden echo einzeln aufnehmen ?

    Vielen Dank für die Hilfe

    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

    Einmal editiert, zuletzt von xSaSx (27. Januar 2021 um 13:40)

  • also einfach ne gruppe erstellen : zb

    Group Announcement_Echos "Announcement Echos"

    und dann

    Announcement_Echos.sendCommand("Hallo, " + callerName + " ruft gerade an.")

    ?

    Support ME ! Buy me a Coffee :thumbup:


    Dont Touch ME

    LivingRoom: SilverStone Milo ML03 | Gigabyte B450 | Ryzen 3400G | 250GB NVME | 16GB DDR4-3200| Win10 64 bit | KODI 18 | Logitech Harmony Elite | SONOS Playbar + SUB
    BedRoom: PLAY:3
    Kitchen: PLAY:3
    BathRoom: Play:3

  • Hallo,

    das scheint so bei OpenHAB 2 zu funktionieren.
    Ich bin mittlerweile auf OpenHAB 3 umgestiegen.
    Da wird die Rufnummer mit dem FritzBox-Binding aufgelöst.
    Der Callmonitor existiert im fritzboxtr064-Binding nicht mehr.
    Wie sollte da die Rule aussehen? Grade auch mit dem auslesen des Anrufers aus dem Telefonbuch?

    Kann mir da bitte einer weiterhelfen?Ich bin am verzweifeln :)

    Vielen Dank vorab!


    EDIT:
    Ich habe es hinbekommen!
    Hier eine kleine Anleitung für alle die OH3 benutzen:

    Es müssen diese beiden Bindings installiert werden: AVM FRITZ!Box Binding & TR-064 Binding

    AVM.items

    WICHTIG: Um das Telefonbuch auslesen zu können muss beim Profile (phonebook="tr064_3Afritzbox_3Ad1e06eda99") der Identifier auf Eure ID angepasst werden!

    AVM.rules

    Bei der Rule wird im LOG gespeichert wer, mit welcher Nummer auf Deine Nummer anruft.

    Außerdem gibt die Alexa folgendes aus: Eingehender Anruf von ANRUFER

    Ich hoffe, ich kann hiermit jemanden weiterhelfen!

    LG
    DJFlaxi

  • Hallo in die Runde.

    Ich bin noch sehr neu in dem Thema und würde das gerne nachbauen. Kannst du das etwas detaillierter erklären.

    Ich habe:

    - OH3
    - Fritz und tr064 Binding installiert und funktioniert auch (sehe zB die Telefonnummer als Item bei Incoming Call)

    Den oberen Quellcode habe ich bei den Items importiert und den phonebook Eintrag getauscht.
    im Anhang sieht man die Items die erzeugt wurden.
    Wenn ich jetzt jemanden anrufe dann tut sich noch nichts.
    Liegt hier schon der Fehler?

    Auch wie ich die rule eintrage verstehe ich nicht ganz. Wenn ich auf rule und dann auf code klicke geht das auch nicht. (siehe Anhang)

    Grüße Chris

  • Ich versuche das gerade nachzubauen. Grundsätzlich funktioniert das Ganze

    Eigentlich schwebt mir vor, daß Alexa mir in einer Routine oder irgendwie anders Bescbeid gibt, wenn ich einen Anruf verpaßt habe.
    Die Jetzige rule plappert auch brav los, wenn ich einen Anruf kriege. Auf dem Echo Show wird auch eine Nachricht eingeblendet.

    Wie stelle ich das an, mir die Benachrichtigung hinterher vernünftig anzuzeigen / vorlesen zu lassen. Zur Zeit kommt eine seltsame Meldung, die möglicherweise daran liegt, daß die Variablen nach dem Anruf wieder weg sind?

    Code
    rule 	"Eingehender Anruf"
    when	Item fboxCallState changed to RINGING
    then		var tr064Actions = getActions("tr064","tr064:fritzbox:1234abc")
    		var String caller_number = (fboxIncomingCall.state as StringListType).getValue(1)
    		var String caller_name = tr064Actions.phonebookLookup(caller_number)
    		logInfo("Anruf", "Anrufer Name: " + caller_name + " Anrufer Nummer: " + caller_number)
    		var String msg = "Eingehender Anruf von: "+ caller_name
            Echo_Living_Room_Announcement.sendCommand(msg) 
            Echo_Kitchen_Announcement.sendCommand(msg)   
    end


    Die Rule von DJFlaxi hat bei mir übrigens auch nicht funktioniert.
    Bei den items hatte ich das Problem, daß der Unterstrich meiner Tastatur anscheinend nicht dasselbe ist, als wenn ich das von oben kopiert hatte tr064_fritzbox_12345abc

  • du müsstest alle anrufe in nem string item speichern wenn du die später abrufen willst. der string muss dann bspw per cron 0 uhr gelöscht werden.

    brainstorm:

    da du sicher namen und keine numern haben möchtest, würde sich die rule zum umwandeln der nummern in namen anbieten. die müsste dann ergänzt werden.
    als erstes brauchst du natürlich das string item zum speichern
    String Nummernspeicher "[%s]"
    dann müsstest du in der o.g. rule ergänzen...bspw so:

    - in zeile 8 wird ein neuer wert definiert, nur der anrufername ohne deinen text bei msg
    - in zeile 11 aktualisierst du das item mit dem aktuellen status + dem neuen anrufernamen (da muss später natürlich noch formatiert werden, kommasetzung etc)
    dann wie gesagt per cron die liste täglich leeren...bspw

    Code
    rule "anrufspeicher leeren"
    when
        Time cron "0 0 0 * * ?" 
    then
      Nummernspeicher.postUpdate("")
    end

    optional kann/sollte der speicher natürlich auch nach dem manuellen abfragen geleert werden. dafür einfach nen leeren wert an das item Nummernspeicher senden, genau wie bei der cron rule.


    als letztes brauchst du natürlich irgendeinen trigger um die anruferliste abzufragen. mit dem sendest du dann bspw per alexa announce den status des Nummernspeicher items. bspw:

    Code
    .......
    .......
    val anruferliste = Nummernspeicher.state.toString
    Echo_Kitchen_Announcement.sendCommand(anruferliste)
    .......
    .......
  • Vielen Dank schon einmal.
    Ich bin gespannt, ob ich das hinbekomme.

    eigentlich wollte ich mit missedcalls arbeiten. Da habe ich mich schon gefragt, wie das hinbekomme.
    Ein einfaches "wenn der Wert sich verändert" wäre da ja nicht gegangen. Denn es wird ja nur ein bestimmter Zeitraum (z.B. 10 Tage) erfasst und an Tag Elf wäre der missed Calls wert dann wieder niedriger.

  • ich habe bereits im hinterkopf, dass natürlich später nicht jeder anrufername gespeichert werden soll, speziell wenn man rangegangen ist.
    das könnte per rule und timer erledigt werden:
    - am anfang der rule wert anlegen und missed calls abfragen -> timer- > missed calls nochmals abfragen und anzahl vergleichen
    - wenn abfrage 2 != abfrage 1 -> anrufername speichern

    aber mach erstmal den anderen kram.

  • Dank der großartigen Vorarbeit läuft es

    Es hängt zwar noch die "NULL" im Nummernspeicher.state, aber das wird ja gelöscht.

    Kann gerade nicht testen. Gibt Ärger, wenn alle Nase lang das Telefon klingelt.

    Code
    2022-09-13 19:34:19.648 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'Dummy' received command ON
    2022-09-13 19:34:19.656 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Dummy' changed from OFF to ON
    2022-09-13 19:34:19.664 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'Echo_Kitchen_Announcement' received command NULLPatrick 
    2022-09-13 19:34:19.680 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'Echo_Kitchen_Announcement' predicted to become NULLPatrick 
    2022-09-13 19:34:19.684 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Echo_Kitchen_Announcement' changed from  to NULLPatrick 
    2022-09-13 19:34:19.685 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Echo_Kitchen_Announcement' changed from NULLPatrick  to
    Code
    rule "Anruferabfrage"
    when    Item Dummy changed to ON 
    then    val anruferliste = Nummernspeicher.state.toString
            Echo_Kitchen_Announcement.sendCommand(anruferliste)
    end

    Ich war ja ganz mutig und wollte jetzt Alexa fragen, ob jemand angerufen hat

    Code
    when Item Echo_Kitchen_LastVoiceCommand changed to "hat jemand angerufen?"

    da sagt Alexa, daß sie es nicht weiß..... Wäre auch zu einfach gewesen.

  • Es hängt zwar noch die "NULL" im Nummernspeicher.state, aber das wird ja gelöscht.

    genau. die null wird entfernt, sobald die liste manuell oder per cron gelöscht wird.

    when Item Echo_Kitchen_LastVoiceCommand changed to "hat jemand angerufen?"

    das wird so nicht funktionieren, da alexa versuchen wird deine eigentliche frage proaktiv zu beantworten. du kannst entweder eine alexa routine anlegen oder mittels openhab ein item als trigger welches ModeController nutzt....bsp

    Code
    String		Anrufer_Abfrage		"Verpasste"	{alexa="ModeController.mode" [supportedModes= "Anrufe = Anrufe,Nachrichten = Nachrichten" ]}

    nach dem anlegen des items noch zu alexa sagen "alexa, finde meine geräte"....wenn sie damit fertig ist, sag zu ihr "Alexa, verpasste Anrufe". es sollte eine antwort "ok" kommen.
    den text des items kannst du natürlich ändern. vorne in die anführungszeichen kommt der begriff, der alexa sagt worum es geht (in meinem beispiel "Verpasste"), hinten kommen die möglichen optionen.
    den status des items kannst du dann in einer rule verarbeiten....bspw:

    die rule kannst du dann ggf natürlich noch mit einem weiteren case ergänzen. wie im oben im item bereits als beispiel hinterlegt, die anzahl der nachrichten auf dem anrufbeantworter.

  • hier mal ein erweitertes beispiel (inkl anrufzeit + filter für nicht angenommene anrufe + korrekte formatierung der anruferlisten) mit deiner oben genannten rule "Eingehender Anruf".
    wenn du die mittlerweile anderweitig bearbeitet hast ist das natürlich hinfällig.

    - in zeile 11 wird die aktuelle uhrzeit ermittelt und formatiert
    - in zeile 12 werden die zum zeitpunkt des klingelns verpassten anrufe ermittelt
    - in zeile 15-20 wird ein timer erstellt um zu ermitteln, ob sich nach 30sek die anzahl der verpassten anrufe geändert hat
    - in zeile 16 wird ein aktualisierter wert der verpassten anrufe erstellt
    . in zeile 17 wird der beim start der rule erstellte wert der verpassten anrufe mit dem wert nach 30sek verglichen (wenn ungleich dann zeile 18)
    - in zeile 18 wird bei ungleichheit der beiden werte (verpasste anrufe) uhrzeit, der anrufername und ein abschließendes komma ins item geschrieben

    die o.g. rule zur ansage der verpassten anrufe erweiterst du dann ggf noch um die liste nach abfrage zu löschen (zeile 9)


    da ich kein festnetz mehr habe um alles gegenzuprüfen, können sich natürlich fehler einschleichen [af]

  • Das hört sich ja sehr gut an! Du bist mein Held!

    Um ehrlich zu sein, ruft bei uns auch noch kaum jemand übers Festnetz an.
    Die Idee ist eigentlich entstanden weil wir neulich einen Anruf verpasst haben. Das ganze auch nur, weil ich die LEDs der Fritzbox ausgeschaltet habe.

    Ich habe den Timer auf 60 Sekunden hoch gesetzt, weil es anscheinend länger als 30 Sekunden dauert bis fboxMissedCall aktualisiert wird.

    Soweit scheint es zu funktionieren.

    Was passiert wenn eine nicht eingespeicherte Nummer anruft? Wird dann nur die Nummer angesagt?

    Weil die Fritzbox ja nicht klingelt haben wir zur Zeit das Fritzfon so laut gestellt, dass wir es in der ganzen Wohnung hören.
    Das ist in dem Raum in dem das Handgerät liegt aber eigentlich zu laut.

    Wie kann man die Ansage der Alexa so aufbohren, dass sie das Klingeln ersetzt? Also ein wiederkehrender Alarm so lange das Telefon klingelt.

    ahh ich habe es weiter oben gefunden.

    1. then
    2. while (fboxRinging.state == ON) {
    3. AlexaTTS.sendCommand(callerName)
    4. Thread::sleep(2000)
    5. }
    6. end


    Aber: Wie fummel ich das in die rule rein?
    Wäre ja auch nicht schlecht wenn dann nach dem Eingehender Anruf von.... die Alexa klingelt?

  • Was passiert wenn eine nicht eingespeicherte Nummer anruft? Wird dann nur die Nummer angesagt?

    keine ahnung, kann das nicht reproduzieren ohne festnetz. lösche doch einfach deine nummer in der fritzbox und rufe dein festnetz an. im [definition='1','0']log[/definition] wirst du ja sehen was angezeigt wird. du hast dafür ja bereits eine loganzeige definiert.
    logInfo("Anruf", "Anrufer Name: " + caller_name + " Anrufer Nummer: " + caller_number)

    Wie kann man die Ansage der Alexa so aufbohren, dass sie das Klingeln ersetzt? Also ein wiederkehrender Alarm so lange das Telefon klingelt.

    ahh ich habe es weiter oben gefunden.

    .................

    genau, so könntest du es umsetzen.

    Wäre ja auch nicht schlecht wenn dann nach dem Eingehender Anruf von.... die Alexa klingelt?

    das echo binding hat nen alarm channel. den kannst du dafür nutzen: playAlarmSound. da kannst du diverse klingeltöne auswählen. den klingelton sendest du einfach an eine gruppe deiner alexas, die du dir aus diesen items erstellst in deiner Item fboxCallState changed to RINGING rule am anfang mit. die ansage des namens sollte dann am besten mit etwas verzögerung kommen. sonst hört sich das bestimmt komisch an.

    Wie kann man die Ansage der Alexa so aufbohren, dass sie das Klingeln ersetzt? Also ein wiederkehrender Alarm so lange das Telefon klingelt.

    genau, das ist mit while umsetzbar. 2000ms ist natürlich ein wenig knapp bemessen

    hier mal ein beispiel mit alarmsound (die items und eine gruppe daraus musst du dir selbst mit dem echo binding erstellen)

    - zeile 13 wird ein alarmsound zu deiner später selbst erstellten alarmgruppe gesendet...es gibt mehrere alarme zur auswahl, siehst du im openhab webif
    - zeile 14-20 wird ein verzögerungstimer gesetzt, damit anruferansage und klingelkton nicht gleichzeitig starten
    - zeile 15-18 erfolgt die anruferansage in einer schleife mit je 4 sekunden pause. somit sollte zwischen den ansagen auch nochmal der klingelton hörbar sein

    um den alarm zu beenden brauchst du dann eine ganz einfache rule, in der du zu deiner erstellten gruppe einen leeren string sendest.

    Code
    rule "telefon alarm beenden"
      when
         Item fboxCallState changed from RINGING to IDLE
      then
         Alexa_Alarmgruppe.sendCommand("")
    end


    aber achtung....du solltest vorher prüfen ob und wann das item fboxCallState seinen status zu idle ändert. bei den o.g. rules bin ich davon ausgegangen, dass sich der status zu idle auch sofort nach annehmen eines anrufes ändert. ggf muss das angepasst werden. dafür musst du aber erstmal bei einem anruf rangehen und dieses item beobachten.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!