Hauptmenü

Firmata+Arduino

Begonnen von Rohan, 31 Januar 2013, 14:31:12

Vorheriges Thema - Nächstes Thema

Charles

Hallo,

hab mich in den letzten Tagen viel mit Firmata und dem Arduino beschäftigt.
Ich habe einen Nanode RF SMT http://openenergymonitor.org/emon/Modules aus der Zeit, als ich mit fhem anfing und schnell mal Kaufen ein Anfang war.
Siehe:
https://wiki.london.hackspace.org.uk/view/Project:Nanode/Applications#Before_You_Start
Das Board hat einen ENC28J60 Ethernet Controller
Hab Firmata angepasst und draufgeladen, und es auch geschafft, das Ethernet zum Laufen zu bringen (in der Fritzbox ist der Nanode aufgetaucht mit IP und MAC-Adresse). Dafür hab ich lange gesucht und in der Datei Enc28J60Network.h die Zeile so geändert:
#define ENC28J60_CONTROL_CS     8 //war vorher 10, 8 für Nanode
Allerdings kam ich da nicht weiter.
Meine Frage: Kennt jemand den Nanode und kann mir weiterhelfen, oder soll ich das Teil an jemanden abgeben, der was damit anfangen kann?
Liegt das Problem nur an falsch belegten PINs in Enc28J60Network.h?

Danke schon mal
Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

ntruchsess

