I'm writing code that subscribes to INSTEON incoming commands, listens for KPL button presses, and does stuff. If the stuff involves sending INSTEON commands (say, I called device.turnOn() and it was an INSTEON switch), that tends to jam. The symptom is that nothing happens for a few seconds, then Indigo issues an error message about how the send failed, and my command didn't execute. (And my plugin doesn't get told - the turnOn method has long since returned with no comment.)
Is there a way for Indigo to tell me that my turnOn() command (or whatever) has failed? That would allow me to cleanly retry it. (Of course, I'm kind of wondering why Indigo isn't resending it, if it knows the send has failed. Yes, I understand that perhaps the command worked and the ACK got lost. But for turnOn() and their like, what's the harm?)
Without a failure notification, I must use timers. The problem is that while the bus is jammed, Indigo queues all commands for sending later. This means it queues my retransmissions, waits until the bus clears, and then sends them all. There's no way (is there?) to only queue a command if it's not already queued. And there's no way to find out that we're stalled and commands aren't currently going out (is there?). I'm flying blind. (Well, I'm flying on instruments, and all the instruments tell me is, "You're not there yet." )
I was wondering whether indigo.insteon.subscribeToOutgoing can help me, but it's unclear what it's actually telling me - is it "I queued your command," or "I sent your command to the modem," or "the modem has sent the command out," or "I've seen an ACK for this command"?
Cheers
-- perry