rsmp 0.43.2 → 0.45.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.
Files changed (177) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +11 -11
  3. data/README.md +19 -3
  4. data/Rakefile +2 -2
  5. data/config/supervisor.yaml +2 -1
  6. data/config/tlc.yaml +2 -2
  7. data/lib/rsmp/cli.rb +29 -5
  8. data/lib/rsmp/component/component.rb +0 -4
  9. data/lib/rsmp/component/component_base.rb +15 -2
  10. data/lib/rsmp/component/component_proxy.rb +1 -1
  11. data/lib/rsmp/component/components.rb +22 -1
  12. data/lib/rsmp/convert/export/json_schema/outputs.rb +1 -0
  13. data/lib/rsmp/convert/export/json_schema/values.rb +6 -4
  14. data/lib/rsmp/convert/export/json_schema.rb +7 -3
  15. data/lib/rsmp/helpers/deep_merge.rb +2 -2
  16. data/lib/rsmp/message.rb +32 -0
  17. data/lib/rsmp/node/site/site.rb +34 -10
  18. data/lib/rsmp/node/supervisor/modules/configuration.rb +32 -5
  19. data/lib/rsmp/node/supervisor/modules/connection.rb +0 -2
  20. data/lib/rsmp/node/supervisor/supervisor.rb +0 -7
  21. data/lib/rsmp/options/options.rb +55 -6
  22. data/lib/rsmp/options/schemas/site.json +6 -3
  23. data/lib/rsmp/options/schemas/supervisor.json +5 -2
  24. data/lib/rsmp/options/schemas/supervisor_site.json +5 -2
  25. data/lib/rsmp/options/site_options.rb +3 -2
  26. data/lib/rsmp/options/supervisor_options.rb +3 -1
  27. data/lib/rsmp/proxy/modules/acknowledgements.rb +2 -0
  28. data/lib/rsmp/proxy/modules/receive.rb +5 -2
  29. data/lib/rsmp/proxy/modules/state.rb +1 -0
  30. data/lib/rsmp/proxy/modules/versions.rb +90 -15
  31. data/lib/rsmp/proxy/proxy.rb +52 -3
  32. data/lib/rsmp/proxy/site/modules/status.rb +5 -3
  33. data/lib/rsmp/proxy/site/site_proxy.rb +68 -35
  34. data/lib/rsmp/proxy/site/sxl_selection.rb +54 -0
  35. data/lib/rsmp/proxy/supervisor/supervisor_proxy.rb +54 -18
  36. data/lib/rsmp/schema/message_resolution.rb +104 -0
  37. data/lib/rsmp/schema.rb +104 -22
  38. data/lib/rsmp/schema_error.rb +7 -1
  39. data/lib/rsmp/sxl/interface.rb +48 -0
  40. data/lib/rsmp/sxl/registry.rb +55 -0
  41. data/lib/rsmp/sxl/site_interface.rb +10 -0
  42. data/lib/rsmp/sxl/supervisor_interface.rb +21 -0
  43. data/lib/rsmp/tlc/detector_logic.rb +2 -2
  44. data/lib/rsmp/tlc/signal_group.rb +2 -2
  45. data/lib/rsmp/tlc/site_interface.rb +10 -0
  46. data/lib/rsmp/tlc/{traffic_controller_proxy.rb → supervisor_interface.rb} +19 -34
  47. data/lib/rsmp/tlc/traffic_controller.rb +10 -2
  48. data/lib/rsmp/tlc/traffic_controller_site.rb +4 -2
  49. data/lib/rsmp/tlc.rb +10 -0
  50. data/lib/rsmp/version.rb +1 -1
  51. data/lib/rsmp.rb +8 -1
  52. data/rsmp.gemspec +5 -5
  53. data/schemas/core/3.3.0/aggregated_status.json +25 -0
  54. data/schemas/core/3.3.0/aggregated_status_request.json +9 -0
  55. data/schemas/core/3.3.0/alarm.json +71 -0
  56. data/schemas/core/3.3.0/alarm_acknowledge.json +11 -0
  57. data/schemas/core/3.3.0/alarm_issue.json +44 -0
  58. data/schemas/core/3.3.0/alarm_request.json +3 -0
  59. data/schemas/core/3.3.0/alarm_suspend_resume.json +3 -0
  60. data/schemas/core/3.3.0/alarm_suspended_resumed.json +44 -0
  61. data/schemas/core/3.3.0/command_request.json +24 -0
  62. data/schemas/core/3.3.0/command_response.json +35 -0
  63. data/schemas/core/3.3.0/component_list.json +24 -0
  64. data/schemas/core/3.3.0/core.json +40 -0
  65. data/schemas/core/3.3.0/definitions.json +133 -0
  66. data/schemas/core/3.3.0/message_ack.json +11 -0
  67. data/schemas/core/3.3.0/message_not_ack.json +15 -0
  68. data/schemas/core/3.3.0/rsmp.json +142 -0
  69. data/schemas/core/3.3.0/status.json +21 -0
  70. data/schemas/core/3.3.0/status_request.json +5 -0
  71. data/schemas/core/3.3.0/status_response.json +41 -0
  72. data/schemas/core/3.3.0/status_subscribe.json +31 -0
  73. data/schemas/core/3.3.0/status_unsubscribe.json +5 -0
  74. data/schemas/core/3.3.0/status_update.json +41 -0
  75. data/schemas/core/3.3.0/version.json +144 -0
  76. data/schemas/core/3.3.0/watchdog.json +9 -0
  77. data/schemas/tlc/1.3.0/alarms/A0001.json +4 -0
  78. data/schemas/tlc/1.3.0/alarms/A0002.json +4 -0
  79. data/schemas/tlc/1.3.0/alarms/A0003.json +4 -0
  80. data/schemas/tlc/1.3.0/alarms/A0004.json +4 -0
  81. data/schemas/tlc/1.3.0/alarms/A0005.json +4 -0
  82. data/schemas/tlc/1.3.0/alarms/A0006.json +4 -0
  83. data/schemas/tlc/1.3.0/alarms/A0007.json +34 -0
  84. data/schemas/tlc/1.3.0/alarms/A0008.json +30 -0
  85. data/schemas/tlc/1.3.0/alarms/A0009.json +4 -0
  86. data/schemas/tlc/1.3.0/alarms/A0010.json +4 -0
  87. data/schemas/tlc/1.3.0/alarms/A0101.json +4 -0
  88. data/schemas/tlc/1.3.0/alarms/A0201.json +35 -0
  89. data/schemas/tlc/1.3.0/alarms/A0202.json +35 -0
  90. data/schemas/tlc/1.3.0/alarms/A0301.json +92 -0
  91. data/schemas/tlc/1.3.0/alarms/A0302.json +115 -0
  92. data/schemas/tlc/1.3.0/alarms/A0303.json +92 -0
  93. data/schemas/tlc/1.3.0/alarms/A0304.json +115 -0
  94. data/schemas/tlc/1.3.0/alarms/alarms.json +287 -0
  95. data/schemas/tlc/1.3.0/commands/M0001.json +92 -0
  96. data/schemas/tlc/1.3.0/commands/M0002.json +69 -0
  97. data/schemas/tlc/1.3.0/commands/M0003.json +69 -0
  98. data/schemas/tlc/1.3.0/commands/M0004.json +51 -0
  99. data/schemas/tlc/1.3.0/commands/M0005.json +69 -0
  100. data/schemas/tlc/1.3.0/commands/M0006.json +69 -0
  101. data/schemas/tlc/1.3.0/commands/M0007.json +51 -0
  102. data/schemas/tlc/1.3.0/commands/M0008.json +87 -0
  103. data/schemas/tlc/1.3.0/commands/M0010.json +51 -0
  104. data/schemas/tlc/1.3.0/commands/M0011.json +51 -0
  105. data/schemas/tlc/1.3.0/commands/M0012.json +51 -0
  106. data/schemas/tlc/1.3.0/commands/M0013.json +51 -0
  107. data/schemas/tlc/1.3.0/commands/M0014.json +69 -0
  108. data/schemas/tlc/1.3.0/commands/M0015.json +69 -0
  109. data/schemas/tlc/1.3.0/commands/M0016.json +51 -0
  110. data/schemas/tlc/1.3.0/commands/M0017.json +51 -0
  111. data/schemas/tlc/1.3.0/commands/M0018.json +69 -0
  112. data/schemas/tlc/1.3.0/commands/M0019.json +87 -0
  113. data/schemas/tlc/1.3.0/commands/M0020.json +87 -0
  114. data/schemas/tlc/1.3.0/commands/M0021.json +51 -0
  115. data/schemas/tlc/1.3.0/commands/M0022.json +249 -0
  116. data/schemas/tlc/1.3.0/commands/M0023.json +51 -0
  117. data/schemas/tlc/1.3.0/commands/M0024.json +33 -0
  118. data/schemas/tlc/1.3.0/commands/M0103.json +72 -0
  119. data/schemas/tlc/1.3.0/commands/M0104.json +141 -0
  120. data/schemas/tlc/1.3.0/commands/command_requests.json +8 -0
  121. data/schemas/tlc/1.3.0/commands/command_responses.json +8 -0
  122. data/schemas/tlc/1.3.0/commands/commands.json +415 -0
  123. data/schemas/tlc/1.3.0/defs/definitions.json +72 -0
  124. data/schemas/tlc/1.3.0/defs/guards.json +24 -0
  125. data/schemas/tlc/1.3.0/rsmp.json +74 -0
  126. data/schemas/tlc/1.3.0/statuses/S0001.json +109 -0
  127. data/schemas/tlc/1.3.0/statuses/S0002.json +36 -0
  128. data/schemas/tlc/1.3.0/statuses/S0003.json +36 -0
  129. data/schemas/tlc/1.3.0/statuses/S0004.json +36 -0
  130. data/schemas/tlc/1.3.0/statuses/S0005.json +72 -0
  131. data/schemas/tlc/1.3.0/statuses/S0006.json +54 -0
  132. data/schemas/tlc/1.3.0/statuses/S0007.json +73 -0
  133. data/schemas/tlc/1.3.0/statuses/S0008.json +73 -0
  134. data/schemas/tlc/1.3.0/statuses/S0009.json +73 -0
  135. data/schemas/tlc/1.3.0/statuses/S0010.json +73 -0
  136. data/schemas/tlc/1.3.0/statuses/S0011.json +73 -0
  137. data/schemas/tlc/1.3.0/statuses/S0012.json +73 -0
  138. data/schemas/tlc/1.3.0/statuses/S0013.json +54 -0
  139. data/schemas/tlc/1.3.0/statuses/S0014.json +55 -0
  140. data/schemas/tlc/1.3.0/statuses/S0015.json +55 -0
  141. data/schemas/tlc/1.3.0/statuses/S0016.json +36 -0
  142. data/schemas/tlc/1.3.0/statuses/S0017.json +36 -0
  143. data/schemas/tlc/1.3.0/statuses/S0018.json +61 -0
  144. data/schemas/tlc/1.3.0/statuses/S0019.json +36 -0
  145. data/schemas/tlc/1.3.0/statuses/S0020.json +54 -0
  146. data/schemas/tlc/1.3.0/statuses/S0021.json +37 -0
  147. data/schemas/tlc/1.3.0/statuses/S0022.json +36 -0
  148. data/schemas/tlc/1.3.0/statuses/S0023.json +37 -0
  149. data/schemas/tlc/1.3.0/statuses/S0024.json +36 -0
  150. data/schemas/tlc/1.3.0/statuses/S0025.json +162 -0
  151. data/schemas/tlc/1.3.0/statuses/S0026.json +36 -0
  152. data/schemas/tlc/1.3.0/statuses/S0027.json +36 -0
  153. data/schemas/tlc/1.3.0/statuses/S0028.json +36 -0
  154. data/schemas/tlc/1.3.0/statuses/S0029.json +36 -0
  155. data/schemas/tlc/1.3.0/statuses/S0030.json +36 -0
  156. data/schemas/tlc/1.3.0/statuses/S0031.json +36 -0
  157. data/schemas/tlc/1.3.0/statuses/S0032.json +73 -0
  158. data/schemas/tlc/1.3.0/statuses/S0033.json +77 -0
  159. data/schemas/tlc/1.3.0/statuses/S0034.json +36 -0
  160. data/schemas/tlc/1.3.0/statuses/S0035.json +49 -0
  161. data/schemas/tlc/1.3.0/statuses/S0091.json +40 -0
  162. data/schemas/tlc/1.3.0/statuses/S0092.json +40 -0
  163. data/schemas/tlc/1.3.0/statuses/S0095.json +36 -0
  164. data/schemas/tlc/1.3.0/statuses/S0096.json +126 -0
  165. data/schemas/tlc/1.3.0/statuses/S0097.json +54 -0
  166. data/schemas/tlc/1.3.0/statuses/S0098.json +72 -0
  167. data/schemas/tlc/1.3.0/statuses/S0201.json +54 -0
  168. data/schemas/tlc/1.3.0/statuses/S0202.json +54 -0
  169. data/schemas/tlc/1.3.0/statuses/S0203.json +54 -0
  170. data/schemas/tlc/1.3.0/statuses/S0204.json +198 -0
  171. data/schemas/tlc/1.3.0/statuses/S0205.json +54 -0
  172. data/schemas/tlc/1.3.0/statuses/S0206.json +54 -0
  173. data/schemas/tlc/1.3.0/statuses/S0207.json +54 -0
  174. data/schemas/tlc/1.3.0/statuses/S0208.json +198 -0
  175. data/schemas/tlc/1.3.0/statuses/statuses.json +787 -0
  176. data/schemas/tlc/1.3.0/sxl.yaml +2296 -0
  177. metadata +144 -12
