balboa_worldwide_app 1.3.0 → 2.0.0
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/exe/bwa_client +41 -0
- data/exe/bwa_mqtt_bridge +394 -0
- data/{bin → exe}/bwa_proxy +3 -2
- data/{bin → exe}/bwa_server +3 -2
- data/lib/balboa_worldwide_app.rb +3 -1
- data/lib/bwa/client.rb +121 -91
- data/lib/bwa/crc.rb +3 -1
- data/lib/bwa/discovery.rb +18 -17
- data/lib/bwa/logger.rb +9 -7
- data/lib/bwa/message.rb +67 -53
- data/lib/bwa/messages/configuration.rb +3 -1
- data/lib/bwa/messages/configuration_request.rb +3 -1
- data/lib/bwa/messages/control_configuration.rb +12 -9
- data/lib/bwa/messages/control_configuration_request.rb +13 -11
- data/lib/bwa/messages/filter_cycles.rb +50 -22
- data/lib/bwa/messages/ready.rb +3 -1
- data/lib/bwa/messages/{set_temperature.rb → set_target_temperature.rb} +5 -3
- data/lib/bwa/messages/set_temperature_scale.rb +5 -3
- data/lib/bwa/messages/set_time.rb +4 -2
- data/lib/bwa/messages/status.rb +51 -44
- data/lib/bwa/messages/toggle_item.rb +29 -27
- data/lib/bwa/proxy.rb +17 -18
- data/lib/bwa/server.rb +16 -14
- data/lib/bwa/version.rb +3 -1
- metadata +70 -24
- data/bin/bwa_client +0 -43
- data/bin/bwa_mqtt_bridge +0 -614
    
        data/lib/bwa/server.rb
    CHANGED
    
    | @@ -1,6 +1,8 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
            require  | 
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require "socket"
         | 
| 4 | 
            +
            require "bwa/logger"
         | 
| 5 | 
            +
            require "bwa/message"
         | 
| 4 6 |  | 
| 5 7 | 
             
            module BWA
         | 
| 6 8 | 
             
              class Server
         | 
| @@ -12,18 +14,15 @@ module BWA | |
| 12 14 | 
             
                def run
         | 
| 13 15 | 
             
                  loop do
         | 
| 14 16 | 
             
                    socket = @listen_socket.accept
         | 
| 15 | 
            -
                     | 
| 16 | 
            -
                      run_client(socket)
         | 
| 17 | 
            -
                    #end
         | 
| 18 | 
            -
                    break
         | 
| 17 | 
            +
                    run_client(socket)
         | 
| 19 18 | 
             
                  end
         | 
| 20 19 | 
             
                end
         | 
| 21 20 |  | 
| 22 21 | 
             
                def send_message(socket, message)
         | 
| 23 22 | 
             
                  length = message.length + 2
         | 
| 24 | 
            -
                  full_message = "#{length.chr}#{message}".force_encoding(Encoding::ASCII_8BIT)
         | 
| 23 | 
            +
                  full_message = (+"#{length.chr}#{message}").force_encoding(Encoding::ASCII_8BIT)
         | 
| 25 24 | 
             
                  checksum = CRC.checksum(full_message)
         | 
| 26 | 
            -
                  socket.send("\x7e#{full_message}#{checksum.chr}\x7e".force_encoding(Encoding::ASCII_8BIT), 0)
         | 
| 25 | 
            +
                  socket.send((+"\x7e#{full_message}#{checksum.chr}\x7e").force_encoding(Encoding::ASCII_8BIT), 0)
         | 
| 27 26 | 
             
                end
         | 
| 28 27 |  | 
| 29 28 | 
             
                def run_client(socket)
         | 
| @@ -31,9 +30,10 @@ module BWA | |
| 31 30 |  | 
| 32 31 | 
             
                  send_status(socket)
         | 
| 33 32 | 
             
                  loop do
         | 
| 34 | 
            -
                    if  | 
| 33 | 
            +
                    if socket.wait_readable(1)
         | 
| 35 34 | 
             
                      data = socket.recv(128)
         | 
