[gelöst] NETIO analog Werte erfassen, bearbeiten und speichern

Begonnen von Maxl, 16 Januar 2015, 17:27:41

Vorheriges Thema - Nächstes Thema

Maxl

Hallo,

versuche schon seit langem aus dem NETIO analog Werte einzulesen und umzurechenn und anschliessend zu speichern. Es will mitr aber nicht gelingen. Das Einlesen läuft wie beschrieben, doch wie kann man diese dann einer Funktion übergeben und dann in ein File speichern.

Meine ersten Versuche unter FHEM Perl schauen so aus, Fehler bekomme ich keine, Werte aber auch nicht, diese werden nur im EventMonitor angezeigt bzw. auf der "Everything-Seite".

define Messung_adc at +*00:01 get MP_0 portvalue;;
attr Messung_adc verbose 0


Das File wurde angelegt, jedoch ohne Werte. ich dachte mit get werden die Daten geholt und in portvalue gespeichert.

# log Temp to database
define TempLog FileLog ./log/temp-%d-%m.log portvalue #{ CalcTemp(portvalue) }


Ein Versuch zum Umrechnen hätte ich in einer Funktion in meine 99_myUTILS.pm hinterlegt

sub CalcTemp($) {
  my ($Data) = @_;

  $Data=$Data+1;
  return($Data);
}


Gruß
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Dr. Boris Neubert

Hallo,

das ist zu wenig Kontext, um Dir helfen zu können. Bitte den angehefteten Beitrag http://forum.fhem.de/index.php/topic,25748.0.html beachten.

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

Maxl

Hallo,

hoffe nun alles beisammen zu haben:

hier die Definition des AVR NETIOs:

define NETIO1 ECMD telnet 192.168.1.98:2701
attr NETIO1 classdefs ONEWIRE=/opt/fhem/onewire.classdef:RELAIS=/opt/fhem/relais.classdef:RFM12=/opt/fhem/intertechno.classdef:ADC=/opt/fhem/netioadc.classdef
#attr NETIO1 eventMap /on:Activ/off:Inactiv/
attr NETIO1 room Interfaces

define MP_0 ECMDDevice ADC 4
attr MP_0 IODev NETIO1


und ein Auszug aus dem Log File:

2015.01.16 19:59:49 4: HTTP FHEMWEB:192.168.1.20:61414 GET /fhem?XHR=1&inform=type=status;filter=;since=1421434787;fmt=JSON×tamp=1421434785379
2015.01.16 19:59:51 4: Connection closed for FHEMWEB:192.168.1.20:61414: EOF
2015.01.16 19:59:51 4: Connection accepted from FHEMWEB:192.168.1.20:61417
2015.01.16 19:59:51 4: HTTP FHEMWEB:192.168.1.20:61417 GET /fhem?cmd=style%20edit%20fhem.cfg
2015.01.16 19:59:51 4: 5452:FHEMWEB:192.168.1.20:61417: /fhem?cmd=style%20edit%20fhem.cfg / RL:2235 / text/html; charset=UTF-8 / Content-Encoding: gzip
/

2015.01.16 19:54:29 5: Cmd: >get MP_0 portvalue<
2015.01.16 19:54:29 5: ECMDDevice: Analyze command >{"adc get 4\n"}<
2015.01.16 19:54:29 5: NETIO1: sending command "adc get 4\n"
2015.01.16 19:54:29 5: SW: 6164632067657420340a
2015.01.16 19:54:29 5: NETIO1: received answer "0AC \n"
2015.01.16 19:54:29 5: Postprocessing "0AC \n" with perl command {hex(trim("$_"))}.
2015.01.16 19:54:29 5: Postprocessed value is "172".
2015.01.16 19:54:29 5: Triggering MP_0 (2 changes)
2015.01.16 19:54:29 5: Notify loop for MP_0 portvalue: 172
2015.01.16 19:54:29 4: eventTypes: ECMDDevice MP_0 portvalue: 172 -> portvalue: .*
2015.01.16 19:54:29 4: eventTypes: ECMDDevice MP_0 portvalue 172 -> portvalue .*
2015.01.16 19:54:29 4: eventTypes: ECMDDevice MP_0 state: portvalue 172 -> state: portvalue .*

2015.01.16 19:52:29 5: Cmd: >define TempLog FileLog ./log/temp-%d-%m.log portvalue<
2015.01.16 19:52:29 5: Cmd: >define heizung readingsGroup t1:MP_0 t2:MP_1<


die besten PERL Kenntnisse habe ioch leider noch nicht, da ich erst damit anfange, ich hoffe aber trotzdem etwas Hilfe zu bekommen.


FHEM auf Raspberry mit HM, HMC und AVR Netios.

Dr. Boris Neubert

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

Maxl

#4
Hallo,

schon unterwegs:

netioadc.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("$_"))}



adc.classdef:

get value cmd {"adc get %PortID\n"}
params PortID
get value expect ".*"
get value postproc {\
my $hexval = hex(trim("$_"));\
my $hash  = $defs{%NAME};\
readingsSingleUpdate($hash, "state", $hexval, 1);\
}
FHEM auf Raspberry mit HM, HMC und AVR Netios.

Dr. Boris Neubert

Zitat von: Maxl am 16 Januar 2015, 17:27:41
# log Temp to database
define TempLog FileLog ./log/temp-%d-%m.log portvalue #{ CalcTemp(portvalue) }


Hier ist der Fehler: dein Regexp portvalue ist falsch, es muss vermutlich

MP_0:portvalue.*

heißen.

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

Maxl

FHEM auf Raspberry mit HM, HMC und AVR Netios.

franky08

Nur mal eine Frage zum Verständnis, ich beschäftige mich auch gerade mit dem Pollin AVR-NET-IO Board.
Warum hast du eine netioadc.classdef und eine adc.classdef??

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

Maxl

Hallo,

ist zweimal das Gleiche, nur von unterschiedlichen Seiten heruntergeladen.

Gruß
Maxl
FHEM auf Raspberry mit HM, HMC und AVR Netios.