Firmata over Ethernet: Einbindung in Arduino

Begonnen von CaptBlaubaer, 27 Oktober 2013, 00:44:58

Vorheriges Thema - Nächstes Thema

T.ihmann

Hallo,

ich bin gerade durch Zufall im Internet auf diesen Post gestoßen

http://forum.mysensors.org/topic/536/problems-with-enc28j60-losing-connection-freezing-using-uipethernet-or-ethershield-read-this

der eine mögliche Ursache für meine Verbindungsabbrüche mit ENC28J60 beschreibt. Norbert ist in diesem Forum auch aktiv. @Norbert: Kann man Deine eingearbeiteten Verbesserungen schon testen ? Würde dann gerne hier Feedback geben.

ntruchsess

Der link auf die gepatchte version findest du im o.g. Thread (in meinem github-repository branch fix_errata12
while (!asleep()) {sheep++};

T.ihmann

Ich habe alle meine Arduinos auf die neue gepatchte Version geupdatet. Hoffen wir mal, daß es etwas hilft. Ich werde berichten... ;)

T.ihmann

Zwei der Arduinos laufen bislang stabil, der dritte an dem ein Bewegungsmelder über FRM_IN hängt, war nach drei Stunden nicht mehr erreichbar: 3032 disconnected, waiting to reappear (FRM:192.168.178.152:1076). Der Arduino war über Ping noch erreichbar:

Ich hatte den Fehler hier ja schon mal beschrieben: http://forum.fhem.de/index.php/topic,25753.msg187628.html#msg187628, habe jetzt noch mal ein FRM_AD bei diesem Arduino hinzugefügt, mal sehen, ob es etwas bringt.

matthias soll

Hallo zusammen,
ich habe eine Frage zu Firmata over Ethernet.
Ich habe das auf einem Mega 2560 mit ENC28J60 laufen. Ein onewire bus und ca. 69 Ausgängen definiert.
Läuft soweit problemlos nur nach ca. 4-5 Tagen schaltet er mir willkürlich einige Ausgänge, Verbindung bleibt aber bestehen.
Dann mus ich den arduino kurz von strom trennen und dann bekommt er vom fhem server (fritzbox) wieder gesagt welche Ausgänge geschaltet werden sollen und welche nicht.
Im fhem Log finde ich keine Fehlermeldung.
Hat jemand eine Idee woran das liegen kann?
Gruß
Matthias

T.ihmann

Der neue Sketch hat leider nicht geholfen. Der Arduino an dem ein Bewegungsmelder über FRM_IN hängt ist jetzt trotz FRM_AD nicht mehr erreichbar, auch nicht mehr üner PING. Startet man FHEM dann neu kommt als Fehlermeldung: FIRMATA2 is not connected ... :(

T.ihmann

Eine kleine Zwischenmeldung, leider bringt der verbesserte Sketch / Library nicht den gewünschten Erfolg. Zwei der insgesamt drei Arduinos sind nicht mehr erreichbar, auch nicht mehr per Ping. Interessant ist die Reihenfolge:

1.) Arduino: DS18B20, FRM_OUT (4 x Relais)
2.) Arduino: DS18B20
3.) Arduino: FRM_IN (Bewegungsmelder), FRM_AD

Es verschwindet immer zuerst der 3. Arduino mit dem Bewegungsmelder, dann der 2. mit nur Temperaturmessung, der erste hält am längsten durch. Vielleicht hilft es ntruchsess ja weiter ?

ntruchsess

Fredrik Olofsson hat einen Workaround beigesteuert, der über einen Timeout erkennt, wenn der Transmitter des enc28j60 hängenbleibt, erste Langzeittests (>24h) sehen bisher erfolgversprechend aus. (Danke Thomas fürs Testen...)

Findet sich (wie der Fix zuvor) im branch fix_errata12
while (!asleep()) {sheep++};

matthias soll

Hallo zusammen,
habe mein Problem aktuell gelöst in dem ich mit einer Zeitschaltuhr nachts um 3 einen reboot von dem arduino mega mache. Gibt es eigentlich die Möglichkeit vom fhem aus den firmata arduino neu zu starten?

Olly

Zitat von: matthias soll am 06 Dezember 2014, 19:32:29
Hallo zusammen,
habe mein Problem aktuell gelöst in dem ich mit einer Zeitschaltuhr nachts um 3 einen reboot von dem arduino mega mache. Gibt es eigentlich die Möglichkeit vom fhem aus den firmata arduino neu zu starten?
Mach doch eine Funksteckdose davor, die du von FHEM aus steuerst. Kannst du dann sogar direkt neu starten, wenn er nicht mehr reagiert.
BananaPi 1GB;NetCSM 868MHz, miniCUL 433MHz, LaCrosseGateway, 2x SignalESP; FHEM 6.2

matthias soll

Hallo olly,
grundsätzlich eine gute Idee, allerdings mag ich keine funksteckdosen. Ich könnte auch einen der 63 Ausgänge von dem arduino verwenden dann würde er sich quasi selbst ausschalten. Ich dachte nur es gäbe eine software Möglichkeit den arduino per fhem neu zu booten.

ntruchsess

Zitat von: matthias soll am 06 Dezember 2014, 19:32:29
Gibt es eigentlich die Möglichkeit vom fhem aus den firmata arduino neu zu starten?
ja, das geht:

set <frmdevice> reset


Das geht natürlich nur, wenn der Arduino noch kommunizieren kann - also weder der AVR selbst noch die Ethernetschnittstelle abgestürzt sind.

Am sichersten wäre es den eingebauten Watchdog zu benutzen. Damit der auch bei Ausfällen der Ethernet-hardware funktioniert, müsste man das ganze so umbauen, dass der Watchdog über das Netzwerk (z.B. mit einem Firmata-kommando) zurückgesetzt wird. Dann würde beim Abreißen der Netzwerkverbindung der Arduino sich so lange zyklisch immer wieder neu resetten bis er die Verbindung zum FHEM wieder aufgebaut hätte.

- Norbert
while (!asleep()) {sheep++};

T.ihmann

Ich hatte dies im Arduino schon einmal versucht, allerdings war ich davon ausgegangen, daß der Arduino komplett abstürzt und nicht nur der Ethernet Teil, insofern hat dies nicht den gewünschten Effekt gebracht. Was wäre denn die einfachste Art in der Firmata zu erkennen, ob noch eine Verbindung zu Fhem besteht ?

ntruchsess

An der Socketverbindung selber ist das systematisch nicht zu erkennen. Jedenfalls nicht sofort, sondern erst nach Ablauf der TCP-timeouts. Und das erkennt die Firmata schon heute (dauert halt ein wenig). Wenn das schneller gehen soll, müsste man so eine Art Keep-alive (also ein zyklischer Nachrichtenaustausch, der auch stattfindet, wenn gerade nix zu übertragen wäre) in das Protokoll einbauen.
Hier könnte man auch ein Neuinitialisieren der Ethernet-hardware (Aufruf von Ethernet.begin(...)) einbauen, heute wird da einfach nur versucht unmittelbar wieder eine Socketverbindung (mit Client.connect()) aufzubauen (was natürlich nix nutzt, wenn die Ethernet-hardware eventuell hängt). Aber wirklich zuverlässig wäre wohl nur eine Watchdog-basierte Lösung in Verbindung mit vorgenanntem Keep-alive-protokoll.

Gruß,

Norbert
while (!asleep()) {sheep++};

T.ihmann

Wäre ein keep-alive ein großer Aufwand ? Ich würde mich am Testen / Entwickeln gerne beteiligen .