Neue Module ECMD und ECMDDevice (Ethersex) für fhem

3,324 views
Skip to first unread message

Boris Neubert

unread,
Jan 22, 2011, 6:42:58 PM1/22/11
to fhem-...@googlegroups.com
Hallo,

in der CVS-Version von fhem sind ab sofort zwei neue Module enthalten.

ECMD definiert ein physikalisches Gerät, mit dem im Dialog per telnet kommuniziert werden kann. Ich verwende ein AVR-NET-IO von Pollin mit Ethersex als Firmware.

ECMDDevice definiert ein logisches Gerät, das von dem physikalischen Gerät bereitgestellt wird. Dies kann z.B. ein ADC, ein I/O-Port, ein IR-Empfänger, ein RF-Sender/Empfänger oder ein LCD sein. Hier gibt es praktisch keine Begrenzung, da die Charakteristika des ECMDDevice erst zur Laufzeit von fhem definiert werden: einem ECMDDevice wird eine Geräteklasse zugewiesen. Die Geräteklasse wird vom Anwender definiert - der Anwender bestimmt, welche Parameter der define-Befehl nimmt, welche get- und set-Befehle es gibt, welche Parameter diese nehmen, und welcher Befehl dazu an das physikalische Gerät gesendet wird. Beispiel unten.

Ich benutze das AVR-NET-IO, um die Velux-Rolladen auf meinen Dachflächenfenstern in die Hausautomation zu integrieren. Siehe hierzu

http://www.neubert-volmar.de/Hausautomation/AVRNETIO/index.html

Das Modul 66_ECMD.pm kann leicht um die Möglichkeit ergänzt werden, über eine serielle Schnittstelle zu kommunizieren. M.E. müßte es mit der Kombination aus ECMD und ECMDDevice möglich sein, neue Geräte mit einfachen dialogbasierten Protokollen über eine Datei zu implementieren, so daß nicht jedes Mal ein neues Modul entwickelt werden muß.

Viele Grüße,
Boris Neubert


Beispiel:

Die Klassendefinition VeluxRC.classdef für die Geräteklasse VeluxRC (Velux Remote Control) sieht wie folgt aus:
# these are the numbers of the buttons as hex chars from 0 to f;
params btnup btnstop btndown

# setter definitions for opening, stopping and closing the shutters
set up cmd {"io set ddr 2 ff\nio set port 2 1%btnup\nwait 1000\nio set port 2 00"}
set stop cmd {"io set ddr 2 ff\nio set port 2 1%btnstop\nwait 1000\nio set port 2 00"}
set down cmd {"io set ddr 2 ff\nio set port 2 1%btndown\nwait 1000\nio set port 2 00"}
Die Definition in der Konfigurationsdatei von fhem lautet wie folgt:
define AVRNETIO ECMD telnet 192.168.xxx.xxx.:2701
set AVRNETIO classdef VeluxRC /path/to/VeluxRC.classdef
define 3.kiz.roll ECMDDevice VeluxRC 1 0 2

Um die Rolladen dann abhängig vom Sonnenstand und Wochentag zu öffnen und zu schließen, werden
diese Kommandos verwendet:
define at.sunrise.3.kiz.roll.wd at *{sunrise(1800,"06:20")} { fhem("set 3.kiz.roll up") if(!$we) }
define at.sunrise.3.kiz.roll.we at *{sunrise(1800,"08:00")} { fhem("set 3.kiz.roll up") if($we) }
define at.sunset.3.kiz.roll.1 at *{sunset(-1800,"00:00","19:30:00")} set 3.kiz.roll down

Message has been deleted

Willi

unread,
Jan 23, 2011, 9:46:37 AM1/23/11
to FHEM users
Hallo Boris,
das ist ja toll!

Ich habe bei mir auch mehrere avr-net-io im Einsatz (auch mit
Ethersex
firmware) und habe die Relais über FHEM bisher nur primitiv über
externe Skripte (wget) gesteuert. Mit Deiner Methode ist dann avt-
net-
io voll in FHEM integriert!

Eine Frage dazu, bevor ich Dein Modul einsetze:
- Können mit diesem Modul auch automatisch Eingabeports von avr-net-
io
abgefragt und ins Filelog geschrieben werden?

MfG Willi

Boris Neubert

unread,
Jan 23, 2011, 1:33:35 PM1/23/11
to fhem-...@googlegroups.com
Hallo Willi,

Am 23.01.2011 15:41, schrieb Willi:
> das ist ja toll!

freut mich, daß die Module für Dich nützlich sind.

> Würdest Du Deine Beispiele zur Verfügung stellen? Im CVS habe ich
> nichts gefunden (evtl. habe ich aber auch falsch gesucht).

Die beispielhaften Klassendefinition für ADC und I/O-Ports sind ja in
der Dokumentation zum ECMDDevice bei den Beispielen. Wenn Du mir sagst,
was Du genau brauchst, kann ich eine Klassendefinition dafür schreiben.

> - Können mit diesem Modul auch automatisch Eingabeports von avr-net-io
> abgefragt und ins Filelog geschrieben werden?

In der Tat wird derzeit noch nichts protokolliert. Es wäre zu ergänzen,
daß nach einem set oder get etwas ins Log geschrieben wird. Dazu müßten
die Kommandos (value, up, down, ...) zugleich als Readings interpretiert
werden.

Was meinst Du mit "automatisch abfragen"?

Viele Grüße,
Boris

Willi

unread,
Jan 23, 2011, 3:13:26 PM1/23/11
to FHEM users
Hallo Boris!

>
> > - Können mit diesem Modul auch automatisch Eingabeports von avr-net-io
> > abgefragt und ins Filelog geschrieben werden?
>
> In der Tat wird derzeit noch nichts protokolliert. Es wäre zu ergänzen,
> daß nach einem set oder get etwas ins Log geschrieben wird. Dazu müßten
> die Kommandos (value, up, down, ...) zugleich als Readings interpretiert
> werden.
>

Mir fällt dazu spontan folgendes für 67_CMDDevice.pm ein:

get <name> <commandname>

generiert READINGS wie folgt:

$modules{ECMDDevice}{defptr}{$name} = $hash;
...
$def->{READINGS}{$commandname}{VAL} = $result_of_ecmd;
...

> Was meinst Du mit "automatisch abfragen"?

Ich meinte damit eigentlich, dass das Modul avr-net-io pollt (z.B.
alle 5 Minuten), dabei die Ports von avr-net-io abfragt und die
Ergebnisse als Reading schreibt, damit man das auch als Filelog hat.

Evtl. reicht dazu aber schon aus, wenn man die Ergebnisse vom get des
67_CMDDevice.pm als READINGS schreibt (siehe oben).

Was meinst Du?

MfG Willi

appi

unread,
Jan 25, 2011, 3:52:16 AM1/25/11
to FHEM users
hallo Boris
ich glaube dein modul könnte mir bei meiner aufgabe ASCII charakter an
eine serielle schnittstelle ( oder usb device ) zusenden, helfen. Ich
möchte z.B das Lunartec 7x50 als device in Fhem definieren un
benutzen.
deine aussage:
>Das Modul 66_ECMD.pm kann leicht um die Möglichkeit ergänzt werden, über
>eine serielle Schnittstelle zu kommunizieren.
gefällt mir. Kannst du mir noch einen Tip geben wie ich Ausgabe von
TCP nach einem USB Device ändern könnte.

