Skip to content

Commit 6b48c0b

Browse files
committed
Upgrade to ghcr.io/hassio-addons/base:18.1.1, CHIRPSTACK_VERSION: 4.14.1
1 parent 13f1a21 commit 6b48c0b

5 files changed

Lines changed: 179 additions & 163 deletions

File tree

chirp2mqtt/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
<!-- https://developers.home-assistant.io/docs/add-ons/presentation#keeping-a-changelog -->
22

3+
## 1.1.148
4+
5+
- Upgrade to ghcr.io/hassio-addons/base:18.1.1, CHIRPSTACK_VERSION: 4.14.1
6+
37
## 1.1.147
48

59
- Fixed issue with event/frame appearance in ingress

chirp2mqtt/build.yaml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
build_from:
2-
aarch64: ghcr.io/hassio-addons/base:18.0.3
3-
amd64: ghcr.io/hassio-addons/base:18.0.3
4-
armv7: ghcr.io/hassio-addons/base:18.0.3
2+
aarch64: ghcr.io/hassio-addons/base:18.1.1
3+
amd64: ghcr.io/hassio-addons/base:18.1.1
4+
armv7: ghcr.io/hassio-addons/base:18.1.1
55
args:
6-
CHIRPSTACK_VERSION: 4.13.0
6+
CHIRPSTACK_VERSION: 4.14.1
77
CHIRPSTACK_GATEWAY_BRIDGE_VERSION: 4.0.11
88

99
#cosign:
1010
# identity: https://github.com/home-assistant/docker-base/.*
1111
#labels:
1212
# io.hass.base.name: alpine
1313
# org.opencontainers.image.source: https://github.com/home-assistant/docker-base
14+
# https://github.com/hassio-addons/addon-base

