Close

Clock Add-On

A project log for Audible notifications by a Grandfather's clock

Eight chimes can sound in different patterns whenever I receive a notification through IFTTT

borazsloborazslo 04/21/2016 at 01:030 Comments

This notification project can work as a normal grandfather's clock with famous Westminster Quarters melody. The easiest way is to use this Add-On file called chimeClock.py. You can invoke it regularly adding this line to your crontab (crontab -e):

0,15,30,45 * * * * python /path/to/file/chimeClock.py
Attention! This chimeClock.py works only if the chimeService.py is running, as it is written in the Program Code v0.2.

chimeClock.py

import datetime
import sys, zmq 

speed = 0.8

#Mute it during night hours
now=datetime.datetime.now()
if ( ( now.hour > 22 ) and ( now.minute > 10 ) ) or ( now.hour < 9 ):
    sys.exit(0)

port = "5555"

#Westminster Quarters
firstQuarter =  [1,speed,2,speed,3,speed,4,speed * 2]
secondQuarter = [3,speed,1,speed,2,speed,4,speed * 2, 3,speed,2,speed,1,speed,3,speed * 2]
thirdQuarter =  [1,speed,3,speed,2,speed,4,speed * 2, 4,speed,2,speed,1,speed,3,speed * 2, 1,speed,2,speed,3,speed,4,speed * 2]
fourthQuarter = [3,speed,1,speed,2,speed,4,speed * 2, 3,speed,2,speed,1,speed,3,speed * 2, 1,speed,3,speed,2,speed,4,speed * 2, 4,speed,2,speed,1,speed,3,speed * 2]
Hour = [0,speed * 4]

context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect ("tcp://localhost:%s" % port)

def preparePattern( array ):
    pattern = ""
    for i in range(0, len(array), 2):
        pattern = pattern + str(array[i]) + ":" + str(array[i+1])
        if i < len(array) - 2 :
            pattern = pattern + "-"        
    return pattern

def sound( array ):
    pattern = preparePattern(array)
    socket.send (pattern)  

if now.minute == 15:
    sound(firstQuarter)    
elif now.minute == 30:
    sound(secondQuarter)
elif now.minute == 45:
    sound(thirdQuarter)    
elif now.minute == 0: 
    sound(fourthQuarter)
    if(now.hour > 12):
        hour = now.hour - 11
    elif(now.hour == 0 ):
        hour = 12
    else:
        hour = now.hour
    for x in xrange(1,hour):
        sound(Hour)
        pass

Discussions