Betsen Dank
mfg
remo

Boris Neubert

unread,
Jan 25, 2011, 2:49:21 PM1/25/11
to fhem-...@googlegroups.com
Hallo Willi,

Am 23.01.2011 21:13, schrieb Willi:
> Mir fällt dazu spontan folgendes für 67_CMDDevice.pm ein:
>
> get <name> <commandname>
>
> generiert READINGS wie folgt:
>

> $def->{READINGS}{$commandname}{VAL} = $result_of_ecmd;

das ist implementiert und im CVS eingecheckt. Es sind nur rudimentäre
Tests erfolgt, ich würde mich freuen, wenn Du es testest und eine
Rückmeldung gibst.

>> Was meinst Du mit "automatisch abfragen"?

> Ich meinte damit eigentlich, dass das Modul avr-net-io pollt (z.B.
> alle 5 Minuten), dabei die Ports von avr-net-io abfragt und die
> Ergebnisse als Reading schreibt, damit man das auch als Filelog hat.

Ich habe die beiden Module im Vorgriff auf fhem 6 nach den neuen
Development Guidelines entwickelt, soweit abwärtskompatibel. Leider
fehlt für fhem 6 noch das Konzept für die Polling-Infrastruktur. Ich
schlage daher vor, daß Du ein at-Kommando benutzt, um periodisch ein get
zu machen. Dabei wird jedesmal das Reading gesetzt und ein Notify und
Filelog-Eintrag getriggert.

Viele Grüße,
Boris

Boris Neubert

unread,
Jan 25, 2011, 2:57:38 PM1/25/11
to fhem-...@googlegroups.com
Hallo,

ich habe 66_EMCD um die serielle Schnittstelle erweitert. Die Doku ist
(noch) _nicht_ aktualisiert. Du mußt

define myGenericSerialDevice ECMD serial /dev/ttyS0

oder ähnliches definieren. In der Klassendefinition ledticker.classdef
würde ich so etwas wie

set text cmd { "STEUERCODES%tickertext" }
set text params tickertext

schreiben und ein logisches Gerät

define myLedticker ECMDDevice ledticker.classdef

definieren. Mit

set myLedticker text 'Hallo, ich bin der Tickertext'

sollte das dann klappen. Das alles inklusive der seriellen Kommunikation
ist völlig ungetestet: der Kode ist bei mir mangels Zeit und Gerät nie
gelaufen.

Viel Glück!
Boris

appi

unread,
Jan 25, 2011, 3:44:08 PM1/25/11
to FHEM users
danke Boris, werde am wochenende testen.

gruss
remo

Willi

unread,
Jan 25, 2011, 4:25:01 PM1/25/11
to FHEM users
On 25 Jan., 20:49, Boris Neubert <om...@online.de> wrote:
> das ist implementiert und im CVS eingecheckt. Es sind nur rudimentäre
> Tests erfolgt, ich würde mich freuen, wenn Du es testest und eine
> Rückmeldung gibst.
>

Hallo Boris,

super! Dann werde ich das gleich morgen mal angehen.

MfG Willi
Message has been deleted
Message has been deleted
Message has been deleted

Willi

unread,
Jan 26, 2011, 1:49:10 PM1/26/11
to FHEM users
Hallo Boris,

ich bin begeistert!

* In fhem.cfg habe ich jetzt:

define AVRNETIO ECMD telnet 192.168.169.181:2701
set AVRNETIO classdef WATER /var/log/fhem/Water.class

define WasserLED ECMDDevice WATER 1
define Wasser ECMDDevice WATER 2

* Die Water.class sieht wie folgt aus:

#
params NUM

# definitions for pins
get pinstate cmd {"pin get ausgang%NUM"}
set setstate cmd {"pin set ausgang%NUM 1"}
set resetstate cmd {"pin set ausgang%NUM 0"}


Ich kann den Status der Relais abfragen:
fhem> get WasserLED pinstate
pinstate: on
fhem> get Wasser pinstate
pinstate: on


und auch die Relias zurücksetzen:
fhem> set Wasser resetstate
resetstate: off
fhem> set WasserLED resetstate
resetstate: off

Oops. Jetzt habe ich meinen Wasser-Hauptanschluss über das Honyewell
Kugelventil HAV-25 abgeschaltet!
Jetzt schnell wieder Wasser anschalten, bevor meine Familie nach
Wasser schreit!

fhem> set Wasser setstate
setstate: on
fhem> set WasserLED setstate
setstate: on

Jetzt habe ich wieder Wasser im Haus!

Auch die Readings werden so gesetzt wie gewünscht.
Jetzt fehlen nur noch at-Kommandos, FileLog und Weblink.

Ich bin begeistert!!

MfG Willi

Dr. Boris Neubert

unread,
Jan 26, 2011, 2:33:29 PM1/26/11
to fhem-...@googlegroups.com
Am 26.01.2011 19:49, schrieb Willi:
> ich bin begeistert!
>
es freut mich, dass die Module fuer Dich nuetzlich sind!

Dank des Super-Frameworks von Rudi war die Erweiterung ruckzuck
umgesetzt. fhem.pl habe ich angefasst, weil ich ein paar
Convenience-Funktionen brauchte und daher bestehende Programmteile
ausgekoppelt habe, um Kode-Doppelungen zu vermeiden.

Viele Gruesse,
Boris

appi

unread,
Feb 4, 2011, 1:46:29 AM2/4/11
to FHEM users
Hallo Boris
ende meiner skiferien und sofort testen deines moduls. ich kriege
einen fehler, das die serielle prozedur die version eines CUL's
auslesen will und
mein pl2303 die version nicht zurück geben kann.

2011.02.04 07:36:00 2: FHEMWEB port 8083 opened
2011.02.04 07:36:00 2: FHEMWEB port 8084 opened
2011.02.04 07:36:00 3: ECMD opening myGenericSerialDevice (protocol
serial, device /dev/ttyUSB0@9600)
2011.02.04 07:36:00 3: CUL setting myGenericSerialDevice baudrate to
9600
2011.02.04 07:36:00 3: ECMD device opened
2011.02.04 07:36:03 1: myGenericSerialDevice: Timeout reading answer
for get version
2011.02.04 07:36:03 1: Cannot init myGenericSerialDevice (/dev/
ttyUSB0), ignoring it
2011.02.04 07:36:03 1: myGenericSerialDevice: Timeout reading answer
for get version

hast du einen Tip wo genau ich die abfrage der version remarken kann?

gruss und danke
remo

Boris Neubert

unread,
Feb 4, 2011, 3:41:25 PM2/4/11
to fhem-...@googlegroups.com
Hallo Remo,

Am 04.02.2011 07:46, schrieb appi:
> 2011.02.04 07:36:00 3: ECMD opening myGenericSerialDevice (protocol
> serial, device /dev/ttyUSB0@9600)
> 2011.02.04 07:36:00 3: CUL setting myGenericSerialDevice baudrate to
> 9600
> 2011.02.04 07:36:00 3: ECMD device opened
> 2011.02.04 07:36:03 1: myGenericSerialDevice: Timeout reading answer
> for get version
> 2011.02.04 07:36:03 1: Cannot init myGenericSerialDevice (/dev/
> ttyUSB0), ignoring it
> 2011.02.04 07:36:03 1: myGenericSerialDevice: Timeout reading answer
> for get version