chirp2mqtt/config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config
22
name: Chirp2MQTT
3-
version: "1.1.147"
3+
version: "1.1.148"
44
slug: chirp2mqtt
55
description: HA add-on to incorporate ChirpStack LoRaWAN devices into MQTT integration
66
arch:
Lines changed: 165 additions & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -1,160 +1,169 @@
1-
function getHaDeviceInfo() {
2-
return {
3-
device: {
4-
manufacturer: "Hager Group",
5-
model: "TG563A Smoke Detector",
6-
},
7-
entities: {
8-
temperature:{
9-
entity_conf: {
10-
value_template: "{{ value_json.object.temperature | float }}",
11-
device_class: "temperature",
12-
unit_of_measurement: "°C"
13-
}
14-
},
15-
minimumTemperature:{
16-
entity_conf: {
17-
value_template: "{{ value_json.object.minimumTemperature | float }}",
18-
device_class: "temperature",
19-
unit_of_measurement: "°C"
20-
}
21-
},
22-
maximumTemperature:{
23-
entity_conf: {
24-
value_template: "{{ value_json.object.maximumTemperature | float }}",
25-
device_class: "temperature",
26-
unit_of_measurement: "°C"
27-
}
28-
},
29-
batteryLevel:{
30-
entity_conf: {
31-
value_template: "{{ value_json.object.batteryLevel | float }}",
32-
device_class: "voltage",
33-
entity_category: "diagnostic",
34-
unit_of_measurement: "V"
35-
}
36-
},
37-
energyUsage:{
38-
integration: "sensor",
39-
entity_conf: {
40-
value_template: "{{ value_json.object.energyUsage | int }}",
41-
entity_category: "diagnostic",
42-
//device_class: "energy",
43-
unit_of_measurement: "%"
44-
}
45-
},
46-
distanceThreshold:{
47-
entity_conf: {
48-
entity_category: "diagnostic",
49-
value_template: "{{ value_json.object.distanceThreshold | int }}",
50-
device_class: "distance",
51-
unit_of_measurement: "cm"
52-
}
53-
},
54-
smoke:{
55-
integration: "binary_sensor",
56-
entity_conf: {
57-
value_template: "{{ value_json.object.status.smokeAlarm | int }}",
58-
device_class: "smoke",
59-
payload_on: 1,
60-
payload_off: 0
61-
}
62-
},
63-
smokeAlarmTimeCounter:{
64-
entity_conf: {
65-
value_template: "{{ value_json.object.smokeAlarmTimeCounter | int }}",
66-
device_class: "duration",
67-
unit_of_measurement: "min",
68-
}
69-
},
70-
smokeAlarmCounter:{
71-
entity_conf: {
72-
value_template: "{{ value_json.object.smokeAlarmCounter | int }}",
73-
device_class: "volume",
74-
}
75-
},
76-
battery:{
77-
integration: "binary_sensor",
78-
entity_conf: {
79-
value_template: "{{ value_json.object.status.batteryLow | int }}",
80-
entity_category: "diagnostic",
81-
device_class: "battery",
82-
payload_on: 1,
83-
payload_off: 0
84-
}
85-
},
1+
function getHaDeviceInfo() {
2+
return {
3+
device: {
4+
manufacturer: "Hager Group",
5+
model: "TG563A Smoke Detector",
6+
},
7+
entities: {
8+
temperature:{
9+
entity_conf: {
10+
value_template: "{{ value_json.object.temperature | float }}",
11+
device_class: "temperature",
12+
unit_of_measurement: "°C"
13+
}
14+
},
15+
minimumTemperature:{
16+
entity_conf: {
17+
value_template: "{{ value_json.object.minimumTemperature | float }}",
18+
device_class: "temperature",
19+
unit_of_measurement: "°C"
20+
}
21+
},
22+
maximumTemperature:{
23+
entity_conf: {
24+
value_template: "{{ value_json.object.maximumTemperature | float }}",
25+
device_class: "temperature",
26+
unit_of_measurement: "°C"
27+
}
28+
},
29+
batteryLevel:{
30+
entity_conf: {
31+
value_template: "{{ value_json.object.batteryLevel | float }}",
32+
device_class: "voltage",
33+
entity_category: "diagnostic",
34+
unit_of_measurement: "V"
35+
}
36+
},
37+
energyUsage:{
38+
integration: "sensor",
39+
entity_conf: {
40+
value_template: "{{ value_json.object.energyUsage | int }}",
41+
entity_category: "diagnostic",
42+
//device_class: "energy",
43+
unit_of_measurement: "%"
44+
}
45+
},
46+
distanceThreshold:{
47+
entity_conf: {
48+
entity_category: "diagnostic",
49+
value_template: "{{ value_json.object.distanceThreshold | int }}",
50+
device_class: "distance",
51+
unit_of_measurement: "cm"
52+
}
53+
},
54+
smoke:{
55+
integration: "binary_sensor",
56+
entity_conf: {
57+
value_template: "{{ value_json.object.status.smokeAlarm | int }}",
58+
device_class: "smoke",
59+
payload_on: 1,
60+
payload_off: 0
61+
}
62+
},
63+
smokeAlarmTimeCounter:{
64+
entity_conf: {
65+
value_template: "{{ value_json.object.smokeAlarmTimeCounter | int }}",
66+
device_class: "duration",
67+
unit_of_measurement: "min",
68+
}
69+
},
70+
smokeAlarmCounter:{
71+
entity_conf: {
72+
value_template: "{{ value_json.object.smokeAlarmCounter | int }}",
73+
device_class: "volume",
74+
}
75+
},
76+
battery:{
77+
integration: "binary_sensor",
78+
entity_conf: {
79+
value_template: "{{ value_json.object.status.batteryLow | int }}",
80+
entity_category: "diagnostic",
81+
device_class: "battery",
82+
payload_on: 1,
83+
payload_off: 0
84+
}
85+
},
86+
battery:{
87+
data_event: "status",
88+
entity_conf: {
89+
value_template: "{{ value_json.batteryLevel | int }}",
90+
entity_category: "diagnostic",
91+
device_class: "battery",
92+
unit_of_measurement: "%",
93+
}
94+
},
8695
transmissionPeriod:{
87-
integration: "select",
88-
entity_conf: {
89-
value_template: "{{ (value_json.object.configuration.transmissionPeriod | int | string )+ ' h' }}",
96+
integration: "select",
97+
entity_conf: {
98+
value_template: "{{ (value_json.object.configuration.transmissionPeriod | int | string )+ ' h' }}",
99+
command_topic: "{command_topic}",
100+
command_template: '{"devEui":"{dev_eui}","fPort":1,"object":{ "command": "SET_TX_PERIOD", "parameter": {{ this.attributes.options.index(value) }} } }',
101+
options:[ "1 h", "2 h", "4 h", "6 h", "8 h", "12 h", "24 h", "48 h" ] ,
102+
}
103+
},
104+
additionalDataEnabled:{
105+
integration: "switch",
106+
entity_conf: {
107+
value_template: "{{ value_json.object.configuration.additionalDataEnabled | int }}",
90108
command_topic: "{command_topic}",
91-
command_template: '{"devEui":"{dev_eui}","fPort":1,"object":{ "command": "SET_TX_PERIOD", "parameter": {{ this.attributes.options.index(value) }} } }',
92-
options:[ "1 h", "2 h", "4 h", "6 h", "8 h", "12 h", "24 h", "48 h" ] ,
93-
}
94-
},
95-
additionalDataEnabled:{
96-
integration: "switch",
97-
entity_conf: {
98-
value_template: "{{ value_json.object.configuration.additionalDataEnabled | int }}",
99-
command_topic: "{command_topic}",
100-
state_on: 1,
101-
state_off: 0,
102-
//payload_off: '{"devEui":"{dev_eui}","fPort":1,"data":"EA=="}',
103-
payload_on: '{"devEui":"{dev_eui}","fPort":1,"data":"EQ=="}'
104-
}
105-
},
106-
obstructionEventEnabled:{
107-
integration: "switch",
108-
entity_conf: {
109-
value_template: "{{ value_json.object.configuration.obstructionEventEnabled | int }}",
110-
command_topic: "{command_topic}",
111-
state_on: 1,
112-
state_off: 0,
113-
//payload_off: '{"devEui":"{dev_eui}","fPort":1,"data":"QA=="}',
114-
payload_on: '{"devEui":"{dev_eui}","fPort":1,"data":"QQ=="}'
115-
}
116-
},
117-
smokeEventEnabled:{
118-
integration: "switch",
119-
entity_conf: {
120-
value_template: "{{ value_json.object.configuration.smokeEventEnabled | int }}",
121-
command_topic: "{command_topic}",
122-
state_on: 1,
123-
state_off: 0,
124-
//payload_off: '{"devEui":"{dev_eui}","fPort":1,"data":"UA=="}',
125-
payload_on: '{"devEui":"{dev_eui}","fPort":1,"data":"UQ=="}'
126-
}
127-
},
128-
SEND_ADDITIONAL_DATA_IN_NEXT_UPLINK:{
129-
integration: "button",
130-
entity_conf: {
131-
command_topic: "{command_topic}",
132-
payload_press: '{"devEui":"{dev_eui}","fPort":1,"data":"gA=="}'
133-
}
134-
},
135-
resetSmokeEvent:{
136-
integration: "button",
137-
entity_conf: {
138-
command_topic: "{command_topic}",
139-
payload_press: '{"devEui":"{dev_eui}","fPort":1,"data":"UA=="}'
140-
}
141-
},
142-
rssi:{
143-
entity_conf: {
144-
value_template: "{{ value_json.rxInfo[-1].rssi | int }}",
145-
entity_category: "diagnostic",
146-
device_class: "signal_strength",
147-
unit_of_measurement: "dBm",
148-
}
149-
},
150-
snr:{
151-
integration: "sensor",
152-
entity_conf: {
153-
value_template: "{{ value_json.rxInfo[-1].snr | int }}",
154-
entity_category: "diagnostic",
155-
unit_of_measurement: "dB",
109+
state_on: 1,
110+
state_off: 0,
111+
//payload_off: '{"devEui":"{dev_eui}","fPort":1,"data":"EA=="}',
112+
payload_on: '{"devEui":"{dev_eui}","fPort":1,"data":"EQ=="}'
113+
}
114+
},
115+
obstructionEventEnabled:{
116+
integration: "switch",
117+
entity_conf: {
118+
value_template: "{{ value_json.object.configuration.obstructionEventEnabled | int }}",
119+
command_topic: "{command_topic}",
120+
state_on: 1,
121+
state_off: 0,
122+
//payload_off: '{"devEui":"{dev_eui}","fPort":1,"data":"QA=="}',
123+
payload_on: '{"devEui":"{dev_eui}","fPort":1,"data":"QQ=="}'
124+
}
125+
},
126+
smokeEventEnabled:{
127+
integration: "switch",
128+
entity_conf: {
129+
value_template: "{{ value_json.object.configuration.smokeEventEnabled | int }}",
130+
command_topic: "{command_topic}",
131+
state_on: 1,
132+
state_off: 0,
133+
//payload_off: '{"devEui":"{dev_eui}","fPort":1,"data":"UA=="}',
134+
payload_on: '{"devEui":"{dev_eui}","fPort":1,"data":"UQ=="}'
135+
}
136+
},
137+
SEND_ADDITIONAL_DATA_IN_NEXT_UPLINK:{
138+
integration: "button",
139+
entity_conf: {
140+
command_topic: "{command_topic}",
141+
payload_press: '{"devEui":"{dev_eui}","fPort":1,"data":"gA=="}'
142+
}
143+
},
144+
resetSmokeEvent:{
145+
integration: "button",
146+
entity_conf: {
147+
command_topic: "{command_topic}",
148+
payload_press: '{"devEui":"{dev_eui}","fPort":1,"data":"UA=="}'
149+
}
150+
},
151+
rssi:{
152+
entity_conf: {
153+
value_template: "{{ value_json.rxInfo[-1].rssi | int }}",
154+
entity_category: "diagnostic",
155+
device_class: "signal_strength",
156+
unit_of_measurement: "dBm",
157+
}
158+
},
159+
snr:{
160+
integration: "sensor",
161+
entity_conf: {
162+
value_template: "{{ value_json.rxInfo[-1].snr | int }}",
163+
entity_category: "diagnostic",
164+
unit_of_measurement: "dB",
165+
}
156166
}
157167
}
158-
}
159-
};
160-
}
168+
};
169+
}

chirp2mqtt/rootfs/usr/local/bin/ha-proxy.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ const nonGrpcProxy = createProxyMiddleware({
6363
body = body.replaceAll('this.hostname_+"/api.',
6464
'this.hostname_+"'+req.headers['x-ingress-path']+'/api.');
6565
}
66-
66+
6767
if(proxyRes.headers['transfer-encoding'] == 'chunked') {
6868
res.end(new Buffer.from(body));
6969
} else {
@@ -79,7 +79,7 @@ const nonGrpcProxy = createProxyMiddleware({
7979
});
8080

8181
function nonGrpcProxyHandler(req, res, next) {
82-
if(req.headers['content-type'] && (req.headers['content-type'].includes('application/grpc-web-text') || req.headers['content-type'].includes('application/grpc-web-text+proto'))) {
82+
if(req.headers['content-type'] && req.headers['content-type'].toLowerCase().startsWith('application/grpc-web')) {
8383
next();
8484
} else {
8585
return nonGrpcProxy(req, res, next);
@@ -103,6 +103,7 @@ function grpcProxyHandler(req, res, next) {
103103
}
104104

105105
const app = express();
106+
106107
app.use((req, res, next) => {
107108
//Get whitelisted range
108109
let whitelisted_range = ipaddr.parseCIDR(HM_HAPROXY_SRC);
@@ -117,4 +118,5 @@ app.use((req, res, next) => {
117118
res.status(403).end();
118119
}
119120
}, nonGrpcProxyHandler, grpcProxyHandler);
121+
120122
app.listen(8099);

0 commit comments

Comments
 (0)