Exemplo n.º 1
0
    def __init__(self, sh, *args, **kwargs):

        global paired_nukis
        global nuki_event_items
        global nuki_action_items
        global nuki_door_items
        global nuki_battery_items
        global lock
        global request_queue

        if '.'.join(VERSION.split('.', 2)[:2]) <= '1.5':
            self.logger = logging.getLogger(__name__)

        self._base_url = self.get_parameter_value(
            'protocol') + '://' + self.get_parameter_value(
                'bridge_ip') + ":" + str(
                    self.get_parameter_value('bridge_port')) + '/'
        self._token = self.get_parameter_value('bridge_api_token')

        self._action = ''
        self._noWait = self.get_parameter_value('no_wait')
        self.items = Items.get_instance()

        if not self.init_webinterfaces():
            self._init_complete = False

        self._callback_ip = self.mod_http.get_local_ip_address(
        )  # get_parameter_value('bridge_callback_ip')
        self._callback_port = self.mod_http.get_local_servicesport(
        )  # get_parameter_value('bridge_callback_port')

        if self._callback_ip is None:  # 0.0.0.0 or empty means "all network interfaces" or self._callback_ip in ['0.0.0.0', '']:
            self._callback_ip = Utils.get_local_ipv4_address()

            if not self._callback_ip:
                self.logger.critical(
                    "Plugin '{}': Could not fetch internal ip address. Set it manually!"
                    .format(self.get_shortname()))
                self.alive = False
                return
            self.logger.info(
                "Plugin '{pluginname}': using local ip address {ip}".format(
                    pluginname=self.get_shortname(), ip=self._callback_ip))
        else:
            self.logger.info(
                "Plugin '{pluginname}': using given ip address {ip}".format(
                    pluginname=self.get_shortname(), ip=self._callback_ip))
        self._callback_url = "http://{ip}:{port}/nuki_callback/".format(
            ip=self._callback_ip, port=self._callback_port)

        self._lockActions = [
            1,  # unlock
            2,  # lock
            3,  # unlatch
            4,  # lockAndGo
            5,  # lockAndGoWithUnlatch
        ]

        self.init_webinterface()
Exemplo n.º 2
0
    def system_html(self):
#        now = datetime.datetime.now().strftime('%d.%m.%Y %H:%M')
        now = self.plugin.shtime.now().strftime('%d.%m.%Y %H:%M')
        system = platform.system()
        vers = platform.version()
        # node = platform.node()
        node = socket.getfqdn()
        arch = platform.machine()
        user = pwd.getpwuid(os.geteuid()).pw_name  # os.getlogin()

        ip = Utils.get_local_ipv4_address()
        ipv6 = Utils.get_local_ipv6_address()

        space = os.statvfs(self._sh_dir)
        freespace = space.f_frsize * space.f_bavail / 1024 / 1024

        # return host uptime
        uptime = time.mktime(datetime.datetime.now().timetuple()) - psutil.boot_time()
        days = uptime // (24 * 3600)
        uptime = uptime % (24 * 3600)
        hours = uptime // 3600
        uptime %= 3600
        minutes = uptime // 60
        uptime %= 60
        seconds = uptime
        uptime = self.age_to_string(days, hours, minutes, seconds)

        # return SmarthomeNG runtime
        rt = str(self._sh.runtime())
        daytest = rt.split(' ')
        if len(daytest) == 3:
            days = int(daytest[0])
            hours, minutes, seconds = [float(val) for val in str(daytest[2]).split(':')]
        else:
            days = 0
            hours, minutes, seconds = [float(val) for val in str(daytest[0]).split(':')]
        sh_uptime = self.age_to_string(days, hours, minutes, seconds)

        pyversion = "{0}.{1}.{2} {3}".format(sys.version_info[0], sys.version_info[1], sys.version_info[2],
                                             sys.version_info[3])

        #python_packages = self.getpackages()
        #req_dict = self.get_requirements_info()

        return self.render_template('system.html', 
                                    now=now, system=system, sh_vers=shngversion.get_shng_version(), sh_desc=shngversion.get_shng_description(), plg_vers=shngversion.get_plugins_version(), plg_desc=shngversion.get_plugins_description(), sh_dir=self._sh_dir,
                                    vers=vers, node=node, arch=arch, user=user, freespace=freespace, 
                                    uptime=uptime, sh_uptime=sh_uptime, pyversion=pyversion,
                                    ip=ip, ipv6=ipv6)
    def system_json(self):
        """
        Return System inforation as json (
        for Angular tests only)

        :return:
        """
        #        now = datetime.datetime.now().strftime('%d.%m.%Y %H:%M')
        now = self.plugin.shtime.now().strftime('%d.%m.%Y %H:%M')
        system = platform.system()
        vers = platform.version()
        # node = platform.node()
        node = socket.getfqdn()
        arch = platform.machine()
        user = pwd.getpwuid(os.geteuid()).pw_name  # os.getlogin()

        ip = Utils.get_local_ipv4_address()
        ipv6 = Utils.get_local_ipv6_address()

        space = os.statvfs(self._sh_dir)
        freespace = space.f_frsize * space.f_bavail / 1024 / 1024

        # return host uptime
        uptime = time.mktime(
            datetime.datetime.now().timetuple()) - psutil.boot_time()
        days = uptime // (24 * 3600)
        uptime = uptime % (24 * 3600)
        hours = uptime // 3600
        uptime %= 3600
        minutes = uptime // 60
        uptime %= 60
        seconds = uptime
        uptime = self.age_to_string(days, hours, minutes, seconds)

        # return SmarthomeNG runtime
        rt = str(Shtime.get_instance().runtime())
        daytest = rt.split(' ')
        if len(daytest) == 3:
            days = int(daytest[0])
            hours, minutes, seconds = [
                float(val) for val in str(daytest[2]).split(':')
            ]
        else:
            days = 0
            hours, minutes, seconds = [
                float(val) for val in str(daytest[0]).split(':')
            ]
        sh_uptime = self.age_to_string(days, hours, minutes, seconds)

        pyversion = "{0}.{1}.{2} {3}".format(sys.version_info[0],
                                             sys.version_info[1],
                                             sys.version_info[2],
                                             sys.version_info[3])

        #python_packages = self.getpackages()
        #req_dict = self.get_requirements_info()

        response = {}
        response['now'] = now
        response['system'] = system
        response['sh_vers'] = shngversion.get_shng_version()
        response['sh_desc'] = shngversion.get_shng_description()
        response['plg_vers'] = shngversion.get_plugins_version()
        response['plg_desc'] = shngversion.get_plugins_description()
        response['sh_dir'] = self._sh_dir
        response['vers'] = vers
        response['node'] = node
        response['arch'] = arch
        response['user'] = user
        response['freespace'] = freespace
        response['uptime'] = uptime
        response['sh_uptime'] = sh_uptime
        response['pyversion'] = pyversion
        response['ip'] = ip
        response['ipv6'] = ipv6

        return json.dumps(response)