ich habe es soeben ausprobiert und bei mir geht es.

fhem.conf:

define physicalCUL ECMD serial /dev/ttyACM0
set physicalCUL classdef CUL ...../CUL.classdef
define logicalCUL ECMDDevice CUL

CUL.classdef:

get version cmd {"V"}


fhem starten, dann auf der telnet-Konsole:

get logicalCUL version
version: V 1.37 CUL868
get physicalCUL raw V
physicalCUL raw => V 1.37 CUL868

Bist Du sicher, daß der CUL das Gerät /dev/ttyUSB0 erzeugt? Bitte mit
dmesg nach dem Anstecken des CUL prüfen.

Viele Grüße,
Boris

Boris Neubert

unread,
Feb 4, 2011, 4:23:26 PM2/4/11
to fhem-...@googlegroups.com
66_ECMD.pm und commandref.html wurden im CVS aktualisiert, damit
Klassendefinitionen auch nach einem save-Befehl erhalten bleiben.

Funktioniert bei mir, es mögen bitte auch die anderen Verwender testen.

Grüße,
Boris

Willi

unread,
Feb 4, 2011, 7:26:38 PM2/4/11
to FHEM users
Funktioniert bei mir auch. Danke!

MfG Willi

appi

unread,
Feb 5, 2011, 1:32:50 AM2/5/11
to FHEM users
Hallo Boris
sorry, ich habe mich nicht klar ausgedrückt.
ich will eine RS323 Schnittstelle ( Lauflicht oder Somfy 16RTS ) mit
deinem Modul ansteuern. Das ist kein CUL im einsatz,
sondern nur ein USB-RS232 Wandler ( pl2303 ) dieser pl2303 kann die
Verionsfrage nicht beantworten und deshalb kriege ich dein Modul nicht
connectet.
Mein Ziel ist es ASCII Charakter an ein serielles device in meinem
Fall ttyUSB0 senden ohne einen Status abzufragen.

Ich glaube aber das dein Modul dank der flexibilität für meine
Aufgabenstellung geeignet ist.

edanke für deinen support

gruss
remo

Dr. Boris Neubert

unread,
Feb 5, 2011, 2:26:57 AM2/5/11
to fhem-...@googlegroups.com
Hallo Remo,

Am 05.02.2011 07:32, schrieb appi:
> ich will eine RS323 Schnittstelle ( Lauflicht oder Somfy 16RTS ) mit
> deinem Modul ansteuern. Das ist kein CUL im einsatz,
> sondern nur ein USB-RS232 Wandler ( pl2303 ) dieser pl2303 kann die
> Verionsfrage nicht beantworten und deshalb kriege ich dein Modul nicht
> connectet.
>

kannst Du bitte eine minimale fhem.conf und Somfy.classdef fuer Zwecke
erstellen und diese hier posten?

Gruesse,
Boris

appi

unread,
Feb 7, 2011, 1:11:06 AM2/7/11
to FHEM users
hallo boris

die befehle sind eigentilch ganz einfach für somfy 16RTS:
"0105U " 16RTS gerät 01, Kanal 05, U für Rollladen Up
"0105D" 16RTS gerät 01, Kanal 05, D für Rollladen Down
"0103S" 16RTS gerät 01, Kanal 03, S für Rollladen Stop

mit dem linux Command Befehl : Echo "0105U" > ttyUSB0 funktioniert
die Rolladensteuerung auch gut, aber ich hätte gerne
im FHEM und nicht auf Linuxebene.

gruss
remo

On 5 Feb., 08:26, "Dr. Boris Neubert" <om...@online.de> wrote:
> Hallo Remo,
>
> Am 05.02.2011 07:32, schriebappi:> ich will eine RS323 Schnittstelle ( Lauflicht oder Somfy 16RTS ) mit

Dr. Boris Neubert

unread,
Feb 7, 2011, 3:42:49 PM2/7/11
to fhem-...@googlegroups.com
Hallo Remo,

Am 07.02.2011 07:11, schrieb appi:
> die befehle sind eigentilch ganz einfach für somfy 16RTS:
> "0105U " 16RTS gerät 01, Kanal 05, U für Rollladen Up
> "0105D" 16RTS gerät 01, Kanal 05, D für Rollladen Down
> "0103S" 16RTS gerät 01, Kanal 03, S für Rollladen Stop
>
> mit dem linux Command Befehl : Echo "0105U" > ttyUSB0 funktioniert
> die Rolladensteuerung auch gut, aber ich hätte gerne
> im FHEM und nicht auf Linuxebene.
>
>

meiner Meinung nach muesste das so aussehen (ungetestet, aus dem Kopf):

define mySerialDevice ECMD serial /dev/ttyUSB0
set mySerialDevice classdef Somfy /path/to/Somfy.classdef
(oder attr mySerialDevice classdefs Somfy=/path/to/Somfy.classdef)

mit Somfy.classdef wie folgt:

set up cmd { "0105U" }
set down cmd { "0105D" }
set stop cmd { "0103S" }

Wenn das laeuft kannst Du nach und nach den Parameter 01 und den Kanal
(warum eigentlich 03 und 05?) durch Parameterdefinitionen ersetzen.

Viel Erfolg!
Boris

appi

unread,
Feb 10, 2011, 10:41:26 AM2/10/11
to FHEM users
Hallo Boris
endlich hatte ich wieder Zeit für Tests:
leider funktionier es noch nicht richtig, das beim öffnen des Devises
ECMD die Version ausgelesen werden sollte,
aber mein Serielles Device keine Version zurückgeben kann, da es kein
CUL sondern ein USB2Seriell Kabel vom Typ Pl2303 ist.

2011.02.10 15:32:32 3: CUL setting CUL433 baudrate to 9600
2011.02.10 15:32:32 1: CUL /dev/ttyACM0 reappeared (CUL433)
2011.02.10 15:32:54 3: CUL opening CUL433 device /dev/ttyACM0
2011.02.10 15:32:54 3: CUL setting CUL433 baudrate to 9600
2011.02.10 15:32:54 3: CUL device opened
2011.02.10 15:32:54 3: ECMD opening mySerialDevice (protocol serial,
device /dev/ttyUSB0)
2011.02.10 15:32:54 3: ECMD device opened
2011.02.10 15:32:57 1: mySerialDevice: Timeout reading answer for get
version
2011.02.10 15:32:57 1: Cannot init mySerialDevice (/dev/ttyUSB0),
ignoring it
2011.02.10 15:32:57 1: mySerialDevice: Timeout reading answer for get
version
2011.02.10 15:32:57 2: FHEMWEB port 8083 opened

die config:
attr global logfile /var/log/fhem/fhem-%Y-%m.log
attr global modpath /usr/share/fhem
attr global port 7072 global
attr global statefile /var/log/fhem/fhem.save
attr global verbose 3
define CUL433 CUL /dev/ttyACM0@9600 1231

define mySerialDevice ECMD serial /dev/ttyUSB0
set mySerialDevice classdef Somfy /usr/share/fhem/Somfy.classdef

