tinderfridge 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ 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: []