Efento NB-IoT Devices

IoT-Devices auf Basis von LoRaWAN benötigen eine entsprechende LoRaWAN-Abdeckung durch einen Provider oder ein eigenes Gateway, um die über LoRa übertragenen Daten über eine Internetverbindung an den betreffenden LoRaWAN-Server zu senden.

Gibt es keine hinreichende LoRaWAN-Abdeckung und ein eigenes LoRaWAN-Gateway kommt, aus welchen Gründen auch immer, nicht in Frage, dann bieten sich die zwei Mobilfunktechnologien NB-IoT oder LTE-M (auch CAT M1 genannt) an. Einen Vergleich der beiden Technologien finden Sie u.a. bei 1NCE.

1NCE ist ein globaler Anbieter von IoT-Konnektivitätslösungen. Sie können von 1NCE eine SIM-Karte kaufen, die über eine Laufzeit von 10 Jahren oder eine bestimmte Datenmenge gültig ist. Dieses Preismodell ermöglicht es IoT-Anwendern, während der Testphase die Kosten für die Konnektivität sehr einfach im Blick zu behalten.

IoT devices based on LoRaWAN require appropriate LoRaWAN coverage from a provider or their own gateway in order to send the data transmitted via LoRa to the relevant LoRaWAN server via an Internet connection.

If there is insufficient LoRaWAN coverage and a dedicated LoRaWAN gateway is out of the question for whatever reason, the two mobile radio technologies, NB-IoT or LTE-M (also known as CAT M1), are available. You can find a comparison of the two technologies at 1NCE.

1NCE is a global provider of IoT connectivity solutions. You can buy a SIM card from 1NCE that is valid for a period of 10 years or a certain amount of data. This pricing model allows IoT users to easily keep track of connectivity costs during the trial period.

NB-IoT Coverage

Die NB-IoT Abdeckung von 1NCE ist für den DACH- Bereich gegeben und kostenmäßig für Maker-Anwendungen optimal.

Für stationäre Anwendungen bietet sich nicht nur aus Kostengründen NB-IoT an, d.h. ein Sensorknoten zur Datenerfassung muss mit einem NB-IoT-Modem ausgestattet werden.

Es gibt mittlerweile genug Evaluationboards für diesen Zweck, bei kostengünstigen Geräten ist die Situation weniger komfortabel.

Bei der Recherche nach entsprechenden Fertiggeräten bin ich auf das Angebot der polnischen Fa. Efento gestoßen.

Efento entwickelt und vertreibt BLE- und NB-IoT-Sensoren zur Erfassung von Umweltdaten. Um NB-IoT als Technologie zur drahtlosen Datenübertragung zu evaluieren, bietet sich der Einsatz eines preisgünstigen Temperatur Loggers an.

Die Sensoren sind mit einer BLE-Schnittstelle ausgestattet, die eine schnelle und einfache Konfiguration mit einem Smartphone ermöglicht.

NB-IoT-Sensoren senden die Daten über das Mobilfunknetz an die Efento Cloud oder eine andere Cloud-Plattform. Die Inbetriebnahme ist im Quick Start Manual sehr gut beschrieben.

The NB-IoT coverage of 1NCE is given for the DACH region and is optimal in terms of costs for maker applications.

NB-IoT is not only suitable for stationary applications for cost reasons, i.e., a sensor node for data acquisition must be equipped with an NB-IoT modem.

There are now enough evaluation boards for this purpose, but the situation is less convenient with inexpensive devices.

While searching for suitable ready-made devices, I came across an offer from the Polish company Efento.

Efento develops and sells BLE and NB-IoT sensors for recording environmental data. In order to evaluate NB-IoT as a technology for wireless data transmission, the use of an inexpensive temperature logger is a good option.

The sensors are equipped with a BLE interface, which enables quick and easy configuration with a smartphone.

NB-IoT sensors send the data to the Efento Cloud or another cloud platform via the mobile network. Commissioning is described very well in the Quick Start Manual.

Efento HC5

Technische Daten:

Messzeitraum: 1 Minute – 10 Tage (vom Benutzer konfigurierbar)
Batterie garantiert bis zu 5 Jahre wartungsfreien Betrieb.
Das Gerät speichert 40.000 Messungen, wenn der Speicher voll ist, werden die ältesten Messungen überschrieben.
Die Konfiguration des Sensors kann über die Cloud oder mit einer mobilen Anwendung über BLE geändert werden.

Sind die Daten in der Efento Cloud abgelegt, dann kann auf diese über ein API zugegriffen werden. Details hierzu sind in der Dokumentation Getting measurements from Efento Cloud through API zu finden.

Einfacher ist aber die Verbindung zu einem für die Visualisierung zuständigen Server über einen Webhook, wie er im Efento Cloud User Manual beschrieben ist.

