Update: 2024-02-25

Esp8266 FritzFon Anruferkennung als Arduino Tab.

Die Funktion "callCheck()" liefert "true" zurück solange ein Anruf aktiv ist andernfalls "false".

Damit der Esp8266 mit der FRITZ!Box kommunizieren kann, muss die Ziffernfolge #96*5* auf einem Telefon, das an die FRITZ!Box angeschlossen ist, gewählt werden. Die FRITZ!Box schaltet nun die Anruferkennung frei und es sollte ein positiver Bestätigungston zu hören sein. Um die Anruferkennung wieder zu deaktivieren, wähle die Ziffernfolge #96*4*.
FritzFon.ino

// ****************************************************************
// Arduino IDE Tab Esp8266 FritzFon Anruferkennung Modular
// created: Jens Fleischer, 2021-02-11
// last mod: Jens Fleischer, 2021-02-11
// For more information visit: https://fipsok.de
// ****************************************************************
// Hardware: Esp8266 FritzBox
// Software: Esp8266 Arduino Core 2.6.0 - 3.1.2
// Getestet auf: Nodemcu, Wemos D1 Mini Pro
/******************************************************************
  Copyright (c) 2021 Jens Fleischer. All rights reserved.

  This file is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  This file is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
*******************************************************************/
// Diese Version von FritzFon Anruferkennung sollte als Tab eingebunden werden.
// #include <ESP8266WebServer.h> oder #include <ESP8266WiFi.h> muss im Haupttab aufgerufen werden
// Um am TCP Port 1012 zu empfangen muss die Funktion "callCheck();" im loop(); aufgerufen werden.
//
// Damit der Esp8266 mit der FRITZ!Box kommunizieren kann, muss die Ziffernfolge #96*5*
// auf einem Telefon, das an die FRITZ!Box angeschlossen ist, gewählt werden.
// Die FRITZ!Box schaltet nun die Anruferkennung frei und es sollte ein positiver Bestätigungston
// zu hören sein. Um die Anruferkennung wieder zu deaktivieren, wähle die Ziffernfolge #96*4*.
/**************************************************************************************/

WiFiClient ncidClient;

bool callCheck() {                                // Funktionsaufruf "callCheck();" muss im Loop eingebunden werden.
  static bool event;
  static unsigned long previousMillis;
  constexpr unsigned long INTERVAL (1000);
  if (millis() - previousMillis >= INTERVAL) {
    previousMillis += INTERVAL;
    ncidClient.connect(WiFi.gatewayIP(), 1012);
  }
  if (ncidClient.available()) {
    uint8_t buffer[70] = {0};
    ncidClient.read(buffer, sizeof(buffer));
    if (buffer[0] != 0) {
      char* ptr = strtok((char*)buffer, "\;");
      for (auto i = 0; ptr != NULL; i++) {
        if (i == 1) {
          if (strcmp(ptr, "RING") == 0) event = true;
          if (strcmp(ptr, "DISCONNECT") == 0) event = false;
          Serial.println(ptr);
        }
        ptr = strtok(NULL, "\;");
      }
      ncidClient.stop();
    }
  }
  return event;
}

Der FritzFon Tab ermöglicht eine Anrufsignalisierung mittels Zusatzklingel oder Signalleuchte.

Beispiel:

***************** LED Anwesenheitssimulator ******************

constexpr uint8_t signalPin = 12;

void setup() {
  ........
pinMode(signalPin, OUTPUT);
  ........
}

void loop() {
  ........
callCheck() ? digitalWrite(signalPin, HIGH) : digitalWrite(signalPin, LOW);
  ......
}