ledenet_api 1.1.2 → 1.2.1
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 +4 -4
- data/bin/ledenet-ufo +40 -8
- data/lib/ledenet/api.rb +9 -0
- data/lib/ledenet/functions.rb +30 -0
- data/lib/ledenet/packets/empty_response.rb +1 -2
- data/lib/ledenet/packets/set_function_request.rb +39 -0
- data/lib/ledenet/packets/status_response.rb +2 -2
- data/lib/ledenet/version.rb +1 -1
- data/lib/ledenet_api.rb +1 -0
- metadata +4 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6b35153c257762f08c7ddfe36ec752d8a31ab43a
         | 
| 4 | 
            +
              data.tar.gz: 8db99c674a748d3ed59154a186f9591c7be052a0
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 3a41d1078922bdf008dc686a1c9f24fb19a5feb3c7cad107fb74fbf249926f94b66c43e56f529db4b75c6c5d635ca453e6dcaf8b5822a535e8ab7bc126479b3f
         | 
| 7 | 
            +
              data.tar.gz: c20ff4d69afba7a115c750727399211c7c92a93a91147eff469a4ea760bb4a75bd1700b9e791e4e41e0909256229dabeb8de19069bc1c346aa10f5446ed59342
         | 
    
        data/bin/ledenet-ufo
    CHANGED
    
    | @@ -53,7 +53,7 @@ opts = OptionParser.new do |opts| | |
| 53 53 | 
             
                options[:on?] = false
         | 
| 54 54 | 
             
              end
         | 
