teletask 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8350efc1b6d4c835ab2cc2320539fc1ba33d2a10
4
+ data.tar.gz: 514ce5aaa2c07422c8b9277e11b9e8120d50c161
5
+ SHA512:
6
+ metadata.gz: 194cd77565b42009579133d36038c74abb3737999c36985800eaf0fb5b4854f2bb7a1265e36d5a668c677d16287167cbc58d7384c16817452da6d6673b9b63e9
7
+ data.tar.gz: e2f009831ea9c6b9c0298abe94be035de9be905bde7d97df471879e0b6d0cb1aac2b66973273e28b80dbfccdcda4e3455cdd14f35cd3e693705e4ce65bffe34b
data/lib/constants.rb ADDED
@@ -0,0 +1,37 @@
1
+ class Teletask
2
+ module Command
3
+ SET = 7
4
+ GET = 6
5
+ GROUPSET = 9
6
+ LOG = 3
7
+ EVENTREPORT = 0x10
8
+ WRITEDISPLAY = 4
9
+ KEEPALIVE = 0x11
10
+ end
11
+
12
+ module Function
13
+ RELAY = 1
14
+ DIMMER = 2
15
+ MOTOR = 6
16
+ LOCALMOOD = 9
17
+ GENERALMOOD = 10
18
+ FLAG = 15
19
+ SENSOR = 20
20
+ AUDIO = 31
21
+ PROCESS = 3
22
+ REGIME = 14
23
+ SERVICE = 53
24
+ MESSAGE = 54
25
+ CONDITION = 60
26
+ end
27
+
28
+ module Setting
29
+ ON = 255
30
+ TOGGLE = 103
31
+ OFF = 0
32
+
33
+ MOTORUP = 1
34
+ MOTORDOWN = 2
35
+ MOTORSTOP = 3
36
+ end
37
+ end
data/lib/request.rb ADDED
@@ -0,0 +1,37 @@
1
+ class Request
2
+ START = 2
3
+ def initialize command, function = 0, number = 0, setting = nil
4
+ @command = command
5
+ @parameters = Array.new
6
+
7
+ case command
8
+ when Teletask::Command::KEEPALIVE
9
+ when Teletask::Command::LOG
10
+ @parameters = Array.new
11
+ @parameters[0] = function
12
+ @parameters[1] = number
13
+ else
14
+ @parameters[0] = 1 #central number
15
+ @parameters[1] = function
16
+ @parameters[2] = 0 #byte1
17
+ @parameters[3] = number #byte2
18
+ @parameters[4] = setting if setting != nil
19
+ end
20
+ end
21
+
22
+ def to_s
23
+ #"s,8,7,1,1,0,21,103,143,"
24
+ request = [START, length, @command] + @parameters + [checksum]
25
+ request.pack("C*")
26
+ end
27
+
28
+ private
29
+ def checksum
30
+ parametersum = @parameters.empty? ? 0 : @parameters.inject{|sum,x| sum + x }
31
+ return (START + length + @command + parametersum) % 256
32
+ end
33
+
34
+ def length
35
+ return @parameters.length + 3
36
+ end
37
+ end
data/lib/response.rb ADDED
@@ -0,0 +1,33 @@
1
+ class Response
2
+
3
+ attr_reader :central, :function, :number, :parameters
4
+
5
+ def initialize central, function, number, parameters
6
+ @central, @function, @number, @parameters = central, function, number, parameters
7
+ end
8
+
9
+ def self.parse data
10
+ begin
11
+ data = data.unpack("C*")
12
+ unless data.first == 10
13
+ startindex = data.index(2)
14
+ raise "Start byte not found in Response: #{data.inspect}" unless startindex
15
+ length = data[startindex+1]
16
+ calculatedChecksum = data[startindex..startindex+length-1].inject{|sum,x| sum + x } % 256
17
+ checksum = data[startindex+length]
18
+ raise "Checksum mismatch. Expecting #{checksum}, but calculated #{calculatedChecksum}" unless checksum == calculatedChecksum
19
+ raise "Not an response." unless data[startindex+2] == Teletask::Command::EVENTREPORT
20
+ central = data[startindex+3]
21
+ function = data[startindex+4]
22
+ number = data[startindex+5..startindex+6].pack("c*").unpack("n").first
23
+ parameters =data[startindex+8]
24
+ return Response.new central, function, number, parameters
25
+ else
26
+ return nil
27
+ end
28
+ rescue Exception => ex
29
+ puts ex
30
+ nil
31
+ end
32
+ end
33
+ end
data/lib/teletask.rb ADDED
@@ -0,0 +1,84 @@
1
+ require 'socket'
2
+ require 'observer'
3
+ require 'timeout'
4
+
5
+ require_relative './constants'
6
+ require_relative './request'
7
+ require_relative './response'
8
+
9
+ class Teletask
10
+ include Observable
11
+
12
+ @host
13
+ @port
14
+ @socket
15
+ @server
16
+
17
+ def initialize(host, port = 55957)
18
+ @host = host
19
+ @port = port
20
+ #add_observer(self)
21
+ end
22
+
23
+ def finalize
24
+ close
25
+ end
26
+
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
+ end
79
+
80
+ class TeleTaskEvent
81
+ def update object, response
82
+ puts "Update: #{response.inspect}"
83
+ end
84
+ end
metadata ADDED
@@ -0,0 +1,48 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: teletask
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Sille Van Landschoot
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Teletask gem enables the communication with a Teletask Domitics central
14
+ using the DoIP protocol
15
+ email: info@sillevl.be
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/constants.rb
21
+ - lib/request.rb
22
+ - lib/response.rb
23
+ - lib/teletask.rb
24
+ homepage: http://rubygems.org/gems/teletask
25
+ licenses:
26
+ - MIT
27
+ metadata: {}
28
+ post_install_message:
29
+ rdoc_options: []
30
+ require_paths:
31
+ - lib
32
+ required_ruby_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - '>='
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ required_rubygems_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 2.4.1
45
+ signing_key:
46
+ specification_version: 4
47
+ summary: Teletask DoIP
48
+ test_files: []