rsmp_schemer 0.2.0 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/Gemfile.lock +5 -5
  4. data/lib/rsmp_schemer/schemer.rb +24 -15
  5. data/lib/rsmp_schemer/version.rb +1 -1
  6. data/schemas/tlc_1.0.10/schema/tlc/alarms/A0301.json +1 -1
  7. data/schemas/tlc_1.0.10/schema/tlc/alarms/A0302.json +1 -1
  8. data/schemas/tlc_1.0.10/schema/tlc/commands/M0002.json +1 -1
  9. data/schemas/tlc_1.0.10/schema/tlc/commands/M0003.json +1 -1
  10. data/schemas/tlc_1.0.10/schema/tlc/commands/M0004.json +1 -1
  11. data/schemas/tlc_1.0.10/schema/tlc/commands/M0005.json +1 -1
  12. data/schemas/tlc_1.0.10/schema/tlc/commands/M0006.json +1 -1
  13. data/schemas/tlc_1.0.10/schema/tlc/commands/M0007.json +1 -1
  14. data/schemas/tlc_1.0.10/schema/tlc/commands/M0008.json +2 -2
  15. data/schemas/tlc_1.0.10/schema/tlc/commands/M0010.json +1 -1
  16. data/schemas/tlc_1.0.10/schema/tlc/commands/M0011.json +1 -1
  17. data/schemas/tlc_1.0.10/schema/tlc/commands/M0019.json +100 -0
  18. data/schemas/tlc_1.0.10/schema/tlc/statuses/S0001.json +1 -1
  19. data/schemas/tlc_1.0.10/schema/tlc/statuses/S0005.json +1 -1
  20. data/schemas/tlc_1.0.10/schema/tlc/statuses/S0006.json +1 -1
  21. data/schemas/tlc_1.0.10/schema/tlc/statuses/statuses.json +1 -257
  22. data/schemas/tlc_1.0.13/schema/tlc/alarms/A0301.json +1 -1
  23. data/schemas/tlc_1.0.13/schema/tlc/alarms/A0302.json +1 -1
  24. data/schemas/tlc_1.0.13/schema/tlc/commands/M0002.json +1 -1
  25. data/schemas/tlc_1.0.13/schema/tlc/commands/M0003.json +1 -1
  26. data/schemas/tlc_1.0.13/schema/tlc/commands/M0004.json +1 -1
  27. data/schemas/tlc_1.0.13/schema/tlc/commands/M0005.json +1 -1
  28. data/schemas/tlc_1.0.13/schema/tlc/commands/M0006.json +1 -1
  29. data/schemas/tlc_1.0.13/schema/tlc/commands/M0007.json +1 -1
  30. data/schemas/tlc_1.0.13/schema/tlc/commands/M0008.json +2 -2
  31. data/schemas/tlc_1.0.13/schema/tlc/commands/M0010.json +1 -1
  32. data/schemas/tlc_1.0.13/schema/tlc/commands/M0011.json +1 -1
  33. data/schemas/tlc_1.0.13/schema/tlc/commands/M0019.json +2 -2
  34. data/schemas/tlc_1.0.13/schema/tlc/statuses/S0001.json +1 -1
  35. data/schemas/tlc_1.0.13/schema/tlc/statuses/S0005.json +1 -1
  36. data/schemas/tlc_1.0.13/schema/tlc/statuses/S0006.json +1 -1
  37. data/schemas/tlc_1.0.13/schema/tlc/statuses/S0023.json +1 -1
  38. data/schemas/tlc_1.0.13/schema/tlc/statuses/statuses.json +1 -99
  39. data/schemas/tlc_1.0.13/spec/tlc/S0023_spec.rb +96 -0
  40. data/schemas/tlc_1.0.14/schema/tlc/alarms/A0301.json +1 -1
  41. data/schemas/tlc_1.0.14/schema/tlc/alarms/A0302.json +1 -1
  42. data/schemas/tlc_1.0.14/schema/tlc/commands/M0002.json +1 -1
  43. data/schemas/tlc_1.0.14/schema/tlc/commands/M0003.json +1 -1
  44. data/schemas/tlc_1.0.14/schema/tlc/commands/M0004.json +1 -1
  45. data/schemas/tlc_1.0.14/schema/tlc/commands/M0005.json +1 -1
  46. data/schemas/tlc_1.0.14/schema/tlc/commands/M0006.json +1 -1
  47. data/schemas/tlc_1.0.14/schema/tlc/commands/M0007.json +1 -1
  48. data/schemas/tlc_1.0.14/schema/tlc/commands/M0008.json +2 -2
  49. data/schemas/tlc_1.0.14/schema/tlc/commands/M0010.json +1 -1
  50. data/schemas/tlc_1.0.14/schema/tlc/commands/M0011.json +1 -1
  51. data/schemas/tlc_1.0.14/schema/tlc/commands/M0019.json +2 -2
  52. data/schemas/tlc_1.0.14/schema/tlc/statuses/S0001.json +1 -1
  53. data/schemas/tlc_1.0.14/schema/tlc/statuses/S0005.json +1 -1
  54. data/schemas/tlc_1.0.14/schema/tlc/statuses/S0006.json +1 -1
  55. data/schemas/tlc_1.0.14/schema/tlc/statuses/S0023.json +1 -1
  56. data/schemas/tlc_1.0.14/schema/tlc/statuses/statuses.json +0 -34
  57. data/schemas/tlc_1.0.14/spec/tlc/S0023_spec.rb +96 -0
  58. data/schemas/tlc_1.0.15/schema/tlc/statuses/S0001.json +1 -1
  59. data/schemas/tlc_1.0.15/schema/tlc/statuses/S0023.json +1 -1
  60. data/schemas/tlc_1.0.15/spec/tlc/S0023_spec.rb +96 -0
  61. data/schemas/tlc_1.0.7/schema/tlc/alarms/A0301.json +1 -1
  62. data/schemas/tlc_1.0.7/schema/tlc/alarms/A0302.json +1 -1
  63. data/schemas/tlc_1.0.7/schema/tlc/commands/M0002.json +1 -1
  64. data/schemas/tlc_1.0.7/schema/tlc/commands/M0003.json +1 -1
  65. data/schemas/tlc_1.0.7/schema/tlc/commands/M0004.json +1 -1
  66. data/schemas/tlc_1.0.7/schema/tlc/commands/M0005.json +1 -1
  67. data/schemas/tlc_1.0.7/schema/tlc/commands/M0006.json +1 -1
  68. data/schemas/tlc_1.0.7/schema/tlc/commands/M0007.json +1 -1
  69. data/schemas/tlc_1.0.7/schema/tlc/commands/M0008.json +2 -2
  70. data/schemas/tlc_1.0.7/schema/tlc/commands/M0010.json +1 -1
  71. data/schemas/tlc_1.0.7/schema/tlc/commands/M0011.json +1 -1
  72. data/schemas/tlc_1.0.7/schema/tlc/commands/M0019.json +100 -0
  73. data/schemas/tlc_1.0.7/schema/tlc/statuses/S0001.json +1 -1
  74. data/schemas/tlc_1.0.7/schema/tlc/statuses/S0005.json +1 -1
  75. data/schemas/tlc_1.0.7/schema/tlc/statuses/S0006.json +1 -1
  76. data/schemas/tlc_1.0.7/schema/tlc/statuses/statuses.json +1 -77
  77. data/schemas/tlc_1.0.8/schema/tlc/alarms/A0301.json +1 -1
  78. data/schemas/tlc_1.0.8/schema/tlc/alarms/A0302.json +1 -1
  79. data/schemas/tlc_1.0.8/schema/tlc/commands/M0002.json +1 -1
  80. data/schemas/tlc_1.0.8/schema/tlc/commands/M0003.json +1 -1
  81. data/schemas/tlc_1.0.8/schema/tlc/commands/M0004.json +1 -1
  82. data/schemas/tlc_1.0.8/schema/tlc/commands/M0005.json +1 -1
  83. data/schemas/tlc_1.0.8/schema/tlc/commands/M0006.json +1 -1
  84. data/schemas/tlc_1.0.8/schema/tlc/commands/M0007.json +1 -1
  85. data/schemas/tlc_1.0.8/schema/tlc/commands/M0008.json +2 -2
  86. data/schemas/tlc_1.0.8/schema/tlc/commands/M0010.json +1 -1
  87. data/schemas/tlc_1.0.8/schema/tlc/commands/M0011.json +1 -1
  88. data/schemas/tlc_1.0.8/schema/tlc/commands/M0019.json +100 -0
  89. data/schemas/tlc_1.0.8/schema/tlc/statuses/S0001.json +1 -1
  90. data/schemas/tlc_1.0.8/schema/tlc/statuses/S0005.json +1 -1
  91. data/schemas/tlc_1.0.8/schema/tlc/statuses/S0006.json +1 -1
  92. data/schemas/tlc_1.0.8/schema/tlc/statuses/statuses.json +1 -77
  93. data/schemas/tlc_1.0.9/schema/tlc/alarms/A0301.json +1 -1
  94. data/schemas/tlc_1.0.9/schema/tlc/alarms/A0302.json +1 -1
  95. data/schemas/tlc_1.0.9/schema/tlc/commands/M0002.json +1 -1
  96. data/schemas/tlc_1.0.9/schema/tlc/commands/M0003.json +1 -1
  97. data/schemas/tlc_1.0.9/schema/tlc/commands/M0004.json +1 -1
  98. data/schemas/tlc_1.0.9/schema/tlc/commands/M0005.json +1 -1
  99. data/schemas/tlc_1.0.9/schema/tlc/commands/M0006.json +1 -1
  100. data/schemas/tlc_1.0.9/schema/tlc/commands/M0007.json +1 -1
  101. data/schemas/tlc_1.0.9/schema/tlc/commands/M0008.json +2 -2
  102. data/schemas/tlc_1.0.9/schema/tlc/commands/M0010.json +1 -1
  103. data/schemas/tlc_1.0.9/schema/tlc/commands/M0011.json +1 -1
  104. data/schemas/tlc_1.0.9/schema/tlc/commands/M0019.json +100 -0
  105. data/schemas/tlc_1.0.9/schema/tlc/statuses/S0001.json +1 -1
  106. data/schemas/tlc_1.0.9/schema/tlc/statuses/S0005.json +1 -1
  107. data/schemas/tlc_1.0.9/schema/tlc/statuses/S0006.json +1 -1
  108. data/schemas/tlc_1.0.9/schema/tlc/statuses/statuses.json +1 -77
  109. metadata +10 -3
