ThingsBoard IoT Gateway 1.4.0客户端时间戳映射失效问题咨询
First, let's confirm: the client timestamp mapping feature is fully supported in Gateway 1.4.0, as evidenced by the added ts and tsFormat fields in the KVMapping class you shared. The issue you're seeing is almost certainly related to a missing configuration detail rather than a feature limitation.
Let's break down the problem and fix it:
1. Missing tsFormat in Your Mapping Configuration
The key oversight here is that you haven't specified the tsFormat parameter in your timeseries mapping. The gateway needs this to understand how to parse the timestamp value you're passing.
Your timestamp ("1488273476000") is a millisecond-precision Unix epoch timestamp (13 digits). To make the gateway recognize this, you need to add "tsFormat": "epoch_ms" to each timeseries entry.
Here's the corrected mqtt-config.json snippet:
{ "topicFilter": "sensors", "converter": { "type": "json", "filterExpression": "$.properties[*]", "deviceNameJsonExpression": "${$.about}", "timeseries": [ { "type": "double", "ts": "${$.iotStateObservation[0].phenomenonTime}", "tsFormat": "epoch_ms", // Add this critical line "key": "${$.about}", "value": "${$.iotStateObservation[0].value}" } ] } }
2. Verify Timestamp Data Type
In your Python code, you're passing the timestamp as a string (timeStamp = "1488273476000"). While the gateway might handle string-formatted epoch timestamps correctly with the right tsFormat, it's safer to pass it as an integer to avoid any parsing ambiguities. Try modifying that line to:
timeStamp = 1488273476000 # Integer instead of string
3. Check Gateway Logs for Parsing Errors
If the issue persists after making the above changes, check the gateway's log files (usually located in the logs directory of your gateway installation). Look for errors related to timestamp parsing—this will help identify if there's a mismatch between your data format and the gateway's expectations.
Why This Works
The tsFormat parameter tells the gateway how to interpret the value in the ts field. Without it, the gateway can't correctly parse your custom timestamp and falls back to using the server-side timestamp instead. By specifying "epoch_ms", you're explicitly telling the gateway that the value is a Unix epoch timestamp in milliseconds.
内容的提问来源于stack exchange,提问作者Alexander James Pane

