🏠 Home → Knowledge Base → FAQ
Here are answers to the most common questions about ROSSMA devices, their connection, configuration and operation.
ROSSMA IIOT-AMS (Automated Monitoring System) is a series of autonomous and non-autonomous meter-switches for wireless data transmission from monitoring and measuring instruments via LoRaWAN and NB-IoT networks.
| Criterion | LoRaWAN | NB-IoT |
|---|---|---|
| Coverage | Own network | Carrier network |
| Range | Up to 15 km | Up to 10 km |
| Battery life | Up to 15 years | Up to 10 years |
| Cost | No subscription fee | Subscription fee |
| Application | Industrial sites | Urban infrastructure |
Autonomous (Stand-alone):
Non-autonomous (PWR):
Required: DevEUI, AppEUI, AppKey of device (indicated on housing or in datasheet)
Registration steps:
Check:
TIP: Use ROSSMA Configurator to check signal quality.
If problem persists:
Required: Carrier SIM card with activated NB-IoT tariff
Activation steps:
Supported carriers:
Error indication:
| NET LED | Problem | Solution |
|---|---|---|
| Not lit | SIM card not detected | Check SIM installation |
| Fast blink (1/sec) | Searching network | Wait 5-10 minutes |
| Slow blink (3 times - pause) | No registration | Check carrier coverage |
| Constantly lit | Registered | Normal |
WARNING: NB-IoT requires good carrier network coverage. For remote locations, LoRaWAN is recommended.
Main factor: data transmission interval
Increasing interval from 1 minute to 1 hour extends 14 A/h battery life from 90 days to 3+ years.
Recommendations:
Set optimal transmission interval:
Use battery life calculator for calculation
If frequent transmission is needed:
Device technical specifications
Method 1: Via Configurator
Method 2: In last message
Battery voltage is transmitted in every message from device.
Critical values:
- Normal: >3.3 V
- Low charge: 3.0-3.3 V (replace battery within a month)
- Critical:
.0 V (replace immediately)
Scheduled replacement:
Unscheduled replacement when:
IMPORTANT: Use only original FANSO batteries (14/126/168 A/h) or equivalents with similar specifications.
Required: ROSSMA Device Configurator
Steps:
WARNING: Device will apply new settings after next connection (within current interval).
Recommended intervals:
| Application | Interval | 14 A/h battery life |
|---|---|---|
| Emergency alarm | 1-5 minutes | 90-200 days |
| Parameter monitoring | 10-30 minutes | 300 days - 2 years |
| Statistics collection | 1-4 hours | 3-5 years |
| Rare monitoring | 12-24 hours | 5-10 years |
| LED | Behavior | Meaning |
|---|---|---|
| ACT | Short flash | Sensor trigger / measurement |
| LORA | Short flash | Sending data via LoRaWAN |
| LORA | Double flash | Receiving data from network |
| (no indication) | - | Normal (in sleep mode) |
| LED | Behavior | Meaning |
|---|---|---|
| PWR | Constantly lit | Power supplied |
| ACT | Periodically blinks | Data exchange with sensor |
| LORA | Periodically blinks | Data transmission |
| ERR | 1/sec | Communication module not detected |
| ERR | 3 times - pause | No network registration |
| ERR | 5 times - pause | Server send error |
| NET (NB-IoT) | Lit | Registered in carrier network |
| Success (NB-IoT) | Flash | Successful data transmission |
Diagnostics:
Check power:
Check indication:
Check network registration:
Check signal quality:
If nothing helps: Contact technical support
Possible causes:
Device is working but data is outdated:
Device sends data but it doesn't reach application:
Sensor readings are not changing:
Indication after calibration:
| Indication | Meaning | Solution |
|---|---|---|
| 1 long flash | Success | Calibration completed |
| 10 short + 2 long | Turn error | Repeat calibration |
| 10 short + 3 long | No turns | Check connection |
Error causes:
Detailed calibration instructions
For ROSSMA IIOT-AMS MODBUS devices:
Via ROSSMA NETS server:
Alert examples:
Email: info@rossma.ru
Phone: +7 (XXX) XXX-XX-XX (weekdays 9:00-18:00 MSK)
Website: rossma.ru/support
When contacting, please specify:
- Device model (e.g., ROSSMA IIOT-AMS ANALOG Ex Single Channel 14 A/h)
- Device DevEUI
- Problem description
- LED indication
"Technical Documentation" section
Available:
Firmware update is performed remotely via LoRaWAN/NB-IoT network.
Steps:
Important:
ROSSMA NETS provides REST API and MQTT.
# Get latest device data
curl -X GET "https://your-server/api/devices/70B3D57ED0041234/data" \
-H "Authorization: Bearer YOUR_API_KEY"
# Get history for period
curl -X GET "https://your-server/api/devices/70B3D57ED0041234/data?from=2025-01-01&to=2025-01-31" \
-H "Authorization: Bearer YOUR_API_KEY"
import requests
from datetime import datetime, timedelta
API_URL = "https://your-server/api/devices"
API_KEY = "YOUR_API_KEY"
DEV_EUI = "70B3D57ED0041234"
headers = {"Authorization": f"Bearer {API_KEY}"}
# Latest data
response = requests.get(f"{API_URL}/{DEV_EUI}/data", headers=headers)
data = response.json()
# History for last 7 days
params = {
"from": (datetime.now() - timedelta(days=7)).isoformat(),
"to": datetime.now().isoformat()
}
history = requests.get(f"{API_URL}/{DEV_EUI}/data", headers=headers, params=params)
const API_URL = 'https://your-server/api/devices';
const API_KEY = 'YOUR_API_KEY';
const DEV_EUI = '70B3D57ED0041234';
// Async/Await version
async function getDeviceData() {
const response = await fetch(`${API_URL}/${DEV_EUI}/data`, {
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
return await response.json();
}
// Usage
const data = await getDeviceData();
console.log(`Temperature: ${data.temperature}°C`);
<?php
$apiUrl = "https://your-server/api/devices";
$apiKey = "YOUR_API_KEY";
$devEui = "70B3D57ED0041234";
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => "$apiUrl/$devEui/data",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer $apiKey",
"Content-Type: application/json"
]
]);
$response = curl_exec($ch);
$data = json_decode($response, true);
echo "Temperature: " . $data['temperature'] . "°C\n";
echo "Battery: " . $data['battery'] . " V\n";
?>
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type DeviceData struct {
Temperature float64 `json:"temperature"`
Battery float64 `json:"battery"`
AnalogValue float64 `json:"analog_value"`
}
func main() {
apiURL := "https://your-server/api/devices/70B3D57ED0041234/data"
req, _ := http.NewRequest("GET", apiURL, nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var data DeviceData
json.NewDecoder(resp.Body).Decode(&data)
fmt.Printf("Temperature: %.1f°C\n", data.Temperature)
}
Available protocols: MQTT (recommended), HTTP REST API, OPC UA, Modbus TCP
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://your-server:1883', {
username: 'your-username',
password: 'your-password'
});
// Subscribe to all application devices
client.subscribe('application/+/device/+/rx');
client.on('message', (topic, message) => {
const data = JSON.parse(message.toString());
console.log('DevEUI:', data.deviceEUI);
console.log('Data:', data.object);
// Send to SCADA
sendToScada(data);
});
import paho.mqtt.client as mqtt
import json
def on_message(client, userdata, msg):
data = json.loads(msg.payload.decode())
print(f"DevEUI: {data['deviceEUI']}")
print(f"Temperature: {data['object']['temperature']}°C")
client = mqtt.Client()
client.username_pw_set("your-username", "your-password")
client.on_message = on_message
client.connect("your-server", 1883, 60)
client.subscribe("application/+/device/+/rx")
client.loop_forever()
using MQTTnet;
using MQTTnet.Client;
var factory = new MqttFactory();
var client = factory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
.WithTcpServer("your-server", 1883)
.WithCredentials("your-username", "your-password")
.Build();
client.ApplicationMessageReceivedAsync += e =>
{
var payload = Encoding.UTF8.GetString(e.ApplicationMessage.PayloadSegment);
var data = JsonSerializer.Deserialize<DeviceMessage>(payload);
Console.WriteLine($"Received data: {data.Object.Temperature}°C");
return Task.CompletedTask;
};
await client.ConnectAsync(options);
await client.SubscribeAsync("application/+/device/+/rx");
In ROSSMA NETS:
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook/rossma', (req, res) => {
const { deviceEUI, data, timestamp } = req.body;
console.log(`[${timestamp}] Device ${deviceEUI}:`);
console.log(` Temperature: ${data.temperature}°C`);
console.log(` Battery: ${data.battery} V`);
// Save to DB, send alerts, etc.
processDeviceData(deviceEUI, data);
res.status(200).send('OK');
});
app.listen(3000);
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook/rossma', methods=['POST'])
def handle_webhook():
payload = request.json
device_eui = payload['deviceEUI']
data = payload['data']
timestamp = payload['timestamp']
print(f"[{timestamp}] Device {device_eui}:")
print(f" Temperature: {data['temperature']}°C")
print(f" Battery: {data['battery']} V")
# Process data
process_device_data(device_eui, data)
return jsonify({'status': 'ok'}), 200
if __name__ == '__main__':
app.run(port=3000)
<?php
// webhook.php
$payload = json_decode(file_get_contents('php://input'), true);
$deviceEUI = $payload['deviceEUI'];
$data = $payload['data'];
$timestamp = $payload['timestamp'];
error_log("[$timestamp] Device $deviceEUI:");
error_log(" Temperature: {$data['temperature']}°C");
error_log(" Battery: {$data['battery']} V");
// Save to database
$pdo = new PDO('mysql:host=localhost;dbname=iot', 'user', 'pass');
$stmt = $pdo->prepare("INSERT INTO measurements (device_eui, temperature, battery, timestamp) VALUES (?, ?, ?, ?)");
$stmt->execute([$deviceEUI, $data['temperature'], $data['battery'], $timestamp]);
http_response_code(200);
echo json_encode(['status' => 'ok']);
?>
Example Webhook payload:
{
"deviceEUI": "70B3D57ED0041234",
"applicationID": "1",
"data": {
"temperature": 23.5,
"battery": 3.58,
"analog_value": 12.4
},
"rxInfo": {
"rssi": -85,
"snr": 8.5,
"gatewayID": "B827EBFFFE123456"
},
"timestamp": "2025-12-09T14:30:00Z"
}
Didn't find answer to your question?