@@ -1,11 +1,8 @@
1
- # Proxy for handling communication with a remote Traffic Light Controller (TLC).
2
- # Provides high-level methods for interacting with TLC functionality.
3
- # Acts as a mirror of the remote TLC by automatically subscribing to status updates.
4
-
5
1
  module RSMP
2
+ # Traffic Light Controller SXL support.
6
3
  module TLC
7
- # Proxy for handling communication with a remote traffic light controller.
8
- class TrafficControllerProxy < SiteProxy
4
+ # Supervisor-side TLC SXL interface.
5
+ class SupervisorInterface < RSMP::SXL::SupervisorInterface
9
6
  include Proxy::Control
10
7
  include Proxy::IO
11
8
  include Proxy::Plans
@@ -16,16 +13,7 @@ module RSMP
16
13
  attr_reader :timeplan_source, :timeplan, :timeouts,
17
14
  :functional_position, :yellow_flash, :traffic_situation
18
15
 
19
- # Backwards-compatible accessors expected by tests and callers
20
- def current_plan
21
- @timeplan
22
- end
23
-
24
- def plan_source
25
- @timeplan_source
26
- end
27
-
28
- def initialize(options)
16
+ def initialize(...)
29
17
  super
30
18
  @timeplan_source = nil
31
19
  @timeplan = nil