Ich habe den Temperatur Logger so konfiguriert, dass alle 10 Minuten eine Messung erfolgt und nach einer Stunde das gesamte Datenpaket zur Efento Cloud übertragen wird. Über den Webhook wird dann beispielsweise das folgende JSON-Paket weitergeleitet. Unter dem Key events sind dann auch die sechs Einzelmessungen im Abstand von 10 Minuten gelistet.

Technical data:

Measuring period: 1 minute – 10 days (user configurable)
The battery guarantees up to 5 years of maintenance-free operation.
The device stores 40,000 measurements; when the memory is full, the oldest measurements are overwritten.
The configuration of the sensor can be changed via the cloud or with a mobile application via BLE.

If the data is stored in the Efento Cloud, it can be accessed via an API. Details can be found in the Getting measurements from Efento Cloud through API documentation.


However, connecting to a server responsible for visualization via a webhook is easier, as described in the Efento Cloud User Manual.

I have configured the temperature logger to take a measurement every 10 minutes, and the entire data package is transferred to the Efento Cloud after one hour. The following JSON packet, for example, is then forwarded via the webhook. The six individual measurements at 10-minute intervals are then also listed under the key events.

{
"deviceSerialNumber": "282C02419C98",
"firstMeasurementTimestamp": "2023-06-23 14:40:00",
"lastMeasurementTimestamp": "2023-06-23 15:30:00",
"measurementPointId": 999294,
"measurementPointName": "Efento HC5",
"measurementsReceivedAt": "2023-06-23 15:35:12",
"signalStrength": 26,
"batteryStatus": "OK",
"measurementsEvents": [
{
"channelNumber": 1,
"channelType": "TEMPERATURE",
"events": [
{
"timestamp": "2023-06-23 14:40:00",
"value": 25.6,
"period": 600,
"status": "OK"
},
{
"timestamp": "2023-06-23 14:50:00",
"value": 25.8,
"period": 600,
"status": "OK"
},
{
"timestamp": "2023-06-23 15:00:00",
"value": 25.9,
"period": 600,
"status": "OK"
},
{
"timestamp": "2023-06-23 15:20:00",
"value": 25.8,
"period": 600,
"status": "OK"
},
{
"timestamp": "2023-06-23 15:30:00",
"value": 25.6,
"period": 600,
"status": "OK"
}
]
}
]
}

Meine bevorzugte Option zur Visualisierung von Daten ist Datacake, weshalb ich hier versucht habe, die übertragene Payload zu interpretieren.

Die Integration des Webhooks auf der Datacake Seite ist unter https://docs.datacake.de/integrations/webhook beschrieben. Wichtig und in der Verantwortung des Anwenders ist wiederum der Payload Decoder, der die übertragenen Daten für die Datacake Anwendung passend decodieren muss.

Im Payload Decoder unten wird erwartungsgemäß durch die events iteriert. Zu einigem Kopfzerbrechen und notwendiger Unterstützung von Datacake haben die unterschiedlichen Datenformate der jeweiligen Timestamps geführt. Datacake verarbeitet grundsätzlich das UNIX-Format, während im JSON-Paket von Efento das Datum als String formuliert war. Ein böser Stolperstein, der einer zusätzlichen Konvertierung bedurfte.

My preferred option for visualizing data is Datacake, which is why I have tried to interpret the transmitted payload here.

The integration of the webhook on the Datacake page is described at https://docs.datacake.de/integrations/webhook. The payload decoder, which must decode the transmitted data appropriately for the Datacake application, is important and the responsibility of the user.

As expected, the payload decoder below iterates through the events. The different data formats of the respective timestamps have led to some headaches and necessary support from Datacake. Datacake always processes the UNIX format, while in the JSON package from Efento, the date was formulated as a string. It was a nasty stumbling block that required additional conversion.

function Decoder(request) {
    // Parse the payload from the request body
    var payload = JSON.parse(request.body);
    // Initialize an array to store the formatted measurements
    var formattedMeasurements = [];
    // Extract the device serial number from the payload
    var deviceSerialNumber = payload.deviceSerialNumber;
    // Iterate through the measurementsEvents in the payload
    var measurementsEvents = payload.measurementsEvents || [];
    for (var i = 0; i < measurementsEvents.length; i++) {
        var events = measurementsEvents[i].events || [];
        // Iterate through the events
        for (var j = 0; j < events.length; j++) {
            var event = events[j];
            // Parse timestamp string in the format "YYYY-MM-DD HH:mm:ss" to Date object
            var timestampComponents = event.timestamp.match(/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/);
            if (!timestampComponents) {
                console.error('Invalid timestamp format:', event.timestamp);
                continue;
            }
            var dateUTC = new Date(Date.UTC(
                +timestampComponents[1],
                +timestampComponents[2] - 1,
                +timestampComponents[3],
                +timestampComponents[4],
                +timestampComponents[5],
                +timestampComponents[6]
            ));
            // Convert the date to UNIX UTC timestamp (seconds since 1970-01-01)
            var timestampUTC = dateUTC.getTime() / 1000;
            // Construct the formatted measurement object for temperature
            var formattedMeasurement = {
                device: deviceSerialNumber,
                field: 'temperature', // You can change this to the actual field name in your database
                value: event.value,
                timestamp: timestampUTC
            };
            // Add the formatted measurement to the array
            formattedMeasurements.push(formattedMeasurement);
        }
    }
    // Add signalStrength if present
    if (payload.signalStrength !== undefined) {
        formattedMeasurements.push({
            device: deviceSerialNumber,
            field: 'signalStrength',
            value: payload.signalStrength
        });
    }
    // Add batteryStatus if present
    if (payload.batteryStatus !== undefined) {
        formattedMeasurements.push({
            device: deviceSerialNumber,
            field: 'batteryStatus',
            value: payload.batteryStatus
        });
    }
    // Return the array of formatted measurements
    return formattedMeasurements;
}

Nach vollzogener Integration können die erhobenen Messdaten des Temperatur Loggers nun von der Efento Cloud abgefragt oder aber über ein Datacake Dashboard visualisiert werden.

Once the integration has been completed, the temperature logger’s measurement data can now be retrieved from the Efento Cloud or visualized via a Datacake dashboard.

Efento Cloud
Datacake Dashboard

Danke an Simon Kemper von Datacake für die speditive Unterstützung beim Payload Decoder.

Thanks to Simon Kemper from Datacake for his speedy support with the payload decoder.


Nachdem nun alles eingerichtet ist und erwartungsgemäß läuft, steht die Frage nach der resultierenden Batterielaufzeit.

Nach kurzer Zeit war die interne Batterie mit 3.7 V und 6300 mAh entladen. Also galt es, dem auf den Grund zu gehen.

Ich nutze Efento HC5 in der Schweiz, also außerhalb des Homenetzes von 1NCE. In der Schweiz bietet nur Swisscom NB-IoT an. Die Kosten entsprechen aber nicht dem Maker-Ansatz.

Da 1NCE das Swisscom Netz in der Schweiz nutzt, kann die PLMN fest auf den Wert von Swisscom (22801) eingestellt werden und so das Scannen nach der Home-PLMN der SIM-Card vermieden und Strom gespart werden.

Now that everything is set up and running as expected, the next question is the resulting battery life.

After a short time, the internal battery with 3.7 V and 6300 mAh was discharged. So, it was time to find the underlying cause of it.

I use Efento HC5 in Switzerland, i.e., outside the home network of 1NCE. In Switzerland, only Swisscom offers NB-IoT. However, the costs do not correspond to the Maker approach.

Since 1NCE uses the Swisscom network in Switzerland, the PLMN can be permanently set to the Swisscom value (22801), thus avoiding scanning for the SIM card’s home PLMN and saving power.


Ich habe den Verlauf der Batteriespannung verfolgt und eine Laufzeit von ca. 20 Tagen erreicht. Für meinen Einsatzfall (Einsatz in der CH, Provider in D, also Roaming) sehe ich derzeit keine Möglichkeit den Strombedarf zu reduzieren.

Da NB-IoT ohnehin für den stationären Einsatz gedacht ist, werde ich die Stromversorgung über ein Steckernetzteil vornehmen.

I have tracked the battery voltage and achieved a runtime of approx. 20 days. For my use case (use in Switzerland, provider in Germany, i.e., roaming), I currently see no possibility of reducing the power requirement.

As NB-IoT is intended for stationary use, I will use a plug-in power supply.

USB generated VBAT

Die im Bild oben angezeigte kleine Zusatzschaltung erzeugt durch einen Step-Down-Converter die vom Efento HC5 benötigte Versorgungsspannung von 3.6 V DC und ersetzt somit die Batterie.

Die Zusatzschaltung kann leicht an Stelle der Batterie auf der Oberschale des Gehäuses mit Klebeband fixiert werden.

Der Batteriestatus zeigt nun die am Step-Down-Converter einstellbare Versorgungsspannung für den Efento HC5.

The small additional circuit shown in the picture above uses a step-down converter to generate the supply voltage of 3.6 V DC required by the Efento HC5, thus replacing the battery.

The additional circuit can easily be fixed in place of the battery on the top shell of the housing with adhesive tape.

Now, the battery status shows the supply voltage for the Efento HC5 that can be set on the step-down converter.

Sie können die erfassten Messwerte über den Public Link verfolgen:

You can track the measured values via the public link:

Efento HC5 Public Link
Efento HC5 Smartphone Dashboard

2023-11-14/CK

Veröffentlicht von ckuehnel

Mein aktuelles Profil ist unter https://www.linkedin.com/in/ckuehnel zu finden.

Hinterlasse einen Kommentar