| 36 35 | 
             
                      break if data.empty?
         | 
| 36 | 
            +
             | 
| 37 37 | 
             
                      begin
         | 
| 38 38 | 
             
                        message = Message.parse(data)
         | 
| 39 39 | 
             
                        BWA.logger.info BWA.raw2str(message.raw_data)
         | 
| @@ -44,10 +44,10 @@ module BWA | |
| 44 44 | 
             
                          send_configuration(socket)
         | 
| 45 45 | 
             
                        when Messages::ControlConfigurationRequest
         | 
| 46 46 | 
             
                          message.type == 1 ? send_control_configuration(socket) : send_control_configuration2(socket)
         | 
| 47 | 
            -
                        when Messages:: | 
| 47 | 
            +
                        when Messages::SetTargetTemperature
         | 
| 48 48 | 
             
                          temperature = message.temperature
         | 
| 49 49 | 
             
                          temperature /= 2.0 if @status.temperature_scale == :celsius
         | 
| 50 | 
            -
                          @status. | 
| 50 | 
            +
                          @status.target_temperature = temperature
         | 
| 51 51 | 
             
                        when Messages::SetTemperatureScale
         | 
| 52 52 | 
             
                          @status.temperature_scale = message.scale
         | 
| 53 53 | 
             
                        when Messages::ToggleItem
         | 
| @@ -80,11 +80,13 @@ module BWA | |
| 80 80 | 
             
                end
         | 
| 81 81 |  | 
| 82 82 | 
             
                def send_configuration(socket)
         | 