@@ -35,6 +23,14 @@ module RSMP
35
23
  @timeouts = node.supervisor_settings.dig('default', 'timeouts') || {}
36
24
  end
37
25
 
26
+ def current_plan
27
+ @timeplan
28
+ end
29
+
30
+ def plan_source
31
+ @timeplan_source
32
+ end
33
+
38
34
  def subscribe_to_timeplan
39
35
  validate_ready 'subscribe to timeplan'
40
36
 
@@ -49,32 +45,23 @@ module RSMP
49
45
  subscribe_to_status status_list, component: main.c_id
50
46
  end
51
47
 
52
- # Override status update processing to automatically store cached status values.
53
48
  def process_status_update(message)
54
- super
55
-
56
49
  status_values = message.attribute('sS')
57
50
  return unless status_values
58
51
 
59
52
  status_values.each { |item| cache_status_item(item) }
60
53
  end
61
54
 
62
- # Get all timeplan attributes stored in the main ComponentProxy.
63
- def timeplan_attributes
64
- main&.statuses&.dig('S0014') || {}
55
+ def process_message(message)
56
+ process_status_update message if message.is_a?(RSMP::StatusUpdate)
65
57
  end
66
58
 
67
- # Returns true if sOc (send on change) should be used.
68
- # sOc is supported in RSMP core version 3.1.5 and later.
69
- def use_soc?
70
- return false unless core_version
71
-
72
- RSMP::Proxy.version_meets_requirement?(core_version, '>=3.1.5')
59
+ def timeplan_attributes
60
+ main&.statuses&.dig('S0014') || {}
73
61
  end