define WEB FHEMWEB 8083 global

define WEBS FHEMWEB 8084 global
attr WEBS smallscreen

# Fake logfile, to access the global log
define Logfile FileLog /var/log/fhem/fhem-%Y-%m.log fakelog


und die somfy.class:
set up cmd { "0105U" }
set down cmd { "0105D" }
set stop cmd { "0103S" }


>> Ich denke dein Modul erwartet einen CUL und fragt den CUL nach der Version.
Da keine Version gemeldet wird, hängt FHEM das Serielle Device wieder
ab.

Bin weiter froh um einen Tip.

gruss
remo

2011.02.10 15:32:57 2: FHEMWEB port 8084 opened

Boris Neubert

unread,
Feb 12, 2011, 3:10:56 PM2/12/11
to fhem-...@googlegroups.com
Hallo Remo,

Am 10.02.2011 16:41, schrieb appi:
> leider funktionier es noch nicht richtig, das beim öffnen des Devises
> ECMD die Version ausgelesen werden sollte,

das Auslesen der Version war für Ethersex gedacht und ich hatte
vergessen, es zu entfernen, nachdem ich auf die Idee gekommen bin, daß
ECMD universell einsetzbar ist. Bitte 66_ECMD.pm aktuell aus dem CVS
abrufen!

Bitte in Deiner Konfig noch eine Zeile ergänzen:

> die config:
> attr global logfile /var/log/fhem/fhem-%Y-%m.log
> attr global modpath /usr/share/fhem
> attr global port 7072 global
> attr global statefile /var/log/fhem/fhem.save
> attr global verbose 3
> define CUL433 CUL /dev/ttyACM0@9600 1231
>
> define mySerialDevice ECMD serial /dev/ttyUSB0
> set mySerialDevice classdef Somfy /usr/share/fhem/Somfy.classdef

define mySomfy ECMDDevice Somfy

>
> define WEB FHEMWEB 8083 global
>
> define WEBS FHEMWEB 8084 global
> attr WEBS smallscreen
>
> # Fake logfile, to access the global log
> define Logfile FileLog /var/log/fhem/fhem-%Y-%m.log fakelog

und dann sollte

set mySomfy down

funktionieren.

Viele Grüße,
Boris

appi

unread,
Feb 24, 2011, 1:49:03 AM2/24/11
to FHEM users
hallo Boris
alles läuft, vielen Dank für deine Untersatützung.

gruss
remno

Mark

unread,
Mar 30, 2011, 11:27:07 AM3/30/11
to FHEM users
Hallo zusammen,

ich möchte auch Text über die serielle Schnittstelle senden.
Willi gab mir den Tip zu diesem Posting und hier ist nun mein erstes
Ergebnis.

Ausgangssituation:
Meine Heizung ist mit COM1 verbunden.
Die Zahl 3 bewirkt das Schalten durch die 3 verfügbaren Modi.
- Tag
- Abwesend
- Nacht
Um also von Tag auf Nacht (off) zu schalten muss die 3 zweimal
gesendet werden, idealerweise mit kurzer Pause.
Von Nacht auf Tag (on) muss die 3 einmal gesendet werden.

Hier nun mein Versuch (Achtung, Windows):
fhem.cfg
define mySerialDevice ECMD serial COM1
set mySerialDevice classdef HZCOM1 c:/fhem-5.0/HZCOM1.classdef
define myHZCOM1 ECMDDevice HZCOM1

HZCOM1.classdef
set on cmd { "3" }
set off cmd { "33" }

Ergebnis:
fhem startet mit diesen Meldungen und hängt.
C:\fhem-5.0>fhem mrauto.cfg
Missing REQUIRED setting for STOP at ./FHEM/66_ECMD.pm line 227
Missing REQUIRED setting for PARITY at ./FHEM/66_ECMD.pm line 227
Missing REQUIRED setting for DATA at ./FHEM/66_ECMD.pm line 227
Missing REQUIRED setting for BAUD at ./FHEM/66_ECMD.pm line 227
write_settings failed, closing port at ./FHEM/66_ECMD.pm line 227

Meine Fragen dazu,
1. Das sieht ja schon vielsprechend aus. Oder bin ich auf dem Holzweg?
2. Ich verstehe die Meldungen so, dass "COM1" so nicht verarbeitet
werden kann.
Wie muss das define serial unter Windows richtig aussehen?
3. Wie bekomme ich eine Pause in die Zeichenfolge?

Danke

Gruß Mark

Dr. Boris Neubert

unread,
Mar 30, 2011, 1:31:33 PM3/30/11
to fhem-...@googlegroups.com
Hallo,

Am 30.03.2011 17:27, schrieb Mark:
> Missing REQUIRED setting for STOP at ./FHEM/66_ECMD.pm line 227

der serielle Teil ist von mir mangels Möglichkeit nicht getestet wurden.
Es sieht mir so aus, als ob die schließende Klammer von Zeile 225 hinter
Zeile 203 könnte. Bitte ausprobieren oder alternativ die Baudrate beim
define des Device angeben (siehe Doku).

> 3. Wie bekomme ich eine Pause in die Zeichenfolge?

Gar nicht. Was immer Du tust, der String wird in einem Rutsch an das
Device gesendet. Wenn Du es unbedingt brauchst, mußt Du ECMD so
modifizieren, daß ein bestimmtes ASCII-Zeichen beim Senden in
ECMD_SimpleWrite als Pause interpretiert wird.

Viele Grüße,
Boris

Mark

unread,
Mar 30, 2011, 4:13:31 PM3/30/11
to FHEM users
Hallo Boris,

> Es sieht mir so aus, als ob die schließende Klammer von Zeile 225 hinter
> Zeile 203 könnte. Bitte ausprobieren
Das Ergebnis ist:
C:\fhem-5.0>fhem com.cfg
Missing REQUIRED setting for STOP at ./FHEM/66_ECMD.pm line 207
Missing REQUIRED setting for PARITY at ./FHEM/66_ECMD.pm line 207
Missing REQUIRED setting for DATA at ./FHEM/66_ECMD.pm line 207
Missing REQUIRED setting for BAUD at ./FHEM/66_ECMD.pm line 207
write_settings failed, closing port at ./FHEM/66_ECMD.pm line 207

Keine Meldung, fhem hängt - Kein Telnet (verbinden geht aber keine
Reaktion auf Eingaben) kein PGM2

Logfile:
2011.03.30 21:42:31 5: Cmd: >define mySerialDevice ECMD serial COM1<
2011.03.30 21:42:31 5: Loading ./FHEM/66_ECMD.pm
2011.03.30 21:42:31 3: ECMD opening mySerialDevice (protocol serial,
device COM1)
2011.03.30 21:42:31 3: ECMD device opened

> oder alternativ die Baudrate beim
> define des Device angeben (siehe Doku).
okay aus dem COM1 habe ich ein COM1@9600 gemacht

Ergebnis:
C:\fhem-5.0>fhem com.cfg

Keine Meldung, fhem hängt - Kein Telnet (verbinden geht aber keine
Reaktion auf Eingaben) kein PGM2

