Hallo presskopf,
habe nicht herausfinden können, wo ich das von dir modifizierte Ping-Beispiel mal gepostet habe, so dass ich nicht vergleichen kann. Egal, es ist jedenfalls Arduino-Code und kein FHEM-Code.
Habe ich was Grundlegendes übersehen oder war da nur ein Tippfehler bei Dir?
Es kommt dabei auf die Firmata-Variante an. Habe mal in einem bei mir laufenden Projekt nachgesehen, das auf StandardFirmataWiFi basiert und auf den ESP8266 angepasst ist. Da sieht der Code so aus:
#define PING_PERIOD 20000 // [ms]
unsigned long currentMillis;
unsigned long pingSent = 0;
...
void loop()
{
currentMillis = millis();
...
if (stream.status() == ESTABLISHED && (currentMillis - pingSent) >= PING_PERIOD)
{
// send some data to detect loss of connection indirectly
sprintf(message, "ping (RSSI %d dBm)", WiFi.RSSI());
Firmata.sendString(message);
pingSent = currentMillis;
}
}
Die Variable
stream wird bei StandardFirmataWiFi in der wifiConfig.h definiert und ist bei mir ein
WiFiClientStream.
Wenn man statt dessen z.B. auf StandardFirmataEthernet aufbaut oder auf ConfigurableFimata hat man es mit anderen Verbingdungsobjekten zu tun, die dann auch etwas anders angesprochen werden müssen.
Wenn es bei dir so funktioniert ist das schon mal mehr als die halbe Miete. Wenn du noch 7 Codezeichen einsparen willst, könntest du "== true" weglassen.

Grüße,
Jens