source: de.wigbels.ruby/hotcoldrain/hotcoldrain.rb @ af9afaf

Last change on this file since af9afaf was af9afaf, checked in by njw <njw@…>, 9 years ago

RRD Support, Testing mit MQTT

  • Property mode set to 100644
File size: 2.3 KB
Line 
1#!/usr/bin/env ruby
2#
3# Author: Norbert Wigbels - foobla.wigbels.de/uber-foobla
4#
5# HotColdRain continously reads output of USB-WDE1
6# and pushes data to mosquitto-db
7#
8# todos:
9#
10
11#------------------------------------------
12# Tainted mode 0-4
13$SAFE=0
14
15
16#------------------------------------------
17require 'logger'
18require 'serialport'
19require 'mqtt'
20
21#------------------------------------------
22class HotColdRain < Logger::Application
23  attr_accessor :temp1, :humidity1, :serialport
24
25  def initialize(application_name)
26    super(application_name)
27    @serialport = SerialPort.new("/dev/ttyUSB0", 9600, 8, 1, SerialPort::NONE)
28  end
29
30  def logOutReadableData(datagrams)
31    puts "TemperaturUnten: " + datagrams[3]
32    puts "LuftfeuchtigkeitUnten: " + datagrams[11]
33    puts
34    puts "TemperaturOben: " + datagrams[4]
35    puts "LuftfeuchtigkeitOben: " + datagrams[12]
36    puts       
37    puts "TemperaturAussen: " + datagrams[19]
38    puts "LuftfeuchtigkeitAussen: " + datagrams[20]
39    puts "Windgeschwindigkeit km/h: " + datagrams[21]
40    puts "Niederschlag: " + datagrams[22]
41    puts "Regen ja/nein: " + datagrams[23]       
42    puts "---------------------"
43  end
44
45  def run
46    begin
47      while true do
48        openformat = @serialport.readline
49        #openformat = "$1;1;;21,3;20,0;;;;;;;50;55;;;;;;;4,9;74;3,0;6;0;0"
50        datagrams = openformat.split(';')
51
52        logOutReadableData(datagrams)
53
54        # $1;1;;21,3;20,0;;;;;;;50;55;;;;;;;4,9;74;3,0;6;0;0
55        # extract only data
56        # then replace empty data with U
57        # then localize float value
58        # finally prepare updatestring for rrdtool
59        datagrams = datagrams.values_at(3..23)
60        datagrams.collect! { |element| (element.empty?) ? "U" : element }
61        datagrams.collect! { |element| (element.include? ',') ? element.sub!(',','.') : element }
62        rrddata = 'N:'+datagrams.join(':')
63
64        system("rrdtool update weather.rrd #{rrddata}")
65
66        MQTT::Client.connect('mqtt://notwist:pixies@wigbels.net') do |c|
67          c.publish('oben/temperatur', datagrams[0])
68        end
69        #log(INFO, 'added 100 liter of gas to sensor-database')
70      end
71      @serialport.close
72    rescue => msg
73      log(ERROR, "error: #{msg}")
74      retry
75    ensure
76      @serialport.close
77    end
78  end
79end
80
81
82#------------------------------------------
83status = HotColdRain.new("HotColdRain").start
84
85
86
87
88
Note: See TracBrowser for help on using the repository browser.