Originally posted by: <email address deleted>
Moin,
ich nutze fhem seit einigen Tagen auf einem Pandaboard. Zielsetzung war
ursprünglich das Loggen von elektrischen Werten. Als ich dann das System
mit einem CUL-Stick in Betrieb nahm, war ich doch erstaunt zu sehen, dass
da auf einmal Geräte auftauchten, an die gar nicht mehr gedacht hatte:
meine ELV FHT-Teile.
Ich nutze von ELV EM 1000-EM Sensoren. Aktiv ist z.Z. nur einer. Er hängt
an dem Ausgang eines Wechselrichters, der von einer PV-Inselanlage versorgt
wird. Somit kann ich die wirklich genutzte Energie meiner PV-Inselanlage am
230V-Strang sehen. Da ich den WR mal abschalten musste, hatte ich auf
einmal einen Log-Versatz von über 65000 nach dem wieder Einschalten des WR.
Damit stimmt der Tagesverbrauch überhaupt nicht mehr. Was muss ich
einstellen, damit dies nicht mehr passiert? Ich muss nämlich am 230V-Strang
noch etwas ändern und somit den WR wieder abschalten.
Zur Aufzeichnung der Akkuspannung sowie zur Stromstärkemessung baue ich mir
gerade ein System aus AVR Net IO mit ethersex und Stromwandler auf. Die
Informationen im Wiki haben mir dabei sehr geholfen. Ich kann die Werte der
einzelnen ADC-Port's abrufen. Nun zu meiner Frage:
Wie kann ich in der classdef eine IF-Abfrage (oder auch Select / Case /
Switch) einbauen. Alle meine bisherigen Versuche sind gescheitert. Ich muss
in Abhängigkeit des abgefragten Ports unterschiedliche Berechnungen mit den
Werten durchführen. Beispielsweise bei PortID == 7 -> Spannungsmessung,
aber PortID == 4 -> Berechnung der Stromstärke (LEM HAIS Stromwandler).
Danke für die Hilfe.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Wenn du dich an meinen WikiBeitrag mit den ADC Ports gehalten hast, probier
mal (ungetestet) was die Variable %PortID, die ganz oben in der classdef
definiert wird, im postproc beinhaltet.
Wenn die die übergebene Portnummer beinhaltet, gehts mit Basis-Perl weiter
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Na,
dann schau Dir mal dieses Teil hier an - das wird demnächst als Modul für
FHEM realisiert.
LG
pah
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
%PortID enthält die übergebene "Zahl" - z.B. 7
Einer meiner Versuche war (beispielhaft):
get value postproc {\
my $hexval = hex(trim("$_"));\
IF(%PortID == 7){my $retval = sprintf("%%.2f",$hexval*0,00164);}\
IF(%PortID == 4){my $retval = sprintf("%%.2f",$hexval*12345);}\
\
$retval;\
}
Vielleicht ist ja auch meine Syntax falsch. Aber egal, ob ich es in einer
Zeile (wie oben) oder auf mehrere Zeilen verteilt habe, ich habe nie das
manuell errechnete Ergebnis bekommen. Nur wenn ich nachfolgendes verwende,
bekomme ich das richtige Ergebnis (in diesem Fall den Spannungswert, wobei
der Faktor nur beispielhaft ist).
get value postproc {\
my $hexval = hex(trim("$_"));\
my $retval = sprintf("%%.2f",$hexval*0,00164);\
\
$retval;\
}
viele Grüße
Am Montag, 9. Juli 2012 14:08:14 UTC+2 schrieb tobias.faust:
>
> Wenn du dich an meinen WikiBeitrag mit den ADC Ports gehalten hast,
> probier mal (ungetestet) was die Variable %PortID, die ganz oben in der
> classdef definiert wird, im postproc beinhaltet.
> Wenn die die übergebene Portnummer beinhaltet, gehts mit Basis-Perl weiter
>
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Hallo,
Am 09.07.2012 14:54, schrieb on_ARM:
> %PortID enthält die übergebene "Zahl" - z.B. 7
>
> Einer meiner Versuche war (beispielhaft):
>
> get value postproc {\
> my $hexval = hex(trim("$_"));\
> IF(%PortID == 7){my $retval = sprintf("%%.2f",$hexval*0,00164);}\
> IF(%PortID == 4){my $retval = sprintf("%%.2f",$hexval*12345);}\
> \
> $retval;\
> }
>
zum Debuggen kannst Du z.B.
Log 1, "Mein Wert ist $hexval";\
o.ä. in das Perl-Skript einstreuseln und Dir dann im Log ansehen, was
genau passiert.
Grüße
Boris
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Welches Teil? Bei mir wird leider kein Link angezeigt.
Gruß
Am Montag, 9. Juli 2012 14:13:39 UTC+2 schrieb Prof. Dr. Peter A. Henning:
>
>
> Na,
>
> dann schau Dir mal dieses Teil hier an - das wird demnächst als Modul für
> FHEM realisiert.
>
> LG
>
> pah
>
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Ich habe mal folgendes probiert:
# Uebergabeparameter Portnummer des internen Analogeingangs
params PortID
# Umsetzung in ECMD Befehle
# value = Rückgabewert in Abhängigkeit des Ports in Volt bzw. Ampere
# portvalue = originaler Rückgabewert des NET-IO in Dec umgerechnet
get value cmd {"adc get %PortID"}
get value postproc {\
if(%PortID == 7){my $retval = sprintf("7");}\
if(%PortID == 5){my $retval = sprintf("5");}\
if(%PortID == 4){my $retval = sprintf("4");}\
\
$retval;\
}
Das Ergebnis von:
*get Akku_Spannung value*
ist:
*value Global symbol "$retval" requires explicit package name at (eval 16) line 1.*
Nächster Test:
get value postproc {\
my $retval = sprintf("%%s",%PortID);\
\
$retval;\
}
Das Ergebnis von:
*get Akku_Spannung value*
ist:
*value 7 *
Was mache ich falsch?
viele Grüße
Am Montag, 9. Juli 2012 14:08:14 UTC+2 schrieb tobias.faust:
>
> Wenn du dich an meinen WikiBeitrag mit den ADC Ports gehalten hast,
> probier mal (ungetestet) was die Variable %PortID, die ganz oben in der
> classdef definiert wird, im postproc beinhaltet.
> Wenn die die übergebene Portnummer beinhaltet, gehts mit Basis-Perl weiter
>
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Was du falsch machst ?
Ganz eingfach, "my" definiert eine lokale variable, die nur innerhalb der
momentanen {}-Klammern Gültigkeit hat.
Oder anders ausgedrückt: perl lernen.
pah
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Der code lässt sich auch leichter lesen wenn du die einzelnen IF´s durch
"switch/case/when" etc ersetzt:
http://thomas-fahle.blogspot.de/2008/02/perl-510-switching-given-when.html
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Öh, sorry.
http://www.maxim-ic.com/datasheet/index.mvp/id/2919
pah
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Am Montag, 9. Juli 2012 14:54:14 UTC+2 schrieb on_ARM:
>
> %PortID enthält die übergebene "Zahl" - z.B. 7
>
> Einer meiner Versuche war (beispielhaft):
>
> get value postproc {\
> my $hexval = hex(trim("$_"));\
> IF(%PortID == 7){my $retval = sprintf("%%.2f",$hexval*0,00164);}\
> IF(%PortID == 4){my $retval = sprintf("%%.2f",$hexval*12345);}\
> \
> $retval;\
> }
>
>
>
Hallo.
Versuch doch das $retval zuerst zu Definieren.
get value postproc {\
my $hexval = hex(trim("$_"));\
my $retval = 0;\
IF(%PortID == 7){$retval = sprintf("%%.2f",$hexval*0,00164);}\
IF(%PortID == 4){$retval = sprintf("%%.2f",$hexval*12345);}\
\
$retval;\
}
Wobei wenn ich das richtig Verstanden habe, eine so definierte Variable
(my $retval) nur zum Zeitpunkt der Modulausführung genutzt wird und das
restliche Perl Programm (also fhem) davon nichts mitbekommt, und es auch
nicht genutzt werden kann. Möchtest du Variablen im gesamten System nutzen,
muss die Global definiert werden. Das geht mit
" attr global userattr .....". Wenn die Variable so definiert wurde,
benötigst du das my nicht mehr.
Ich hoffe ich habe jetzt nichts falsches gesagt.
Ich habe auch schon erleben müssen, das wer fhem nutzen möchte Experte in
Perl und dem Englischen mächtig sein muss.
Es ist wohl ein Projekt von Perl-Profis für Perl-Profis.
Davon lass mich mich aber nicht unterkriegen und arbeite mit dem Projekt
weiter.
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Hallo,
nun ja. Solange die Übersetzungen der culfw und der fhem commandref noch
nicht fertig sind sollte man
schon den einen oder anderen "Durchbeisswillen" mitbringen.
Sei es was Englisch anbelangt oder auch was Perl anbelangt.
FHEM ist aber definitiv KEIN Projekt von Perl-Profis nur für Perl-Profis.
Aber ein bischen "Leidensfest" sollte man schon sein ;-)
Grüße
Am Dienstag, 10. Juli 2012 11:17:06 UTC+2 schrieb lo4dro:
>
>
>
> Am Montag, 9. Juli 2012 14:54:14 UTC+2 schrieb on_ARM:
>>
>> %PortID enthält die übergebene "Zahl" - z.B. 7
>>
>> Einer meiner Versuche war (beispielhaft):
>>
>> get value postproc {\
>> my $hexval = hex(trim("$_"));\
>> IF(%PortID == 7){my $retval = sprintf("%%.2f",$hexval*0,00164);}\
>> IF(%PortID == 4){my $retval = sprintf("%%.2f",$hexval*12345);}\
>> \
>> $retval;\
>> }
>>
>>
>>
> Hallo.
>
> Versuch doch das $retval zuerst zu Definieren.
>
>
> get value postproc {\
> my $hexval = hex(trim("$_"));\
> my $retval = 0;\
> IF(%PortID == 7){$retval = sprintf("%%.2f",$hexval*0,00164);}\
>
> IF(%PortID == 4){$retval = sprintf("%%.2f",$hexval*12345);}\
> \
> $retval;\
> }
>
>
> Wobei wenn ich das richtig Verstanden habe, eine so definierte Variable
> (my $retval) nur zum Zeitpunkt der Modulausführung genutzt wird und das
> restliche Perl Programm (also fhem) davon nichts mitbekommt, und es auch
> nicht genutzt werden kann. Möchtest du Variablen im gesamten System nutzen,
> muss die Global definiert werden. Das geht mit
> " attr global userattr .....". Wenn die Variable so definiert wurde,
> benötigst du das my nicht mehr.
> Ich hoffe ich habe jetzt nichts falsches gesagt.
>
> Ich habe auch schon erleben müssen, das wer fhem nutzen möchte Experte in
> Perl und dem Englischen mächtig sein muss.
> Es ist wohl ein Projekt von Perl-Profis für Perl-Profis.
>
> Davon lass mich mich aber nicht unterkriegen und arbeite mit dem Projekt
> weiter.
>
>
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Danke, an so etwas hatte ich bei meiner Anfangsfrage gedacht.
Am Dienstag, 10. Juli 2012 08:22:47 UTC+2 schrieb tobias.faust:
>
> Der code lässt sich auch leichter lesen wenn du die einzelnen IF´s durch
> "switch/case/when" etc ersetzt:
>
> http://thomas-fahle.blogspot.de/2008/02/perl-510-switching-given-when.html
>
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Danke für den Hinweis was "my" definiert.
Da meine Heimatsprache c ist, ich ansonsten nur Erfahrungen in Rexx,
(Free)Pascal und PHP sowie etwas Java besitze, bitte ich meine Unkenntnis
in Perl zu entschuldigen. Ich habe aber auch nicht vor, tiefer in die
Perl-Programmierung einzusteigen, als bis ich meine gewünschten Werte vom
AVR Net IO in fhem integriert habe.
Für mich war/ist die Doku in fhem bezüglich classdef, hier vor allem die
Nutzung von Perl-Befehlen - wie an Hand eines Teiles meiner Fragestellung
zu erkennen -, nicht ausreichend.
Aber für Fragen und Diskussion gibt es ja zum Glück ein Forum. :-)
viele Grüße
PS. Das maxim-IC ist nicht schlecht. Nur für meine Anforderung (bis 15V und
bis ca. 200A) nicht das Passende.
Am Dienstag, 10. Juli 2012 04:07:30 UTC+2 schrieb Prof. Dr. Peter A.
Henning:
>
> Was du falsch machst ?
>
> Ganz eingfach, "my" definiert eine lokale variable, die nur innerhalb der
> momentanen {}-Klammern Gültigkeit hat.
>
> Oder anders ausgedrückt: perl lernen.
>
> pah
>
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Aber nicht doch.
10,23 V ist der Standardumfang - zur Erweiterung reichen 2 Widerstände.
Und das mit den 200 A ist ebenso trivial.
pah
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Originally posted by: <email address deleted>
Am Dienstag, 10. Juli 2012 08:22:47 UTC+2 schrieb tobias.faust:
>
> Der code lässt sich auch leichter lesen wenn du die einzelnen IF´s durch
> "switch/case/when" etc ersetzt:
>
> http://thomas-fahle.blogspot.de/2008/02/perl-510-switching-given-when.html
>
Wo muss ich
use feature qw/say switch/;
einfügen? Am Anfang der classdef-Datei hat es bei mir nicht funktioniert.
Oder muss es am Anfang nach der öffnenden {-Klammer bei get value postproc rein?
Mit if-Abfragen bekomme ich nun die Werte vom Net IO. Der Hinweis bezüglich des "my = variable" war der Wesentliche.
Die Berechnung klappt auch, allerdings schwanken die Werte vom ADC - hier vor allem die von den beiden Stromwandler'n - doch recht stark. :-(
viele Grüße
--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com