dial_a_device_node 0.0.153

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.
Files changed (91) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +674 -0
  5. data/README.md +94 -0
  6. data/Rakefile +1 -0
  7. data/app/assets/images/denver_summit.jpg +0 -0
  8. data/app/assets/images/eppendorf_innova_42.jpg +0 -0
  9. data/app/assets/images/heidolph.jpg +0 -0
  10. data/app/assets/images/ika_ret_control.jpg +0 -0
  11. data/app/assets/images/kern.jpg +0 -0
  12. data/app/assets/images/knf_rc900.jpg +0 -0
  13. data/app/assets/images/knf_sc920.jpg +0 -0
  14. data/app/assets/images/knf_simdos_02.jpg +0 -0
  15. data/app/assets/images/pce_balance.jpg +0 -0
  16. data/app/assets/images/purebeaglebone.jpg +0 -0
  17. data/app/assets/images/weathercape.jpg +0 -0
  18. data/app/assets/javascripts/dial_a_device_node/consolelogger.js +176 -0
  19. data/app/assets/javascripts/dial_a_device_node/deviceconnection.js +225 -0
  20. data/app/assets/javascripts/dial_a_device_node/devices/denver_summit.js +153 -0
  21. data/app/assets/javascripts/dial_a_device_node/devices/denver_summit_SIM.js +111 -0
  22. data/app/assets/javascripts/dial_a_device_node/devices/denver_summit_UI.js +121 -0
  23. data/app/assets/javascripts/dial_a_device_node/devices/eppendorf_innova_42.js +128 -0
  24. data/app/assets/javascripts/dial_a_device_node/devices/eppendorf_innova_42_SIM.js +66 -0
  25. data/app/assets/javascripts/dial_a_device_node/devices/eppendorf_innova_42_UI.js +46 -0
  26. data/app/assets/javascripts/dial_a_device_node/devices/heidolph.js +62 -0
  27. data/app/assets/javascripts/dial_a_device_node/devices/heidolph_SIM.js +24 -0
  28. data/app/assets/javascripts/dial_a_device_node/devices/heidolph_UI.js +17 -0
  29. data/app/assets/javascripts/dial_a_device_node/devices/ika_ret_control.js +192 -0
  30. data/app/assets/javascripts/dial_a_device_node/devices/ika_ret_control_SIM.js +233 -0
  31. data/app/assets/javascripts/dial_a_device_node/devices/ika_ret_control_UI.js +96 -0
  32. data/app/assets/javascripts/dial_a_device_node/devices/kern.js +137 -0
  33. data/app/assets/javascripts/dial_a_device_node/devices/kern_SIM.js +118 -0
  34. data/app/assets/javascripts/dial_a_device_node/devices/kern_UI.js +121 -0
  35. data/app/assets/javascripts/dial_a_device_node/devices/knf_rc900.js +289 -0
  36. data/app/assets/javascripts/dial_a_device_node/devices/knf_rc900_SIM.js +188 -0
  37. data/app/assets/javascripts/dial_a_device_node/devices/knf_rc900_UI.js +179 -0
  38. data/app/assets/javascripts/dial_a_device_node/devices/knf_sc920.js +309 -0
  39. data/app/assets/javascripts/dial_a_device_node/devices/knf_sc920_SIM.js +298 -0
  40. data/app/assets/javascripts/dial_a_device_node/devices/knf_sc920_UI.js +441 -0
  41. data/app/assets/javascripts/dial_a_device_node/devices/knf_simdos_02.js +283 -0
  42. data/app/assets/javascripts/dial_a_device_node/devices/knf_simdos_02_SIM.js +130 -0
  43. data/app/assets/javascripts/dial_a_device_node/devices/knf_simdos_02_UI.js +188 -0
  44. data/app/assets/javascripts/dial_a_device_node/devices/legacy_vnc.js +106 -0
  45. data/app/assets/javascripts/dial_a_device_node/devices/legacy_vnc_SIM.js +32 -0
  46. data/app/assets/javascripts/dial_a_device_node/devices/legacy_vnc_UI.js +26 -0
  47. data/app/assets/javascripts/dial_a_device_node/devices/pce_balance.js +111 -0
  48. data/app/assets/javascripts/dial_a_device_node/devices/pce_balance_SIM.js +80 -0
  49. data/app/assets/javascripts/dial_a_device_node/devices/pce_balance_UI.js +69 -0
  50. data/app/assets/javascripts/dial_a_device_node/devices/purebeaglebone.js +286 -0
  51. data/app/assets/javascripts/dial_a_device_node/devices/purebeaglebone_SIM.js +13 -0
  52. data/app/assets/javascripts/dial_a_device_node/devices/purebeaglebone_UI.js +256 -0
  53. data/app/assets/javascripts/dial_a_device_node/devices/weathercape.js +75 -0
  54. data/app/assets/javascripts/dial_a_device_node/devices/weathercape_SIM.js +33 -0
  55. data/app/assets/javascripts/dial_a_device_node/devices/weathercape_UI.js +42 -0
  56. data/app/assets/javascripts/dial_a_device_node/folderwatcher.js +43 -0
  57. data/app/assets/javascripts/dial_a_device_node/helper/WebSocket-Node-wrapper.js +36 -0
  58. data/app/assets/javascripts/dial_a_device_node/helper/XMLHttpRequest.js +579 -0
  59. data/app/assets/javascripts/dial_a_device_node/helper/agent.js +125 -0
  60. data/app/assets/javascripts/dial_a_device_node/helper/ajax.js +300 -0
  61. data/app/assets/javascripts/dial_a_device_node/helper/type.js +10 -0
  62. data/app/assets/javascripts/dial_a_device_node/php/comport.php +49 -0
  63. data/app/assets/javascripts/dial_a_device_node/php/php_serial.class.php +622 -0
  64. data/app/assets/javascripts/dial_a_device_node/systemstatus.js +124 -0
  65. data/app/assets/javascripts/dial_a_device_node/webconnection.js +197 -0
  66. data/app/assets/javascripts/dial_a_device_node/websocket_rails/abstract_connection.js.coffee +45 -0
  67. data/app/assets/javascripts/dial_a_device_node/websocket_rails/channel.js.coffee +70 -0
  68. data/app/assets/javascripts/dial_a_device_node/websocket_rails/event.js.coffee +42 -0
  69. data/app/assets/javascripts/dial_a_device_node/websocket_rails/http_connection.js.coffee +89 -0
  70. data/app/assets/javascripts/dial_a_device_node/websocket_rails/websocket_connection.js.coffee +37 -0
  71. data/app/assets/javascripts/dial_a_device_node/websocket_rails/websocket_rails.js.coffee +164 -0
  72. data/app/views/devices/ui/_denver_summit.html.erb +52 -0
  73. data/app/views/devices/ui/_eppendorf_innova_42.html.erb +72 -0
  74. data/app/views/devices/ui/_heidolph.html.erb +54 -0
  75. data/app/views/devices/ui/_ika_ret_control.html.erb +81 -0
  76. data/app/views/devices/ui/_kern.html.erb +52 -0
  77. data/app/views/devices/ui/_knf_rc900.html.erb +143 -0
  78. data/app/views/devices/ui/_knf_sc920.html.erb +194 -0
  79. data/app/views/devices/ui/_knf_simdos_02.html.erb +98 -0
  80. data/app/views/devices/ui/_pce_balance.html.erb +37 -0
  81. data/app/views/devices/ui/_purebeaglebone.html.erb +137 -0
  82. data/app/views/devices/ui/_weathercape.html.erb +313 -0
  83. data/beaglebonechip.js +57 -0
  84. data/dial-a-device-web.js +84 -0
  85. data/dial_a_device_node.gemspec +23 -0
  86. data/dial_a_device_node.js +419 -0
  87. data/lib/dial_a_device_node.rb +6 -0
  88. data/lib/dial_a_device_node/version.rb +3 -0
  89. data/package.json +35 -0
  90. data/start.js +40 -0
  91. metadata +161 -0
