FIRMATA auf Arduino UNO unter Win XP

Begonnen von golem, 28 März 2013, 04:04:51

Vorheriges Thema - Nächstes Thema

golem

Hallo zusammen,

ich habe FHEM auf einem Windows Rechner am Laufen und möchte einen Arduino UNO mit Firmata (Version 2.3.4) über Comport5 ansteuern.

dazu steht in der FHEM.cfg

define FIRMATA FRM COM5@57600
attr FIRMATA loglevel 6
attr FIRMATA sampling-interval 1500

define LED13 FRM_OUT 13
attr LED13 IODev FIRMATA


das Funktioniert beim starten auch scheinbar erstmal:

28 03:40:22 3: Opening FIRMATA device COM5
2013.03.28 03:40:22 3: Setting FIRMATA baudrate to 57600
2013.03.28 03:40:22 3: FIRMATA device opened
2013.03.28 03:40:25 3: querying Firmata Firmware Version
2013.03.28 03:40:25 3: Firmata Firmware Version:  V_2_03


wenn ich dann aber versuche mit set LED13 on
den Ausgang zu schalten, danngibt es folgende Meldung
LED13, FIRMATA is not connected

Im Fenser, in dem FHEM gestartet wird kommt folgende Meldung, beim starten, gefühlte 100 mal hintereinander.

Use of uninitialized value in vec at ./FHEM/10_FRM.pm line 448.
Use of uninitialized value in vec at ./FHEM/10_FRM.pm line 450.


wenn ihr noch weitere Infos brauch könnt irh gerne haben.

edit: Fehlermeldung im CMD Fenster
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

ntruchsess

leider habe ich hier keinen Rechner mit XP laufen, aber wenn ich mir das DevIO.pm so ansehe, dann scheint es unter XP nicht möglich zu sein die serielle Schnittstelle per select eines Filedescriptors abzufragen (daher die Fehlermeldung mit dem 'unititialized value in vec')
Muss mal schauen, irgendwo gammelt noch ein virtuelles Windows bei mir rum - damit sollte ich das nachvollziehen und zum laufen bringen können.

Gruß,

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

golem

Hallo Norbert,

das hört sich gut an. Ich muß leider noch bei XP bleiben da erstmal mein alter Laptop in den Keller wandern soll auf dem FHEM läuft.
Wenn es nicht geht, dann kommt da eine Virtuelle maschine mit einer kleinen Linux Dist. drauf, dann sollte das Problem behoben sein.

Denis
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

ntruchsess

gestern abend habe ich mal das Virtualisierte XP rausgekramt, perl und fhem draufgespielt und Dein Problem nachvollzogen. Ich denke das kriege ich hin ;-).

Gruß,

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

golem

Hallo Norbert,

hast du das noch auf dem Plan?
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

golem

Ich will ja nichts sagen, aber auch mit der Ethernet Firmata funktioniert es unter Windows nicht.

Use of uninitialized value $buf in split at ./FHEM/10_FRM.pm line 400.

Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

ntruchsess

Hallo Dennis,

sorry, dass ich so lange nix zum Thema gesagt habe. Die Virtuelle Maschine mit XP wollte nicht so recht... und ein Perl musste ja auch drauf usw.  Windows ist halt nicht so mein Ding.

Jedenfalls habe ich grade einen Fix ins svn committet, mit dem es erst mal grundsätzlich geht. Getestet mit FRM_IN, FRM_OUT und FRM_AD am Arduino UNO und Nano. OWX ging erst mal noch nicht. Ethernet habe ich nicht getestet (da würde der Fix den ich grade gemacht habe aber auch nichts ändern). Ein Wiederverbinden (also bei laufendem fhem das USB-kabel abziehen und wieder einstecken) geht auch (noch) nicht (fhem kriegt irgendwie gar nicht mit, wenn man das USB-kabel abzieht). Nach FHEM-Neustart gings dann wieder.

Viel Spaß damit.

Gruß,

Norbert

P.S. Von wegen 'ich will ja nix sagen...' - Patches zu Fehlern in den FRM-Modulen, insbesonders auf Plattformen, die ich nicht aktiv nutze (Windows oder Mac) sind bei mir immer willkommen. Open Source ist Team-arbeit. Und Team steht nicht für 'Toll ein anderer macht's'.
while (!asleep()) {sheep++};

ntruchsess

