Die Funktion "callCheck()" liefert "true" zurück solange ein Anruf aktiv ist andernfalls "false".
// ****************************************************************
// Sketch Esp8266 FritzFon Anruferkennung Modular(Tab)
// 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 - 2.7.4
// 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 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() {
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);
......
}