teletask 0.0.2 → 0.1.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/lib/constants.rb +9 -1
- data/lib/request.rb +32 -30
- data/lib/response.rb +52 -26
- data/lib/teletask.rb +78 -70
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bf110c899a56469721c423745f3ef5c733db49a
|
4
|
+
data.tar.gz: 0eb0b4e397f907457ae01f881f94f4f4da9d5c93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 32ab75974fd417efb56248547e3e3ee2635ec7b00dfbe83e22d035a5d3f46e4b24b6ee7f318ac4a5437e295ed39f3f76e5a9f7469cfd61f8028c2d228fa9dd9e
|
7
|
+
data.tar.gz: 615974b959e61ab11055b0f8c854e574553e0999575614eb75c409d69d37254795c21c04a8766bbd4bd5bdc64ad492b00c501708a1ccaaf1f039c159418122d8
|
data/lib/constants.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
-
|
1
|
+
module TeletaskApi
|
2
|
+
module ConstantName
|
3
|
+
def name( val )
|
4
|
+
constants.find{ |name| const_get(name)==val }
|
5
|
+
end
|
6
|
+
end
|
2
7
|
module Command
|
8
|
+
extend ConstantName
|
3
9
|
SET = 7
|
4
10
|
GET = 6
|
5
11
|
GROUPSET = 9
|
@@ -10,6 +16,7 @@ class Teletask
|
|
10
16
|
end
|
11
17
|
|
12
18
|
module Function
|
19
|
+
extend ConstantName
|
13
20
|
RELAY = 1
|
14
21
|
DIMMER = 2
|
15
22
|
MOTOR = 6
|
@@ -26,6 +33,7 @@ class Teletask
|
|
26
33
|
end
|
27
34
|
|
28
35
|
module Setting
|
36
|
+
extend ConstantName
|
29
37
|
ON = 255
|
30
38
|
TOGGLE = 103
|
31
39
|
OFF = 0
|
data/lib/request.rb
CHANGED
@@ -1,37 +1,39 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
case command
|
8
|
-
when Teletask::Command::KEEPALIVE
|
9
|
-
when Teletask::Command::LOG
|
1
|
+
module TeletaskApi
|
2
|
+
class Request
|
3
|
+
START = 2
|
4
|
+
def initialize command, function = 0, number = 0, setting = nil
|
5
|
+
@command = command
|
10
6
|
@parameters = Array.new
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
7
|
+
|
8
|
+
case command
|
9
|
+
when Teletask::Command::KEEPALIVE
|
10
|
+
when Teletask::Command::LOG
|
11
|
+
@parameters = Array.new
|
12
|
+
@parameters[0] = function
|
13
|
+
@parameters[1] = number
|
14
|
+
else
|
15
|
+
@parameters[0] = 1 #central number
|
16
|
+
@parameters[1] = function
|
17
|
+
@parameters[2] = 0 #byte1
|
18
|
+
@parameters[3] = number #byte2
|
19
|
+
@parameters[4] = setting if setting != nil
|
20
|
+
end
|
19
21
|
end
|
20
|
-
end
|
21
22
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
23
|
+
def to_s
|
24
|
+
#"s,8,7,1,1,0,21,103,143,"
|
25
|
+
request = [START, length, @command] + @parameters + [checksum]
|
26
|
+
request.pack("C*")
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
private
|
30
|
+
def checksum
|
31
|
+
parametersum = @parameters.empty? ? 0 : @parameters.inject{|sum,x| sum + x }
|
32
|
+
return (START + length + @command + parametersum) % 256
|
33
|
+
end
|
33
34
|
|
34
|
-
|
35
|
-
|
35
|
+
def length
|
36
|
+
return @parameters.length + 3
|
37
|
+
end
|
36
38
|
end
|
37
39
|
end
|
data/lib/response.rb
CHANGED
@@ -1,33 +1,59 @@
|
|
1
|
-
|
1
|
+
require_relative './converter'
|
2
2
|
|
3
|
-
|
3
|
+
module TeletaskApi
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class Response
|
6
|
+
|
7
|
+
attr_reader :central, :function, :number, :parameters
|
8
|
+
|
9
|
+
def initialize central, function, number, parameters
|
10
|
+
@central, @function, @number, @parameters = central, function, number, parameters
|
11
|
+
end
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
13
|
+
def self.parse data
|
14
|
+
begin
|
15
|
+
data = data.unpack("C*")
|
16
|
+
#unless data.first == 10
|
17
|
+
startindex = data.index(2)
|
18
|
+
raise "Start byte not found in Response: #{data.inspect}" unless startindex
|
19
|
+
length = data[startindex+1]
|
20
|
+
calculatedChecksum = data[startindex..startindex+length-1].inject{|sum,x| sum + x } % 256
|
21
|
+
checksum = data[startindex+length]
|
22
|
+
raise "Checksum mismatch. Expecting #{checksum}, but calculated #{calculatedChecksum}" unless checksum == calculatedChecksum
|
23
|
+
raise "Not an response." unless data[startindex+2] == Teletask::Command::EVENTREPORT
|
24
|
+
central = data[startindex+3]
|
25
|
+
function = data[startindex+4]
|
26
|
+
number = data[startindex+5..startindex+6].pack("c*").unpack("n").first
|
27
|
+
case function
|
28
|
+
when Teletask::Function::SENSOR
|
29
|
+
parameters =data[startindex+8..startindex+9]
|
30
|
+
else
|
31
|
+
parameters =data[startindex+8]
|
32
|
+
end
|
33
|
+
return Response.new central, function, number, parameters
|
34
|
+
#end
|
35
|
+
rescue Exception => ex
|
36
|
+
puts ex
|
37
|
+
nil
|
27
38
|
end
|
28
|
-
|
29
|
-
|
30
|
-
|
39
|
+
return nil
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_hash
|
43
|
+
hash = Hash.new
|
44
|
+
hash[:function] = function
|
45
|
+
hash[:function_name] = Teletask::Function.name function
|
46
|
+
hash[:number] = number
|
47
|
+
hash[:parameters] = parameters
|
48
|
+
case function
|
49
|
+
when Teletask::Function::SENSOR
|
50
|
+
hash[:temperature] = TeletaskApi::Converter.short_to_temperature parameters
|
51
|
+
when Teletask::Function::RELAY
|
52
|
+
hash[:state] = parameters
|
53
|
+
hash[:state_name] = Teletask::Setting.name parameters
|
54
|
+
end
|
55
|
+
hash
|
31
56
|
end
|
32
57
|
end
|
58
|
+
|
33
59
|
end
|
data/lib/teletask.rb
CHANGED
@@ -6,79 +6,87 @@ require_relative './constants'
|
|
6
6
|
require_relative './request'
|
7
7
|
require_relative './response'
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
@
|
19
|
-
@
|
20
|
-
|
9
|
+
include TeletaskApi
|
10
|
+
|
11
|
+
module TeletaskApi
|
12
|
+
|
13
|
+
class Teletask
|
14
|
+
include Observable
|
15
|
+
|
16
|
+
@host
|
17
|
+
@port
|
18
|
+
@socket
|
19
|
+
@server
|
20
|
+
|
21
|
+
def initialize(host, port = 55957)
|
22
|
+
@host = host
|
23
|
+
@port = port
|
24
|
+
#add_observer(self)
|
25
|
+
end
|
26
|
+
|
27
|
+
def finalize
|
28
|
+
close
|
29
|
+
end
|
30
|
+
|
31
|
+
def connect
|
32
|
+
puts "Connecting to Teletask on #{@host} at port #{@port}..."
|
33
|
+
@socket = TCPSocket.open @host, @port
|
34
|
+
puts "Connected"
|
35
|
+
@t = Thread.new{
|
36
|
+
while (data = @socket.recv(1024))
|
37
|
+
response = Response.parse data
|
38
|
+
if response
|
39
|
+
changed
|
40
|
+
notify_observers(self, response)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def close()
|
47
|
+
puts "closing connection"
|
48
|
+
@socket.close
|
49
|
+
end
|
50
|
+
|
51
|
+
def keep_alive
|
52
|
+
f = Request.new Command::KEEPALIVE
|
53
|
+
@socket.write f.to_s
|
54
|
+
end
|
55
|
+
|
56
|
+
def set function, number, setting
|
57
|
+
f = Request.new Command::SET, function, number, setting
|
58
|
+
@socket.write f.to_s
|
59
|
+
end
|
60
|
+
|
61
|
+
def get function, number
|
62
|
+
f = Request.new Command::GET, function, number
|
63
|
+
@socket.write f.to_s
|
64
|
+
end
|
65
|
+
|
66
|
+
def group_get
|
67
|
+
raise NotImplementedError.new
|
68
|
+
end
|
69
|
+
|
70
|
+
def log function, setting
|
71
|
+
r = Request.new Command::LOG, function, setting
|
72
|
+
@socket.write r.to_s
|
73
|
+
end
|
74
|
+
|
75
|
+
def report_event
|
76
|
+
raise NotImplementedError.new
|
77
|
+
end
|
78
|
+
|
79
|
+
def message
|
80
|
+
raise NotImplementedError.new
|
81
|
+
end
|
21
82
|
end
|
22
83
|
|
23
|
-
|
24
|
-
|
84
|
+
class TeleTaskEvent
|
85
|
+
def update object, response
|
86
|
+
puts "Update: #{response.to_hash.inspect}"
|
87
|
+
end
|
25
88
|
end
|
26
89
|
|
27
|
-
def connect
|
28
|
-
puts "connecting..."
|
29
|
-
@socket = TCPSocket.open @host, @port
|
30
|
-
|
31
|
-
@t = Thread.new{
|
32
|
-
while (data = @socket.recv(1024))
|
33
|
-
response = Response.parse data
|
34
|
-
if response
|
35
|
-
changed
|
36
|
-
notify_observers(self, response)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
def close()
|
43
|
-
puts "closing connection"
|
44
|
-
@socket.close
|
45
|
-
end
|
46
|
-
|
47
|
-
def keep_alive
|
48
|
-
f = Request.new Command::KEEPALIVE
|
49
|
-
@socket.write f.to_s
|
50
|
-
end
|
51
|
-
|
52
|
-
def set function, number, setting
|
53
|
-
f = Request.new Command::SET, function, number, setting
|
54
|
-
@socket.write f.to_s
|
55
|
-
end
|
56
|
-
|
57
|
-
def get function, number
|
58
|
-
f = Request.new Command::GET, function, number
|
59
|
-
@socket.write f.to_s
|
60
|
-
end
|
61
|
-
|
62
|
-
def group_get
|
63
|
-
raise NotImplementedError.new
|
64
|
-
end
|
65
|
-
|
66
|
-
def log function, setting
|
67
|
-
r = Request.new Command::LOG, function, setting
|
68
|
-
@socket.write r.to_s
|
69
|
-
end
|
70
|
-
|
71
|
-
def report_event
|
72
|
-
raise NotImplementedError.new
|
73
|
-
end
|
74
|
-
|
75
|
-
def message
|
76
|
-
raise NotImplementedError.new
|
77
|
-
end
|
78
90
|
end
|
79
91
|
|
80
|
-
|
81
|
-
def update object, response
|
82
|
-
puts "Update: #{response.inspect}"
|
83
|
-
end
|
84
|
-
end
|
92
|
+
Teletask = TeletaskApi::Teletask
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teletask
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sille Van Landschoot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-10-
|
11
|
+
date: 2014-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Teletask gem enables the communication with a Teletask Domitics central
|
14
14
|
using the DoIP protocol
|
@@ -41,7 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
41
41
|
version: '0'
|
42
42
|
requirements: []
|
43
43
|
rubyforge_project:
|
44
|
-
rubygems_version: 2.4.
|
44
|
+
rubygems_version: 2.4.2
|
45
45
|
signing_key:
|
46
46
|
specification_version: 4
|
47
47
|
summary: Teletask DoIP
|