164 Commits

Author SHA1 Message Date
Orne Brocaar
438d120fb0 Make gateway state consistent + make stats interval configurable.
This:

* Makes the gateway stats interval configurable (default 30 sec)
* Adds GatewayState type (NEVER_SEEN, OFFLINE, ONLINE)
* Adds gateway state to gateway lists
* Fixes dashboard inconsistencies

Closes #76.
2023-01-11 10:51:53 +00:00
dependabot[bot]
85a064ea5b
Bump tokio from 1.21.1 to 1.23.1 (#78)
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.21.1 to 1.23.1.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.21.1...tokio-1.23.1)

---
updated-dependencies:
- dependency-name: tokio
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-11 10:49:32 +00:00
Orne Brocaar
02d66b8a5d Reset registered regions on setup call.
This ensures that each test will reset the regions hashmap.
2023-01-09 13:24:28 +00:00
Orne Brocaar
103e4298fb Add device-profile option to configure region configuration.
By selecting a region configuration, devices using the device-profile
will only stick to the selected region configuration, rather than the
configurations provided by the selected region common-name.

This change also renames the region 'name' option to 'id' in the region
configuration, as well it adds a 'description' to provide a human
readable description, which is used in the drop-down in the UI.

This also fixes the JS API generation. In a previous commit the the
protobuf package was updated, but the latest protobuf compiler no longer
supports generating JS code (this now requires an external plugin). This
has been fixed.

Please note that if you have implemented custom ADR algorithms that are
referring to the 'regionName' key, that you must change this to
'regionConfigId' (see the ADR code example).
2023-01-09 12:04:10 +00:00
Orne Brocaar
6016159c86 Change a.get_ideal_... to Algorithm::get_ideal_...
In the previous change, this method was changed to an associated
function.
2023-01-09 09:49:08 +00:00
Orne Brocaar
0193d783b0 Fix clippy feedback in chirpstack crate. 2023-01-07 20:02:05 +00:00
Orne Brocaar
927a68a436 Bump version to 4.1.3 2022-12-27 11:14:43 +00:00
Orne Brocaar
1813e6a7b2 Fix redis_key implementation. 2022-12-22 21:04:40 +00:00
Orne Brocaar
e2682db6e2 Bump version to 4.1.2 2022-12-16 09:44:47 +00:00
Orne Brocaar
aa9923a60b Handle integration events async of uplink / downlink flow.
Wrapping the handling of integration events in a tokio::spawn should
already have been there, as we do not want to delay the downlink in case
of slow integrations.
2022-12-15 21:33:23 +00:00
Orne Brocaar
fd061d4657 Bump version to 4.1.1 2022-12-13 13:48:42 +00:00
Orne Brocaar
e3fae6260b Make get device-session for phypayload functions update f_cnt.
This fixes the FrmPayload decryption in case of frame-counter rollover
(16lsb) as it was using the f_cnt as sent over the air (16lsb) and not
the full frame-counter (32b).

Before, these functions would return the device-session for the given
uplink PhyPayload (if a matching device-session was found), together
with the full frame-counter. However it would not modify the f_cnt of
the PhyPayload to the full frame-counter making it prone to errors like
the above.
2022-12-13 12:44:00 +00:00
Orne Brocaar
c874c97c96 Bump version to 4.1.0 2022-12-06 09:36:55 +00:00
Orne Brocaar
fe3d6d3fdf Re-generate API + update code. 2022-12-05 11:46:36 +00:00
Orne Brocaar
364a4ac48c Rename to import_legacy_lorawan_devices_repository.
The lorawan-devices repository structure is going to change and the
latest revisions no longer contain a LICENSE file.

This does mean that the latest data can't be imported and we will be
missing newly added devices and potential bugfixes. However, it does
provide time to work on a better solution.

As requested, TTN and The Things Network is no longer used in the
naming and description.