74
62
 
75
63
  private
76
64
 
77
- # Automatically subscribe to key TLC statuses to keep proxy in sync.
78
65
  def auto_subscribe_to_statuses
79
66
  return unless main
80
67
 
@@ -82,17 +69,14 @@ module RSMP
82
69
  subscribe_to_key_statuses
83
70
  end
84
71
 
85
- # Look up security code for a given level from site settings.
86
- # Expects @site_settings['security_codes'] = { 1 => 'code1', 2 => 'code2' }
87
72
  def security_code_for(level)
88
- codes = @site_settings&.dig('security_codes') || {}
73
+ codes = proxy.site_settings&.dig('security_codes') || {}
89
74
  code = codes[level] || codes[level.to_s]
90
75
  raise ArgumentError, "Security code for level #{level} is not configured" unless code
91
76
 
92
77
  code
93
78
  end
94
79
 
95
- # Process a single status item and update the corresponding cached value.
96
80
  def cache_status_item(item)
97
81
  case item['sCI']
98
82
  when 'S0007' then @functional_position = item['s'] if item['n'] == 'status'
@@ -102,7 +86,6 @@ module RSMP
102
86
  end
103
87
  end
104
88
 
105
- # Update cached values for S0014 (timeplan) status attributes.
106
89
  def cache_s0014_attribute(item)