Logfile
2011.03.30 21:46:08 5: Cmd: >define mySerialDevice ECMD serial
COM1@9600<
2011.03.30 21:46:08 5: Loading ./FHEM/66_ECMD.pm
2011.03.30 21:46:08 3: ECMD opening mySerialDevice (protocol serial,
device COM1@9600)
2011.03.30 21:46:08 3: CUL setting mySerialDevice baudrate to 9600
2011.03.30 21:46:08 3: ECMD device opened

Zum testen habe ich COM1 auf COM2 (nicht vorhanden!) gesetzt.
Ergebnis:
C:\fhem-5.0>fhem com.cfg
Das System kann die angegebene Datei nicht finden.
can't open device: \\.\COM2
at ./FHEM/66_ECMD.pm line 177

fhem hängt - Kein Telnet (verbinden geht aber keine Reaktion auf
Eingaben) kein PGM2

:-(

Gruß Mark

Dr. Boris Neubert

unread,
Mar 31, 2011, 1:10:15 AM3/31/11
to fhem-...@googlegroups.com
Hallo Mark,

Am 30.03.2011 22:13, schrieb Mark:
> okay aus dem COM1 habe ich ein COM1@9600 gemacht
>
> Ergebnis:
> C:\fhem-5.0>fhem com.cfg
>
> Keine Meldung, fhem hängt - Kein Telnet (verbinden geht aber keine
> Reaktion auf Eingaben) kein PGM2
>

> 2011.03.30 21:46:08 3: ECMD device opened

bisher sieht das gut aus!

> fhem hängt - Kein Telnet (verbinden geht aber keine Reaktion auf
> Eingaben) kein PGM2

Das ist merkwürdig. Hast Du fhem schon mal ohne den ECMD-Teil am laufen
gehabt? Bitte wie folgt testen:
1. Minimalkonfiguration
2. wie 1 plus Anlage des ECMD-Geräts
3. wie 2 plus Anlage des ECMDDevice-Geräts

Grüße,
Boris

Mark

unread,
Mar 31, 2011, 2:39:16 PM3/31/11
to FHEM users
Hallo Boris,

danke für Deinen Hilfeversuch. Deine Tests habe ich wie gewünscht
durchgeführt.
Die COM1 Schnittstelle habe ich in der Zeit an einem 2ten PC immer
abgehört.
Es ist nichts angekommen.
Hier die Ergebnisse:

> Das ist merkwürdig. Hast Du fhem schon mal ohne den ECMD-Teil am laufen
> gehabt? Bitte wie folgt testen:
> 1. Minimalkonfiguration
min.cfg
attr global logfile c:/fhem-5.0/tmp/fhem-min.log
attr global modpath .
attr global nofork 1
attr global port 7072 global
attr global room hidden
attr global statefile c:/fhem-5.0/tmp/fhem-min.save
attr global userattr fm_fav fm_name fm_order fm_groups
attr global verbose 3

define WEB FHEMWEB 8085 global
attr WEB nofork 1
attr WEB refresh 0
attr WEB room hidden

define WEBS FHEMWEB 8086 global
attr WEBS nofork 1
attr WEBS room hidden
attr WEBS smallscreen 1

define Logfile FileLog c:/fhem-5.0/tmpfhem-%Y-%m.log fakelog
attr Logfile room hidden

define CUL CUL com5@38400 0505
attr CUL room hidden

Ergebnis:
PGM2 geht, Putty Telnetzugang okay

fhem-min.log:
2011.03.31 19:33:14 2: FHEMWEB port 8085 opened
2011.03.31 19:33:14 2: FHEMWEB port 8086 opened
2011.03.31 19:33:14 3: CUL opening CUL device com5
2011.03.31 19:33:14 3: CUL setting CUL baudrate to 38400
2011.03.31 19:33:15 3: CUL device opened
2011.03.31 19:33:15 0: Server started (version =VERS= from =DATE=
($Id: fhem.pl,v 1.136 2011-03-10 17:42:01 rudolfkoenig Exp $), pid
3824)

# # #
> 2. wie 1 plus Anlage des ECMD-Geräts
min.cfg + folgende Zeilen am Ende
define mySerialDevice ECMD serial COM1@9600
set mySerialDevice classdef HZCOM1 c:/fhem-5.0/HZCOM1.classdef

Ergebnis:
PGM2 geht NICHT, Kein Telnet (verbinden geht aber keine
Reaktion auf Eingaben)

fhem-min.log
2011.03.31 19:37:47 2: FHEMWEB port 8085 opened
2011.03.31 19:37:47 2: FHEMWEB port 8086 opened
2011.03.31 19:37:47 3: CUL opening CUL device com5
2011.03.31 19:37:47 3: CUL setting CUL baudrate to 38400
2011.03.31 19:37:47 3: CUL device opened
2011.03.31 19:37:47 3: ECMD opening mySerialDevice (protocol serial,
device COM1@9600)
2011.03.31 19:37:47 3: CUL setting mySerialDevice baudrate to 9600
2011.03.31 19:37:47 3: ECMD device opened

# # #
> 3. wie 2 plus Anlage des ECMDDevice-Geräts
min.cfg + folgende Zeilen am Ende
define mySerialDevice ECMD serial COM1@9600
set mySerialDevice classdef HZCOM1 c:/fhem-5.0/HZCOM1.classdef
define myHZCOM1 ECMDDevice HZCOM1

Ergebnis:
PGM2 geht NICHT, Kein Telnet (verbinden geht aber keine
Reaktion auf Eingaben)

fhem-min.log
2011.03.31 20:27:01 2: FHEMWEB port 8085 opened
2011.03.31 20:27:01 2: FHEMWEB port 8086 opened
2011.03.31 20:27:02 3: CUL opening CUL device com5
2011.03.31 20:27:02 3: CUL setting CUL baudrate to 38400
2011.03.31 20:27:02 3: CUL device opened
2011.03.31 20:27:05 3: ECMD opening mySerialDevice (protocol serial,
device COM1@9600)
2011.03.31 20:27:05 3: CUL setting mySerialDevice baudrate to 9600
2011.03.31 20:27:05 3: ECMD device opened

Gruß Mark

Dr. Boris Neubert

unread,
Mar 31, 2011, 3:06:46 PM3/31/11
to fhem-...@googlegroups.com
Am 31.03.2011 20:39, schrieb Mark:
>> 2. wie 1 plus Anlage des ECMD-Geräts
> min.cfg + folgende Zeilen am Ende
> define mySerialDevice ECMD serial COM1@9600
> set mySerialDevice classdef HZCOM1 c:/fhem-5.0/HZCOM1.classdef
>
> Ergebnis:
> PGM2 geht NICHT, Kein Telnet (verbinden geht aber keine
> 2011.03.31 19:37:47 3: ECMD device opened

Ich vermute ein Problem mit Zeile 370 in 66_ECMD.pm:

last if($err && $err =~ m/^Timeout/);


Bitte füge davor folgende Zeile ein:

Log 1, "DEBUG: " . $err;

Dann zeige uns bitte das Protokoll.

Grüße,
Boris

Mark

unread,
Mar 31, 2011, 3:42:55 PM3/31/11
to FHEM users
> Dann zeige uns bitte das Protokoll.

2011.03.31 21:38:31 2: FHEMWEB port 8085 opened
2011.03.31 21:38:31 2: FHEMWEB port 8086 opened
2011.03.31 21:38:31 3: CUL opening CUL device com5
2011.03.31 21:38:31 3: CUL setting CUL baudrate to 38400
2011.03.31 21:38:31 3: CUL device opened
2011.03.31 21:38:34 3: ECMD opening mySerialDevice (protocol serial,
device COM1@9600)
2011.03.31 21:38:34 3: CUL setting mySerialDevice baudrate to 9600
2011.03.31 21:38:34 3: ECMD device opened
2011.03.31 21:38:34 1: DEBUG: Device lost when reading answer for get
clear
2011.03.31 21:38:34 1: DEBUG: Device lost when reading answer for get
clear

Die letzte Meldung wiederholt sich (470.000x in ein paar Sekunden)

Gruß Mark

Dr. Boris Neubert

unread,
Apr 1, 2011, 1:21:39 AM4/1/11
to fhem-...@googlegroups.com
Am 31.03.2011 21:42, schrieb Mark:
> 2011.03.31 21:38:34 1: DEBUG: Device lost when reading answer for get
> clear

OK, ich weiß, was fhem zum Hängen bringt. Es liegt daran, daß der
Filedescriptor unter Windows verschwindet. Der entsprechende Kode, den
ich aus dem CUL-Kode herauskopiert hat, deutet daraufhin, daß dem
ursprünglichen Autor das Problem bekannt ist. Ich werde in den nächsten
Tagen eine aktualisierte Version einchecken, um den Hänger zu
beseitigen. Der Sache mit dem "Device lost" muß separat betrachtet werden.

Grüße,
Boris

Mark

unread,
Apr 1, 2011, 3:18:06 AM4/1/11
to FHEM users
Okay, danke für das Update.

Schönes Wochenende.

Gruß Mark

Boris Neubert

unread,
Apr 1, 2011, 4:16:00 PM4/1/11
to fhem-...@googlegroups.com
Bitte neue Version von 66_ECMD.pm aus CVS abrufen!

Für die nächsten Versuche bitte

attr global verbose 5

setzen.

Grüße,
Boris

Mark

unread,
Apr 1, 2011, 5:27:52 PM4/1/11
to FHEM users
Hallo Boris
> Bitte neue Version von 66_ECMD.pm aus CVS abrufen!
>
> Für die nächsten Versuche bitte
>
> attr global verbose 5
Sieht schonmal gut aus !
Bei dem Versuch habe ich wieder die Schnittstelle beobachtet
set myHZCOM1 on und off senden die eingestellten Befehle.

Windows cmd:
set myHZCOM1 on liefert:
C:\fhem-5.0>fhem min.cfg
Use of uninitialized value $text in concatenation (.) or string at C:
\fhem-5.0\f
hem.pl line 522.
Use of uninitialized value $r[0] in join or string at ./FHEM/
66_ECMD.pm line 600
.
direkt danach set myHZCOM1 off liefert
Use of uninitialized value $text in concatenation (.) or string at C:
\fhem-5.0\f
hem.pl line 522.
Use of uninitialized value $r[0] in join or string at ./FHEM/
66_ECMD.pm line 600
.

HZCOM1.classdef:
set on cmd { "3" }
set off cmd { "3 3 off" }

fhem-min.log:
2011.04.01 23:08:25 5: Cmd: >attr global logfile c:/fhem-5.0/tmp/fhem-
min.log<
2011.04.01 23:08:25 5: Cmd: >attr global modpath .<
2011.04.01 23:08:25 5: Loading ./FHEM/99_SUNRISE_EL.pm
2011.04.01 23:08:25 5: Loading ./FHEM/99_Utils.pm
2011.04.01 23:08:25 5: Loading ./FHEM/99_XmlList.pm
2011.04.01 23:08:25 5: Cmd: >attr global nofork 1<
2011.04.01 23:08:25 5: Cmd: >attr global port 7072 global<
2011.04.01 23:08:25 5: Cmd: >attr global room hidden<
2011.04.01 23:08:25 5: Cmd: >attr global statefile c:/fhem-5.0/tmp/
fhem-min.save<
2011.04.01 23:08:25 5: Cmd: >attr global userattr fm_fav fm_name
fm_order fm_groups<
2011.04.01 23:08:25 5: Cmd: >attr global verbose 5<
2011.04.01 23:08:25 5: Cmd: >define WEB FHEMWEB 8085 global<
2011.04.01 23:08:25 5: Loading ./FHEM/01_FHEMWEB.pm
2011.04.01 23:08:25 2: FHEMWEB port 8085 opened
2011.04.01 23:08:25 5: Triggering global (1 changes)
2011.04.01 23:08:25 5: Cmd: >attr WEB nofork 1<
2011.04.01 23:08:25 5: Cmd: >attr WEB refresh 0<
2011.04.01 23:08:25 5: Cmd: >attr WEB room hidden<
2011.04.01 23:08:25 5: Cmd: >define WEBS FHEMWEB 8086 global<
2011.04.01 23:08:25 2: FHEMWEB port 8086 opened
2011.04.01 23:08:25 5: Triggering global (1 changes)
2011.04.01 23:08:25 5: Cmd: >attr WEBS nofork 1<
2011.04.01 23:08:25 5: Cmd: >attr WEBS room hidden<
2011.04.01 23:08:25 5: Cmd: >attr WEBS smallscreen 1<
2011.04.01 23:08:25 5: Cmd: >define Logfile FileLog c:/fhem-5.0/
tmpfhem-%Y-%m.log fakelog<
2011.04.01 23:08:25 5: Loading ./FHEM/92_FileLog.pm
2011.04.01 23:08:25 5: Triggering global (1 changes)
2011.04.01 23:08:25 5: global trigger: Checking Logfile for notify
2011.04.01 23:08:25 5: Cmd: >attr Logfile room hidden<
2011.04.01 23:08:25 5: Cmd: >define CUL CUL com5@38400 0505<
2011.04.01 23:08:25 5: Loading ./FHEM/00_CUL.pm
2011.04.01 23:08:25 3: CUL opening CUL device com5
2011.04.01 23:08:25 3: CUL setting CUL baudrate to 38400
2011.04.01 23:08:25 3: CUL device opened
2011.04.01 23:08:25 5: CUL/RAW (ReadAnswer): V 1.40 CUL868


2011.04.01 23:08:28 5: CUL/RAW (ReadAnswer): 0505


2011.04.01 23:08:28 5: GOT CUL fhtid: 0505
2011.04.01 23:08:28 5: Triggering global (1 changes)
2011.04.01 23:08:28 5: global trigger: Checking Logfile for notify
2011.04.01 23:08:28 5: Cmd: >attr CUL room hidden<
2011.04.01 23:08:28 5: Cmd: >define mySerialDevice ECMD serial
COM1@9600<
2011.04.01 23:08:28 5: Loading ./FHEM/66_ECMD.pm
2011.04.01 23:08:28 3: ECMD opening mySerialDevice (protocol serial,
device COM1@9600)
2011.04.01 23:08:28 3: ECMD setting mySerialDevice baudrate to 9600
2011.04.01 23:08:28 3: ECMD device opened
2011.04.01 23:08:28 5: Triggering global (1 changes)
2011.04.01 23:08:28 5: global trigger: Checking Logfile for notify
2011.04.01 23:08:28 5: Cmd: >set mySerialDevice classdef HZCOM1 c:/
fhem-5.0/HZCOM1.classdef<
2011.04.01 23:08:28 5: mySerialDevice: adding new class HZCOM1 from
file c:/fhem-5.0/HZCOM1.classdef
2011.04.01 23:08:28 5: mySerialDevice: evaluating >set on cmd { "3" }<
2011.04.01 23:08:28 5: mySerialDevice: set on defined as { "3" }
2011.04.01 23:08:28 5: mySerialDevice: evaluating >set off cmd { "3 3
off" }<
2011.04.01 23:08:28 5: mySerialDevice: set off defined as { "3 3
off" }
2011.04.01 23:08:28 5: Triggering mySerialDevice (1 changes)
2011.04.01 23:08:28 5: mySerialDevice trigger: Checking Logfile for
notify
2011.04.01 23:08:28 5: Cmd: >define myHZCOM1 ECMDDevice HZCOM1<
2011.04.01 23:08:28 5: Loading ./FHEM/67_ECMDDevice.pm
2011.04.01 23:08:28 5: Triggering global (1 changes)
2011.04.01 23:08:28 5: global trigger: Checking Logfile for notify
2011.04.01 23:08:28 5: Triggering global (1 changes)
2011.04.01 23:08:28 5: global trigger: Checking Logfile for notify
2011.04.01 23:08:28 0: Server started (version =VERS= from =DATE=
($Id: fhem.pl,v 1.136 2011-03-10 17:42:01 rudolfkoenig Exp $), pid
4840)
2011.04.01 23:08:35 4: Connection accepted from FHEMWEB:
217.255.166.49:1641
2011.04.01 23:08:35 5: Loading ./FHEM/98_SVG.pm
2011.04.01 23:08:35 4: HTTP FHEMWEB:217.255.166.49:1641 GET /fhem
2011.04.01 23:08:47 5: CUL/RAW: /K71569166FB

Gruß Mark

Mark

unread,
Apr 2, 2011, 4:47:12 AM4/2/11
to FHEM users
Moin :-)

Das Schalten mit der 3 funktioniert.
Wird ein Leerzeichen gesendet " ", antwortet die Steuerung mit einem
Status,
Sa 10:36 6%
Ts=+51ß Tk=+48ßC@
den ich natürlich gerne in ein Logdatei zur späteren Auswertung
schreiben möchte.
Den filelog habe ich definiert
define FileLog_myHZCOM1 FileLog c:/fhem-5.0/tmp/HZCOM1-%Y.log myHZCOM1

Ein get in die classdef eingefügt
get value cmd {" "}
get value params
das liefert leider keine Ergebnisse.


Vielleicht kann man auch gleich die Antwort der Steuerung
verwenden.
ßC6 = Abwesend ßC5 = Nacht ßC@ = Tag
Ta = Aussentemteratur
Tk = Kesseltemperatur
6% = heutige Laufzeit

Gesendet: "3 "
Antwort:
Sa 10 38 6%
Ta=+16ß Tk=+48ßC6
Gesendet: "3 "
Antwort:
Sa 10:38 6%
Ts=+30ß Tk=+48ßC5
Gesendet: "3 "
Antwort:
Sa 10 38 6%
Ts=+10ß Tk=+48ßC@

Viel Fragen ;-) Freue mich weiter über Tipps und Anregungen.

Sonnige Grüße

Mark

Boris Neubert

unread,
Apr 2, 2011, 12:39:04 PM4/2/11
to fhem-...@googlegroups.com
Hallo,

Am 02.04.2011 10:47, schrieb Mark:
> Ein get in die classdef eingefügt
> get value cmd {" "}
> get value params

Die zweite Zeile ist überflüssig. Bitte weglassen.

> das liefert leider keine Ergebnisse.

In Zeile 596 von 66_ECMD.pm ist ein Tippfehler. Entweder neue
CVS-Version abrufen oder aus "'ecmd" ein "$ecmd" machen. Danach wieder
mit Level 5 debuggen und die Ausschnitte aus dem Log nach den set- und
get-Kommandos zeigen.

> Vielleicht kann man auch gleich die Antwort der Steuerung
> verwenden.

Die sollte als Reading "value" bzw. auch schon bei "on" und "off"
stehen. Bei mir sieht das beispielsweise so aus:


list 3.dz.roll1
Internals:
DEF VeluxRC 3 4 5
IODev AVRNETIO
NAME 3.dz.roll1
NR 9
STATE up: OK;OK;OK;OK
TYPE ECMDDevice
Readings:
2011-04-01 08:28:26 stop OK;OK;OK;OK
2011-04-02 08:00:02 up OK;OK;OK;OK
Down:
TIME 2011-03-30 12:06:27
VAL
Fhem:
classname VeluxRC
Params:
btndown 5
btnstop 4
btnup 3
Attributes:
room 3-DG

Viele Grüße,
Boris

Mark

unread,
Apr 2, 2011, 4:45:43 PM4/2/11
to FHEM users
Hallo Boris,
> mit Level 5 debuggen und die Ausschnitte aus dem Log nach den set-
Windows CMD:
C:\fhem-5.0>fhem min.cfg
Use of uninitialized value $text in concatenation (.) or string at C:
\fhem-5.0\f
hem.pl line 522.
Use of uninitialized value $r[0] in join or string at ./FHEM/
66_ECMD.pm line 600
.
fhem-min.log:
2011.04.02 22:35:51 5: Cmd: >set myHZCOM1 on<
2011.04.02 22:35:51 5: ECMDDevice: Analyze command >{ "3" }<
2011.04.02 22:35:51 5: mySerialDevice sending 3
2011.04.02 22:35:51 5:
2011.04.02 22:35:51 5: Triggering myHZCOM1 (1 changes)
2011.04.02 22:35:51 5: myHZCOM1 trigger: Checking FileLog_myHZCOM1 for
notify
2011.04.02 22:35:51 5: myHZCOM1 trigger: Checking Logfile for notify
2011.04.02 22:35:51 4: ECMDDevice myHZCOM1 on:

> get-Kommandos zeigen.
Windows CMD:
Use of uninitialized value $text in concatenation (.) or string at C:
\fhem-5.0\f
hem.pl line 522.
Use of uninitialized value $r[0] in join or string at ./FHEM/
66_ECMD.pm line 600
.
fhem-min.log:
2011.04.02 22:39:30 5: Cmd: >get myHZCOM1 value<
2011.04.02 22:39:30 5: ECMDDevice: Analyze command >{" "}<
2011.04.02 22:39:30 5: mySerialDevice sending
2011.04.02 22:39:30 5:
2011.04.02 22:39:30 5: Triggering myHZCOM1 (1 changes)
2011.04.02 22:39:30 5: myHZCOM1 trigger: Checking FileLog_myHZCOM1 for
notify
2011.04.02 22:39:30 5: myHZCOM1 trigger: Checking Logfile for notify
2011.04.02 22:39:30 4: ECMDDevice myHZCOM1 value:

Logfile Inhalt:
2011-04-02_22:35:51 myHZCOM1 on:
2011-04-02_22:39:30 myHZCOM1 value:


> Bei mir sieht das beispielsweise so aus:
Bei mir so:
list myHZCOM1
fhem> list myHZCOM1
Internals:
DEF HZCOM1
IODev mySerialDevice
NAME myHZCOM1
NR 7
STATE value:
TYPE ECMDDevice
Readings:
2011-04-02 22:35:51 on
2011-04-02 22:39:30 value
Fhem:
classname HZCOM1
Attributes:

fhem>

Grüße

Mark

Boris Neubert

unread,
Apr 3, 2011, 6:26:18 AM4/3/11
to fhem-...@googlegroups.com
Hallo Mark,


Am 02.04.2011 22:45, schrieb Mark:
> Use of uninitialized value $r[0] in join or string at ./FHEM/
> 66_ECMD.pm line 600

deutet daraufhin, daß ECMD_ReadAnswer keine Antwort liefert.

> fhem-min.log:
> 2011.04.02 22:39:30 5: Cmd: >get myHZCOM1 value<
> 2011.04.02 22:39:30 5: ECMDDevice: Analyze command >{" "}<
> 2011.04.02 22:39:30 5: mySerialDevice sending
> 2011.04.02 22:39:30 5:

Was man in der vorstehenden Zeile auch sieht.

Du mußt ab jetzt selbst debuggen. Die Kommunikation läuft in der Routine
ECMD_Write (66_ECMD.pm, Zeilen 586 bis 601) ab. In Zeile 595 wird das
Kommando (ein Space) an die serielle Schnittstelle geschickt und in
Zeile 596 wird die Antwort ausgelesen. Bau mal ein paar
Debugging-Outputs in der Form Log 1, "DEBUG: ich sende " . $ecmd; usw.
ein. Vielleicht mußt Du auch in ECMD_SimpleWrite und _SimpleRead
reinschauen.

Viele Grüße,
Boris

Mark

unread,
Apr 3, 2011, 2:00:16 PM4/3/11
to FHEM users
Hallo Boris,

> Du mußt ab jetzt selbst debuggen.
Was in meiner Macht liegt habe ich gemacht.

Ergebnis:
Test 1: Dem Terminalprogramm welches den COM1 Port beobachtet habe ich
zusätzlich
die Aufgabe gegeben alle 10ms den Text Antwort zu senden.
get myHZCOM1 Value - Kommt an COM1 an, die Antwort bleibt immer leer.
> deutet daraufhin, daß ECMD_ReadAnswer keine Antwort liefert.
Test 1 bestätigt dies.

Test 2: Ein Perlscript aus dem Internet, welches COM1 Daten mitliest.
Der Text "Antwort" der von dem Terminalprogramm gesendet wird,
wird einwandfrei empfangen.

Weiter eingrenzen kann ich das mit meinen Möglichkeiten / Perl Know
How leider nicht.
Letztendlich kann es nur eine Kleinigkeit bei dem Read Befehl sein.
Theoretisch würde ich jetzt die Zeile 596 in den Read Befehl des
"Logger.pl" Scripts ändern.

Boris, vielleicht kannst Du das mit diesen Informationen umsetzen?

Danke

Gruß Mark

Logger.pl
use strict;
use warnings;
use Win32::SerialPort;

$| = 1;
my ($data, $num);
my $port = Win32::SerialPort->new ('COM1');

$port->databits(8);
$port->baudrate(9600);
$port->parity('none');
$port->stopbits(1);
$port->handshake("rts");

#$port->read_interval(100);
#$port->read_const_time(10);

START:
($num, $data) = $port->read(100);
if ($num > 0) {
print $data;
print "\n";
}

goto START;
$port->close();
undef $port;

Boris Neubert

unread,
Apr 3, 2011, 2:14:30 PM4/3/11
to fhem-...@googlegroups.com
Hallo Mark,

Am 03.04.2011 20:00, schrieb Mark:
>> Du mußt ab jetzt selbst debuggen.
> Was in meiner Macht liegt habe ich gemacht.

Danke für Deine Rückmeldung.

Anpassungen bei dem Modul möchte ich nicht machen, da ich die von Dir
eingesetzte Kombination (Windows + seriellen Port) nicht testen kann.
Den Code habe ich "blind" aus dem CUL-Modul übernommen. Der
Schreiben-Teil funktioniert ja, der Lesen-Teil aber bei Dir nicht.

Ich schlage vor, daß Du einen neuen Thread aufmachst zu dem spezifischen
Problem, daß Dich plagt. Vielleicht gibt es einen anderen Anwender von
EMCD unter Windows auf seriellem Port, der Dir weiterhelfen kann, oder
einen anderen fhem-Entwickler, der sich mit seriellem Port unter Windows
auskennt.

Sorry.
Boris

Mark

unread,
Apr 3, 2011, 2:31:08 PM4/3/11
to FHEM users
Hallo Boris,

vielen Dank für Deine Unterstützung.

Wenn ich weiter gekommen bin melde ich mich gerne wieder.

Schönen Abend noch.

Gruß Mark

Mark

unread,
Apr 3, 2011, 3:42:59 PM4/3/11
to FHEM users
Hallo Boris,

ich habe eine Lösung gefunden :-)
Zeile 596
$answer= ECMD_ReadAnswer($hash, "$ecmd");
geändert in:
$answer= ECMD_SimpleRead($hash);

get myHZCOM1 value liefert dann

value: So 21 39 4%
Ta=+ 6ß Tk=+58ßCD

Nochmal Danke für Deinen Einsatz.

Gruß Mark


TD

unread,
May 18, 2011, 7:32:48 AM5/18/11
to FHEM users
Ich möchte demnächst auch das AVR-Device nutzen.
Ist ein gutes Realis-Modul (Ein: TTL, Aus: Über Relais geschalteter
Ausgang (230 V) bekannt?

Gruß
TD

Dr. Boris Neubert

unread,
May 18, 2011, 11:13:19 AM5/18/11
to fhem-...@googlegroups.com
Am 18.05.2011 13:32, schrieb TD:
> Ich möchte demnächst auch das AVR-Device nutzen.
> Ist ein gutes Realis-Modul (Ein: TTL, Aus: Über Relais geschalteter
> Ausgang (230 V) bekannt?

Pollin hat so was, z.B.
http://www.pollin.de/shop/dt/NTU5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_Relaiskarte_K1.html

AVRNETIO und das Teil koenntest Du aus derselben Spanungsquelle betreiben.

Gruesse,
Boris

TD

unread,
May 18, 2011, 12:32:41 PM5/18/11
to FHEM users
Ja, das sieht prinzipiell gut aus, kann aber nur max. 16 V, 5 A
schalten.
Ich kann nicht abschätzen, wie hoch das Risiko ist, falls man das
mitgelieferte Relais durch ein baugleiches mit Schaltmöglichkeit 230 V
ersetzt.

Gruß
TD

On 18 Mai, 17:13, "Dr. Boris Neubert" <om...@online.de> wrote:
> Am 18.05.2011 13:32, schrieb TD:
>
> > Ich möchte demnächst auch das AVR-Device nutzen.
> > Ist ein gutes Realis-Modul (Ein: TTL, Aus: Über Relais geschalteter
> > Ausgang (230 V) bekannt?
>
> Pollin hat so was, z.B.http://www.pollin.de/shop/dt/NTU5OTgxOTk-/Bausaetze_Module/Bausaetze/...
Reply all
Reply to author
Forward
0 new messages