AVR-NetIO falsche Interpretation

Begonnen von alfonsmoeller, 16 Januar 2015, 13:26:18

Vorheriges Thema - Nächstes Thema

alfonsmoeller


Möchte man die Bedingung eines Ausgangs vom AVR-NetIO abfragen
muß man wie folgt abfragen:

if ( Value("Kontakt1") eq "on error" bzw. "off error"

Leider habe ich dafür einen ganzen Nachmittag gebraucht, bis mir das
aufgefallen ist.

m.f.G. Alfons

Dr. Boris Neubert

Hallo Alfons,

die Antwort vom AVR-NET-IO hängt stark von der Anfrage ab, die ECMD schickt, und der Nachverarbeitung, die man in der Klassendefinition eingibt. Bitte gib uns mehr Kontext, damit wir mit Deiner Nachricht etwas anfangen können.

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

alfonsmoeller

#2
Hallo Boris,
gerne  hier zuerst die Definition:


#NETIO
define NETIO_01 ECMD telnet 192.168.0.90:2701
attr NETIO_01 classdefs ONEWIRE=/opt/fhem/onewire.classdef:RELAIS=/opt/fhem/relais.classdef:RFM12=/opt/fhem/intertechno.classdef:ADC=/opt/fhem/adc.classdef
attr NETIO_01 room 0.00_Raspberry_1

#NETIO Relais
define Kontakt1 ECMDDevice RELAIS 01
attr Kontakt1 eventMap on:on off:off
attr Kontakt1 room AVR-Net-IO
define Kontakt2 ECMDDevice RELAIS 02
attr Kontakt2 eventMap on:on off:off
attr Kontakt2 room AVR-Net-IO
define Kontakt3 ECMDDevice RELAIS 04
attr Kontakt3 eventMap on:on off:off
attr Kontakt3 room AVR-Net-IO
define Kontakt4 ECMDDevice RELAIS 08
attr Kontakt4 eventMap on:on off:off
attr Kontakt4 room AVR-Net-IO
define Kontakt5 ECMDDevice RELAIS 10
attr Kontakt5 eventMap on:on off:off
attr Kontakt5 room AVR-Net-IO
define Kontakt6 ECMDDevice RELAIS 20
attr Kontakt6 eventMap on:on off:off
attr Kontakt6 room AVR-Net-IO
define Kontakt7 ECMDDevice RELAIS 40
attr Kontakt7 eventMap on:on off:off
attr Kontakt7 room AVR-Net-IO
define Kontakt8 ECMDDevice RELAIS 80
attr Kontakt8 eventMap on:on off:off
attr Kontakt8 room AVR-Net-IO

define myADC ECMDDevice ADC 4
attr myADC room Analog
define Analogwert at +*00:10:00 get myADC value
attr Analogwert room Analog



Die Abfrage erfolgt so:

#
# abhängig von Kontakt 1 schalten A Fernbedienung
#
define FB1_KA_ein notify FB1_K1 { if ( Value("Kontakt1") eq "on error" && Value("FB1_K1") eq "on") {fhem("set G1_K1 on;;set G1_K1 on")} }

$edit um 16:55 die "relais.classdef"


# Uebergabeparameter HEX Adresse Port
params RelaisPort
# erst alle Ports PC.. auf Ausgang setzen und dann per Hexcode schalten
set on cmd {"io set ddr 2 ff\nio set port 2 %RelaisPort %RelaisPort"}
set on postproc {s/([OK|;]*)/success/; "$_" eq "success" ? "ok" : "error";}
set off cmd {"io set ddr 2 ff\nio set port 2 00 %RelaisPort"}
set off postproc {s/([OK|;]*)/success/; "$_" eq "success" ? "ok" : "error";}


Als Anhang kommen noch Bild1 und Bild2.
Es funktioniert ja auch alles, nur wenn man state mit "on error" bzw. "off error" abfragt.
m.f.G. Alfons

Dr. Boris Neubert

Hallo,

ich habe gerade mal bei mir nachgesehen. Ich schließe die einzelnen Kommandos an den AVR-NET-IO mit \n ab und trenne sie mit \000 voneinander. Beispiel mit vier Kommandos:

set up cmd {"io set ddr 2 ff\n\000io set port 2 1%btnup\n\000wait 1000\n\000io set port 2 00\n"}
set up expect ".+"
set up postproc { s/^OK\nOK\nOK\nOK\n$/up/; "$_" eq "up" ? undef : "error"; }


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

Maxl

Hallo,

nur zum Verständnis, leider habe ich noch nicht viel Ahnung von FHEM und Perl.
Wenn ich also die Ausgänge abfragen will ob sie ein oder aus sind benutze ich
Zitatif ( Value("Kontakt1") eq "on error" bzw. "off error"
oder ist dies doch eher falsch? Wo finde ich eigentlich die Dokumentation wie man "classdef"-Files schreibt, bin leider noch nicht fündig geworden.

Danke
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Dr. Boris Neubert

Zitat von: Maxl am 18 Januar 2015, 21:27:29
Wenn ich also die Ausgänge abfragen will ob sie ein oder aus sind benutze ich oder ist dies doch eher falsch?

Wie oben bereits geschrieben: es hängt davon ab, wie Deine Klassendefinition aussieht. Da ich nicht weiß, worauf Du Dich beziehst, kann ich Dir keine Antwort geben.

Ohne ein gewisses Maß an Perl-Kenntnissen wirst Du beim ECMD-Gerät große Schwierigkeiten haben. Du solltest mindestens verstehen, wie die von mir zwei Posts vorher gezeigte postproc funktioniert.

Zitat
Wo finde ich eigentlich die Dokumentation wie man "classdef"-Files schreibt, bin leider noch nicht fündig geworden.

In der commandref.

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

Maxl

Hallo,

als Beispiel, evtl. verstehe ich es dann:

Zitatset up cmd {"io set ddr 2 ff\n\000io set port 2 1%btnup\n\000wait 1000\n\000io set port 2 00\n"}
müßte dieses Kommando sein: set <commandname> cmd { <perl special> }
Was bedeutet der <commandname> --> up
Ist dies der String welcher über Telnet versendet wird "io set ddr 2 ff\n\000io set port 2 1%btnup\n\000wait 1000\n\000io set port 2 00\n"

Gruß
Maxl

FHEM auf Raspberry mit HM, HMC und AVR Netios.