Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Ich hab jetzt gerade keine Lust stundenlang nachzulesen und keine UVR1611 aber: die hatte auch eine vernünftige Schnittstelle statt sinnloses HTML zu parsen
Schaut da nochmal nach..
man kann d-logg nehmen, um die Werte, die auch in WinSol angezeigt werden auszugeben. Da hat man aber dann keine Möglichkeit zu konfigurieren.
Es gibt einen String mit den Zahlen in einer Reihenfolge und fertig.
Komfortabel ist das nicht.
Ich habe den Autor mal kontaktiert. Vielleicht geht da was.
@Makki: Prinzipiell parsen wir ja nicht HTML. Wir konfigurieren die UVR/BL-Net ja so, dass an einer Bestimmten Stelle der HTML Datei die Daten stehen. Das ist schon recht statisch und darin sind -außer diesen blöden nbsp keine Tags etc.
ich hab mich echt bemüht... Aber ich brauche Perl/Regex hilfe.
Ich hab's an der Kommandozeile probiert. Dabei habe ich mich an perlretut - perldoc.perl.org gehalten
Code:
cat test.pl
#!/usr/bin/perl
my $inputstr=' 26.0 °C';
$inputstr =~ /^[+-]?(\d+\.\d+|\d+\.|\.\d+|\d+)([eE][+-]?\d+)?$/;
print $inputstr;
my $inputstr=' 26.0 °C';
$inputstr =~ /[-+]?[0-9]*\.?[0-9]+/;
print $inputstr;
my $inputstr=' 26.0 °C';
$inputstr =~ /[\d*,-]/;
print $inputstr;
So funktioniert es jetzt seit einigen Tagen stabil:
Code:
#!/usr/bin/perl
use strict;
# ******************************************************************************
# Das Plugin liest Werte der UVR 1611 über BL-Net ein, legt sie in RRDs ab und
# sendet sie auf den Bus.
# Im Onlineschema des BL-Net müssen die Variabeln der zu lesenden Ein-/Ausgänge
# innerhalb der Tags [UVR1611DATEN] [/UVR1611DATEN] eingetragen sein. Dies kann
# z.B. im META Tag "Description" manuell vor dem Übertragen mit dem Memory
# Manager hinzugefügt werden.
# Beispiel:
# <meta name="Description" content="<!-- [UVR1611DATEN]$n1a0|$n1a1|$n1a2|
# $n1d0|$n1d1[/UVR1611DATEN] -->" />
# Info zum Schema: http://doku.uvr1611.at/doku.php/de/onlineschema/onlineschema
# Analog dazu müssen hier die Arrays @knxGA, @knxDPT, @rrdName im Abschnitt
# [Definition der Variabeln] gefüllt werden.
# Beispiel:
# my @knxGA = ('1/6/100','1/6/101','1/6/102','1/7/100','1/7/101');
# my @knxDPT = (9.001,9.001,9.001,1.001,1.001);
# my @rrdName = ('aussen_temp','innen_temp','vorlauf_temp','ventilHzRL_bool','anforderungBrenner_bool');
# ******************************************************************************
# vorübergehedes disablen des Plugins:
# return "disabled";
# plugin nicht zyklisch ausführen
# $plugin_info{$plugname.'_cycle'} = 0;
# plugin zyklisch ausführen
$plugin_info{$plugname.'_cycle'} = $wg_config{''}{'rrd_interval'};
# Eine KNX GA abonnieren: Plugin wird aufgerufen, sobald ein Paket an diese GA
# kommt. Der Inhalt des Pakets steht dann in $msg.
# $plugin_subscribe{'7/0/15'}{$plugname} = 1;
# Definition der Variabeln
my @knxGA = ('3/0/2','3/0/3','3/0/4','3/0/5','3/0/6','3/0/2','3/0/3','3/0/4','3/0/5','3/0/6','3/0/2','3/0/3','3/0/4','3/0/5','3/0/6',);
my @knxDPT = (9.001,9.001,9.001,9.001,9.001,9.001,9.001,9.001,9.001,9.001,9.001,9.001,9.001,9.001,9.001);
my @rrdName = ('Kollektor','Speicher 1', 'Speicher 2','Speicher 3','Speicher 4','Warmwasser','Netzwerk1' ,'Netzwerk2','Netzwerk3','Netzwerk4','Netzwerk5','Netzwerk6','PumpeSolar','PumpeSolar','Umschaltventil' );
my $uvrUrl = 'http://192.168.178.5/GRAFIK1.htm';
# Falls keine Zahl vom BL-Net übertragen wird sollten folgende Werte als boolean true (1) erkannt werden
my @booleanTrue = ('EIN','ON','ein','true');
my $tempValue;
use LWP::Simple;
my $urlContent = get($uvrUrl);
return 'UVR-Datenabfrage fehlgeschlagen für $uvrUrl' unless defined $urlContent;
$urlContent =~ /\[UVR1611DATEN\](.+)\[\/UVR1611DATEN\]/;
plugin_log($plugname, 'Content');
plugin_log($plugname, $1 );
my @uvrVars = split(/\|/,$1);
my $counter = 0;
my $dbgOut;
foreach (@knxGA){
plugin_log($plugname, 'CurrentTempValue');
$tempValue = $uvrVars[$counter];
plugin_log($plugname, $tempValue);
#plugin_log($plugname, '2');
$tempValue =~ s/EIN/1/g;
$tempValue =~ s/AUS/0/g;
$tempValue =~ s/\,/./g; # , durch . ersetzen
$tempValue =~ s/([-+]?[0-9]*\.[0-9]+|[0-9]+)//g;
$tempValue = $1;
plugin_log($plugname, $tempValue);
plugin_log($plugname, '***'.$tempValue.'***');
if ($tempValue !~ /[+-]?\d+[.,]?d*/) {
plugin_log($plugname, 'tempValue ist keine zahl');
foreach my $x (@booleanTrue) {
if ($tempValue eq $x) {
$tempValue = '1';
plugin_log($plugname, 'tempValue wird 1 zugewiesen');
last;
}
}
if ($tempValue ne '1') {
$tempValue = '0';
plugin_log($plugname, 'tempValue wird 0 zugewiesen');
}
}
if($_ ne ''){
knx_write($_, $tempValue, $knxDPT[$counter]);
plugin_log($plugname, "knx_write($_, $tempValue, $knxDPT[$counter])");
}
if($rrdName[$counter] ne ''){
update_rrd($rrdName[$counter],'',$tempValue);
plugin_log($plugname, "update_rrd($rrdName[$counter],'',$tempValue)");
}
# plugin_log($plugname, $dbgOut.'--- '.$counter.':'.$rrdName[$counter].'*'.$uvrVars[$counter].'*'.$tempValue.'*'.$_.'*'.$knxDPT[$counter]);
$counter++;
}
# plugin_log($plugname, "@uvrVars -- @knxGA");
return $counter." Werte von UVR abgefragt";
# Copyright (C) 2012 Michael Schneider
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>
P.S: mein erster zählbarer Beitrag zur Community ;-o
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar