OK I agree… mine was a misguided suggestion (due to the lack of understanding 
of what a write to /simultaneous/temperature actually does.)

If I got it right, everything boils down to these points.

- By simultaneous conversion, we mean a broadcast that tells all sensors to 
start a temperature conversion. The single sensors do not report back when and 
if the conversion was done.

- There is no way from the client side to have the owserver lock the 1-wire bus 
and avoid that during the background temperature conversion other clients start 
conflicting operations on the 1-wire bus. The assumption here is that you have 
complete control of all owserver clients: due to the lack of owserver 
synchronisation/lock primitives, everything has to be done with IPC primitives 
client side.

- Due to the atomic nature of the scratchpad update, race conditions cannot 
occur: a very loose client synchronisation is enough for most applications.

A section 4 manpage (src/man/man4/owfs.man) would be very useful to document 
the bunch of special nodes in the OWFS tree, and their use. Docs about the 
working of the special nodes (like /simultaneous/temperature) is a little bit 
scattered and not easily accessible. (Sorry I do not volunteer for writing this 
manpage, because my understanding of the inner working of owfs is a little 
weak, as my posts demonstrate.)

Stefano



> On 03 Feb 2016, at 02:07, Jan Kandziora <j...@gmx.de> wrote:
> 
> Am 03.02.2016 um 01:06 schrieb Stefano Miccoli:
>> 
>> On the contrary a write to  /simultaneous/temperature is
>> asynchronous, since it will return *before* data is available. IMHO
>> for consistency also a write to /simultaneous/temperature should
>> *block* until all conversions are performed.
>> 
> There is no way to ensure this. A broadcast command may reach a chip or
> it may not. That's hard-wired into the term "broadcast".
> 
> So if you are using /simultaneous, you have to accept you are fully on
> your own. Synchronizing and error handling is all your own business. I
> don't think it is useful to have owfs doing a "fake" synchronization,
> making users unaware of the implications of using a broadcast command.
> 
> 
>> 
>> I.e. ‘simultaneous’ ops
>> should be synchronous: by doing so there is no need for the 'sleep 1’
>> before the owread commands.
>> 
>> Moreover what happens if process A writes to
>> /simultaneous/temperature and process B reads from
>> /uncached/10.AE9C54020800/temperature before the 1.0s for the
>> conversion are over? Will this result in a race condition?
>> 
> As far as I've tested it, the scratchpad is updated in an atomic
> fashion, so you would either read the old or the new value, never a
> mixture of both. IIRC I asked Paul the same years ago and he tested it,
> too (as the datasheet says nothing about it) and found that it is.
> 
> For using /simultaneous, there should be only one process triggering
> these conversions. In fact, with "latesttemp" we can finally fix all
> these RRD problems users reported:
> 
> RRD cooking recipe:
> ==================================================================
> Run this:
> ------------------------------------------------------------------
> #!/bin/sh
> while : ; do owwrite /simultaneous/temperature 1 ; sleep 1 ; done
> ------------------------------------------------------------------
> 
> Then tell your RRD tool to read "latesttemp" instead of "temperature".
> You'll get a nice chart of temperatures updated every second without
> those stupid lockup problems.
> ==================================================================
> 
> I even postulate most people want temperature sampling to be
> asynchronous, as temperatures are very very seldom sampled in regard to
> a certain trigger condition but continously instead.
> 
> And even if we had a certain trigger, e.g. monitoring how temperature is
> changing after turning on a burner, people would just oversample it and
> correlate the trigger later on. The long time constants of heat
> dissipation usually allow that.
> 
> 
>> Maybe all
>> operations involving temperature should be blocked during the
>> simultaneous conversion.
>> 
> That would make the temperature conversion code even more complicated
> and error-prone and /simultaneous/temperature less useful. Plus, it's a
> fake.
> 
> 
>> 
>> Finally we have different temperature resolutions.
>> 
>> /structure/22/temperature
>> 't,000000,000001,ro,000012,v,' /structure/22/temperature10
>> 't,000000,000001,ro,000012,v,' /structure/22/temperature11
>> 't,000000,000001,ro,000012,v,' /structure/22/temperature12
>> 't,000000,000001,ro,000012,v,' /structure/22/temperature9
>> 't,000000,000001,ro,000012,v,'
>> 
>> which one will be returned by latesttemp?
>> 
> The value from the scratchpad. That is, the lastest resolution you've
> set on the chip. Power-up-default is 12 bits, but that's programable,
> though OWFS lacks an interface to do that. Yet.
> 
> 
>> /structure/22/last/temperature
>> 't,000000,000001,ro,000012,v,' /structure/22/last/temperature10
>> 't,000000,000001,ro,000012,v,' /structure/22/last/temperature11
>> 't,000000,000001,ro,000012,v,' /structure/22/last/temperature12
>> 't,000000,000001,ro,000012,v,' /structure/22/last/temperature9
>> 't,000000,000001,ro,000012,v,'
>> 
> That would require to have OWFS keep track of the different values,
> which again makes the temperature conversion code even more complicated
> and error-prone. Plus, I doubt anyone ever needs that bug.
> 
> 
> Did I mention you always have to check for power-up? You cannot just
> read a conversion result and take for granted it's valid. That's the
> infamous 85°C reading. OWFS takes some measures against this, but it's
> only heuristics. The only safe way to check for power-up is to never do
> 12-bit conversions and then test whether the resolution has changed back
> to 12-bit since the last conversion trigger. (Or setup the EEPROM for
> another default and check for this.) Reading temperature and resolution
> is atomic, fortunately.
> 
> 
> If I had to decide, I would implement this safe, atomic 85°C reading
> tomorrow and throw out the heuristics completely. Hardly anyone needs
> the 12-Bit resolution, that's less than 0.2°C, even with the chip being
> calibrated your mounting certainly is not and I doubt anyone using OWFS
> has a setup to calibrate it. You'd need a physics lab to do that. Better
> than 1°C accuracy is 99% fake.
> 
> 
> 
> My opinion: "latesttemp" is simple and stupid, that's why it "just
> works". It gives you the cooked value you could also read from the
> undocumented "scratchpad" node. Nothing more.
> 
> 
> Kind regards
> 
>       Jan
> 
> ------------------------------------------------------------------------------
> Site24x7 APM Insight: Get Deep Visibility into Application Performance
> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
> Monitor end-to-end web transactions and take corrective actions now
> Troubleshoot faster and improve end-user experience. Signup Now!
> http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
> _______________________________________________
> Owfs-developers mailing list
> Owfs-developers@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/owfs-developers


------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
Owfs-developers mailing list
Owfs-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/owfs-developers

Reply via email to