107
90
  case item['n']
108
91
  when 'status' then @timeplan = item['s'].to_i
@@ -110,5 +93,7 @@ module RSMP
110
93
  end
111
94
  end
112
95
  end
96
+
97
+ RSMP::SXL::Registry.register_interface SupervisorInterface
113
98
  end
114
99
  end
@@ -20,8 +20,16 @@ module RSMP
20
20
  attr_reader :pos, :cycle_time, :plan, :cycle_counter,
21
21
  :functional_position, :startup_sequence
22
22
 
23
- def initialize(node:, id:, ntsoid: nil, xnid: nil, **options)
24
- super(node: node, id: id, ntsoid: ntsoid, xnid: xnid, grouped: true)
23
+ def initialize(node:, id:, **options)
24
+ super(
25
+ node: node,
26
+ id: id,
27
+ type: options[:type],
28
+ name: options[:name],
29
+ ntsoid: options[:ntsoid],
30
+ xnid: options[:xnid],
31
+ grouped: true
32
+ )
25
33
  @signal_groups = []
26
34
  @detector_logics = []
27
35
  @plans = options[:signal_plans]
@@ -63,6 +63,8 @@ module RSMP
63
63
  when 'main'
64
64
  TrafficController.new node: self,
65
65
  id: id,
66
+ type: type,
67
+ name: settings['name'],
66
68
  ntsoid: settings['ntsOId'],
67
69
  xnid: settings['xNId'],
68
70
  startup_sequence: @startup_sequence,
@@ -70,11 +72,11 @@ module RSMP
70
72
  live_output: @site_settings['live_output'],
71
73
  inputs: @site_settings['inputs']
72
74
  when 'signal_group'
73
- group = SignalGroup.new node: self, id: id
75
+ group = SignalGroup.new node: self, id: id, type: type, name: settings['name']
74
76
  main.add_signal_group group
75
77
  group
76
78
  when 'detector_logic'
77
- logic = DetectorLogic.new node: self, id: id
79
+ logic = DetectorLogic.new node: self, id: id, type: type, name: settings['name']
78
80
  main.add_detector_logic logic
79
81
  logic
80
82
  end
data/lib/rsmp/tlc.rb ADDED
@@ -0,0 +1,10 @@
1
+ module RSMP
2
+ # Traffic Light Controller SXL support.
3
+ module TLC
4
+ SXL_NAME = 'tlc'.freeze
5
+
6
+ def self.sxl_name
7
+ SXL_NAME
8
+ end
9
+ end
10
+ end
data/lib/rsmp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RSMP
2
- VERSION = '0.43.2'.freeze
2
+ VERSION = '0.45.0'.freeze
3
3
  end
data/lib/rsmp.rb CHANGED
@@ -69,6 +69,10 @@ require_relative 'rsmp/proxy/modules/receive'
69
69
  require_relative 'rsmp/proxy/modules/versions'
70
70
  require_relative 'rsmp/proxy/modules/tasks'
71
71
  require_relative 'rsmp/proxy/proxy'
72
+ require_relative 'rsmp/sxl/interface'
73
+ require_relative 'rsmp/sxl/supervisor_interface'
74
+ require_relative 'rsmp/sxl/site_interface'
75
+ require_relative 'rsmp/sxl/registry'
72
76
  require_relative 'rsmp/proxy/supervisor/modules/status'
73
77
  require_relative 'rsmp/proxy/supervisor/modules/commands'
74
78
  require_relative 'rsmp/proxy/supervisor/modules/alarms'
@@ -78,7 +82,9 @@ require_relative 'rsmp/proxy/site/modules/status'
78
82
  require_relative 'rsmp/proxy/site/modules/aggregated_status'
79
83
  require_relative 'rsmp/proxy/site/modules/alarms'
80
84
  require_relative 'rsmp/proxy/site/modules/commands'
85
+ require_relative 'rsmp/proxy/site/sxl_selection'
81
86
  require_relative 'rsmp/proxy/site/site_proxy'
87
+ require_relative 'rsmp/tlc'
82
88
  require_relative 'rsmp/tlc/modules/system'
83
89
  require_relative 'rsmp/tlc/modules/modes'
84
90
  require_relative 'rsmp/tlc/modules/plans'
@@ -98,7 +104,8 @@ require_relative 'rsmp/tlc/proxy/io'
98
104
  require_relative 'rsmp/tlc/proxy/plans'
99
105
  require_relative 'rsmp/tlc/proxy/status'
100
106
  require_relative 'rsmp/tlc/proxy/system'
