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?
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
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.
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
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
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
Hallo Steve,
... da sollten dann andere comMembers ran ... so weit bin ich (noch) nicht und wie angedeutet... AVR-NetIO ???
Einfach mal abwarten ... ;)
Gruß
Thomas
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
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)
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
Halle Steve,
Kannst du mir die Änderung in class.def zeigen? Habe
Das gleiche Problem mit den hex Werten.
Gruss Erich
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
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
einfach mal meinen Wiki-Beitrag lesen...
http://www.fhemwiki.de/wiki/AVR-NET-IO#Analoge_Eing.C3.A4nge_in_FHEM_einbinden (//www.fhemwiki.de/wiki/AVR-NET-IO#Analoge_Eing.C3.A4nge_in_FHEM_einbinden)
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
Hi Tobias,
dein Wiki-Beitrag ist super, habe auf der Basis mein NETIO zum laufen gebracht(mit kleinen Hinternissen).
Schwankt dein Meßwert auch so stark,so das die Linie im Plot etwas abgehackt wird?
Grüße Steve
ich habe im WikiBeitrag ein Screenshot gepostet, da sieht man das die Linie eine zickzackkurve ist, nur schwach, aber keine glatte linie....
Hallo,
ich habe eine Junkers Therme die für die Regelung eine Spannung von 2,5V (=0% aus) - 22V (100% Max) benötigt. Die Therme schaltet jedoch erst ab 4V ein. Hier brauche ich einen Offset sonst wäre 2% Eingangssignal noch immer = aus.
Für die Mittelwert bildung würde ich versuchen mehrere Werte in einem DummyAlteWerte (mittels Leerzeichen getrennt) zu speichern. Und dann mittels Split in ein Array umwandeln und dann den Mittelwert bilden.
folgender Code ist nicht getestet:
my $alteWerte = $value{"DummyAlteWerte"};;\
my @@values = split($alteWerte, "%");;\
my $counter = 0;
my $avg = 0;
foreach(@@alle) {\
$avg=$avg+$_;;\
$counter++;;\
}\
$avg=$avg/$counter;;\
fhem("set DummyAVG ".$avg);;\
Vielleicht kann man auch in der gplot-Datei glätten. Dann würden keine "flaschen" Messdaten gespeichert.
Gruß
Snowyrain
Hi,
also wird die momentane Leistung der Therme in FHEM Angezeigt-auch nicht
schlecht.
Greifst Du in die Regelung ein(z.B. Mischer)?
Hallo,
der Regelstatus wird nicht nur angezeigt sondern auch bei der "Junkers Therme" gesetzt. Hierfür habe ich an einem AVR-NET-IO Board einen Digital-Analog-Wandler und einem kleinem OP-Verstärker, um ein Spannung zwischen 0V und 24V einstellen zu können.
Ich nutze hierfür den Eingang des Wandthermostates. Die meisten Thermen werden über das Wandthermostat nur ein/aus geschaltet. Dann kann der DAC entfallen und es reicht ein Relais.
Ich habe das Gefühl die Junkerstherme ändert ihr Heizverhalten nur geringfüging wenn die Spannung verändert wird. Leider finde ich dazu auch nicht viel.
Aber es ist ganz nett. ;-)
Hallo Snowyrain
Ich habe ebenfalls eine solche Junkerstherme. Im Wohnzimmer habe ich einen Wandthermostat (TR-200) zur Steuerung, aber jedes Zimmer ist unterschiedlich warm (kalt). Wenn im WZ das Thermostat die gewünschte Temperatur erreicht hat, so ist die Heizung in der gesamten Wohnung aus. Da es sich um einen sehr schönen aber ungedämmten Altbau handelt und ich nur Mieter bin muss meine Lösung reversibel sein, und an der Dämmung kann ich nichts verändern. Ich würde also im Wohnzimmer statt des TR-200 eine über FHEM bedienbare Steuerung einbauen, sowie Aktoren statt der Thermostate an den Heizkörpern verbauen wollen.
Bislang war mir nicht wirklich klar wie ich die Spannung (2-24V) aufbauen soll, da ich zwar Ahnung von Software, jedoch weniger von Mikrokontroller / löten / etc. habe.
Das hat sich durch Deinen Beitrag jedoch elementar geändert, da der Weg nun beschrieben ist. Wärst Du so freundlich und würdest mir eine Art Liste der Teile zusammenstellen, die ich benötige um ein NET-IO - Board zusammenbauen zu können, sowie einen AD-Wandler. Mit welcher Firmware wird das betrieben? Gibt es soetwas als Set? wie kommuniziert es mit dem FHEM-Server (Wlan? CUL?). Auch eine Linkliste zum Thema wäre sehr hilfreich.
Vielen Dank im Voraus, ich hoffe meine Fragen waren nicht zu durcheinander.
MFG
Stephan
Ich weiß das Thema ist schon etwas älter, aber ich habe bei mir das gleiche setting wie bei stehajo und mich würde die Lösung schon sehr interessieren. Immer her mit den Details!
Auch Schwanke ich momentan, ob es wirklich eine Regelung zwischen von 0-24V braucht oder ob nicht doch ein simples Relais reichen würde.
Danke
Owel
Zitat von: Owel am 16 Dezember 2013, 08:50:03
Ich weiß das Thema ist schon etwas älter, aber ich habe bei mir das gleiche setting wie bei stehajo und mich würde die Lösung schon sehr interessieren. Immer her mit den Details!
Bei mir genauso. Gleiche Therme, gleicher Regler, gleicher Wunsch ::)
Zitat von: Owel am 16 Dezember 2013, 08:50:03
Auch Schwanke ich momentan, ob es wirklich eine Regelung zwischen von 0-24V braucht oder ob nicht doch ein simples Relais reichen würde.
Die Therme hat keine Zweipunktregelung, sondern eine Stetigregelung. Die Spannung zur Regelung schwankt also. Der Wiki-Beitrag beschreibt das schön. Es stellt sich generell die Frage, wie weit man in die Regelung eingreifen will- Betriebssicherheit mit der Rückfallebene zum alten Regler erhöht den WAF, wenn's mit der Software mal nicht gleich klappt. Ich halte die von Snowyrain vorgestellte Schaltung für gut geeignet und leicht nachbaubar. Der LTC1257 liegt schon da. 8) Sicherlich kann man auch jeden anderen (preiswerteren) D/A-Wandler nehmen. Ethersex ist da flexibel- vor allem stabil, sehr preiswert und einfach zu erstellen.