[gelöst] AVR Net IO Ethersex und die digitalen Eingänge

Begonnen von noice, 10 Juli 2014, 22:03:17

Vorheriges Thema - Nächstes Thema

noice

Ich spiele gerade wieder mal mit meinem AVR von Pollin.

nur habe ich die K8 Addon Karte dran und würde gern testweise ein Fenster überwachen (magnetkontakt)
nun finde ich aber leider in der Wiki keine classdef für die digitalen Eingänge.

meine momentane zusammengesuchte classdef sieht so aus:
get ip01 cmd {"io set ddr 0 F0\nio get pin 0"}
get ip01 postproc {\
my $retval = "closed";\
my $ipwert=substr($_, 13, 2);\
   $ipwert = hex($ipwert) & 0x01;\
$retval = "open" if ($ipwert > 0);\
\
$retval;\
}



get ip02 cmd {"io set ddr 0 F0\nio get pin 0"}
get ip02 postproc {\
my $retval = "closed";\
my $ipwert2=substr($_, 13, 2);\
   $ipwert2 = hex($ipwert2) & 0x02;\
$retval = "open" if ($ipwert2 > 0);\
\
$retval;\
}

get ip03 cmd {"io set ddr 0 F0\nio get pin 0"}
get ip03 postproc {\
my $retval = "closed";\
my $ipwert3=substr($_, 13, 2);\
   $ipwert3 = hex($ipwert3) & 0x04;\
$retval = "open" if ($ipwert3 > 0);\
\
$retval;\
}

get ip04 cmd {"io set ddr 0 F0\nio get pin 0"}
get ip04 postproc {\
my $retval = "closed";\
my $ipwert4=substr($_, 13, 2);\
   $ipwert4 = hex($ipwert4) & 0x08;\
$retval = "open" if ($ipwert4 > 0);\
\
$retval;\
}


die dazugehörige Define :
define k_tuer1 ECMDDevice CONTACT

nun bekomm ich aber bei get ip01 keinen Wert geliefert...

woran kann es liegen?
BananaPI, RaspberryPi+AddonBoard,HMLAN,  miniCUL 433,nanoCUL 433,nanoCUL868,FHEMduino 433, Jeelink clone diverse Homematic, FS20, MAX, TFA und IT Komponenten.
10" Tablet mit andFhem, Daitem D14000

Dr. Boris Neubert

Ich würde die beiden E6-Kommandos mit \000 statt \n voneinander trennen.

Keine weitere Hilfe ohne detaillierte Traffic Logs.

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

noice

im log bekomm ich folgendes (wird aller 2 Minuten abgefragt)

2014.07.10 23:00:35 0: NETIO: write "io set ddr 0 F0\nio get pin 0"
2014.07.10 23:00:35 3: k_tuer1_check: ip01
2014.07.10 23:00:35 0: NETIO: read "OK\n"
2014.07.10 23:00:35 2: autocreate: define ECMDDevice message OK
2014.07.10 23:00:35 1: ERROR: Unknown module message


meintest du das?
BananaPI, RaspberryPi+AddonBoard,HMLAN,  miniCUL 433,nanoCUL 433,nanoCUL868,FHEMduino 433, Jeelink clone diverse Homematic, FS20, MAX, TFA und IT Komponenten.
10" Tablet mit andFhem, Daitem D14000

Dr. Boris Neubert

ja, und bitte schalte noch logTraffic dazu und dreh das Logging auf Anschlag (verbose 5).

Ersetze das \n in der Mitte durch \000\n und hänge am Ende ein \n an.

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

noice

hallo .. so nun hab ich wieder zeit gefunden.

soweit bekomm ich schon mal den status nur ändert er sich nicht .. leider:
Logfile:
2014.07.14 20:27:42 5: NETIO: command split into 2 parts.
2014.07.14 20:27:42 5: NETIO: sending command "io set ddr 0 F0"
2014.07.14 20:27:42 0: NETIO: write "io set ddr 0 F0"
2014.07.14 20:27:42 5: SW: 696f20736574206464722030204630
2014.07.14 20:27:42 5: NETIO: sending command "\nio get pin 0"
2014.07.14 20:27:42 0: NETIO: write "\nio get pin 0"
2014.07.14 20:27:42 5: SW: 0a696f206765742070696e2030
2014.07.14 20:27:42 0: NETIO: read "OK\n"
2014.07.14 20:27:42 5: NETIO: Spontaneously received "OK\n"
2014.07.14 20:27:42 5: NETIO dispatch OK

