Example #1
0
    def __init__(self, parent, zoneNumber, cfg):
        '''
        Initialise the IdeAlarmZone class

        Expects:
         - Parent object
         - zoneNumber (integer) The zone's ordinal number
         - cfg (dictionary) The zone's configuration dictionary
        '''
        self._armingMode = None
        self._zoneStatus = None
        self.zoneNumber = zoneNumber
        self.alertDevices = cfg['alertDevices']
        self.name = cfg['name']
        self.armAwayToggleSwitch = cfg['armAwayToggleSwitch']
        self.armHomeToggleSwitch = cfg['armHomeToggleSwitch']
        self.mainZone = cfg['mainZone']
        self.canArmWithTrippedSensors = cfg['canArmWithTrippedSensors']
        self.alarmTestMode = parent.alarmTestMode
        self.parent = weakref.ref(parent)  # <= garbage-collector safe!
        self.log = logging.getLogger(LOG_PREFIX + '.IdeAlarmZone.' +
                                     self.name.decode('utf8'))
        self.sensors = []
        for sensor in cfg['sensors']:
            self.sensors.append(IdeAlarmSensor(self, sensor))
        self.armingModeItem = cfg['armingModeItem']
        self.statusItem = cfg['statusItem']

        self.openSections = self.countOpenSections()
        self.setArmingMode(
            getItemValue(self.armingModeItem, ARMINGMODE['DISARMED'])
        )  # Will also set the zone status to normal
        self.log.info('ideAlarm Zone ' + self.name.decode('utf8') +
                      ' initialized with ' + str(self.openSections) +
                      ' open sensors')
Example #2
0
 def __init__(self):
     self.log = logging.getLogger(
         "jython.openhab.osgi.events.OsgiEventHandler")
     self.registration = bundle_context.registerService(
         EventHandler, self,
         hashtable((EventConstants.EVENT_TOPIC, ["*"])))
     self.log.info("Registered openHAB OSGI event listener service")
     self.log.debug("registration=%s", self.registration)
Example #3
0
 def __init__(self, test_case, trigger_item_name, result_item_name):
     self.test_case = test_case
     self.trigger_item_name = trigger_item_name
     self.result_item_name = result_item_name
     self.triggers = [
         ItemStateUpdateTrigger(trigger_item_name, OnOffType.ON)
     ]
     self.logger = logging.getLogger(type(self).__name__)
Example #4
0
 def __init__(self, callback, triggers, extended=False, name=None):
     self.triggers = triggers
     self.callback = callback
     self.extended = extended
     if name is None and hasattr(callback, '__name__'):
         name = callback.__name__
     self.log = logging.getLogger(LOG_PREFIX +
                                  ("" if name is None else ("." + name)))
Example #5
0
 def init(self, *args, **kwargs):
     scope.SimpleRule.__init__(self)
     set_uid_prefix(self)
     self.log = logging.getLogger(LOG_PREFIX + "." + clazz.__name__)
     clazz.__init__(self, *args, **kwargs)
     if self.description is None and clazz.__doc__:
         self.description = clazz.__doc__
     if hasattr(self, "getEventTriggers"):
         self.triggers = log_traceback(self.getEventTriggers)()
     elif hasattr(self, "getEventTrigger"):
         # For OH1 compatibility
         self.triggers = log_traceback(self.getEventTrigger)()
Example #6
0
    def __init__(self):
        self.log = logging.getLogger(LOG_PREFIX + "." + type(self).__module__ + "." + type(self).__name__)
        self.events = scope.events
        self.triggers = []
        self.description = type(self).__doc__ if type(self).__doc__ else None

        set_uid_prefix(self)
        super(scope.SimpleRule, self)

        self.execute = self.run#log_traceback(self.run)
        self.triggers = log_traceback(self.getEventTriggers)()
        addRule(self)
Example #7
0
class OsgiEventAdmin(object):
    log = logging.getLogger("jython.openhab.osgi.events.OsgiEventAdmin")

    _event_handler = None
    _event_listeners = []

    # Singleton
    class OsgiEventHandler(EventHandler):
        def __init__(self):
            self.log = logging.getLogger(
                "jython.openhab.osgi.events.OsgiEventHandler")
            self.registration = bundle_context.registerService(
                EventHandler, self,
                hashtable((EventConstants.EVENT_TOPIC, ["*"])))
            self.log.info("Registered openHAB OSGI event listener service")
            self.log.debug("registration=%s", self.registration)

        def handleEvent(self, event):
            self.log.debug("handling event %s", event)
            for listener in OsgiEventAdmin._event_listeners:
                try:
                    listener(event)
                except:
                    self.log.error("Listener failed: %s",
                                   traceback.format_exc())

        def dispose(self):
            self.registration.unregister()

    @classmethod
    def add_listener(cls, listener):
        cls.log.debug("adding listener admin=%s %s", id(cls), listener)
        cls._event_listeners.append(listener)
        if len(cls._event_listeners) == 1:
            if cls._event_handler is None:
                cls._event_handler = cls.OsgiEventHandler()

    @classmethod
    def remove_listener(cls, listener):
        cls.log.debug("removing listener %s", listener)
        if listener in cls._event_listeners:
            cls._event_listeners.remove(listener)
        if len(cls._event_listeners) == 0:
            if cls._event_handler is not None:
                cls.log.info(
                    "Unregistering openHAB OSGI event listener service")
                cls._event_handler.dispose()
                cls._event_handler = None
