Apologies for earlier mention of Thread: it was off topic for this group being something I wanted to look at for marine sensors and boat control systems as layers 1-4 under a binary application layer protocol (not Signal K, but an NMEA alternative): Obviously I'm aware of the blurb available in the white papers, just wondered if anyone doing "IoT" had more info.
Back on topic...
To probably just re-state what you just said a different way...can economy be achieved through assumption of defaults in the server? Apologies in advance if I've missed discussions on this which have already raised these issues but I can't find reference in the documentation.
Initially I typed up this post about how the server could take updates from sensors on the network in a more compact form by assuming defaults which then didn't need to be stated in the update message. Then I realised that to avoid "double processing" of updates by clients (once from the sensor, once when the server transmitted its update to the data model) you'd need clients to ignore the "compact" form. Moreover, it's probably desirable to treat updates not coming from the SignalK server differently: they are actually a different case entirely.
Then pretty much I realised that the easiest and least disruptive way to address this is just with a backend converter (as per the nmea-0183 one). Rather than "updates" we have an array of "sensor" (or similar). The converter can then assume defaults which don't need to be stated explicitly in the message:
Timestamp: Not needed in this context. If no timestamp is given, "now" is assumed as it would for an NMEA update
Source: Converter derives source for entry into the data model from the sensor's network address, e.g. "net.fe80::1234:5678:9abc:deff". This avoids the need for sensors to given themselves a "source" (beyond their assigned network address). This scheme is not without issues but it's a thought...
Context: It's all going to be under vessels.self so we can omit that. That also partially overcomes the (what I see as a) limitation that a sensor needs to know it's on a boat to speak the format natively. Beyond the default assumption of "vessels.self" there can be specific defaults for known unqualified paths, e.g. an update with a "path" of "pitch", "yaw" etc. gets assigned a context of "vessels.self.navigation", one of "wind.*" gets assigned a context of "vessels.self.environment". A little more processing on the server (in the converter). That could be configurable (is there a case for a "config" node as implemented by many ldap servers?)
..and of course "values" is implicit so not need to make it explicit in the message.
So we have a sensor update which is pretty much just an array of (possibly unqualified) "path" and "value" with very little else. Directly mapping onto the data model, going via the server like every other provider to avoid confusion and requiring no changes to existing software other than the addition of a new converter.
Final note on timestamps: I note that in the documentation on the web site the format used varies slightly (some have a "Z" timezone stated, others don't) and I can't find (probably just not looking hard enough) the statement of the "correct" one. Is there a case for making the timestamp the number of seconds or milliseconds since an epoch as the NMEA have done with TAG timestamps (from publicly available presentations I stress before the NMEA's legal hounds are set on me)? Fewer characters, marginally easier to process. Personally I don't like the NMEA's use of UNIX time as it doesn't cope with leap seconds but you could use there Bernstein-favoured TAI-10 scheme. Just an thought in case the format is heavily revised at any point.