!7 cmodule NotebookLid > DynBigNumber { transient Bool openLast; transient long openSince; start { setDescription("Notebook Lid"); ownTimer(doEvery(1.0, r updateMe)); } void update { Bool open = isNotebookLidOpen(); if (isTrue(open) && isFalse(openLast)) { openSince = now(); dm_say("Hello"); } else if (isFalse(open) && isTrue(openLast)) dm_say("Bye"); openLast = open; setValue(now() < openSince + 10000 ? "JUST OPENED" : nullFalseTrue(open, "?", "CLOSED", "OPEN")); } }