Closes #61.
2022-11-30 10:17:53 +00:00
Orne Brocaar
dda9d3ffac Fix Redis pipelines for Redis Cluster.
redis::pipe() can't be used with the ClusterClient struct, instead we
must use cluster_pipe() to start the pipeline. This implements a wrapper
which constructs the pipeline based on the used Redis setup.
2022-11-30 08:50:49 +00:00
Orne Brocaar
c1c89d06f8 Bump version to 4.1.0-test.1 2022-11-28 15:17:53 +00:00
Orne Brocaar
ec09710b24 Log uplink frames without device match to DevEUI 0000000000000000.
It can be useful to handle uplinks that do not match a DevEUI in a
separate process. This includes DevAddr to DevEUI pointer does not
exist, or DevAddr points to one or multiple DevEUIs, but it does not
pass the MIC check.
2022-11-28 10:59:28 +00:00
Orne Brocaar
963842ef55 Implement api request logging to Redis Streams.
This makes it possible for external services to subscribe (through
Redis) for realtime events. E.g. a create, update or delete device event
could trigger an external synchronization.
2022-11-28 10:59:28 +00:00
Orne Brocaar
84dc8fd333 Bump version to 4.0.5 2022-11-28 10:23:54 +00:00
Orne Brocaar
948ed00b60 Add keep_alive_interval config for MQTT.
In case there is a loadbalancer between ChirpStack and the MQTT broker,
it is useful to have control over the keep-alive messages, to make sure
that the loadbalancer does not drop the connection if there is no
activity. In such a case you want to set the keep_alive_interval to a
lower interval than the loadbalancer timeout.
2022-11-25 12:51:35 +00:00
Orne Brocaar
e2bdef757c Send ThingsBoard telemetry (f_port, f_cnt, ...) even if object is None. 2022-11-21 09:18:52 +00:00
Orne Brocaar
d98518c5f9 Fix ThingsBoard location and status telemetry. 2022-11-18 11:24:21 +00:00
Orne Brocaar
9fe8ee2474 Fix incorrect splitting of multiple http integration endpoints.
Closes #62.
2022-11-17 13:00:17 +00:00
Orne Brocaar
bfcff17f34 Bump version to 4.0.4 2022-11-15 10:13:35 +00:00
Orne Brocaar
6973e91ade Remove unsetting of device_queue_item.
In case the queue-item does fit the first RX window, but not the second
one, it will be set to None. If this happens, then the
save_downlink_frame step will not add the queue-item ID to the
DownlinkFrame (internal).

Then on txack, ChirpStack is unable to dequeue the payload causing the
payload to stay in the queue.
2022-11-08 15:40:37 +00:00
Orne Brocaar
e2214f9485 Add coding_rate field to LoraDataRate (+ fix 2.4GHz coding-rate).
Per Regional Parameters Specification, the LoRa modulation always uses
coding-rate 4/5, however this is not the case for ISM2400 (which is
currently not covered by the reg. params) in which case coding-rate
4/8LI must be used.

Closes #51.
2022-11-08 15:19:45 +00:00
Orne Brocaar
0ac4ef51e2 Bump version to 4.0.3 2022-11-07 11:40:11 +00:00
Orne Brocaar
6b1cf4f8ba Fix metrics per day interval calculation.
This fixes the issue where after a from DST to non-DST, the timstamp was
not incremented by a full day. As the ts was then truncated to day
precision, this would create a never ending loop.

Example, incrementing 2022-10-30 00:00:00 by days(1) would result in
2022-10-30 23:00:00, trucated to day precision would result in
2022-10-30 00:00:00.

