コード例 #1
0
def onNagTimer(zone, nagSensors):
    '''
    You should do something about the open doors!
    '''
    sdf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
    logMsg = ''
    msg = ''
    for i in range(len(nagSensors)):
        sensor = nagSensors[i]
        msg += sensor.label
        logMsg += sensor.label
        logMsg += u' opened ' + sdf.print(sensor.getLastUpdate())
        if i + 2 == len(nagSensors):
            msg += ' and '
            logMsg += ' and '
        elif i + 1 == len(nagSensors):
            msg += '.'
            logMsg += '.'
        elif i + 2 < len(nagSensors):
            msg += ', '
            logMsg += ', '
    msg = u'Open sections in ' + zone.name.decode('utf-8') + '. ' + msg
    log.info(msg)
    if zone.zoneNumber in [
            1, 3, 4
    ] and itemRegistry.getItem('Z1_Block_Nag_Timer').state != ON:
        tts(msg, PRIO['HIGH'])
    elif zone.zoneNumber == 2 and itemRegistry.getItem(
            'Z2_Block_Nag').state != ON:
        tts(msg, PRIO['MODERATE'])
コード例 #2
0
def onArmingWithOpenSensors(zone, armingMode):
    '''
    There might be open sensors when trying to arm. If so, this function gets called.
    (That doesn't necessarily need to be an error condition).
    However if the zone has been configured not to allow opened sensors during arming, 
    the zone status onZoneStatusChange will be called with status ERROR.
    '''
    isArming = True
    mins = 0
    openSensors = zone.getOpenSensors(mins, armingMode, isArming)

    msg = ''
    for i in range(len(openSensors)):
        sensor = openSensors[i]
        msg += sensor.label
        if i + 2 == len(openSensors):
            msg += ' och '
        elif i + 1 == len(openSensors):
            msg += '.'
        elif i + 2 < len(openSensors):
            msg += ', '
    if msg != '':
        msg = u'Open sections in ' + zone.name.decode('utf-8') + '. ' + msg
        log.error(msg)
        tts(msg, PRIO['HIGH'])
コード例 #3
0
ファイル: greetings.py プロジェクト: openhab-scripters/lucid
 def execute(self, modules, inputs):
     greetings = [greeting(), 'Hello', 'How are you', 'How are you doing', 'Good to see you', 'Long time no see', 'It\’s been a while']
     peopleAtHome = []
     for member in itemRegistry.getItem('G_Presence_Family').getAllMembers():
         if member.state == OPEN: peopleAtHome.append(member.label)
     random.shuffle(peopleAtHome)
     msg = random.choice(greetings)
     for i in range(len(peopleAtHome)):
         person = peopleAtHome[i]
         msg += ' '+person
         if i+2 == len(peopleAtHome):
             msg +=' and'
         elif i+1 == len(peopleAtHome):
             msg +='.'
         elif i+2 < len(peopleAtHome):
             msg +=','
     #tts(msg, PRIO['HIGH'], ttsRoom='Kitchen', ttsVol=42, ttsLang='en-GB', ttsVoice='Brian')
     tts(msg, PRIO['HIGH'], ttsRoom='Kitchen', ttsVol=42, ttsLang='en-IN', ttsVoice='Aditi')
コード例 #4
0
def onZoneStatusChange(zone, newZoneStatus, oldZoneStatus, errorMessage=None):
    '''
    This function will be called when there is a change of zone status.
    oldZoneStatus is None when initializing.
    '''
    log.info('Custom function: onZoneStatusChange: ' +
             zone.name.decode('utf-8') + ' ---> ' +
             kw(ZONESTATUS, newZoneStatus))

    if newZoneStatus == ZONESTATUS['ERROR']:
        errMes = 'Error when arming zone ' + zone.name.decode(
            'utf-8') + ': ' + errorMessage
        log.error(errMes)
        Pushover.pushover(errMes, PUSHOVER_DEF_DEV, PUSHOVER_PRIO['HIGH'])

    elif newZoneStatus == ZONESTATUS['ALERT']:
        # Get all sensors that have been tripped since 2 minutes regardless of their current state
        # considering that an intruder might have closed a tripped door already when this is running
        mins = 2
        openSensors = zone.getOpenSensors(mins)
        sdf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")
        msg = ''
        for i in range(len(openSensors)):
            sensor = openSensors[i]
            msg += sensor.label
            msg += u' tripped ' + sdf.print(sensor.getLastUpdate())
            if i + 2 == len(openSensors):
                msg += ' and '
            elif i + 1 == len(openSensors):
                msg += '.'
            elif i + 2 < len(openSensors):
                msg += ', '
        msg = u'Alarm in zone ' + zone.name.decode('utf-8') + '. ' + msg
        log.error(msg)

        if zone.alarmTestMode:
            log.info('ideAlarm in TESTING MODE')
            tts(msg, PRIO['EMERGENCY'])
            Pushover.pushover(msg, PUSHOVER_DEF_DEV, PUSHOVER_PRIO['NORMAL'])
        else:
            tts(msg, PRIO['EMERGENCY'])
            Pushover.pushover(msg, PUSHOVER_DEF_DEV,
                              PUSHOVER_PRIO['EMERGENCY'])

    elif newZoneStatus == ZONESTATUS['TRIPPED']:
        if zone.zoneNumber == 1:
            alertText = u'Intrusion in ' + zone.name.decode('utf-8')
            tts(alertText, PRIO['EMERGENCY'])

    elif newZoneStatus == ZONESTATUS['ARMING']:
        if zone.zoneNumber == 1:
            tts('sad cat', PRIO['HIGH'])
コード例 #5
0
def sayHello():
    hour = DateTime.now().getHourOfDay()
    if not (hour > 7 and hour < 22):
        return
    greetings = [greeting(), 'Hello', 'Greetings', 'Hi']
    peopleAtHome = []
    for member in itemRegistry.getItem('G_Presence_Family').getAllMembers():
        if member.state == OPEN: peopleAtHome.append(member.label)
    random.shuffle(peopleAtHome)
    msg = random.choice(greetings)
    for i in range(len(peopleAtHome)):
        person = peopleAtHome[i]
        msg += ' ' + person
        if i + 2 == len(peopleAtHome):
            msg += ' and'
        elif i + 1 == len(peopleAtHome):
            msg += '.'
        elif i + 2 < len(peopleAtHome):
            msg += ','
    tts(msg)
コード例 #6
0
 def execute(self, modules, inputs):
     tts(self.event.state)