Skip to main content

Ghost in the wiring

The kitchen has an old Nutone vent hood. The fan didn't spin as fast as it should and the fan blades looked rusty so I decided to replace the motor and blades. I found a replacement motor off Amazon (of all places) and found a metal fan of the exact same design off ebay. I dismantled the vent fan assembly and replaced the motor and fan and tested it and everything worked fine.

A few days later I switched the vent fan on and it did not work. Neither did the hood light. I puzzled over this, wondered if I'd blown a fuse, checked all the fuses - all were intact. I could not figure anything out. I decided that the wiring inside the hood was old and had come apart from my fiddling with it.

A few days later I idly switched the fan on - and it worked! Now I was sure there was loose wiring somewhere.

Then a few days later again I tried the fan, and it did not work. I banged the hood I banged under the fan trying to see if I could jar the loose wiring in place but nothing worked. I left the kitchen disappointed, trying to decide how best to tackle this. I started to think of replacing the entire vent hood.

After a while I came back and switched off the over sink light. There was a sudden rattling sound. I jumped. I was confused for a moment. I was pretty sure I had turned off the over sink light and not hit the disposal button (they are located symmetrically on either side of the sink) but it sure sounded like the disposal. I flipped the switch again. The rattling sound stopped and the sink light came on.

I flipped the switch again. The light went off and the rattling - which I now properly identified as the vent hood fan, which I had messed with and unseated so it was brushing the hood roof (because of all my banging) - started again. It took me a while to stop laughing.

Somebody had gone to great lengths to wire the kitchen light with a single pole double throw switch with the other circuit serving the vent hood. I'm so glad I had accidentally left the vent fan on, otherwise I would have NEVER figure this one out.

Comments

Popular posts from this blog

A note on Python's __exit__() and errors

Python's context managers are a very neat way of handling code that needs a teardown once you are done. Python objects have do have a destructor method ( __del__ ) called right before the last instance of the object is about to be destroyed. You can do a teardown there. However there is a lot of fine print to the __del__ method. A cleaner way of doing tear-downs is through Python's context manager , manifested as the with keyword. class CrushMe: def __init__(self): self.f = open('test.txt', 'w') def foo(self, a, b): self.f.write(str(a - b)) def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.f.close() return True with CrushMe() as c: c.foo(2, 3) One thing that is important, and that got me just now, is error handling. I made the mistake of ignoring all those 'junk' arguments ( exc_type, exc_val, exc_tb ). I just skimmed the docs and what popped out is that you need to return True or...

Store numpy arrays in sqlite

Use numpy.getbuffer (or sqlite3.Binary ) in combination with numpy.frombuffer to lug numpy data in and out of the sqlite3 database: import sqlite3, numpy r1d = numpy.random.randn(10) con = sqlite3.connect(':memory:') con.execute("CREATE TABLE eye(id INTEGER PRIMARY KEY, desc TEXT, data BLOB)") con.execute("INSERT INTO eye(desc,data) VALUES(?,?)", ("1d", sqlite3.Binary(r1d))) con.execute("INSERT INTO eye(desc,data) VALUES(?,?)", ("1d", numpy.getbuffer(r1d))) res = con.execute("SELECT * FROM eye").fetchall() con.close() #res -> #[(1, u'1d', <read-write buffer ptr 0x10371b220, size 80 at 0x10371b1e0>), # (2, u'1d', <read-write buffer ptr 0x10371b190, size 80 at 0x10371b150>)] print r1d - numpy.frombuffer(res[0][2]) #->[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] print r1d - numpy.frombuffer(res[1][2]) #->[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] Note that for work where data ty...