101
- require_relative 'rsmp/tlc/traffic_controller_proxy'
107
+ require_relative 'rsmp/tlc/supervisor_interface'
108
+ require_relative 'rsmp/tlc/site_interface'
102
109
  require_relative 'rsmp/tlc/traffic_controller'
103
110
  require_relative 'rsmp/tlc/detector_logic'
104
111
 
data/rsmp.gemspec CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.description = 'Easy RSMP site and supervisor communication.'
14
14
  spec.homepage = 'https://github.com/rsmp-nordic/rsmp'
15
15
  spec.licenses = ['MIT']
16
- spec.required_ruby_version = '>= 3.4.0'
16
+ spec.required_ruby_version = '>= 3.4'
17
17
 
18
18
  spec.metadata['homepage_uri'] = spec.homepage
19
19
  spec.metadata['source_code_uri'] = 'https://github.com/rsmp-nordic/rsmp'
@@ -31,12 +31,12 @@ Gem::Specification.new do |spec|
31
31
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
32
32
  spec.require_paths = ['lib']
33
33
 
34
- spec.add_dependency 'async', '~> 2.32'
34
+ spec.add_dependency 'async', '~> 2.39'
35
35
  spec.add_dependency 'colorize', '~> 1.1'
36
- spec.add_dependency 'io-endpoint', '~> 0.15'
37
- spec.add_dependency 'io-stream', '~> 0.10'
36
+ spec.add_dependency 'io-endpoint', '~> 0.17'
37
+ spec.add_dependency 'io-stream', '~> 0.13'
38
38
  spec.add_dependency 'json_schemer', '~> 2.5'
39
- spec.add_dependency 'logger', '~> 1.6'
39
+ spec.add_dependency 'logger', '~> 1.7'
40
40
  spec.add_dependency 'ostruct', '~> 0.6'
41
41
  spec.add_dependency 'thor', '~> 1.5'
42
42
  end
