humble_rpi 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6fa85ada8d13f9047d3c215ff70679242c8cf792
4
+ data.tar.gz: 3770d991cdd126994b9dc882d8eb1ef6974bd9ad
5
+ SHA512:
6
+ metadata.gz: da259b4e269b2c4d1458b39948aeabdc81736aede51b5354dc92ee78752972788907486dd5e7d48a9bcf2a8bc4398e40158444185d2194827a75927d1c269f77
7
+ data.tar.gz: 8957e8864211215f046de1b79b478eecd84dac3cd102688e6e14ade237bea2566778505b5342e29b8f7a6698436a562f4e6e3ce425f46bab05c1aeb84b8333b1
@@ -0,0 +1 @@
1
+ E; VIN6�sM��4���� �H%�*Wj�<�͔?H��I���H~
@@ -0,0 +1,3 @@
1
+ f�Obx(�>���� �,��^�0��D�ïo�I7W����V�$��PJ�E�mjR���Qu�O�A�3e�%������ª��.9�s\y4t�X�(��,�
2
+ �V@N�L|�.���@���΁B�bΞ������!
3
+ /����9L�xg��-M�Q��p�a�Ӏ�.�#*ط%J����7�89X��
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: humble_rpi.rb
4
+
5
+ require 'rpi'
6
+ require 'chronic_duration'
7
+ require 'websocket-eventmachine-client'
8
+
9
+
10
+ class HumbleRPi < RPi
11
+ include PiPiper
12
+
13
+ def initialize(options={})
14
+
15
+ default_options = {
16
+ device_name: 'rpi',
17
+ led_pins: [],
18
+ motion_pin: nil,
19
+ sps_address: nil,
20
+ sps_port: '59000'
21
+ }
22
+
23
+ @opt = default_options.merge options
24
+ super @opt[:led_pins]
25
+ @ws, @rpi = nil, nil
26
+ end
27
+
28
+ def led_listener(&blk)
29
+ @rpi = self
30
+ rpi = @rpi
31
+
32
+ c = WebSocket::EventMachine::Client
33
+
34
+ Thread.new do
35
+
36
+ EM.run do
37
+
38
+ @ws = c.connect(uri: "ws://%s:%s" % [@opt[:sps_address], @opt[:sps_port]])
39
+
40
+ ws.onopen do
41
+ puts "Client connected"
42
+ #@ws = ws
43
+ end
44
+
45
+ @ws.onmessage(&blk)
46
+
47
+ @ws.onclose do
48
+ puts "Client disconnected"
49
+ end
50
+
51
+ EventMachine.next_tick do
52
+ @ws.send "subscribe to topic: #{@opt[:device_name]}_led"
53
+ end
54
+ EventMachine.error_handler{ |e|
55
+ puts "Error raised during event loop: #{e.message}"
56
+
57
+ }
58
+
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ def motion_detect()
66
+
67
+ t1 = Time.now
68
+ ws, opt = @ws, @opt
69
+
70
+ after pin: opt[:motion_pin].to_i, goes: :high do
71
+
72
+ #puts Time.now.to_s + ' : motion detected'
73
+
74
+ if Time.now > t1 + ChronicDuration.parse('1 minute') then
75
+ ws.send opt[:device_name] + ': motion detected'
76
+ t1 = Time.now
77
+ end
78
+
79
+ end
80
+ PiPiper.wait
81
+
82
+ end
83
+ end
84
+
85
+
86
+ if __FILE__ == $0 then
87
+
88
+ # example of an RPi running with 1 LED and 1 motion sensor
89
+
90
+ f = HumbleRPi.new device_name: 'fortina', led_pins: [17], sps_address: '192.168.4.170', motion_pin: '7'
91
+ rpi = f
92
+
93
+ onmessage = lambda do |msg,type|
94
+
95
+ puts 'message received'
96
+
97
+ topic, raw_message = msg.split(/\s*:\s*/,2)
98
+ r = raw_message.match(/(\d+)\s*(on|off|blink)\s*([\d\.]+)?/)
99
+
100
+ if r then
101
+ index, state, seconds = r.captures
102
+ elsif raw_message[/mpd|audio/] then
103
+
104
+ h = {'mpd play' => :on, 'mpd stop' => :off,
105
+ 'audio on' => :on, 'audio off' => :off}
106
+ index, state = 0, h[raw_message]
107
+
108
+ end
109
+
110
+ # seconds should be nil unless state == blink
111
+ if seconds then
112
+ rpi.led[index.to_i].blink seconds.to_f
113
+ else
114
+ rpi.led[index.to_i].send(state.to_sym)
115
+ end
116
+
117
+ end
118
+
119
+ f.led_listener &onmessage
120
+ sleep 3 # wait for the client to connect
121
+ f.motion_detect
122
+
123
+ end
metadata ADDED
@@ -0,0 +1,82 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: humble_rpi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDljCCAn6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
14
+ YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
15
+ 8ixkARkWAmV1MB4XDTEzMTEyNDIyNTA1MloXDTE0MTEyNDIyNTA1MlowSDESMBAG
16
+ A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
17
+ EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
18
+ ggEBALq6/ij5owJPNvIvvN4J2lbMbU2DTngcjF4mM8yb4KB81GP5ZwMQSF/geFqB
19
+ vwiXiKGRJAy804AwpuAAKlWs6KNbvILfxL+y0yFWk4TafqAGafw7dDLaXVfjjymk
20
+ A5ovzLaUYEZ1PhXCnXQ7LFofTmsi1K2SAqjAnOVzaPZ1rADeCPMQkkg8W8bqBwxX
21
+ bXfM6XJW/PDpDmxYxNmZO3PSLrR/8IXc77L3y48RYZ/Kir2PSlLxuuUbtt7T2qKR
22
+ VQhUR9M0Qn1oi1x/7JIl4ve+W/bQz0oHDDC1n31IauMEE6l391Y3o3VzVr3wY5YL
23
+ fufGiHrQzIMyaPrEH8LHIujvTP0CAwEAAaOBijCBhzAJBgNVHRMEAjAAMAsGA1Ud
24
+ DwQEAwIEsDAdBgNVHQ4EFgQUAgxX6MiZ6ykPTIuAWMSqjg2WvmowJgYDVR0RBB8w
25
+ HYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1h
26
+ c3RlckBqYW1lc3JvYmVydHNvbi5ldTANBgkqhkiG9w0BAQUFAAOCAQEAGodwk9f4
27
+ m2RPILx1uOkN3hQphJEkA2cI/lS49Gua0SwaUhKIaqeK1xojAATMYTJjXa8NEfl2
28
+ VVamRSPuSxtHFgjrxLxdF/hOYPRhupxR2h9ra4pFky7ku/pA5PichqvxCRM0E75h
29
+ KkdR6A9bfv0omDgpst9Yep15XlFaYRLkKGPsuL/PjUAAstG5CU2V/QzS2BOtgsAT
30
+ ZkDpHfE9mcUQvlpTXCIAD5oz/EVPXwPLhIyrK1j0jlQNEexOWeIAWhor5G4sHY2O
31
+ K97Fz/NM76+KNaPEa6pYgH+JF/i/VxG6aln5EavRfNdLWM0pBirSt/kpw9jDToHo
32
+ YglbilVTUndGuw==
33
+ -----END CERTIFICATE-----
34
+ date: 2013-11-24 00:00:00.000000000 Z
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: rpi
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ description:
51
+ email: james@r0bertson.co.uk
52
+ executables: []
53
+ extensions: []
54
+ extra_rdoc_files: []
55
+ files:
56
+ - lib/humble-rpi.rb
57
+ homepage: https://github.com/jrobertson/humble_rpi
58
+ licenses:
59
+ - MIT
60
+ metadata: {}
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ requirements: []
76
+ rubyforge_project:
77
+ rubygems_version: 2.0.0.rc.2
78
+ signing_key:
79
+ specification_version: 4
80
+ summary: Designed for a Raspberry Pi which uses GPIO LEDs, 1 motion sensor and communicates
81
+ with a SimplePubSub message broker
82
+ test_files: []
@@ -0,0 +1 @@
1
+ a/D(t�,<���2rz��x�5��xj�jG�P��m�S��� ��������w5Ѭ@"������Xt}�7�ا�����nI'��#��24���pr�7YR�#�*M�(}'5C��|�@Eݳ;7e,`ӏ��eY%�چIOV��_&�4a+���t��A�nq� �J����Ho+*A���Q��ah�����=�����}M&;?V�g2�ژ<ֳ!�O��6CM&\��* U��Zb��[F;i��O�^a�zN�'s��