aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2017-10-20 16:27:21 +0200
committerGerd Hoffmann <kraxel@redhat.com>2017-10-20 16:27:21 +0200
commit31a90e305181ae51ac8f8a6b80cdd27934309b9d (patch)
treea9b26cce898840097136f6b95b7dc0e8cb34feef
parent5b4e233ae752cdecec831ff039c6ee740522e08b (diff)
downloadhue-31a90e305181ae51ac8f8a6b80cdd27934309b9d.tar.gz
add elv wetter
-rwxr-xr-xelv-wetter85
1 files changed, 85 insertions, 0 deletions
diff --git a/elv-wetter b/elv-wetter
new file mode 100755
index 0000000..238ce22
--- /dev/null
+++ b/elv-wetter
@@ -0,0 +1,85 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+use Device::SerialPort;
+
+my @names = (
+ "unused",
+ "unused",
+ "unused",
+ "temp-1",
+ "temp-2",
+ "temp-3",
+ "temp-4",
+ "temp-5",
+ "temp-6",
+ "temp-7",
+ "temp-8",
+ "hy-1",
+ "hy-2",
+ "hy-3",
+ "hy-4",
+ "hy-5",
+ "hy-6",
+ "hy-7",
+ "hy-8",
+ "temp",
+ "hy",
+ "wind",
+ "water",
+ "raining"
+ );
+
+######################################################################
+
+my $port = shift;
+my ($elv,$line,@data);
+
+my $delay = 1;
+
+if (!defined($port)) {
+ print "no port specified\n";
+ exit 1;
+}
+
+$elv = new Device::SerialPort($port, 1) or die;
+$elv->baudrate(9600);
+$elv->parity('none');
+$elv->databits(8);
+$elv->stopbits(1);
+$elv->write_settings();
+
+$elv->write("?");
+sleep $delay;
+$line = $elv->input;
+die "ELV USB-WDE1 not detected on $port" unless $line =~ m/ELV USB-WDE1/;
+
+$elv->write("M2");
+sleep $delay;
+$line = $elv->input;
+die "switch to logview mode failed" unless $line =~ m/LogView/;
+
+$elv->write("RESET");
+sleep $delay;
+$line = $elv->input;
+die "reset failed (#1)" unless $line =~ m/OK/;
+
+$elv->write("?");
+sleep $delay;
+$line = $elv->input;
+die "reset failed (#2)" unless $line =~ m/ELV USB-WDE1/;
+
+print "init ok, waiting for data ...\n";
+
+while (1) {
+ sleep $delay;
+ $line = $elv->input;
+ next if $line eq "";
+ @data = split /;/, $line;
+ print "--\n";
+ for my $i (0 .. (scalar(@names) - 1)) {
+ next if $names[$i] eq "unused";
+ next if $data[$i] eq "";
+ printf "%s: %s\n", $names[$i], $data[$i];
+ }
+}