Watching this thread in case anyone knows more, but after poking about a bit I'm inclined to think there is no way, seems the only access available currently is through get_circuit_condition on entities that support connections, which lets us inspect [s](but not modify)[/s] the conditions and, in only some cases, find out if the condition is true via a "fulfilled" field. The fulfilled field seems to be present on lamps and smart inserters. It doesn't seem to be present on decider combinators, despite them having equivalent conditions that are true or false, and no equivalent "result" is accessible on arithmetic accumulators, either. Basically we can just access what's set in the gui, in a read-only way (not tried exhaustively but tried writing a few, it did not change the settings on the devices)
:Edit: just noticed set_circuit_condition, which I'd somehow not noticed previously. Experimenting with it now...
:edit2: ok, tests confirmed, calling set_circuit_condition then immediately calling get_circuit_condition for lamps and smart inserters gives you the fulfilled value for the new condition, no waiting a tick required (unless one of these functions is implicitly waiting a tick and I just don't realise it?)
This means you actually
can determine the value of any signal coming in to one of those two devices by doing a binary search, 32 tests of 32 conditions to identify a 32-bit integer value. Not the kind of thing I'd be comfortable doing extensively, but it is technically an option if you don't mind the possible performance hit, or aren't doing the test too frequently.
This function does such a test, if you pass in a valid entity (must be a lamp or smart inserter, or something derived from those), the type of signal (usually "item", or "abstract" for the abstract signals) and name (the item name for items, the abstracts seem to follow the pattern "signal-<X>" where <X> is the signal's identifier - ex, "signal-0" or "signal-A")