tinderfridge 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -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: []