Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env ruby
- def is_linux
- RUBY_PLATFORM.downcase.include?('linux')
- end
- def is_windows
- RUBY_PLATFORM.downcase.include?('-mingw32')
- end
- def is_freebsd
- RUBY_PLATFORM.downcase.include?('x86_64-freebsd9.0')
- end
- def is_darwin
- RUBY_PLATFORM.downcase.include?('x86_64-darwin10.8.0')
- end
- require 'awesome_print'
- require 'serialport'
- require 'sqlite3'
- require 'win32ole' if is_windows
- STDOUT.sync = true
- def usb_sniff
- wmi = WIN32OLE.connect('winmgmts://')
- devs = wmi.ExecQuery('Select * From Win32_USBControllerDevice')
- devs.each do |dev|
- dev_name = dev.Dependent.gsub('"', '').split('=')[1]
- usb_devs = wmi.ExecQuery("Select * From Win32_PnPEntity Where DeviceID = '#{dev_name}' and Description = 'Watchport/H'")
- usb_devs.each do |usb_obj|
- str = ''
- usb_obj.properties_.each do |prop|
- str << "usb:#{prop.name}->#{prop.value}\n" if prop.value
- end
- puts str
- end
- end
- end
- def com_sniff
- if is_windows
- wmi = WIN32OLE.connect('winmgmts://')
- wsql = 'Select * From Win32_SerialPort where '
- wsql << "Description = 'Watchport Virtual Port' and Status = 'OK'"
- ap wsql
- wmio = wmi.ExecQuery(wsql)
- wmio.each do |dev|
- pnpdevice = dev.PNPDeviceID
- pnpdevice.gsub!(/EDGESER\\/, '')
- pnpdevice.gsub!(/\\PORT_0/, '')
- com_port = dev.DeviceID
- sql_insert(com_port, pnpdevice)
- end
- end
- if is_linux
- myfoo = '/dev/serial/by-id/*-Inside_Out_Networks_Watchport_H*'
- watchports = Dir.glob(myfoo)
- ap watchports
- watchports.each do |watchport|
- com_port = File.realpath(watchport)
- ap com_port
- re = Regexp.new('^.*_H_(.*)-if.*') # fixme
- serialnum = watchport.slice(re, 1) # fixme
- ap serialnum
- sql_insert(com_port, serialnum)
- end
- end
- sleep(1)
- end
- def sql_insert(com_port, desc_str)
- dbfile = ENV['USERPROFILE'] + '\Desktop\watchport.db' if is_windows
- dbfile = 'watchport.db' if is_linux
- db = SQLite3::Database.new(dbfile)
- sql = 'CREATE TABLE IF NOT EXISTS watchport '
- sql << '( wp_string TEXT, wp_port TEXT, temp TEXT, humid TEXT, tbuf DATE)'
- db.execute(sql)
- baud_rate = 9600
- data_bits = 8
- stop_bits = 1
- parity = SerialPort::NONE
- begin
- sp = SerialPort.new(com_port, baud_rate, data_bits, stop_bits, parity)
- rescue Errno::EACCES
- warn("Errno::EACCES for #{com_port}")
- return
- rescue StandardError => e
- print "e.class=>[#{e.class}] e.message=>[#{e.message}]\n"
- puts e.backtrace.join("\n")
- end
- sp.read_timeout = 3
- sp.write_timeout = 3 if is_windows
- sp.write("H\r")
- sleep(2)
- humid = sp.read.strip
- sp.close
- begin
- sp = SerialPort.new(com_port, baud_rate, data_bits, stop_bits, parity)
- rescue Errno::EACCES
- warn("Errno::EACCES for #{com_port}")
- return
- rescue StandardError => e
- print "e.class=>[#{e.class}] e.message=>[#{e.message}]\n"
- puts e.backtrace.join("\n")
- end
- sp.read_timeout = 3
- sp.write_timeout = 3 if is_windows
- sp.write("TF\r")
- sleep(2)
- temp = sp.read.strip
- sp.close
- t = Time.now
- # d = SQLite3::Database.quote(datetime('now'))
- # SQLite3::Blob.new( "\0\1\2\3\4\5" ),
- sql = 'insert into watchport values ( ?, ?, ?, ?, ? )'
- db.execute(sql, desc_str, com_port, temp, humid, t.to_s)
- db.execute('select count(*),* from watchport') do |row|
- p row
- end
- db.close
- end
- begin
- # db.execute( "drop table if exists watchport" )
- loop do
- com_sniff
- sleep(60 * 2)
- end
- # usb_sniff
- rescue StandardError => e
- print "e.class=>[#{e.class}] e.message=>[#{e.message}]\n"
- puts e.backtrace.join("\n")
- sp.close
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement