trigger_switch_d 0.1.1 → 0.1.2

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 (137) hide show
  1. data/README.rdoc +74 -57
  2. data/bin/ts_setup +68 -0
  3. data/bin/{teach → ts_teach} +1 -1
  4. data/bin/{turn_off → ts_turn_off} +1 -1
  5. data/bin/{turn_on → ts_turn_on} +1 -1
  6. data/bin/tsd +1 -1
  7. data/config/environment.rb.sample +42 -0
  8. data/config/lookup.dsl +7 -0
  9. data/lib/tellstick/code_converter.rb +56 -0
  10. data/lib/tellstick/protocol/nexa.rb +25 -10
  11. data/lib/tellstick/protocol/not_connected.rb +6 -14
  12. data/lib/tellstick/protocol/null_protocol.rb +6 -14
  13. data/lib/tellstick/protocol/proove.rb +60 -35
  14. data/lib/tellstick/protocol/protocol_loader.rb +2 -3
  15. data/lib/tellstick/protocol/rising_sun.rb +8 -4
  16. data/lib/tellstick/proxy_io.rb +32 -14
  17. data/lib/tellstick/tellstick.rb +4 -12
  18. data/lib/trigger_switch_d/action.rb +54 -19
  19. data/lib/trigger_switch_d/application.rb +77 -34
  20. data/lib/trigger_switch_d/config.rb +85 -35
  21. data/lib/trigger_switch_d/daylight.rb +135 -52
  22. data/lib/trigger_switch_d/ipc.rb +44 -12
  23. data/lib/trigger_switch_d/schedule.rb +20 -13
  24. data/lib/trigger_switch_d/switch.rb +6 -0
  25. data/lib/trigger_switch_d/trigger_switch_d_helper.rb +14 -13
  26. data/samples/devices +14 -0
  27. data/samples/devices.rising_sun +6 -0
  28. data/samples/environment.rb +44 -0
  29. data/samples/lookup.dsl +7 -0
  30. data/samples/scheduled_actions +6 -0
  31. data/samples/scheduled_actions.rising_sun +4 -0
  32. metadata +41 -116
  33. data/doc/classes/Tellstick/Tellstick.html +0 -117
  34. data/doc/classes/Tellstick/TellstickIO.html +0 -265
  35. data/doc/classes/Tellstick/TellstickIO.src/M000020.html +0 -18
  36. data/doc/classes/Tellstick/TellstickIO.src/M000021.html +0 -20
  37. data/doc/classes/Tellstick/TellstickIO.src/M000022.html +0 -26
  38. data/doc/classes/Tellstick/TellstickIO.src/M000023.html +0 -19
  39. data/doc/classes/Tellstick/TellstickIO.src/M000024.html +0 -26
  40. data/doc/classes/Tellstick/TellstickIO.src/M000025.html +0 -16
  41. data/doc/classes/Tellstick/TellstickIO.src/M000026.html +0 -16
  42. data/doc/classes/Tellstick/TellstickIO.src/M000027.html +0 -24
  43. data/doc/classes/Tellstick.html +0 -204
  44. data/doc/classes/Tellstick.src/M000019.html +0 -25
  45. data/doc/classes/TriggerSwitchD/Action.html +0 -165
  46. data/doc/classes/TriggerSwitchD/Action.src/M000015.html +0 -28
  47. data/doc/classes/TriggerSwitchD/Action.src/M000016.html +0 -18
  48. data/doc/classes/TriggerSwitchD/Application.html +0 -203
  49. data/doc/classes/TriggerSwitchD/Application.src/M000017.html +0 -21
  50. data/doc/classes/TriggerSwitchD/Application.src/M000018.html +0 -40
  51. data/doc/classes/TriggerSwitchD/ConfigFactory/Config.html +0 -127
  52. data/doc/classes/TriggerSwitchD/ConfigFactory/Config.src/M000014.html +0 -23
  53. data/doc/classes/TriggerSwitchD/ConfigFactory.html +0 -141
  54. data/doc/classes/TriggerSwitchD/ConfigFactory.src/M000013.html +0 -24
  55. data/doc/classes/TriggerSwitchD/IPC.html +0 -134
  56. data/doc/classes/TriggerSwitchD/IPC.src/M000012.html +0 -32
  57. data/doc/classes/TriggerSwitchD/Schedule/InstanceMethods.html +0 -242
  58. data/doc/classes/TriggerSwitchD/Schedule/InstanceMethods.src/M000005.html +0 -19
  59. data/doc/classes/TriggerSwitchD/Schedule/InstanceMethods.src/M000006.html +0 -18
  60. data/doc/classes/TriggerSwitchD/Schedule/InstanceMethods.src/M000007.html +0 -23
  61. data/doc/classes/TriggerSwitchD/Schedule/InstanceMethods.src/M000008.html +0 -19
  62. data/doc/classes/TriggerSwitchD/Schedule/InstanceMethods.src/M000009.html +0 -19
  63. data/doc/classes/TriggerSwitchD/Schedule/InstanceMethods.src/M000010.html +0 -18
  64. data/doc/classes/TriggerSwitchD/Schedule/InstanceMethods.src/M000011.html +0 -18
  65. data/doc/classes/TriggerSwitchD/Schedule.html +0 -147
  66. data/doc/classes/TriggerSwitchD/Schedule.src/M000004.html +0 -19
  67. data/doc/classes/TriggerSwitchD/SwitchFactory.html +0 -135
  68. data/doc/classes/TriggerSwitchD/SwitchFactory.src/M000003.html +0 -20
  69. data/doc/classes/TriggerSwitchD.html +0 -212
  70. data/doc/classes/TriggerSwitchD.src/M000001.html +0 -22
  71. data/doc/classes/TriggerSwitchD.src/M000002.html +0 -27
  72. data/doc/created.rid +0 -1
  73. data/doc/files/lib/tellstick/protocol/nexa_rb.html +0 -126
  74. data/doc/files/lib/tellstick/protocol/not_connected_rb.html +0 -126
  75. data/doc/files/lib/tellstick/protocol/null_protocol_rb.html +0 -126
  76. data/doc/files/lib/tellstick/protocol/plain_text_rb.html +0 -126
  77. data/doc/files/lib/tellstick/protocol/proove_rb.html +0 -126
  78. data/doc/files/lib/tellstick/protocol/protocol_loader_rb.html +0 -126
  79. data/doc/files/lib/tellstick/protocol/rising_sun_rb.html +0 -126
  80. data/doc/files/lib/tellstick/protocol/waveman_rb.html +0 -126
  81. data/doc/files/lib/tellstick/tellstick_io_rb.html +0 -135
  82. data/doc/files/lib/tellstick/tellstick_rb.html +0 -135
  83. data/doc/files/lib/tellstick_rb.html +0 -134
  84. data/doc/files/lib/trigger_switch_d/action_rb.html +0 -126
  85. data/doc/files/lib/trigger_switch_d/application_rb.html +0 -136
  86. data/doc/files/lib/trigger_switch_d/config_rb.html +0 -126
  87. data/doc/files/lib/trigger_switch_d/daylight_rb.html +0 -126
  88. data/doc/files/lib/trigger_switch_d/ipc_rb.html +0 -126
  89. data/doc/files/lib/trigger_switch_d/schedule_rb.html +0 -126
  90. data/doc/files/lib/trigger_switch_d/switch_rb.html +0 -126
  91. data/doc/files/lib/trigger_switch_d/trigger_switch_d_helper_rb.html +0 -126
  92. data/doc/files/lib/trigger_switch_d_rb.html +0 -140
  93. data/doc/fr_class_index.html +0 -38
  94. data/doc/fr_file_index.html +0 -46
  95. data/doc/fr_method_index.html +0 -53
  96. data/doc/index.html +0 -24
  97. data/features/execute_schedule.feature +0 -20
  98. data/features/group_aliases.feature +0 -31
  99. data/features/handle_switches.feature +0 -36
  100. data/features/listen_for_client_call.feature +0 -23
  101. data/features/persistent_schedule.feature +0 -70
  102. data/features/proove_protocol.feature +0 -20
  103. data/features/schedule.feature +0 -25
  104. data/features/simple_string_protocol.feature +0 -35
  105. data/features/step_definitions/execute_schedule_steps.rb +0 -16
  106. data/features/step_definitions/group_aliases_steps.rb +0 -24
  107. data/features/step_definitions/handle_switches_steps.rb +0 -21
  108. data/features/step_definitions/listen_for_client_call_steps.rb +0 -34
  109. data/features/step_definitions/persistent_schedule_steps.rb +0 -18
  110. data/features/step_definitions/proove_protocol_steps.rb +0 -3
  111. data/features/step_definitions/schedule_steps.rb +0 -9
  112. data/features/step_definitions/shared_steps.rb +0 -75
  113. data/features/step_definitions/simple_string_protocol_steps.rb +0 -3
  114. data/features/step_definitions/sunrise_steps.rb +0 -22
  115. data/features/step_definitions/tellstick_connected_steps.rb +0 -21
  116. data/features/sunrise.feature +0 -22
  117. data/features/sunset.feature +0 -22
  118. data/features/support/action_helpers.rb +0 -10
  119. data/features/support/env.rb +0 -7
  120. data/features/support/listen_for_client_call_helper.rb +0 -71
  121. data/features/support/proove_helpers.rb +0 -6
  122. data/features/support/sunrise_helper.rb +0 -8
  123. data/features/tellstick_connected.feature +0 -14
  124. data/spec/spec_helper.rb +0 -22
  125. data/spec/tellstick/protocol/nexa_spec.rb +0 -57
  126. data/spec/tellstick/protocol/proove_spec.rb +0 -61
  127. data/spec/tellstick/protocol/rising_sun_spec.rb +0 -56
  128. data/spec/tellstick/protocol/waveman_spec.rb +0 -57
  129. data/spec/tellstick/proxy_io_spec.rb +0 -34
  130. data/spec/tellstick/tellstick_spec.rb +0 -86
  131. data/spec/trigger_switch_d/application_spec.rb +0 -147
  132. data/spec/trigger_switch_d/config_spec.rb +0 -154
  133. data/spec/trigger_switch_d/daylight_spec.rb +0 -39
  134. data/spec/trigger_switch_d/ipc_spec.rb +0 -119
  135. data/spec/trigger_switch_d/schedule_spec.rb +0 -103
  136. data/spec/trigger_switch_d/trigger_switch_d_spec_helpers.rb +0 -24
  137. data/trigger_switch_d.gemspec +0 -43