@@ -0,0 +1,89 @@
1
+ x = require '../helper/XMLHttpRequest.js'
2
+ ajax = require '../helper/ajax.js'
3
+
4
+ ###
5
+ HTTP Interface for the WebSocketRails client.
6
+ ###
7
+
8
+ class WebSocketRails.HttpConnection
9
+
10
+
11
+
12
+ httpFactories: -> [
13
+ -> new x.XMLHttpRequest(),
14
+ -> new ActiveXObject("Msxml2.XMLHTTP"),
15
+ -> new ActiveXObject("Msxml3.XMLHTTP"),
16
+ -> new ActiveXObject("Microsoft.XMLHTTP")
17
+ ]
18
+
19
+ createXMLHttpObject: =>
20
+ xmlhttp = false
21
+ factories = @httpFactories()
22
+ for factory in factories
23
+ try
24
+ xmlhttp = factory()
25
+ catch e
26
+ continue
27
+ break
28
+ xmlhttp
29
+
30
+ constructor: (@url, @dispatcher) ->
31
+ @_url = @url
32
+ @_conn = new x.XMLHttpRequest()
33
+ @last_pos = 0
34
+ @message_queue = []
35
+ @_conn.onreadystatechange = @parse_stream
36
+ # @_conn.addEventListener "load", @connectionClosed, false
37
+ @_conn.open "GET", @_url, true
38
+ @_conn.send()
39
+
40
+ parse_stream: =>
41
+ if @_conn.readyState == 3
42
+
43
+ data = @_conn.responseText.substring @last_pos
44
+ @last_pos = @_conn.responseText.length
45
+
46
+ data = data.replace( /\]\]\[\[/g, "],[" )
47
+ if data != ""
48
+ decoded_data = JSON.parse data
49
+ else
50
+ decoded_data = {}
51
+
52
+ @dispatcher.new_message decoded_data
53
+
54
+ # if @_conn.readyState == 0
55
+ # close_event = new WebSocketRails.Event(['connection_closed',{}])
56
+ # @dispatcher.dispatch close_event
57
+
58
+ # if @_conn.readyState == 4
59
+ # close_event = new WebSocketRails.Event(['connection_closed',{}])
60
+ # @dispatcher.dispatch close_event
61
+
62
+ trigger: (event) =>
63
+ if @dispatcher.state != 'connected'
64
+ @message_queue.push event
65
+ else
66
+ @post_data @dispatcher.connection_id, event.serialize()
67
+
68
+ post_data: (connection_id, payload) ->
69
+ ajax
70
+ url: @_url
71
+ type: 'POST'
72
+ data:
73
+ client_id: connection_id
74
+ data: payload
75
+ success: ->
76
+
77
+ flush_queue: (connection_id) =>
78
+ for event in @message_queue
79
+ # Events queued before connecting do not have the correct
80
+ # connection_id set yet. We need to update it before dispatching.
81
+ if connection_id?
82
+ event.connection_id = @dispatcher.connection_id
83
+ @trigger event
84
+ @message_queue = []
85
+
86
+ connectionClosed: (event) =>
87
+ close_event = new WebSocketRails.Event(['connection_closed', event])
88
+ @dispatcher.state = 'disconnected'
89
+ @dispatcher.dispatch close_event
@@ -0,0 +1,37 @@
1
+ x = require '../helper/WebSocket-Node-wrapper.js'
2
+
3
+ ###
4
+ MODIFICATIONS!!!
5
+ window does not exist
6
+ @_conn constructor use x.Websocket(@url)
7
+ ###
8
+
9
+ ###
10
+ WebSocket Interface for the WebSocketRails client.
11
+ ###
12
+ class WebSocketRails.WebSocketConnection extends WebSocketRails.AbstractConnection
13
+ connection_type: 'websocket'
14
+
15
+ constructor: (@url, @dispatcher) ->
16
+ super
17
+ if @url.match(/^wss?:\/\//)
18
+ console.log "WARNING: Using connection urls with protocol specified is depricated"
19
+ # else if window.location.protocol == 'https:'
20
+ # @url = "wss://#{@url}"
21
+ else
22
+ @url = "ws://#{@url}"
23
+ @_conn = new x.WebSocket(@url)
24
+ @_conn.onmessage = (event) =>
25
+ event_data = JSON.parse event.data
26
+ @on_message(event_data)
27
+ @_conn.onclose = (event) =>
28
+ @on_close(event)
29
+ @_conn.onerror = (event) =>
30
+ @on_error(event)
31
+
32
+ close: ->
33
+ @_conn.close()
34
+
35
+ send_event: (event) ->
36
+ super
37
+ @_conn.send event.serialize()
@@ -0,0 +1,164 @@
1
+ util = require 'util'
2
+
3
+ ###
4
+ MODIFICATIONS!!!
5
+ ###
6
+
7
+ ###
8
+ WebsocketRails JavaScript Client
9
+
10
+ Setting up the dispatcher:
11
+ var dispatcher = new WebSocketRails('localhost:3000/websocket');
12
+ dispatcher.on_open = function() {
13
+ // trigger a server event immediately after opening connection
14
+ dispatcher.trigger('new_user',{user_name: 'guest'});
15
+ })
16
+
17
+ Triggering a new event on the server
18
+ dispatcherer.trigger('event_name',object_to_be_serialized_to_json);
19
+
20
+ Listening for new events from the server
21
+ dispatcher.bind('event_name', function(data) {
22
+ console.log(data.user_name);
23
+ });
24
+
25
+ Stop listening for new events from the server
26
+ dispatcher.unbind('event')
27
+ ###
28
+ class global.WebSocketRails
29
+ constructor: (@url, @use_websockets = true) ->
30
+ @callbacks = {}
31
+ @channels = {}
32
+ @queue = {}
33
+
34
+ @connect()
35
+
36
+ connect: ->
37
+ @state = 'connecting'
38
+
39
+ unless @use_websockets
40
+ @_conn = new WebSocketRails.HttpConnection "http://"+@url, @
41
+ else
42
+ @_conn = new WebSocketRails.WebSocketConnection @url, @
43
+
44
+ @_conn.new_message = @new_message
45
+
46
+ disconnect: ->
47
+ if @_conn
48
+ @_conn.close()
49
+ delete @_conn._conn
50
+ delete @_conn
51
+
52
+ @state = 'disconnected'
53
+
54
+ # Reconnects the whole connection,
55
+ # keeping the messages queue and its' connected channels.
56
+ #
57
+ # After successfull connection, this will:
58
+ # - reconnect to all channels, that were active while disconnecting
59
+ # - resend all events from which we haven't received any response yet
60
+ reconnect: =>
61
+ old_connection_id = @_conn?.connection_id
62
+
63
+ @disconnect()
64
+ @connect()
65
+
66
+ # Resend all unfinished events from the previous connection.
67
+ for id, event of @queue
68
+ if event.connection_id == old_connection_id && !event.is_result()
69
+ @trigger_event event
70
+
71
+ @reconnect_channels()
72
+
73
+ new_message: (data) =>
74
+ for socket_message in data
75
+ event = new WebSocketRails.Event( socket_message )
76
+ if event.is_result()
77
+ @queue[event.id]?.run_callbacks(event.success, event.data)
78
+ delete @queue[event.id]
79
+ else if event.is_channel()
80
+ @dispatch_channel event
81
+ else if event.is_ping()
82
+ @pong()
83
+ else
84
+ @dispatch event
85
+
86
+ if @state == 'connecting' and event.name == 'client_connected'
87
+ @connection_established event.data
88
+
89
+ connection_established: (data) =>
90
+ @state = 'connected'
91
+ @_conn.setConnectionId(data.connection_id)
92
+ @_conn.flush_queue()
93
+ if @on_open?
94
+ @on_open(data)
95
+
96
+ bind: (event_name, callback) =>
97
+ @callbacks[event_name] ?= []
98
+ @callbacks[event_name].push callback
99
+
100
+ unbind: (event_name) =>
101
+ delete @callbacks[event_name]
102
+
103
+ trigger: (event_name, data, success_callback, failure_callback) =>
104
+ event = new WebSocketRails.Event( [event_name, data, @_conn?.connection_id], success_callback, failure_callback )
105
+ @trigger_event event
106
+
107
+ trigger_event: (event) =>
108
+ @queue[event.id] ?= event # Prevent replacing an event that has callbacks stored
109
+ @_conn.trigger event if @_conn
110
+ event
111
+
112
+ dispatch: (event) =>
113
+ return unless @callbacks[event.name]?
114
+ for callback in @callbacks[event.name]
115
+ callback event.data
116
+
117
+ subscribe: (channel_name, success_callback, failure_callback) =>
118
+ unless @channels[channel_name]?
119
+ channel = new WebSocketRails.Channel channel_name, @, false, success_callback, failure_callback
120
+ @channels[channel_name] = channel
121
+ channel
122
+ else
123
+ @channels[channel_name]
124
+
125
+ subscribe_private: (channel_name, success_callback, failure_callback) =>
126
+ unless @channels[channel_name]?
127
+ channel = new WebSocketRails.Channel channel_name, @, true, success_callback, failure_callback
128
+ @channels[channel_name] = channel
129
+ channel
130
+ else
131
+ @channels[channel_name]
132
+
133
+ unsubscribe: (channel_name) =>
134
+ return unless @channels[channel_name]?
135
+ @channels[channel_name].destroy()
136
+ delete @channels[channel_name]
137
+
138
+ dispatch_channel: (event) =>
139
+ return unless @channels[event.channel]?
140
+ @channels[event.channel].dispatch event.name, event.data
141
+
142
+ supports_websockets: =>
143
+ (typeof(WebSocket) == "function" or typeof(WebSocket) == "object")
144
+
145
+ pong: =>
146
+ pong = new WebSocketRails.Event( ['websocket_rails.pong', {}, @_conn?.connection_id] )
147
+ @_conn.trigger pong
148
+
149
+ connection_stale: =>
150
+ @state != 'connected'
151
+
152
+ # Destroy and resubscribe to all existing @channels.
153
+ reconnect_channels: ->
154
+ for name, channel of @channels
155
+ callbacks = channel._callbacks
156
+ channel.destroy()
157
+ delete @channels[name]
158
+
159
+ channel = if channel.is_private
160
+ @subscribe_private name
161
+ else
162
+ @subscribe name
163
+ channel._callbacks = callbacks
164
+ channel
@@ -0,0 +1,52 @@
1
+ <div class="row-fluid" style="margin-top:20px;">
2
+ <div class="span12">
3
+ <div id="tab2" name="tab2" class="well" style="text-align: center";>
4
+ <label id="Display" name="Display" ><span id="iDisplay" style="font-size: 20px;"></span></label>
5
+
6
+ </div>
7
+ </div>
8
+ </div>
9
+
10
+
11
+ <div class="row-fluid">
12
+ <div class="span12">
13
+
14
+ <span class="btn-group">
15
+ <button id="powerbutton" name="powerbutton" class="btn btn-warning btn-large" onclick="ui.togglepower(); "><i id="powericon" name="powericon" class="icon-play"></i>&nbsp;<span id="power">POWER</span></button>
16
+ </span>
17
+
18
+
19
+
20
+ <span class="btn-group">
21
+ <button id="reset" name="RESET" class=" btn btn-inverse btn-large" onclick="ui.reset(); " >RESET</button>
22
+ </span>
23
+
24
+
25
+ <span class="btn-group">
26
+ <button id="Calibrate" name="Cal" class=" btn btn-info btn-large" onclick="ui.calibration();">CAL </button>
27
+ </span>
28
+
29
+
30
+ <span class="btn-group">
31
+
32
+ <button id="tare" name="TARE" class="btn btn-danger btn-large " onclick="ui.tare();" > TARE </button>
33
+ </span>
34
+
35
+ <span class="btn-group">
36
+ <button id="print" name="PRINT" class=" btn btn-success btn-large" onclick="ui.print(); " > PRINT</button>
37
+ </span>
38
+
39
+
40
+
41
+ <span class="btn-group">
42
+ <button id="autoprintbutton" name="autoprintbutton" class=" btn btn-warning btn-large" onclick="ui.toggleautoprint(); " ><i id="autoprinticon" name="autoprinticon" class="icon-play"></i>&nbsp;<span id="autoprint">AUTOPRINT</span></button>
43
+ </span>
44
+
45
+ </div>
46
+
47
+ <script type="text/javascript">
48
+ if (connectiontype == "simulation") {
49
+ //ev.emit("device.set.print");
50
+ }
51
+ </script>
52
+ </div>
@@ -0,0 +1,72 @@
1
+
2
+ <div class="row-fluid clearfix" style="height: 160px;">
3
+
4
+ <div class="col-md-5 col-sm-5">
5
+
6
+ <div id="gauge1" class="200x160px"></div>
7
+
8
+
9
+ <div class="inline" id="temperature_setpoint"> </div>
10
+
11
+ <script type="text/javascript">
12
+
13
+ smartinput ("temperature_setpoint", function(val) {
14
+ ui.setTemperatureSetpoint(val);
15
+ }, "Set (°C)");
16
+ </script>
17
+
18
+ <div class="btn-group btn-group-justified">
19
+
20
+
21
+
22
+ </div>
23
+
24
+ </div>
25
+
26
+ <div class="col-md-5 col-sm-5">
27
+
28
+ <div id="gauge2" class="200x160px"></div>
29
+
30
+
31
+
32
+ <div class="inline" id="rotation_setpoint"> </div>
33
+
34
+ <script type="text/javascript">
35
+
36
+ smartinput ("rotation_setpoint", function(val) {
37
+ ui.setRotationSetpoint(val);
38
+ }, "Set (rpm)");
39
+ </script>
40
+
41
+ <div class="btn-group btn-group-justified">
42
+
43
+
44
+ </div>
45
+
46
+ </div>
47
+
48
+
49
+ </div>
50
+
51
+
52
+ <script>
53
+ var g1 = new JustGage({
54
+ id: "gauge1",
55
+ value: 0,
56
+ min: 0,
57
+ max: 90,
58
+ title: "Temperature",
59
+ label: "° C"
60
+ });
61
+
62
+ var g2 = new JustGage({
63
+ id: "gauge2",
64
+ value: 0,
65
+ min: 0,
66
+ max: 1700,
67
+ title: "Rotation",
68
+ label: "rpm"
69
+ });
70
+
71
+ </script>
72
+
@@ -0,0 +1,54 @@
1
+
2
+ <div class="row-fluid clearfix" style="height: 160px;">
3
+
4
+ <div id="gauge1" class="span3 200x160px"></div>
5
+
6
+
7
+ <div id="gauge2" class="span3 200x160px"></div>
8
+
9
+
10
+ <div id="gauge3" class="span3 200x160px"></div>
11
+
12
+ <div id="gauge4" class="span3 200x160px"></div>
13
+
14
+ </div>
15
+
16
+
17
+ <script>
18
+ var g1 = new JustGage({
19
+ id: "gauge1",
20
+ value: 0,
21
+ min: 10,
22
+ max: 280,
23
+ title: "Rotation",
24
+ label: "rpm"
25
+ });
26
+
27
+ var g2 = new JustGage({
28
+ id: "gauge2",
29
+ value: 0,
30
+ min: 20,
31
+ max: 210,
32
+ title: "HB - temperature",
33
+ label: "°C"
34
+ });
35
+
36
+ var g3 = new JustGage({
37
+ id: "gauge3",
38
+ value: 0,
39
+ min: 5,
40
+ max: 40,
41
+ title: "Ext. Sensor-Temperature",
42
+ label: "°C"
43
+ });
44
+
45
+ var g4 = new JustGage({
46
+ id: "gauge4",
47
+ value: 0,
48
+ min: 0,
49
+ max: 1200,
50
+ title: "Vacuum",
51
+ label: "mbar"
52
+ });
53
+ </script>
54
+