@@ -0,0 +1,25 @@
1
+ {
2
+ "title" : "Aggregated Status",
3
+ "description" : "Aggregated status message",
4
+ "properties" : {
5
+ "mId" : { "$ref": "definitions.json#/message_id" },
6
+ "aSTS" : { "$ref": "definitions.json#/timestamp" },
7
+ "fP" : {
8
+ "description" : "Functional position",
9
+ "type" : ["string", "null"]
10
+ },
11
+ "fS" : {
12
+ "description" : "Functional position",
13
+ "type" : ["string", "null"]
14
+ },
15
+ "se" : {
16
+ "type" : "array",
17
+ "minItems": 8,
18
+ "maxItems": 8,
19
+ "items" : {
20
+ "type" : "boolean"
21
+ }
22
+ }
23
+ },
24
+ "required" : [ "mId", "aSTS", "fP", "fS", "se" ]
25
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "title" : "Aggregated Status Request",
3
+ "description" : "Aggregated status request message",
4
+ "properties" : {
5
+ "mId" : { "$ref": "definitions.json#/message_id" },
6
+ "cId" : { "$ref": "definitions.json#/component_id" }
7
+ },
8
+ "required" : [ "mId", "cId" ]
9
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "title" : "Alarm",
3
+ "description" : "Alarm messsage",
4
+ "properties" : {
5
+ "mId" : { "$ref": "definitions.json#/message_id" },
6
+ "cId" : { "$ref": "definitions.json#/component_id" },
7
+ "aCId" : { "$ref": "definitions.json#/alarm_code" },
8
+ "xACId" : { "description" : "External alarm code id", "type" : "string" },
9
+ "aSp" : {
10
+ "description" : "Alarm specialization",
11
+ "type" : "string",
12
+ "enum" : [ "Issue", "Acknowledge", "Suspend", "Resume", "Request" ]
13
+ }
14
+ },
15
+ "required" : [ "aSp"],
16
+ "allOf" : [
17
+ {
18
+ "if": {
19
+ "required" : [ "aSp" ],
20
+ "properties" : {
21
+ "aSp" : { "enum" : [ "Issue"] }
22
+ }
23
+ },
24
+ "then": { "$ref": "alarm_issue.json" }
25
+ },
26
+ {
27
+ "if": {
28
+ "allOf" : [
29
+ {
30
+ "required" : [ "aSp" ],
31
+ "properties" : {
32
+ "aSp" : { "enum" : [ "Suspend", "Resume"] }
33
+ }
34
+ },
35
+ {
36
+ "not": { "required" : [ "sS" ] }
37
+ }
38
+ ]
39
+ },
40
+ "then": { "$ref": "alarm_suspend_resume.json" }
41
+ },
42
+ {
43
+ "if": {
44
+ "required" : [ "aSp", "sS" ],
45
+ "properties" : {
46
+ "aSp" : { "enum" : [ "Suspend", "Resume"] },
47
+ "sS" : { "enum" : [ "Suspended", "notSuspended"] }
48
+ }
49
+ },
50
+ "then": { "$ref": "alarm_suspended_resumed.json" }
51
+ },
52
+ {
53
+ "if": {
54
+ "required" : [ "aSp" ],
55
+ "properties" : {
56
+ "aSp" : { "enum" : [ "Request"] }
57
+ }
58
+ },
59
+ "then": { "$ref": "alarm_request.json" }
60
+ },
61
+ {
62
+ "if": {
63
+ "required" : [ "aSp" ],
64
+ "properties" : {
65
+ "aSp" : { "enum" : [ "Acknowledge"] }
66
+ }
67
+ },
68
+ "then": { "$ref": "alarm_acknowledge.json" }
69
+ }
70
+ ]
71
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "properties" : {
3
+ "ack" : {
4
+ "description" : "Acknowledgement",
5
+ "type" : "string",
6
+ "enum" : [ "Acknowledged", "notAcknowledged" ]
7
+ },
8
+ "aTs" : { "$ref": "definitions.json#/timestamp" }
9
+ },
10
+ "required" : [ "mId", "cId", "aCId", "xACId", "aSp", "aTs" ]
11
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "properties" : {
3
+ "ack" : {
4
+ "description" : "Acknowledgement",
5
+ "type" : "string",
6
+ "enum" : [ "Acknowledged", "notAcknowledged" ]
7
+ },
8
+ "aS" : {
9
+ "description" : "Active status",
10
+ "type" : "string",
11
+ "enum" : [ "inActive", "Active" ]
12
+ },
13
+ "sS" : {
14
+ "description" : "Suspend status",
15
+ "type" : "string",
16
+ "enum" : [ "suspended", "notSuspended" ]
17
+ },
18
+ "aTs" : { "$ref": "definitions.json#/timestamp" },
19
+ "cat" : {
20
+ "description" : "Category",
21
+ "type" : "string",
22
+ "enum" : [ "T", "D" ]
23
+ },
24
+ "pri" : {
25
+ "description" : "Priority",
26
+ "type" : "string",
27
+ "enum" : [ "1", "2", "3" ]
28
+ },
29
+ "rvs" : {
30
+ "description" : "Return values",
31
+ "type" : "array",
32
+ "items" : {
33
+ "type" : "object",
34
+ "properties": {
35
+ "n" : { "description" : "Unique reference of the value", "type" : "string" },
36
+ "v" : { "description" : "Value", "type" : "string" }
37
+ },
38
+ "required" : [ "n", "v" ],
39
+ "additionalProperties": false
40
+ }
41
+ }
42
+ },
43
+ "required" : [ "mId", "cId", "aCId", "xACId", "aSp", "ack", "aS", "aTs", "sS", "cat", "pri", "rvs" ]
44
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "required" : [ "mId", "cId", "aCId", "xACId", "aSp" ]
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "required" : [ "mId", "cId", "aCId", "xACId", "aSp" ]
3
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "properties" : {
3
+ "ack" : {
4
+ "description" : "Acknowledgement",
5
+ "type" : "string",
6
+ "enum" : [ "Acknowledged", "notAcknowledged" ]
7
+ },
8
+ "aS" : {
9
+ "description" : "Active status",
10
+ "type" : "string",
11
+ "enum" : [ "inActive", "Active" ]
12
+ },
13
+ "sS" : {
14
+ "description" : "Suspend status",
15
+ "type" : "string",
16
+ "enum" : [ "Suspended", "notSuspended" ]
17
+ },
18
+ "aTs" : { "$ref": "definitions.json#/timestamp" },
19
+ "cat" : {
20
+ "description" : "Category",
21
+ "type" : "string",
22
+ "enum" : [ "T", "D" ]
23
+ },
24
+ "pri" : {
25
+ "description" : "Priority",
26
+ "type" : "string",
27
+ "enum" : [ "1", "2", "3" ]
28
+ },
29
+ "rvs" : {
30
+ "description" : "Return values",
31
+ "type" : "array",
32
+ "items" : {
33
+ "type" : "object",
34
+ "properties": {
35
+ "n" : { "description" : "Unique reference of the value", "type" : "string" },
36
+ "v" : { "description" : "Value", "type" : "string" }
37
+ },
38
+ "required" : [ "n", "v" ],
39
+ "additionalProperties": false
40
+ }
41
+ }
42
+ },
43
+ "required" : [ "mId", "cId", "aCId", "xACId", "aSp", "ack", "aS", "aTs", "sS", "cat", "pri", "rvs" ]
44
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "title" : "CommandRequest",
3
+ "description" : "Command request",
4
+ "properties" : {
5
+ "mId" : { "$ref": "definitions.json#/message_id" },
6
+ "cId" : { "$ref": "definitions.json#/component_id" },
7
+ "arg" : {
8
+ "description" : "Command arguments",
9
+ "type" : "array",
10
+ "minItems": 1,
11
+ "items" : {
12
+ "type" : "object",
13
+ "properties": {
14
+ "cCI" : { "$ref": "definitions.json#/command_code" },
15
+ "n" : { "description" : "Unique reference of the value", "type" : "string" },
16
+ "cO" : { "description" : "Command", "type" : "string" },
17
+ "v" : { "description" : "Value" }
18
+ },
19
+ "required" : [ "cCI", "n", "cO", "v" ]
20
+ }
21
+ }
22
+ },
23
+ "required" : [ "mId", "cId", "arg"]
24
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "title" : "CommandRequest",
3
+ "description" : "Command request",
4
+ "properties" : {
5
+ "mId" : { "$ref": "definitions.json#/message_id" },
6
+ "cId" : { "$ref": "definitions.json#/component_id" },
7
+ "cTS" : { "$ref": "definitions.json#/timestamp" },
8
+ "rvs" : {
9
+ "description" : "Command arguments",
10
+ "type" : "array",
11
+ "minItems" : 1,
12
+ "items" : {
13
+ "type" : "object",
14
+ "properties": {
15
+ "cCI" : { "$ref": "definitions.json#/command_code" },
16
+ "n" : {
17
+ "description" : "Unique reference of the value",
18
+ "type" : "string"
19
+ },
20
+ "v" : {
21
+ "description" : "Value"
22
+ },
23
+ "age" : {
24
+ "description" : "Age of the value",
25
+ "type" : "string",
26
+ "enum" : [ "recent", "old", "undefined", "unknown" ]
27
+ }
28
+ },
29
+ "required" : [ "cCI", "n", "v", "age" ],
30
+ "additionalProperties": false
31
+ }
32
+ }
33
+ },
34
+ "required" : [ "mId", "cId", "cTS", "rvs" ]
35
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "title" : "ComponentList",
3
+ "description" : "Component list message",
4
+ "properties" : {
5
+ "mId" : { "$ref": "definitions.json#/message_id" },
6
+ "components" : {
7
+ "description" : "Components on the site",
8
+ "type" : "array",
9
+ "minItems" : 1,
10
+ "items" : {
11
+ "type" : "object",
12
+ "properties" : {
13
+ "id" : { "$ref": "definitions.json#/component_id" },
14
+ "type" : { "$ref": "definitions.json#/component_type" },
15
+ "name" : { "$ref": "definitions.json#/component_name" }
16
+ },
17
+ "required" : [ "id", "type", "name" ],
18
+ "additionalProperties" : false
19
+ },
20
+ "uniqueItems" : true
21
+ }
22
+ },
23
+ "required" : [ "mId", "components" ]
24
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "$schema" : "https://json-schema.org/draft/2020-12/schema",
3
+ "name" : "core",
4
+ "description" : "Core",
5
+ "version" : "3.3.0",
6
+ "type" : "object",
7
+ "allOf" : [
8
+ {
9
+ "properties" : {
10
+ "mType" : {
11
+ "description" : "Supported RSMP versions",
12
+ "type" : "string",
13
+ "const" : "rSMsg"
14
+ },
15
+ "type" : {
16
+ "description" : "Type of RMSP message",
17
+ "type" : "string",
18
+ "enum" : [
19
+ "MessageAck",
20
+ "MessageNotAck",
21
+ "Version",
22
+ "ComponentList",
23
+ "AggregatedStatus",
24
+ "AggregatedStatusRequest",
25
+ "Watchdog",
26
+ "Alarm",
27
+ "CommandRequest",
28
+ "CommandResponse",
29
+ "StatusRequest",
30
+ "StatusResponse",
31
+ "StatusSubscribe",
32
+ "StatusUnsubscribe",
33
+ "StatusUpdate"
34
+ ]
35
+ }
36
+ },
37
+ "required" : [ "mType", "type" ]
38
+ }
39
+ ]
40
+ }