Example #8
0
def tts(ttsSay, ttsPrio=PRIO['MODERATE'], **keywords):
    '''
    Text To Speak function. First argument is positional and mandatory.
    Remaining arguments are optionally keyword arguments.
    Example: tts("Hello")
    Example: tts("Hello", PRIO['HIGH'], ttsRoom='Kitchen', ttsVol=42, ttsLang='en-GB', ttsVoice='Brian')
    @param param1: Text to speak (positional argument)
    @param param2: Priority as defined by PRIO. Defaults to PRIO['MODERATE']
    @param ttsRoom: Room to speak in. Defaults to "All".
    @return: this is a description of what is returned
    '''
    module_name = 'speak'
    log = logging.getLogger(LOG_PREFIX+'.'+module_name+'.tts')
    ttsRoom = 'All' if 'ttsRoom' not in keywords else keywords['ttsRoom']
    ttsVol = None if 'ttsVol' not in keywords else keywords['ttsVol']
    ttsLang = 'sv-SE' if 'ttsLang' not in keywords else keywords['ttsLang']
    ttsVoice = 'Astrid' if 'ttsVoice' not in keywords else keywords['ttsVoice']

    if not ttsVol or ttsVol >= 70:
        if ttsPrio == PRIO['LOW']:
            ttsVol = 30
        elif ttsPrio == PRIO['MODERATE']:
            ttsVol = 40
        elif ttsPrio == PRIO['HIGH']:
            ttsVol = 60
        elif ttsPrio == PRIO['EMERGENCY']:
            ttsVol = 70
        else:
            ttsVol = 50

    hour = DateTime.now().getHourOfDay()
    # (ideAlarm.isArmed('Bostaden') and ttsPrio <= PRIO['MODERATE']): didn't work out due to circulare reference of ideAlarm
    if (hour < 7 or hour > 21) or \
        ((getItemValue('Z1_Arming_Mode', 0) != 0) and ttsPrio <= PRIO['MODERATE']):
        log.info("TTS: ttsPrio is to low to speak \'" + ttsSay + "\' at this moment")
        return False

    log.info("TTS: Speaking \'" + ttsSay + "\'")
    # The following will execute as user openhab and that users public key
    # **must** have been added into authorized_keys
    os.system('/home/john/node-sonos2domo/speak.sh ' \
        + ttsRoom + ' ' + str(ttsVol) + ' ' + ttsLang + ' ' + ttsVoice + ' ' + ttsSay \
        + ' > /dev/null 2>&1 &')
    return True
Example #9
0
    def __init__(self, parent, cfg):
        '''
        Initialise the IdeAlarmSensor class

        Expects:
         - Parent object
         - cfg (dictionary) The sensor's configuration dictionary
        '''
        self.name = cfg['name']
        _label = itemRegistry.getItem(self.name).label
        self.label = _label if _label is not None else 'Sensor has no label'
        self.parent = weakref.ref(parent)  # <= garbage-collector safe!
        self.sensorClass = cfg['sensorClass']
        self.nag = cfg['nag']
        self.nagTimeoutMins = cfg['nagTimeoutMins']
        self.armWarn = cfg['armWarn']
        self.enabled = cfg['enabled']
        self.log = logging.getLogger(LOG_PREFIX + '.IdeAlarmSensor.' +
                                     self.name.decode('utf8'))
Example #10
0
def sms(message, subscriber='John'):
    '''
    Sends an SMS message through ClickaTell gateway.
    Example: sms("Hello")
    Example: sms("Hello", 'Carl')
    @param param1: SMS Text
    @param param2: Subscriber. A numeric phone number or a subscriber (String)
    '''
    log = logging.getLogger(LOG_PREFIX)

    ClickatellSender = '45123456789'
    ClickatellAPIUser = '******'
    ClickatellAPIPassw = 'riuyYGVTua8k'
    ClickatellAPIId = 1234567

    phoneNumbers = {
        'Anna': '467395646546',
        'Veronica': '461565136511'
    }

    phoneNumber = phoneNumbers.get(subscriber, None)
    if phoneNumber is None:
        if subscriber.isdigit():
            phoneNumber = subscriber
        else:
            log.error("Invalid subscriber")
            return
    gateway = Clickatell(ClickatellAPIUser, ClickatellAPIPassw, ClickatellAPIId, ClickatellSender)
    message = {'to': phoneNumber, 'text': message}
    log.info("Sending SMS to: " + str(phoneNumber))
    retval, msg = gateway.sendmsg(message)
    if retval == True:
        log.info("SMS Sent: " + msg)
    else:
        log.error("Error while sending SMS: " + str(retval))
    return