#196
den Nanode hatte ich leider noch nicht in der Hand und aus dem Schaltplan werde ich auch nicht recht schlau. D.h. ich denke der Plan ist fehlerhaft, da ist MISO gar nicht verbunden und DS hängt dauerhaft auf VCC. Gleichzeitig steht an der Leitung noch 'DIG8', auch wenn es im Schaltplan nicht mit dem passenden Pin verbunden ist, aber das wäre zumindestens ein Hinweis, dass das Define für CS in der Enc28J60Network.h stimmern könnte.
Wenn auf dem Nanode noch mehr Chips über SPI angeschlossen sind, dann müssen deren CS-Pins von der Firmata ignoriert und auf Output/high geschaltet sein (siehe ConfigurableFirmata.ino ab Zeile 235.


Funktionieren die Beispiele von UIPEthernet denn? Du kannst in der UIPEthernet.h noch ein paar Defines zum Debuggen auskommentieren (die Meldungen kommen dann auf der Seriellen Schnittstelle) an denen Du erkennen kannst, ob die Library überhaupt mit dem Enc28J60 kommuniziert. Paralell mit Wireshark auf der Leitung schauen, ob die erwarteten Pakete überhaupt verschickt werden, hilft auch, Fehlerquellen einzugrenzen.

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

Charles

Hallo Norbert,

hab gerade erst gesehen, dass Du geantwortet hast. Ich war in der grossen Stadt und hab kurzen Prozeß gemacht und hab mir einen Arduino Ethernet geholt. Da bin ich gerade am Ausprobieren. Hier komm ich aber nur genauso weit wie mit dem anderen Board.
Ethernet läuft jetzt. Aber sonst rührt sich nichts. Temperaturen kann ich auslesen (Dallas-Sensor-Beispiel)
Ich seh also den Arduino im Heimnetz von der Fritzbox. fhem meldet, dass Firmata nicht angebunden ist. Ich kann auch die IP im Browser nicht aufrufen.
Den Webserver aus Beispiele hab ich auch nicht zum Laufen gebracht.

Die Arduino Anbindung in fhem.cfg sieht so aus
# -------------Arduino-Anbindung ---------------------
define FIRMATA FRM 3030 global
define Eingang OWX 3


Ich häng mal den geänderten Sketch an - vielleicht ist da ja doch etwas falsch.
Schon mal vielen Dank für die Hilfe!

Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

ntruchsess

die Beispiels-sketche der Ethernet-library solltest Du natürlich schon zum Laufen kriegen, wenn die nicht gehen, dann stimmt irgendwas grundlegendes nicht.

Ansonsten: zum gemeinsamen Verständnis: Dein FHEM-server läuft auf ip-addresse 192.168.0.1, richtig? Dann sollte die Netzkonfiguration im Sketch passen.
die FRM-config sieht eigentlich auch ok aus.

Es ist übrigens normal, dass man den Arduino mit NetworkFirmata nicht per Browser aufrufen kann - der Arduino versucht kontinuierlich zur im Sketch angegebenen 'remoteIp' auf dem 'remotePort' zu verbinden. Dafür macht das FRM-modul im FHEM einen Server-socket auf dem konfigurierten Port auf. (Den kann man aber auch nicht mit dem Browser abrufen, der erwartet eine Verbindung, auf der das binäre Firmata-protokoll gesprochen wird).

Vieleicht hast Du ja ein Firewall-problem? Ist der port 3030 auf dem FHEM-server (bei laufendem FHEM) denn aus dem Netzwerk (z.B. mit telnet) verbindbar?

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

Charles

Hallo Norbert,

dann fang ich morgen mal mit den Beispielskripten an und teste die mal durch.

Das Heimnetz lädt mit der IP 192.168.0.xx und 192.168.0.1 ist der Router also die Fritzbox mit fhem.

Beim Aufruf über tenet kam Folgendes heraus:MacBook-Pro:~ G$ telnet 192.168.0.1 3030
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is '^]'.
y??y??y?Connection closed by foreign host.


Das sieht doch eigentlich ganz gut aus, oder?
Ein Firewall-Problem? Ich hatte gedacht, Alles hinter dem Router ist normalerweise erreichbar? Weiß ich nicht, konnte auch in der Fritzbox nichts finden.
Wie kann ich denn nachverfolgen, was auf dem Arduino passiert? Welche Möglichkeiten gibts denn da?

Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

ntruchsess

ja, das mit dem telnet sieht gut aus. Also kein Firewall-problem (eine Firewall kann auch die Ports auf dem Router selbst gegen das Netz abblocken, scheint bei Deiner FB nun aber ja nicht so zu sein).

Auf dem Arduino könntest Du ein paar Serielle Debug-Ausgaben einstreuen und über den Seriellen Monitor schauen, ob alles läuft. Vor einem produktiven Einsatz aber unbedingt entfernen.

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

Charles

Hallo Norbert,

ich habe gefunden. Ethernet ist auf der Fritzbox abgestürzt. Nach einem Neustart der FB bekomme ich jetzt Daten von meinen Temperatursensoren.Super! Werde ich gleich morgen installieren. Vielen Dank!
Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

Charles

Hallo Norbert,

ein gutes neues Jahr wünsch ich Dir erstmal!
Ich hab den Tag heute genutzt, um den Arduino im Keller zu installieren und die Sensoren zu verdrahten.
Steht Alles. Folgendes finde ich im Log. Die Sensoren tauchen nicht auf. Gestern kamen die im room OWX an.2014.01.01 14:12:58 0: Server started with 100 defined entities (version $Id: fhem.pl 4501 2013-12-29 17:59:52Z rudolfkoenig $, os linux, user root, pid 5037)
2014.01.01 14:13:02 3: querying Firmata Firmware Version
2014.01.01 14:13:02 3: Firmata Firmware Version: ConfigurableFirmata.ino V_2_05
2014.01.01 14:13:02 3: received String_data: Unhandled sysex command
2014.01.01 14:13:05 3: received String_data: Unhandled sysex command
2014.01.01 14:13:14 1: OWX: 1-Wire devices found on bus Eingang ()
2014.01.01 14:16:59 3: querying Firmata Firmware Version
2014.01.01 14:17:00 3: querying Firmata Firmware Version
2014.01.01 14:17:01 3: querying Firmata Firmware Version
2014.01.01 14:17:01 3: no response from Firmata, closing DevIO
2014.01.01 14:17:01 1: 3030 disconnected, waiting to reappear
2014.01.01 14:17:04 3: querying Firmata Firmware Version
2014.01.01 14:17:04 3: Firmata Firmware Version: ConfigurableFirmata.ino V_2_05
2014.01.01 14:17:04 3: received String_data: Unhandled sysex command
2014.01.01 14:17:06 3: received String_data: Unhandled sysex command
2014.01.01 14:17:16 1: OWX: 1-Wire devices found on bus Eingang ()

Mehr kommt nicht an. Weisst Du vielleicht, um welchen Fehler es sich handelt?

Danke Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

ntruchsess

Hallo Charles,

auch erst mal ein gutes neues Jahr!.
Irgendwas stimmt mit Deinem Arduino bzw. seiner Ethernetanbindung nicht. Scheint so, als ob er beim Verbindungsaufbau zwar senden kann (der Versionsstringt und die beiden 'Unhandles sysex command'-meldungen kommen noch an), aber nichts empfängt (auf 'Querying Firmata Fimware Version' sollte eigentlich eine Antwort kommen). Das kann auch ganz banal an Deiner Netzwerkverkabelung liegen, wenn nicht alle Adern sauber verbunden sind. Mit einem Ethernet-shield hatte ich den gleichen Effekt auch mal, da war der ISP-Stecker meines Ethernet-shields einen kleinen Tick zu kurz um zuverlässig Kontakt zum Arduino zu halten, dann hat er manchmal noch brav senden können, aber im Sketch nichts mehr empfangen.

Gruß,

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

Charles

#204
Hallo Norbert,

dann handelt es sich wahrscheinlich um eine Hardwaresache. Das ist leicht möglich, weil ich da auch Anfänger bin. Ich begebe mich mal auf die Suche nach schlechten Verbindungen.

Danke
Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

Charles

#205
Hallo Norbert,

der Stand der Dinge:
Hab gestern noch das Breadboard an den Arduino gehängt. Sofort wurden die 3 Sensoren darauf erkannt und OWX tauchte als Menu mit den 3 Sensoren auf. Das lief so die ganze Nacht. Morgens konnte alle aktuellen Temperaturen sehen.
Hab dann meine Anschlussplatte überprüft und einen Lötfehler behoben (Stromversorgung war falsch angelötet).
Leider bring ich jetzt weder das Breadboard noch die Anschlussplatte zum Laufen. Ich hatte heute morgen die Einträge von OWX aus der fhem.cfg gelöscht, da die Sensoren ja nur zum Testen benutzt wurden, und die Festinstallierten laufen sollten. Vielleicht war das ein Fehler?
Ich bin ratlos. ->Neustart von fhem ------------------
2014.01.02 18:06:16 0: Server started with 100 defined entities (version $Id: fhem.pl 4501 2013-12-29 17:59:52Z rudolfkoenig $, os linux, user root, pid 10108)
2014.01.02 18:06:20 3: querying Firmata Firmware Version
2014.01.02 18:06:20 3: Firmata Firmware Version: ConfigurableFirmata.ino V_2_05
2014.01.02 18:06:35 1: OWX: 1-Wire devices found on bus Eingang ()
->Neustart des Arduino ---------------------
2014.01.02 18:08:32 3: querying Firmata Firmware Version
2014.01.02 18:08:32 3: Firmata Firmware Version: ConfigurableFirmata.ino V_2_05
2014.01.02 18:08:47 1: OWX: 1-Wire devices found on bus Eingang ()
->set FIRMATA reinit --------------------------
2014.01.02 18:10:34 1: 3030 disconnected, waiting to reappear
2014.01.02 18:10:37 3: querying Firmata Firmware Version
2014.01.02 18:10:37 3: Firmata Firmware Version: ConfigurableFirmata.ino V_2_05
2014.01.02 18:10:52 1: OWX: 1-Wire devices found on bus Eingang ()

Weiter will OWX nichts tun.

Die Internats für FIRMATA sehen so aus:Internals:
   CONNECTS   5
   DEF        3030 global
   FD         35
   NAME       FIRMATA
   NR         220
   PARTIAL   
   PORT       3030
   STATE      disconnected
   TYPE       FRM
   Socketdevice:
     BUF       
     DeviceName 3030
     FD         4
     NAME       FRM:192.168.0.80:1025
     NR         370
     SNAME      FIRMATA
     STATE      Connected
     TEMPORARY  1
     TYPE       FRM
     firmware   ConfigurableFirmata.ino
     firmware_version V_2_05
Attributes:
   group      Firmata
   room       HEIZUNG

Weisst Du vielleicht Rat?

Danke Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

ntruchsess

mach mal ein 'get <owx-device> devices'
while (!asleep()) {sheep++};

Charles

#207
Hallo Norbert,

der "get Eingang devices"-Befehl gibt im Log2014.01.02 23:26:40 1: OWX: 1-Wire devices found on bus Eingang ()
2014.01.02 23:27:12 1: OWX: 1-Wire devices found on bus Eingang ()
2014.01.02 23:32:42 1: OWX: 1-Wire devices found on bus Eingang ()
2014.01.02 23:33:00 1: OWX: 1-Wire devices found on bus Eingang ()

hab ich 4-mal versucht.

ich hab weiter versucht, den Fehler zu finden:
Also hab ich Eins nach dem Anderen gestartet, also erst fhem, dann
hab ich FRM definiert, danach OWX.
Im Log kam Folgendes an:
2014.01.02 23:25:21 3: FIRMATA: port 3030 opened
2014.01.02 23:25:22 2: error initializing Eingang: error initializing 'Eingang': Eingang, FIRMATA is not connected
2014.01.02 23:25:22 1: OWX: 1-Wire bus Eingang: interface FIRMATA is not connected to Firmata
2014.01.02 23:25:22 1: Including ./log/fhem.save
2014.01.02 23:25:27 3: querying Firmata Firmware Version
2014.01.02 23:25:27 3: Firmata Firmware Version: ConfigurableFirmata.ino V_2_05
2014.01.02 23:25:42 1: OWX: 1-Wire devices found on bus Eingang ()

Die Initialisierung von Eingang scheint vielleicht das Problem zu sein.

Hier noch das Logfile von heute Nacht, als Alles funktioniert hat!2014.01.02 00:54:07 3: FIRMATA: port 3030 opened
2014.01.02 00:54:07 2: error initializing Eingang: error initializing 'Eingang': Eingang, FIRMATA is not connected
2014.01.02 00:54:07 1: OWX: 1-Wire bus Eingang: interface FIRMATA is not connected to Firmata
2014.01.02 00:54:07 1: Including ./log/fhem.save
2014.01.02 00:54:13 3: querying Firmata Firmware Version
2014.01.02 00:54:13 3: Firmata Firmware Version: ConfigurableFirmata.ino V_2_05
2014.01.02 00:54:13 3: received String_data: Unhandled sysex command
2014.01.02 00:54:15 3: received String_data: Unhandled sysex command
2014.01.02 00:54:25 1: OWX: 1-Wire devices found on bus Eingang ()
2014.01.02 01:01:41 3: querying Firmata Firmware Version
2014.01.02 01:01:41 3: Firmata Firmware Version: ConfigurableFirmata.ino V_2_05
2014.01.02 01:01:41 3: received String_data: Unhandled sysex command
2014.01.02 01:01:43 3: received String_data: Unhandled sysex command
2014.01.02 01:01:53 3: OWTHERM: Device OWX_10_38A3AD020800 defined.
2014.01.02 01:01:53 3: OWTHERM: Device OWX_10_0CA98E020800 defined.
2014.01.02 01:01:53 3: OWTHERM: Device OWX_10_C1AA8E020800 defined.
2014.01.02 01:01:53 1: OWX: 1-Wire devices found on bus Eingang (OWX_10_38A3AD020800,OWX_10_0CA98E020800,OWX_10_C1AA8E020800)
2014.01.02 01:04:07 2: ventil_SchlafTemp : 0


Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP

ntruchsess

Ich denke Du hast da ein Hardwarproblem. 1-Wire-bus kurzgeschlossen oder so was. Wenn Du genau sehen willst, ob OWX und FRM tun, was sie sollen, dann kannst Du das Attribut loglevel am FRM-device auf 5 setzten, dann sieht man, ob die 'get <owxdevice> devices'-Anfrage vom Arduino mit einer leeren Liste beantwortet wird (Das würde ich jedenfalls erwarten).

Gruß,

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

Charles

#209
Hallo Norbert,

hab jetzt Folgendes gemacht:
1) Temperatur-Skript auf den Arduino hochgeladen und damit die Platinen überprüft.
Alle Sensoren werden erkannt und ausgelesen auf dem Breadboard und meiner Anschlussplatine. Funktioniert.

2) StandartFirmata hochgeladen und mit dem Programm firmata_test die Anschlüsse überprüft. Funktioniert.

3) Mein ConfigurableFirmata-Skript hochgeladen. Verbose auf 5 gesetzt, mit "get Eingang devices" die Sensoren gesucht,
leider mit dem alten Ergebnis "OWX: 1-Wire devices found on bus Eingang ()" und keiner Zeile mehr.

4) Jetzt hab ich nach und nach Sensoren ausgesteckt usw. Inzwischen ist das Breadboard nicht mehr am Arduino angeschlossen. Alle Pins sind unbelegt.
Auch nach einem "shutdown restart" von fhem kommt mit "get Eingang devices" das Ergebnis "OWX: 1-Wire devices found on bus Eingang ()". Er kann doch jetzt eigentlich gar nichts mehr finden? Ein Rätsel!

Danke Charles
Raspberry · FB 7590 · CUL · FS20 · MAX · ESP