@@ -97,7 +97,7 @@
97
97
  "properties" : {
98
98
  "v" : {
99
99
  "description" : "Manually controlled detector logic (True/False)",
100
- "type" : "boolean"
100
+ "$ref" : "../../core/definitions.json#/boolean"
101
101
  }
102
102
  }
103
103
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Controller uses time plan according to programming\nTrue: Controller uses time plan according to command",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Controller uses traffic situation according to own programming\nTrue: Controller uses traffic situation according to command",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "True: Restart controller",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Activate emergency route\nTrue: Deactivate emergency route",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Deactivate input\nTrue: Activate input",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "False: Deactivate fixed time control\nTrue: Activate fixed time control",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Deactivate manual control of detector logic\nTrue: Activate manual control of detector logic",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -70,7 +70,7 @@
70
70
  "properties" : {
71
71
  "v" : {
72
72
  "description" : "False: Deactivate detector logic\nTrue: Activate detector logic",
73
- "type" : "boolean"
73
+ "$ref" : "../../core/definitions.json#/boolean"
74
74
  }
75
75
  }
76
76
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "False: No command (default)\nTrue: Order a signal group to green",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "False: No command (default)\nTrue: Order a signal group to red",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -31,7 +31,7 @@
31
31
  "properties" : {
32
32
  "v" : {
33
33
  "description" : "False: Force input\nTrue: Release input",
34
- "type" : "boolean"
34
+ "$ref" : "../../core/definitions.json#/boolean"
35
35
  }
36
36
  }