Example #11
0
    def __init__(self):
        '''
        Initialise the IdeAlarm class

        Expects:
         - Nothing really...
        '''
        self.__version__ = '1.0.0'
        self.__version_info__ = tuple(
            [int(num) for num in self.__version__.split('.')])

        self.log = logging.getLogger(LOG_PREFIX + '.IdeAlarm V' +
                                     self.__version__)

        import idealarm.config  ######### TEMP
        #reload(idealarm.config) ######### TEMP
        #self.log.debug('Configuration file has been reloaded!!!') ######### TEMP

        import idealarm.config as _cfg
        self.alarmTestMode = _cfg.ALARM_TEST_MODE
        self.loggingLevel = _cfg.LOGGING_LEVEL
        self.nagIntervalMinutes = _cfg.NAG_INTERVAL_MINUTES
        self.timeCreated = DateTime.now()

        self.alarmZones = []
        for i in range(len(_cfg.ALARM_ZONES)):
            zoneNumber = i + 1
            self.alarmZones.append(
                IdeAlarmZone(self, zoneNumber, _cfg.ALARM_ZONES[i]))

        for alarmZone in self.alarmZones:
            alarmZone.getNagSensors()

        self.log.info('ideAlarm object initialized with ' +
                      str(len(self.alarmZones)) + ' zones at ' +
                      str(self.timeCreated))
Example #12
0
import java.util
import traceback
import uuid
import traceback

from org.eclipse.smarthome.automation import Visibility
from org.eclipse.smarthome.config.core import Configuration
from org.eclipse.smarthome.automation.handler import TriggerHandler

import openhab
scriptExtension.importPreset("RuleSupport")
scriptExtension.importPreset("RuleFactories")

from openhab.log import logging
log = logging.getLogger("jython.openhab.triggers.OsgiEventTrigger")

from openhab.osgi.events import OsgiEventAdmin, event_dict, osgi_triggers


class OsgiEventTriggerHandlerFactory(TriggerHandlerFactory):
    def __init__(self):
        self.handlers = []

    class Handler(TriggerHandler):
        def __init__(self, factory, runtime_trigger):
            try:
                self.rule_engine_callback = None
                self.factory = factory
                self.trigger = osgi_triggers.get(runtime_trigger.id,
                                                 runtime_trigger)
                self.filter = getattr(self.trigger, "event_filter", None)
Example #13
0
# -*- coding: utf-8 -*-

import weakref  # Using this to prevent problems with garbage collection

# Get direct access to the JSR223 scope types and objects (for Jython modules imported into scripts)
from openhab.jsr223.scope import events, itemRegistry
from org.eclipse.smarthome.model.persistence.extensions import PersistenceExtensions

from openhab.triggers import ItemCommandTrigger, ItemStateChangeTrigger

from org.joda.time import DateTime
from openhab.log import logging, LOG_PREFIX
from logging import DEBUG, INFO, WARNING, ERROR
log = logging.getLogger(LOG_PREFIX + '.ideAlarm')

#import mylib.utils ######### TEMP
#reload(mylib.utils) ######### TEMP
from mylib.utils import getEvent, isActive, getItemValue, postUpdateCheckFirst, sendCommandCheckFirst, kw
from idealarm import custom
#reload(custom) ######### TEMP

ZONESTATUS = {'NORMAL': 0, 'ALERT': 1, 'ERROR': 2, 'TRIPPED': 3, 'ARMING': 4}
ARMINGMODE = {'DISARMED': 0, 'ARMED_HOME': 1, 'ARMED_AWAY': 2}


class IdeAlarmError(Exception):
    '''
    Base class for IdeAlarm errors
    '''

Example #14
0
import time

from openhab.osgi import get_service
from openhab.log import logging
log = logging.getLogger("registry_example")

rule_registry = get_service("org.eclipse.smarthome.automation.RuleRegistry")

# Get rules by tags
# Tags can be set in rule constructors
# Example: self.tags = ["tag1", "tag2"]
rules = rule_registry.getByTag("a")

