Komplett überarbeitetes ECMD und ECMDDevice vom 16.3.2014

Begonnen von kpwg, 20 März 2014, 20:40:17

Vorheriges Thema - Nächstes Thema

Dr. Boris Neubert

Zitat von: Tom_S am 17 April 2014, 10:45:58
Weist du wo und warum der Matchstring auf 52 Zeichen begrenzt ist?

Ich weiß nicht, wo das herkommen sollte.

Wie kommst Du darauf, daß der Matchstring (Du meinst das, was in der classdef hinter match steht?) in der Länge begrenzt sei?

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

Tom_S

#76
hallo Boris,

nein das meine ich nicht. Ich meine das was der Controller auf einmal ausgeben darf, damit es nicht abgeschnitten wird.

Zitat
2014.04.16 08:59:52 3: NETIO91: read "port 0 0 0\nport 0 1 1\nport 0 2 1\nport 0 3 1\nport"
2014.04.16 08:59:52 3: NETIO91: read " 2 2 1\n"
2014.04.16 08:59:52 2: autocreate: define ECMDDevice message  2 2 1
2014.04.16 08:59:52 1: ERROR: Unknown module message

es muss am Modul liegen, dass da irgend wann abgeschnitten wird. Nach 52 Zeichen ist Schluss.

schöne Ostern
Tom_S

PS: kann natürlich auch am DevIO liegen
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

Tom_S

noch eins, gerade gemerkt

Zitat
2014.04.18 17:41:49 1: 192.168.115.91:23 disconnected, waiting to reappear

ein manuelles "reopen" löst das Problem.
Lässt sich das automatisieren (ohne Notify) also direkt im Modul?
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

ext23

Guten Morgen,

ich hab dann heute auch das Update bekommen. Hat einer den Bodenfeuchtesensor http://www.fhemwiki.de/wiki/AVR-NET-IO am Start? Ich bekomme nur noch Value 0. Aber da hat sich vermutlich ein Rückgabewert geändert, das bekomme ich auch selber raus.

Aber bei meinem DIn bekomme ich folgende Fehler:

2014.04.19 09:42:30 3: Timer_ba_Wassertonne: status Can't use global @@ in "my" at (eval 474) line 1, near "my @@"
syntax error at (eval 474) line 1, near "@@fullport "
Can't use global @@ in "my" at (eval 474) line 1, near "my @@"
syntax error at (eval 474) line 1, near "@@hexport "
Global symbol "@fullport" requires explicit package name at (eval 474) line 1.
Global symbol "@hexport" requires explicit package name at (eval 474) line 1.
Can't use global @@ in "my" at (eval 474) line 1, near "my @@"
syntax error at (eval 474) line 1, near "@@pinarray "
Can't use global %% in "my" at (eval 474) line 1, near "my %%"
syntax error at (eval 474) line 1, near "%%hash "
(eval 474) has too many errors.

# Uebergabeparameter HEX Adresse Port
params IOPort IOPin

get status cmd {"io get pin %IOPort"}
get status postproc {\
my @@fullport = split(/ /,trim($_));\
my @@hexport = split(/x/,$fullport[2]);\
my $binport = sprintf( "%%b", hex( $hexport[1] ) );\
my $binlength = length($binport);\
while ($binlength < 8){\
  $binport = "0".$binport;\
  $binlength = length($binport);\
}\
my @@pinarray = split('',$binport);\
my %%hash = (\
  1 => '7',\
  2 => '6',\
  3 => '5',\
  4 => '4',\
  5 => '3',\
  6 => '2',\
  7 => '1',\
  8 => '0',\
);\
my $pinvalue = $pinarray[$hash{%IOPin}];\
$pinvalue;\
}

HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

Dr. Boris Neubert

Hallo,

mach mal alle Doppelungen von @ und % weg. Diese Specials in ECMD sind abgeklemmt, weil sie störend sind und das Verständnis enorm erschweren.

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

Dr. Boris Neubert

Zitat von: Tom_S am 18 April 2014, 23:14:05
Lässt sich das automatisieren (ohne Notify) also direkt im Modul?

Eine der Neuerungen im Modul ist, daß es sich automatisch wiederverbindet. Wenn das auch scheitert, wird das Device jedoch abgeklemmt.

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

Dr. Boris Neubert

Zitat von: Tom_S am 18 April 2014, 20:54:37
PS: kann natürlich auch am DevIO liegen

Weder noch. Wenn der Sende- oder Empfangspuffer voll ist, werden die Daten aus DevIO an die Anwendung (FHEM) und von da weiter an ECMD geschickt. Die Daten kommen einfach stückweise an.

Eine Möglichkeit wäre es, PARTIAL in ECMD zu implementieren, und erst dann die empfangenen Daten Verarbeitung anzustellen, wenn es einen kompletten Match gibt (oder eine Wartezeit überschritten ist). Das ist aber fummelig und ich habe dazu erstmal keine Lust.

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

