+
+sub read_ld
+{
+ return unless $dataf;
+
+ seek $dataf, 0, 0;
+ my $s = <$dataf>;
+ chomp $s;
+ dbg "read loop data: $s" if isdbg 'json';
+ $ld = $json->decode($s) if length $s;
+
+ # sort out rain stats
+ my $c;
+ if (($c = @{$ld->{rain24}}) < 24*60) {
+ my $diff = 24*60 - $c;
+ unshift @{$ld->{rain24}}, 0 for 0 .. $diff;
+ }
+ my $rain;
+ $rain += $_ for @{$ld->{rain24}};
+ $ld->{rain_24} = nearest(0.1, $rain);
+ delete $ld->{hour};
+ delete $ld->{min};
+}
+
+sub write_ld
+{
+ return unless $dataf;
+
+ seek $dataf, 0, 0;
+ truncate $dataf, 0;
+ $ld->{ts} = time;
+ my $s = $json->encode($ld);
+ dbg "write loop data: $s" if isdbg 'json';
+ print $dataf "$s\n";
+}
+
+
+__DATA__
+
+@@ index.html.ep
+<!DOCTYPE html>
+<html>
+ <head><title>DWeather</title></head>
+ <body>
+ <script>
+ var ws;
+ if ("WebSocket" in window) {
+ ws = new WebSocket('<%= url_for('index')->to_abs %>');
+ //ws = new WebSocket();
+ }
+ if(typeof(ws) !== 'undefined') {
+ ws.onmessage = function (event) {
+ document.body.innerHTML += JSON.parse(event.data).test;
+ };
+ ws.onopen = function (event) {
+ ws.send(JSON.stringify({weather: 'WebSocket support works! ♥'}));
+ };
+ }
+ else {
+ document.body.innerHTML += 'Browser does not support WebSockets.';
+ }
+
+ var ws = new WebSocket('<%= url_for('weather')->to_abs %>');
+
+ // Incoming messages
+ ws.onmessage = function(event) {
+ document.body.innerHTML += event.data + '<br/>';
+ };
+
+ </script>
+ <h1>DWeather</h1>
+
+ </body>
+</html>