tinderfridge 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/lib/tinderfridge/device.rb +15 -0
- data/lib/tinderfridge/device_collection.rb +32 -4
- data/lib/tinderfridge/devices/bricklet_gps_v2.rb +31 -0
- data/lib/tinderfridge/devices/bricklet_lcd_128x64.rb +31 -0
- data/lib/tinderfridge/devices/bricklet_led_strip_v2.rb +43 -0
- data/lib/tinderfridge/devices/bricklet_outdoor_weather.rb +19 -0
- data/lib/tinderfridge/devices/bricklet_rgb_led_button.rb +25 -0
- data/lib/tinderfridge/devices/bricklet_rgb_led_v2.rb +25 -0
- data/lib/tinderfridge/devices/bricklet_segment_display_4x7_v2.rb +20 -0
- data/lib/tinderfridge/ip_connection.rb +17 -13
- data/lib/tinderfridge/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a1a23e33e307a89386dbf4d61f3a9852e000e3382ec3c61de5b1c45c0335f11
|
4
|
+
data.tar.gz: 4261d085ad57d3205da9b27fcd38d74bd3bb47e482f0fbcfb391918e4abac268
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 12677e84815ddad014bf40df64798fbb05c46be764106143e16d2964a73d71a402bfb9d66bbc6f1422ec83766628ec0f6e2ddf9817fb64e38988523f9b4c3479
|
7
|
+
data.tar.gz: '0749d1e2bf1b022313bbe807c08836df740d223d1b5d81efd5bb388693c84c707d436e5dc35f9fe827518dcf6ce97db70e9f8c948a5d3b0e64f75b4780f722f5'
|
data/lib/tinderfridge/device.rb
CHANGED
@@ -33,6 +33,21 @@ module Tinkerforge
|
|
33
33
|
end.compact.sort_by { |i| i[0] }
|
34
34
|
end
|
35
35
|
|
36
|
+
private
|
37
|
+
|
38
|
+
# Primitive superhook:
|
39
|
+
# Every time a class inherits from the Device class,
|
40
|
+
# attempts to load an extension for that new class.
|
41
|
+
def inherited(klass)
|
42
|
+
if info = Tinkerforge.device_info(klass)
|
43
|
+
begin
|
44
|
+
require("tinderfridge/devices/#{info[2][1]}")
|
45
|
+
rescue LoadError
|
46
|
+
# No extension found for this device
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
36
51
|
end
|
37
52
|
|
38
53
|
#----------------------------------------------------------------------#
|
@@ -6,28 +6,43 @@ module Tinkerforge
|
|
6
6
|
#
|
7
7
|
# Nil for devices that do not support the get_chip_temperature method.
|
8
8
|
def get_chip_temperature
|
9
|
-
|
9
|
+
smap 'get_chip_temperature'
|
10
|
+
end
|
11
|
+
|
12
|
+
# Returns identity information for devices in the collection.
|
13
|
+
#
|
14
|
+
# Identity information is returned as an array:
|
15
|
+
# - 0 : UID
|
16
|
+
# - 1 : Connected UID
|
17
|
+
# - 2 : Connected port (position)
|
18
|
+
# - 3 : Hardware version
|
19
|
+
# - 4 : Firmware version
|
20
|
+
# - 5 : Device Identifier
|
21
|
+
#
|
22
|
+
# Nil for devices that do not support the get_identity method.
|
23
|
+
def get_identity
|
24
|
+
smap 'get_identity'
|
10
25
|
end
|
11
26
|
|
12
27
|
# Returns the error counts for devices in the collection.
|
13
28
|
#
|
14
29
|
# Nil for devices that do not support the get_spitfp_error_count method.
|
15
30
|
def get_spitfp_error_count
|
16
|
-
|
31
|
+
smap 'get_spitfp_error_count'
|
17
32
|
end
|
18
33
|
|
19
34
|
# Returns the status LED configuration for devices in the collection.
|
20
35
|
#
|
21
36
|
# Nil for devices that do not support the get_status_led_config method.
|
22
37
|
def get_status_led_config
|
23
|
-
|
38
|
+
smap 'get_status_led_config'
|
24
39
|
end
|
25
40
|
|
26
41
|
# Sets the status LED configuration for devices in the collection.
|
27
42
|
#
|
28
43
|
# Ignores devices that do not support the set_status_led_config method.
|
29
44
|
#
|
30
|
-
# Argument can be an
|
45
|
+
# Argument can be an integer (e.g. 0=off, 1=on), or a hash (as returned by #get_status_led_config).
|
31
46
|
def set_status_led_config(state)
|
32
47
|
case state
|
33
48
|
when Integer
|
@@ -41,6 +56,19 @@ module Tinkerforge
|
|
41
56
|
end
|
42
57
|
end
|
43
58
|
|
59
|
+
# Prints a list of devices in the collection.
|
60
|
+
def ls
|
61
|
+
keys.sort_by(&:downcase).each do |k|
|
62
|
+
puts "%-8s %.40s" % [k, Tinkerforge.device_info(self[k])[1]]
|
63
|
+
end.size
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def smap(m)
|
69
|
+
map { |k,d| [ k, d.respond_to?(m) ? d.send(m) : nil ] }.to_h
|
70
|
+
end
|
71
|
+
|
44
72
|
end
|
45
73
|
|
46
74
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletGPSV2
|
4
|
+
|
5
|
+
# Returns latitude and longitude as reported by the GPS Bricklet.
|
6
|
+
#
|
7
|
+
# Nil when there is no fix (position not determined).
|
8
|
+
def coordinates
|
9
|
+
if get_status[0]
|
10
|
+
c = get_coordinates
|
11
|
+
[
|
12
|
+
c[0] / (c[1] == 'N' ? 1000000.0 : -1000000.0),
|
13
|
+
c[2] / (c[3] == 'E' ? 1000000.0 : -1000000.0)
|
14
|
+
]
|
15
|
+
else
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns a Time object representing the time as reported by the GPS Bricklet.
|
21
|
+
def time
|
22
|
+
# FIXME: This will not work after 31-Dec-2099.
|
23
|
+
dt = get_date_time.map &:to_s
|
24
|
+
dt = dt[0].rjust(6,'0').unpack('a2a2a2').reverse + dt[1].rjust(9,'0').concat('000').unpack('a2a2a2a6')
|
25
|
+
dt[0].prepend '20'
|
26
|
+
Time.gm *dt.map(&:to_i)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletLCD128x64
|
4
|
+
|
5
|
+
# Returns the current setting for the backlight (0..100).
|
6
|
+
def backlight
|
7
|
+
get_display_configuration[1]
|
8
|
+
end
|
9
|
+
|
10
|
+
# Sets the brightness of the backlight (0..100).
|
11
|
+
def backlight=(brightness)
|
12
|
+
state = get_display_configuration
|
13
|
+
state[1] = brightness.to_i
|
14
|
+
set_display_configuration *state
|
15
|
+
end
|
16
|
+
|
17
|
+
# Switches off the backlight.
|
18
|
+
def blackout
|
19
|
+
self.backlight = 0
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
# Clears the display, including the GUI.
|
24
|
+
def clear
|
25
|
+
clear_display
|
26
|
+
remove_all_gui
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletLEDStripV2
|
4
|
+
|
5
|
+
# Switches off all connected LEDs. Use in case of misconfiguration or other trouble.
|
6
|
+
#
|
7
|
+
# Sends the connected LEDs 6144 zeros (2048 RGB values or 1536 RGBW values).
|
8
|
+
def blackout
|
9
|
+
a = Array.new(1024,0)
|
10
|
+
6.times { |n| set_led_values( n*1024, a ) }
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns the channels as defined by the channel mapping.
|
15
|
+
def channels
|
16
|
+
if ch = lookup_channel_mapping(get_channel_mapping)
|
17
|
+
ch[1].chars
|
18
|
+
else
|
19
|
+
ch
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def lookup_channel_mapping(selector=nil)
|
26
|
+
@@channel_mapping_table ||= self.class.constants.map do |c|
|
27
|
+
(c.to_s =~ /^CHANNEL_MAPPING_(\w{3,4})$/ ) ? [self.class.const_get(c), $1] : nil
|
28
|
+
end.compact.sort_by { |l| l[0] }
|
29
|
+
case selector
|
30
|
+
when NilClass
|
31
|
+
@@channel_mapping_table
|
32
|
+
when Integer
|
33
|
+
@@channel_mapping_table.select { |n,s| n == selector }.first
|
34
|
+
when String
|
35
|
+
@@channel_mapping_table.select { |n,s| s == selector }.first
|
36
|
+
else
|
37
|
+
raise ArgumentError, 'Unknown selector'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletOutdoorWeather
|
4
|
+
|
5
|
+
# Returns the last measured data for all sensors.
|
6
|
+
#
|
7
|
+
# The result is a Hash, with sensor identifiers as the keys. Values per sensor are:
|
8
|
+
# - 0: Temperature (°C)
|
9
|
+
# - 1: Relative humidity (%RH)
|
10
|
+
# - 2: Last change (seconds)
|
11
|
+
def sensors
|
12
|
+
get_sensor_identifiers.map do |id|
|
13
|
+
[ id, get_sensor_data(id).each_with_index.map { |v,i| i == 0 ? v/10.0 : v } ]
|
14
|
+
end.to_h
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletRGBLEDButton
|
4
|
+
|
5
|
+
# Returns the button's current color as three values for red, green, and blue (integers in the range 0..255).
|
6
|
+
def rgb
|
7
|
+
get_color
|
8
|
+
end
|
9
|
+
|
10
|
+
# Sets the button's color using three values for red, green, and blue (integers in the range 0..255).
|
11
|
+
#
|
12
|
+
# Values can be supplied as an array or as three separate values.
|
13
|
+
def rgb=(*rgb)
|
14
|
+
set_color *rgb.flatten
|
15
|
+
end
|
16
|
+
|
17
|
+
# Switches off the button's LED.
|
18
|
+
def blackout
|
19
|
+
self.rgb = 0, 0, 0
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletRGBLEDV2
|
4
|
+
|
5
|
+
# Returns the LED's current color as three values for red, green, and blue (integers in the range 0..255).
|
6
|
+
def rgb
|
7
|
+
get_rgb_value
|
8
|
+
end
|
9
|
+
|
10
|
+
# Sets the LED's color using three values for red, green, and blue (integers in the range 0..255).
|
11
|
+
#
|
12
|
+
# Values can be supplied as an array or as three separate values.
|
13
|
+
def rgb=(*rgb)
|
14
|
+
set_rgb_value *rgb.flatten
|
15
|
+
end
|
16
|
+
|
17
|
+
# Switches off the LED.
|
18
|
+
def blackout
|
19
|
+
self.rgb = 0, 0, 0
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletSegmentDisplay4x7V2
|
4
|
+
|
5
|
+
# Clears the display.
|
6
|
+
def clear
|
7
|
+
set_segments [false]*8, [false]*8, [false]*8, [false]*8, [false]*2, false
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
11
|
+
alias blackout clear
|
12
|
+
|
13
|
+
# Returns the state of all 35 segments.
|
14
|
+
def segments
|
15
|
+
send_request FUNCTION_GET_SEGMENTS, [], '', 14, '?35'
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -33,28 +33,32 @@ module Tinkerforge
|
|
33
33
|
list = Tinkerforge::DeviceCollection.new
|
34
34
|
self.register_callback(CALLBACK_ENUMERATE) do |*args|
|
35
35
|
case args[6]
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
if info
|
40
|
-
require File.join('tinkerforge', info[2][1] )
|
41
|
-
list[args.first] = Tinkerforge.const_get( info[2][0] ).new args.first, self
|
42
|
-
else # Device not in device_info
|
43
|
-
list[args.first] = nil
|
36
|
+
when 0, 1
|
37
|
+
unless list.key?(args[0])
|
38
|
+
list[args[0]] = device_instance_from_enum_data(args)
|
44
39
|
end
|
45
|
-
|
46
|
-
|
47
|
-
list[args.first] = nil
|
48
|
-
|
40
|
+
when 2
|
41
|
+
list.delete args[0]
|
49
42
|
else
|
50
43
|
raise "Unknown Enumeration Type: #{args[6]}"
|
51
|
-
|
52
44
|
end
|
53
45
|
end
|
54
46
|
self.enumerate
|
55
47
|
list
|
56
48
|
end
|
57
49
|
|
50
|
+
private
|
51
|
+
|
52
|
+
# Takes the args supplied by an enumeration callback, and returns a device instance.
|
53
|
+
def device_instance_from_enum_data(enum_data)
|
54
|
+
if dev_info = Tinkerforge.device_info(enum_data[5])
|
55
|
+
require "tinkerforge/#{dev_info[2][1]}"
|
56
|
+
Tinkerforge.const_get(dev_info[2][0]).new enum_data[0], self
|
57
|
+
else
|
58
|
+
raise "Unknown device type #{enum_data[5]} (#{enum_data[0]})"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
58
62
|
end
|
59
63
|
|
60
64
|
# Creates an IP Connection object connected to the given host and port.
|
data/lib/tinderfridge/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tinderfridge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- lllist.eu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-12-
|
11
|
+
date: 2020-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tinkerforge
|
@@ -35,6 +35,13 @@ files:
|
|
35
35
|
- lib/tinderfridge/device_collection.rb
|
36
36
|
- lib/tinderfridge/device_info.rb
|
37
37
|
- lib/tinderfridge/device_info.txt
|
38
|
+
- lib/tinderfridge/devices/bricklet_gps_v2.rb
|
39
|
+
- lib/tinderfridge/devices/bricklet_lcd_128x64.rb
|
40
|
+
- lib/tinderfridge/devices/bricklet_led_strip_v2.rb
|
41
|
+
- lib/tinderfridge/devices/bricklet_outdoor_weather.rb
|
42
|
+
- lib/tinderfridge/devices/bricklet_rgb_led_button.rb
|
43
|
+
- lib/tinderfridge/devices/bricklet_rgb_led_v2.rb
|
44
|
+
- lib/tinderfridge/devices/bricklet_segment_display_4x7_v2.rb
|
38
45
|
- lib/tinderfridge/ip_connection.rb
|
39
46
|
- lib/tinderfridge/tinkerforge.rb
|
40
47
|
- lib/tinderfridge/version.rb
|