node-red-contrib-periph-pressure 1.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.
package/README.md ADDED
@@ -0,0 +1,27 @@
1
+ # node-red-contrib-periph-pressure
2
+
3
+ Node-RED nodes for pressure sensor chips — part of the [Periph](https://github.com/tuhde/Periph) library.
4
+
5
+ ## Install
6
+
7
+ Open Node-RED, go to **Manage Palette → Install** and search for `node-red-contrib-periph-pressure`.
8
+
9
+ Or from the command line in your Node-RED user directory:
10
+
11
+ ```sh
12
+ npm install node-red-contrib-periph-pressure
13
+ ```
14
+
15
+ ## Nodes
16
+
17
+ | Node | Kind | Description |
18
+ |------|------|-------------|
19
+ | `bmp180-device` | config | I²C bus for a BMP180 |
20
+ | `periph-bmp180` | input | Read temperature and pressure from a BMP180 |
21
+ | `bmp280-device` | config | I²C bus for a BMP280 |
22
+ | `periph-bmp280` | input | Read temperature and pressure from a BMP280 |
23
+
24
+ ## Links
25
+
26
+ - [GitHub](https://github.com/tuhde/Periph)
27
+ - [periph JS driver](https://www.npmjs.com/package/periph)
@@ -0,0 +1,66 @@
1
+ [
2
+ {
3
+ "id": "bmp180-device-1",
4
+ "type": "bmp180-device",
5
+ "name": "BMP180 @ i2c-1",
6
+ "bus": "1",
7
+ "oss": "0"
8
+ },
9
+ {
10
+ "id": "bmp180-read-1",
11
+ "type": "periph-bmp180",
12
+ "name": "BMP180",
13
+ "device": "bmp180-device-1",
14
+ "seaLevelHpa": "1013.25",
15
+ "wires": [["debug-1"]]
16
+ },
17
+ {
18
+ "id": "inject-timer-1",
19
+ "type": "inject",
20
+ "name": "Every 5 seconds",
21
+ "topic": "",
22
+ "payload": "",
23
+ "payloadType": "date",
24
+ "repeat": "5",
25
+ "crontab": "",
26
+ "onceDelay": "0.1",
27
+ "wires": [["bmp180-read-1"]]
28
+ },
29
+ {
30
+ "id": "debug-1",
31
+ "type": "debug",
32
+ "name": "Debug output",
33
+ "active": true,
34
+ "tosideuit": false,
35
+ "console": "false",
36
+ "tostatus": "false",
37
+ "complete": "payload",
38
+ "targetType": "msg",
39
+ "x": 480,
40
+ "y": 200,
41
+ "wires": []
42
+ },
43
+ {
44
+ "id": "calibrate-here",
45
+ "type": "inject",
46
+ "name": "Calibrate to here",
47
+ "topic": "",
48
+ "payload": "",
49
+ "payloadType": "date",
50
+ "repeat": "0",
51
+ "crontab": "",
52
+ "onceDelay": "0.1",
53
+ "wires": [["calibrate-function-1"]]
54
+ },
55
+ {
56
+ "id": "calibrate-function-1",
57
+ "type": "function",
58
+ "name": "Recompute sea-level",
59
+ "func": "const hpa = flow.get('bmp180-sea-level') || 1013.25;\nconst alt = msg.payload.altitude;\nconst newHpa = msg.payload.pressure / Math.pow(1 - alt / 44330, 5.255);\nflow.set('bmp180-sea-level', newHpa);\nnode.status({text: 'sea-level=' + newHpa.toFixed(1) + ' hPa'});\nreturn msg;",
60
+ "outputs": "1",
61
+ "noerr": "0",
62
+ "x": 480,
63
+ "y": 320,
64
+ "wires": [["bmp180-read-1"]]
65
+ }
66
+ ]
@@ -0,0 +1,130 @@
1
+ [
2
+ {
3
+ "id": "bmp280-device-1",
4
+ "type": "bmp280-device",
5
+ "name": "BMP280 @ i2c-1",
6
+ "bus": "1",
7
+ "addr": "0x76",
8
+ "osrsT": "1",
9
+ "osrsP": "1",
10
+ "mode": "1",
11
+ "filter": "0",
12
+ "tSb": "0"
13
+ },
14
+ {
15
+ "id": "bmp280-read-1",
16
+ "type": "periph-bmp280",
17
+ "name": "BMP280 Weather",
18
+ "device": "bmp280-device-1",
19
+ "seaLevelHpa": "1013.25",
20
+ "wires": [["debug-1", "chart-temp-1", "chart-pres-1", "chart-alt-1"]]
21
+ },
22
+ {
23
+ "id": "inject-timer-1",
24
+ "type": "inject",
25
+ "name": "Every 5 seconds",
26
+ "topic": "",
27
+ "payload": "",
28
+ "payloadType": "date",
29
+ "repeat": "5",
30
+ "crontab": "",
31
+ "onceDelay": "0.1",
32
+ "wires": [["bmp280-read-1"]]
33
+ },
34
+ {
35
+ "id": "debug-1",
36
+ "type": "debug",
37
+ "name": "Debug output",
38
+ "active": true,
39
+ "tosideuit": false,
40
+ "console": "false",
41
+ "tostatus": "false",
42
+ "complete": "payload",
43
+ "targetType": "msg",
44
+ "x": 480,
45
+ "y": 200,
46
+ "wires": []
47
+ },
48
+ {
49
+ "id": "chart-temp-1",
50
+ "type": "ui_chart",
51
+ "name": "Temperature",
52
+ "group": "bmp280-group-1",
53
+ "order": 1,
54
+ "width": 6,
55
+ "height": 4,
56
+ "label": "Temperature (°C)",
57
+ "chartType": "line",
58
+ "x": 480,
59
+ "y": 260,
60
+ "wires": []
61
+ },
62
+ {
63
+ "id": "chart-pres-1",
64
+ "type": "ui_chart",
65
+ "name": "Pressure",
66
+ "group": "bmp280-group-1",
67
+ "order": 2,
68
+ "width": 6,
69
+ "height": 4,
70
+ "label": "Pressure (hPa)",
71
+ "chartType": "line",
72
+ "x": 480,
73
+ "y": 320,
74
+ "wires": []
75
+ },
76
+ {
77
+ "id": "chart-alt-1",
78
+ "type": "ui_chart",
79
+ "name": "Altitude",
80
+ "group": "bmp280-group-1",
81
+ "order": 3,
82
+ "width": 6,
83
+ "height": 4,
84
+ "label": "Altitude (m)",
85
+ "chartType": "line",
86
+ "x": 480,
87
+ "y": 380,
88
+ "wires": []
89
+ },
90
+ {
91
+ "id": "inject-indoor-1",
92
+ "type": "inject",
93
+ "name": "Switch to indoor navigation",
94
+ "topic": "",
95
+ "payload": "",
96
+ "payloadType": "date",
97
+ "repeat": "0",
98
+ "crontab": "",
99
+ "onceDelay": "0.1",
100
+ "wires": [["reconfig-function-1"]]
101
+ },
102
+ {
103
+ "id": "reconfig-function-1",
104
+ "type": "function",
105
+ "name": "Reconfigure for indoor nav",
106
+ "func": "var device = RED.nodes.getNode('bmp280-device-1');\nif (device && device.driver) {\n device.driver.configure(2, 5, 3, 4, 0);\n node.status({text: 'indoor nav mode: ×16/×2, filter=16, normal'});\n}\nreturn msg;",
107
+ "outputs": 1,
108
+ "noerr": 0,
109
+ "x": 480,
110
+ "y": 440,
111
+ "wires": [["bmp280-read-1"]]
112
+ },
113
+ {
114
+ "id": "bmp280-group-1",
115
+ "type": "ui_group",
116
+ "name": "BMP280 Weather Station",
117
+ "tab": "bmp280-tab-1",
118
+ "order": 1,
119
+ "disp": true,
120
+ "width": 12
121
+ },
122
+ {
123
+ "id": "bmp280-tab-1",
124
+ "type": "ui_tab",
125
+ "name": "BMP280 Demo",
126
+ "icon": "dashboard",
127
+ "order": 1,
128
+ "info": "This flow demonstrates the BMP280 barometric pressure sensor in two modes.\n\n**Weather monitoring** (default): forced mode, ×1/×1 oversampling, filter off — the lowest power setting from BMP280 datasheet Table 7. An inject node fires every 5 seconds, reading temperature, pressure, and computed altitude. Charts show slow ambient drift.\n\n**Indoor navigation**: click the \"Switch to indoor navigation\" button to reconfigure for normal mode at ~26 Hz with ×16/×2 oversampling and IIR coefficient 16. The altitude chart noise drops from ~50 cm to a few cm as the IIR filter converges over ~0.85 seconds.\n\nAdjust the sea-level reference pressure in the BMP280 read node to calibrate altitude to your location."
129
+ }
130
+ ]
package/index.js ADDED
@@ -0,0 +1,11 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ module.exports = function(RED) {
5
+ const nodesDir = path.join(__dirname, 'nodes');
6
+ if (!fs.existsSync(nodesDir)) return;
7
+ fs.readdirSync(nodesDir).forEach(function(chip) {
8
+ const nodeFile = path.join(nodesDir, chip, chip + '.js');
9
+ if (fs.existsSync(nodeFile)) require(nodeFile)(RED);
10
+ });
11
+ };
@@ -0,0 +1,93 @@
1
+ <!-- Config node: one instance per physical device -->
2
+ <script type="text/javascript">
3
+ RED.nodes.registerType('bmp180-device', {
4
+ category: 'config',
5
+ defaults: {
6
+ name: { value: '' },
7
+ bus: { value: '1', required: true, validate: RED.validators.number() },
8
+ oss: { value: '0', required: true, validate: RED.validators.number() }
9
+ },
10
+ label: function() {
11
+ return this.name || ('BMP180 @ 0x77 (bus ' + this.bus + ')');
12
+ }
13
+ });
14
+ </script>
15
+
16
+ <script type="text/html" data-template-name="bmp180-device">
17
+ <div class="form-row">
18
+ <label for="node-config-input-name"><i class="fa fa-tag"></i> Name</label>
19
+ <input type="text" id="node-config-input-name" placeholder="BMP180">
20
+ </div>
21
+ <div class="form-row">
22
+ <label for="node-config-input-bus"><i class="fa fa-microchip"></i> I²C bus</label>
23
+ <input type="number" id="node-config-input-bus" min="0" style="width:80px"> &nbsp;(Linux /dev/i2c-N)
24
+ </div>
25
+ <div class="form-row">
26
+ <label for="node-config-input-oss">Oversampling mode</label>
27
+ <select id="node-config-input-oss" style="width:180px">
28
+ <option value="0">ULP (4.5 ms)</option>
29
+ <option value="1">Standard (7.5 ms)</option>
30
+ <option value="2">High Resolution (13.5 ms)</option>
31
+ <option value="3">Ultra High Resolution (25.5 ms)</option>
32
+ </select>
33
+ </div>
34
+ </script>
35
+
36
+ <!-- Read node: trigger → measurements -->
37
+ <script type="text/javascript">
38
+ RED.nodes.registerType('periph-bmp180', {
39
+ category: 'Peripheral',
40
+ color: '#a6bbcf',
41
+ defaults: {
42
+ name: { value: '' },
43
+ device: { value: '', type: 'bmp180-device', required: true },
44
+ seaLevelHpa: { value: '1013.25' }
45
+ },
46
+ inputs: 1,
47
+ outputs: 1,
48
+ icon: 'font-awesome/fa-tachometer',
49
+ label: function() { return this.name || 'BMP180'; },
50
+ paletteLabel: 'BMP180'
51
+ });
52
+ </script>
53
+
54
+ <script type="text/html" data-template-name="periph-bmp180">
55
+ <div class="form-row">
56
+ <label for="node-input-device"><i class="fa fa-microchip"></i> Device</label>
57
+ <input type="text" id="node-input-device">
58
+ </div>
59
+ <div class="form-row">
60
+ <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
61
+ <input type="text" id="node-input-name" placeholder="BMP180">
62
+ </div>
63
+ <div class="form-row">
64
+ <label for="node-input-seaLevelHpa">Sea-level pressure (hPa)</label>
65
+ <input type="number" id="node-input-seaLevelHpa" min="800" max="1100" step="0.01" style="width:100px">
66
+ </div>
67
+ </script>
68
+
69
+ <script type="text/html" data-help-name="periph-bmp180">
70
+ <p>Reads bus voltage, load current, and power from an INA219 power monitor.</p>
71
+ <p>Any input message triggers a measurement. The device is configured via a <b>bmp180-device</b> config node.</p>
72
+
73
+ <h3>Inputs</h3>
74
+ <dl class="message-properties">
75
+ <dt>payload <span class="property-type">any</span></dt>
76
+ <dd>Any incoming message triggers a measurement.</dd>
77
+ </dl>
78
+
79
+ <h3>Outputs</h3>
80
+ <dl class="message-properties">
81
+ <dt>payload.temperature <span class="property-type">number</span></dt>
82
+ <dd>Temperature in degrees Celsius.</dd>
83
+ <dt>payload.pressure <span class="property-type">number</span></dt>
84
+ <dd>Pressure in hPa.</dd>
85
+ <dt>payload.altitude <span class="property-type">number</span></dt>
86
+ <dd>Altitude in metres computed from the configured sea-level pressure.</dd>
87
+ </dl>
88
+
89
+ <h3>Configuration</h3>
90
+ <p>Set the I²C bus number and oversampling mode in the device config node.
91
+ The sea-level reference pressure defaults to <code>1013.25</code> hPa and can be
92
+ adjusted in the read node config panel.</p>
93
+ </script>
@@ -0,0 +1,49 @@
1
+ 'use strict';
2
+
3
+ module.exports = function(RED) {
4
+ const { I2CTransport } = require('periph/src/transport/i2c');
5
+ const { BMP180Full } = require('periph/src/chips/pressure/bmp180');
6
+
7
+ function BMP180DeviceNode(config) {
8
+ RED.nodes.createNode(this, config);
9
+ const node = this;
10
+ try {
11
+ const transport = new I2CTransport(parseInt(config.bus), 0x77);
12
+ node.driver = new BMP180Full(transport, parseInt(config.oss) || 0);
13
+ node.transport = transport;
14
+ } catch (e) {
15
+ node.error('BMP180 init failed: ' + e.message);
16
+ }
17
+ node.on('close', function() {
18
+ if (node.transport) node.transport.close();
19
+ });
20
+ }
21
+ RED.nodes.registerType('bmp180-device', BMP180DeviceNode);
22
+
23
+ function BMP180ReadNode(config) {
24
+ RED.nodes.createNode(this, config);
25
+ const node = this;
26
+ node.device = RED.nodes.getNode(config.device);
27
+
28
+ node.on('input', function(msg, send, done) {
29
+ if (!node.device || !node.device.driver) {
30
+ node.error('No BMP180 device configured', msg);
31
+ done();
32
+ return;
33
+ }
34
+ try {
35
+ const d = node.device.driver;
36
+ msg.payload = {
37
+ temperature: d.temperature(),
38
+ pressure: d.pressure(),
39
+ altitude: d.altitude(parseFloat(config.seaLevelHpa) || 1013.25)
40
+ };
41
+ send(msg);
42
+ done();
43
+ } catch (e) {
44
+ done(e);
45
+ }
46
+ });
47
+ }
48
+ RED.nodes.registerType('periph-bmp180', BMP180ReadNode);
49
+ };
@@ -0,0 +1,150 @@
1
+ <!-- Config node: one instance per physical device -->
2
+ <script type="text/javascript">
3
+ RED.nodes.registerType('bmp280-device', {
4
+ category: 'config',
5
+ defaults: {
6
+ name: { value: '' },
7
+ bus: { value: '1', required: true, validate: RED.validators.number() },
8
+ addr: { value: '0x76', required: true },
9
+ osrsT: { value: '1', required: true, validate: RED.validators.number() },
10
+ osrsP: { value: '1', required: true, validate: RED.validators.number() },
11
+ mode: { value: '1', required: true, validate: RED.validators.number() },
12
+ filter: { value: '0', required: true, validate: RED.validators.number() },
13
+ tSb: { value: '0', required: true, validate: RED.validators.number() }
14
+ },
15
+ label: function() {
16
+ return this.name || ('BMP280 @ ' + this.addr + ' (bus ' + this.bus + ')');
17
+ }
18
+ });
19
+ </script>
20
+
21
+ <script type="text/html" data-template-name="bmp280-device">
22
+ <div class="form-row">
23
+ <label for="node-config-input-name"><i class="fa fa-tag"></i> Name</label>
24
+ <input type="text" id="node-config-input-name" placeholder="BMP280">
25
+ </div>
26
+ <div class="form-row">
27
+ <label for="node-config-input-bus"><i class="fa fa-microchip"></i> I²C bus</label>
28
+ <input type="number" id="node-config-input-bus" min="0" style="width:80px"> &nbsp;(Linux /dev/i2c-N)
29
+ </div>
30
+ <div class="form-row">
31
+ <label for="node-config-input-addr"><i class="fa fa-microchip"></i> I²C address</label>
32
+ <select id="node-config-input-addr" style="width:100px">
33
+ <option value="0x76">0x76 (SDO=GND)</option>
34
+ <option value="0x77">0x77 (SDO=VDDIO)</option>
35
+ </select>
36
+ </div>
37
+ <div class="form-row">
38
+ <label for="node-config-input-osrsT">Temperature oversampling</label>
39
+ <select id="node-config-input-osrsT" style="width:180px">
40
+ <option value="0">Skip</option>
41
+ <option value="1" selected>×1</option>
42
+ <option value="2">×2</option>
43
+ <option value="3">×4</option>
44
+ <option value="4">×8</option>
45
+ <option value="5">×16</option>
46
+ </select>
47
+ </div>
48
+ <div class="form-row">
49
+ <label for="node-config-input-osrsP">Pressure oversampling</label>
50
+ <select id="node-config-input-osrsP" style="width:180px">
51
+ <option value="0">Skip</option>
52
+ <option value="1" selected>×1</option>
53
+ <option value="2">×2</option>
54
+ <option value="3">×4</option>
55
+ <option value="4">×8</option>
56
+ <option value="5">×16</option>
57
+ </select>
58
+ </div>
59
+ <div class="form-row">
60
+ <label for="node-config-input-mode">Power mode</label>
61
+ <select id="node-config-input-mode" style="width:180px">
62
+ <option value="1" selected>Forced</option>
63
+ <option value="3">Normal</option>
64
+ </select>
65
+ </div>
66
+ <div class="form-row">
67
+ <label for="node-config-input-filter">IIR filter coefficient</label>
68
+ <select id="node-config-input-filter" style="width:180px">
69
+ <option value="0" selected>Off</option>
70
+ <option value="1">2</option>
71
+ <option value="2">4</option>
72
+ <option value="3">8</option>
73
+ <option value="4">16</option>
74
+ </select>
75
+ </div>
76
+ <div class="form-row">
77
+ <label for="node-config-input-tSb">Standby time (normal mode)</label>
78
+ <select id="node-config-input-tSb" style="width:180px">
79
+ <option value="0" selected>0.5 ms</option>
80
+ <option value="1">62.5 ms</option>
81
+ <option value="2">125 ms</option>
82
+ <option value="3">250 ms</option>
83
+ <option value="4">500 ms</option>
84
+ <option value="5">1000 ms</option>
85
+ <option value="6">2000 ms</option>
86
+ <option value="7">4000 ms</option>
87
+ </select>
88
+ </div>
89
+ </script>
90
+
91
+ <!-- Read node: trigger → measurements -->
92
+ <script type="text/javascript">
93
+ RED.nodes.registerType('periph-bmp280', {
94
+ category: 'Peripheral',
95
+ color: '#a6bbcf',
96
+ defaults: {
97
+ name: { value: '' },
98
+ device: { value: '', type: 'bmp280-device', required: true },
99
+ seaLevelHpa: { value: '1013.25' }
100
+ },
101
+ inputs: 1,
102
+ outputs: 1,
103
+ icon: 'font-awesome/fa-tachometer',
104
+ label: function() { return this.name || 'BMP280'; },
105
+ paletteLabel: 'BMP280'
106
+ });
107
+ </script>
108
+
109
+ <script type="text/html" data-template-name="periph-bmp280">
110
+ <div class="form-row">
111
+ <label for="node-input-device"><i class="fa fa-microchip"></i> Device</label>
112
+ <input type="text" id="node-input-device">
113
+ </div>
114
+ <div class="form-row">
115
+ <label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
116
+ <input type="text" id="node-input-name" placeholder="BMP280">
117
+ </div>
118
+ <div class="form-row">
119
+ <label for="node-input-seaLevelHpa">Sea-level pressure (hPa)</label>
120
+ <input type="number" id="node-input-seaLevelHpa" min="800" max="1100" step="0.01" style="width:100px">
121
+ </div>
122
+ </script>
123
+
124
+ <script type="text/html" data-help-name="periph-bmp280">
125
+ <p>Reads temperature, pressure, and altitude from a BMP280 barometric pressure sensor.</p>
126
+ <p>Any input message triggers a measurement. The device is configured via a <b>bmp280-device</b> config node.</p>
127
+
128
+ <h3>Inputs</h3>
129
+ <dl class="message-properties">
130
+ <dt>payload <span class="property-type">any</span></dt>
131
+ <dd>Any incoming message triggers a measurement.</dd>
132
+ </dl>
133
+
134
+ <h3>Outputs</h3>
135
+ <dl class="message-properties">
136
+ <dt>payload.temperature <span class="property-type">number</span></dt>
137
+ <dd>Temperature in degrees Celsius.</dd>
138
+ <dt>payload.pressure <span class="property-type">number</span></dt>
139
+ <dd>Pressure in hPa.</dd>
140
+ <dt>payload.altitude <span class="property-type">number</span></dt>
141
+ <dd>Altitude in metres computed from the configured sea-level pressure.</dd>
142
+ </dl>
143
+
144
+ <h3>Configuration</h3>
145
+ <p>Set the I²C bus number, I²C address (<code>0x76</code> or <code>0x77</code>),
146
+ temperature and pressure oversampling, power mode (Forced or Normal),
147
+ IIR filter coefficient, and standby time in the device config node.
148
+ The sea-level reference pressure defaults to <code>1013.25</code> hPa and can be
149
+ adjusted in the read node config panel.</p>
150
+ </script>
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ module.exports = function(RED) {
4
+ const { I2CTransport } = require('periph/src/transport/i2c');
5
+ const { BMP280Full } = require('periph/src/chips/pressure/bmp280');
6
+
7
+ function BMP280DeviceNode(config) {
8
+ RED.nodes.createNode(this, config);
9
+ const node = this;
10
+ try {
11
+ const addr = parseInt(config.addr) || 0x76;
12
+ const transport = new I2CTransport(parseInt(config.bus), addr);
13
+ node.driver = new BMP280Full(transport);
14
+ node.driver.configure(
15
+ parseInt(config.osrsT) || 1,
16
+ parseInt(config.osrsP) || 1,
17
+ parseInt(config.mode) || 1,
18
+ parseInt(config.filter) || 0,
19
+ parseInt(config.tSb) || 0
20
+ );
21
+ node.transport = transport;
22
+ } catch (e) {
23
+ node.error('BMP280 init failed: ' + e.message);
24
+ }
25
+ node.on('close', function() {
26
+ if (node.transport) node.transport.close();
27
+ });
28
+ }
29
+ RED.nodes.registerType('bmp280-device', BMP280DeviceNode);
30
+
31
+ function BMP280ReadNode(config) {
32
+ RED.nodes.createNode(this, config);
33
+ const node = this;
34
+ node.device = RED.nodes.getNode(config.device);
35
+
36
+ node.on('input', function(msg, send, done) {
37
+ if (!node.device || !node.device.driver) {
38
+ node.error('No BMP280 device configured', msg);
39
+ done();
40
+ return;
41
+ }
42
+ try {
43
+ const d = node.device.driver;
44
+ msg.payload = {
45
+ temperature: d.temperature(),
46
+ pressure: d.pressure(),
47
+ altitude: d.altitude(parseFloat(config.seaLevelHpa) || 1013.25)
48
+ };
49
+ send(msg);
50
+ done();
51
+ } catch (e) {
52
+ done(e);
53
+ }
54
+ });
55
+ }
56
+ RED.nodes.registerType('periph-bmp280', BMP280ReadNode);
57
+ };
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "node-red-contrib-periph-pressure",
3
+ "version": "1.1.0",
4
+ "description": "Node-RED nodes for pressure sensor chips",
5
+ "keywords": [
6
+ "node-red",
7
+ "pressure",
8
+ "i2c",
9
+ "spi",
10
+ "sensor",
11
+ "peripheral"
12
+ ],
13
+ "node-red": {
14
+ "nodes": {
15
+ "bmp180": "nodes/bmp180/bmp180.js",
16
+ "bmp280": "nodes/bmp280/bmp280.js"
17
+ }
18
+ },
19
+ "dependencies": {
20
+ "periph": "*"
21
+ },
22
+ "license": "MIT"
23
+ }