@@ -1,46 +0,0 @@
1
-
2
- <?xml version="1.0" encoding="UTF-8"?>
3
- <!DOCTYPE html
4
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
-
7
- <!--
8
-
9
- Files
10
-
11
- -->
12
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
- <head>
14
- <title>Files</title>
15
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
16
- <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
- <base target="docwin" />
18
- </head>
19
- <body>
20
- <div id="index">
21
- <h1 class="section-bar">Files</h1>
22
- <div id="index-entries">
23
- <a href="files/lib/tellstick_rb.html">lib/tellstick.rb</a><br />
24
- <a href="files/lib/tellstick/protocol/nexa_rb.html">lib/tellstick/protocol/nexa.rb</a><br />
25
- <a href="files/lib/tellstick/protocol/not_connected_rb.html">lib/tellstick/protocol/not_connected.rb</a><br />
26
- <a href="files/lib/tellstick/protocol/null_protocol_rb.html">lib/tellstick/protocol/null_protocol.rb</a><br />
27
- <a href="files/lib/tellstick/protocol/plain_text_rb.html">lib/tellstick/protocol/plain_text.rb</a><br />
28
- <a href="files/lib/tellstick/protocol/proove_rb.html">lib/tellstick/protocol/proove.rb</a><br />
29
- <a href="files/lib/tellstick/protocol/protocol_loader_rb.html">lib/tellstick/protocol/protocol_loader.rb</a><br />
30
- <a href="files/lib/tellstick/protocol/rising_sun_rb.html">lib/tellstick/protocol/rising_sun.rb</a><br />
31
- <a href="files/lib/tellstick/protocol/waveman_rb.html">lib/tellstick/protocol/waveman.rb</a><br />
32
- <a href="files/lib/tellstick/tellstick_rb.html">lib/tellstick/tellstick.rb</a><br />
33
- <a href="files/lib/tellstick/tellstick_io_rb.html">lib/tellstick/tellstick_io.rb</a><br />
34
- <a href="files/lib/trigger_switch_d_rb.html">lib/trigger_switch_d.rb</a><br />
35
- <a href="files/lib/trigger_switch_d/action_rb.html">lib/trigger_switch_d/action.rb</a><br />
36
- <a href="files/lib/trigger_switch_d/application_rb.html">lib/trigger_switch_d/application.rb</a><br />
37
- <a href="files/lib/trigger_switch_d/config_rb.html">lib/trigger_switch_d/config.rb</a><br />
38
- <a href="files/lib/trigger_switch_d/daylight_rb.html">lib/trigger_switch_d/daylight.rb</a><br />
39
- <a href="files/lib/trigger_switch_d/ipc_rb.html">lib/trigger_switch_d/ipc.rb</a><br />
40
- <a href="files/lib/trigger_switch_d/schedule_rb.html">lib/trigger_switch_d/schedule.rb</a><br />
41
- <a href="files/lib/trigger_switch_d/switch_rb.html">lib/trigger_switch_d/switch.rb</a><br />
42
- <a href="files/lib/trigger_switch_d/trigger_switch_d_helper_rb.html">lib/trigger_switch_d/trigger_switch_d_helper.rb</a><br />
43
- </div>
44
- </div>
45
- </body>
46
- </html>
@@ -1,53 +0,0 @@
1
-
2
- <?xml version="1.0" encoding="UTF-8"?>
3
- <!DOCTYPE html
4
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
-
7
- <!--
8
-
9
- Methods
10
-
11
- -->
12
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
- <head>
14
- <title>Methods</title>
15
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
16
- <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
- <base target="docwin" />
18
- </head>
19
- <body>
20
- <div id="index">
21
- <h1 class="section-bar">Methods</h1>
22
- <div id="index-entries">
23
- <a href="classes/TriggerSwitchD/Schedule/InstanceMethods.html#M000011">by_name (TriggerSwitchD::Schedule::InstanceMethods)</a><br />
24
- <a href="classes/Tellstick/TellstickIO.html#M000023">close (Tellstick::TellstickIO)</a><br />
25
- <a href="classes/Tellstick/TellstickIO.html#M000027">connected? (Tellstick::TellstickIO)</a><br />
26
- <a href="classes/TriggerSwitchD/Schedule.html#M000004">create (TriggerSwitchD::Schedule)</a><br />
27
- <a href="classes/Tellstick.html#M000019">create (Tellstick)</a><br />
28
- <a href="classes/TriggerSwitchD/IPC.html#M000012">create (TriggerSwitchD::IPC)</a><br />
29
- <a href="classes/TriggerSwitchD/Schedule/InstanceMethods.html#M000010">cronological (TriggerSwitchD::Schedule::InstanceMethods)</a><br />
30
- <a href="classes/TriggerSwitchD/Schedule/InstanceMethods.html#M000008">delete (TriggerSwitchD::Schedule::InstanceMethods)</a><br />
31
- <a href="classes/TriggerSwitchD/ConfigFactory/Config.html#M000014">environment (TriggerSwitchD::ConfigFactory::Config)</a><br />
32
- <a href="classes/TriggerSwitchD/Schedule/InstanceMethods.html#M000009">execute (TriggerSwitchD::Schedule::InstanceMethods)</a><br />
33
- <a href="classes/TriggerSwitchD/Schedule/InstanceMethods.html#M000006">find (TriggerSwitchD::Schedule::InstanceMethods)</a><br />
34
- <a href="classes/Tellstick/TellstickIO.html#M000026">gets (Tellstick::TellstickIO)</a><br />
35
- <a href="classes/Tellstick/TellstickIO.html#M000022">gets (Tellstick::TellstickIO)</a><br />
36
- <a href="classes/TriggerSwitchD.html#M000002">load_devices (TriggerSwitchD)</a><br />
37
- <a href="classes/TriggerSwitchD.html#M000001">load_scheduled_actions (TriggerSwitchD)</a><br />
38
- <a href="classes/TriggerSwitchD/SwitchFactory.html#M000003">new (TriggerSwitchD::SwitchFactory)</a><br />
39
- <a href="classes/TriggerSwitchD/Application.html#M000017">new (TriggerSwitchD::Application)</a><br />
40
- <a href="classes/TriggerSwitchD/ConfigFactory.html#M000013">new (TriggerSwitchD::ConfigFactory)</a><br />
41
- <a href="classes/TriggerSwitchD/Action.html#M000015">new (TriggerSwitchD::Action)</a><br />
42
- <a href="classes/Tellstick/TellstickIO.html#M000020">new (Tellstick::TellstickIO)</a><br />
43
- <a href="classes/TriggerSwitchD/Schedule/InstanceMethods.html#M000007">next_action_at (TriggerSwitchD::Schedule::InstanceMethods)</a><br />
44
- <a href="classes/Tellstick/TellstickIO.html#M000024">open (Tellstick::TellstickIO)</a><br />
45
- <a href="classes/Tellstick/TellstickIO.html#M000025">puts (Tellstick::TellstickIO)</a><br />
46
- <a href="classes/Tellstick/TellstickIO.html#M000021">puts (Tellstick::TellstickIO)</a><br />
47
- <a href="classes/TriggerSwitchD/Schedule/InstanceMethods.html#M000005">schedule_action (TriggerSwitchD::Schedule::InstanceMethods)</a><br />
48
- <a href="classes/TriggerSwitchD/Application.html#M000018">start (TriggerSwitchD::Application)</a><br />
49
- <a href="classes/TriggerSwitchD/Action.html#M000016">to_s (TriggerSwitchD::Action)</a><br />
50
- </div>
51
- </div>
52
- </body>
53
- </html>
data/doc/index.html DELETED
@@ -1,24 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
5
-
6
- <!--
7
-
8
- RDoc Documentation
9
-
10
- -->
11
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
12
- <head>
13
- <title>RDoc Documentation</title>
14
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
15
- </head>
16
- <frameset rows="20%, 80%">
17
- <frameset cols="25%,35%,45%">
18
- <frame src="fr_file_index.html" title="Files" name="Files" />
19
- <frame src="fr_class_index.html" name="Classes" />
20
- <frame src="fr_method_index.html" name="Methods" />
21
- </frameset>
22
- <frame src="files/lib/tellstick/protocol/nexa_rb.html" name="docwin" />
23
- </frameset>
24
- </html>
@@ -1,20 +0,0 @@
1
- # language: se
2
- Egenskap: Jag vill att strömbrytare skall tändas och släckas vid förutbestämda tidpunkter
3
- eller händelser utan att jag behöver utföra kommandot tänd resp. släck själv. När
4
- tidpunkten eller händelsen infaller så skall kommandot utföras enl. plan
5
-
6
- @implemented
7
- Scenario: bevaka plan och utför händelse
8
- Givet att jag har en fjärrströmbrytare "storarummet" med huskod "E", enhetskod "7" och protokoll "plain_text"
9
- Och att jag har en händelse "tänd storarummet klockan 14:34"
10
- När jag börjar utföra händelser:
11
- | klockan |
12
- | 14:33 |
13
- | 14:34 |
14
- | 14:35 |
15
- Så skall jag se följande två resultat:
16
- | meddelande | händelse_finns |
17
- | | sant |
18
- | Strömbrytare E7 tänd | sant |
19
- | | falskt |
20
-
@@ -1,31 +0,0 @@
1
- # language: se
2
- Egenskap: För att göra det ännu enklare att använda mina strömbrytare,
3
- så vill jag kunna gruppera olika fjärrströmbrytare under en ny fjärrströmbrytare.
4
-
5
- @implemented
6
- Scenario: Gruppera alias_obj
7
- Givet att jag har en fjärrströmbrytare "storarummet" med huskod "A", enhetskod "3" och protokoll "proove"
8
- Och att jag har en fjärrströmbrytare "hallen" med huskod "4", enhetskod "2" och protokoll "proove"
9
- När jag grupperar "storarummet" och "hallen" under fjärrströmbrytaren "alla"
10
- Så skall det finnas en fjärrströmbrytare "alla" med följande:
11
- | huskod | enhetskod |
12
- | A | 3 |
13
- | 4 | 2 |
14
-
15
- @implemented
16
- Scenario: tänd/släck strömbrytare mha fjärrströmbrytargrupp
17
- Givet att fjärrströmbrytare "sovrummet" innehåller strömbrytare "E,3" och "C,1"
18
- När jag utför följande:
19
- | kommando | fjärrströmbrytarnamn |
20
- | tänd | sovrummet |
21
- | släck | sovrummet |
22
- Så skall jag se följande:
23
- | meddelande |
24
- | Strömbrytare E3 tänd,Strömbrytare C1 tänd |
25
- | Strömbrytare E3 släckt,Strömbrytare C1 släckt |
26
-
27
-
28
-
29
-
30
-
31
-
@@ -1,36 +0,0 @@
1
- # language: se
2
- Egenskap: För att slippa skriva in strömbrytar identitet (hus,enhet,protokoll)
3
- varje gång som jag skall använda strömbrytaren, så vill jag kunna referera
4
- till strömbrytaren med ett alias.
5
-
6
- @implemented
7
- Scenario: skapa alias_obj för strömbrytare som inte finns
8
- Givet att jag inte har en fjärrströmbrytare "källare"
9
- När jag skapar en fjärrströmbrytare "källare" med huskod "A", enhetskod "1" och protokoll "proove"
10
- Så skall det finnas en fjärrströmbrytare "källare" med huskod "A", enhetskod "1" och protokoll "proove"
11
-
12
- @implemented
13
- Scenario: skapa alias_obj för strömbrytare som finns
14
- Givet att jag har en fjärrströmbrytare "källare" med huskod "A", enhetskod "1" och protokoll "proove"
15
- När jag skapar en fjärrströmbrytare "källare" med huskod "B", enhetskod "5" och protokoll "nexa"
16
- Så skall det inte finnas en fjärrströmbrytare "källare" med huskod "A", enhetskod "1" och protokoll "proove"
17
- Och det skall finnas en fjärrströmbrytare "källare" med huskod "B", enhetskod "5" och protokoll "nexa"
18
-
19
- @implemented
20
- Scenario: ta bort alias_obj för strömbrytare som finns
21
- Givet att jag har en fjärrströmbrytare "källare" med huskod "B", enhetskod "5" och protokoll "proove"
22
- När jag tar bort en fjärrströmbrytare "källare"
23
- Så skall det inte finnas en fjärrströmbrytare "källare"
24
-
25
- @implemented
26
- Scenario: använd alias_obj för att tända eller släcka strömbrytare
27
- Givet att jag har en fjärrströmbrytare "källaren" med huskod "B", enhetskod "5" och protokoll "plain_text"
28
- När jag utför följande:
29
- | kommando | fjärrströmbrytarnamn |
30
- | tänd | källaren |
31
- | släck | källaren |
32
- Så skall jag se följande:
33
- | meddelande |
34
- | Strömbrytare B5 tänd |
35
- | Strömbrytare B5 släckt |
36
-
@@ -1,23 +0,0 @@
1
- # language: se
2
- Egenskap: lyssna efter användar anrop
3
- För att kunna styra strömbrytare direkt via ett tilltalande användargränssnitt
4
- Som en användare
5
- Vill jag att daemon hanterar inkommande kommandon från användaren
6
-
7
- @device_file
8
- @implemented
9
- Scenario: skicka lista på fjärrströmbrytare
10
- Givet att fjärrströmbrytare "källare" innehåller strömbrytare "A,1,plain_text" och "A,2,plain_text" finns på fil
11
- Och att fjärrströmbrytare "sovrum" innehåller strömbrytare "A,3,plain_text" och "A,4,plain_text" finns på fil
12
- Och att jag har en händelse "släck källare klockan 19:00" på fil
13
- När jag tar emot kommando "list_devices"
14
- Så skickar jag text som matchar "sovrum.+[#<TriggerSwitchD::Switch.+house_code=A.+model_name=plain_text.+unit_code=3.+#<TriggerSwitchD::Switch.+house_code=A.+model_name=plain_text.+unit_code=4>].+källare.+[#<TriggerSwitchD::Switch.+house_code=A.+model_name=plain_text.+unit_code=1.+#<TriggerSwitchD::Switch.+house_code=A.+model_name=plain_text.+unit_code=2>]"
15
-
16
- @schedule_file
17
- @implemented
18
- Scenario: skicka schema
19
- Givet att fjärrströmbrytare "källare" innehåller strömbrytare "A,3,plain_text" och "A,4,plain_text" finns på fil
20
- Och att jag har en händelse "tänd källare klockan 18:00" på fil
21
- Och att jag har en händelse "släck källare klockan 19:00" på fil
22
- När jag tar emot kommando "list_schedule"
23
- Så skickar jag "[<fnutt>tänd källare klockan 18:00<fnutt>, <fnutt>släck källare klockan 19:00<fnutt>]"
@@ -1,70 +0,0 @@
1
- # language: se
2
- Egenskap: Om daemon går ner eller startas om så skall planerade händelser
3
- kunna läsas in från fil
4
- För att jag inte skall förlora planerade händelser vid strömförlust, program krasch
5
- eller liknande
6
- Som en daemon användare
7
- Vill jag att daemon skall läsa in planerade händelser vid programstart
8
-
9
- @implemented
10
- Scenario: Läs in från fil
11
- Givet att jag har en fjärrströmbrytare "källare"
12
- Och att jag inte har några planerade händelser
13
- Och att jag har en händelse "tänd källare klockan 17:00" på fil
14
- När jag läser in planerade händelser från fil
15
- Så skall det finnas en händelse "tänd källare klockan 17:00"
16
-
17
- @implemented
18
- Scenario: Läs in från fil utan fjärrströmbrytare
19
- Givet att jag inte har en fjärrströmbrytare "källare"
20
- Och att jag inte har några planerade händelser
21
- Och att jag har en händelse "tänd källare klockan 17:00" på fil
22
- När jag läser in planerade händelser från fil
23
- Så skall det inte finnas en händelse "tänd källare klockan 17:00"
24
- Och jag skall få ett "NoMethodError" för "källare"
25
-
26
- @implemented
27
- Scenario: kommando som inte gäller
28
- Givet att jag har en fjärrströmbrytare "källare"
29
- Och att jag inte har några planerade händelser
30
- Och att jag har en händelse "städa källare klockan 17:00" på fil
31
- När jag läser in planerade händelser från fil
32
- Så skall det inte finnas en händelse "städa källare klockan 17:00"
33
- Och jag skall få ett "NoMethodError" för "städa"
34
-
35
- @implemented
36
- Scenario: klockslag som inte gäller
37
- Givet att jag har en fjärrströmbrytare "källare"
38
- Och att jag inte har några planerade händelser
39
- Och att jag har en händelse "tänd källare klockan 25:99" på fil
40
- När jag läser in planerade händelser från fil
41
- Så skall det inte finnas en händelse "tänd källare klockan 25:99"
42
- Och jag skall få ett "NoMethodError" för "25:99"
43
-
44
- @implemented
45
- Scenario: Soluppgång
46
- Givet att jag har en fjärrströmbrytare "källare"
47
- Och att jag inte har några planerade händelser
48
- Och att jag är på latitud "60:40.68N"
49
- Och att jag är på longitud "17:8.52Ö"
50
- Och att aktuellt datum är "20091214" när filen läses in
51
- Och att jag har en händelse "släck källare vid soluppgång" på fil
52
- När jag läser in planerade händelser från fil
53
- Så skall händelsen "släck källare vid soluppgång" utföras klockan "08:55"
54
-
55
- @implemented
56
- Scenario: Solnedgång
57
- Givet att jag har en fjärrströmbrytare "källare"
58
- Och att jag inte har några planerade händelser
59
- Och att jag är på latitud "60:40.68N"
60
- Och att jag är på longitud "17:8.52Ö"
61
- Och att aktuellt datum är "20091214" när filen läses in
62
- Och att jag har en händelse "tänd källare vid solnedgång" på fil
63
- När jag läser in planerade händelser från fil
64
- Så skall händelsen "tänd källare vid solnedgång" utföras klockan "14:39"
65
-
66
-
67
-
68
-
69
-
70
-
@@ -1,20 +0,0 @@
1
- # language: se
2
- Egenskap: Strömbrytare från proove har ett eget protokol
3
-
4
- För att tellstick skall kommunicera med samma protokoll som strömbrytaren
5
- Som en användare av proove strömbrytare
6
- Vill jag att tellstick skickar den sträng som protokollet anger
7
-
8
- @implemented
9
- Abstrakt Scenario: tänd/släck självlärande strömbrytare med proove protokoll
10
- Givet att "proove" protokollet är definierat
11
- När jag skickar "<kommando>" till "proove" strömbrytare "<hus>" "<enhet>"
12
- Så vill jag se (för proove) "<meddelande>"
13
-
14
- Exempel:
15
- | kommando | hus | enhet | meddelande |
16
- | tänd | A | 1 | [82,5,84,127,255,24,1,132,154,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,136,170,138,138,138,138,43] |
17
- | tänd | B | 2 | [82,5,84,127,255,24,1,132,154,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,136,170,136,170,138,138,136,170,43] |
18
- | släck | A | 1 | [82,5,84,127,255,24,1,132,154,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,43] |
19
- | släck | B | 2 | [82,5,84,127,255,24,1,132,154,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,136,170,138,138,138,138,136,170,43] |
20
-
@@ -1,25 +0,0 @@
1
- # language: se
2
- Egenskap: Jag vill att strömbrytare skall tändas och släckas vid förutbestämda tidpunkter
3
- eller händelser utan att jag behöver utföra kommandot tänd resp. släck själv. När
4
- tidpunkten eller händelsen infaller så skall kommandot utföras enl. plan
5
-
6
- @implemented
7
- Scenario: aktivera/avaktivera strömbrytare vid klockslag
8
- Givet att jag har en fjärrströmbrytare "källare"
9
- När jag planlägger händelsen "tänd" klockan "17:00" för alias "källare"
10
- Så skall det finnas en händelse "tänd källare klockan 17:00"
11
-
12
- @implemented
13
- Scenario: inga dubbletter för händelser
14
- Givet att jag har en fjärrströmbrytare "källare"
15
- När jag planlägger händelsen "släck" klockan "16:00" för alias "källare"
16
- Och jag planlägger händelsen "släck" klockan "16:00" för alias "källare"
17
- Så skall det finnas en händelse "släck källare klockan 16:00"
18
-
19
- @implemented
20
- Scenario: ta bort händelse
21
- Givet att jag har en fjärrströmbrytare "källare"
22
- Och att jag har en händelse "tänd källare klockan 13:40"
23
- När jag tar bort händelsen "tänd källare klockan 13:40"
24
- Så skall det inte finnas en händelse "tänd källare klockan 13:40"
25
-
@@ -1,35 +0,0 @@
1
- #language: se
2
- Egenskap: Strömbrytare från nexa/waveman har ett eget protokol
3
-
4
- För att tellstick skall kommunicera med samma protokoll som strömbrytaren
5
- Som en användare av nexa/waveman strömbrytare
6
- Vill jag att tellstick skickar den sträng som protokollet anger
7
-
8
- @implemented
9
- Abstrakt Scenario: tänd/släck självlärande strömbrytare med nexa/waveman protokoll
10
- Givet att "<protokoll>" protokollet är definierat
11
- När jag skickar "<kommando>" till "<protokoll>" strömbrytare "<hus>" "<enhet>"
12
- Så vill jag se (för "<protokoll>") "<meddelande>"
13
-
14
- Exempel:
15
- | protokoll | kommando | hus | enhet | meddelande |
16
- | nexa | tänd | A | 1 | S$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$kk$$kk$$kk$$}+ |
17
- | nexa | tänd | B | 2 | S$kk$$k$k$k$k$k$k$kk$$k$k$k$k$k$k$k$k$kk$$kk$$kk$$}+ |
18
- | nexa | släck | A | 1 | S$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$kk$$kk$$k$k$}+ |
19
- | nexa | släck | B | 2 | S$kk$$k$k$k$k$k$k$kk$$k$k$k$k$k$k$k$k$kk$$kk$$k$k$}+ |
20
- | waveman | släck | A | 1 | S$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$}+ |
21
- | waveman | släck | B | 2 | S$kk$$k$k$k$k$k$k$kk$$k$k$k$k$k$k$k$k$k$k$k$k$k$k$}+ |
22
- | waveman | tänd | A | 1 | S$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$k$kk$$kk$$kk$$}+ |
23
- | waveman | tänd | B | 2 | S$kk$$k$k$k$k$k$k$kk$$k$k$k$k$k$k$k$k$kk$$kk$$kk$$}+ |
24
- | rising_sun | tänd | A | 1 | S.e.e.ee..ee..ee..e.e.ee..ee..ee..ee..ee..ee..ee..e+ |
25
- | rising_sun | tänd | B | 2 | S.ee..e.e.ee..ee..ee..e.e.ee..ee..ee..ee..ee..ee..e+ |
26
- | rising_sun | släck | A | 1 | S.e.e.ee..ee..ee..e.e.ee..ee..ee..ee..ee..ee..e.e.e+ |
27
- | rising_sun | släck | B | 2 | S.ee..e.e.ee..ee..ee..e.e.ee..ee..ee..ee..ee..e.e.e+ |
28
- | plain_text | tänd | A | 1 | Strömbrytare A1 tänd |
29
- | plain_text | tänd | B | 5 | Strömbrytare B5 tänd |
30
- | plain_text | släck | K | 3 | Strömbrytare K3 släckt |
31
- | plain_text | släck | C | 123 | Strömbrytare C123 släckt |
32
- | undefined | tänd | 12 | 23 | Protokollet finns inte |
33
- | undefined | släck | 12 | 23 | Protokollet finns inte |
34
-
35
-
@@ -1,16 +0,0 @@
1
- När /^jag börjar utföra händelser:$/ do |table|
2
- @output = StringIO.new
3
- @resultat_händelse = []
4
- @schedule ||= TriggerSwitchD::Schedule.create
5
- table.hashes.each do |row|
6
- @resultat_händelse << (@schedule.find(@händelse.to_s) == @händelse ? "sant" : "falskt")
7
- @schedule.execute(row["klockan"],@output)
8
- end
9
- end
10
-
11
- Så /^skall jag se följande två resultat:$/ do |table|
12
- table.hashes.each_with_index do |row,index|
13
- @output.string.should include(row["meddelande"])
14
- @resultat_händelse[index].should == row["händelse_finns"]
15
- end
16
- end
@@ -1,24 +0,0 @@
1
- Givet /^att fjärrströmbrytare "([^\"]*)" innehåller strömbrytare "([^\"]*)" och "([^\"]*)"$/ do |fjärrströmbrytarnamn, s1, s2|
2
- @devices ||= {}
3
- s1 = s1.split(',')
4
- s2 = s2.split(',')
5
- arr = [TriggerSwitchD::Switch.new(:house_code => s1[0],:unit_code => s1[1],:model_name => "plain_text"),TriggerSwitchD::Switch.new(:house_code => s2[0],:unit_code => s2[1],:model_name => "plain_text")]
6
- @devices[fjärrströmbrytarnamn] = arr
7
- pp @devices
8
- end
9
-
10
- När /^jag grupperar "([^\"]*)" och "([^\"]*)" under fjärrströmbrytaren "([^\"]*)"$/ do |namn1, namn2, namn3|
11
- a1 = @devices[namn1]
12
- a2 = @devices[namn2]
13
- @devices[namn3] = a1 + a2
14
- end
15
-
16
- Så /^skall det finnas en fjärrströmbrytare "([^\"]*)" med följande:$/ do |namn, table|
17
- table.hashes.each do |row|
18
- @devices[namn].find do |org|
19
- (row["huskod"] == org.house_code) ||
20
- (row["enhetskod"] == org.unit_code)
21
- end.should_not be_nil
22
- end
23
- end
24
-
@@ -1,21 +0,0 @@
1
- När /^jag skapar en fjärrströmbrytare "([^\"]*)" med huskod "([^\"]*)", enhetskod "([^\"]*)" och protokoll "([^\"]*)"$/ do |fjärrströmbrytarnamn, huskod, enhetskod, protokoll|
2
- @devices[fjärrströmbrytarnamn] = [TriggerSwitchD::Switch.new(:house_code => huskod, :unit_code => enhetskod, :model_name => protokoll)]
3
- end
4
-
5
- När /^jag tar bort en fjärrströmbrytare "([^\"]*)"$/ do |fjärrströmbrytarnamn|
6
- @devices.delete(fjärrströmbrytarnamn)
7
- end
8
-
9
- Så /^skall det inte finnas en fjärrströmbrytare "([^\"]*)" med huskod "([^\"]*)", enhetskod "([^\"]*)" och protokoll "([^\"]*)"$/ do |fjärrströmbrytarnamn, huskod, enhetskod, protokoll|
10
- a = @devices[fjärrströmbrytarnamn]
11
- a.should_not be_nil
12
- result = 0
13
- if a[0].house_code != huskod; result += 1; end
14
- if a[0].unit_code != enhetskod; result += 1; end
15
- if a[0].model_name != protokoll; result += 1; end
16
- result.should_not be(0)
17
- end
18
-
19
- Så /^skall det inte finnas en fjärrströmbrytare "([^\"]*)"$/ do |fjärrströmbrytarnamn|
20
- @devices[fjärrströmbrytarnamn].should be_nil
21
- end
@@ -1,34 +0,0 @@
1
- Before do
2
- File.delete(devices_filename) if File.exist? devices_filename
3
- File.delete(schedule_filename) if File.exist? schedule_filename
4
- end
5
-
6
- Givet /^att fjärrströmbrytare "([^\"]*)" innehåller strömbrytare "([^\"]*)" och "([^\"]*)" finns på fil$/ do |namn1, namn2, namn3|
7
- prepare_config
8
- prepare_devices(namn1,namn2,namn3)
9
- end
10
-
11
- När /^jag tar emot kommando "([^\"]*)"$/ do |kommando|
12
- file = File.open(config_filename,"r")
13
- app = TriggerSwitchD::Application.new(file)
14
- file.close
15
- @app_thread = Thread.start { app.start }
16
- @app_thread.abort_on_exception = true
17
- @client = nil
18
- @client = UNIXSocket.open(TriggerSwitchD::Config.unix_socket_path)
19
- @client.send(kommando,0)
20
- end
21
-
22
- Så /^skickar jag "([^\"]*)"$/ do |svar|
23
- YAML.load(@client.recvfrom(10000)[0]).should ==
24
- YAML.load(svar.gsub("<fnutt>","\""))
25
- @client.close
26
- @app_thread.kill
27
- end
28
-
29
- Så /^skickar jag text som matchar "([^\"]*)"$/ do |regex|
30
- client_ans = YAML.load(@client.recvfrom(10000)[0])
31
- client_ans.inspect.should =~ Regexp.new(regex)
32
- @client.close
33
- @app_thread.kill
34
- end
@@ -1,18 +0,0 @@
1
- Givet /^att jag inte har några planerade händelser$/ do
2
- @schedule = TriggerSwitchD::Schedule.create
3
- end
4
-
5
- När /^jag läser in planerade händelser från fil$/ do
6
- file = File.open("db/scheduled_actions","r")
7
- datum = (instance_variables.include? "@datum") ? @datum : Date.today
8
- latitud = (instance_variables.include? "@latitude") ? @latitude : 0
9
- longitud = (instance_variables.include? "@longitude") ? -@longitude : 0
10
- environment = TriggerSwitchD::Config.default_environment
11
- environment[:at_location] = {:north => latitud, :west => longitud}
12
- begin
13
- TriggerSwitchD::load_scheduled_actions(file,@schedule,@devices,environment,datum)
14
- rescue => @exception
15
- pp @exception
16
- end
17
- file.close
18
- end
@@ -1,3 +0,0 @@
1
- Så /^vill jag se \(för proove\) "([^\"]*)"$/ do |meddelande|
2
- @output.string.should include(omvandla_till_text(meddelande))
3
- end
@@ -1,9 +0,0 @@
1
- När /^jag tar bort händelsen "([^\"]*)"$/ do |händelse|
2
- @schedule.delete(händelse).should_not be_nil
3
- end
4
-
5
- När /^jag planlägger händelsen "([^\"]*)" klockan "([^\"]*)" för alias "([^\"]*)"$/ do |händelse, klockan, fjärrströmbrytarnamn|
6
- @schedule ||= TriggerSwitchD::Schedule.create
7
- @schedule.schedule_action(TriggerSwitchD::Action.new([händelse,fjärrströmbrytarnamn,"klockan",klockan].join(" "),@devices))
8
- end
9
-
@@ -1,75 +0,0 @@
1
- Givet /^att jag ?(inte|) har en fjärrströmbrytare "([^\"]*)"(| med huskod "([^\"]*)", enhetskod "([^\"]*)" och protokoll "([^\"]*)")$/ do |finns, fjärrströmbrytarnamn, noop, huskod, enhetskod, protokoll|
2
- switch = TriggerSwitchD::Switch.new(:house_code => huskod,:unit_code => enhetskod,:model_name => protokoll)
3
- @devices ||= {}
4
- if finns == "inte"
5
- @devices.delete(fjärrströmbrytarnamn)
6
- else
7
- @devices[fjärrströmbrytarnamn] = [switch]
8
- end
9
- end
10
-
11
- Givet /^att jag har en händelse "([^\"]*)"$/ do |händelse|
12
- fjärrströmbrytarnamn = händelse.scan(/^\w+ (\w+) klockan \w+/u).flatten[0]
13
- @schedule = TriggerSwitchD::Schedule.create
14
- @händelse = @schedule.schedule_action(TriggerSwitchD::Action.new(händelse,@devices))
15
- @händelse.should_not be_nil
16
- end
17
-
18
- Givet /^att "([^\"]*)" protokollet är definierat$/ do |protokoll|
19
- dongle(StringIO.new,protokoll)
20
- end
21
-
22
- Givet /^att jag har en händelse "([^\"]*)" på fil$/ do |händelse|
23
- prepare_schedule(händelse)
24
- end
25
-
26
- När /^jag utför följande:$/ do |table|
27
- @output = StringIO.new
28
- table.hashes.each do |row|
29
- a = @devices[row["fjärrströmbrytarnamn"]]
30
- a.should_not be_nil
31
- a.each do |switch|
32
- dongle(@output,switch.model_name).send(actions[row["kommando"]],switch.house_code, switch.unit_code)
33
- end
34
- end
35
- end
36
-
37
- När /^jag skickar "([^\"]*)" till "([^\"]*)" strömbrytare "([^\"]*)" "([^\"]*)"$/ do |kommando, protokoll, hus, enhet|
38
- @output = StringIO.new
39
- dongle(@output,protokoll).send(actions[kommando],hus,enhet)
40
- end
41
-
42
- Så /^skall jag se följande:$/ do |table|
43
- table.hashes.each do |row|
44
- @output.string.gsub("\n",",").should include(row["meddelande"])
45
- end
46
- end
47
-
48
- Så /^(skall det|det skall) finnas en fjärrströmbrytare "([^\"]*)" med huskod "([^\"]*)", enhetskod "([^\"]*)" och protokoll "([^\"]*)"$/ do |noop, fjärrströmbrytarnamn, huskod, enhetskod, protokoll|
49
- a = @devices[fjärrströmbrytarnamn]
50
- a.should_not be_nil
51
- a[0].house_code.should == huskod
52
- a[0].unit_code.should == enhetskod
53
- a[0].model_name.should == protokoll
54
- end
55
-
56
- Så /^skall det ?(inte|) finnas en händelse "([^\"]*)"$/ do |finns,händelse|
57
- h = @schedule.find(händelse)
58
- if finns == "inte"
59
- h.should be_nil
60
- else
61
- h.to_s.should include(händelse)
62
- end
63
- end
64
-
65
- Så /^(?:skall )händelsen "([^\"]*)" utföras klockan "([^\"]*)"$/ do |händelse, klockan|
66
- h = @schedule.find(händelse)
67
- h.should_not be_nil
68
- h.at.should == klockan
69
- end
70
-
71
- Så /^jag skall få ett "([^\"]*)" för "([^\"]*)"$/ do |felmeddelande,för|
72
- @exception.inspect.should include(felmeddelande)
73
- @exception.inspect.should include(för)
74
- end
75
-
@@ -1,3 +0,0 @@
1
- Så /^vill jag se \(för "[^\"]*"\) "([^\"]*)"$/ do |meddelande|
2
- @output.string.should include(meddelande)
3
- end
@@ -1,22 +0,0 @@
1
- Givet /^att aktuellt datum är "([^\"]*)".*$/ do |datum|
2
- year,month,day = datum.scan(/(\d{4})(\d{2})(\d{2})/).flatten
3
- @datum = Date.new(year.to_i,month.to_i,day.to_i)
4
- end
5
-
6
- Givet /^att jag är på latitud "([^\"]*)"$/ do |latitude|
7
- @latitude = degrees_fraction(latitude)
8
- end
9
-
10
- Givet /^att jag är på longitud "([^\"]*)"$/ do |longitude|
11
- @longitude = degrees_fraction(longitude)
12
- end
13
-
14
- När /^jag beräknar (.+)$/ do |funktion|
15
- funktioner = {"soluppgång" => :sunrise, "solnedgång" => :sunset}
16
- tid = @datum.extend(Daylight).send(funktioner[funktion],{:north => @latitude, :west => -@longitude}).localtime
17
- @tid_för_soluppgång = "#{0 if tid.hour < 10}#{tid.hour}:#{0 if tid.min < 10}#{tid.min}"
18
- end
19
-
20
- Så /^skall se "([^\"]*)"$/ do |soluppgång|
21
- @tid_för_soluppgång.should == soluppgång
22
- end