2014.07.14 20:27:42 1: ERROR: Unknown module message


den code hab ich so angepass:
get ip01 cmd {"io set ddr 0 F0\000\nio get pin 0"}
get ip01 postproc {\
my $retval = "closed";\
my $ipwert=substr($_, 13, 2);\
   $ipwert = hex($ipwert) & 0x01;\
$retval = "open" if ($ipwert > 0);\
\
$retval;\
}



get ip02 cmd {"io set ddr 0 F0\000io get pin 0"}
get ip02 postproc {\
my $retval = "closed";\
my $ipwert2=substr($_, 13, 2);\
   $ipwert2 = hex($ipwert2) & 0x02;\
$retval = "open" if ($ipwert2 > 0);\
\
$retval;\
}

get ip03 cmd {"io set ddr 0 F0\000\nio get pin 0"}
get ip03 postproc {\
my $retval = "closed";\
my $ipwert3=substr($_, 13, 2);\
   $ipwert3 = hex($ipwert3) & 0x04;\
$retval = "open" if ($ipwert3 > 0);\
\
$retval;\
}

get ip04 cmd {"io set ddr 0 F0\000\nio get pin 0"}
get ip04 postproc {\
my $retval = "closed";\
my $ipwert4=substr($_, 13, 2);\
   $ipwert4 = hex($ipwert4) & 0x08;\
$retval = "open" if ($ipwert4 > 0);\
\
$retval;\
}
BananaPI, RaspberryPi+AddonBoard,HMLAN,  miniCUL 433,nanoCUL 433,nanoCUL868,FHEMduino 433, Jeelink clone diverse Homematic, FS20, MAX, TFA und IT Komponenten.
10" Tablet mit andFhem, Daitem D14000

Dr. Boris Neubert

Hallo,

probiere mal diesen hier:


get ip01 cmd {"io set ddr 0 F0\n\000io get pin 0\n"}


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

noice

Hi Boris,
danke für deine Hilfe.
Leider immernoch ohne Erfolg:

get ip01 cmd {"io set ddr 0 F0\n\000io get pin 0\n"}
get ip01 postproc {\
my $retval = "closed";\
my $ipwert=substr($_, 13, 2);\
   $ipwert = hex($ipwert) & 0x01;\
$retval = "open" if ($ipwert > 0);\
\
$retval;\
}



get ip02 cmd {"io set ddr 0 F0\n\000io get pin 0\n"}
get ip02 postproc {\
my $retval = "closed";\
my $ipwert2=substr($_, 13, 2);\
   $ipwert2 = hex($ipwert2) & 0x02;\
$retval = "open" if ($ipwert2 > 0);\
\
$retval;\
}

get ip03 cmd {"io set ddr 0 F0\n\000io get pin 0\n"}
get ip03 postproc {\
my $retval = "closed";\
my $ipwert3=substr($_, 13, 2);\
   $ipwert3 = hex($ipwert3) & 0x04;\
$retval = "open" if ($ipwert3 > 0);\
\
$retval;\
}

get ip04 cmd {"io set ddr 0 F0\n\000io get pin 0\n"}
get ip04 postproc {\
my $retval = "closed";\
my $ipwert4=substr($_, 13, 2);\
   $ipwert4 = hex($ipwert4) & 0x08;\
$retval = "open" if ($ipwert4 > 0);\
\
$retval;\
}



Log:

2014.07.15 19:25:59 5: NETIO: command split into 2 parts.
2014.07.15 19:25:59 5: NETIO: sending command "io set ddr 0 F0\n"
2014.07.15 19:25:59 0: NETIO: write "io set ddr 0 F0\n"
2014.07.15 19:25:59 5: SW: 696f207365742064647220302046300a
2014.07.15 19:25:59 5: NETIO: sending command "io get pin 0\n"
2014.07.15 19:25:59 0: NETIO: write "io get pin 0\n"
2014.07.15 19:25:59 5: SW: 696f206765742070696e20300a
2014.07.15 19:25:59 0: NETIO: read "OK\n"
2014.07.15 19:25:59 5: NETIO: Spontaneously received "OK\n"
2014.07.15 19:25:59 5: NETIO dispatch OK

2014.07.15 19:25:59 1: ERROR: Unknown module message
2014.07.15 19:25:59 0: NETIO: read "port 0: 0x0f\n"
2014.07.15 19:25:59 5: NETIO: Spontaneously received "port 0: 0x0f\n"
2014.07.15 19:25:59 5: NETIO dispatch port 0: 0x0f

2014.07.15 19:25:59 1: ERROR: Unknown module message


Am Screenshot ist relais 2 mit eingang 1 verbunden zum testen


BananaPI, RaspberryPi+AddonBoard,HMLAN,  miniCUL 433,nanoCUL 433,nanoCUL868,FHEMduino 433, Jeelink clone diverse Homematic, FS20, MAX, TFA und IT Komponenten.
10" Tablet mit andFhem, Daitem D14000

Dr. Boris Neubert

Hallo,

Dir fehlt noch das expect ".*", das die Ergebnisse auswertet. Soweit ich das erkennen kann, wird auf das erste Kommando "OK\n" und auf das zweite Kommando "port 0: 0x0f\n" geliefert.

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

noice

Ich wenn mich auskennen würde wüsste ich jetzt gleich was du meinst. :-[

Gesendet von meinem HTC One X mit Tapatalk

BananaPI, RaspberryPi+AddonBoard,HMLAN,  miniCUL 433,nanoCUL 433,nanoCUL868,FHEMduino 433, Jeelink clone diverse Homematic, FS20, MAX, TFA und IT Komponenten.
10" Tablet mit andFhem, Daitem D14000

Dr. Boris Neubert

Da hilft dann nur das Studium der CommandRef und der Wiki-Artikel http://www.fhemwiki.de/wiki/AVR-NET-IO...

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

noice

Hallo Boris,

also erstmal danke für den tip ... hätt ich auch selbst drauf kommen können  ::)

hab das alles jetzt umgebaut... mit der classdef aus dem wiki

da ja der Digitale Eingang auch Werte wie der Analoge liefert lässt sich damit das gleiche erreichen.

nun macht er auch eine minütliche Abfrage ..


Kann ich den wert der mir in Fehm angezeigt wird auch als Status anzeigen lassen ? Also statt valve 0 oder 100 eher Open oder close


BananaPI, RaspberryPi+AddonBoard,HMLAN,  miniCUL 433,nanoCUL 433,nanoCUL868,FHEMduino 433, Jeelink clone diverse Homematic, FS20, MAX, TFA und IT Komponenten.
10" Tablet mit andFhem, Daitem D14000

noice

so alles soweit prima.. einziges problem: ich bekomm jede minute nen log eintrag:
2014.09.11 22:40:35 0: NETIO: write "adc get 0\n", expect .*
2014.09.11 22:40:35 0: NETIO: read "3FF \n"
2014.09.11 22:40:35 0: NETIO: write "adc get 1\n", expect .*
2014.09.11 22:40:35 0: NETIO: read "3FF \n"
2014.09.11 22:40:35 0: NETIO: write "adc get 2\n", expect .*
2014.09.11 22:40:35 0: NETIO: read "3FF \n"
2014.09.11 22:40:35 0: NETIO: write "adc get 3\n", expect .*
2014.09.11 22:40:35 0: NETIO: read "3FF \n"


