tinderfridge 0.9.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/tinderfridge/device.rb +2 -1
- data/lib/tinderfridge/device_info.txt +3 -0
- data/lib/tinderfridge/devices/brick_esp32/brick_esp32.json +11 -0
- data/lib/tinderfridge/devices/brick_esp32/brick_esp32.rb +13 -0
- data/lib/tinderfridge/devices/brick_esp32_ethernet/brick_esp32_ethernet.json +11 -0
- data/lib/tinderfridge/devices/brick_esp32_ethernet/brick_esp32_ethernet.rb +13 -0
- data/lib/tinderfridge/devices/brick_hat/brick_hat.rb +12 -0
- data/lib/tinderfridge/devices/brick_hat_zero/brick_hat_zero.rb +10 -0
- data/lib/tinderfridge/devices/bricklet_air_quality/bricklet_air_quality.rb +15 -0
- data/lib/tinderfridge/devices/bricklet_analog_in_v3/bricklet_analog_in_v3.json +2 -1
- data/lib/tinderfridge/devices/bricklet_barometer_v2/bricklet_barometer_v2.rb +30 -0
- data/lib/tinderfridge/devices/bricklet_co2_v2/bricklet_co2_v2.rb +10 -0
- data/lib/tinderfridge/devices/bricklet_distance_us_v2/bricklet_distance_us_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_dmx/bricklet_dmx.json +2 -1
- data/lib/tinderfridge/devices/bricklet_e_paper_296x128/bricklet_e_paper_296x128.json +2 -1
- data/lib/tinderfridge/devices/bricklet_energy_monitor/bricklet_energy_monitor.json +2 -1
- data/lib/tinderfridge/devices/bricklet_gps_v2/bricklet_gps_v2.json +1 -1
- data/lib/tinderfridge/devices/bricklet_gps_v2/bricklet_gps_v2.rb +14 -0
- data/lib/tinderfridge/devices/bricklet_gps_v3/bricklet_gps_v3.json +11 -0
- data/lib/tinderfridge/devices/bricklet_gps_v3/bricklet_gps_v3.rb +58 -0
- data/lib/tinderfridge/devices/bricklet_hall_effect_v2/bricklet_hall_effect_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_hall_effect_v2/bricklet_hall_effect_v2.rb +16 -0
- data/lib/tinderfridge/devices/bricklet_humidity_v2/bricklet_humidity_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_imu_v3/bricklet_imu_v3.json +2 -1
- data/lib/tinderfridge/devices/bricklet_industrial_dual_relay/bricklet_industrial_dual_relay.json +2 -1
- data/lib/tinderfridge/devices/bricklet_isolator/bricklet_isolator.json +2 -1
- data/lib/tinderfridge/devices/bricklet_joystick_v2/bricklet_joystick_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_laser_range_finder_v2/bricklet_laser_range_finder_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_lcd_128x64/bricklet_lcd_128x64.json +2 -1
- data/lib/tinderfridge/devices/bricklet_lcd_128x64/bricklet_lcd_128x64.rb +83 -0
- data/lib/tinderfridge/devices/bricklet_linear_poti_v2/bricklet_linear_poti_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_motorized_linear_poti/bricklet_motorized_linear_poti.json +2 -1
- data/lib/tinderfridge/devices/bricklet_nfc/bricklet_nfc.json +2 -1
- data/lib/tinderfridge/devices/bricklet_oled_128x64_v2/bricklet_oled_128x64_v2.rb +94 -0
- data/lib/tinderfridge/devices/bricklet_outdoor_weather/bricklet_outdoor_weather.json +2 -1
- data/lib/tinderfridge/devices/bricklet_outdoor_weather/bricklet_outdoor_weather.rb +16 -0
- data/lib/tinderfridge/devices/bricklet_piezo_speaker_v2/bricklet_piezo_speaker_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_piezo_speaker_v2/bricklet_piezo_speaker_v2.rb +14 -0
- data/lib/tinderfridge/devices/bricklet_real_time_clock_v2/bricklet_real_time_clock_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_rgb_led_button/bricklet_rgb_led_button.json +2 -1
- data/lib/tinderfridge/devices/bricklet_rgb_led_v2/bricklet_rgb_led_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_rotary_encoder_v2/bricklet_rotary_encoder_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_rotary_poti_v2/bricklet_rotary_poti_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_temperature_ir_v2/bricklet_temperature_ir_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_temperature_ir_v2/bricklet_temperature_ir_v2.rb +14 -0
- data/lib/tinderfridge/devices/bricklet_temperature_v2/bricklet_temperature_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_temperature_v2/bricklet_temperature_v2.rb +27 -0
- data/lib/tinderfridge/devices/bricklet_thermal_imaging/bricklet_thermal_imaging.json +2 -1
- data/lib/tinderfridge/devices/bricklet_thermocouple_v2/bricklet_thermocouple_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_uv_light_v2/bricklet_uv_light_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_voltage_current_v2/bricklet_voltage_current_v2.json +2 -1
- data/lib/tinderfridge/devices/bricklet_xmc1400_breakout/bricklet_xmc1400_breakout.json +2 -1
- data/lib/tinderfridge/ip_connection.rb +19 -11
- data/lib/tinderfridge/shared/display_ibm437_encoding.rb +41 -0
- data/lib/tinderfridge/tinkerforge.rb +24 -9
- data/lib/tinderfridge/version.rb +1 -1
- metadata +16 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11aec071db2201e67dee0935c5a37ba2f801d2337cf0dc938ea465a9c0435bd3
|
4
|
+
data.tar.gz: ad2faa18ff3320c9320ded930b47f54c38e9471eba0bb52e2aa23cb48da3d108
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 440adf1b54a1787963688f4392fe686e07b898eae1361d3f245526a244f6e677b5a29a7cd84f2f3aa0221ef4300372dcbae18b55200cef2b96d6fa7206a0c7d0
|
7
|
+
data.tar.gz: 8204e15a1106392bbde997f2e65704b2cfd176c4e18066685f26e8a50a6cd62e3002b10e8fd6224f16540d946c94c66f66e96f6941b90c7255beec4e4c545a60
|
data/lib/tinderfridge/device.rb
CHANGED
@@ -15,6 +15,7 @@ module Tinkerforge
|
|
15
15
|
# With help from:
|
16
16
|
# - https://stackoverflow.com/questions/2393697
|
17
17
|
def descendants
|
18
|
+
# NOTE: Ruby 3.1 has Class#subclasses
|
18
19
|
ObjectSpace.each_object(Class).select { |klass| klass < self }
|
19
20
|
end
|
20
21
|
|
@@ -79,7 +80,7 @@ module Tinkerforge
|
|
79
80
|
|
80
81
|
# Returns a programmer-friendly representation of the device.
|
81
82
|
def inspect
|
82
|
-
"%s (%s@%s:%s)" % [self.class,
|
83
|
+
"%s (%s@%s:%s)" % [self.class, uid_string, ipcon.host, ipcon.port]
|
83
84
|
end
|
84
85
|
|
85
86
|
# Returns the device's properties.
|
@@ -16,6 +16,8 @@
|
|
16
16
|
29 IO-4 Bricklet Tinkerforge::BrickletIO4 bricklet_io4
|
17
17
|
111 HAT Brick Tinkerforge::BrickHAT brick_hat
|
18
18
|
112 HAT Zero Brick Tinkerforge::BrickHATZero brick_hat_zero
|
19
|
+
113 ESP32 Brick Tinkerforge::BrickESP32 brick_esp32
|
20
|
+
115 ESP32 Ethernet Brick Tinkerforge::BrickESP32Ethernet brick_esp32_ethernet
|
19
21
|
210 Joystick Bricklet Tinkerforge::BrickletJoystick bricklet_joystick
|
20
22
|
211 LCD 16x2 Bricklet Tinkerforge::BrickletLCD16x2 bricklet_lcd_16x2
|
21
23
|
212 LCD 20x4 Bricklet Tinkerforge::BrickletLCD20x4 bricklet_lcd_20x4
|
@@ -142,3 +144,4 @@
|
|
142
144
|
2164 Industrial PTC Bricklet Tinkerforge::BrickletIndustrialPTC bricklet_industrial_ptc
|
143
145
|
2165 DC Bricklet 2.0 Tinkerforge::BrickletDCV2 bricklet_dc_v2
|
144
146
|
2166 Silent Stepper Bricklet 2.0 Tinkerforge::BrickletSilentStepperV2 bricklet_silent_stepper_v2
|
147
|
+
2171 GPS Bricklet 3.0 Tinkerforge::BrickletGPSV3 bricklet_gps_v3
|
@@ -13,6 +13,18 @@ module Tinkerforge
|
|
13
13
|
)
|
14
14
|
end
|
15
15
|
|
16
|
+
private
|
17
|
+
|
18
|
+
def _view_21x8
|
19
|
+
volts = get_voltages
|
20
|
+
<<~ET
|
21
|
+
HAT #{uid_string.rjust 8}
|
22
|
+
|
23
|
+
USB #{'%5.2f V' % [volts[0]*0.001]}
|
24
|
+
DC #{'%5.2f V' % [volts[1]*0.001]}
|
25
|
+
ET
|
26
|
+
end
|
27
|
+
|
16
28
|
end
|
17
29
|
|
18
30
|
end
|
@@ -15,6 +15,21 @@ module Tinkerforge
|
|
15
15
|
)
|
16
16
|
end
|
17
17
|
|
18
|
+
# Returns the derived air pressure at sea level.
|
19
|
+
#
|
20
|
+
# Air pressure is derived from:
|
21
|
+
# - air pressure as measured by the Bricklet itself
|
22
|
+
# - temperature as measured by the Bricklet itself
|
23
|
+
# - altitude of the Bricklet's location (meter)
|
24
|
+
#
|
25
|
+
# With help from:
|
26
|
+
# - https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Barometer_V2.html
|
27
|
+
# - https://keisan.casio.com/exec/system/1224575267
|
28
|
+
def qff(altitude)
|
29
|
+
# QFE / [1 - Tg * H / (273.15 + Tfe + Tg * H)] ^ (0.034163 / Tg)
|
30
|
+
(get_air_pressure / (1 - 0.0065 * altitude / (273.15 + (get_temperature * 0.01) + 0.0065 * altitude)) ** (0.034163 / 0.0065)).round
|
31
|
+
end
|
32
|
+
|
18
33
|
end
|
19
34
|
|
20
35
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletBarometerV2
|
4
|
+
|
5
|
+
# Returns the device's state.
|
6
|
+
def state
|
7
|
+
super.merge(
|
8
|
+
'air_pressure' => get_air_pressure,
|
9
|
+
'calibration' => get_calibration,
|
10
|
+
'altitude' => get_altitude,
|
11
|
+
'reference_air_pressure' => get_reference_air_pressure,
|
12
|
+
'temperature' => get_temperature,
|
13
|
+
'moving_average_configuration' => get_moving_average_configuration,
|
14
|
+
'sensor_configuration' => get_sensor_configuration,
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def _view_21x8
|
21
|
+
<<~ET
|
22
|
+
Baro #{uid_string.rjust 8}
|
23
|
+
|
24
|
+
#{'%7.2f hPa' % [get_air_pressure*0.001]}
|
25
|
+
ET
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -39,6 +39,20 @@ module Tinkerforge
|
|
39
39
|
Time.gm *dt.map(&:to_i)
|
40
40
|
end
|
41
41
|
|
42
|
+
# Returns a URL for viewing the current coordinates on OpenStreetMap.
|
43
|
+
def openstreetmap_marker_url(zoom=12)
|
44
|
+
if c = coordinates
|
45
|
+
"https://www.openstreetmap.org/?mlat=%f&mlon=%f&zoom=%d" % [c, zoom].flatten
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def _view_21x8
|
52
|
+
"GPSv2 #{uid_string.rjust 8}\n\n" +
|
53
|
+
((c = coordinates) ? (" Lat %10.5f\n Lon %10.5f" % c) : ' no fix')
|
54
|
+
end
|
55
|
+
|
42
56
|
end
|
43
57
|
|
44
58
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletGPSV3
|
4
|
+
|
5
|
+
# Returns the device's state.
|
6
|
+
def state
|
7
|
+
super.merge(
|
8
|
+
'fix_led_config' => get_fix_led_config,
|
9
|
+
'fix' => fix?,
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Returns true if a fix is available.
|
14
|
+
def fix?
|
15
|
+
get_status[0]
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns latitude and longitude as reported by the GPS Bricklet.
|
19
|
+
#
|
20
|
+
# Nil when there is no fix (position not determined).
|
21
|
+
def coordinates
|
22
|
+
if fix?
|
23
|
+
c = get_coordinates
|
24
|
+
[
|
25
|
+
c[0] / (c[1] == 'N' ? 1000000.0 : -1000000.0),
|
26
|
+
c[2] / (c[3] == 'E' ? 1000000.0 : -1000000.0)
|
27
|
+
]
|
28
|
+
else
|
29
|
+
nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Returns a Time object representing the time as reported by the GPS Bricklet.
|
34
|
+
def time
|
35
|
+
# FIXME: This will not work after 31-Dec-2099.
|
36
|
+
dt = get_date_time.map &:to_s
|
37
|
+
dt = dt[0].rjust(6,'0').unpack('a2a2a2').reverse + dt[1].rjust(9,'0').concat('000').unpack('a2a2a2a6')
|
38
|
+
dt[0].prepend '20'
|
39
|
+
Time.gm *dt.map(&:to_i)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Returns a URL for viewing the current coordinates on OpenStreetMap.
|
43
|
+
def openstreetmap_marker_url(zoom=12)
|
44
|
+
if c = coordinates
|
45
|
+
"https://www.openstreetmap.org/?mlat=%f&mlon=%f&zoom=%d" % [c, zoom].flatten
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def _view_21x8
|
52
|
+
"GPSv3 #{uid_string.rjust 8}\n\n" +
|
53
|
+
((c = coordinates) ? (" Lat %10.5f\n Lon %10.5f" % c) : ' no fix')
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletHallEffectV2
|
4
|
+
|
5
|
+
# Returns the device's state.
|
6
|
+
def state
|
7
|
+
super.merge(
|
8
|
+
'magnetic_flux_density' => get_magnetic_flux_density,
|
9
|
+
'counter' => get_counter(false),
|
10
|
+
'counter_config' => get_counter_config,
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
data/lib/tinderfridge/devices/bricklet_industrial_dual_relay/bricklet_industrial_dual_relay.json
CHANGED
@@ -6,5 +6,6 @@
|
|
6
6
|
],
|
7
7
|
"weight": 29.4,
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Industrial_Dual_Relay.html",
|
9
|
-
"versions_identifier": "bricklets:industrial_dual_relay"
|
9
|
+
"versions_identifier": "bricklets:industrial_dual_relay",
|
10
|
+
"released": "2018-06-07"
|
10
11
|
}
|
data/lib/tinderfridge/devices/bricklet_laser_range_finder_v2/bricklet_laser_range_finder_v2.json
CHANGED
@@ -6,5 +6,6 @@
|
|
6
6
|
],
|
7
7
|
"weight": 30,
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Laser_Range_Finder_V2.html",
|
9
|
-
"versions_identifier": "bricklets:laser_range_finder_v2"
|
9
|
+
"versions_identifier": "bricklets:laser_range_finder_v2",
|
10
|
+
"released": "2019-05-20"
|
10
11
|
}
|
@@ -1,7 +1,21 @@
|
|
1
|
+
require 'tinderfridge/shared/display_ibm437_encoding'
|
2
|
+
|
1
3
|
module Tinkerforge
|
2
4
|
|
3
5
|
class BrickletLCD128x64
|
4
6
|
|
7
|
+
include Tinkerforge::Shared::IBM437_encoding
|
8
|
+
|
9
|
+
# Encodes a string in the IBM437 character set used by some displays.
|
10
|
+
#
|
11
|
+
# Characters that can not be encoded are replaced with '?'.
|
12
|
+
#
|
13
|
+
# See:
|
14
|
+
# - https://en.wikipedia.org/wiki/Code_page_437
|
15
|
+
def encode(string)
|
16
|
+
ibm437_encode(string)
|
17
|
+
end
|
18
|
+
|
5
19
|
# Returns the current setting for the backlight (0..100).
|
6
20
|
def backlight
|
7
21
|
get_display_configuration[1]
|
@@ -20,12 +34,81 @@ module Tinkerforge
|
|
20
34
|
true
|
21
35
|
end
|
22
36
|
|
37
|
+
# Returns the current contrast setting (0..63).
|
38
|
+
def contrast
|
39
|
+
get_display_configuration[0]
|
40
|
+
end
|
41
|
+
|
42
|
+
# Sets the contrast (0..63).
|
43
|
+
def contrast=(value)
|
44
|
+
state = get_display_configuration
|
45
|
+
state[0] = value.to_i
|
46
|
+
set_display_configuration *state
|
47
|
+
end
|
48
|
+
|
23
49
|
# Clears the display, including the GUI.
|
24
50
|
def clear
|
25
51
|
clear_display
|
26
52
|
remove_all_gui
|
27
53
|
end
|
28
54
|
|
55
|
+
# Returns true if automatic draw is set to false.
|
56
|
+
def buffered?
|
57
|
+
! get_display_configuration[3]
|
58
|
+
end
|
59
|
+
|
60
|
+
# Draws the currently buffered frame.
|
61
|
+
def redraw(force_complete_redraw=false)
|
62
|
+
draw_buffered_frame force_complete_redraw
|
63
|
+
end
|
64
|
+
|
65
|
+
alias flush redraw
|
66
|
+
|
67
|
+
# Returns the device's state.
|
68
|
+
def state
|
69
|
+
super.merge(
|
70
|
+
'touch_led_config' => get_touch_led_config,
|
71
|
+
'display_configuration' => get_display_configuration,
|
72
|
+
)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Clears the display and prints upto 8 lines of text.
|
76
|
+
#
|
77
|
+
# Text may contain newline characters to separate lines.
|
78
|
+
# Lines longer than 21 characters will be wrapped.
|
79
|
+
#
|
80
|
+
# Text is automatically encoded in the IBM437 character set.
|
81
|
+
# @example
|
82
|
+
# my_lcd.put_screen "Hello, World!\n\nRuby #{RUBY_VERSION}"
|
83
|
+
def put_screen(text='', test: false)
|
84
|
+
lines = text.split("\n")
|
85
|
+
lines = lines.map { |s| s.empty? ? '' : s.scan(/.{1,21}/) }.flatten
|
86
|
+
lines = lines[0,8].map { |l| encode l }
|
87
|
+
|
88
|
+
return lines if test
|
89
|
+
|
90
|
+
clear
|
91
|
+
lines.each_with_index do |s,l|
|
92
|
+
write_line l, 0, s
|
93
|
+
end
|
94
|
+
nil
|
95
|
+
end
|
96
|
+
|
97
|
+
# Shows an object.
|
98
|
+
def show(object)
|
99
|
+
if object.respond_to?( :_view_21x8, true)
|
100
|
+
put_screen ( object.send(:_view_21x8) rescue "21x8 view error\n\n#{object.class.to_s}" )
|
101
|
+
elsif
|
102
|
+
put_screen object.inspect[0,168]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
private
|
107
|
+
|
108
|
+
def _view_21x8
|
109
|
+
"LCD #{uid_string.rjust 8}"
|
110
|
+
end
|
111
|
+
|
29
112
|
end
|
30
113
|
|
31
114
|
end
|
data/lib/tinderfridge/devices/bricklet_motorized_linear_poti/bricklet_motorized_linear_poti.json
CHANGED
@@ -6,5 +6,6 @@
|
|
6
6
|
],
|
7
7
|
"weight": 67,
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Motorized_Linear_Poti.html",
|
9
|
-
"versions_identifier": "bricklets:motorized_linear_poti"
|
9
|
+
"versions_identifier": "bricklets:motorized_linear_poti",
|
10
|
+
"released": "2017-11-17"
|
10
11
|
}
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'tinderfridge/shared/display_ibm437_encoding'
|
2
|
+
|
3
|
+
module Tinkerforge
|
4
|
+
|
5
|
+
class BrickletOLED128x64V2
|
6
|
+
|
7
|
+
include Tinkerforge::Shared::IBM437_encoding
|
8
|
+
|
9
|
+
# Encodes a string in the IBM437 character set used by some displays.
|
10
|
+
#
|
11
|
+
# Characters that can not be encoded are replaced with '?'.
|
12
|
+
#
|
13
|
+
# See:
|
14
|
+
# - https://en.wikipedia.org/wiki/Code_page_437
|
15
|
+
def encode(string)
|
16
|
+
ibm437_encode(string)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Turns the display all black.
|
20
|
+
def blackout
|
21
|
+
c = get_display_configuration
|
22
|
+
|
23
|
+
if c[1] # inverted
|
24
|
+
set_display_configuration c[0], false, c[2]
|
25
|
+
end
|
26
|
+
|
27
|
+
clear_display
|
28
|
+
|
29
|
+
if ! c[2] # buffered
|
30
|
+
draw_buffered_frame(true)
|
31
|
+
end
|
32
|
+
|
33
|
+
true
|
34
|
+
end
|
35
|
+
|
36
|
+
# Returns true if automatic draw is set to false.
|
37
|
+
def buffered?
|
38
|
+
! get_display_configuration[2]
|
39
|
+
end
|
40
|
+
|
41
|
+
# Draws the currently buffered frame.
|
42
|
+
def redraw(force_complete_redraw=false)
|
43
|
+
draw_buffered_frame force_complete_redraw
|
44
|
+
end
|
45
|
+
|
46
|
+
alias flush redraw
|
47
|
+
|
48
|
+
# Returns the device's state.
|
49
|
+
def state
|
50
|
+
super.merge(
|
51
|
+
'display_configuration' => get_display_configuration,
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Clears the display and prints upto 8 lines of text.
|
56
|
+
#
|
57
|
+
# Text may contain newline characters to separate lines.
|
58
|
+
# Lines longer than 21 characters will be wrapped.
|
59
|
+
#
|
60
|
+
# Text is automatically encoded in the IBM437 character set.
|
61
|
+
# @example
|
62
|
+
# my_oled.put_screen "Hello, World!\n\nRuby #{RUBY_VERSION}"
|
63
|
+
def put_screen(text='', test: false)
|
64
|
+
lines = text.split("\n")
|
65
|
+
lines = lines.map { |s| s.empty? ? '' : s.scan(/.{1,21}/) }.flatten
|
66
|
+
lines = lines[0,8].map { |l| encode l }
|
67
|
+
|
68
|
+
return lines if test
|
69
|
+
|
70
|
+
clear_display
|
71
|
+
lines.each_with_index do |s,l|
|
72
|
+
write_line l, 0, s
|
73
|
+
end
|
74
|
+
nil
|
75
|
+
end
|
76
|
+
|
77
|
+
# Shows an object.
|
78
|
+
def show(object)
|
79
|
+
if object.respond_to?( :_view_21x8, true)
|
80
|
+
put_screen ( object.send(:_view_21x8) rescue "21x8 view error\n\n#{object.class.to_s}" )
|
81
|
+
elsif
|
82
|
+
put_screen object.inspect[0,168]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def _view_21x8
|
89
|
+
"OLED #{uid_string.rjust 8}"
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
@@ -2,6 +2,13 @@ module Tinkerforge
|
|
2
2
|
|
3
3
|
class BrickletOutdoorWeather
|
4
4
|
|
5
|
+
# Returns the device's state.
|
6
|
+
def state
|
7
|
+
super.merge(
|
8
|
+
'sensor_data' => sensors,
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
5
12
|
# Returns the last measured data for all sensors.
|
6
13
|
#
|
7
14
|
# The result is a Hash, with sensor identifiers as the keys. Values per sensor are:
|
@@ -14,6 +21,15 @@ module Tinkerforge
|
|
14
21
|
end.to_h
|
15
22
|
end
|
16
23
|
|
24
|
+
private
|
25
|
+
|
26
|
+
def _view_21x8
|
27
|
+
"Weather #{uid_string.rjust 8}\n\n" +
|
28
|
+
sensors.first(6).map do |k,v|
|
29
|
+
%Q(#{v[2] > 100 ? '?' : ' '} %3d %4.1f °C %2d %%\n) % [k,v].flatten
|
30
|
+
end.join
|
31
|
+
end
|
32
|
+
|
17
33
|
end
|
18
34
|
|
19
35
|
end
|
@@ -6,5 +6,6 @@
|
|
6
6
|
],
|
7
7
|
"weight": 3,
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/RealTime_Clock_V2.html",
|
9
|
-
"versions_identifier": "bricklets:real_time_clock_v2"
|
9
|
+
"versions_identifier": "bricklets:real_time_clock_v2",
|
10
|
+
"released": "2018-06-07"
|
10
11
|
}
|
@@ -6,5 +6,6 @@
|
|
6
6
|
],
|
7
7
|
"weight": 6,
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Rotary_Encoder_V2.html",
|
9
|
-
"versions_identifier": "bricklets:rotary_encoder_v2"
|
9
|
+
"versions_identifier": "bricklets:rotary_encoder_v2",
|
10
|
+
"released": "2018-02-26"
|
10
11
|
}
|
@@ -6,5 +6,6 @@
|
|
6
6
|
],
|
7
7
|
"weight": 3,
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Temperature_IR_V2.html",
|
9
|
-
"versions_identifier": "bricklets:temperature_ir_v2"
|
9
|
+
"versions_identifier": "bricklets:temperature_ir_v2",
|
10
|
+
"released": "2018-02-26"
|
10
11
|
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class BrickletTemperatureV2
|
4
|
+
|
5
|
+
# Returns the device's state.
|
6
|
+
def state
|
7
|
+
super.merge(
|
8
|
+
'temperature' => get_temperature,
|
9
|
+
'heater_configuration' => get_heater_configuration,
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def _view_21x8
|
16
|
+
<<~ET
|
17
|
+
Temp #{uid_string.rjust 8}
|
18
|
+
|
19
|
+
#{'%6.2f °C' % [get_temperature*0.01]}
|
20
|
+
|
21
|
+
#{get_heater_configuration == 1 ? 'HEATER' : ''}
|
22
|
+
ET
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -6,5 +6,6 @@
|
|
6
6
|
],
|
7
7
|
"weight": 10,
|
8
8
|
"documentation_en_url": "https://www.tinkerforge.com/en/doc/Hardware/Bricklets/Voltage_Current_V2.html",
|
9
|
-
"versions_identifier": "bricklets:voltage_current_v2"
|
9
|
+
"versions_identifier": "bricklets:voltage_current_v2",
|
10
|
+
"released": "2018-06-07"
|
10
11
|
}
|
@@ -10,6 +10,9 @@ module Tinkerforge
|
|
10
10
|
# Returns the port for the IP Connection.
|
11
11
|
attr_reader :port
|
12
12
|
|
13
|
+
# Returns the network socket used by the IP Connection.
|
14
|
+
attr_reader :socket
|
15
|
+
|
13
16
|
# Returns a programmer-friendly representation of the object.
|
14
17
|
def inspect
|
15
18
|
"%s (%s:%s)" % [self.class, host, port]
|
@@ -117,17 +120,22 @@ module Tinkerforge
|
|
117
120
|
|
118
121
|
end
|
119
122
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
123
|
+
|
124
|
+
class << self
|
125
|
+
|
126
|
+
# Creates an IP Connection object connected to the given host and port.
|
127
|
+
#
|
128
|
+
# If no host and port are specified, uses the TINKERFORGE_HOST and TINKERFORGE_PORT environment variables, when defined.
|
129
|
+
# Otherwise defaults to 'localhost' and port 4223.
|
130
|
+
def connect(host=nil, port=nil)
|
131
|
+
ipcon = IPConnection.new
|
132
|
+
ipcon.connect(
|
133
|
+
( host || ENV['TINKERFORGE_HOST'] || 'localhost' ),
|
134
|
+
( port || ENV['TINKERFORGE_PORT'] || 4223 )
|
135
|
+
)
|
136
|
+
ipcon
|
137
|
+
end
|
138
|
+
|
131
139
|
end
|
132
140
|
|
133
141
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
module Shared
|
4
|
+
|
5
|
+
module IBM437_encoding
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
# Encodes a string in the IBM437 character set used by some displays.
|
10
|
+
#
|
11
|
+
# Characters that can not be encoded are replaced with '?'.
|
12
|
+
#
|
13
|
+
# See:
|
14
|
+
# - https://en.wikipedia.org/wiki/Code_page_437
|
15
|
+
def ibm437_encode(string)
|
16
|
+
string.encode('IBM437', fallback: ibm437_encoding_fallback_table)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Ruby's IBM437 encoding does not include codepoints 0..31 and 127.
|
20
|
+
# This fallback table defines those, minus 0,
|
21
|
+
# and defines '?' as default for undefined characters.
|
22
|
+
def ibm437_encoding_fallback_table
|
23
|
+
@@ibm437_encoding_fallback_table ||= Hash.new('?').merge(
|
24
|
+
{
|
25
|
+
'☺'=> "\x01", '☻'=> "\x02", '♥'=> "\x03", '♦'=> "\x04",
|
26
|
+
'♣'=> "\x05", '♠'=> "\x06", '•'=> "\x07", '◘'=> "\x08",
|
27
|
+
'○'=> "\x09", '◙'=> "\x0a", '♂'=> "\x0b", '♀'=> "\x0c",
|
28
|
+
'♪'=> "\x0d", '♫'=> "\x0e", '☼'=> "\x0f", '►'=> "\x10",
|
29
|
+
'◄'=> "\x11", '↕'=> "\x12", '‼'=> "\x13", '¶'=> "\x14",
|
30
|
+
'§'=> "\x15", '▬'=> "\x16", '↨'=> "\x17", '↑'=> "\x18",
|
31
|
+
'↓'=> "\x19", '→'=> "\x1a", '←'=> "\x1b", '∟'=> "\x1c",
|
32
|
+
'↔'=> "\x1d", '▲'=> "\x1e", '▼'=> "\x1f", '⌂'=> "\x7f"
|
33
|
+
}
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -5,16 +5,31 @@ module Tinkerforge
|
|
5
5
|
ALL_VERSIONS_URL = 'https://download.tinkerforge.com/all_versions.txt'
|
6
6
|
LATEST_VERSIONS_URL = 'https://download.tinkerforge.com/latest_versions.txt'
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
class << self
|
9
|
+
|
10
|
+
# Returns the directory where Tinkerforge bindings appear to be installed.
|
11
|
+
def lib_dir
|
12
|
+
File.dirname File.dirname Device.instance_method('uid').source_location.first
|
13
|
+
end
|
14
|
+
|
15
|
+
# Attempts to load all files that are part of Tinkerforge. Returns a list of files loaded.
|
16
|
+
def require_everything
|
17
|
+
Dir.glob(File.join lib_dir, 'tinkerforge', '*.rb').map do |file|
|
18
|
+
require(file) ? file : nil
|
19
|
+
end.compact
|
20
|
+
end
|
21
|
+
|
22
|
+
# Discovers local devices.
|
23
|
+
#
|
24
|
+
# Connects to 'localhost', and returns devices discovered there. If no port is specified, defaults to port 4223.
|
25
|
+
# @example
|
26
|
+
# Tinkerforge.local.ls
|
27
|
+
# @example Mac only
|
28
|
+
# Tinkerforge.local.doc
|
29
|
+
def local(port=4223)
|
30
|
+
connect('localhost', port).discover(0.25)
|
31
|
+
end
|
12
32
|
|
13
|
-
# Attempts to load all files that are part of Tinkerforge. Returns a list of files loaded.
|
14
|
-
def self.require_everything
|
15
|
-
Dir.glob(File.join lib_dir, 'tinkerforge', '*.rb').map do |file|
|
16
|
-
require(file) ? file : nil
|
17
|
-
end.compact
|
18
33
|
end
|
19
34
|
|
20
35
|
end
|
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.12.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: 2022-
|
11
|
+
date: 2022-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tinkerforge
|
@@ -41,6 +41,10 @@ files:
|
|
41
41
|
- lib/tinderfridge/device_collection.rb
|
42
42
|
- lib/tinderfridge/device_info.rb
|
43
43
|
- lib/tinderfridge/device_info.txt
|
44
|
+
- lib/tinderfridge/devices/brick_esp32/brick_esp32.json
|
45
|
+
- lib/tinderfridge/devices/brick_esp32/brick_esp32.rb
|
46
|
+
- lib/tinderfridge/devices/brick_esp32_ethernet/brick_esp32_ethernet.json
|
47
|
+
- lib/tinderfridge/devices/brick_esp32_ethernet/brick_esp32_ethernet.rb
|
44
48
|
- lib/tinderfridge/devices/brick_hat/brick_hat.json
|
45
49
|
- lib/tinderfridge/devices/brick_hat/brick_hat.rb
|
46
50
|
- lib/tinderfridge/devices/brick_hat_zero/brick_hat_zero.json
|
@@ -55,6 +59,7 @@ files:
|
|
55
59
|
- lib/tinderfridge/devices/bricklet_analog_in_v3/bricklet_analog_in_v3.json
|
56
60
|
- lib/tinderfridge/devices/bricklet_analog_out_v3/bricklet_analog_out_v3.json
|
57
61
|
- lib/tinderfridge/devices/bricklet_barometer_v2/bricklet_barometer_v2.json
|
62
|
+
- lib/tinderfridge/devices/bricklet_barometer_v2/bricklet_barometer_v2.rb
|
58
63
|
- lib/tinderfridge/devices/bricklet_can_v2/bricklet_can_v2.json
|
59
64
|
- lib/tinderfridge/devices/bricklet_co2_v2/bricklet_co2_v2.json
|
60
65
|
- lib/tinderfridge/devices/bricklet_co2_v2/bricklet_co2_v2.rb
|
@@ -71,7 +76,10 @@ files:
|
|
71
76
|
- lib/tinderfridge/devices/bricklet_energy_monitor/bricklet_energy_monitor.json
|
72
77
|
- lib/tinderfridge/devices/bricklet_gps_v2/bricklet_gps_v2.json
|
73
78
|
- lib/tinderfridge/devices/bricklet_gps_v2/bricklet_gps_v2.rb
|
79
|
+
- lib/tinderfridge/devices/bricklet_gps_v3/bricklet_gps_v3.json
|
80
|
+
- lib/tinderfridge/devices/bricklet_gps_v3/bricklet_gps_v3.rb
|
74
81
|
- lib/tinderfridge/devices/bricklet_hall_effect_v2/bricklet_hall_effect_v2.json
|
82
|
+
- lib/tinderfridge/devices/bricklet_hall_effect_v2/bricklet_hall_effect_v2.rb
|
75
83
|
- lib/tinderfridge/devices/bricklet_humidity_v2/bricklet_humidity_v2.json
|
76
84
|
- lib/tinderfridge/devices/bricklet_imu_v3/bricklet_imu_v3.json
|
77
85
|
- lib/tinderfridge/devices/bricklet_industrial_analog_out_v2/bricklet_industrial_analog_out_v2.json
|
@@ -107,12 +115,14 @@ files:
|
|
107
115
|
- lib/tinderfridge/devices/bricklet_nfc/bricklet_nfc.json
|
108
116
|
- lib/tinderfridge/devices/bricklet_nfc/bricklet_nfc.rb
|
109
117
|
- lib/tinderfridge/devices/bricklet_oled_128x64_v2/bricklet_oled_128x64_v2.json
|
118
|
+
- lib/tinderfridge/devices/bricklet_oled_128x64_v2/bricklet_oled_128x64_v2.rb
|
110
119
|
- lib/tinderfridge/devices/bricklet_one_wire/bricklet_one_wire.json
|
111
120
|
- lib/tinderfridge/devices/bricklet_outdoor_weather/bricklet_outdoor_weather.json
|
112
121
|
- lib/tinderfridge/devices/bricklet_outdoor_weather/bricklet_outdoor_weather.rb
|
113
122
|
- lib/tinderfridge/devices/bricklet_particulate_matter/bricklet_particulate_matter.json
|
114
123
|
- lib/tinderfridge/devices/bricklet_performance_dc/bricklet_performance_dc.json
|
115
124
|
- lib/tinderfridge/devices/bricklet_piezo_speaker_v2/bricklet_piezo_speaker_v2.json
|
125
|
+
- lib/tinderfridge/devices/bricklet_piezo_speaker_v2/bricklet_piezo_speaker_v2.rb
|
116
126
|
- lib/tinderfridge/devices/bricklet_ptc_v2/bricklet_ptc_v2.json
|
117
127
|
- lib/tinderfridge/devices/bricklet_real_time_clock_v2/bricklet_real_time_clock_v2.json
|
118
128
|
- lib/tinderfridge/devices/bricklet_remote_switch_v2/bricklet_remote_switch_v2.json
|
@@ -134,7 +144,9 @@ files:
|
|
134
144
|
- lib/tinderfridge/devices/bricklet_sound_pressure_level/bricklet_sound_pressure_level.json
|
135
145
|
- lib/tinderfridge/devices/bricklet_sound_pressure_level/bricklet_sound_pressure_level.rb
|
136
146
|
- lib/tinderfridge/devices/bricklet_temperature_ir_v2/bricklet_temperature_ir_v2.json
|
147
|
+
- lib/tinderfridge/devices/bricklet_temperature_ir_v2/bricklet_temperature_ir_v2.rb
|
137
148
|
- lib/tinderfridge/devices/bricklet_temperature_v2/bricklet_temperature_v2.json
|
149
|
+
- lib/tinderfridge/devices/bricklet_temperature_v2/bricklet_temperature_v2.rb
|
138
150
|
- lib/tinderfridge/devices/bricklet_thermal_imaging/bricklet_thermal_imaging.json
|
139
151
|
- lib/tinderfridge/devices/bricklet_thermocouple_v2/bricklet_thermocouple_v2.json
|
140
152
|
- lib/tinderfridge/devices/bricklet_uv_light_v2/bricklet_uv_light_v2.json
|
@@ -142,6 +154,7 @@ files:
|
|
142
154
|
- lib/tinderfridge/devices/bricklet_voltage_current_v2/bricklet_voltage_current_v2.rb
|
143
155
|
- lib/tinderfridge/devices/bricklet_xmc1400_breakout/bricklet_xmc1400_breakout.json
|
144
156
|
- lib/tinderfridge/ip_connection.rb
|
157
|
+
- lib/tinderfridge/shared/display_ibm437_encoding.rb
|
145
158
|
- lib/tinderfridge/tinkerforge.rb
|
146
159
|
- lib/tinderfridge/version.rb
|
147
160
|
homepage: https://github.com/lllisteu/tinderfridge
|
@@ -166,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
179
|
- !ruby/object:Gem::Version
|
167
180
|
version: '0'
|
168
181
|
requirements: []
|
169
|
-
rubygems_version: 3.
|
182
|
+
rubygems_version: 3.3.11
|
170
183
|
signing_key:
|
171
184
|
specification_version: 4
|
172
185
|
summary: Extending Tinkerforge in fun and useful ways.
|