Glad to help
I agree, that at this point things might get a little more difficult, but this is also because the use case is not that simple anymore.
There are multiple ways to deal with asynchronous data streams depending on your goal. Here some examples:
- Use the Calculation Mode “on message arrival” and use the IF-Cells or IF() functions to deal with different inputs and store if a dependency is valid (only if “MachineID” equals “Machine1” store data. Check out this example: How to extract data from topic and send it to specific row? - #2 by Tizian
- Put the Calculation mode to “continuously” and add the value “TRUE” to the CacheLastValue parameter and combine your Sheet logic to only store data, when ISNA() equals “FALSE”
All together: Basically always just put a dependency to the MONGO.STORE() and you wont have the issue of invalid data being stored
About your other questions:
a) What are the rules to evaluate a range, if it is not a group of pairs? Maybe we select 3x3 cells
I tried to state this in the JSON() explanation, but maybe not clear enough:
A data range over at least two columns, only interpreting the first and last column into the JSON Object.
Meaning, that as soon as there are more than two columns involved, the middle columns will be ignored.
Try a MQTT.PUBLISH with a JSON(A1:C3) Range. This will discard column B data, since only a data pair is a valid input.
b) A group of key/values can be A1:B5 or A1:E2. Which can be used?
Both can be used, but the JSON Range is oriented in columns not in rows, so the pairing will only work for A1:B5.
c) What about more complex JSON structures like arrays?
I guess you are talking about hierarchies with JSON Objects? Check out this topic here
d) If I have a cell with {JSON Object}, how do I get the elements back? Is there any function to get a single value out of this cell?
How did you manage to get this? I guess over a Mongo.Query?
If your Range on the Sheet is big enough this is likely to be a bug, which will be fixed for the next release (empty spaces and zeros are wrongly interpreted on the sheet at the moment).
Generally speaking there is no way to get a single value from a JSON Object, since there would be no logic to it. You can always visualize this by sending it to an Inbox. Use either MQTT.PUBLISH or even try out FEEDINBOX() (see also example in the JSON() documentation).
Cheers
Tizian