Classdef:
# Uebergabeparameter Portnummer des internen Analogeingangs
params PortID
# Umsetzung in ECMD Befehle
# value = Rückgabewert in 0-100%, je nach eingestelltem Referenzwert im Attribut "Referenz"
#  Gleichzeitig wird das Reading "status" gesetzt, je nach eingestelltem Schwellwert
#  status = on => gemessener Wert liegt unter dem Schwellwert
#  status = off => gemessener Wert liegt über dem Schwellwert
# portvalue = originaler Rückgabewert des NET-IO in Dec umgerechnet um einen Referenzwert ermitteln zu können
get value cmd {"adc get %PortID\n"}
get value expect ".*"
get value postproc {\
my $hexval = hex(trim("$_"));\
my $refval = trim(AttrVal("%NAME","referenz",1024));\
my $retval = $hexval*100/$refval;\
my $hash  = $defs{%NAME};\
my $status = "off";\
my $schwellwert = trim(AttrVal("%NAME","schwellwert",30));\
\
$status = "on" if ($retval < $schwellwert);\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
$retval;\
}
get portvalue cmd {"adc get %PortID\n"}
get portvalue expect ".*"
get portvalue postproc {hex(trim("$_"))}

und die Fehm def:
define ECMD_Eingang_02 ECMDDevice CONTACT 1
attr ECMD_Eingang_02 IODev NETIO
attr ECMD_Eingang_02 event-on-change-reading status
attr ECMD_Eingang_02 referenz 1023
attr ECMD_Eingang_02 room Keller
attr ECMD_Eingang_02 schwellwert 50
attr ECMD_Eingang_02 verbose 0
define ECMD_Eingang_03 ECMDDevice CONTACT 2
attr ECMD_Eingang_03 IODev NETIO
attr ECMD_Eingang_03 event-on-change-reading status
attr ECMD_Eingang_03 referenz 1023
attr ECMD_Eingang_03 room Keller
attr ECMD_Eingang_03 schwellwert 50
attr ECMD_Eingang_03 verbose 0
define ECMD_Eingang_04 ECMDDevice CONTACT 3
attr ECMD_Eingang_04 IODev NETIO
attr ECMD_Eingang_04 event-on-change-reading status
attr ECMD_Eingang_04 referenz 1023
attr ECMD_Eingang_04 room Keller
attr ECMD_Eingang_04 schwellwert 50
attr ECMD_Eingang_04 verbose 0
define ECMD_Eingang_01 ECMDDevice CONTACT 0
attr ECMD_Eingang_01 IODev NETIO
attr ECMD_Eingang_01 event-on-change-reading status
attr ECMD_Eingang_01 referenz 1023
attr ECMD_Eingang_01 room Keller
attr ECMD_Eingang_01 schwellwert 50
attr ECMD_Eingang_01 verbose 0
define ECMD_Eingang_Abfrage at +*00:01 get ECMD_Eingang_01,ECMD_Eingang_02,ECMD_Eingang_03,ECMD_Eingang_04 value
attr ECMD_Eingang_Abfrage room Keller
attr ECMD_Eingang_Abfrage verbose 0
define Testeingang readingsGroup (ECMD_Eingang_01|ECMD_Eingang_02|ECMD_Eingang_03|ECMD_Eingang_04):(status|status|status|status).*
attr Testeingang room Keller


Wie bekomm ich die einträge weg ?

Danke da Noice
BananaPI, RaspberryPi+AddonBoard,HMLAN,  miniCUL 433,nanoCUL 433,nanoCUL868,FHEMduino 433, Jeelink clone diverse Homematic, FS20, MAX, TFA und IT Komponenten.
10" Tablet mit andFhem, Daitem D14000

Dr. Boris Neubert

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

noice

also das geht ja nur auf dem ECMD device oder?
define NETIO ECMD telnet 192.168.0.92:2701
attr NETIO classdefs RELAIS=relais.classdef:CONTACT=fhem.classdef.netio.adc
attr NETIO logTraffic 0
attr NETIO room Keller
attr NETIO verbose 0


und da ist er ausgeschalten ... oder muss ich das auf jedem Device machen?

Noice
BananaPI, RaspberryPi+AddonBoard,HMLAN,  miniCUL 433,nanoCUL 433,nanoCUL868,FHEMduino 433, Jeelink clone diverse Homematic, FS20, MAX, TFA und IT Komponenten.
10" Tablet mit andFhem, Daitem D14000

Dr. Boris Neubert

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