ECMD / Ethersex PIN

Begonnen von Florian_GT, 11 April 2015, 15:22:55

Vorheriges Thema - Nächstes Thema

Florian_GT

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?
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

Dr. Boris Neubert

Hallo,

versuche es bitte mal mit stateFormat.

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

Florian_GT

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?
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

Dr. Boris Neubert

Hinter der ersten Zeile der postproc-Direktive fehlt ein Backslash.

Bekommst Du dafür kein Gemecker im Log?

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

Florian_GT

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.
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

Dr. Boris Neubert

Es muss

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

heißen.

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

Florian_GT

hasst du das "AAAAAAAAAACH FUCK" gehört?

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

Vielen Dank!
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)