If the date (30) is the same after incrementing by days(1), we increment
by days(2), which in the above example results in 2022-10-31 23:00:00,
truncated to day precision results in 2022-10-31 00:00:00 which is the
desired result.
2022-11-07 11:23:02 +00:00
Orne Brocaar
42d6f62509 Simplify error return. 2022-11-04 14:30:55 +00:00
Orne Brocaar
347ac6fcfa Check if channel is closed. Fix blocking_send error.
In order to properly handle the SendError, we must return the original
error, instead of creating a new anyhow::Error.
2022-11-04 14:29:04 +00:00
Orne Brocaar
0b7ee05c6f Update properties > metadata in gateway API. 2022-11-04 12:03:01 +00:00
Orne Brocaar
39a9455972 Add downlink meta-data logging. 2022-11-02 16:15:53 +00:00
Orne Brocaar
0d14bb1ac7 Add uplink meta-data logging. 2022-11-02 14:42:25 +00:00
Orne Brocaar
937f12d4e8 Add Redis config examples for username and password.
Closes #54.
2022-11-02 10:39:42 +00:00
Orne Brocaar
0a23c71641 Add option for auto-detect measurements.
In case the decoded payload contains random keys the auto-detect
measurements feature will add new measurements for each uplink. With
this option it is possible to turn auto-detection off to avoid
polluting the database with many measurements.

Closes #42.
2022-11-02 10:19:38 +00:00
Orne Brocaar
d6cc9d4fd6 Bump version to 4.0.3-test.1 2022-10-21 07:37:25 +01:00
Orne Brocaar
289d97f258 Implement dev_addr_prefixes configuration.
This makes it possible to configure one or multiple DevAddr sub-ranges
instead of using the whole DevAddr range provided by the configured
NetID.

Closes #49.
2022-10-19 12:53:34 +01:00
Orne Brocaar
e04f991e76 Fix 'Cannot serialize NaN as google.protobuf.Value.number_value'.
In case the codec returns a NaN float, this is converted to None to
avoid Protobuf serialization error. This also fixes the eventlog such
that it does not break out of the loop (unless it is a channel error).
Messages that can't be processed will be ignored and an error is
printed.

Fixes https://github.com/chirpstack/chirpstack-v3-to-v4/issues/4.
2022-10-06 12:31:11 +01:00
Orne Brocaar
94455ffe35 Fix typo (:: > :). 2022-10-04 15:50:20 +01:00
John Dyer
601d3f9aa1
Use trust_store instead of ca_path for mqtt integration. (#47) 2022-10-04 15:44:59 +01:00
Orne Brocaar
4282d3aedc Update clap to v4. 2022-10-03 15:11:53 +01:00
Orne Brocaar
a91fb1f73e Bump version to 4.0.2 2022-09-28 13:05:13 +01:00
Orne Brocaar
0940260541 Fix client_cert_lifetime value in configfile template. 2022-09-28 12:38:37 +01:00
Orne Brocaar
51b622e8e2 Fix terminating stream loop on client disconnect.
As the spawn_blocking thread is not terminated when the frame_log_future
is dropped, it would keep the Redis connection open. By closing the
redis_rx channel on client-disconnect, we can check if the channel has
been closed inside the spawn_blocking thread, and return if this is the
case.

Closes #40.
2022-09-28 12:25:33 +01:00
Orne Brocaar
ea0f84b93d Bump version to 4.0.1 2022-09-28 09:14:53 +01:00
Orne Brocaar
091e3b0f97 Remove bandwidth * 1000 as it is already in Hz.
This fixes the missing per DR stats in the gateway dashboard.
2022-09-27 15:56:04 +01:00
Orne Brocaar
4d000b92e9 Fix PositionSolution decoding from JSON.
Depending the algorithm type, some fields might or might not be present.
This change updates these fields to Option<T>.
2022-09-27 11:28:35 +01:00
Orne Brocaar
2abc85afa6 Revert "LoRa Cloud: use default if value is not present."
This reverts commit 1867140272ce0625a3598ee3082b383171005702.
2022-09-27 11:15:53 +01:00
Orne Brocaar
1867140272 LoRa Cloud: use default if value is not present. 2022-09-27 11:03:49 +01:00