Hilfe zu ECMD modul (telnet <-> uart)

Begonnen von stevestrong, 15 Dezember 2013, 23:46:52

Vorheriges Thema - Nächstes Thema

stevestrong

Hallo zusammen,
ich verwende FHEM 5.5 auf ein Fritzbox 7240 vom USB-Stick.
das ziel ist von fritzbox einige hex werte über UART zu senden und empfangen.
ich benutze dafür ein WiFly RN171 adapter von Roving (http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en558370), da das endgerät relativ weit vom heimnetz ist.
die daten wollte ich über telnet vom fhem an den adapter übermitteln, der adapter gibt die daten weiter, bzw. die erhaltene uart daten soll er zu fritzbox über telnet schicken.
um die aufgabe zu meistern, nach langes recherchieren, wollte ich das ECMD module benutzen.
zum testen als endgerät benutze ich zurzeit ein pc.
ich konnte bereits die kommunikation erstellen. hier meine code-zeilen:
--------------
in fhem.cfg:
#######
define WiFly_RN171XC ECMD telnet 192.168.100.23:2000
attr WiFly_RN171XC room WiFi_UART
define FileLog_WiFly_RN171XC FileLog ./log/WiFly_RN171XC-%Y-%m-%d.log WiFly_RN171XC
#########
set WiFly_RN171XC classdef UART /var/media/ftp/Generic-FlashDisk-01/fhem/uart.classdef
#
define myUart ECMDDevice UART
attr myUart room WiFi_UART


in classdef file:
###########
get p1 cmd {"send 123"}
###########


mein problem ist folgendes:

wenn ich über telnet an fhem das kommando:
get myUart p1
gebe, dann bekomme ich am endgerät pc die folgende fehlermeldung:
syntax error at (eval 90) line 1, near "send 123".

ich hab viele beiträge bezüglich ECMD gelesen,  trotzdem konnte ich nichts festellen was ich da falsch mache.

woran kann das liegen?

vielen dank im voraus.

LuckyDay

#1
Zitatset WiFly_RN171XC classdef UART /var/media/ftp/Generic-FlashDisk-01/fhem/uart.classdef

Zitatattr WiFly_RN171XC classdef UART=/var/media/ftp/Generic-FlashDisk-01/fhem/uart.classdef


auf den ersten Blick und ungeprüft

der wikibeitrag hat bei mir damals einige ??? beantwortet

http://www.fhemwiki.de/wiki/AVR-NET-IO

stevestrong