37
37
  }
@@ -91,7 +91,7 @@
91
91
  "properties" : {
92
92
  "v" : {
93
93
  "description" : "False: input forced to False\nTrue: input forced to True",
94
- "type" : "boolean"
94
+ "$ref" : "../../core/definitions.json#/boolean"
95
95
  }
96
96
  }
97
97
  }
@@ -29,7 +29,7 @@
29
29
  "s" : {
30
30
  "description" : "Signal group status as text field",
31
31
  "type" : "string",
32
- "pattern" : "^[a-hA-G0-9N-P]+$"
32
+ "pattern" : "^[a-hA-G0-9N-P]*$"
33
33
  }
34
34
  }
35
35
  }
@@ -25,7 +25,7 @@
25
25
  "properties" : {
26
26
  "s" : {
27
27
  "description" : "False: Controller is not in start up mode\nTrue: Controller is currently in start up mode",
28
- "type" : "boolean"
28
+ "$ref" : "../../core/definitions.json#/boolean"
29
29
  }
30
30
  }
31
31
  }
@@ -26,7 +26,7 @@
26
26
  "properties" : {
27
27
  "s" : {
28
28
  "description" : "False: Emergency stage inactive\nTrue: Emergency stage active",
29
- "type" : "boolean"
29
+ "$ref" : "../../core/definitions.json#/boolean"
30
30
  }
31
31
  }
