Hey Leute,
hab mal ne "organisatorische Frage. Ich habe ein Temperatur-Modul mit 3 Kanälen, also man kann 3 Temperaturen messen.
Wenn man eine Abfrage an das T-Modul schickt, dann antwortet das beispielsweise mit 21;17;23
Ich frage das T-Modul aller 15 Minuten ab.
Jetzt zur Frage: Würdet ihr
a) eine Abfrage machen, die in das Logfile 3 Werte schreibt und man dann dem Diagramm sagt, welchen Wert es nehmen soll oder
b) die Abfrage für jeden Kanal separat machen, also mit einem Regex bspw. nur den 2. Wert auslesen und in ein das Logfile-2-T.log schreiben
b) kann ich schon mal selbst machen, also ich bekomme 3 Diagramme hin, aber habe auch 3 Logfiles und frage aus meiner Sicht zu viel ab,
da mir ja ohnehin die Abfrage 3 Werte liefert.
a) klingt mir logischer, aber da bräuchte ich Eure Hilfe, wie man einen Antwortstring so zerlegen kann, dass das alles passt und separiert ins log geschrieben wird.
LG
userreadings sollten helfen. wenn Du die 3 Werte in jeweils ein userreading schreibst können sie in ein Log einfließen. Zerlegen kannst Du mit RegEx(kann ich Dir aber nicht bei helfen)
Grüße Markus
So, in meinem Log stehen nun:
2017-02-25_21:21:27 TempTmodul51 temp: 9.0;5.1;
Wie kann ich dem SVG nun sagen, dass er 2 Linien malen soll? Eine mit dem ersten und eine mit dem 2. Wert?
derzeit: define SVG_Log_Temperatur_51 SVG Log_Temperatur51:SVG_Log_Temperatur_51:CURRENT
Ich würde die 3 werte Perl Perl bei ; splitten und als 3 Readings
T1
T2
T3
Ins devices und log schreiben. Der Plot ist dann selbsterklärend.
Alternative so hinbiegen das 1 Reading getrennt per Leerzeichen raus kommt. Dann kann SVG da,it auch um
SUPER!!!
DAs mit den Leerzeichen klappt schon mal:
2017-02-25_22:08:08 TempTmodul5 temp: 9.0 5.7
und hier dazu die classdef.... (bitte nicht zu sehr schimpfen ;))
params T_Adresse
set temp cmd {chr(35).chr(84)."%T_Adresse".chr(97).chr(13).chr(10)}
set temp expect "!T%T_Adresse.*\r\n"
set temp postproc {my $datei = 'tempwerte.cfg';;\
open my $tempwerte, '<', $datei or die '$datei: $!';;\
push my @temps, <$tempwerte>;;\
close $tempwerte or die '$datei: $!';;\
my $T1 = $temps[ord(substr($_,5,1))];;\
$T1 =~ s/\n+$//;;\
my $T2 = $temps[ord(substr($_,7,1))];;\
$T2 =~ s/\n+$//;;\
my $T3 = $temps[ord(substr($_,9,1))];;\
$T3 =~ s/\n+$//;;\
$_ = $T1.' '.$T2.' '.$T3;;}
Zur Erkärung. Das Modul liefert die Temperaturwerte aller 3 Kanäle als 8bit zurück (0-255). 0 ist arschkalt und und 255 ist Tschernobyl.
Ich hab dann ne Tabelle, wo ich zu den passenden Bits die Temp habe.....
Die "substr" sind dann dafür da um die einzelnen Kanäle auseinander zu nehmen....
Wie müsste das dann ungefähr aussehen um 3 Werte zu schreiben?
Oder lass ich einfach nur die "Neue Zeile Lösch Zeilen" ( $T1 =~ s/\n+$//;;\) raus?
Weil 3 Zeilen klingt mir sympatischer, da ich dann auch noch vergleichen will.
Wenn die Temperatur T1 vom Modul A kleiner ist als die T2 vom Modul B, dann Heizung an ;)