Exemplo n.º 4
0
    def systeminfo_json(self):
        """
        Return System inforation as json (
        for Angular tests only)

        :return:
        """
#        now = datetime.datetime.now().strftime('%d.%m.%Y %H:%M')
        now = str(self.module.shtime.now())
        system = platform.system()

        self.read_linuxinfo()
        vers = Utils.strip_quotes(self.os_release.get('PRETTY_NAME', ''))
        if vers == '':
            vers = platform.version()
        arch = platform.machine()
        # node = platform.node()
        node = socket.getfqdn()
        user = pwd.getpwuid(os.geteuid()).pw_name  # os.getlogin()

        ipv6 = Utils.get_local_ipv6_address()
        ip = Utils.get_local_ipv4_address()

        space = os.statvfs(self._sh.base_dir)
        freespace = space.f_frsize * space.f_bavail / 1024 / 1024

        rt = Shtime.get_instance().runtime_as_dict()
        sh_runtime_seconds = rt['total_seconds']

        pyversion = "{0}.{1}.{2} {3}".format(sys.version_info[0], sys.version_info[1], sys.version_info[2],
                                             sys.version_info[3])

        response = {}
        response['now'] = now
        response['ostype'] = self.get_ostype()
        response['system'] = system
        response['sh_vers'] = shngversion.get_shng_version()
        response['sh_desc'] = shngversion.get_shng_description()
        response['plg_vers'] = shngversion.get_plugins_version()
        response['plg_desc'] = shngversion.get_plugins_description()
        response['sh_dir'] = self._sh.base_dir

        response['vers'] = vers
        response['node'] = node
        response['arch'] = arch
        response['user'] = user
        response['freespace'] = freespace
        response['hardware'] = self.get_rasppi_info()
        if response['hardware'] == '':
            response['hardware'] = self.cpu_info.get('brand_raw', '')
        response['rasppi'] = self.running_on_rasppi()

        response['uptime'] = time.mktime(datetime.datetime.now().timetuple()) - psutil.boot_time()
        response['sh_uptime'] = sh_runtime_seconds
        response['pyversion'] = pyversion
        response['pypath'] = self._sh.python_bin
        response['ip'] = ip
        response['ipv6'] = ipv6
        response['pid'] = str(lib.daemon.read_pidfile(self._sh._pidfile))

        self.logger.warning("admin: systeminfo_json: response = {}".format(response))
        return json.dumps(response)