32
32
  }
@@ -26,7 +26,7 @@
26
26
  "s" : {
27
27
  "description" : "Dynamic bands.\nEach dynamic band are written as pp-dd-ee where:\npp=Time plan\ndd=Dynamic band number (from 1-10)\nee=Extension in seconds in this band\n\nEach dynamic band is separated with a comma.\n\nE.g.\npp-dd-ee,pp-dd-ee",
28
28
  "type" : "string",
29
- "pattern" : "^(\\d{1,2}\\-\\d{1,2}-\\d{1,2})(?:,(\\d{1,2}\\-\\d{1,2}-\\d{1,2}))*$"
29
+ "pattern" : "(^$)|(^(?<item>(\\d{1,2})\\-\\d{1,2}-\\d{1,2})(,\\g<item>)*$)"
30
30
  }
31
31
  }
32
32
  }
@@ -36,22 +36,14 @@
36
36
  "S0027",
37
37
  "S0028",
38
38
  "S0029",
39
- "S0030",
40
- "S0031",
41
39
  "S0091",
42
40
  "S0092",
43
41
  "S0095",
44
42
  "S0096",
45
- "S0097",
46
- "S0098",
47
43
  "S0201",
48
44
  "S0202",
49
45
  "S0203",
50
- "S0204",
51
- "S0205",
52
- "S0206",
53
- "S0207",
54
- "S0208"
46
+ "S0204"
55
47
  ]
56
48
  }
57
49
  }
@@ -491,36 +483,6 @@
491
483
  "$ref" : "S0029.json"
492
484
  }
493
485
  },
494
- {
495
- "if" : {
496
- "required" : [
497
- "sCI"
498
- ],
499
- "properties" : {
500
- "sCI" : {
501
- "const" : "S0030"
502
- }
503
- }
504
- },
505
- "then" : {
506
- "$ref" : "S0030.json"
507
- }
508
- },
509
- {
510
- "if" : {
511
- "required" : [
512
- "sCI"
513
- ],
514
- "properties" : {
515
- "sCI" : {
516
- "const" : "S0031"
517
- }
518
- }
519
- },
520
- "then" : {
521
- "$ref" : "S0031.json"
522
- }
523
- },
524
486
  {
525
487
  "if" : {
526
488
  "required" : [
@@ -670,66 +632,6 @@
670
632
  "then" : {
671
633
  "$ref" : "S0204.json"
672
634
  }
673
- },
674
- {
675
- "if" : {
676
- "required" : [
677
- "sCI"
678
- ],
679
- "properties" : {
680
- "sCI" : {
681
- "const" : "S0205"
682
- }
683
- }
684
- },
685
- "then" : {
686
- "$ref" : "S0205.json"
687
- }
688
- },
689
- {
690
- "if" : {
691
- "required" : [
692
- "sCI"
693
- ],
694
- "properties" : {
695
- "sCI" : {
696
- "const" : "S0206"
697
- }
698
- }
699
- },
700
- "then" : {
701
- "$ref" : "S0206.json"
702
- }
703
- },
704
- {
705
- "if" : {
706
- "required" : [
707
- "sCI"
708
- ],
709
- "properties" : {
710
- "sCI" : {
711
- "const" : "S0207"
712
- }
713
- }
714
- },
715
- "then" : {
716
- "$ref" : "S0207.json"
717
- }
718
- },
719
- {
720
- "if" : {
721
- "required" : [
722
- "sCI"
723
- ],
724
- "properties" : {
725
- "sCI" : {
726
- "const" : "S0208"
727
- }
728
- }
729
- },
730
- "then" : {
731
- "$ref" : "S0208.json"
732
- }
733
635
  }
734
636
  ]
735
637
  }