kpwg

Ich weiß jetzt nicht, was sich von der letzten Testversion zum gestrigen Update geändert hat, aber es funktioniert so Einiges nicht mehr.

Die rfm12_2272 classdef:
params byte1 byte2 byte3
set on cmd {"rfm12 2272 %byte1,%byte2,".sprintf(1+%byte3)." 76 10\n"}
set on expect "OK\n"
set on postproc {s/OK\n//; $_;}
set off cmd {"rfm12 2272 %byte1,%byte2,".sprintf(0+%byte3)." 76 10\n"}
set off expect "OK\n"
set off postproc {s/OK\n//; $_;}


Mit s/OK\n//; $_; konnte ich das OK "entsorgen", nun kommt statt dem gewollt leeren Reading eine "0", die ich nicht brauche. Wo bekomme ich die wieder weg? Frickeln am Modul ist für mich keine Lösung!

ext23

Bah ich bin ein Depp. Ich hatte mein Server neu aufgesetzt und in dem neuen FHEM Paket hat sich die Verzeichnisstruktur verändert. Früher hatte ich immer alles unter /etc/fhem (Wo es ja auch hin gehört oO) und mit symbolischen links habe ich das nach /usr/share/fhem geschoben. Naja wie dem auch seit, ich hab die falschen Dateien bearbeitet, durch mein Restore waren die doppelt da :-)

Also Temp funktioniert schon mal, und das andere bekomme ich sicher auch noch hin.

Gruß und FROHE OSTERN!!!
Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

Tom_S

@kpwg

Zitat
Mit s/OK\n//; $_; konnte ich das OK "entsorgen", nun kommt statt dem gewollt leeren Reading eine "0", die ich nicht brauche. Wo bekomme ich die wieder weg?

liegt an der postproc. du kannst einfach

set on postproc {""}

einfügen, dann kommt nichts zurück, oder den String auswerten und gegen "" ersetzen.

@Boris
Zitat
Weder noch. Wenn der Sende- oder Empfangspuffer voll ist, werden die Daten aus DevIO an die Anwendung (FHEM) und von da weiter an ECMD geschickt.
dann muss es an DevIO liegen. Mit der alten Version hat es funktioniert. Ich habe am Controller nichts verändert. Werde jetzt erst mal den String begrenzen.

Tom_S
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

kpwg

Zitat von: Tom_S am 19 April 2014, 17:03:28
@kpwg

liegt an der postproc. du kannst einfach

set on postproc {""}

einfügen, dann kommt nichts zurück, oder den String auswerten und gegen "" ersetzen.

Das funktioniert leider nicht. es kommt dann nichts (mehr) zurück, war auch kein state ändert.

Wenn ich dagegen
set on postproc {s/OK\n/on/; $_;}
und
set off postproc {s/OK\n/off/; $_;}
schreibe, erhalte ich "on on" und "off off" als state zurück, was erst wieder per Workarround wie beim alten Modul behebbar ist.
Ich teste mal weiter und berichte!

Viele Grüße, Ricardo


ext23

Moin,

hat sich an den Rückgabewerten von den Digitaleingängen etwas geändert? Ich bekomme jetzt anstelle von 0/1 ein b zurück?

Gruß
Daniel
HM, KNX, FS20, 1-Wire, PanStamp, AVR-NET-IO, EM1000EM, PCA301, EC3000, HM-LAN, CUL868, RFXtrx433, LGW, DMX @Ubuntu-Server (Hauptsystem) & Raspberry Pi (Satellit)

kpwg

Nabend,

ich bin jetzt ein wenig ratlos, wie ich die readings und state hin bekomme. Ich möchte gerne "on" und "off" als state haben. Die Readings sind an der Stelle erst mal egal.

Wenn ich mit set off postproc {s/OK\n//; $_ } zum Beispiel ausschalten möchte, erhalte ich keine Rückmeldung mehr, da ich mir die ja komplett entferne. Bisher wurde hier noch das leere Reading als state übernommen, was wunderbar funktionierte.

Was schreibe ich nun rein, um einerseits einen Rückgabe auszulösen, anderseits aber "nichts" zusätzlich zurück zu bekommen?
Habe zB \000, \n und Anderes probiert- funktioniert nicht. Gibts eine Idee?

Viele Grüße, Ricardo

Dr. Boris Neubert

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

kpwg

Zitat von: Dr. Boris Neubert am 20 April 2014, 21:36:16
stateformat?
bn
Vielleicht eine Lösung (muss ich morgen lesen), aber nur ein Workarround, denn es wäre dann für jedes Device nötig. Erinnert stark an die alte Lösung mit devStateIcon. Funktioniert, ist aber nicht schön :)