rsmp 0.9.6 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41a71b0cd593d1ab4c3f9d0707929106b73d9ec6d8ce36a0f087f3efa73dccc3
4
- data.tar.gz: 553a83ff465de1d07cc7e82531100059686caaf59710f7a452adbf07452f0bb0
3
+ metadata.gz: 71af49e549129bf32f9137a2799c91b43ba19e5e7adb15f777a181919c19dbd0
4
+ data.tar.gz: 15c8f8c96ed3838f0b0b948b5d0e9be895ec965a9f651a529a44b214426242ec
5
5
  SHA512:
6
- metadata.gz: df2053f172e30f6fd57fe6794b99636729a0909ae1e382b12171ec5927fa744b3ec9ba689ebdde117fb8744c2b2182bff1d91c97e8936aeb1dafff53fb663fd5
7
- data.tar.gz: 5eefd3e4c7ebe6c9eeeaf5e9c29f7681b52f69dc42e122afeda559b81698644ceb64b8321e4785df8c485f9fc8c235751ac5676e0a3d0e9289a0857847bedd2d
6
+ metadata.gz: 33206373986495e8c8d9871c83d465d2961db86c2713e0056eb1e5a0fb6f153dc506c05f549bc52f6963f7aeb7e1b7f78f387b479893babe8f0d77cd0efbffe3
7
+ data.tar.gz: 125e125b49bb0a5d99234d8aa4bac4a3107de077fb7adc55a1e70cbf0544c0b163355cfac4a94eeae1e412b8951e4f5fab8d2846187e2d7479c626e0adf81530
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rsmp (0.9.6)
4
+ rsmp (0.9.9)
5
5
  async (~> 1.29.1)
6
6
  async-io (~> 1.32.2)
7
7
  colorize (~> 0.8.1)
data/config/tlc.yaml CHANGED
@@ -31,6 +31,11 @@ signal_plans:
31
31
  A2: 'NNNNBN'
32
32
  B1: 'BBNNNN'
33
33
  B2: 'BNNNNN'
34
+ inputs:
35
+ total: 8
36
+ programming:
37
+ 8:
38
+ raise: A0301
34
39
  startup_sequence: 'efg'
35
40
  intervals:
36
41
  timer: 0.1
data/lib/rsmp/error.rb CHANGED
@@ -64,4 +64,7 @@ module RSMP
64
64
 
65
65
  class RepeatedStatusError < Error
66
66
  end
67
+
68
+ class TimestampError < Error
69
+ end
67
70
  end
@@ -72,7 +72,7 @@ module RSMP
72
72
  else
73
73
  super message
74
74
  end
75
- rescue RSMP::RepeatedAlarmError, RSMP::RepeatedStatusError => e
75
+ rescue RSMP::RepeatedAlarmError, RSMP::RepeatedStatusError, RSMP::TimestampError => e
76
76
  str = "Rejected #{message.type} message,"
77
77
  dont_acknowledge message, str, "#{e}"
78
78
  notify_error e.exception("#{str}#{e.message} #{message.json}")
@@ -10,14 +10,22 @@ module RSMP
10
10
  :startup_sequence_active, :startup_sequence, :startup_sequence_pos
11
11
 
12
12
  def initialize node:, id:, cycle_time: 10, signal_plans:,
13
- startup_sequence:, live_output:nil
13
+ startup_sequence:, live_output:nil, inputs:{}
14
14
  super node: node, id: id, grouped: true
15
15
  @signal_groups = []
16
16
  @detector_logics = []
17
17
  @plans = signal_plans
18
18
  @cycle_time = cycle_time
19
19
  @num_traffic_situations = 1
20
- @num_inputs = 8
20
+
21
+ if inputs
22
+ @num_inputs = inputs['total'] || 8
23
+ @input_programming = inputs['programming']
24
+ else
25
+ @num_inputs = 8
26
+ @input_programming = nil
27
+ end
28
+
21
29
  @startup_sequence = startup_sequence
22
30
  @live_output = live_output
23
31
  reset
@@ -274,11 +282,24 @@ module RSMP
274
282
  idx = input - 1
275
283
  @input_activations[idx] = bool_string_to_digit arg['status']
276
284
  recompute_input idx
277
- if @input_activations[idx] == '1'
285
+ activate = @input_activations[idx] == '1'
286
+ if activate
278
287
  log "Activating input #{input}", level: :info
279
288
  else
280
289
  log "Deactivating input #{input}", level: :info
281
290
  end
291
+
292
+ if @input_programming
293
+ actions = @input_programming[input]
294
+ if actions && actions['raise']
295
+ alarm_code = actions['raise']
296
+ if activate
297
+ log "Activating alarm #{alarm_code}, due to input #{input} programming", level: :info
298
+ else
299
+ log "Deactivating alarm #{alarm_code}, due to input #{input} programming", level: :info
300
+ end
301
+ end
302
+ end
282
303
  end
283
304
 
284
305
  def handle_m0007 arg
@@ -359,9 +380,8 @@ module RSMP
359
380
  @node.verify_security_code 2, arg['securityCode']
360
381
  input = arg['input'].to_i
361
382
  idx = input - 1
362
- unless idx>=0 && input<@num_inputs # TODO should NotAck
363
- log "Can't force input #{idx+1}, only have #{@num_inputs} inputs", level: :warning
364
- return
383
+ unless input>0 && input<=@num_inputs
384
+ raise MessageRejected.new("Can't force input #{input}, only have #{@num_inputs} inputs")
365
385
  end
366
386
  @input_forced[idx] = bool_string_to_digit arg['status']
367
387
  if @input_forced[idx]
@@ -369,9 +389,9 @@ module RSMP
369
389
  end
370
390
  recompute_input idx
371
391
  if @input_forced[idx]
372
- log "Forcing input #{idx+1} to #{@input_forced_values[idx]}, #{@input_results}", level: :info
392
+ log "Forcing input #{input} to #{@input_forced_values[idx]}", level: :info
373
393
  else
374
- log "Releasing input #{idx+1}", level: :info
394
+ log "Releasing input #{input}", level: :info
375
395
  end
376
396
  end
377
397
 
@@ -430,7 +450,7 @@ module RSMP
430
450
  if reverting
431
451
  log "Reverting to functional position #{mode} after timeout", level: :info
432
452
  elsif timeout && timeout > 0
433
- log "Switching to functional position #{mode} with timeout #{timeout}min", level: :info
453
+ log "Switching to functional position #{mode} with timeout #{(timeout/60).round(1)}min", level: :info
434
454
  @previous_functional_position = @function_position
435
455
  now = clock.now
436
456
  @functional_position_timeout = now + timeout
@@ -56,7 +56,8 @@ module RSMP
56
56
  cycle_time: settings['cycle_time'],
57
57
  startup_sequence: @startup_sequence,
58
58
  signal_plans: @signal_plans,
59
- live_output: @site_settings['live_output']
59
+ live_output: @site_settings['live_output'],
60
+ inputs: @site_settings['inputs']
60
61
  when 'signal_group'
61
62
  group = SignalGroup.new node: self, id: id
62
63
  @main.add_signal_group group
data/lib/rsmp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RSMP
2
- VERSION = "0.9.6"
2
+ VERSION = "0.9.9"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsmp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.6
4
+ version: 0.9.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emil Tin