Class: Oschii::Device
- Inherits:
-
Object
- Object
- Oschii::Device
- Defined in:
- lib/oschii/device.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#log_lines ⇒ Object
readonly
Returns the value of attribute log_lines.
Instance Method Summary collapse
- #clear! ⇒ Object
- #clear_log ⇒ Object
- #config ⇒ Object
- #config=(hash) ⇒ Object
- #config_description ⇒ Object
- #config_name ⇒ Object
- #description ⇒ Object
- #device_details ⇒ Object
-
#initialize ⇒ Device
constructor
A new instance of Device.
- #inspect ⇒ Object
- #ip ⇒ Object
-
#log ⇒ Object
Logging.
- #logger(params = {}) ⇒ Object
- #name ⇒ Object
- #name=(new_name) ⇒ Object
- #poke ⇒ Object
- #poke! ⇒ Object
-
#raw_config ⇒ Object
Configuration.
- #raw_config=(json) ⇒ Object
-
#raw_device_details ⇒ Object
Device details.
-
#raw_settings ⇒ Object
Settings.
-
#raw_status ⇒ Object
Status.
-
#refresh ⇒ Object
Connection.
- #restart ⇒ Object
- #save_config(filename = nil, silent: false) ⇒ Object
- #settings ⇒ Object
- #settings=(new_settings) ⇒ Object
- #status ⇒ Object
- #tail(filter: nil) ⇒ Object
- #update! ⇒ Object
- #upload_config(filename = nil, silent: false) ⇒ Object
- #uptime ⇒ Object
- #version ⇒ Object
Constructor Details
#initialize ⇒ Device
Returns a new instance of Device.
15 16 17 18 |
# File 'lib/oschii/device.rb', line 15 def initialize @log_lines = [] refresh end |
Instance Attribute Details
#log_lines ⇒ Object (readonly)
Returns the value of attribute log_lines.
20 21 22 |
# File 'lib/oschii/device.rb', line 20 def log_lines @log_lines end |
Instance Method Details
#clear! ⇒ Object
152 153 154 |
# File 'lib/oschii/device.rb', line 152 def clear! self.config = {} end |
#clear_log ⇒ Object
201 202 203 |
# File 'lib/oschii/device.rb', line 201 def clear_log raise NoConnection end |
#config ⇒ Object
148 149 150 |
# File 'lib/oschii/device.rb', line 148 def config @config ||= Oschii::Config.new(raw_config) end |
#config=(hash) ⇒ Object
144 145 146 |
# File 'lib/oschii/device.rb', line 144 def config=(hash) self.raw_config = hash.to_json end |
#config_description ⇒ Object
102 103 104 |
# File 'lib/oschii/device.rb', line 102 def config_description device_details['configDescription'] end |
#config_name ⇒ Object
98 99 100 |
# File 'lib/oschii/device.rb', line 98 def config_name device_details['configName'] end |
#description ⇒ Object
94 95 96 |
# File 'lib/oschii/device.rb', line 94 def description device_details['description'] end |
#device_details ⇒ Object
77 78 79 |
# File 'lib/oschii/device.rb', line 77 def device_details @device_details ||= JSON.parse(raw_device_details) end |
#inspect ⇒ Object
251 252 253 |
# File 'lib/oschii/device.rb', line 251 def inspect "<#{self.class.name}[#{name}] (v#{version})>" end |
#log ⇒ Object
Logging
197 198 199 |
# File 'lib/oschii/device.rb', line 197 def log raise NoConnection end |
#logger(params = {}) ⇒ Object
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 |
# File 'lib/oschii/device.rb', line 216 def logger(params = {}) current_logger = settings['logger'] all = params[:all] sensors = all.nil? ? params[:sensors] : all drivers = all.nil? ? params[:drivers] : all monitors = all.nil? ? params[:monitors] : all listeners = all.nil? ? params[:listeners] : all states = all.nil? ? params[:states] : all timers = all.nil? ? params[:timers] : all subs = all.nil? ? params[:subs] : all pixels = all.nil? ? params[:pixels] : all network_in = all.nil? ? params[:network_in] : all network_out = all.nil? ? params[:network_out] : all = params[:timestamp] to_file = params[:to_file] current_logger['sensors'] = sensors unless sensors.nil? current_logger['drivers'] = drivers unless drivers.nil? current_logger['monitors'] = monitors unless monitors.nil? current_logger['listeners'] = listeners unless listeners.nil? current_logger['states'] = states unless states.nil? current_logger['timers'] = timers unless timers.nil? current_logger['subs'] = subs unless subs.nil? current_logger['pixels'] = pixels unless pixels.nil? current_logger['networkIn'] = network_in unless network_in.nil? current_logger['networkOut'] = network_out unless network_out.nil? current_logger['timestamp'] = unless .nil? current_logger['logToFile'] = to_file unless to_file.nil? update_settings({ 'logger' => current_logger }) current_logger = settings['logger'] puts JSON.pretty_generate current_logger end |
#name ⇒ Object
85 86 87 |
# File 'lib/oschii/device.rb', line 85 def name device_details['name'] end |
#name=(new_name) ⇒ Object
89 90 91 92 |
# File 'lib/oschii/device.rb', line 89 def name=(new_name) self.settings = ({ name: new_name }) refresh end |
#poke! ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/oschii/device.rb', line 44 def poke! remaining_attempts = 3 while remaining_attempts > 0 begin if poke # device_details return true end return false rescue RubySerial::Error => e raise DeviceUnavailable, case e. when 'ENOENT' '(no device)' when 'EBUSY' '(port in use)' else e. end rescue RestClient::Exception => e raise DeviceUnavailable, e. end remaining_attempts -= 1 end raise DeviceUnavailable, '(no response)' end |
#raw_config ⇒ Object
Configuration
136 137 138 |
# File 'lib/oschii/device.rb', line 136 def raw_config raise NoConnection end |
#raw_config=(json) ⇒ Object
140 141 142 |
# File 'lib/oschii/device.rb', line 140 def raw_config=(json) raise NoConnection end |
#raw_device_details ⇒ Object
Device details
73 74 75 |
# File 'lib/oschii/device.rb', line 73 def raw_device_details raise NoConnection end |
#raw_settings ⇒ Object
Settings
122 123 124 |
# File 'lib/oschii/device.rb', line 122 def raw_settings raise NoConnection end |
#raw_status ⇒ Object
Status
108 109 110 |
# File 'lib/oschii/device.rb', line 108 def raw_status raise NoConnection end |
#refresh ⇒ Object
Connection
28 29 30 31 32 33 34 |
# File 'lib/oschii/device.rb', line 28 def refresh @device_details = nil @status = nil @settings = nil @config = nil poke! end |
#restart ⇒ Object
22 23 24 |
# File 'lib/oschii/device.rb', line 22 def restart raise NoConnection end |
#save_config(filename = nil, silent: false) ⇒ Object
189 190 191 192 193 |
# File 'lib/oschii/device.rb', line 189 def save_config(filename = nil, silent: false) filename ||= "configs/#{name}_#{Time.now.iso8601}.json" File.write filename, JSON.pretty_generate(config) puts "Saved #{filename.split('/')[-1]}" unless silent end |
#settings ⇒ Object
130 131 132 |
# File 'lib/oschii/device.rb', line 130 def settings @settings ||= JSON.parse(raw_settings) end |
#settings=(new_settings) ⇒ Object
126 127 128 |
# File 'lib/oschii/device.rb', line 126 def settings=(new_settings) raise NoConnection end |
#status ⇒ Object
112 113 114 |
# File 'lib/oschii/device.rb', line 112 def status @status ||= JSON.parse(raw_status) end |
#tail(filter: nil) ⇒ Object
205 206 207 208 209 210 211 212 213 214 |
# File 'lib/oschii/device.rb', line 205 def tail(filter: nil) while true while (line = log_lines.shift) if filter.nil? || line.match?(filter) puts line end end sleep 0.05 end end |
#update! ⇒ Object
156 157 158 |
# File 'lib/oschii/device.rb', line 156 def update! self.config = config.compacted end |
#upload_config(filename = nil, silent: false) ⇒ Object
160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/oschii/device.rb', line 160 def upload_config(filename = nil, silent: false) if filename.nil? filenames = Dir.glob("configs/#{name}_*.json") if filenames.empty? puts 'No previous config' unless silent return end filename = filenames.sort.last unless silent display_name = filename.split('/')[-1] .split('_')[-1] .split('+')[0] .gsub('T', ' ') .gsub('.json', '') puts "Latest: #{display_name}" begin prompt '>> [ENTER] to upload, [ESC] to cancel <<' rescue CancelSerialQuery return end end end self.config = JSON.parse File.read(filename) self end |
#uptime ⇒ Object
116 117 118 |
# File 'lib/oschii/device.rb', line 116 def uptime status['uptime'] end |
#version ⇒ Object
81 82 83 |
# File 'lib/oschii/device.rb', line 81 def version device_details['version'] end |