Exemplo n.º 5
0
    def systeminfo_json(self):
        """
        Return System inforation as json (
        for Angular tests only)

        :return:
        """
        #        now = datetime.datetime.now().strftime('%d.%m.%Y %H:%M')
        now = str(self.module.shtime.now())
        system = platform.system()
        vers = platform.version()
        # node = platform.node()
        node = socket.getfqdn()
        arch = platform.machine()
        user = pwd.getpwuid(os.geteuid()).pw_name  # os.getlogin()

        # ipv6 = Utils.get_local_ipv6_address()
        ip = Utils.get_local_ipv4_address()
        ipv6 = ''

        space = os.statvfs(self._sh.base_dir)
        freespace = space.f_frsize * space.f_bavail / 1024 / 1024

        # rt = str(self.module.shtime.runtime())
        # daytest = rt.split(' ')
        # if len(daytest) == 3:
        #     days = int(daytest[0])
        #     hours, minutes, seconds = [float(val) for val in str(daytest[2]).split(':')]
        # else:
        #     days = 0
        #     hours, minutes, seconds = [float(val) for val in str(daytest[0]).split(':')]
        # sh_runtime_seconds = days * 24 * 3600 + hours * 3600 + minutes * 60 + seconds

        rt = Shtime.get_instance().runtime_as_dict()
        sh_runtime_seconds = rt['total_seconds']

        pyversion = "{0}.{1}.{2} {3}".format(sys.version_info[0],
                                             sys.version_info[1],
                                             sys.version_info[2],
                                             sys.version_info[3])

        response = {}
        response['now'] = now
        response['system'] = system
        response['sh_vers'] = shngversion.get_shng_version()
        response['sh_desc'] = shngversion.get_shng_description()
        response['plg_vers'] = shngversion.get_plugins_version()
        response['plg_desc'] = shngversion.get_plugins_description()
        response['sh_dir'] = self._sh.base_dir

        response['vers'] = vers
        response['node'] = node
        response['arch'] = arch
        response['user'] = user
        response['freespace'] = freespace
        response['uptime'] = time.mktime(
            datetime.datetime.now().timetuple()) - psutil.boot_time()
        response['sh_uptime'] = sh_runtime_seconds
        response['pyversion'] = pyversion
        response['ip'] = ip
        response['ipv6'] = ipv6

        self.logger.debug(
            "admin: systeminfo_json: response = {}".format(response))
        return json.dumps(response)
Exemplo n.º 6
0
    def __init__(self, sh, testparam=''):
        """
        Initialization Routine for the module
        """
        # TO DO: Shortname anders setzen (oder warten bis der Plugin Loader es beim Laden setzt
        self._shortname = self.__class__.__name__
        self._shortname = self._shortname.lower()

        self.logger = logging.getLogger(__name__)
        self._sh = sh
        self.shtime = Shtime.get_instance()
        self.logger.debug("Module '{}': Initializing".format(self._shortname))

        self.logger.debug("Module '{}': Parameters = '{}'".format(
            self._shortname, str(self._parameters)))

        # for authentication
        self.send_hash = 'shNG0160$'
        self.jwt_secret = 'SmartHomeNG$0815'

        try:
            self.mod_http = Modules.get_instance().get_module(
                'http'
            )  # try/except to handle running in a core version that does not support modules
        except:
            self.mod_http = None
        if self.mod_http is None:
            self.logger.error(
                "Module '{}': Not initializing - Module 'http' has to be loaded BEFORE this module"
                .format(self._shortname))
            self._init_complete = False
            return

        self._showtraceback = self.mod_http._showtraceback

        try:
            self.login_expiration = self._parameters['login_expiration']
            self.login_autorenew = self._parameters['login_autorenew']
            self.pypi_timeout = self._parameters['pypi_timeout']
            self.itemtree_fullpath = self._parameters['itemtree_fullpath']
            self.itemtree_searchstart = self._parameters[
                'itemtree_searchstart']
            self.websocket_host = self._parameters['websocket_host']
            self.websocket_port = self._parameters['websocket_port']
            self.log_chunksize = self._parameters['log_chunksize']
            self.developer_mode = self._parameters['developer_mode']
            self.click_dropdown_header = self._parameters[
                'click_dropdown_header']
        except:
            self.logger.critical(
                "Module '{}': Inconsistent module (invalid metadata definition)"
                .format(self._shortname))
            self._init_complete = False
            return

        mysuburl = ''
        if suburl != '':
            mysuburl = '/' + suburl
        ip = Utils.get_local_ipv4_address()
        self._port = self.mod_http._port
        # self.logger.warning('port = {}'.format(self._port))
        self.shng_url_root = 'http://' + ip + ':' + str(
            self._port)  # for links mto plugin webinterfaces
        self.url_root = self.shng_url_root + mysuburl
        self.api_url_root = self.shng_url_root + 'api'
        self.api2_url_root = self.shng_url_root + 'api2'