FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: Florian_GT am 11 April 2015, 15:22:55

Titel: ECMD / Ethersex PIN
Beitrag von: Florian_GT am 11 April 2015, 15:22:55
Hallo zusammen,

ich versuche mich gerade als einsteiger am Fhem mit Ethersex.
Ich möchte gerne einen PIN an von Ethersex schalten und auch (sollte dieser durch eine andere Applikation verändert werden) abfragen.

Ich habe mir dabei die nachfolgende Konfiguration erstellt:

define NETIO_03 ECMD telnet 192.168.0.43:2701
attr NETIO_03 classdefs pin=/fhem/trunk/fhem/pin.classdef
attr NETIO_03 logTraffic 5

define pin ECMDDevice pin output1
attr pin IODev NETIO_03
attr pin room Test
attr pin verbose 5
define FileLog_pin FileLog ./log/fhem-%Y-%m.log pin
attr FileLog_pin logtype text


pin.classdef:
# Uebergabeparameter
params channel

# Umsetzung in ECMD Befehle
set on cmd {"pin set %channel on\n"}
set on expect "(on|off)\n"
#set on postproc {s/on\n/success/; "$_" eq "success" ? "" : "error";}
set on postproc {
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}

set off cmd {"pin set %channel off\n"}
set off expect "(on|off)\n"
#set off postproc {s/off\n/success/; "$_" eq "success" ? "" : "error";}
set off postproc {
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}


get getdata cmd {"pin get %channel\n"}
get getdata expect "(on|off)\n"
get getdata postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
readingsSingleUpdate($hash, "state", $status, 1);\
\
}


Ich habe ein Problem mit dem Status, der in "STATE" wiedergegeben wird.

Wenn ich

#set off postproc {s/off\n/success/; "$_" eq "success" ? "" : "error";}

verwende, dann steht nach einem erfolgreichen set on/off in STATE ein on oder off drin.
Fhem erkennt das Objekt dann auch als ein Schalter an, zeigt die Lampe, man kann ein und ausschalten.
Ich möchte hier gerne den Status richtig rein schreiben können.

Ich möchte zusätzlich mit getdata den Status auslesen und in STATE schreiben.
Wenn ich das versuche, schreibt er jedoch immer "getdata: on" oder "getdata: off" in die STATE variable.
Dann erkennt er das Objekt nicht mehr als Schalter an.

Ich habe dann versucht, das ganze in Variable status zu schreiben, um zu schauen ob er das anerkennt.

Wie kann man das denn gescheit und sauber lösen?
Titel: Antw:ECMD / Ethersex PIN
Beitrag von: Dr. Boris Neubert am 11 April 2015, 15:28:08
Hallo,

versuche es bitte mal mit stateFormat.

Grüße
Boris
Titel: Antw:ECMD / Ethersex PIN
Beitrag von: Florian_GT am 11 April 2015, 15:59:31
Hallo Boris,

vielen Dank das hat mir schon sehr geholfen. Ich habe nun mittels
attr pin stateFormat { sprintf("%s", ReadingsVal("pin","status",0)) ;; }
immer den richtigen Status aus der Variable "status" im Frontend.

Bei dem set on oder off findet jedoch irgendwie noch kein Postprocessing statt.

getdata:

2015.04.11 15:51:22 5: Postprocessing "on\n" with perl command { s/(.*)\n/$1/; my $hash  = $defs{pin}; my $status = $1;  readingsSingleUpdate($hash, "status", $status, 1); }.
2015-04-11_15:51:22 pin status: on
2015.04.11 15:51:22 5: Postprocessed value is "status: on".
2015-04-11_15:51:22 pin getdata: status: on
2015-04-11_15:51:22 pin getdata status: on


off:

2015.04.11 15:55:25 5: ECMDDevice: Analyze command >{"pin set output1 off\n"}<
2015-04-11_15:55:25 pin off: off

2015-04-11_15:55:25 pin off off



on:

2015.04.11 15:55:44 5: ECMDDevice: Analyze command >{"pin set output1 on\n"}<
2015-04-11_15:55:44 pin on: on

2015-04-11_15:55:44 pin on on



Hast du da noch einen Tipp für mich?
Titel: Antw:ECMD / Ethersex PIN
Beitrag von: Dr. Boris Neubert am 11 April 2015, 16:01:49
Hinter der ersten Zeile der postproc-Direktive fehlt ein Backslash.

Bekommst Du dafür kein Gemecker im Log?

Grüße
Boris
Titel: Antw:ECMD / Ethersex PIN
Beitrag von: Florian_GT am 11 April 2015, 16:07:09
Den Fehler habe ich schon gesehen und behoben.

# Uebergabeparameter
params channel

# Umsetzung in ECMD Befehle
set on cmd {"pin set %channel on\n"}
set on expect "(on|off)\n"
get on postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}

set off cmd {"pin set %channel off\n"}
set off expect "(on|off)\n"
get off postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}


get getdata cmd {"pin get %channel\n"}
get getdata expect "(on|off)\n"
get getdata postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}


ein Postprocessing findet allerdings immer noch nicht statt.
Titel: Antw:ECMD / Ethersex PIN
Beitrag von: Dr. Boris Neubert am 11 April 2015, 16:17:00
Es muss

set on postproc ...
set off postproc ...

heißen.

Viele Grüße
Boris
Titel: Antw:ECMD / Ethersex PIN
Beitrag von: Florian_GT am 11 April 2015, 16:21:36
hasst du das "AAAAAAAAAACH FUCK" gehört?

Manchmal sieht man den Wald vor lauter Bäumn nicht... ;)

Vielen Dank!