@@ -0,0 +1,96 @@
1
+ RSpec.describe "Traffic Light Controller RSMP SXL Schema validation" do
2
+ let(:message) {{
3
+ "mType" => "rSMsg",
4
+ "mId" => "4173c2c8-a933-43cb-9425-66d4613731ed",
5
+ "type" => "StatusResponse",
6
+ "cId" => "O+14439=481WA001",
7
+ "sTs" => "2015-06-08T09:15:18.266Z",
8
+ "sS" => [
9
+ { "sCI" => "S0023", "n" => "status", "s" => "", "q" => "recent" }
10
+ ]
11
+ }}
12
+
13
+ it 'accepts empty list' do
14
+ message["sS"][0]['s'] = ''
15
+ expect( validate(message) ).to be_nil
16
+ end
17
+ it 'accepts one digit' do
18
+ message["sS"][0]['s'] = '1-1-0'
19
+ expect( validate(message) ).to be_nil
20
+ end
21
+
22
+ it 'accepts two digits' do
23
+ message["sS"][0]['s'] = '01-01-20'
24
+ expect( validate(message) ).to be_nil
25
+ end
26
+
27
+ it 'rejects three digits or more' do
28
+ message["sS"][0]['s'] = '01-01-100'
29
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
30
+
31
+ message["sS"][0]['s'] = '100-01-01'
32
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
33
+ end
34
+
35
+ it 'accepts comma-separated items' do
36
+ message["sS"][0]['s'] = '1-1-0,1-2-0'
37
+ expect( validate(message) ).to be_nil
38
+
39
+ message["sS"][0]['s'] = '1-1-0,1-2-0,2-4-5'
40
+ expect( validate(message) ).to be_nil
41
+ end
42
+
43
+ it 'rejects comma-separated lists with spaces' do
44
+ message["sS"][0]['s'] = '1-1-0, 1-2-0'
45
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
46
+
47
+ message["sS"][0]['s'] = '1-1-0 ,1-2-0'
48
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
49
+ end
50
+
51
+ it 'rejects comma-separated lists with trailing comma' do
52
+ message["sS"][0]['s'] = '1-1-0,'
53
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
54
+ end
55
+
56
+ it 'rejects comma-separated lists with leading comma' do
57
+ message["sS"][0]['s'] = ',1-1-0'
58
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
59
+ end
60
+
61
+ it 'rejects comma-separated lists with empty items' do
62
+ message["sS"][0]['s'] = '1-1-0,,1-2-0'
63
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
64
+ end
65
+
66
+ it 'rejects negatives' do
67
+ message["sS"][0]['s'] = '-1-2-3'
68
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
69
+
70
+ message["sS"][0]['s'] = '1--2-3'
71
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
72
+
73
+ message["sS"][0]['s'] = '1-2--3'
74
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
75
+ end
76
+
77
+ it 'rejects floats' do
78
+ message["sS"][0]['s'] = '.1-2-3'
79
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
80
+
81
+ message["sS"][0]['s'] = '1-.2-3'
82
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
83
+
84
+ message["sS"][0]['s'] = '1-2-.3'
85
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
86
+
87
+ message["sS"][0]['s'] = '1.-2-3'
88
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
89
+
90
+ message["sS"][0]['s'] = '1-2.-3'
91
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
92
+
93
+ message["sS"][0]['s'] = '1-2-3.'
94
+ expect( validate(message) ).to eq([["/sS/0/s", "pattern"]])
95
+ end
96
+ end
@@ -96,7 +96,7 @@
96
96
  "properties" : {
97
97
  "v" : {
98
98
  "description" : "Manually controlled detector logic (True/False)",
99
- "type" : "boolean"
99
+ "$ref" : "../../core/definitions.json#/boolean"
100
100
  }
101
101
  }
102
102
  }
@@ -97,7 +97,7 @@
97
97
  "properties" : {
98
98
  "v" : {
99
99
  "description" : "Manually controlled detector logic (True/False)",
100
- "type" : "boolean"
100
+ "$ref" : "../../core/definitions.json#/boolean"
101
101
  }
102
102
  }
103
103
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Controller uses time plan according to programming\nTrue: Controller uses time plan according to command",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Controller uses traffic situation according to own programming\nTrue: Controller uses traffic situation according to command",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "True: Restart controller",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Activate emergency route\nTrue: Deactivate emergency route",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Deactivate input\nTrue: Activate input",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "False: Deactivate fixed time control\nTrue: Activate fixed time control",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -30,7 +30,7 @@
30
30
  "properties" : {
31
31
  "v" : {
32
32
  "description" : "False: Deactivate manual control of detector logic\nTrue: Activate manual control of detector logic",
33
- "type" : "boolean"
33
+ "$ref" : "../../core/definitions.json#/boolean"
34
34
  }
35
35
  }
36
36
  }
