Hauptmenü

NET_IO, Analogsignale

Begonnen von Steve, 16 Januar 2013, 19:43:24

Vorheriges Thema - Nächstes Thema

Steve

Hallo,

ich logge die Daten vom Analogeingang meines NET_IO,
und dabei werden Daten in Form von Zahlen und Buchstaben aufgezeichnet.
Wenn ich Portvalue aufrufe, wird ein Wert zwischen 0 und 1024 angezeigt.

Was gibt es da für einen Hintergrund?

In meinem Plot wird nichts angezeigt mit den Werten. Außerdem würde ich gerne die Daten in ein
auswertbares Format umwandeln(0-100%)

Gibt es da eine Möglichkeit?

Rohan

0 => ~ 0,0 V(olt)
1.024 => ~ 5,0 / 3,3 V(olt), je nach Spannungsreferenz des uC

Was misst du denn für ein Device / einen Wert am Analogeingang?

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Rohan

Nachtrag zum Hintergrund:

Das AVR NetIO versucht einen analogen Wert in einen digitalen mit einer (hier) 10-Bit-Auflösung (max. = 1024) umzuwandeln. Welchen digitalen Wert du mit welchem analogen (Volt, Temperatur, Druck, Abstand ...) Wert gleichsetzen willst, kannst nur du wissen.
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Steve

Die Werte die Du jetzt erklärt hast möchte ich gerne haben in der Log-Datei.

Hier mal ein Auszug aus meinem Log:

2013-01-13_22:11:08 Wasserstand_Zisterne value: 115
2013-01-13_22:12:08 Wasserstand_Zisterne value: 115
2013-01-13_22:13:07 Wasserstand_Zisterne value: 115
2013-01-13_22:14:11 Wasserstand_Zisterne value: 117
2013-01-13_22:20:25 Wasserstand_Zisterne value: 118
2013-01-13_22:21:22 Wasserstand_Zisterne value: 118
2013-01-13_22:22:22 Wasserstand_Zisterne value: 117
2013-01-13_22:23:22 Wasserstand_Zisterne value: 117
2013-01-13_22:24:22 Wasserstand_Zisterne value: 118
2013-01-13_22:25:22 Wasserstand_Zisterne value: 117
2013-01-13_22:26:22 Wasserstand_Zisterne value: 11A <- ???? z.B.
2013-01-13_22:27:22 Wasserstand_Zisterne value: 11A
2013-01-13_22:28:22 Wasserstand_Zisterne value: 11A

Wie die Werte zustande kommen ist mir ein Rätsel

Rohan

Hi,


2013-01-13_22:25:22 Wasserstand_Zisterne value: 117
2013-01-13_22:26:22 Wasserstand_Zisterne value: 11A


*Wenn* das AVR-NetIO die Werte in Hex ausgibt

117 Hex => 279 dez
11A Hex => 282 dez

ZitatWie die Werte zustande kommen ist mir ein Rätsel

Tja... schaun wir mal ;)

Ach so... 2 AVR-NetIOs habe ich zwar hier rumliegen, aber noch als Bausatz 8)

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Steve

Hi Thomas,

gibt es da keine Möglichkeit in FHEM die Werte zu wandeln?

Ich glaube nicht das in Ethersex die Option vorhanden ist.

Grüße Steve

Rohan

Hallo Steve,

... da sollten dann andere comMembers ran ... so weit bin ich (noch) nicht und wie angedeutet... AVR-NetIO ???

Einfach mal abwarten ... ;)

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Rohan

Nachtrag:

korrelieren denn die Dez-Werte irgendwie mit den IST-Werten in deiner Zisterne?

Was hast du für eine Art von Sensor am NETIO?

Gruß
Thomas
Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Steve


Ich habe ein Kalibriermeßgerät zum testen am Port hängen. Später kommt
ein Sensor dran, der mir ein Spannungssignal 0-5Volt gibt.

Wenn ich den Port direkt abfrage, dann kommt auch ein Dezimalwert.(Portvalue)

Steve

Hallo Thomas,

alles geklärt, ich hatte einen Fehler in der class.def.
Jetzt bekomme ich das Signal in % wie in FHEM beschrieben.

Grüße Steve

er

Halle Steve,

Kannst du mir die Änderung in class.def zeigen? Habe
Das gleiche Problem mit den hex Werten.

Gruss Erich

snowyrain

Hallo Steve,

vlt hilft Dir folgender Code etwas weiter:

# Uebergabeparameter Portnummer des internen Analogeingangs
params PortID
# Umsetzung in ECMD Befehle
get value cmd {"adc get %PortID"}
get value postproc {hex("$_")}


Ich habe bei meiner Messung einen Offset den kompensiere ich wie folgt (etwas komplexer):

# Uebergabeparameter Portnummer des internen Analogeingangs
params PortID
get value cmd {"adc get %PortID"}
get value postproc {\
  my $val = hex(trim("$_"));;\
  Log 1, "Spannungtherme: ".$val;;\
  my $valMin = 90;;\
  my $valMax = 363;;\
  my $retval = 0;;\
  if($val>$valMin){\
    $retval = (($val-$valMin)/($valMax-$valMin)*100);;\
    $retval = sprintf ("%%d", $retval);;\
  }\
  $retval;;\
}


Vlt hilft es Dir. Schönes WE

Snowyrain

Steve

Moin Erich,

sorry das ich mich nicht eher gemeldet habe.

Püschl74 hat mir die classdef geschickt, und mit der funktioniert es.
Die Messwerte werden jetzt in % angegeben.

Die classdef ist:
-----------------------------------------------------------------------------------------------------------------------------
# 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"}
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,0);\
  \
  $retval;\
}
get portvalue cmd {"adc get %PortID"}
get portvalue postproc {hex(trim("$_"))}
-------------------------------------------------------------------------------------------------------------------------------

Und als Beispiel meine cfg:

-------------------------------------------------------------------------------------------------------------------------------
#attr NET_IO_1 classdefs adc=/etc/fhem.classdef.netio.adc
define Wasserstand ECMDDevice adc 7
attr Wasserstand referenz 490
attr Wasserstand room Zisterne
attr Wasserstand schwellwert 10
define FileLog_Wasserstand FileLog /var/InternerSpeicher/fhem/log/Wasserstand-%Y.log Wasserstand:.*
attr FileLog_Wasserstand logtype Level:value,text
define weblink_Wasserstand weblink fileplot FileLog_Wasserstand:Level:CURRENT
attr weblink_Wasserstand fixedrange week
attr weblink_Wasserstand room Zisterne
#attr weblink_Wasserstand label "Niveau Min $data{min1}, Max $data{max1}, Last $data{currval1}"
define Niveaumessung at +*00:01 get Wasserstand value
-------------------------------------------------------------------------------------------------------------------------------

Eventuell hilft dir das weiter.

Grüße Steve

Tobias

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Steve

Hallo snowyrain,

was genau verfolgst du mit dem Offset?


Einen kleinen Makel habe ich jetzt noch bei der Auswertung meines Analogsignals.
Das Sidnal was vom NETIO kommt schwankt stark (2%), obwohl ich eine konstante Spannung
anliegen habe. Auch eine besere Schirmung hat nichts gebracht.

Hast Du eine Idee, wie man die Kurve glätten kann? Ich würde immer aus den letzten 5 Messungen
den Durchschnitt nehmen, aber da fehlt mir das Wissen, in Pearl die Idee umzusetzten.

Grüße Steve