tinderfridge 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/tinderfridge.rb +19 -0
- data/lib/tinderfridge/device.rb +71 -0
- data/lib/tinderfridge/device_collection.rb +46 -0
- data/lib/tinderfridge/device_info.rb +72 -0
- data/lib/tinderfridge/device_info.txt +139 -0
- data/lib/tinderfridge/ip_connection.rb +73 -0
- data/lib/tinderfridge/tinkerforge.rb +17 -0
- data/lib/tinderfridge/version.rb +13 -0
- metadata +67 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 92034339759c82954498219a57e8070f6859b907e135a8d9a8df936abd58a01f
|
4
|
+
data.tar.gz: a222affea211a17b0e6b9fd0087ddb53830f5e2a0de7a63258ebc566d5e6bd7d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a450530444bcaeeed475e6476d12d7cfeedda25f02cb2619b4ccdd62951f9f16f9a1f03f874c6807fef6efddbe7fe3b06825c5ca120ca6828ef1e332844cceb3
|
7
|
+
data.tar.gz: a7c84f3fd084e655a81f79d58a3bbf1173f31ca0b0fafd5a66041c3aefd689f5a04d18045599a645073ccae693b13a07c6af0f51d668eb0ab8bd0954dbf6f1e9
|
data/lib/tinderfridge.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
if defined? Tinkerforge
|
2
|
+
raise 'Tinkerforge was already loaded, so Tinderfridge can not reliably extend it!'
|
3
|
+
end
|
4
|
+
|
5
|
+
%w(
|
6
|
+
|
7
|
+
version
|
8
|
+
|
9
|
+
ip_connection
|
10
|
+
|
11
|
+
device
|
12
|
+
|
13
|
+
tinkerforge
|
14
|
+
|
15
|
+
device_info
|
16
|
+
|
17
|
+
device_collection
|
18
|
+
|
19
|
+
).each { |m| require "tinderfridge/#{m}" }
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'tinkerforge/ip_connection'
|
2
|
+
|
3
|
+
module Tinkerforge
|
4
|
+
class Device
|
5
|
+
|
6
|
+
#----------------------------------------------------------------------#
|
7
|
+
# Class Methods #
|
8
|
+
#----------------------------------------------------------------------#
|
9
|
+
|
10
|
+
class << self
|
11
|
+
|
12
|
+
# Returns all currently defined classes that inherited from this class.
|
13
|
+
#
|
14
|
+
# With help from:
|
15
|
+
# - https://stackoverflow.com/questions/2393697
|
16
|
+
def descendants
|
17
|
+
ObjectSpace.each_object(Class).select { |klass| klass < self }
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns a map of currently defined device classes.
|
21
|
+
def class_map
|
22
|
+
descendants.map do |klass|
|
23
|
+
if klass.const_defined? 'DEVICE_IDENTIFIER'
|
24
|
+
[
|
25
|
+
klass.const_get('DEVICE_IDENTIFIER'),
|
26
|
+
klass.const_get('DEVICE_DISPLAY_NAME'),
|
27
|
+
klass,
|
28
|
+
File.basename(klass.instance_method('initialize').source_location.first, '.rb')
|
29
|
+
]
|
30
|
+
else
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
end.compact.sort_by { |i| i[0] }
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
#----------------------------------------------------------------------#
|
39
|
+
# Instance Methods #
|
40
|
+
#----------------------------------------------------------------------#
|
41
|
+
|
42
|
+
# Returns the device's IPConnection object.
|
43
|
+
attr_reader :ipcon
|
44
|
+
|
45
|
+
# Returns a programmer-friendly representation of the device.
|
46
|
+
def inspect
|
47
|
+
"%s (%s@%s:%s)" % [self.class, @uid_string, ipcon.host, ipcon.port]
|
48
|
+
end
|
49
|
+
|
50
|
+
# Identifies a Tinkerforge device by blinking its status led.
|
51
|
+
#
|
52
|
+
# Supports recent devices. When invoked on older devices, does nothing.
|
53
|
+
def identify(seconds=10)
|
54
|
+
if (respond_to? 'get_status_led_config') and (respond_to? 'set_status_led_config')
|
55
|
+
seconds = seconds.to_i
|
56
|
+
state = get_status_led_config
|
57
|
+
|
58
|
+
(seconds*2).times do |n|
|
59
|
+
set_status_led_config n.remainder(2)
|
60
|
+
sleep 0.5
|
61
|
+
end
|
62
|
+
|
63
|
+
set_status_led_config state
|
64
|
+
seconds
|
65
|
+
else
|
66
|
+
false
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class DeviceCollection < Hash
|
4
|
+
|
5
|
+
# Returns the temperatures as measured inside the microcontrollers of devices in the collection.
|
6
|
+
#
|
7
|
+
# Nil for devices that do not support the get_chip_temperature method.
|
8
|
+
def get_chip_temperature
|
9
|
+
map { |k,d| [ k, d.respond_to?('get_chip_temperature' ) ? d.get_chip_temperature : nil ] }.to_h
|
10
|
+
end
|
11
|
+
|
12
|
+
# Returns the error counts for devices in the collection.
|
13
|
+
#
|
14
|
+
# Nil for devices that do not support the get_spitfp_error_count method.
|
15
|
+
def get_spitfp_error_count
|
16
|
+
map { |k,d| [ k, d.respond_to?('get_spitfp_error_count' ) ? d.get_spitfp_error_count : nil ] }.to_h
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns the status LED configuration for devices in the collection.
|
20
|
+
#
|
21
|
+
# Nil for devices that do not support the get_status_led_config method.
|
22
|
+
def get_status_led_config
|
23
|
+
map { |k,d| [ k, d.respond_to?('get_status_led_config') ? d.get_status_led_config : nil ] }.to_h
|
24
|
+
end
|
25
|
+
|
26
|
+
# Sets the status LED configuration for devices in the collection.
|
27
|
+
#
|
28
|
+
# Ignores devices that do not support the set_status_led_config method.
|
29
|
+
#
|
30
|
+
# Argument can be an Integer (e.g. 0=off, 1=on), or a Hash (as returned by #get_status_led_config).
|
31
|
+
def set_status_led_config(state)
|
32
|
+
case state
|
33
|
+
when Integer
|
34
|
+
map { |k,d| d.respond_to?('set_status_led_config') ? d : nil}.compact.each { |d| d.set_status_led_config(state) }.size
|
35
|
+
when Hash
|
36
|
+
state.keys.select { |k| self[k].respond_to?('set_status_led_config') }.each do |k|
|
37
|
+
self[k].set_status_led_config(state[k])
|
38
|
+
end.size
|
39
|
+
else
|
40
|
+
raise ArgumentError, 'Unknown state'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
module Tinkerforge
|
2
|
+
|
3
|
+
class << self
|
4
|
+
|
5
|
+
# Returns information about device types.
|
6
|
+
#
|
7
|
+
# Device information is returned as array:
|
8
|
+
# - 0 : Device Identifier
|
9
|
+
# - 1 : Device Display Name
|
10
|
+
# - 2 : Associated class name and source file
|
11
|
+
#
|
12
|
+
# Optional selector argument can be:
|
13
|
+
# - Device Identifier
|
14
|
+
# - Device class
|
15
|
+
# - Device instance
|
16
|
+
# - Class name or Device Display Name (Regexp)
|
17
|
+
# Selection by regular expression is case-insensitive by default, and returns an array of matches.
|
18
|
+
#
|
19
|
+
# @example Select by Device Identifier
|
20
|
+
# Tinkerforge.device_info 2103
|
21
|
+
#
|
22
|
+
# @example Select by class
|
23
|
+
# Tinkerforge.device_info Tinkerforge::BrickletLEDStripV2
|
24
|
+
#
|
25
|
+
# @example Select by class name and Device Display Name
|
26
|
+
# # All 'analog' devices
|
27
|
+
# Tinkerforge.device_info /analog/
|
28
|
+
#
|
29
|
+
# # Relays and switches
|
30
|
+
# Tinkerforge.device_info /relay|switch/
|
31
|
+
#
|
32
|
+
# @example No Selector
|
33
|
+
# # All devices
|
34
|
+
# Tinkerforge.device_info
|
35
|
+
def device_info(selector=nil)
|
36
|
+
@@device_info ||= load_device_info
|
37
|
+
case selector
|
38
|
+
when NilClass
|
39
|
+
@@device_info
|
40
|
+
when Integer
|
41
|
+
@@device_info.select { |i| i[0] == selector }.first
|
42
|
+
when Class
|
43
|
+
klass = selector.to_s
|
44
|
+
@@device_info.select { |i| i[2][0] == klass }.first
|
45
|
+
when Regexp
|
46
|
+
r = Regexp.new selector.source, Regexp::IGNORECASE
|
47
|
+
@@device_info.select { |i| ( i[1] =~ r ) || ( i[2][0] =~ r ) }
|
48
|
+
else
|
49
|
+
if selector.class.ancestors.include? Tinkerforge::Device
|
50
|
+
klass = selector.class.to_s
|
51
|
+
@@device_info.select { |i| i[2][0] == klass }.first
|
52
|
+
else
|
53
|
+
raise ArgumentError, 'Unsupported selector'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
# Load device info from file.
|
61
|
+
def load_device_info
|
62
|
+
File.readlines( File.join( File.dirname(__FILE__), 'device_info.txt' ) ).map do |l|
|
63
|
+
a = l.chomp.split("\t")
|
64
|
+
a[0] = a[0].to_i
|
65
|
+
a[2,2] = a[2,2], nil
|
66
|
+
a.compact
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
11 DC Brick Tinkerforge::BrickDC brick_dc
|
2
|
+
13 Master Brick Tinkerforge::BrickMaster brick_master
|
3
|
+
14 Servo Brick Tinkerforge::BrickServo brick_servo
|
4
|
+
15 Stepper Brick Tinkerforge::BrickStepper brick_stepper
|
5
|
+
16 IMU Brick Tinkerforge::BrickIMU brick_imu
|
6
|
+
17 RED Brick Tinkerforge::BrickRED brick_red
|
7
|
+
18 IMU Brick 2.0 Tinkerforge::BrickIMUV2 brick_imu_v2
|
8
|
+
19 Silent Stepper Brick Tinkerforge::BrickSilentStepper brick_silent_stepper
|
9
|
+
21 Ambient Light Bricklet Tinkerforge::BrickletAmbientLight bricklet_ambient_light
|
10
|
+
23 Current12 Bricklet Tinkerforge::BrickletCurrent12 bricklet_current12
|
11
|
+
24 Current25 Bricklet Tinkerforge::BrickletCurrent25 bricklet_current25
|
12
|
+
25 Distance IR Bricklet Tinkerforge::BrickletDistanceIR bricklet_distance_ir
|
13
|
+
26 Dual Relay Bricklet Tinkerforge::BrickletDualRelay bricklet_dual_relay
|
14
|
+
27 Humidity Bricklet Tinkerforge::BrickletHumidity bricklet_humidity
|
15
|
+
28 IO-16 Bricklet Tinkerforge::BrickletIO16 bricklet_io16
|
16
|
+
29 IO-4 Bricklet Tinkerforge::BrickletIO4 bricklet_io4
|
17
|
+
111 HAT Brick Tinkerforge::BrickHAT brick_hat
|
18
|
+
112 HAT Zero Brick Tinkerforge::BrickHATZero brick_hat_zero
|
19
|
+
210 Joystick Bricklet Tinkerforge::BrickletJoystick bricklet_joystick
|
20
|
+
211 LCD 16x2 Bricklet Tinkerforge::BrickletLCD16x2 bricklet_lcd_16x2
|
21
|
+
212 LCD 20x4 Bricklet Tinkerforge::BrickletLCD20x4 bricklet_lcd_20x4
|
22
|
+
213 Linear Poti Bricklet Tinkerforge::BrickletLinearPoti bricklet_linear_poti
|
23
|
+
214 Piezo Buzzer Bricklet Tinkerforge::BrickletPiezoBuzzer bricklet_piezo_buzzer
|
24
|
+
215 Rotary Poti Bricklet Tinkerforge::BrickletRotaryPoti bricklet_rotary_poti
|
25
|
+
216 Temperature Bricklet Tinkerforge::BrickletTemperature bricklet_temperature
|
26
|
+
217 Temperature IR Bricklet Tinkerforge::BrickletTemperatureIR bricklet_temperature_ir
|
27
|
+
218 Voltage Bricklet Tinkerforge::BrickletVoltage bricklet_voltage
|
28
|
+
219 Analog In Bricklet Tinkerforge::BrickletAnalogIn bricklet_analog_in
|
29
|
+
220 Analog Out Bricklet Tinkerforge::BrickletAnalogOut bricklet_analog_out
|
30
|
+
221 Barometer Bricklet Tinkerforge::BrickletBarometer bricklet_barometer
|
31
|
+
222 GPS Bricklet Tinkerforge::BrickletGPS bricklet_gps
|
32
|
+
223 Industrial Digital In 4 Bricklet Tinkerforge::BrickletIndustrialDigitalIn4 bricklet_industrial_digital_in_4
|
33
|
+
224 Industrial Digital Out 4 Bricklet Tinkerforge::BrickletIndustrialDigitalOut4 bricklet_industrial_digital_out_4
|
34
|
+
225 Industrial Quad Relay Bricklet Tinkerforge::BrickletIndustrialQuadRelay bricklet_industrial_quad_relay
|
35
|
+
226 PTC Bricklet Tinkerforge::BrickletPTC bricklet_ptc
|
36
|
+
227 Voltage/Current Bricklet Tinkerforge::BrickletVoltageCurrent bricklet_voltage_current
|
37
|
+
228 Industrial Dual 0-20mA Bricklet Tinkerforge::BrickletIndustrialDual020mA bricklet_industrial_dual_0_20ma
|
38
|
+
229 Distance US Bricklet Tinkerforge::BrickletDistanceUS bricklet_distance_us
|
39
|
+
230 Dual Button Bricklet Tinkerforge::BrickletDualButton bricklet_dual_button
|
40
|
+
231 LED Strip Bricklet Tinkerforge::BrickletLEDStrip bricklet_led_strip
|
41
|
+
232 Moisture Bricklet Tinkerforge::BrickletMoisture bricklet_moisture
|
42
|
+
233 Motion Detector Bricklet Tinkerforge::BrickletMotionDetector bricklet_motion_detector
|
43
|
+
234 Multi Touch Bricklet Tinkerforge::BrickletMultiTouch bricklet_multi_touch
|
44
|
+
235 Remote Switch Bricklet Tinkerforge::BrickletRemoteSwitch bricklet_remote_switch
|
45
|
+
236 Rotary Encoder Bricklet Tinkerforge::BrickletRotaryEncoder bricklet_rotary_encoder
|
46
|
+
237 Segment Display 4x7 Bricklet Tinkerforge::BrickletSegmentDisplay4x7 bricklet_segment_display_4x7
|
47
|
+
238 Sound Intensity Bricklet Tinkerforge::BrickletSoundIntensity bricklet_sound_intensity
|
48
|
+
239 Tilt Bricklet Tinkerforge::BrickletTilt bricklet_tilt
|
49
|
+
240 Hall Effect Bricklet Tinkerforge::BrickletHallEffect bricklet_hall_effect
|
50
|
+
241 Line Bricklet Tinkerforge::BrickletLine bricklet_line
|
51
|
+
242 Piezo Speaker Bricklet Tinkerforge::BrickletPiezoSpeaker bricklet_piezo_speaker
|
52
|
+
243 Color Bricklet Tinkerforge::BrickletColor bricklet_color
|
53
|
+
244 Solid State Relay Bricklet Tinkerforge::BrickletSolidStateRelay bricklet_solid_state_relay
|
54
|
+
246 NFC/RFID Bricklet Tinkerforge::BrickletNFCRFID bricklet_nfc_rfid
|
55
|
+
249 Industrial Dual Analog In Bricklet Tinkerforge::BrickletIndustrialDualAnalogIn bricklet_industrial_dual_analog_in
|
56
|
+
250 Accelerometer Bricklet Tinkerforge::BrickletAccelerometer bricklet_accelerometer
|
57
|
+
251 Analog In Bricklet 2.0 Tinkerforge::BrickletAnalogInV2 bricklet_analog_in_v2
|
58
|
+
253 Load Cell Bricklet Tinkerforge::BrickletLoadCell bricklet_load_cell
|
59
|
+
254 RS232 Bricklet Tinkerforge::BrickletRS232 bricklet_rs232
|
60
|
+
255 Laser Range Finder Bricklet Tinkerforge::BrickletLaserRangeFinder bricklet_laser_range_finder
|
61
|
+
256 Analog Out Bricklet 2.0 Tinkerforge::BrickletAnalogOutV2 bricklet_analog_out_v2
|
62
|
+
258 Industrial Analog Out Bricklet Tinkerforge::BrickletIndustrialAnalogOut bricklet_industrial_analog_out
|
63
|
+
259 Ambient Light Bricklet 2.0 Tinkerforge::BrickletAmbientLightV2 bricklet_ambient_light_v2
|
64
|
+
260 Dust Detector Bricklet Tinkerforge::BrickletDustDetector bricklet_dust_detector
|
65
|
+
262 CO2 Bricklet Tinkerforge::BrickletCO2 bricklet_co2
|
66
|
+
263 OLED 128x64 Bricklet Tinkerforge::BrickletOLED128x64 bricklet_oled_128x64
|
67
|
+
264 OLED 64x48 Bricklet Tinkerforge::BrickletOLED64x48 bricklet_oled_64x48
|
68
|
+
265 UV Light Bricklet Tinkerforge::BrickletUVLight bricklet_uv_light
|
69
|
+
266 Thermocouple Bricklet Tinkerforge::BrickletThermocouple bricklet_thermocouple
|
70
|
+
267 Motorized Linear Poti Bricklet Tinkerforge::BrickletMotorizedLinearPoti bricklet_motorized_linear_poti
|
71
|
+
268 Real-Time Clock Bricklet Tinkerforge::BrickletRealTimeClock bricklet_real_time_clock
|
72
|
+
270 CAN Bricklet Tinkerforge::BrickletCAN bricklet_can
|
73
|
+
271 RGB LED Bricklet Tinkerforge::BrickletRGBLED bricklet_rgb_led
|
74
|
+
272 RGB LED Matrix Bricklet Tinkerforge::BrickletRGBLEDMatrix bricklet_rgb_led_matrix
|
75
|
+
276 GPS Bricklet 2.0 Tinkerforge::BrickletGPSV2 bricklet_gps_v2
|
76
|
+
277 RS485 Bricklet Tinkerforge::BrickletRS485 bricklet_rs485
|
77
|
+
278 Thermal Imaging Bricklet Tinkerforge::BrickletThermalImaging bricklet_thermal_imaging
|
78
|
+
279 XMC1400 Breakout Bricklet Tinkerforge::BrickletXMC1400Breakout bricklet_xmc1400_breakout
|
79
|
+
282 RGB LED Button Bricklet Tinkerforge::BrickletRGBLEDButton bricklet_rgb_led_button
|
80
|
+
283 Humidity Bricklet 2.0 Tinkerforge::BrickletHumidityV2 bricklet_humidity_v2
|
81
|
+
284 Industrial Dual Relay Bricklet Tinkerforge::BrickletIndustrialDualRelay bricklet_industrial_dual_relay
|
82
|
+
285 DMX Bricklet Tinkerforge::BrickletDMX bricklet_dmx
|
83
|
+
286 NFC Bricklet Tinkerforge::BrickletNFC bricklet_nfc
|
84
|
+
288 Outdoor Weather Bricklet Tinkerforge::BrickletOutdoorWeather bricklet_outdoor_weather
|
85
|
+
289 Remote Switch Bricklet 2.0 Tinkerforge::BrickletRemoteSwitchV2 bricklet_remote_switch_v2
|
86
|
+
290 Sound Pressure Level Bricklet Tinkerforge::BrickletSoundPressureLevel bricklet_sound_pressure_level
|
87
|
+
291 Temperature IR Bricklet 2.0 Tinkerforge::BrickletTemperatureIRV2 bricklet_temperature_ir_v2
|
88
|
+
292 Motion Detector Bricklet 2.0 Tinkerforge::BrickletMotionDetectorV2 bricklet_motion_detector_v2
|
89
|
+
293 Industrial Counter Bricklet Tinkerforge::BrickletIndustrialCounter bricklet_industrial_counter
|
90
|
+
294 Rotary Encoder Bricklet 2.0 Tinkerforge::BrickletRotaryEncoderV2 bricklet_rotary_encoder_v2
|
91
|
+
295 Analog In Bricklet 3.0 Tinkerforge::BrickletAnalogInV3 bricklet_analog_in_v3
|
92
|
+
296 Solid State Relay Bricklet 2.0 Tinkerforge::BrickletSolidStateRelayV2 bricklet_solid_state_relay_v2
|
93
|
+
297 Air Quality Bricklet Tinkerforge::BrickletAirQuality bricklet_air_quality
|
94
|
+
298 LCD 128x64 Bricklet Tinkerforge::BrickletLCD128x64 bricklet_lcd_128x64
|
95
|
+
299 Distance US Bricklet 2.0 Tinkerforge::BrickletDistanceUSV2 bricklet_distance_us_v2
|
96
|
+
2100 Industrial Digital In 4 Bricklet 2.0 Tinkerforge::BrickletIndustrialDigitalIn4V2 bricklet_industrial_digital_in_4_v2
|
97
|
+
2101 PTC Bricklet 2.0 Tinkerforge::BrickletPTCV2 bricklet_ptc_v2
|
98
|
+
2102 Industrial Quad Relay Bricklet 2.0 Tinkerforge::BrickletIndustrialQuadRelayV2 bricklet_industrial_quad_relay_v2
|
99
|
+
2103 LED Strip Bricklet 2.0 Tinkerforge::BrickletLEDStripV2 bricklet_led_strip_v2
|
100
|
+
2104 Load Cell Bricklet 2.0 Tinkerforge::BrickletLoadCellV2 bricklet_load_cell_v2
|
101
|
+
2105 Voltage/Current Bricklet 2.0 Tinkerforge::BrickletVoltageCurrentV2 bricklet_voltage_current_v2
|
102
|
+
2106 Real-Time Clock Bricklet 2.0 Tinkerforge::BrickletRealTimeClockV2 bricklet_real_time_clock_v2
|
103
|
+
2107 CAN Bricklet 2.0 Tinkerforge::BrickletCANV2 bricklet_can_v2
|
104
|
+
2108 RS232 Bricklet 2.0 Tinkerforge::BrickletRS232V2 bricklet_rs232_v2
|
105
|
+
2109 Thermocouple Bricklet 2.0 Tinkerforge::BrickletThermocoupleV2 bricklet_thermocouple_v2
|
106
|
+
2110 Particulate Matter Bricklet Tinkerforge::BrickletParticulateMatter bricklet_particulate_matter
|
107
|
+
2111 IO-4 Bricklet 2.0 Tinkerforge::BrickletIO4V2 bricklet_io4_v2
|
108
|
+
2112 OLED 128x64 Bricklet 2.0 Tinkerforge::BrickletOLED128x64V2 bricklet_oled_128x64_v2
|
109
|
+
2113 Temperature Bricklet 2.0 Tinkerforge::BrickletTemperatureV2 bricklet_temperature_v2
|
110
|
+
2114 IO-16 Bricklet 2.0 Tinkerforge::BrickletIO16V2 bricklet_io16_v2
|
111
|
+
2115 Analog Out Bricklet 3.0 Tinkerforge::BrickletAnalogOutV3 bricklet_analog_out_v3
|
112
|
+
2116 Industrial Analog Out Bricklet 2.0 Tinkerforge::BrickletIndustrialAnalogOutV2 bricklet_industrial_analog_out_v2
|
113
|
+
2117 Barometer Bricklet 2.0 Tinkerforge::BrickletBarometerV2 bricklet_barometer_v2
|
114
|
+
2118 UV Light Bricklet 2.0 Tinkerforge::BrickletUVLightV2 bricklet_uv_light_v2
|
115
|
+
2119 Dual Button Bricklet 2.0 Tinkerforge::BrickletDualButtonV2 bricklet_dual_button_v2
|
116
|
+
2120 Industrial Dual 0-20mA Bricklet 2.0 Tinkerforge::BrickletIndustrialDual020mAV2 bricklet_industrial_dual_0_20ma_v2
|
117
|
+
2121 Industrial Dual Analog In Bricklet 2.0 Tinkerforge::BrickletIndustrialDualAnalogInV2 bricklet_industrial_dual_analog_in_v2
|
118
|
+
2122 Isolator Bricklet Tinkerforge::BrickletIsolator bricklet_isolator
|
119
|
+
2123 One Wire Bricklet Tinkerforge::BrickletOneWire bricklet_one_wire
|
120
|
+
2124 Industrial Digital Out 4 Bricklet 2.0 Tinkerforge::BrickletIndustrialDigitalOut4V2 bricklet_industrial_digital_out_4_v2
|
121
|
+
2125 Distance IR Bricklet 2.0 Tinkerforge::BrickletDistanceIRV2 bricklet_distance_ir_v2
|
122
|
+
2127 RGB LED Bricklet 2.0 Tinkerforge::BrickletRGBLEDV2 bricklet_rgb_led_v2
|
123
|
+
2128 Color Bricklet 2.0 Tinkerforge::BrickletColorV2 bricklet_color_v2
|
124
|
+
2129 Multi Touch Bricklet 2.0 Tinkerforge::BrickletMultiTouchV2 bricklet_multi_touch_v2
|
125
|
+
2130 Accelerometer Bricklet 2.0 Tinkerforge::BrickletAccelerometerV2 bricklet_accelerometer_v2
|
126
|
+
2131 Ambient Light Bricklet 3.0 Tinkerforge::BrickletAmbientLightV3 bricklet_ambient_light_v3
|
127
|
+
2132 Hall Effect Bricklet 2.0 Tinkerforge::BrickletHallEffectV2 bricklet_hall_effect_v2
|
128
|
+
2137 Segment Display 4x7 Bricklet 2.0 Tinkerforge::BrickletSegmentDisplay4x7V2 bricklet_segment_display_4x7_v2
|
129
|
+
2138 Joystick Bricklet 2.0 Tinkerforge::BrickletJoystickV2 bricklet_joystick_v2
|
130
|
+
2139 Linear Poti Bricklet 2.0 Tinkerforge::BrickletLinearPotiV2 bricklet_linear_poti_v2
|
131
|
+
2140 Rotary Poti Bricklet 2.0 Tinkerforge::BrickletRotaryPotiV2 bricklet_rotary_poti_v2
|
132
|
+
2144 Laser Range Finder Bricklet 2.0 Tinkerforge::BrickletLaserRangeFinderV2 bricklet_laser_range_finder_v2
|
133
|
+
2145 Piezo Speaker Bricklet 2.0 Tinkerforge::BrickletPiezoSpeakerV2 bricklet_piezo_speaker_v2
|
134
|
+
2146 E-Paper 296x128 Bricklet Tinkerforge::BrickletEPaper296x128 bricklet_e_paper_296x128
|
135
|
+
2147 CO2 Bricklet 2.0 Tinkerforge::BrickletCO2V2 bricklet_co2_v2
|
136
|
+
2152 Energy Monitor Bricklet Tinkerforge::BrickletEnergyMonitor bricklet_energy_monitor
|
137
|
+
2153 Compass Bricklet Tinkerforge::BrickletCompass bricklet_compass
|
138
|
+
2161 IMU Bricklet 3.0 Tinkerforge::BrickletIMUV3 bricklet_imu_v3
|
139
|
+
2162 Industrial Dual AC Relay Bricklet Tinkerforge::BrickletIndustrialDualACRelay bricklet_industrial_dual_ac_relay
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'tinkerforge/ip_connection'
|
2
|
+
|
3
|
+
module Tinkerforge
|
4
|
+
|
5
|
+
class IPConnection
|
6
|
+
|
7
|
+
# Returns the host for the IP Connection object.
|
8
|
+
attr_reader :host
|
9
|
+
|
10
|
+
# Returns the port for the IP Connection object.
|
11
|
+
attr_reader :port
|
12
|
+
|
13
|
+
# Returns a programmer-friendly representation of the object.
|
14
|
+
def inspect
|
15
|
+
"%s (%s:%s)" % [self.class, host, port]
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns a Tinkerforge::DeviceCollection with devices discovered for this IP Connection.
|
19
|
+
#
|
20
|
+
# Discovery may take a few seconds, but will return a Tinkerforge::DeviceCollection immediately.
|
21
|
+
#
|
22
|
+
# It is therefore a good idea to store the result in a variable.
|
23
|
+
# This variable will be filled with devices as they are found. See examples.
|
24
|
+
#
|
25
|
+
# @example Using Tinkerforge.connect
|
26
|
+
# my_devices = Tinkerforge.connect.discover
|
27
|
+
#
|
28
|
+
# @example Classic
|
29
|
+
# ipcon = Tinkerforge::IPConnection.new
|
30
|
+
# ipcon.connect 'localhost', 4223
|
31
|
+
# my_devices = ipcon.discover
|
32
|
+
def discover
|
33
|
+
list = Tinkerforge::DeviceCollection.new
|
34
|
+
self.register_callback(CALLBACK_ENUMERATE) do |*args|
|
35
|
+
case args[6]
|
36
|
+
|
37
|
+
when 0, 1 # Available or Connected
|
38
|
+
info = Tinkerforge.device_info args[5]
|
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
|
44
|
+
end
|
45
|
+
|
46
|
+
when 2 # Disconnected
|
47
|
+
list[args.first] = nil
|
48
|
+
|
49
|
+
else
|
50
|
+
raise "Unknown Enumeration Type: #{args[6]}"
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
self.enumerate
|
55
|
+
list
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
# Creates an IP Connection object connected to the given host and port.
|
61
|
+
#
|
62
|
+
# If no host and port are specified, uses the TINKERFORGE_HOST and TINKERFORGE_PORT environment variables, when defined.
|
63
|
+
# Otherwise defaults to 'localhost' and port 4223.
|
64
|
+
def self.connect(host=nil, port=nil)
|
65
|
+
ipcon = IPConnection.new
|
66
|
+
ipcon.connect(
|
67
|
+
( host || ENV['TINKERFORGE_HOST'] || 'localhost' ),
|
68
|
+
( port || ENV['TINKERFORGE_PORT'] || 4223 )
|
69
|
+
)
|
70
|
+
ipcon
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'tinkerforge/ip_connection'
|
2
|
+
|
3
|
+
module Tinkerforge
|
4
|
+
|
5
|
+
# Returns the directory where Tinkerforge bindings appear to be installed.
|
6
|
+
def self.lib_dir
|
7
|
+
File.dirname File.dirname Device.instance_method('uid').source_location.first
|
8
|
+
end
|
9
|
+
|
10
|
+
# Attempts to load all files that are part of Tinkerforge. Returns a list of files loaded.
|
11
|
+
def self.require_everything
|
12
|
+
Dir.glob(File.join lib_dir, 'tinkerforge', '*.rb').map do |file|
|
13
|
+
require(file) ? file : nil
|
14
|
+
end.compact
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'tinkerforge/version'
|
2
|
+
|
3
|
+
module Tinkerforge
|
4
|
+
|
5
|
+
# Tinderfridge version.
|
6
|
+
TINDERFRIDGE_VERSION = '0.1.0'
|
7
|
+
|
8
|
+
# About Tinkerforge & Tinderfridge.
|
9
|
+
def self.about
|
10
|
+
"Tinkerforge #{VERSION} (with Tinderfridge #{TINDERFRIDGE_VERSION})"
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tinderfridge
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- lllist.eu
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-12-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tinkerforge
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.1.27
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.1.27
|
27
|
+
description:
|
28
|
+
email:
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/tinderfridge.rb
|
34
|
+
- lib/tinderfridge/device.rb
|
35
|
+
- lib/tinderfridge/device_collection.rb
|
36
|
+
- lib/tinderfridge/device_info.rb
|
37
|
+
- lib/tinderfridge/device_info.txt
|
38
|
+
- lib/tinderfridge/ip_connection.rb
|
39
|
+
- lib/tinderfridge/tinkerforge.rb
|
40
|
+
- lib/tinderfridge/version.rb
|
41
|
+
homepage: https://github.com/lllisteu/tinderfridge
|
42
|
+
licenses:
|
43
|
+
- CC0-1.0
|
44
|
+
metadata:
|
45
|
+
homepage_uri: https://github.com/lllisteu/tinderfridge
|
46
|
+
changelog_uri: https://github.com/lllisteu/tinderfridge/blob/master/History.md
|
47
|
+
documentation_uri: https://www.rubydoc.info/gems/tinderfridge
|
48
|
+
post_install_message:
|
49
|
+
rdoc_options: []
|
50
|
+
require_paths:
|
51
|
+
- lib
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 2.5.0
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
requirements: []
|
63
|
+
rubygems_version: 3.1.2
|
64
|
+
signing_key:
|
65
|
+
specification_version: 4
|
66
|
+
summary: Extending Tinkerforge in fun and useful ways.
|
67
|
+
test_files: []
|