Jump to content

SENSBLUE ATLAS/Datasheet: Difference between revisions

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 ===