| 55 55 |  | 
| 56 | 
            -
              opts.on("-l", "--list",  | 
| 56 | 
            +
              opts.on("-l", "--list", "Prints a list of available devices and exits") do |v|
         | 
| 57 57 | 
             
                options[:list] = true
         | 
| 58 58 | 
             
              end
         | 
| 59 59 |  | 
| @@ -64,6 +64,24 @@ opts = OptionParser.new do |opts| | |
| 64 64 | 
             
              opts.on("-h", "--help", "Prints this help message") do
         | 
| 65 65 | 
             
                options[:print_help?] = true
         | 
| 66 66 | 
             
              end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              opts.on("--function-id [VALUE]", Integer, "Set function id to VALUE") do |v|
         | 
| 69 | 
            +
                options[:function] = v
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
              opts.on("-f", "--function [VALUE]", "Set function to VALUE.") do |v|
         | 
| 73 | 
            +
                if !LEDENET::Functions.const_defined?(v)
         | 
| 74 | 
            +
                  warn "Unknown function type: #{v}. Valid function types: \n\t" <<
         | 
| 75 | 
            +
                       "#{LEDENET::Functions.all_functions.join("\n\t")}"
         | 
| 76 | 
            +
                  exit 1
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                options[:function] = LEDENET::Functions.const_get(v)
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
              opts.on("-p", "--speed [VALUE]", Integer, "Set function speed to VALUE") do |v|
         | 
| 83 | 
            +
                options[:speed] = v
         | 
| 84 | 
            +
              end
         | 
| 67 85 | 
             
            end
         | 
| 68 86 |  | 
| 69 87 | 
             
            opts.parse!
         | 
| @@ -73,14 +91,20 @@ if options[:print_help?] || options.empty? | |
| 73 91 | 
             
              exit 0
         | 
| 74 92 | 
             
            end
         | 
| 75 93 |  | 
| 94 | 
            +
            if options[:list] && options.count > 1
         | 
| 95 | 
            +
              warn "--list is incompatible with other options!\n\n"
         | 
| 96 | 
            +
              warn opts
         | 
| 97 | 
            +
              exit 1
         | 
| 98 | 
            +
            end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            if options[:function].nil? != options[:speed].nil?
         | 
| 101 | 
            +
              warn "--funciton and --speed must be specified together. You provide " <<
         | 
| 102 | 
            +
                   "one without also providing the other."
         | 
| 103 | 
            +
              exit 1
         | 
| 104 | 
            +
            end
         | 
| 105 | 
            +
             | 
| 76 106 | 
             
            begin
         | 
| 77 107 | 
             
              if options[:list]
         | 
| 78 | 
            -
                if options.count > 1
         | 
| 79 | 
            -
                  warn "--list is incompatible with other options!\n\n"
         | 
| 80 | 
            -
                  warn opts
         | 
| 81 | 
            -
                  exit 1
         | 
| 82 | 
            -
                end
         | 
| 83 | 
            -
             | 
| 84 108 | 
             
                devices = LEDENET.discover_devices(expected_devices: 1000)
         | 
| 85 109 |  | 
| 86 110 | 
             
                row_format = "%16s %18s %20s\n"
         | 
| @@ -111,7 +135,15 @@ begin | |
| 111 135 | 
             
                api = LEDENET::Api.new(ip)
         | 
| 112 136 |  | 
| 113 137 | 
             
                api.set_power(options[:on?]) unless options[:on?].nil?
         | 
| 114 | 
            -
             | 
| 138 | 
            +
             | 
| 139 | 
            +
                color_params = options.select do |k,_|
         | 
| 140 | 
            +
                  %w{red green blue warm_white}.include?(k.to_s)
         | 
| 141 | 
            +
                end
         | 
| 142 | 
            +
                api.update_color_data(color_params) unless color_params.empty?
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                if options[:function] && options[:speed]
         | 
| 145 | 
            +
                  api.update_function(options[:function], options[:speed])
         | 
| 146 | 
            +
                end
         | 
| 115 147 |  | 
| 116 148 | 
             
                if options[:print_status?]
         | 
| 117 149 | 
             
                  status = api.current_color_data
         | 
    
        data/lib/ledenet/api.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            require 'ledenet/packets/set_power_request'
         | 
| 2 2 | 
             
            require 'ledenet/packets/status_request'
         | 
| 3 3 | 
             
            require 'ledenet/packets/update_color_request'
         | 
| 4 | 
            +
            require 'ledenet/packets/set_function_request'
         | 
| 4 5 |  | 
| 5 6 | 
             
            module LEDENET
         | 
| 6 7 | 
             
              class Api
         | 
| @@ -60,6 +61,14 @@ module LEDENET | |
| 60 61 | 
             
                  Hash[color_data]
         | 
| 61 62 | 
             
                end
         | 
| 62 63 |  | 
| 64 | 
            +
                def update_function(fn, speed)
         | 
| 65 | 
            +
                  if fn.is_a?(String) or fn.is_a?(Symbol)
         | 
| 66 | 
            +
                    fn = LEDENET::Functions.const_get(fn.upcase)
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  send_packet(LEDENET::Packets::SetFunctionRequest.new(function_id: fn, speed: speed))
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 63 72 | 
             
                def reconnect!
         | 
| 64 73 | 
             
                  create_socket
         | 
| 65 74 | 
             
                  true
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            module LEDENET
         | 
| 2 | 
            +
              module Functions
         | 
| 3 | 
            +
                VALUES = [
         | 
| 4 | 
            +
                  SEVEN_COLOR_CROSS_FADE = 0x25,
         | 
| 5 | 
            +
                  RED_GRADUAL_CHANGE = 0x26,
         | 
| 6 | 
            +
                  GREEN_GRADUAL_CHANGE = 0x27,
         | 
| 7 | 
            +
                  BLUE_GRADUAL_CHANGE = 0x28,
         | 
| 8 | 
            +
                  YELLOW_GRADUAL_CHANGE = 0x29,
         | 
| 9 | 
            +
                  CYAN_GRADUAL_CHANGE = 0x2A,
         | 
| 10 | 
            +
                  PURPLE_GRADUAL_CHANGE = 0x2B,
         | 
| 11 | 
            +
                  WHITE_GRADUAL_CHANGE = 0x2C,
         | 
| 12 | 
            +
                  RED_GREEN_CROSS_FADE = 0x2D,
         | 
| 13 | 
            +
                  RED_BLUE_CROSS_FADE = 0x2E,
         | 
| 14 | 
            +
                  GREEN_BLUE_CROSS_FADE = 0x2F,
         | 
| 15 | 
            +
                  SEVEN_COLOR_STROBE_FLASH = 0x30,
         | 
| 16 | 
            +
                  RED_STROBE_FLASH = 0x31,
         | 
| 17 | 
            +
                  GREEN_STROBE_FLASH = 0x32,
         | 
| 18 | 
            +
                  BLUE_STROBE_FLASH = 0x33,
         | 
| 19 | 
            +
                  YELLOW_STROBE_FLASH = 0x34,
         | 
| 20 | 
            +
                  CYAN_STROBE_FLASH = 0x35,
         | 
| 21 | 
            +
                  PURPLE_STROBE_FLASH = 0x36,
         | 
| 22 | 
            +
                  WHITE_STROBE_FLASH = 0x37,
         | 
| 23 | 
            +
                  SEVEN_COLOR_JUMPING_CHANGE = 0x38
         | 
| 24 | 
            +
                ]
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def self.all_functions
         | 
| 27 | 
            +
                  LEDENET::Functions.constants.reject { |x| x == :VALUES }
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -0,0 +1,39 @@ | |
| 1 | 
            +
            require 'bindata'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'ledenet/packets/fields/checksum'
         | 
| 4 | 
            +
            require 'ledenet/packets/empty_response'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module LEDENET::Packets
         | 
| 7 | 
            +
              class SetFunctionRequest < BinData::Record
         | 
| 8 | 
            +
                VALID_SPEED_RANGE = (0..100)
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                # Speed value is in [0x00, 0x20], with 0x00 being the fastest.
         | 
| 11 | 
            +
                PACKET_SPEED_RANGE = (0x00..0x20)
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                hide :checksum
         | 
| 14 | 
            +
                mandatory_parameter :function_id
         | 
| 15 | 
            +
                mandatory_parameter :speed
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                uint8 :packet_id, value: 0x61
         | 
| 18 | 
            +
                uint8 :function_id_val, value: ->() { function_id }
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                uint8 :speed_val, value: ->() do
         | 
| 21 | 
            +
                  if !VALID_SPEED_RANGE.include?(speed)
         | 
| 22 | 
            +
                    raise "Speed should be between #{VALID_SPEED_RANGE.min} and #{VALID_SPEED_RANGE.max}"
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  scaled_speed = (speed / (VALID_SPEED_RANGE.max / PACKET_SPEED_RANGE.max)).round
         | 
| 26 | 
            +
                  scaled_speed = [PACKET_SPEED_RANGE.min, scaled_speed].max
         | 
| 27 | 
            +
                  scaled_speed = [PACKET_SPEED_RANGE.max, scaled_speed].min
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  PACKET_SPEED_RANGE.max - scaled_speed
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                uint8 :remote_or_local, value: 0x0F
         | 
| 33 | 
            +
                checksum :checksum, packet_data: ->() { snapshot }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def response_reader
         | 
| 36 | 
            +
                  LEDENET::Packets::EmptyResponse
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
            end
         | 
| @@ -4,7 +4,7 @@ require 'ledenet/packets/fields/checksum' | |
| 4 4 |  | 
| 5 5 | 
             
            module LEDENET::Packets
         | 
| 6 6 | 
             
              class StatusResponse < BinData::Record
         | 
| 7 | 
            -
                hide :checksum | 
| 7 | 
            +
                hide :checksum
         | 
| 8 8 |  | 
| 9 9 | 
             
                uint8 :packet_id, value: 0x81
         | 
| 10 10 | 
             
                uint8 :device_name
         | 
| @@ -21,7 +21,7 @@ module LEDENET::Packets | |
| 21 21 | 
             
                uint8 :blue
         | 
| 22 22 | 
             
                uint8 :warm_white
         | 
| 23 23 |  | 
| 24 | 
            -
                uint16be :unused_payload | 
| 24 | 
            +
                uint16be :unused_payload
         | 
| 25 25 | 
             
                uint8 :checksum
         | 
| 26 26 |  | 
| 27 27 | 
             
                def on?
         | 
    
        data/lib/ledenet/version.rb
    CHANGED
    
    
    
        data/lib/ledenet_api.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ledenet_api
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.1 | 
| 4 | 
            +
              version: 1.2.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Christopher Mullins
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-05-01 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bindata
         | 
| @@ -98,8 +98,10 @@ files: | |
| 98 98 | 
             
            - ledenet_api.gemspec
         | 
| 99 99 | 
             
            - lib/ledenet/api.rb
         | 
| 100 100 | 
             
            - lib/ledenet/device_discovery.rb
         | 
| 101 | 
            +
            - lib/ledenet/functions.rb
         | 
| 101 102 | 
             
            - lib/ledenet/packets/empty_response.rb
         | 
| 102 103 | 
             
            - lib/ledenet/packets/fields/checksum.rb
         | 
| 104 | 
            +
            - lib/ledenet/packets/set_function_request.rb
         | 
| 103 105 | 
             
            - lib/ledenet/packets/set_power_request.rb
         | 
| 104 106 | 
             
            - lib/ledenet/packets/status_request.rb
         | 
| 105 107 | 
             
            - lib/ledenet/packets/status_response.rb
         |