yamaha 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f14111abebd3540efa54a52c6f3ceef20b5217879c6df1aa57e1aa293fea037
4
- data.tar.gz: e8142bbe221620dc2d0e86a831fb58d5a21ef4c3099a08d05e674271ecefbe29
3
+ metadata.gz: '0188bdf2202b494dbd4c2891306a12669720b67a682e8a453b09ee83ea8a5429'
4
+ data.tar.gz: d4eac8f6cb79c9e9e2dffc435d6a01dd5b644b2ffcb10cfb05dc6d1dca20fadc
5
5
  SHA512:
6
- metadata.gz: 3bb84d02c1209763e280e294b5049c89b77e7518d11a131fc641acf0a030cc20dac6334db079064cb183a159a7d47b611b6638ac39f4056b4a902dd8dda6d79f
7
- data.tar.gz: d677cba18bbd2c20f2d89c7902a5f1f82669635038709d3e551ea07e2d6f2f435856a68932c36c1603e3ee49a1b1dd5d3d6bc2d7c18b723eead3c58ad3b6b13d
6
+ metadata.gz: 99bbf9e9df184abeba408745ff4bf965138073f02ee1beb49db937ffd0460415c5c272472275b3cb83cde20341377f653a4c88af1a7e06f2a1b8611b22bd8297
7
+ data.tar.gz: 217919ae3985b8b746e310cfb017f613a5c26c1fb7f9c2012c8a2093675d4c749bb777d6f64a26fe36a629de3861ae7f29941d08ad961305031b991153b71c6f
data/bin/yamaha-web ADDED
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'yamaha/app'
5
+ rescue LoadError
6
+ $: << File.join(File.dirname(__FILE__), '../lib')
7
+ require 'yamaha/app'
8
+ end
9
+ require 'optparse'
10
+ require 'logger'
11
+
12
+ options = {}
13
+ OptionParser.new do |opts|
14
+ opts.banner = "Usage: yamaha-web [-d device] [-- rackup-options...]"
15
+
16
+ opts.on("-d", "--device DEVICE", "TTY to use (default autodetect)") do |v|
17
+ options[:device] = v
18
+ end
19
+
20
+ opts.separator ''
21
+ opts.separator 'To see rackup options: yamaha-web -- -h'
22
+ end.parse!
23
+
24
+ logger = Logger.new(STDERR)
25
+
26
+ #Yamaha::App.set :device, options[:device]
27
+ #Yamaha::App.set :logger, logger
28
+ Yamaha::App.set :client, Yamaha::Client.new(options[:device], logger: logger)
29
+
30
+ options = Rack::Server::Options.new.parse!(ARGV)
31
+ Rack::Server.start(options.merge(app: Yamaha::App))
data/lib/yamaha/app.rb ADDED
@@ -0,0 +1,54 @@
1
+ require 'sinatra/base'
2
+ require 'yamaha/utils'
3
+ require 'yamaha/client'
4
+
5
+ module Yamaha
6
+ class App < Sinatra::Base
7
+
8
+ set :device, nil
9
+ set :logger, nil
10
+ set :client, nil
11
+
12
+ get '/power' do
13
+ render_json(client.last_status.fetch(:power) > 0)
14
+ end
15
+
16
+ %w(main zone2 zone3).each do |zone|
17
+ get "/#{zone}/power" do
18
+ render_json(client.last_status.fetch(:"#{zone}_power"))
19
+ end
20
+
21
+ put "/#{zone}/power" do
22
+ state = Utils.parse_on_off(request.body.read)
23
+ client.public_send("set_#{zone}_power", state)
24
+ empty_response
25
+ end
26
+
27
+ get '/#{zone}/volume' do
28
+ render_json(client.public_send("get_#{zone}_volume"))
29
+ end
30
+
31
+ put '/#{zone}/volume' do
32
+ value = Float(request.body.read)
33
+ client.public_send("set_#{zone}_volume_db", value)
34
+ empty_response
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def client
41
+ settings.client || begin
42
+ @client ||= Yamaha::Client.new(settings.device, logger: settings.logger)
43
+ end
44
+ end
45
+
46
+ def render_json(data)
47
+ data.to_json
48
+ end
49
+
50
+ def empty_response
51
+ render_json({})
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,15 @@
1
+ module Yamaha
2
+ module Utils
3
+
4
+ module_function def parse_on_off(value)
5
+ case value&.downcase
6
+ when '1', 'on', 'yes', 'true'
7
+ true
8
+ when '0', 'off', 'no', 'false'
9
+ false
10
+ else
11
+ raise ArgumentError, "Invalid on/off value: #{value}"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yamaha
4
- VERSION = -'0.0.2'
4
+ VERSION = -'0.0.3'
5
5
  end
data/yamaha.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "yamaha"
5
- spec.version = '0.0.2'
5
+ spec.version = '0.0.3'
6
6
  spec.authors = ['Oleg Pudeyev']
7
7
  spec.email = ['code@olegp.name']
8
8
  spec.summary = %q{Yamaha Receiver Serial Control Interface}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yamaha
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oleg Pudeyev
@@ -15,16 +15,20 @@ email:
15
15
  - code@olegp.name
16
16
  executables:
17
17
  - yamaha
18
+ - yamaha-web
18
19
  extensions: []
19
20
  extra_rdoc_files: []
20
21
  files:
21
22
  - LICENSE
22
23
  - README.md
23
24
  - bin/yamaha
25
+ - bin/yamaha-web
24
26
  - lib/yamaha.rb
27
+ - lib/yamaha/app.rb
25
28
  - lib/yamaha/backend/ffi.rb
26
29
  - lib/yamaha/backend/serial_port.rb
27
30
  - lib/yamaha/client.rb
31
+ - lib/yamaha/utils.rb
28
32
  - lib/yamaha/version.rb
29
33
  - yamaha.gemspec
30
34
  homepage: https://github.com/p/yamaha-ruby