ich konnte heute noch ein bischen weitertesten. 1-Wire mit OWX/FRM funktioniert jetzt mit der überarbeiteten OWX-Version auf Github (branch 'refactorin_async' auch unter WinXP.
Dort finden sich auch die auf den asynchronen Versionstand von OWX angepassten Module OWTHERM und OWCOUNT. Die anderen OWX-Module sollten erst mal ohne Änderungen weiterfunktionieren, falls da was klemmt würde ich mich über Feedback freuen.

Gruß,

Norbert

P.S.: Das asynchrone OWX funktionierte bei mir unter Windows XP auch mit einem DS2480-basiertem 1-Wire busmaster...
while (!asleep()) {sheep++};

golem

Hallo,

ich habe es gerade mal getestet, per Serieller und Ethernet Verbindung funktioniert es jetzt.
Ich habe allerdings nur per FRM_OUT eine LED am Pin 2 des Arduino angeschlossen.
Bei der Seriellen Verbindung kann sie ganz normal Geschaltet werden. Über Ethernet geht sie für ca 1 Sek. an und dann von
alleine wieder aus.

Die Probleme beim Wiederverbinden sind wie schon gesagt noch vorhanden.

gruß Denis
Pi - Max-Lan - 8x max Ht -3x Max WT - Max Fk -modbus umg103- 2x Arduino mit Firmata Ethernet- ws300 - 433Mhz Sender Empfänger - 7x 1wire ds1820

uli2

Hallo,

ich habe gerade ein ähnliches Problem mit der aktuellen FHEM Version auf einem Windows Homeserver (mit ActivePerl).
Ich versuche Firmata mit einem per USB angeschlossenen Arduino Uno zum laufen zu bekommen.

define ARDUINO FRM COM3
define AR_Out1 FRM_OUT 2


im Logfile erscheint:


...
2014.03.27 12:52:41.481 1: Cannot init COM3, ignoring it
2014.03.27 12:52:41.481 3: no response from Firmata, closing DevIO
2014.03.27 12:52:41.473 3: querying Firmata Firmware Version
2014.03.27 12:52:40.478 3: querying Firmata Firmware Version
2014.03.27 12:52:39.482 3: querying Firmata Firmware Version
2014.03.27 12:52:38.478 3: querying Firmata Firmware Version
2014.03.27 12:52:36.468 3: ARDUINO device opened
2014.03.27 12:52:36.117 3: Opening ARDUINO device COM3
...


und in der Konsole folgender Output:
...
Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win32API/CommPort.pm line 235.
Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win32API/CommPort.pm line 235.
Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win32API/CommPort.pm line 235.
...(wiederholt sich sehr oft)...
Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win32API/CommPort.pm line 235.
Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win32API/CommPort.pm line 235.
Use of uninitialized value in concatenation (.) or string at ./FHEM/10_FRM.pm line 613.
Second Write attempted before First is done at FHEM/DevIo.pm line 107.
Use of uninitialized value $written in numeric ne (!=) at C:/Perl/site/lib/Win32/SerialPort.pm line 1580.
Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win32API/CommPort.pm line 247.
...



wenn ich das ganze aber ohne FHEM direkt über ein Perlskript veruche, klappt es:

use lib './lib';
use Device::Firmata;
use Device::Firmata::Constants qw/:all/;
my $device = Device::Firmata->open('COM3');
print "$device->{metadata}{firmware} \n";
print "$device->{metadata}{firmware_version} \n";
$device->pin_mode(2=>PIN_OUTPUT);
$device->digital_write(2=>1);


setzt Pin2 und liefert:
StandardFirmata.ino
V_2_05

Hat jemand eine Idee was hier schief läuft ? Kann es sein dass DevIo.pm oder 10_FRM.pm in der aktuellen Version nicht mit Windows kompatibel sind ?

Gruss
Uli

ntruchsess

Hallo Uli,

Tut mir leid, Ich habe leider keinen Windowsrechner mehr, ich kann da nur raten, was schiefgeht.
Probier mal in 10_FRM.pl, Zeile 613 und Zeile 622 jeweils das '$hash->{FD}' aus der Logmeldung rauszunehmen, das könnte plattformabhängig und damit die Ursache für die Meldung 'Use of uninitialized value in concatenation (.) or string at ./FHEM/10_FRM.pm line 613.' sein.

Gruß,

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

uli2

Hallo Norbert,

deine Vermutung war richtig, ohne '$hash->{FD}' kommt die Meldung 'Use of uninitialized value in concatenation (.) or string at ./FHEM/10_FRM.pm line 613.' nicht mehr

die Meldungen aus CommPort.pm und SerialPort.pm

Use of uninitialized value in subroutine entry at C:/Perl/site/lib/Win32API/CommPort.pm line 235
Use of uninitialized value $written in numeric ne (!=) at C:/Perl/site/lib/Win32/SerialPort.pm line 1580


bin ich losgeworden indem ich die Baudrate mit angegeben habe
also

define ARDUINO FRM COM3@38400
define AR_Out1 FRM_OUT 2
attr AR_Out1 IODev ARDUINO


aber das Hauptproblem besteht leider immer noch, die Verbindung mit Firmata klappt nicht.
Im Log steht nach wie vor:
2014.04.09 00:16:00.436 1: Cannot init COM3, ignoring it
2014.04.09 00:16:00.433 3: no response from Firmata, closing DevIO
2014.04.09 00:16:00.429 3: querying Firmata Firmware Version
2014.04.09 00:15:59.425 3: querying Firmata Firmware Version
2014.04.09 00:15:58.424 3: querying Firmata Firmware Version
2014.04.09 00:15:57.430 3: querying Firmata Firmware Version
2014.04.09 00:15:55.422 3: ARDUINO device opened
2014.04.09 00:15:55.281 3: Setting ARDUINO baudrate to 38400
2014.04.09 00:15:54.942 3: Opening ARDUINO device COM3


warum kann die Firmware Version nicht gelesen werden ?
Der COM port wird ja anscheinend korrekt geöffnet, und direkt mit Perl auf der Kommandozeile klappt die Abfrage der Firmware Version auch (siehe letzter Post).

Gruss
Uli

ntruchsess

Baudrate 38400 ist falsch, mit 57600 sollte es gehen.
while (!asleep()) {sheep++};

uli2

Hallo Norbert,

danke, das war der entscheidende Tipp.
Jetzt funktioniert es.
Super.

Gruss
Uli

ntruchsess

danke für die Rückmeldung, ich hab die Anpassung in FRM Zeile 613 und 622 grade ins SVN committed. Manuelle Anpassungen für FRM auf Windows sind nach dem nächsten Update also nicht mehr nötig

Gruß,

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