Most recent activity
-
Hi,
First off, I appreciate this is an issue with Noble rather than Espruino/Pucks but I thought asking here might be more fruitful than raising an issue on GitHub as someone may have similar experience.
I have several Pis setup around the house as satellites for an unrelated project and a Pi 4 as a master device on my entertainment unit. The case I'm using for the Pi 4 does a cracking job of nullifying the Bluetooth signal... Therefore, I set up a relay script of sorts that runs on some of the satellite devices picking up the advertiserments of the Pucks I have around the home using Abandonware/Noble, and they feed into the master device over Wifi.
Several weeks ago I did a fresh install of, what is now Raspberry Pi OS on a Pi3 located in my conservatory. After a period of time, several hours, 1 day, 2 days, but no more than 3 days the Pi stops "receiving" the advertisements. Noble reports no state change, there's no errors and no advertisements. Nothing. As soon as I restart the script, Noble reconnects and all works again.
My script is stored on a NAS and is used by all of the satellites with no problems whatsoever. Any other satellite and it wouldn't be an issue, but typically this particular Pi is picking up a Puck that no other Pi can reliably receive.
Has anyone has similar issues using Abandonware/Noble or EspurinoHub (as I believe that uses Noble too) recently? My feeling is it's driver related... I'm not sure what I can check, or what I should look for to help diagnose.
-
I wonder whether in that mode the data reported is somehow the difference in acceleration between that and the last event?
Ah, perhaps! How are individual events defined? The literal last movement, or a pause from a significant movement?
I tried your code, and simply added the conditional for the z-axis and nothing more and still got similar results (so I also tried higher G, but similar results too):
OUT: -12203 CLOSED: 1539 IN: 13687 CLOSED: 3942
Interestingly just opening the flap fractionally and letting it close produced results like:
OUT: -32750 CLOSED: 361 IN: 32536 CLOSED: -2171
With the existing power saving configuration I tried my approach of adding a 5 second lock once an IN/OUT action has triggered. I only ever pushed the flap out and got this:
OUT: -6809 CLOSED: -1454 OUT: -7337 CLOSED: -1391 OUT: -9631 CLOSED: -97 OUT: -6141 CLOSED: -433 OUT: -17430 -> Hugely inflated reading. CLOSED: -324 IN: 7935 -> WHAT!? It has registered an OUT as IN, following the last hugely inflated reading. CLOSED: 548 OUT: -7828 CLOSED: -1584 SOME MORE OUT: -7297 CLOSED: -441 IN: 7833 -> In registered again, normal out reading previously. CLOSED: -1446
-
I tried your suggestion and spent some time over the weekend reading the documentation and trying various things (tried 16g, higher Hz and various other settings that I'm certain I do not understand fully) but I always end up with the same problem as before:
Out: -6000
Closed: 0
In: +6000
Closed: 0Your solution pretty much follows examples they provide, and it even discusses how the first reading is effectively an anomaly and ways you can deal with it - I see the anomaly but it doesn't affect me. Even with 16g I still get some silly high numbers in the opposite direction when it closes.
The only thing that seems to work is to set 10h back to high power
Puck.accelWr(0x15,0x00)
, whilst leaving all the other settings more or less as you suggested. Then I get as expected:OUT: -6308
CLOSED: 1575I thought this might be "good enough", but I'm not convinced the battery will last all that much longer... Am I wrong? Considering the issue is likely to be 'noise' on low power mode I tried normal mode:
While High-Performance mode guarantees the best performance in terms of noise, Normal mode further reduces the current consumption.
I don't know if it helped, but it definitely didn't solve the issue. I don't understand the configuration options (slopes/filters/etc) well enough to know if there's a combination that will further reduce the power consumption and work as it does on high performance in reaction to the flap closing.
If all else fails I can always add a hack solution to ignore an in/out action after the flap is registered closed for a couple of seconds! :-D
@allObjects - Thanks for sharing the links, really interesting! I'd loved to find some time to do something similar - perhaps even for a time restricted feeder.
-
I've only just had the chance to get back to this. The original battery died not long after my last comment - definitely need these power saving tweaks.
I'm not using setTimeout, just the original code. Your scale suggestion has fixed the points of which the flap is considered: in, out and closed but I'm still getting consistently strange readings - especially when it shuts - it does the Hokey Cokey.
I've set it to log: in (+12,000), out (-12,000) and closed (+/- 4,000) and the z axis of which it triggered.
This was one motion:
OUT: -12602 -> I moved it very slowly until it crossed the out threshold
CLOSED: 682 -> I released it, and it dropped to the shut position, with very little rebound.
IN: 32764 -> This would suggest it practically flew in the opposite direction which it did not.
CLOSED: -1413 -> It's apparently shut again.Another:
OUT: -26331 -> Again, moved gently to the out position yet it reads more than twice the required out position.
CLOSED: -988 -> Closed. No register of in.Another:
IN: 29674 -> Pulled in, very gently. Again measures very high.
CLOSED: 3010 -> Closed.
OUT: -31476 -> Again, you would assume it flew back some way in the opposite direction; it did not.
CLOSED: -1246 -> Closed, again.@allObjects - Thanks for your thoughts! Actually he's microchipped and when we first got him I looked into reading that but never found the time to put anything into action.
The flap actually has some kind of magnetic mechanism to attach a magnet to a collar, but it doesn't work anymore. It's difficult to get open to find out why without breaking it to pieces. I want to replace the flap entirely to be honest, but it's been so poorly fitted it's a bit of a nightmare to fit a new one. It does have magnets though, so definitely an avenue I could investigate.
Having said that, the accelerometer seems like an elegant solution and would seem to work perfectly well if I'm able to sort the power issues. He hasn't ever stuck his head through and changed his mind - he has to go through a tunnel (through the brickwork) and it's always a committed motion - but appreciate the point you make.
I'll put the glue away, for now ;)
-
Not quite sure I understood? You mean it's too sensitive?
Sorry, let me clarify. My implementation is:
- If acc.z passes -6000 and flap state is not out then he's exited the house.
- If acc.z passes 6000 and flap state is not in then he's entered the house.
- If acc.z is between +/- 2000 and flap state is not closed then the flap has swung close.
This accounts for reverse swing when the flap shuts, and for us tapping the flap and realising we haven't locked it correctly (4 way locking mechanism).
By adding your power saving example just gently tapping the puck gives excessive z axis readings. Opening the cat flap just a cm and letting it swing back shows him as: leaving, entering, leaving, entering because the z-axis readings are that extreme.
I haven't quite got my head around all the options so I'm not quite sure the impact they're having to cause this.
- If acc.z passes -6000 and flap state is not out then he's exited the house.
-
Thanks for the code. I tried it and whilst it does only fire the event when there's movement, unfortunately there are side effects. In/Out fire with just a fraction of movement when the conditional is set +/- 6000. I've removed the change for now, but it's not working exactly like before. Do I need to reset the register? I'm only sending the code to Puck at the moment, no save.
You weren't kidding about the level of configurability! I'm torn on modules vs. firmware, but I'd probably agree with you - it would likely be easier to develop and use.
-
If it continues being an issue I'll see if there's anything I can do.
I know the accelometer can be configured in a bunch of different ways
so potentially it could be told to sleep until moved, avoiding waking
the Puck up.Ah, thanks! I'll let you know how it goes. To be honest, that's kind of how I expected it to work. When setting up I was a bit shocked to see it take continuous readings. That's initially why I was trying take a single reading so I could mark roughly where I wanted the "action points". Ended up wrapping it straight into a conditional and tweaking the values.
I do use the counter approach: action and sensor counter. I advertise the light, temperature and battery every 1000ms and update every 5 minutes - as well as the readings themselves, it's just a useful heartbeat to make sure they're working OK.
When an action occurs: increment the action counter, set the action value, increase the interval to 20ms and set a timeout to revert back to 1000ms and set action to zero. The last point is the problem, and for the cat flap I have increased the amount of time it advertises the action at the faster interval before it resets to 0 to ensure a packet arrives!
I use the same code across all the Pucks I have: doorbell, our cat logger (single, long and double press for meal, snack and water replacement - so he doesn't get fed twice!), dinner is ready announcement button which plays to all rooms. The other half has a button to turn the kettle on so she can get ready for her shift while it boils, another which works in tandem with a motion sensor to enable a "shower mode" so the light doesn't go off. All kinds of silly little uses really!
I increase the interval time to account for the doorbell mainly; wanting an instant reaction. I reset the action ID because I burnt myself a few times when I was first creating the receiving script. I didn't account for the script restarting and an action being in place - the doorbell going off at silly o' clock was not great! Scared the s*** out of us!
Also a similar silly little bug led us to think the cat was pressing the button during the night as we were getting notifications that he was feeding himself! He knows the click it makes and knows he's being fed so we genuinally thought for a bit that he was getting creative - he's more of a dog in the body of a cat...
Anyway! Yes, I think I'm just about over the "doorbell incident", aha. I could remove that fail-safe now, and you're right it would definitely help.
Thanks for your thoughts Gordon.
I should have been clearer when I said there's no change to state. I added handles for stateChange and scanStop to write to a log because that too was my first thought. However, as said, nothing.