@@ -70,7 +70,7 @@
70
70
  "properties" : {
71
71
  "v" : {
72
72
  "description" : "False: Deactivate detector logic\nTrue: Activate detector logic",
73
- "type" : "boolean"
73
+ "$ref" : "../../core/definitions.json#/boolean"
74
74
  }
75
75
  }
76
76
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "False: No command (default)\nTrue: Order a signal group to green",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -29,7 +29,7 @@
29
29
  "properties" : {
30
30
  "v" : {
31
31
  "description" : "False: No command (default)\nTrue: Order a signal group to red",
32
- "type" : "boolean"
32
+ "$ref" : "../../core/definitions.json#/boolean"
33
33
  }
34
34
  }
35
35
  }
@@ -31,7 +31,7 @@
31
31
  "properties" : {
32
32
  "v" : {
33
33
  "description" : "False: Force input\nTrue: Release input",
34
- "type" : "boolean"
34
+ "$ref" : "../../core/definitions.json#/boolean"
35
35
  }
36
36
  }
37
37
  }
@@ -91,7 +91,7 @@
91
91
  "properties" : {
92
92
  "v" : {
93
93
  "description" : "False: input forced to False\nTrue: input forced to True",
94
- "type" : "boolean"
94
+ "$ref" : "../../core/definitions.json#/boolean"
95
95
  }
96
96
  }
97
97
  }
@@ -29,7 +29,7 @@
29
29
  "s" : {
30
30
  "description" : "Signal group status as text field",
31
31
  "type" : "string",
32
- "pattern" : "^[a-hA-G0-9N-P]+$"
32
+ "pattern" : "^[a-hA-G0-9N-P]*$"
33
33
  }
34
34
  }
35
35
  }
@@ -25,7 +25,7 @@
25
25
  "properties" : {
26
26
  "s" : {
27
27
  "description" : "False: Controller is not in start up mode\nTrue: Controller is currently in start up mode",
28
- "type" : "boolean"
28
+ "$ref" : "../../core/definitions.json#/boolean"
29
29
  }
30
30
  }
31
31
  }
@@ -26,7 +26,7 @@
26
26
  "properties" : {
27
27
  "s" : {
28
28
  "description" : "False: Emergency stage inactive\nTrue: Emergency stage active",
29
- "type" : "boolean"
29
+ "$ref" : "../../core/definitions.json#/boolean"
30
30
  }
31
31
  }
32
32
  }
@@ -26,7 +26,7 @@
26
26
  "s" : {
27
27
  "description" : "Dynamic bands.\nEach dynamic band are written as pp-dd-ee where:\npp=Time plan\ndd=Dynamic band number (from 1-10)\nee=Extension in seconds in this band\n\nEach dynamic band is separated with a comma.\n\nE.g.\npp-dd-ee,pp-dd-ee",
28
28
  "type" : "string",
29
- "pattern" : "^(\\d{1,2}\\-\\d{1,2}-\\d{1,2})(?:,(\\d{1,2}\\-\\d{1,2}-\\d{1,2}))*$"
29
+ "pattern" : "(^$)|(^(?<item>(\\d{1,2})\\-\\d{1,2}-\\d{1,2})(,\\g<item>)*$)"
30
30
  }
31
31
  }
32
32
  }
@@ -36,14 +36,10 @@
36
36
  "S0027",
37
37
  "S0028",
38
38
  "S0029",
39
- "S0030",
40
- "S0031",
41
39
  "S0091",
42
40
  "S0092",
43
41
  "S0095",
44
42
  "S0096",
45
- "S0097",
46
- "S0098",
47
43
  "S0201",
48
44
  "S0202",
49
45
  "S0203",
@@ -491,36 +487,6 @@
491
487
  "$ref" : "S0029.json"
492
488
  }
493
489
  },
494
- {
495
- "if" : {
496
- "required" : [
497
- "sCI"
498
- ],
499
- "properties" : {
500
- "sCI" : {
501
- "const" : "S0030"
502
- }
503
- }
504
- },
505
- "then" : {
506
- "$ref" : "S0030.json"
507
- }
508
- },
509
- {
510
- "if" : {
511
- "required" : [
512
- "sCI"
513
- ],
514
- "properties" : {
515
- "sCI" : {
516
- "const" : "S0031"
517
- }
518
- }
519
- },
520
- "then" : {
521
- "$ref" : "S0031.json"
522
- }
523
- },
524
490
  {
525
491
  "if" : {
526
492
  "required" : [