| 83 | 
            -
                  send_message(socket, | 
| 83 | 
            +
                  send_message(socket,
         | 
| 84 | 
            +
                               "\x0a\xbf\x94\x02\x02\x80\x00\x15\x27\x10\xab\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x27\xff\xff\x10\xab\xd2") # rubocop:disable Layout/LineLength
         | 
| 84 85 | 
             
                end
         | 
| 85 86 |  | 
| 86 87 | 
             
                def send_control_configuration(socket)
         | 
| 87 | 
            -
                  send_message(socket, | 
| 88 | 
            +
                  send_message(socket,
         | 
| 89 | 
            +
                               "\x0a\xbf\x24\x64\xdc\x11\x00\x42\x46\x42\x50\x32\x30\x20\x20\x01\x3d\x12\x38\x2e\x01\x0a\x04\x00")
         | 
| 88 90 | 
             
                end
         | 
| 89 91 |  | 
| 90 92 | 
             
                def send_control_configuration2(socket)
         | 
    
        data/lib/bwa/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,71 +1,71 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: balboa_worldwide_app
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 2.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Cody Cutrer
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 | 
            -
            bindir:  | 
| 9 | 
            +
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-12-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            -
              name:  | 
| 14 | 
            +
              name: ccutrer-serialport
         | 
| 15 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version:  | 
| 19 | 
            +
                    version: 1.0.0
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version:  | 
| 26 | 
            +
                    version: 1.0.0
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            -
              name:  | 
| 28 | 
            +
              name: digest-crc
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 31 | 
             
                - - "~>"
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: 0. | 
| 33 | 
            +
                    version: '0.4'
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 38 | 
             
                - - "~>"
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: 0. | 
| 40 | 
            +
                    version: '0.4'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            -
              name:  | 
| 42 | 
            +
              name: mqtt-homeassistant
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 44 | 
             
                requirements:
         | 
| 45 45 | 
             
                - - "~>"
         | 
| 46 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: 0. | 
| 47 | 
            +
                    version: '0.1'
         | 
| 48 48 | 
             
              type: :runtime
         | 
| 49 49 | 
             
              prerelease: false
         | 
| 50 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - "~>"
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: 0. | 
| 54 | 
            +
                    version: '0.1'
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            -
              name:  | 
| 56 | 
            +
              name: net-telnet-rfc2217
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 58 | 
             
                requirements:
         | 
| 59 59 | 
             
                - - "~>"
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version:  | 
| 61 | 
            +
                    version: 0.0.3
         | 
| 62 62 | 
             
              type: :runtime
         | 
| 63 63 | 
             
              prerelease: false
         | 
| 64 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 65 | 
             
                requirements:
         | 
| 66 66 | 
             
                - - "~>"
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version:  | 
| 68 | 
            +
                    version: 0.0.3
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 70 | 
             
              name: sd_notify
         | 
| 71 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -86,14 +86,14 @@ dependencies: | |
| 86 86 | 
             
                requirements:
         | 
| 87 87 | 
             
                - - "~>"
         | 
| 88 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version: ' | 
| 89 | 
            +
                    version: '11.0'
         | 
| 90 90 | 
             
              type: :development
         | 
| 91 91 | 
             
              prerelease: false
         | 
| 92 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 93 | 
             
                requirements:
         | 
| 94 94 | 
             
                - - "~>"
         | 
| 95 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                    version: ' | 
| 96 | 
            +
                    version: '11.0'
         | 
| 97 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 98 | 
             
              name: rake
         | 
| 99 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -108,17 +108,62 @@ dependencies: | |
| 108 108 | 
             
                - - "~>"
         | 
| 109 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 110 | 
             
                    version: '13.0'
         | 
| 111 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            +
              name: rubocop
         | 
| 113 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 | 
            +
                requirements:
         | 
| 115 | 
            +
                - - "~>"
         | 
| 116 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            +
                    version: '1.23'
         | 
| 118 | 
            +
              type: :development
         | 
| 119 | 
            +
              prerelease: false
         | 
| 120 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 | 
            +
                requirements:
         | 
| 122 | 
            +
                - - "~>"
         | 
| 123 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            +
                    version: '1.23'
         | 
| 125 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 126 | 
            +
              name: rubocop-performance
         | 
| 127 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 | 
            +
                requirements:
         | 
| 129 | 
            +
                - - "~>"
         | 
| 130 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            +
                    version: '1.12'
         | 
| 132 | 
            +
              type: :development
         | 
| 133 | 
            +
              prerelease: false
         | 
| 134 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 | 
            +
                requirements:
         | 
| 136 | 
            +
                - - "~>"
         | 
| 137 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            +
                    version: '1.12'
         | 
| 139 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 140 | 
            +
              name: rubocop-rake
         | 
| 141 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 142 | 
            +
                requirements:
         | 
| 143 | 
            +
                - - "~>"
         | 
| 144 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 145 | 
            +
                    version: '0.6'
         | 
| 146 | 
            +
              type: :development
         | 
| 147 | 
            +
              prerelease: false
         | 
| 148 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 149 | 
            +
                requirements:
         | 
| 150 | 
            +
                - - "~>"
         | 
| 151 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 152 | 
            +
                    version: '0.6'
         | 
| 111 153 | 
             
            description: 
         | 
| 112 154 | 
             
            email: cody@cutrer.com'
         | 
| 113 155 | 
             
            executables:
         | 
| 156 | 
            +
            - bwa_client
         | 
| 157 | 
            +
            - bwa_server
         | 
| 158 | 
            +
            - bwa_proxy
         | 
| 114 159 | 
             
            - bwa_mqtt_bridge
         | 
| 115 160 | 
             
            extensions: []
         | 
| 116 161 | 
             
            extra_rdoc_files: []
         | 
| 117 162 | 
             
            files:
         | 
| 118 | 
            -
            -  | 
| 119 | 
            -
            -  | 
| 120 | 
            -
            -  | 
| 121 | 
            -
            -  | 
| 163 | 
            +
            - exe/bwa_client
         | 
| 164 | 
            +
            - exe/bwa_mqtt_bridge
         | 
| 165 | 
            +
            - exe/bwa_proxy
         | 
| 166 | 
            +
            - exe/bwa_server
         | 
| 122 167 | 
             
            - lib/balboa_worldwide_app.rb
         | 
| 123 168 | 
             
            - lib/bwa/client.rb
         | 
| 124 169 | 
             
            - lib/bwa/crc.rb
         | 
| @@ -131,7 +176,7 @@ files: | |
| 131 176 | 
             
            - lib/bwa/messages/control_configuration_request.rb
         | 
| 132 177 | 
             
            - lib/bwa/messages/filter_cycles.rb
         | 
| 133 178 | 
             
            - lib/bwa/messages/ready.rb
         | 
| 134 | 
            -
            - lib/bwa/messages/ | 
| 179 | 
            +
            - lib/bwa/messages/set_target_temperature.rb
         | 
| 135 180 | 
             
            - lib/bwa/messages/set_temperature_scale.rb
         | 
| 136 181 | 
             
            - lib/bwa/messages/set_time.rb
         | 
| 137 182 | 
             
            - lib/bwa/messages/status.rb
         | 
| @@ -142,7 +187,8 @@ files: | |
| 142 187 | 
             
            homepage: https://github.com/ccutrer/bwa
         | 
| 143 188 | 
             
            licenses:
         | 
| 144 189 | 
             
            - MIT
         | 
| 145 | 
            -
            metadata: | 
| 190 | 
            +
            metadata:
         | 
| 191 | 
            +
              rubygems_mfa_required: 'true'
         | 
| 146 192 | 
             
            post_install_message: 
         | 
| 147 193 | 
             
            rdoc_options: []
         | 
| 148 194 | 
             
            require_paths:
         | 
| @@ -151,7 +197,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 151 197 | 
             
              requirements:
         | 
| 152 198 | 
             
              - - ">="
         | 
| 153 199 | 
             
                - !ruby/object:Gem::Version
         | 
| 154 | 
            -
                  version: ' | 
| 200 | 
            +
                  version: '2.5'
         | 
| 155 201 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 156 202 | 
             
              requirements:
         | 
| 157 203 | 
             
              - - ">="
         | 
    
        data/bin/bwa_client
    DELETED
    
    | @@ -1,43 +0,0 @@ | |
| 1 | 
            -
            #!/usr/bin/env ruby
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            require 'bwa/client'
         | 
| 4 | 
            -
            require 'bwa/discovery'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            def watch(spa)
         | 
| 7 | 
            -
              loop do
         | 
| 8 | 
            -
                begin
         | 
| 9 | 
            -
                  message = spa.poll
         | 
| 10 | 
            -
                  next if message.is_a?(BWA::Messages::Ready)
         | 
| 11 | 
            -
                  puts message.raw_data.unpack("H*").first.scan(/[0-9a-f]{2}/).join(' ')
         | 
| 12 | 
            -
                  puts message.inspect
         | 
| 13 | 
            -
                  if block_given?
         | 
| 14 | 
            -
                    break if yield
         | 
| 15 | 
            -
                  end
         | 
| 16 | 
            -
                rescue BWA::InvalidMessage => e
         | 
| 17 | 
            -
                  puts e.message
         | 
| 18 | 
            -
                  puts e.raw_data.unpack("H*").first.scan(/[0-9a-f]{2}/).join(' ')
         | 
| 19 | 
            -
                  break
         | 
| 20 | 
            -
                end
         | 
| 21 | 
            -
              end
         | 
| 22 | 
            -
            end
         | 
| 23 | 
            -
             | 
| 24 | 
            -
            if ARGV.empty?
         | 
| 25 | 
            -
              spas = BWA::Discovery.discover
         | 
| 26 | 
            -
              if spas.empty?
         | 
| 27 | 
            -
                $stderr.puts "Could not find spa!"
         | 
| 28 | 
            -
                exit 1
         | 
| 29 | 
            -
              end
         | 
| 30 | 
            -
              spa_ip = 'tcp://' + spas.first.first + '/'
         | 
| 31 | 
            -
            else
         | 
| 32 | 
            -
              spa_ip = ARGV[0]
         | 
| 33 | 
            -
            end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
            spa = BWA::Client.new(spa_ip)
         | 
| 36 | 
            -
             | 
| 37 | 
            -
            spa.request_configuration
         | 
| 38 | 
            -
            spa.request_control_info
         | 
| 39 | 
            -
            watch(spa) do
         | 
| 40 | 
            -
              spa.last_status
         | 
| 41 | 
            -
            end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
            watch(spa)
         |