Class: Gom::SensorPort

Inherits:
Object
  • Object
show all
Includes:
OAttr
Defined in:
lib/gom/sensor_port.rb

Constant Summary collapse

Log =

GOM default Logger instance

Gom::Logger.new
Defaults =
{
  :interface  => '0.0.0.0',
  :port       => 44470,
  :mode       => :udp,
  :verbose    => false,
}

Instance Method Summary collapse

Constructor Details

#initialize(path, options = {}) ⇒ SensorPort

Returns a new instance of SensorPort.



21
22
23
24
25
26
27
28
# File 'lib/gom/sensor_port.rb', line 21

def initialize path, options = {}
  @path = path
  @options = Defaults.merge(find_gom_node @path).merge(options)
  #puts " -- new sensor port: #{self.inspect}"

  verbose? and (Log.level = ::Logger::DEBUG)
  Log.info "new sensor port: #{self.inspect}"
end

Instance Method Details

#dispatch_sensor_message(line, source = nil) ⇒ Object



55
56
57
58
59
60
61
62
63
# File 'lib/gom/sensor_port.rb', line 55

def dispatch_sensor_message line, source = nil
  line.strip!
  Log.debug "-->#{line}<-- #{source.inspect}"
  key, value = (line.split /\s*[:=]\s*/)
  value.nil? or value.strip!
  # TODO: val might need type conversion
  Gom::Remote.connection.write "#{@path}:raw", line
  Gom::Remote.connection.write "#{@path}/values:#{key}", value
end

#find_gom_node(path) ⇒ Object

TODO: temporarily here from gom-script



66
67
68
69
70
71
72
73
74
75
76
# File 'lib/gom/sensor_port.rb', line 66

def find_gom_node path
  json = (Gom::Remote.connection.read "#{path}.json")
  (JSON.parse json)["node"]["entries"].select do |entry|
    # 1. select attribute entries
    entry.has_key? "attribute"
  end.inject({}) do |h, a|
      # 2. make it a key, value list
      h[a["attribute"]["name"].to_sym] = a["attribute"]["value"]
      h
  end
end

#listenObject



34
35
36
37
38
# File 'lib/gom/sensor_port.rb', line 34

def listen
  #puts " -- listen: #{self.inspect}"
  Log.info "listen: #{self.inspect}"
  self.send "listen_#{mode}"
end

#listen_tcpObject



51
52
53
# File 'lib/gom/sensor_port.rb', line 51

def listen_tcp
  raise "not yet implemented"
end

#listen_udpObject



40
41
42
43
44
45
46
47
48
49
# File 'lib/gom/sensor_port.rb', line 40

def listen_udp
  socket = UDPSocket.new
  socket.bind(interface, port)
  loop do
    line, source = socket.recvfrom(1024)
    dispatch_sensor_message line, source
  end
ensure
  socket.close rescue nil
end

#verbose?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/gom/sensor_port.rb', line 30

def verbose?
  @options[:verbose] || @options[:v]
end