SENSBLUE ATLAS/Datasheet: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| Line 4,832: | Line 4,832: | ||
====== Actual Behavior ====== | ====== Actual Behavior ====== | ||
When RESET is executed, the system performs a '''complete modem restart flow''': | When RESET is executed, the system performs a '''complete modem restart flow''': | ||
# Executes system-level reset: '''ltectl reset-modem''' | |||
# The modem '''disappears from the system (USB re-enumeration)''' | |||
# The system waits for the modem to '''reappear''' | |||
# Re-discovers the modem path | |||
# Waits until the modem becomes '''ready''' | |||
# Waits until the modem is '''connected again''' | |||
This is a '''full recovery sequence''', including automatic reconnection. | |||
====== Impact on active connection ====== | |||
* Active data connection is '''immediately terminated''' | |||
* All ongoing communications (MQTT, VPN, HTTP, etc.) will be '''interrupted''' | |||
* Modem temporarily '''disappears from the system''' | |||
* A new network registration is performed | |||
* IP address will '''likely change''' | |||
* Total recovery time may take '''10–120 seconds''' | |||
====== When to use ====== | |||
Use '''RESET''' only when: | |||
* Modem is stuck in '''searching''' or not registering | |||
* Connected but no data traffic is possible | |||
* APN/operator changes are not taking effect | |||
* Modem becomes unresponsive or unstable | |||
====== When NOT to Use ====== | |||
Avoid using RESET : | |||
* During OTA updates or file uploads | |||
* During critical real-time operations | |||
* If a simple reconnect ( SET_MODEM_STATE ) is sufficient | |||
====== Application Considerations ====== | |||
'''Before RESET''' | |||
* Ensure no critical operations are ongoing | |||
* Persist any unsent or buffered data | |||
* Expect loss of connectivity | |||
'''After RESET''' | |||
* Wait for modem to fully recover (can take up to ~2 minutes) | |||
* Re-check modem status using: '''GET_STATUS''' | |||
* Re-establish application-level connections: '''MQTT'''; '''VPN''' an '''Cloud sessions''' | |||
===== 24.13.9 Set Network Mode ===== | |||
Configures allowed radio technologies | |||
Supported values: | |||
* 2g | |||
* 3g | |||
* 4g | |||
* auto | |||
'''Req-Topic''': modem/runtime/in<syntaxhighlight lang="json">{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"action": "SET_NETWORK_MODE", | |||
"taskParams": { | |||
"mode": "4g" | |||
} | |||
} | |||
}</syntaxhighlight>'''Reply-Topic''': modem/runtime/out<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"taskResult": { | |||
"mode": "4g", | |||
"success": true | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
===== 24.13.10 Get Signal Strength ===== | |||
'''Req-Topic''': modem/runtime/in<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"action": "GET_SIGNAL" | |||
} | |||
} | |||
</syntaxhighlight>'''Reply-Topic''': modem/runtime/out<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"taskResult": { | |||
"signal": 34, | |||
"unit": "%" | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
===== 24.13.11 Get SIM card info ===== | |||
'''GET_SIM_INFO''' is a '''runtime action''' used to read SIM card information from the modem through ModemManager. | |||
This action is '''read-only'''. It does not change the modem state, APN, operator, bearer, or NetworkManager configuration. | |||
'''Req-Topic''': modem/runtime/in<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"action": "GET_SIM_INFO" | |||
} | |||
} | |||
</syntaxhighlight>'''Reply-Topic''': modem/runtime/out<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "modem-actor", | |||
"task": { | |||
"taskResult": { | |||
"success": true, | |||
"sim": { | |||
"id": "0", | |||
"path": "/org/freedesktop/ModemManager1/SIM/0", | |||
"active": true, | |||
"iccid": "8935101234567890123", | |||
"imsi": "268060123456789", | |||
"operator_id": "26806", | |||
"operator_name": "MEO", | |||
"emergency_numbers": [ | |||
"112" | |||
], | |||
"preferred_networks": [ | |||
"operator-code: 42507, access-technologies: gsm, umts, lte", | |||
"operator-code: 20810, access-technologies: gsm, umts, lte", | |||
"operator-code: 64710, access-technologies: gsm, umts, lte", | |||
"operator-code: 37001, access-technologies: gsm, umts, lte", | |||
"operator-code: 34002, access-technologies: gsm, umts, lte" | |||
] | |||
} | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
{| class="wikitable" | |||
|'''Field''' | |||
|'''Type''' | |||
|'''Description''' | |||
|- | |||
|id | |||
| number / string | |||
|Same request ID received in the input payload. | |||
|- | |||
|origin | |||
| string | |||
|Actor name, usually '''modem-actor'''. | |||
|- | |||
|task.taskResult.success | |||
|boolean | |||
|Indicates if the SIM information was read successfully. | |||
|- | |||
|task.taskResult.sim.id | |||
|string | |||
|SIM object ID used by ModemManager. Usually 0. | |||
|- | |||
|task.taskResult.sim.path | |||
|string | |||
|ModemManager DBus path for the SIM object. | |||
|- | |||
|task.taskResult.sim.active | |||
|boolean / null | |||
|Indicates if the SIM is active, when available. | |||
|- | |||
|task.taskResult.sim.iccid | |||
|string / null | |||
|SIM ICCID / SIM identifier. This is the physical SIM card identifier. | |||
|- | |||
|task.taskResult.sim.imsi | |||
|string / null | |||
|IMSI associated with the SIM subscription. | |||
|- | |||
|task.taskResult.sim.operator_id | |||
|string / null | |||
|Mobile operator identifier from the SIM, when available. | |||
|- | |||
|task.taskResult.sim.operator_name | |||
|string / null | |||
|Operator name from the SIM, when available. | |||
|- | |||
|task.taskResult.sim.emergency_numbers | |||
|array | |||
|Emergency numbers reported by the SIM/modem. | |||
|- | |||
|task.taskResult.sim.preferred_networks | |||
|array | |||
|Preferred networks stored on the SIM, when available. | |||
|} | |||
===== 24.13.12 Test Modem ===== | |||
Performs a basic diagnostic test: | |||
* Modem detection | |||
* SIM presence | |||
* Network registration | |||
* Data connectivity | |||
'''Req-Topic''': modem/runtime/in<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"action": "TEST" | |||
} | |||
} | |||
</syntaxhighlight>'''Reply-Topic''': modem/runtime/out<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"taskResult": { | |||
"hw": true, | |||
"sim": true, | |||
"network": true, | |||
"data": true | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
===== 24.13.13 Speed Test ===== | |||
Performs a '''low-data network speed test''' over the modem interface. | |||
This command does '''not''' run a full bandwidth benchmark. | |||
Instead, it performs a '''short and capped download burst''' on interface '''wwan0''' , measures the number of received bytes during a fixed time window, and | |||
returns an '''estimated download speed''' together with '''latency''' and a '''confidence level'''. | |||
This approach is designed for IoT / field devices using '''capped cellular SIM cards''', where a classic speed test would consume too much data. | |||
'''Req-Topic''': modem/runtime/in<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"action": "SPEED_TEST" | |||
} | |||
} | |||
</syntaxhighlight>'''Reply-Topic''': modem/runtime/out | |||
'''Success reply''':<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"taskResult": { | |||
"download_mbps": 12.4, | |||
"success": true | |||
} | |||
} | |||
} | |||
</syntaxhighlight>'''Error reply''' | |||
Example when the modem is not connected:<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"taskResult": { | |||
"download_mbps": 12.4, | |||
"success": true | |||
} | |||
} | |||
} | |||
</syntaxhighlight>Example when an unexpected internal error occurs:<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "modem-actor", | |||
"task": { | |||
"taskResult": { | |||
"success": false, | |||
"reason": "unexpected_exception" | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
====== '''Reply parameters''' ====== | |||
{| class="wikitable" | |||
|'''Parameter''' | |||
|'''Type''' | |||
|'''Description''' | |||
|- | |||
|success | |||
| boolean | |||
|Indicates whether the speed test completed successfully. true = test executed, false = failed (see reason ). | |||
|- | |||
|download_mbps | |||
| number | |||
|Estimated download speed in '''megabits per second (Mbps)'''. Calculated from the number of bytes received on interface | |||
'''wwan0''' during the measurement window. | |||
|- | |||
|bytes_sampled | |||
|number | |||
|Total number of '''received bytes''' measured on the modem interface ( '''wwan0''' ) during the test window. Used as the raw input | |||
for speed calculation. | |||
|- | |||
|duration_s | |||
|number | |||
|Measurement window duration in seconds. Current implementation uses '''5 seconds'''. | |||
|- | |||
|latency_ms | |||
|number | |||
|null | |||
|- | |||
|confidence | |||
|string | |||
|Qualitative indicator of measurement reliability based on sampled bytes:• '''low''' → < 50,000 bytes• '''medium''' → 50,000– | |||
299,999 bytes• '''high''' → ≥ 300,000 bytes | |||
|- | |||
|reason | |||
|string | |||
|Present only when '''success=false''' . Provides failure reason (e.g., '''not_connected (<state>)''' , '''unexpected_exception''' ). | |||
|} | |||
====== Data consumption notice ====== | |||
This command performs a '''real network download''' and therefore consumes mobile data. | |||
Although the test is designed to be '''low-data''', it still generates traffic: | |||
* Typical consumption per test: '''~100 KB to ~500 KB''' | |||
* Latency measurement adds a negligible amount (ICMP ping) | |||
'''Estimated data usage''' | |||
{| class="wikitable" | |||
|'''Frequency''' | |||
|'''Estimated consumption''' | |||
|- | |||
|1 test/day (~100 KB) | |||
| ~3 MB/month | |||
|- | |||
|1 test/day (~250 KB) | |||
| ~7.5 MB/month | |||
|- | |||
|1 test/day (~500 KB) | |||
|~15 MB/month | |||
|} | |||
====== Recommendation ====== | |||
For devices using '''capped SIM cards''', it is recommended to: | |||
* Avoid running this test at high frequency | |||
* Use signal and modem status ( '''mmcli''' ) for regular monitoring | |||
* Reserve speed tests for: | |||
- commissioning | |||
- troubleshooting | |||
- periodic health checks | |||
'''Running frequent or extended tests may significantly impact the data allowance.''' | |||
===== 24.13.14 Get Raw Modem Info (Reserved) ===== | |||
'''Req-Topic''': reserved/modem/runtime/in<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "modem-actor", | |||
"task": { | |||
"taskResult": { | |||
"success": false, | |||
"reason": "not_connected (registered)" | |||
} | |||
} | |||
} | |||
</syntaxhighlight>'''Reply-Topic''': reserved/modem/runtime/out<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "DEV", | |||
"task": { | |||
"taskResult": { | |||
"raw": "mmcli -m 0 output..." | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
===== 24.13.15 Example: Raw Modem Output ( mmcli ) ===== | |||
Command: | |||
mmcli -m 0 --output-json | |||
Example output:<syntaxhighlight lang="json"> | |||
{ | |||
"modem": { | |||
"3gpp": { | |||
"5gnr": { | |||
"registration-settings": { | |||
"drx-cycle": "--", | |||
"mico-mode": "--" | |||
} | |||
}, | |||
"enabled-locks": [], | |||
"eps": { | |||
"initial-bearer": { | |||
"dbus-path": "--", | |||
"settings": { | |||
"apn": "--", | |||
"ip-type": "--", | |||
"password": "--", | |||
"user": "--" | |||
} | |||
}, | |||
"ue-mode-operation": "--" | |||
}, | |||
"imei": "862636056280785", | |||
"network-rejection-access-technology": "--", | |||
"network-rejection-error": "--", | |||
"network-rejection-operator-id": "--", | |||
"network-rejection-operator-name": "--", | |||
"operator-code": "--", | |||
"operator-name": "--", | |||
"packet-service-state": "--", | |||
"pco": "--", | |||
"registration-state": "--" | |||
}, | |||
"cdma": { | |||
"activation-state": "--", | |||
"cdma1x-registration-state": "--", | |||
"esn": "--", | |||
"evdo-registration-state": "--", | |||
"meid": "--", | |||
"nid": "--", | |||
"sid": "--" | |||
}, | |||
"dbus-path": "/org/freedesktop/ModemManager1/Modem/0", | |||
"generic": { | |||
"access-technologies": [], | |||
"bearers": [], | |||
"carrier-configuration": "ROW_Gen_VoLTE", | |||
"carrier-configuration-revision": "05010822", | |||
"current-bands": [ | |||
"egsm", | |||
"dcs", | |||
"pcs", | |||
"g850", | |||
"utran-1", | |||
"utran-4", | |||
"utran-6", | |||
"utran-5", | |||
"utran-8", | |||
"utran-2", | |||
"eutran-1", | |||
"eutran-2", | |||
"eutran-3", | |||
"eutran-4", | |||
"eutran-5", | |||
"eutran-7", | |||
"eutran-8", | |||
"eutran-12", | |||
"eutran-13", | |||
"eutran-18", | |||
"eutran-19", | |||
"eutran-20", | |||
"eutran-25", | |||
"eutran-26", | |||
"eutran-28", | |||
"eutran-34", | |||
"eutran-38", | |||
"eutran-39", | |||
"eutran-40", | |||
"eutran-41", | |||
"eutran-66", | |||
"utran-19" | |||
], | |||
"current-capabilities": [ | |||
"gsm-umts, lte" | |||
], | |||
"current-modes": "allowed: 4g; preferred: none", | |||
"device": "/sys/devices/platform/scb/fe9c0000.xhci/usb1/1-1/1-1.4", | |||
"device-identifier": "2c759b7021f62d2e26973150063ea040b3662a65", | |||
"drivers": [ | |||
"option", | |||
"qmi_wwan" | |||
], | |||
"equipment-identifier": "862636056280785", | |||
"hardware-revision": "10000", | |||
"manufacturer": "QUALCOMM INCORPORATED", | |||
"model": "SIMCOM_SIM7600G-H", | |||
"own-numbers": [], | |||
"physdev": "/sys/devices/platform/scb/fe9c0000.xhci/usb1/1-1/1-1.4", | |||
"plugin": "simtech", | |||
"ports": [ | |||
"cdc-wdm0 (qmi)", | |||
"ttyUSB0 (ignored)", | |||
"ttyUSB1 (gps)", | |||
"ttyUSB2 (at)", | |||
"ttyUSB3 (at)", | |||
"ttyUSB4 (audio)", | |||
"wwan0 (net)" | |||
], | |||
"power-state": "on", | |||
"primary-port": "cdc-wdm0", | |||
"primary-sim-slot": "1", | |||
"revision": "LE20B04SIM7600G22", | |||
"signal-quality": { | |||
"recent": "yes", | |||
"value": "0" | |||
}, | |||
"sim": "/org/freedesktop/ModemManager1/SIM/0", | |||
"sim-slots": [ | |||
"/org/freedesktop/ModemManager1/SIM/0", | |||
"/" | |||
], | |||
"state": "failed", | |||
"state-failed-reason": "sim-missing", | |||
"supported-bands": [ | |||
"egsm", | |||
"dcs", | |||
"pcs", | |||
"g850", | |||
"utran-1", | |||
"utran-4", | |||
"utran-6", | |||
"utran-5", | |||
"utran-8", | |||
"utran-2", | |||
"eutran-1", | |||
"eutran-2", | |||
"eutran-3", | |||
"eutran-4", | |||
"eutran-5", | |||
"eutran-7", | |||
"eutran-8", | |||
"eutran-12", | |||
"eutran-13", | |||
"eutran-18", | |||
"eutran-19", | |||
"eutran-20", | |||
"eutran-25", | |||
"eutran-26", | |||
"eutran-28", | |||
"eutran-34", | |||
"eutran-38", | |||
"eutran-39", | |||
"eutran-40", | |||
"eutran-41", | |||
"eutran-66", | |||
"utran-19" | |||
], | |||
"supported-capabilities": [ | |||
"gsm-umts, lte" | |||
], | |||
"supported-ip-families": [ | |||
"ipv4", | |||
"ipv6", | |||
"ipv4v6" | |||
], | |||
"supported-modes": [ | |||
"allowed: 2g; preferred: none", | |||
"allowed: 3g; preferred: none", | |||
"allowed: 4g; preferred: none", | |||
"allowed: 2g, 3g; preferred: 3g", | |||
"allowed: 2g, 3g; preferred: 2g", | |||
"allowed: 2g, 4g; preferred: 4g", | |||
"allowed: 2g, 4g; preferred: 2g", | |||
"allowed: 3g, 4g; preferred: 4g", | |||
"allowed: 3g, 4g; preferred: 3g", | |||
"allowed: 2g, 3g, 4g; preferred: 4g", | |||
"allowed: 2g, 3g, 4g; preferred: 3g", | |||
"allowed: 2g, 3g, 4g; preferred: 2g" | |||
], | |||
"unlock-required": "--", | |||
"unlock-retries": [] | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
====== Field Reference - mmcli -m 0 --output-json ====== | |||
{| class="wikitable" | |||
|'''JSON Path''' | |||
|'''Meaning''' | |||
|'''Example Value''' | |||
|'''Notes / Interpretation''' | |||
|- | |||
|modem.dbus-path | |||
| Internal modem path | |||
|/org/.../Modem/0 | |||
|Used by mmcli ( -m 0 ) | |||
|- | |||
|modem.generic.manufacturer | |||
| Modem vendor | |||
|QUALCOMM INCORPORATED | |||
|Hardware info | |||
|- | |||
|modem.generic.model | |||
|Modem model | |||
|SIM7600G-H | |||
| | |||
|- | |||
|modem.generic.revision | |||
|Firmware version | |||
|LE20B04SIM7600G22 | |||
|Useful for debugging | |||
|- | |||
|modem.generic.device | |||
|Linux device path | |||
|/sys/devices/... | |||
|USB device | |||
|- | |||
|modem.generic.drivers | |||
|Kernel drivers | |||
|option, qmi_wwan | |||
|Must be present | |||
|- | |||
|modem.generic.primary-port | |||
|Control interface | |||
|cdc-wdm0 | |||
|Critical (QMI control) | |||
|- | |||
|modem.generic.ports | |||
|Available interfaces | |||
|ttyUSB*, wwan0 | |||
|Data + AT + GPS | |||
|- | |||
|modem.generic.power-state | |||
|Power status | |||
|on | |||
| | |||
|- | |||
|modem.generic.state | |||
|Modem state | |||
|failed | |||
|Main status field | |||
|- | |||
|modem.generic.state-failed-reason | |||
|Failure reason | |||
|sim-missing | |||
|Root cause of failure | |||
|- | |||
|modem.generic.signal-quality.value | |||
|Signal strength (%) | |||
|0 | |||
|0 = no signal | |||
|- | |||
|modem.generic.current-capabilities | |||
|Active radio tech | |||
|gsm-umts, lte | |||
| | |||
|- | |||
|modem.generic.current-modes | |||
|Active mode | |||
|allowed: 4g | |||
|Controlled via API | |||
|- | |||
|modem.generic.current-bands | |||
|Active frequency bands | |||
|[eutran-1, ...] | |||
|Coverage related | |||
|- | |||
|modem.generic.supported-bands | |||
|Supported bands | |||
|[eutran-*, utran-*] | |||
|Hardware capability | |||
|- | |||
|modem.generic.supported-ip-families | |||
|IP support | |||
|ipv4, ipv6, ipv4v6 | |||
| | |||
|- | |||
|modem.generic.sim | |||
|SIM path | |||
|/org/.../SIM/0 | |||
| | |||
|- | |||
|modem.generic.sim-slots | |||
|SIM slots | |||
|[slot1, slot2] | |||
|Slot 2 empty here | |||
|- | |||
|modem.generic.primary-sim-slot | |||
|Active SIM slot | |||
|1 | |||
| | |||
|- | |||
|modem.generic.bearers | |||
|Active data sessions | |||
|[ ] | |||
|Empty = no connection | |||
|- | |||
|modem.3gpp.imei | |||
|Device IMEI | |||
|862636056280785 | |||
|Unique identifier | |||
|- | |||
|modem.3gpp.operator-name | |||
|Network name | |||
| -- | |||
|Not available (no SIM) | |||
|- | |||
|modem.3gpp.operator-code | |||
|MCC/MNC | |||
| -- | |||
|Not available | |||
|- | |||
|modem.3gpp.registration-state | |||
|Network state | |||
| -- | |||
|Not registered | |||
|- | |||
|modem.3gpp.packet-service-state | |||
|Data service state | |||
| -- | |||
|No data session | |||
|- | |||
|modem.3gpp.eps.initial-bearer.settings.apn | |||
|APN | |||
| -- | |||
|Not set / no connection | |||
|} | |||
===== 24.13.16 Notes: ===== | |||
* If no modem is detected: | |||
'''Reply-Topic''': modem/runtime/out<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"taskResult": { | |||
"modem": { | |||
"present": false | |||
} | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
* If SIM is locked or missing: '''Reply-Topic''': modem/runtime/out | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"id": "<TIMESTAMP>", | |||
"origin": "APP", | |||
"task": { | |||
"taskResult": { | |||
"modem": { | |||
"sim": "locked" | |||
} | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
* Operator scan may take several seconds and should be handled asynchronously. | |||
* Some actions require: | |||
- SIM card inserted | |||
- Modem enabled | |||
- '''cdc-wdm0''' interface available | |||
* Signal strength is reported as percentage and may be cached by ModemActor. | |||
=== 25. Included Software Stack === | === 25. Included Software Stack === | ||