for rule in rules:
    rule_status = rule_registry.getStatusInfo(rule.UID)
    log.info("rule_status=%s", rule_status)
    
    # disable a rule
    rule_registry.setEnabled(rule.UID, False)
    
    # later...
    time.sleep(1)
    
    # reenable the rule
    rule_registry.setEnabled(rule.UID, True)
    
    # fire the rule manually (with inputs)
    log.info("triggering rule manually")
    rule_registry.runNow(rule.UID, False, {'name': 'EXAMPLE'})
 def __init__(self, ip, mac):
     self._ip = ip
     self._mac = binascii.unhexlify(mac.replace(":", ""))
     self._logger = logging.getLogger('{}@{}'.format(self.__class__.__name__, ip))
     self._last_subscr_time = 0
     self._socket = _create_orvibo_socket()
Example #16
0
from openhab.actions import Astro
from openhab.log import logging
from java.util import Date

logging.getLogger("org.eclipse.smarthome.automation").info(
    "Sunrise: %s",
    Astro.getAstroSunsetStart(Date(2017, 7, 25), 38.897096, -77.036545).time)
Example #17
0
from org.openhab.core.items import ItemProvider

import openhab.osgi as osgi
from openhab.log import logging

_log = logging.getLogger("Jsr223ItemProvider")

class Jsr223ItemProvider(ItemProvider):
    def __init__(self):
        self._items = {}
        self._listeners = []

    def getItems(self):
        return self._items.values()

    def addItem(self, item):
        self._items[item.name] = item
        for listener in self._listeners:
            listener.itemAdded(self, item)

    def removeItem(self, item_name):
        item = self._items.get(item_name)
        if item:
            del self._items[item_name]
            for listener in self._listeners:
                listener.itemRemoved(self, item)

    def _removeAllItems(self):
        old_items = self._items
        self._items = {}
        for listener in self._listeners:
import collections

import openhab
from openhab.log import logging
log = logging.getLogger(
    "org.eclipse.smarthome.automation.JythonExtensionProvider")


def scriptLoaded(*args):
    try:
        from java.lang import Class
        name = "org.eclipse.smarthome.automation.module.script.ScriptExtensionProvider"
        ScriptExtensionProvider = Class.forName(
            name, True,
            scriptExtension.getClass().getClassLoader())

        class JythonExtensionProvider(ScriptExtensionProvider):
            def __init__(self):
                self._defaultPresets = set()
                self._presets = set()
                self._preset_values = collections.defaultdict(list)
                self._values = {}

            def getDefaultPresets(self):
                """These presets will always get injected into the ScriptEngine on instance creation."""
                return self._defaultPresets

            def getPresets(self):
                """Returns the provided Presets which are supported by this ScriptExtensionProvider.
                    Presets define imports which will be injected into the ScriptEngine if called by "importPreset".
                    Note: default preset names must also be in this list.
Example #19
0
from org.osgi.service.cm import ManagedService

from org.eclipse.smarthome.config.core import Configuration
from org.eclipse.smarthome.automation.handler import TriggerHandler

import openhab
from openhab.jsr223 import scope
scope.scriptExtension.importPreset("RuleSupport")

from openhab.osgi import bundle_context
from openhab.log import logging

import uuid
import java.util

log = logging.getLogger("jython.openhab.osgi.events")


def hashtable(*key_values):
    """
    :param key_values: 2-tuples of (key, value)
    :return: initialized Hashtable
    """
    ht = java.util.Hashtable()
    for k, v in key_values:
        ht.put(k, v)
    return ht


class OsgiEventAdmin(object):
    log = logging.getLogger("jython.openhab.osgi.events.OsgiEventAdmin")
Example #20
0
import json

import esper.java

import openhab
from openhab.log import logging
from openhab.osgi.events import OsgiEventAdmin

from java.lang import String, Double, Object
from java.util import Date

from com.espertech.esper.client import EPServiceProviderManager, Configuration

log = logging.getLogger("com.eclipse.smarthome.automation.Esper")

item_state_schema = {
    "type": String,
    "time": Date,
    "name": String,
    "state": Object
}

item_state_changed_schema = {
    "type": String,
    "time": Date,
    "name": String,
    "previous_state": Object,
    "state": Object
}

item_command_schema = {
Example #21
0
import re
import collections
import json
import pykka
import threading

from openhab.osgi.events import OsgiEventAdmin, log_event, event_dict
from org.osgi.framework import Filter

from openhab.log import logging

openhab_log = logging.getLogger("ActorExample")

from org.python.modules.sre import PatternObject

pykka.ActorRegistry.stop_all()


class LogActor(pykka.ThreadingActor):
    def __init__(self):
        pykka.ThreadingActor.__init__(self)

    def on_receive(self, message):
        openhab_log.info(message.get('message'))


logger_ref = LogActor.start()


def log(fmt, *args):
    logger_ref.tell({'message': fmt.format(*args)})