#2
danke, der beitrag war auch mein ausgangspunkt, der gibt leider keine lösung zu mein problem :(

meine classdef definition soll schon richtig sein, deine definition funktioniert aber nur mit "s" am ende von classdeffs
attr <name> classdeffs...
ich hab aber beides probiert, das ist nicht das problem.

komisch, dass das problem nur dann auftaucht wenn ich ein " " (space) im cmd {} benutze...

Dr. Boris Neubert

Zitat von: stevestrong am 15 Dezember 2013, 23:46:52
gebe, dann bekomme ich am endgerät pc die folgende fehlermeldung:
syntax error at (eval 90) line 1, near "send 123".

Was heißt, daß Du am Endgerät PC diese Meldung bekommst? Was läuft auf dem Endgerät, was die Nachrichten von FHEM auf der Fritzbox entgegennimmt?

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

stevestrong

#4
ja, die nachricht kommt am endgerät an, was zurzeit nur ein pc ist, dort lauft "hyperterminal" (Win XP).

aber heute ist ein bischen anders, jetzt kommt

syntax error at (eval 29) line 1, near "send 123"

ich hab verbose auf 5 gesetzt.

Dr. Boris Neubert

Zitat von: stevestrong am 15 Dezember 2013, 23:46:52
in classdef file:
###########
get p1 cmd {"send 123"}
###########


Was kommt denn, wenn Du stattdessen

get p1 cmd { "foo" }

reinschreibst? Oder andere Werte mit und ohne Leerzeichen?

Gruesse,
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

stevestrong

Boris, danke für deine hilfe, ich schätze es sehr!
auf
get p1 cmd { "foo" }

kommt jetzt:

Bareword "foo" not allowed while "strict subs" in use at (eval 40) line 1.

dabei ist der (eval xy) wert immer unterschiedlich, jetzt geht jedes mal eins höher...

was ist denn bei mir los?

stevestrong

#7
sooo,
inzwischen hab ich fhem auf den stick neu kopiert.
hab auch noch "set verbose 5" auf fritzbox über telnet aktiviert.

Dann hab ich über Firefox in die datei "fhem.cfg" die paar zeilen hinzugefügt und die cfg datei gespeichert mit "Save fhem.cfg" button.:

######################################################################
# user code
######################################################################
#
define WiFLY ECMD telnet 192.168.100.23:2000
attr WiFLY classdefs UART=/var/media/ftp/Generic-FlashDisk-01/fhem/uart.classdef
attr WiFLY room WiFi_UART
#
define myU ECMDDevice UART
attr myU room WiFi_UART


in classdef sind folgende (test)zeilen gespeichert:

get p1 cmd { "foo" }
get p2 cmd { "45 6" }
get p3 cmd { chr(13)."7 8 9" }


in fhem.log sind folgende zeilen angezeit (über web page):

...
2013.12.17 00:24:49 5: Cmd: >rereadcfg<
2013.12.17 00:24:49 1: Including fhem.cfg
2013.12.17 00:24:49 5: Cmd: >attr global autoload_undefined_devices 1<
2013.12.17 00:24:49 5: Cmd: >attr global logfile ./log/fhem-%Y-%m-%d.log<
2013.12.17 00:24:49 5: Cmd: >attr global modpath .<
2013.12.17 00:24:49 5: Cmd: >attr global motd SecurityCheck:\
\
WEB,WEBphone,WEBtablet has no basicAuth attribute.\
telnetPort has no password/globalpassword attribute.\
Running with root privileges.\
Restart fhem for a new check if the problem is fixed,\
or set the global attribute motd to none to supress this message.\
<
2013.12.17 00:24:49 5: Cmd: >attr global statefile ./log/fhem.save<
2013.12.17 00:24:49 5: Cmd: >attr global uniqueID ./FHEM/FhemUtils/uniqueID<
2013.12.17 00:24:49 5: Cmd: >attr global updateInBackground 1<
2013.12.17 00:24:49 5: Cmd: >attr global userattr devStateIcon devStateStyle icon sortby webCmd<
2013.12.17 00:24:50 5: Cmd: >attr global verbose 5<
2013.12.17 00:24:50 5: Cmd: >define telnetPort telnet 7072 global<
2013.12.17 00:24:50 3: telnetPort: port 7072 opened
2013.12.17 00:24:50 5: Cmd: >define WEB FHEMWEB 8083 global<
2013.12.17 00:24:50 3: WEB: port 8083 opened
2013.12.17 00:24:50 5: Cmd: >define WEBphone FHEMWEB 8084 global<
2013.12.17 00:24:50 3: WEBphone: port 8084 opened
2013.12.17 00:24:50 5: Cmd: >attr WEBphone stylesheetPrefix smallscreen<
2013.12.17 00:24:50 5: Cmd: >define WEBtablet FHEMWEB 8085 global<
2013.12.17 00:24:50 3: WEBtablet: port 8085 opened
2013.12.17 00:24:50 5: Cmd: >attr WEBtablet stylesheetPrefix touchpad<
2013.12.17 00:24:50 5: Cmd: >define Logfile FileLog ./log/fhem-%Y-%m-%d.log fakelog<
2013.12.17 00:24:50 5: Cmd: >attr Logfile archivedir /var/media/ftp/Generic-FlashDisk-01/fhem<
2013.12.17 00:24:50 5: Cmd: >attr Logfile nrarchive 1<
2013.12.17 00:24:50 5: Cmd: >define autocreate autocreate<
2013.12.17 00:24:50 5: Cmd: >attr autocreate filelog ./log/%NAME-%Y-%m-%d.log<
2013.12.17 00:24:50 5: Cmd: >define eventTypes eventTypes ./log/eventTypes.txt<
2013.12.17 00:24:50 5: Cmd: >define initialUsbCheck notify global:INITIALIZED usb create<
2013.12.17 00:24:50 5: Cmd: >define WiFLY ECMD telnet 192.168.100.23:2000<
2013.12.17 00:24:50 3: ECMD opening WiFLY (protocol telnet, device 192.168.100.23:2000)
2013.12.17 00:24:50 3: ECMD device opened
2013.12.17 00:24:50 5: ECMD (ReadAnswer): *HELLO*
2013.12.17 00:24:50 5: Cmd: >attr WiFLY classdefs UART=/var/media/ftp/Generic-FlashDisk-01/fhem/uart.classdef<
2013.12.17 00:24:50 5: WiFLY: adding new class UART from file /var/media/ftp/Generic-FlashDisk-01/fhem/uart.classdef
2013.12.17 00:24:50 5: WiFLY: evaluating >get p1 cmd { foo }<
2013.12.17 00:24:50 5: WiFLY: get p1 command defined as { foo }
2013.12.17 00:24:50 5: WiFLY: evaluating >get p2 cmd { 45 6 }<
2013.12.17 00:24:50 5: WiFLY: get p2 command defined as { 45 6 }
2013.12.17 00:24:50 5: WiFLY: evaluating >get p3 cmd { chr(13).7 8 9 }<
2013.12.17 00:24:50 5: WiFLY: get p3 command defined as { chr(13).7 8 9 }
2013.12.17 00:24:50 5: Cmd: >attr WiFLY room WiFi_UART<
2013.12.17 00:24:50 5: Cmd: >define myU ECMDDevice UART<
2013.12.17 00:24:50 5: Loading ./FHEM/67_ECMDDevice.pm
2013.12.17 00:24:50 5: Cmd: >attr myU room WiFi_UART<
2013.12.17 00:24:50 1: Including ./log/fhem.save
2013.12.17 00:24:50 5: Cmd: >setstate Logfile active<
2013.12.17 00:24:50 5: Cmd: >setstate autocreate active<
2013.12.17 00:24:50 5: Cmd: >setstate eventTypes active<
2013.12.17 00:24:50 5: Cmd: >setstate global <no definition><
2013.12.17 00:24:50 5: Cmd: >setstate initialUsbCheck active<
2013.12.17 00:24:50 5: Triggering global (1 changes)
2013.12.17 00:24:50 5: Notify loop for global REREADCFG
2013.12.17 00:24:50 4: eventTypes: Global global REREADCFG -> REREADCFG
...
2013.12.17 00:52:23 5: Cmd: >get myU p1<
2013.12.17 00:52:23 5: ECMDDevice: Analyze command >{ foo }<
2013.12.17 00:52:23 5: WiFLY sending Bareword "foo" not allowed while "strict subs" in use at (eval 18) line 1.
...
2013.12.17 00:53:59 5: Cmd: >get myU p2<
2013.12.17 00:53:59 5: ECMDDevice: Analyze command >{ 45 6 }<
2013.12.17 00:53:59 5: WiFLY sending syntax error at (eval 19) line 1, near "45 6"
...
2013.12.17 00:54:19 5: Cmd: >get myU p3<
2013.12.17 00:54:19 5: ECMDDevice: Analyze command >{ chr(13).7 8 9 }<
2013.12.17 00:54:19 5: WiFLY sending syntax error at (eval 20) line 1, near "7 8"


am ende hab ich auch die 3 (test) commandos geschikt, die antwort ist auch im log zu sehen.

mir ist aufgefallen, dass im log bei einlesen der kommandos die anführungszeichen fehlen! ist das so normal?

und das sagt fritzbox dazu:
Number found where operator expected at (eval 19) line 1, near "45 6"
        (Missing operator before  6?)
Number found where operator expected at (eval 20) line 1, near "7 8"
        (Missing operator before  8?)
Number found where operator expected at (eval 20) line 1, near "8 9"
        (Missing operator before  9?)
Use of uninitialized value $text in concatenation (.) or string at fhem.pl line 621.
Use of uninitialized value $r[0] in join or string at ./FHEM/66_ECMD.pm line 635.


gibt es ein generelles problem in "fhem.pl" und/oder in "66_ecmd.pm" oder bei mir lokal stimmt etwas nicht?
oder mach ich etwas ganz falsch?

danke für die unterstützung im voraus.

stevestrong

#8
na ja, das ist der beweis dafür dass ich kein linux experte bin  ::)

mein fehler war , dass ich die kommandozeilen in die classdef datei mir "echo" befehle eingetragen hab.
und dabei werden - so wie es aussieht - die anführungszeichen geschluckt...

schön wäre es in der "hausautomatisierung mit fhem" datei auch einige nützliche linux befehle mit aufzunehmen (z.b. cd, rm, cat und vi). nicht dass hier noch einer sich blöd darstellt :)

auf jedem fall, jetzt werden meine befehle übertragen und fhem bekommt auch die antwort.
und die komische fehlermeldungen aus "fhem.pl" und "66_ecmd.pm" dateien kommen auch nicht mehr.

von meiner seite ist das hier:

***CLOSED***