From f593e359704b362690e69b8e67ddfbd0c648b69f Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Fri, 1 May 2015 15:14:27 +0200 Subject: [PATCH 01/14] Update Docker for python3 --- Dockerfile | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index 675e0c0e..b2d99484 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,12 @@ -FROM debian:wheezy +FROM debian:jessie MAINTAINER bibi21000 -ADD . /home/docker-py2 -WORKDIR /home/docker-py2 -RUN apt-get update && apt-get install -y make python -RUN make python-deps -RUN make autobuild-deps +ADD . /home/docker-py3 +WORKDIR /home/docker-py3 +RUN apt-get update && apt-get install -y make python3 +RUN make PYTHON_EXEC=python3 python-deps +RUN make PYTHON_EXEC=python3 autobuild-deps RUN env -RUN make update -RUN make build -RUN make install -RUN make autobuild-tests +RUN make PYTHON_EXEC=python3 update +RUN make PYTHON_EXEC=python3 build +RUN make PYTHON_EXEC=python3 install +RUN make PYTHON_EXEC=python3 autobuild-tests From df37df56e087bdf8736d3b5803812971a0f0f7bd Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Fri, 1 May 2015 16:59:07 +0200 Subject: [PATCH 02/14] Update Docker for python3 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b2d99484..548d6414 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,5 +8,5 @@ RUN make PYTHON_EXEC=python3 autobuild-deps RUN env RUN make PYTHON_EXEC=python3 update RUN make PYTHON_EXEC=python3 build -RUN make PYTHON_EXEC=python3 install +RUN make PYTHON_EXEC=python3 install-api RUN make PYTHON_EXEC=python3 autobuild-tests From 72a14fa153696a99ae6835459a4bedf0e88c367b Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Sun, 3 May 2015 16:22:15 +0200 Subject: [PATCH 03/14] Auto-merge from master --- src-web/pyozwweb/app.conf | 6 ++++ tests/api/test_value.py | 73 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 src-web/pyozwweb/app.conf create mode 100644 tests/api/test_value.py diff --git a/src-web/pyozwweb/app.conf b/src-web/pyozwweb/app.conf new file mode 100644 index 00000000..14fe192c --- /dev/null +++ b/src-web/pyozwweb/app.conf @@ -0,0 +1,6 @@ +[server] +host = 127.0.0.1 +port = 5000 + +[zwave] +device = /dev/ttyUSB0 diff --git a/tests/api/test_value.py b/tests/api/test_value.py new file mode 100644 index 00000000..cc6aae61 --- /dev/null +++ b/tests/api/test_value.py @@ -0,0 +1,73 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +""" +.. module:: tests + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + :platform: Unix, Windows, MacOS X + :sinopsis: openzwave Library + +.. moduleauthor: bibi21000 aka Sébastien GALLET + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. + +""" + +import sys, os, shutil +import time +import unittest +from pprint import pprint +import datetime +import random +import socket +import libopenzwave +import re +import time +import sys +if sys.hexversion >= 0x3000000: + from pydispatch import dispatcher +else: + from louie import dispatcher +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from tests.common import pyozw_version +from tests.common import SLEEP +from tests.api.common import TestApi +from tests.common import TestPyZWave +import json + +class TestValue(TestApi): + + def test_200_values_to_dict(self): + for node in self.network.nodes: + for value in self.network.nodes[node].values: + val = self.network.nodes[node].values[value].to_dict() + self.assertEqual(type(val), type({})) + try : + res = json.dumps(val) + except TypeError: + res = None + self.assertNotEqual(res, None) + +if __name__ == '__main__': + sys.argv.append('-v') + unittest.main() From 0adc713613c35c6dca80f8f7067509179f161fd1 Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Sun, 3 May 2015 16:27:28 +0200 Subject: [PATCH 04/14] Auto-merge from master --- docs/CHANGELOG.rst | 3 + docs/html/CHANGELOG.html | 2 + docs/html/_sources/CHANGELOG.txt | 3 + docs/html/_sources/pyozwweb.txt | 15 +- docs/html/controller.html | 34 +- docs/html/coverage/index.html | 92 +- docs/html/coverage/openzwave_command.html | 1614 +- docs/html/coverage/openzwave_controller.html | 1936 ++- docs/html/coverage/openzwave_group.html | 376 +- docs/html/coverage/openzwave_network.html | 4100 ++--- docs/html/coverage/openzwave_node.html | 2256 +-- docs/html/coverage/openzwave_object.html | 880 +- docs/html/coverage/openzwave_option.html | 794 +- docs/html/coverage/openzwave_scene.html | 572 +- docs/html/coverage/openzwave_singleton.html | 62 +- docs/html/coverage/openzwave_value.html | 1374 +- docs/html/coverage/pyozwman_ozwsh_main.html | 1418 +- .../html/coverage/pyozwman_ozwsh_widgets.html | 6163 ++++--- docs/html/coverage/pyozwweb_app.html | 306 +- docs/html/coverage/pyozwweb_app_listener.html | 408 +- .../coverage/pyozwweb_app_socket_chat.html | 456 +- .../coverage/pyozwweb_app_socket_ozwave.html | 772 +- docs/html/coverage/pyozwweb_app_views.html | 176 +- docs/html/coverage/pyozwweb_config.html | 120 +- docs/html/coverage/status.dat | 106 +- docs/html/genindex.html | 38 +- docs/html/group.html | 18 + docs/html/network.html | 18 +- docs/html/node.html | 42 +- docs/html/nosetests/nosetests.html | 452 +- docs/html/objects.inv | Bin 4794 -> 4860 bytes docs/html/pylint/report.html | 13647 +++++++++++++++- docs/html/pyozwweb.html | 13 +- docs/html/scene.html | 6 +- docs/html/searchindex.js | 2 +- docs/html/value.html | 8 +- docs/joomla/CHANGELOG.html | 2 + docs/joomla/_sources/CHANGELOG.txt | 3 + docs/joomla/_sources/pyozwweb.txt | 15 +- docs/joomla/controller.html | 34 +- docs/joomla/coverage/index.html | 92 +- docs/joomla/coverage/openzwave_command.html | 1614 +- .../joomla/coverage/openzwave_controller.html | 1936 ++- docs/joomla/coverage/openzwave_group.html | 376 +- docs/joomla/coverage/openzwave_network.html | 4100 ++--- docs/joomla/coverage/openzwave_node.html | 2256 +-- docs/joomla/coverage/openzwave_object.html | 880 +- docs/joomla/coverage/openzwave_option.html | 794 +- docs/joomla/coverage/openzwave_scene.html | 572 +- docs/joomla/coverage/openzwave_singleton.html | 62 +- docs/joomla/coverage/openzwave_value.html | 1374 +- docs/joomla/coverage/pyozwman_ozwsh_main.html | 1418 +- .../coverage/pyozwman_ozwsh_widgets.html | 6163 ++++--- docs/joomla/coverage/pyozwweb_app.html | 306 +- .../coverage/pyozwweb_app_listener.html | 408 +- .../coverage/pyozwweb_app_socket_chat.html | 456 +- .../coverage/pyozwweb_app_socket_ozwave.html | 772 +- docs/joomla/coverage/pyozwweb_app_views.html | 176 +- docs/joomla/coverage/pyozwweb_config.html | 120 +- docs/joomla/coverage/status.dat | 106 +- docs/joomla/group.html | 18 + docs/joomla/network.html | 18 +- docs/joomla/node.html | 42 +- docs/joomla/nosetests/nosetests.html | 452 +- docs/joomla/objects.inv | Bin 4794 -> 4860 bytes docs/joomla/pylint/report.html | 13647 +++++++++++++++- docs/joomla/pyozwweb.html | 13 +- docs/joomla/scene.html | 6 +- docs/joomla/searchindex.js | 2 +- docs/joomla/value.html | 8 +- docs/pyozwweb.rst | 15 +- src-api/openzwave/command.py | 5 + src-api/openzwave/controller.py | 74 +- src-api/openzwave/group.py | 23 + src-api/openzwave/network.py | 28 +- src-api/openzwave/node.py | 55 +- src-api/openzwave/object.py | 5 + src-api/openzwave/option.py | 5 + src-api/openzwave/scene.py | 12 +- src-api/openzwave/singleton.py | 5 + src-api/openzwave/value.py | 19 +- src-manager/pyozwman/ozwsh_main.py | 5 + src-manager/pyozwman/ozwsh_widgets.py | 5 + src-web/pyozwweb/app/__init__.py | 27 +- src-web/pyozwweb/app/listener.py | 20 +- src-web/pyozwweb/app/socket/chat.py | 5 + src-web/pyozwweb/app/socket/ozwave.py | 6 +- .../pyozwweb/app/templates/controller.html | 2 - src-web/pyozwweb/app/templates/debug.html | 2 - src-web/pyozwweb/app/templates/home.html | 2 - src-web/pyozwweb/app/templates/map.html | 2 - src-web/pyozwweb/app/templates/node.html | 2 - src-web/pyozwweb/app/templates/scenes.html | 2 - src-web/pyozwweb/app/templates/values.html | 2 - src-web/pyozwweb/app/views.py | 2 + src-web/pyozwweb/config.py | 4 + src-web/pyozwweb/run.py | 6 +- 97 files changed, 52550 insertions(+), 24313 deletions(-) diff --git a/docs/CHANGELOG.rst b/docs/CHANGELOG.rst index 4c2f59c8..5b6c2e33 100755 --- a/docs/CHANGELOG.rst +++ b/docs/CHANGELOG.rst @@ -8,9 +8,12 @@ To do for python-openzwave 0.3.0-final : * Add more tests for the library : switches, dimmers, polling, heal, test, ... * Fix reloader problem : the network ist stop/start every time the app is realoaded. But in this case, the process terminates normally. But there seems to be 2 running instances of the network. + * When updating config.py for pyozwweb, need to python setup-web.py install again ... need to change this. Add a config file. + python-openzwave 0.3.0-alpha4: * Add pyozwman script : after installing you can launch it wit : Usage: ozwsh [--device=/dev/ttyUSB0] [--log=Debug] ... + * Add pyozwweb confiuration file. python-openzwave 0.3.0-alpha3: diff --git a/docs/html/CHANGELOG.html b/docs/html/CHANGELOG.html index bf8fb6ee..5ccc851c 100644 --- a/docs/html/CHANGELOG.html +++ b/docs/html/CHANGELOG.html @@ -51,12 +51,14 @@

Changelog
  • Add more tests for the library : switches, dimmers, polling, heal, test, ...
  • Fix reloader problem : the network ist stop/start every time the app is realoaded. But in this case, the process terminates normally. But there seems to be 2 running instances of the network.
  • +
  • When updating config.py for pyozwweb, need to python setup-web.py install again ... need to change this. Add a config file.
  • python-openzwave 0.3.0-alpha4:
    • Add pyozwman script : after installing you can launch it wit : Usage: ozwsh [–device=/dev/ttyUSB0] [–log=Debug] ...
    • +
    • Add pyozwweb confiuration file.
    diff --git a/docs/html/_sources/CHANGELOG.txt b/docs/html/_sources/CHANGELOG.txt index 4c2f59c8..5b6c2e33 100644 --- a/docs/html/_sources/CHANGELOG.txt +++ b/docs/html/_sources/CHANGELOG.txt @@ -8,9 +8,12 @@ To do for python-openzwave 0.3.0-final : * Add more tests for the library : switches, dimmers, polling, heal, test, ... * Fix reloader problem : the network ist stop/start every time the app is realoaded. But in this case, the process terminates normally. But there seems to be 2 running instances of the network. + * When updating config.py for pyozwweb, need to python setup-web.py install again ... need to change this. Add a config file. + python-openzwave 0.3.0-alpha4: * Add pyozwman script : after installing you can launch it wit : Usage: ozwsh [--device=/dev/ttyUSB0] [--log=Debug] ... + * Add pyozwweb confiuration file. python-openzwave 0.3.0-alpha3: diff --git a/docs/html/_sources/pyozwweb.txt b/docs/html/_sources/pyozwweb.txt index f71f97dc..275a04d2 100644 --- a/docs/html/_sources/pyozwweb.txt +++ b/docs/html/_sources/pyozwweb.txt @@ -20,11 +20,12 @@ Update the config : .. code-block:: bash - vim config.py + vim app.conf - ZWAVE_DEVICE = "/dev/ttyUSB0" + [zwave] + device = /dev/ttyUSB0 -You can fine tune logging in logging.conf. You can run the app : +You can fine tune logging in logging.conf and run the app : .. code-block:: bash @@ -32,6 +33,14 @@ You can fine tune logging in logging.conf. You can run the app : And connect to http://127.0.0.1:5000 using your favorite browser. +You can also change the ip/port to allow remote connections : + +.. code-block:: bash + + [server] + host = 0.0.0.0 + port = 8080 + Source ------ diff --git a/docs/html/controller.html b/docs/html/controller.html index b692cfcb..7c66a6a2 100644 --- a/docs/html/controller.html +++ b/docs/html/controller.html @@ -521,6 +521,12 @@

    Controller documentation +
    +do_poll_statistics()
    +

    Timer based polling system for statistics

    +
    +
    get_stats_label(stat)
    @@ -754,6 +760,22 @@

    Controller documentation +
    +poll_stats
    +

    The interval for polling statistics

    + +++ + + + + + +
    Returns:The interval in seconds
    Return type:float
    +

    +
    python_library_version
    @@ -828,14 +850,24 @@

    Controller documentation +
    +stop()
    +

    Stop the controller and all this threads.

    +

    +
    -to_dict()
    +to_dict(extras=['all'])

    Return a dict representation of the controller.

    + + + + diff --git a/docs/html/coverage/index.html b/docs/html/coverage/index.html index 898e58dd..3a9f9d4c 100644 --- a/docs/html/coverage/index.html +++ b/docs/html/coverage/index.html @@ -18,7 +18,7 @@ - - + + - + @@ -76,8 +76,8 @@

    Coverage report:

    - - + + @@ -85,8 +85,8 @@

    Coverage report:

    - - + + @@ -94,8 +94,8 @@

    Coverage report:

    - - + + @@ -103,8 +103,8 @@

    Coverage report:

    - - + + @@ -112,8 +112,8 @@

    Coverage report:

    - - + + @@ -121,8 +121,8 @@

    Coverage report:

    - - + + @@ -130,8 +130,8 @@

    Coverage report:

    - - + + @@ -139,8 +139,8 @@

    Coverage report:

    - - + + @@ -148,8 +148,8 @@

    Coverage report:

    - - + + @@ -157,8 +157,8 @@

    Coverage report:

    - - + + @@ -175,20 +175,20 @@

    Coverage report:

    - - + + - + - - + + - + @@ -202,20 +202,20 @@

    Coverage report:

    - - + + - + - - + + - + @@ -229,34 +229,34 @@

    Coverage report:

    - - + + - + - - + + - + - - + + - + - + diff --git a/docs/html/coverage/openzwave_command.html b/docs/html/coverage/openzwave_command.html index 771a43a5..8138ef9b 100644 --- a/docs/html/coverage/openzwave_command.html +++ b/docs/html/coverage/openzwave_command.html @@ -25,9 +25,9 @@

    Coverage for openzwave.command :

    - 123 statements   + 128 statements   0 run - 123 missing + 128 missing 0 excluded

    @@ -88,25 +88,25 @@

    25

    26

    27

    -

    28

    -

    29

    +

    28

    +

    29

    30

    31

    32

    -

    33

    -

    34

    -

    35

    +

    33

    +

    34

    +

    35

    36

    37

    38

    39

    40

    41

    -

    42

    -

    43

    -

    44

    +

    42

    +

    43

    +

    44

    45

    -

    46

    +

    46

    47

    48

    49

    @@ -333,29 +333,29 @@

    270

    271

    272

    -

    273

    +

    273

    274

    275

    276

    277

    -

    278

    +

    278

    279

    280

    281

    282

    -

    283

    -

    284

    -

    285

    -

    286

    -

    287

    +

    283

    +

    284

    +

    285

    +

    286

    +

    287

    288

    -

    289

    +

    289

    290

    -

    291

    -

    292

    -

    293

    +

    291

    +

    292

    +

    293

    294

    -

    295

    +

    295

    296

    297

    298

    @@ -365,32 +365,32 @@

    302

    303

    304

    -

    305

    +

    305

    306

    307

    -

    308

    +

    308

    309

    -

    310

    +

    310

    311

    312

    -

    313

    +

    313

    314

    315

    316

    317

    -

    318

    -

    319

    -

    320

    -

    321

    -

    322

    +

    318

    +

    319

    +

    320

    +

    321

    +

    322

    323

    -

    324

    +

    324

    325

    -

    326

    -

    327

    -

    328

    +

    326

    +

    327

    +

    328

    329

    -

    330

    +

    330

    331

    332

    333

    @@ -400,38 +400,38 @@

    337

    338

    339

    -

    340

    +

    340

    341

    342

    -

    343

    +

    343

    344

    -

    345

    +

    345

    346

    347

    -

    348

    +

    348

    349

    350

    351

    352

    353

    -

    354

    -

    355

    -

    356

    +

    354

    +

    355

    +

    356

    357

    -

    358

    -

    359

    +

    358

    +

    359

    360

    -

    361

    +

    361

    362

    -

    363

    +

    363

    364

    -

    365

    -

    366

    +

    365

    +

    366

    367

    368

    369

    370

    -

    371

    +

    371

    372

    373

    374

    @@ -442,85 +442,85 @@

    379

    380

    381

    -

    382

    +

    382

    383

    384

    -

    385

    +

    385

    386

    -

    387

    +

    387

    388

    389

    -

    390

    +

    390

    391

    392

    393

    394

    395

    -

    396

    -

    397

    -

    398

    -

    399

    +

    396

    +

    397

    +

    398

    +

    399

    400

    401

    -

    402

    -

    403

    -

    404

    +

    402

    +

    403

    +

    404

    405

    -

    406

    +

    406

    407

    408

    409

    410

    411

    -

    412

    -

    413

    -

    414

    -

    415

    -

    416

    +

    412

    +

    413

    +

    414

    +

    415

    +

    416

    417

    418

    419

    420

    -

    421

    +

    421

    422

    423

    -

    424

    +

    424

    425

    426

    -

    427

    -

    428

    +

    427

    +

    428

    429

    -

    430

    +

    430

    431

    432

    433

    434

    435

    -

    436

    -

    437

    -

    438

    +

    436

    +

    437

    +

    438

    439

    -

    440

    -

    441

    -

    442

    -

    443

    +

    440

    +

    441

    +

    442

    +

    443

    444

    -

    445

    +

    445

    446

    447

    448

    449

    450

    -

    451

    -

    452

    -

    453

    +

    451

    +

    452

    +

    453

    454

    -

    455

    -

    456

    -

    457

    -

    458

    +

    455

    +

    456

    +

    457

    +

    458

    459

    -

    460

    +

    460

    461

    462

    463

    @@ -531,46 +531,46 @@

    468

    469

    470

    -

    471

    +

    471

    472

    473

    -

    474

    +

    474

    475

    -

    476

    +

    476

    477

    478

    -

    479

    +

    479

    480

    481

    482

    483

    484

    -

    485

    -

    486

    -

    487

    -

    488

    +

    485

    +

    486

    +

    487

    +

    488

    489

    490

    -

    491

    -

    492

    -

    493

    +

    491

    +

    492

    +

    493

    494

    -

    495

    +

    495

    496

    497

    498

    499

    500

    -

    501

    -

    502

    -

    503

    +

    501

    +

    502

    +

    503

    504

    -

    505

    -

    506

    -

    507

    -

    508

    +

    505

    +

    506

    +

    507

    +

    508

    509

    -

    510

    +

    510

    511

    512

    513

    @@ -581,65 +581,65 @@

    518

    519

    520

    -

    521

    +

    521

    522

    523

    -

    524

    +

    524

    525

    -

    526

    +

    526

    527

    528

    -

    529

    +

    529

    530

    531

    532

    533

    534

    535

    -

    536

    -

    537

    -

    538

    -

    539

    -

    540

    +

    536

    +

    537

    +

    538

    +

    539

    +

    540

    541

    542

    -

    543

    -

    544

    +

    543

    +

    544

    545

    546

    547

    -

    548

    -

    549

    +

    548

    +

    549

    550

    551

    -

    552

    +

    552

    553

    -

    554

    -

    555

    -

    556

    +

    554

    +

    555

    +

    556

    557

    -

    558

    +

    558

    559

    560

    561

    562

    563

    -

    564

    -

    565

    -

    566

    +

    564

    +

    565

    +

    566

    567

    -

    568

    -

    569

    -

    570

    -

    571

    +

    568

    +

    569

    +

    570

    +

    571

    572

    -

    573

    -

    574

    +

    573

    +

    574

    575

    576

    577

    578

    -

    579

    +

    579

    580

    581

    582

    @@ -653,43 +653,43 @@

    590

    591

    592

    -

    593

    -

    594

    +

    593

    +

    594

    595

    -

    596

    +

    596

    597

    598

    -

    599

    -

    600

    -

    601

    -

    602

    -

    603

    +

    599

    +

    600

    +

    601

    +

    602

    +

    603

    604

    -

    605

    +

    605

    606

    -

    607

    +

    607

    608

    609

    610

    611

    612

    613

    -

    614

    -

    615

    -

    616

    +

    614

    +

    615

    +

    616

    617

    -

    618

    -

    619

    -

    620

    -

    621

    +

    618

    +

    619

    +

    620

    +

    621

    622

    -

    623

    -

    624

    +

    623

    +

    624

    625

    626

    627

    628

    -

    629

    +

    629

    630

    631

    632

    @@ -699,54 +699,59 @@

    636

    637

    638

    -

    639

    +

    639

    640

    641

    -

    642

    +

    642

    643

    -

    644

    +

    644

    645

    646

    -

    647

    +

    647

    648

    649

    650

    651

    652

    -

    653

    -

    654

    -

    655

    -

    656

    +

    653

    +

    654

    +

    655

    +

    656

    657

    658

    -

    659

    -

    660

    -

    661

    +

    659

    +

    660

    +

    661

    662

    -

    663

    +

    663

    664

    665

    666

    667

    668

    -

    669

    -

    670

    -

    671

    +

    669

    +

    670

    +

    671

    672

    -

    673

    -

    674

    -

    675

    -

    676

    +

    673

    +

    674

    +

    675

    +

    676

    677

    -

    678

    +

    678

    679

    680

    681

    682

    683

    -

    684

    -

    685

    -

    686

    +

    684

    +

    685

    +

    686

    +

    687

    +

    688

    +

    689

    +

    690

    +

    691

    diff --git a/docs/html/coverage/openzwave_controller.html b/docs/html/coverage/openzwave_controller.html index b82a241d..4ba1ae41 100644 --- a/docs/html/coverage/openzwave_controller.html +++ b/docs/html/coverage/openzwave_controller.html @@ -25,9 +25,9 @@

    Coverage for openzwave.controller :

    - 175 statements   + 206 statements   0 run - 175 missing + 206 missing 0 excluded

    @@ -90,31 +90,31 @@

    27

    28

    29

    -

    30

    +

    30

    31

    32

    33

    34

    35

    -

    36

    +

    36

    37

    38

    39

    40

    -

    41

    +

    41

    42

    43

    44

    45

    46

    -

    47

    -

    48

    -

    49

    -

    50

    -

    51

    -

    52

    +

    47

    +

    48

    +

    49

    +

    50

    +

    51

    +

    52

    53

    -

    54

    +

    54

    55

    56

    57

    @@ -151,27 +151,27 @@

    88

    89

    90

    -

    91

    -

    92

    -

    93

    -

    94

    -

    95

    -

    96

    +

    91

    +

    92

    +

    93

    +

    94

    +

    95

    +

    96

    97

    98

    99

    100

    101

    -

    102

    +

    102

    103

    -

    104

    +

    104

    105

    106

    107

    -

    108

    +

    108

    109

    110

    -

    111

    +

    111

    112

    113

    114

    @@ -182,205 +182,205 @@

    119

    120

    121

    -

    122

    +

    122

    123

    -

    124

    -

    125

    -

    126

    -

    127

    -

    128

    +

    124

    +

    125

    +

    126

    +

    127

    +

    128

    129

    -

    130

    +

    130

    131

    132

    133

    134

    -

    135

    -

    136

    -

    137

    -

    138

    -

    139

    -

    140

    -

    141

    +

    135

    +

    136

    +

    137

    +

    138

    +

    139

    +

    140

    +

    141

    142

    143

    144

    -

    145

    +

    145

    146

    -

    147

    -

    148

    -

    149

    -

    150

    -

    151

    -

    152

    +

    147

    +

    148

    +

    149

    +

    150

    +

    151

    +

    152

    153

    154

    -

    155

    -

    156

    +

    155

    +

    156

    157

    158

    159

    -

    160

    -

    161

    +

    160

    +

    161

    162

    -

    163

    +

    163

    164

    -

    165

    +

    165

    166

    -

    167

    +

    167

    168

    169

    -

    170

    +

    170

    171

    172

    -

    173

    +

    173

    174

    175

    -

    176

    +

    176

    177

    -

    178

    +

    178

    179

    180

    181

    -

    182

    +

    182

    183

    -

    184

    +

    184

    185

    186

    -

    187

    -

    188

    +

    187

    +

    188

    189

    -

    190

    +

    190

    191

    -

    192

    -

    193

    +

    192

    +

    193

    194

    -

    195

    +

    195

    196

    197

    198

    199

    200

    -

    201

    -

    202

    +

    201

    +

    202

    203

    204

    -

    205

    -

    206

    -

    207

    +

    205

    +

    206

    +

    207

    208

    -

    209

    +

    209

    210

    211

    212

    213

    214

    -

    215

    +

    215

    216

    -

    217

    -

    218

    -

    219

    +

    217

    +

    218

    +

    219

    220

    -

    221

    +

    221

    222

    -

    223

    +

    223

    224

    225

    -

    226

    +

    226

    227

    -

    228

    +

    228

    229

    230

    231

    -

    232

    +

    232

    233

    -

    234

    +

    234

    235

    236

    -

    237

    +

    237

    238

    -

    239

    +

    239

    240

    241

    242

    -

    243

    +

    243

    244

    -

    245

    +

    245

    246

    247

    -

    248

    +

    248

    249

    -

    250

    +

    250

    251

    252

    253

    -

    254

    +

    254

    255

    -

    256

    +

    256

    257

    258

    -

    259

    +

    259

    260

    -

    261

    +

    261

    262

    263

    264

    -

    265

    +

    265

    266

    -

    267

    +

    267

    268

    269

    -

    270

    -

    271

    +

    270

    +

    271

    272

    -

    273

    +

    273

    274

    -

    275

    -

    276

    +

    275

    +

    276

    277

    -

    278

    +

    278

    279

    280

    281

    282

    283

    -

    284

    -

    285

    +

    284

    +

    285

    286

    287

    -

    288

    -

    289

    -

    290

    +

    288

    +

    289

    +

    290

    291

    -

    292

    +

    292

    293

    294

    295

    296

    297

    -

    298

    -

    299

    +

    298

    +

    299

    300

    301

    -

    302

    -

    303

    -

    304

    +

    302

    +

    303

    +

    304

    305

    -

    306

    +

    306

    307

    308

    309

    310

    311

    -

    312

    +

    312

    313

    -

    314

    -

    315

    -

    316

    +

    314

    +

    315

    +

    316

    317

    -

    318

    +

    318

    319

    -

    320

    +

    320

    321

    322

    323

    @@ -389,9 +389,9 @@

    326

    327

    328

    -

    329

    +

    329

    330

    -

    331

    +

    331

    332

    333

    334

    @@ -400,9 +400,9 @@

    337

    338

    339

    -

    340

    +

    340

    341

    -

    342

    +

    342

    343

    344

    345

    @@ -413,69 +413,69 @@

    350

    351

    352

    -

    353

    +

    353

    354

    -

    355

    +

    355

    356

    -

    357

    +

    357

    358

    -

    359

    +

    359

    360

    361

    362

    363

    -

    364

    -

    365

    -

    366

    -

    367

    -

    368

    -

    369

    +

    364

    +

    365

    +

    366

    +

    367

    +

    368

    +

    369

    370

    -

    371

    -

    372

    -

    373

    +

    371

    +

    372

    +

    373

    374

    375

    -

    376

    -

    377

    -

    378

    +

    376

    +

    377

    +

    378

    379

    380

    381

    -

    382

    -

    383

    -

    384

    +

    382

    +

    383

    +

    384

    385

    386

    387

    388

    389

    390

    -

    391

    +

    391

    392

    393

    394

    -

    395

    +

    395

    396

    397

    398

    399

    400

    -

    401

    +

    401

    402

    -

    403

    +

    403

    404

    405

    406

    -

    407

    -

    408

    -

    409

    -

    410

    -

    411

    +

    407

    +

    408

    +

    409

    +

    410

    +

    411

    412

    -

    413

    -

    414

    -

    415

    +

    413

    +

    414

    +

    415

    416

    417

    418

    @@ -484,26 +484,26 @@

    421

    422

    423

    -

    424

    -

    425

    -

    426

    -

    427

    +

    424

    +

    425

    +

    426

    +

    427

    428

    429

    -

    430

    +

    430

    431

    -

    432

    -

    433

    -

    434

    +

    432

    +

    433

    +

    434

    435

    436

    437

    438

    439

    -

    440

    -

    441

    -

    442

    -

    443

    +

    440

    +

    441

    +

    442

    +

    443

    444

    445

    446

    @@ -511,58 +511,58 @@

    448

    449

    450

    -

    451

    -

    452

    -

    453

    +

    451

    +

    452

    +

    453

    454

    -

    455

    +

    455

    456

    457

    458

    459

    460

    -

    461

    +

    461

    462

    -

    463

    +

    463

    464

    465

    466

    -

    467

    +

    467

    468

    469

    -

    470

    +

    470

    471

    -

    472

    +

    472

    473

    -

    474

    +

    474

    475

    476

    477

    -

    478

    +

    478

    479

    480

    -

    481

    +

    481

    482

    483

    484

    485

    486

    487

    -

    488

    -

    489

    +

    488

    +

    489

    490

    -

    491

    -

    492

    +

    491

    +

    492

    493

    494

    495

    496

    -

    497

    +

    497

    498

    499

    -

    500

    +

    500

    501

    -

    502

    +

    502

    503

    504

    505

    @@ -570,12 +570,12 @@

    507

    508

    509

    -

    510

    +

    510

    511

    -

    512

    -

    513

    +

    512

    +

    513

    514

    -

    515

    +

    515

    516

    517

    518

    @@ -586,11 +586,11 @@

    523

    524

    525

    -

    526

    -

    527

    +

    526

    +

    527

    528

    -

    529

    -

    530

    +

    529

    +

    530

    531

    532

    533

    @@ -598,11 +598,11 @@

    535

    536

    537

    -

    538

    -

    539

    +

    538

    +

    539

    540

    -

    541

    -

    542

    +

    541

    +

    542

    543

    544

    545

    @@ -613,11 +613,11 @@

    550

    551

    552

    -

    553

    -

    554

    +

    553

    +

    554

    555

    -

    556

    -

    557

    +

    556

    +

    557

    558

    559

    560

    @@ -627,81 +627,81 @@

    564

    565

    566

    -

    567

    +

    567

    568

    569

    570

    571

    572

    -

    573

    +

    573

    574

    575

    576

    577

    -

    578

    +

    578

    579

    580

    -

    581

    +

    581

    582

    583

    584

    585

    -

    586

    +

    586

    587

    588

    -

    589

    +

    589

    590

    591

    592

    593

    594

    -

    595

    +

    595

    596

    597

    -

    598

    -

    599

    +

    598

    +

    599

    600

    601

    -

    602

    +

    602

    603

    604

    605

    -

    606

    +

    606

    607

    608

    -

    609

    +

    609

    610

    611

    612

    -

    613

    +

    613

    614

    615

    -

    616

    +

    616

    617

    618

    619

    620

    -

    621

    +

    621

    622

    623

    -

    624

    +

    624

    625

    626

    -

    627

    +

    627

    628

    629

    -

    630

    +

    630

    631

    632

    633

    -

    634

    +

    634

    635

    636

    -

    637

    -

    638

    +

    637

    +

    638

    639

    640

    -

    641

    +

    641

    642

    643

    644

    @@ -709,70 +709,136 @@

    646

    647

    648

    -

    649

    +

    649

    650

    651

    -

    652

    +

    652

    653

    654

    -

    655

    +

    655

    656

    657

    -

    658

    +

    658

    659

    660

    661

    662

    663

    -

    664

    +

    664

    665

    -

    666

    -

    667

    +

    666

    +

    667

    668

    -

    669

    +

    669

    670

    671

    -

    672

    +

    672

    673

    -

    674

    +

    674

    675

    676

    677

    678

    679

    680

    -

    681

    +

    681

    682

    683

    -

    684

    -

    685

    -

    686

    -

    687

    -

    688

    -

    689

    -

    690

    -

    691

    +

    684

    +

    685

    +

    686

    +

    687

    +

    688

    +

    689

    +

    690

    +

    691

    692

    -

    693

    -

    694

    +

    693

    +

    694

    695

    -

    696

    -

    697

    +

    696

    +

    697

    698

    699

    700

    701

    702

    -

    703

    -

    704

    -

    705

    -

    706

    -

    707

    -

    708

    +

    703

    +

    704

    +

    705

    +

    706

    +

    707

    +

    708

    709

    710

    711

    -

    712

    +

    712

    +

    713

    +

    714

    +

    715

    +

    716

    +

    717

    +

    718

    +

    719

    +

    720

    +

    721

    +

    722

    +

    723

    +

    724

    +

    725

    +

    726

    +

    727

    +

    728

    +

    729

    +

    730

    +

    731

    +

    732

    +

    733

    +

    734

    +

    735

    +

    736

    +

    737

    +

    738

    +

    739

    +

    740

    +

    741

    +

    742

    +

    743

    +

    744

    +

    745

    +

    746

    +

    747

    +

    748

    +

    749

    +

    750

    +

    751

    +

    752

    +

    753

    +

    754

    +

    755

    +

    756

    +

    757

    +

    758

    +

    759

    +

    760

    +

    761

    +

    762

    +

    763

    +

    764

    +

    765

    +

    766

    +

    767

    +

    768

    +

    769

    +

    770

    +

    771

    +

    772

    +

    773

    +

    774

    +

    775

    +

    776

    +

    777

    +

    778

    diff --git a/docs/html/coverage/openzwave_group.html b/docs/html/coverage/openzwave_group.html index 493e154e..22e6a3f2 100644 --- a/docs/html/coverage/openzwave_group.html +++ b/docs/html/coverage/openzwave_group.html @@ -25,9 +25,9 @@

    Coverage for openzwave.group :

    - 30 statements   + 43 statements   0 run - 30 missing + 43 missing 0 excluded

    @@ -87,32 +87,32 @@

    24

    25

    26

    -

    27

    -

    28

    +

    27

    +

    28

    29

    30

    31

    -

    32

    -

    33

    -

    34

    +

    32

    +

    33

    +

    34

    35

    36

    37

    38

    39

    40

    -

    41

    -

    42

    -

    43

    +

    41

    +

    42

    +

    43

    44

    -

    45

    +

    45

    46

    -

    47

    +

    47

    48

    49

    50

    51

    -

    52

    +

    52

    53

    54

    55

    @@ -120,75 +120,75 @@

    57

    58

    59

    -

    60

    +

    60

    61

    -

    62

    -

    63

    +

    62

    +

    63

    64

    -

    65

    +

    65

    66

    -

    67

    -

    68

    +

    67

    +

    68

    69

    70

    71

    72

    -

    73

    +

    73

    74

    75

    76

    77

    -

    78

    +

    78

    79

    -

    80

    +

    80

    81

    -

    82

    +

    82

    83

    84

    -

    85

    +

    85

    86

    -

    87

    +

    87

    88

    89

    -

    90

    +

    90

    91

    -

    92

    +

    92

    93

    94

    -

    95

    +

    95

    96

    -

    97

    +

    97

    98

    99

    -

    100

    +

    100

    101

    -

    102

    +

    102

    103

    104

    -

    105

    +

    105

    106

    -

    107

    +

    107

    108

    109

    -

    110

    +

    110

    111

    112

    -

    113

    +

    113

    114

    -

    115

    +

    115

    116

    117

    -

    118

    +

    118

    119

    120

    -

    121

    +

    121

    122

    -

    123

    +

    123

    124

    125

    -

    126

    +

    126

    127

    -

    128

    +

    128

    129

    130

    131

    @@ -197,14 +197,14 @@

    134

    135

    136

    -

    137

    +

    137

    138

    -

    139

    +

    139

    140

    141

    -

    142

    +

    142

    143

    -

    144

    +

    144

    145

    146

    147

    @@ -213,7 +213,30 @@

    150

    151

    152

    -

    153

    +

    153

    +

    154

    +

    155

    +

    156

    +

    157

    +

    158

    +

    159

    +

    160

    +

    161

    +

    162

    +

    163

    +

    164

    +

    165

    +

    166

    +

    167

    +

    168

    +

    169

    +

    170

    +

    171

    +

    172

    +

    173

    +

    174

    +

    175

    +

    176

    diff --git a/docs/html/coverage/openzwave_network.html b/docs/html/coverage/openzwave_network.html index 48fe76b7..b53734ea 100644 --- a/docs/html/coverage/openzwave_network.html +++ b/docs/html/coverage/openzwave_network.html @@ -25,9 +25,9 @@

    Coverage for openzwave.network :

    - 539 statements   + 546 statements   0 run - 539 missing + 546 missing 0 excluded

    @@ -87,18 +87,18 @@

    24

    25

    26

    -

    27

    +

    27

    28

    29

    30

    31

    -

    32

    -

    33

    +

    32

    +

    33

    34

    35

    36

    37

    -

    38

    +

    38

    39

    40

    41

    @@ -106,14 +106,14 @@

    43

    44

    45

    -

    46

    -

    47

    +

    46

    +

    47

    48

    49

    50

    -

    51

    -

    52

    -

    53

    +

    51

    +

    52

    +

    53

    54

    55

    56

    @@ -125,11 +125,11 @@

    62

    63

    64

    -

    65

    -

    66

    -

    67

    +

    65

    +

    66

    +

    67

    68

    -

    69

    +

    69

    70

    71

    72

    @@ -302,11 +302,11 @@

    239

    240

    241

    -

    242

    -

    243

    -

    244

    -

    245

    -

    246

    +

    242

    +

    243

    +

    244

    +

    245

    +

    246

    247

    248

    249

    @@ -340,22 +340,22 @@

    277

    278

    279

    -

    280

    +

    280

    281

    282

    283

    284

    -

    285

    +

    285

    286

    -

    287

    +

    287

    288

    -

    289

    +

    289

    290

    -

    291

    +

    291

    292

    -

    293

    +

    293

    294

    -

    295

    +

    295

    296

    297

    298

    @@ -364,11 +364,11 @@

    301

    302

    303

    -

    304

    -

    305

    -

    306

    -

    307

    -

    308

    +

    304

    +

    305

    +

    306

    +

    307

    +

    308

    309

    310

    311

    @@ -389,55 +389,55 @@

    326

    327

    328

    -

    329

    +

    329

    330

    -

    331

    -

    332

    -

    333

    +

    331

    +

    332

    +

    333

    334

    -

    335

    +

    335

    336

    -

    337

    +

    337

    338

    339

    -

    340

    +

    340

    341

    -

    342

    +

    342

    343

    344

    -

    345

    +

    345

    346

    347

    -

    348

    -

    349

    -

    350

    -

    351

    -

    352

    +

    348

    +

    349

    +

    350

    +

    351

    +

    352

    353

    354

    355

    356

    -

    357

    +

    357

    358

    -

    359

    -

    360

    -

    361

    +

    359

    +

    360

    +

    361

    362

    -

    363

    +

    363

    364

    -

    365

    -

    366

    -

    367

    -

    368

    -

    369

    +

    365

    +

    366

    +

    367

    +

    368

    +

    369

    370

    -

    371

    +

    371

    372

    -

    373

    -

    374

    -

    375

    +

    373

    +

    374

    +

    375

    376

    -

    377

    +

    377

    378

    379

    380

    @@ -445,109 +445,109 @@

    382

    383

    384

    -

    385

    -

    386

    -

    387

    -

    388

    -

    389

    +

    385

    +

    386

    +

    387

    +

    388

    +

    389

    390

    391

    392

    393

    -

    394

    +

    394

    395

    396

    397

    -

    398

    +

    398

    399

    400

    -

    401

    +

    401

    402

    403

    404

    -

    405

    +

    405

    406

    -

    407

    +

    407

    408

    409

    410

    411

    412

    -

    413

    -

    414

    +

    413

    +

    414

    415

    416

    417

    -

    418

    +

    418

    419

    -

    420

    +

    420

    421

    -

    422

    +

    422

    423

    424

    -

    425

    +

    425

    426

    427

    428

    -

    429

    +

    429

    430

    -

    431

    +

    431

    432

    433

    434

    435

    -

    436

    +

    436

    437

    438

    -

    439

    -

    440

    -

    441

    -

    442

    +

    439

    +

    440

    +

    441

    +

    442

    443

    -

    444

    -

    445

    -

    446

    -

    447

    +

    444

    +

    445

    +

    446

    +

    447

    448

    -

    449

    +

    449

    450

    451

    -

    452

    -

    453

    -

    454

    +

    452

    +

    453

    +

    454

    455

    -

    456

    +

    456

    457

    -

    458

    +

    458

    459

    -

    460

    +

    460

    461

    462

    463

    464

    -

    465

    +

    465

    466

    -

    467

    -

    468

    +

    467

    +

    468

    469

    -

    470

    +

    470

    471

    472

    473

    474

    -

    475

    +

    475

    476

    -

    477

    -

    478

    +

    477

    +

    478

    479

    -

    480

    +

    480

    481

    482

    483

    484

    -

    485

    +

    485

    486

    -

    487

    +

    487

    488

    489

    490

    @@ -557,16 +557,16 @@

    494

    495

    496

    -

    497

    +

    497

    498

    -

    499

    +

    499

    500

    501

    502

    503

    -

    504

    +

    504

    505

    -

    506

    +

    506

    507

    508

    509

    @@ -576,115 +576,115 @@

    513

    514

    515

    -

    516

    +

    516

    517

    -

    518

    +

    518

    519

    520

    521

    522

    -

    523

    +

    523

    524

    -

    525

    +

    525

    526

    527

    -

    528

    -

    529

    -

    530

    -

    531

    -

    532

    -

    533

    -

    534

    +

    528

    +

    529

    +

    530

    +

    531

    +

    532

    +

    533

    +

    534

    535

    536

    537

    538

    539

    -

    540

    +

    540

    541

    -

    542

    +

    542

    543

    -

    544

    -

    545

    -

    546

    +

    544

    +

    545

    +

    546

    547

    -

    548

    +

    548

    549

    -

    550

    -

    551

    -

    552

    +

    550

    +

    551

    +

    552

    553

    -

    554

    +

    554

    555

    -

    556

    +

    556

    557

    -

    558

    -

    559

    +

    558

    +

    559

    560

    -

    561

    +

    561

    562

    -

    563

    +

    563

    564

    -

    565

    -

    566

    +

    565

    +

    566

    567

    -

    568

    +

    568

    569

    -

    570

    +

    570

    571

    -

    572

    -

    573

    +

    572

    +

    573

    574

    -

    575

    +

    575

    576

    -

    577

    -

    578

    +

    577

    +

    578

    579

    -

    580

    +

    580

    581

    582

    583

    584

    -

    585

    +

    585

    586

    587

    -

    588

    -

    589

    -

    590

    +

    588

    +

    589

    +

    590

    591

    -

    592

    +

    592

    593

    594

    595

    596

    -

    597

    -

    598

    +

    597

    +

    598

    599

    600

    -

    601

    +

    601

    602

    -

    603

    -

    604

    -

    605

    -

    606

    -

    607

    -

    608

    +

    603

    +

    604

    +

    605

    +

    606

    +

    607

    +

    608

    609

    -

    610

    +

    610

    611

    -

    612

    -

    613

    -

    614

    -

    615

    -

    616

    -

    617

    -

    618

    +

    612

    +

    613

    +

    614

    +

    615

    +

    616

    +

    617

    +

    618

    619

    620

    -

    621

    -

    622

    -

    623

    -

    624

    +

    621

    +

    622

    +

    623

    +

    624

    625

    626

    627

    @@ -692,15 +692,15 @@

    629

    630

    631

    -

    632

    -

    633

    +

    632

    +

    633

    634

    635

    -

    636

    -

    637

    -

    638

    +

    636

    +

    637

    +

    638

    639

    -

    640

    +

    640

    641

    642

    643

    @@ -709,11 +709,11 @@

    646

    647

    648

    -

    649

    -

    650

    -

    651

    +

    649

    +

    650

    +

    651

    652

    -

    653

    +

    653

    654

    655

    656

    @@ -721,31 +721,31 @@

    658

    659

    660

    -

    661

    -

    662

    +

    661

    +

    662

    663

    -

    664

    -

    665

    -

    666

    +

    664

    +

    665

    +

    666

    667

    -

    668

    +

    668

    669

    670

    671

    672

    673

    674

    -

    675

    -

    676

    -

    677

    -

    678

    -

    679

    -

    680

    +

    675

    +

    676

    +

    677

    +

    678

    +

    679

    +

    680

    681

    -

    682

    -

    683

    +

    682

    +

    683

    684

    -

    685

    +

    685

    686

    687

    688

    @@ -754,21 +754,21 @@

    691

    692

    693

    -

    694

    +

    694

    695

    -

    696

    +

    696

    697

    -

    698

    +

    698

    699

    700

    701

    702

    703

    -

    704

    +

    704

    705

    706

    707

    -

    708

    +

    708

    709

    710

    711

    @@ -777,41 +777,41 @@

    714

    715

    716

    -

    717

    -

    718

    +

    717

    +

    718

    719

    -

    720

    -

    721

    -

    722

    +

    720

    +

    721

    +

    722

    723

    -

    724

    +

    724

    725

    726

    727

    728

    729

    730

    -

    731

    -

    732

    -

    733

    -

    734

    -

    735

    -

    736

    +

    731

    +

    732

    +

    733

    +

    734

    +

    735

    +

    736

    737

    738

    -

    739

    +

    739

    740

    -

    741

    +

    741

    742

    743

    744

    745

    746

    747

    -

    748

    +

    748

    749

    750

    -

    751

    +

    751

    752

    753

    754

    @@ -822,8 +822,8 @@

    759

    760

    761

    -

    762

    -

    763

    +

    762

    +

    763

    764

    765

    766

    @@ -838,16 +838,16 @@

    775

    776

    777

    -

    778

    -

    779

    -

    780

    -

    781

    -

    782

    -

    783

    +

    778

    +

    779

    +

    780

    +

    781

    +

    782

    +

    783

    784

    -

    785

    -

    786

    -

    787

    +

    785

    +

    786

    +

    787

    788

    789

    790

    @@ -857,72 +857,72 @@

    794

    795

    796

    -

    797

    +

    797

    798

    -

    799

    -

    800

    -

    801

    +

    799

    +

    800

    +

    801

    802

    -

    803

    +

    803

    804

    805

    806

    807

    -

    808

    +

    808

    809

    -

    810

    +

    810

    811

    812

    -

    813

    +

    813

    814

    -

    815

    +

    815

    816

    817

    818

    819

    -

    820

    +

    820

    821

    -

    822

    +

    822

    823

    -

    824

    +

    824

    825

    -

    826

    +

    826

    827

    828

    829

    -

    830

    +

    830

    831

    -

    832

    +

    832

    833

    834

    835

    -

    836

    +

    836

    837

    -

    838

    +

    838

    839

    -

    840

    -

    841

    -

    842

    -

    843

    -

    844

    +

    840

    +

    841

    +

    842

    +

    843

    +

    844

    845

    846

    847

    -

    848

    +

    848

    849

    850

    851

    852

    853

    -

    854

    +

    854

    855

    856

    -

    857

    -

    858

    -

    859

    -

    860

    +

    857

    +

    858

    +

    859

    +

    860

    861

    -

    862

    +

    862

    863

    864

    865

    @@ -930,14 +930,14 @@

    867

    868

    869

    -

    870

    +

    870

    871

    -

    872

    +

    872

    873

    874

    -

    875

    +

    875

    876

    -

    877

    +

    877

    878

    879

    880

    @@ -951,9 +951,9 @@

    888

    889

    890

    -

    891

    +

    891

    892

    -

    893

    +

    893

    894

    895

    896

    @@ -963,22 +963,22 @@

    900

    901

    902

    -

    903

    -

    904

    -

    905

    -

    906

    -

    907

    -

    908

    -

    909

    -

    910

    -

    911

    -

    912

    -

    913

    -

    914

    -

    915

    -

    916

    -

    917

    -

    918

    +

    903

    +

    904

    +

    905

    +

    906

    +

    907

    +

    908

    +

    909

    +

    910

    +

    911

    +

    912

    +

    913

    +

    914

    +

    915

    +

    916

    +

    917

    +

    918

    919

    920

    921

    @@ -1026,31 +1026,31 @@

    963

    964

    965

    -

    966

    +

    966

    967

    968

    969

    970

    -

    971

    +

    971

    972

    -

    973

    -

    974

    -

    975

    -

    976

    -

    977

    -

    978

    -

    979

    -

    980

    -

    981

    -

    982

    +

    973

    +

    974

    +

    975

    +

    976

    +

    977

    +

    978

    +

    979

    +

    980

    +

    981

    +

    982

    983

    984

    985

    986

    -

    987

    +

    987

    988

    989

    -

    990

    +

    990

    991

    992

    993

    @@ -1058,99 +1058,99 @@

    995

    996

    997

    -

    998

    -

    999

    -

    1000

    -

    1001

    +

    998

    +

    999

    +

    1000

    +

    1001

    1002

    1003

    1004

    -

    1005

    +

    1005

    1006

    -

    1007

    -

    1008

    -

    1009

    -

    1010

    -

    1011

    -

    1012

    -

    1013

    +

    1007

    +

    1008

    +

    1009

    +

    1010

    +

    1011

    +

    1012

    +

    1013

    1014

    -

    1015

    -

    1016

    +

    1015

    +

    1016

    1017

    1018

    1019

    1020

    -

    1021

    +

    1021

    1022

    1023

    1024

    -

    1025

    +

    1025

    1026

    -

    1027

    +

    1027

    1028

    -

    1029

    +

    1029

    1030

    -

    1031

    -

    1032

    +

    1031

    +

    1032

    1033

    -

    1034

    -

    1035

    -

    1036

    +

    1034

    +

    1035

    +

    1036

    1037

    -

    1038

    -

    1039

    -

    1040

    +

    1038

    +

    1039

    +

    1040

    1041

    -

    1042

    -

    1043

    +

    1042

    +

    1043

    1044

    -

    1045

    -

    1046

    +

    1045

    +

    1046

    1047

    1048

    -

    1049

    +

    1049

    1050

    -

    1051

    +

    1051

    1052

    1053

    -

    1054

    +

    1054

    1055

    -

    1056

    +

    1056

    1057

    1058

    -

    1059

    -

    1060

    -

    1061

    -

    1062

    +

    1059

    +

    1060

    +

    1061

    +

    1062

    1063

    1064

    -

    1065

    +

    1065

    1066

    1067

    -

    1068

    -

    1069

    +

    1068

    +

    1069

    1070

    -

    1071

    -

    1072

    +

    1071

    +

    1072

    1073

    -

    1074

    +

    1074

    1075

    -

    1076

    +

    1076

    1077

    1078

    1079

    1080

    1081

    1082

    -

    1083

    -

    1084

    -

    1085

    -

    1086

    -

    1087

    -

    1088

    -

    1089

    -

    1090

    +

    1083

    +

    1084

    +

    1085

    +

    1086

    +

    1087

    +

    1088

    +

    1089

    +

    1090

    1091

    1092

    1093

    @@ -1180,35 +1180,35 @@

    1117

    1118

    1119

    -

    1120

    +

    1120

    1121

    -

    1122

    -

    1123

    +

    1122

    +

    1123

    1124

    -

    1125

    -

    1126

    +

    1125

    +

    1126

    1127

    -

    1128

    +

    1128

    1129

    -

    1130

    +

    1130

    1131

    -

    1132

    +

    1132

    1133

    1134

    1135

    1136

    -

    1137

    -

    1138

    -

    1139

    -

    1140

    -

    1141

    +

    1137

    +

    1138

    +

    1139

    +

    1140

    +

    1141

    1142

    -

    1143

    -

    1144

    +

    1143

    +

    1144

    1145

    -

    1146

    -

    1147

    -

    1148

    +

    1146

    +

    1147

    +

    1148

    1149

    1150

    1151

    @@ -1218,9 +1218,9 @@

    1155

    1156

    1157

    -

    1158

    +

    1158

    1159

    -

    1160

    +

    1160

    1161

    1162

    1163

    @@ -1234,10 +1234,10 @@

    1171

    1172

    1173

    -

    1174

    +

    1174

    1175

    -

    1176

    -

    1177

    +

    1176

    +

    1177

    1178

    1179

    1180

    @@ -1247,15 +1247,15 @@

    1184

    1185

    1186

    -

    1187

    -

    1188

    +

    1187

    +

    1188

    1189

    -

    1190

    +

    1190

    1191

    1192

    -

    1193

    +

    1193

    1194

    -

    1195

    +

    1195

    1196

    1197

    1198

    @@ -1266,9 +1266,9 @@

    1203

    1204

    1205

    -

    1206

    -

    1207

    -

    1208

    +

    1206

    +

    1207

    +

    1208

    1209

    1210

    1211

    @@ -1279,37 +1279,37 @@

    1216

    1217

    1218

    -

    1219

    -

    1220

    -

    1221

    +

    1219

    +

    1220

    +

    1221

    1222

    -

    1223

    +

    1223

    1224

    -

    1225

    -

    1226

    -

    1227

    +

    1225

    +

    1226

    +

    1227

    1228

    -

    1229

    +

    1229

    1230

    -

    1231

    +

    1231

    1232

    -

    1233

    +

    1233

    1234

    1235

    1236

    -

    1237

    -

    1238

    -

    1239

    -

    1240

    -

    1241

    -

    1242

    -

    1243

    -

    1244

    +

    1237

    +

    1238

    +

    1239

    +

    1240

    +

    1241

    +

    1242

    +

    1243

    +

    1244

    1245

    1246

    -

    1247

    -

    1248

    -

    1249

    +

    1247

    +

    1248

    +

    1249

    1250

    1251

    1252

    @@ -1320,15 +1320,15 @@

    1257

    1258

    1259

    -

    1260

    +

    1260

    1261

    1262

    -

    1263

    +

    1263

    1264

    1265

    -

    1266

    +

    1266

    1267

    -

    1268

    +

    1268

    1269

    1270

    1271

    @@ -1337,15 +1337,15 @@

    1274

    1275

    1276

    -

    1277

    +

    1277

    1278

    -

    1279

    +

    1279

    1280

    -

    1281

    +

    1281

    1282

    -

    1283

    -

    1284

    -

    1285

    +

    1283

    +

    1284

    +

    1285

    1286

    1287

    1288

    @@ -1356,14 +1356,14 @@

    1293

    1294

    1295

    -

    1296

    +

    1296

    1297

    1298

    1299

    -

    1300

    -

    1301

    +

    1300

    +

    1301

    1302

    -

    1303

    +

    1303

    1304

    1305

    1306

    @@ -1373,41 +1373,41 @@

    1310

    1311

    1312

    -

    1313

    -

    1314

    -

    1315

    -

    1316

    -

    1317

    -

    1318

    +

    1313

    +

    1314

    +

    1315

    +

    1316

    +

    1317

    +

    1318

    1319

    -

    1320

    -

    1321

    -

    1322

    -

    1323

    +

    1320

    +

    1321

    +

    1322

    +

    1323

    1324

    -

    1325

    -

    1326

    -

    1327

    +

    1325

    +

    1326

    +

    1327

    1328

    -

    1329

    +

    1329

    1330

    -

    1331

    +

    1331

    1332

    -

    1333

    -

    1334

    -

    1335

    -

    1336

    -

    1337

    -

    1338

    -

    1339

    +

    1333

    +

    1334

    +

    1335

    +

    1336

    +

    1337

    +

    1338

    +

    1339

    1340

    -

    1341

    +

    1341

    1342

    1343

    1344

    -

    1345

    -

    1346

    -

    1347

    +

    1345

    +

    1346

    +

    1347

    1348

    1349

    1350

    @@ -1417,12 +1417,12 @@

    1354

    1355

    1356

    -

    1357

    +

    1357

    1358

    -

    1359

    +

    1359

    1360

    -

    1361

    -

    1362

    +

    1361

    +

    1362

    1363

    1364

    1365

    @@ -1431,13 +1431,13 @@

    1368

    1369

    1370

    -

    1371

    -

    1372

    -

    1373

    -

    1374

    -

    1375

    +

    1371

    +

    1372

    +

    1373

    +

    1374

    +

    1375

    1376

    -

    1377

    +

    1377

    1378

    1379

    1380

    @@ -1445,13 +1445,13 @@

    1382

    1383

    1384

    -

    1385

    -

    1386

    -

    1387

    -

    1388

    -

    1389

    +

    1385

    +

    1386

    +

    1387

    +

    1388

    +

    1389

    1390

    -

    1391

    +

    1391

    1392

    1393

    1394

    @@ -1459,13 +1459,13 @@

    1396

    1397

    1398

    -

    1399

    -

    1400

    -

    1401

    -

    1402

    -

    1403

    +

    1399

    +

    1400

    +

    1401

    +

    1402

    +

    1403

    1404

    -

    1405

    +

    1405

    1406

    1407

    1408

    @@ -1473,13 +1473,13 @@

    1410

    1411

    1412

    -

    1413

    -

    1414

    -

    1415

    -

    1416

    -

    1417

    +

    1413

    +

    1414

    +

    1415

    +

    1416

    +

    1417

    1418

    -

    1419

    +

    1419

    1420

    1421

    1422

    @@ -1489,14 +1489,14 @@

    1426

    1427

    1428

    -

    1429

    -

    1430

    -

    1431

    -

    1432

    -

    1433

    +

    1429

    +

    1430

    +

    1431

    +

    1432

    +

    1433

    1434

    1435

    -

    1436

    +

    1436

    1437

    1438

    1439

    @@ -1507,21 +1507,21 @@

    1444

    1445

    1446

    -

    1447

    -

    1448

    +

    1447

    +

    1448

    1449

    1450

    1451

    -

    1452

    -

    1453

    -

    1454

    -

    1455

    +

    1452

    +

    1453

    +

    1454

    +

    1455

    1456

    1457

    1458

    -

    1459

    +

    1459

    1460

    -

    1461

    +

    1461

    1462

    1463

    1464

    @@ -1529,88 +1529,88 @@

    1466

    1467

    1468

    -

    1469

    -

    1470

    -

    1471

    +

    1469

    +

    1470

    +

    1471

    1472

    1473

    1474

    1475

    -

    1476

    +

    1476

    1477

    -

    1478

    -

    1479

    -

    1480

    +

    1478

    +

    1479

    +

    1480

    1481

    1482

    -

    1483

    +

    1483

    1484

    -

    1485

    +

    1485

    1486

    1487

    1488

    1489

    1490

    -

    1491

    -

    1492

    -

    1493

    -

    1494

    -

    1495

    -

    1496

    +

    1491

    +

    1492

    +

    1493

    +

    1494

    +

    1495

    +

    1496

    1497

    -

    1498

    +

    1498

    1499

    -

    1500

    +

    1500

    1501

    -

    1502

    -

    1503

    +

    1502

    +

    1503

    1504

    1505

    -

    1506

    +

    1506

    1507

    -

    1508

    +

    1508

    1509

    1510

    1511

    1512

    1513

    -

    1514

    -

    1515

    -

    1516

    -

    1517

    -

    1518

    -

    1519

    +

    1514

    +

    1515

    +

    1516

    +

    1517

    +

    1518

    +

    1519

    1520

    1521

    1522

    -

    1523

    +

    1523

    1524

    -

    1525

    -

    1526

    -

    1527

    -

    1528

    +

    1525

    +

    1526

    +

    1527

    +

    1528

    1529

    1530

    1531

    -

    1532

    +

    1532

    1533

    -

    1534

    +

    1534

    1535

    1536

    1537

    -

    1538

    -

    1539

    -

    1540

    -

    1541

    -

    1542

    -

    1543

    +

    1538

    +

    1539

    +

    1540

    +

    1541

    +

    1542

    +

    1543

    1544

    -

    1545

    +

    1545

    1546

    1547

    1548

    1549

    -

    1550

    +

    1550

    1551

    1552

    1553

    @@ -1618,33 +1618,33 @@

    1555

    1556

    1557

    -

    1558

    -

    1559

    -

    1560

    -

    1561

    -

    1562

    +

    1558

    +

    1559

    +

    1560

    +

    1561

    +

    1562

    1563

    -

    1564

    +

    1564

    1565

    1566

    -

    1567

    -

    1568

    +

    1567

    +

    1568

    1569

    1570

    1571

    1572

    1573

    -

    1574

    -

    1575

    +

    1574

    +

    1575

    1576

    1577

    -

    1578

    +

    1578

    1579

    1580

    1581

    1582

    -

    1583

    -

    1584

    +

    1583

    +

    1584

    1585

    1586

    1587

    @@ -1667,13 +1667,29 @@

    1604

    1605

    1606

    -

    1607

    +

    1607

    1608

    1609

    1610

    1611

    -

    1612

    +

    1612

    1613

    +

    1614

    +

    1615

    +

    1616

    +

    1617

    +

    1618

    +

    1619

    +

    1620

    +

    1621

    +

    1622

    +

    1623

    +

    1624

    +

    1625

    +

    1626

    +

    1627

    +

    1628

    +

    1629

    diff --git a/docs/html/coverage/openzwave_node.html b/docs/html/coverage/openzwave_node.html index f05e3db2..8225ebf9 100644 --- a/docs/html/coverage/openzwave_node.html +++ b/docs/html/coverage/openzwave_node.html @@ -25,9 +25,9 @@

    Coverage for openzwave.node :

    - 204 statements   + 228 statements   0 run - 204 missing + 228 missing 0 excluded

    @@ -91,178 +91,178 @@

    28

    29

    30

    -

    31

    -

    32

    +

    31

    +

    32

    33

    34

    35

    -

    36

    -

    37

    -

    38

    +

    36

    +

    37

    +

    38

    39

    40

    41

    42

    43

    44

    -

    45

    -

    46

    -

    47

    +

    45

    +

    46

    +

    47

    48

    -

    49

    +

    49

    50

    51

    -

    52

    +

    52

    53

    -

    54

    +

    54

    55

    56

    -

    57

    +

    57

    58

    -

    59

    +

    59

    60

    61

    62

    63

    -

    64

    -

    65

    +

    64

    +

    65

    66

    -

    67

    -

    68

    +

    67

    +

    68

    69

    -

    70

    -

    71

    -

    72

    -

    73

    -

    74

    +

    70

    +

    71

    +

    72

    +

    73

    +

    74

    75

    -

    76

    +

    76

    77

    -

    78

    +

    78

    79

    80

    -

    81

    +

    81

    82

    -

    83

    +

    83

    84

    85

    -

    86

    +

    86

    87

    88

    -

    89

    +

    89

    90

    -

    91

    +

    91

    92

    93

    -

    94

    +

    94

    95

    -

    96

    +

    96

    97

    98

    -

    99

    +

    99

    100

    -

    101

    +

    101

    102

    103

    -

    104

    +

    104

    105

    -

    106

    +

    106

    107

    108

    109

    -

    110

    +

    110

    111

    -

    112

    +

    112

    113

    114

    -

    115

    +

    115

    116

    -

    117

    +

    117

    118

    119

    -

    120

    +

    120

    121

    -

    122

    +

    122

    123

    124

    -

    125

    +

    125

    126

    -

    127

    +

    127

    128

    129

    130

    -

    131

    +

    131

    132

    -

    133

    +

    133

    134

    135

    -

    136

    +

    136

    137

    -

    138

    +

    138

    139

    140

    -

    141

    +

    141

    142

    -

    143

    +

    143

    144

    145

    -

    146

    +

    146

    147

    -

    148

    +

    148

    149

    150

    151

    -

    152

    +

    152

    153

    -

    154

    +

    154

    155

    156

    -

    157

    +

    157

    158

    -

    159

    +

    159

    160

    161

    -

    162

    +

    162

    163

    -

    164

    +

    164

    165

    166

    -

    167

    +

    167

    168

    -

    169

    +

    169

    170

    171

    -

    172

    +

    172

    173

    -

    174

    +

    174

    175

    176

    -

    177

    +

    177

    178

    -

    179

    +

    179

    180

    -

    181

    -

    182

    -

    183

    -

    184

    -

    185

    -

    186

    -

    187

    -

    188

    +

    181

    +

    182

    +

    183

    +

    184

    +

    185

    +

    186

    +

    187

    +

    188

    189

    190

    191

    192

    193

    -

    194

    +

    194

    195

    -

    196

    -

    197

    -

    198

    -

    199

    -

    200

    -

    201

    -

    202

    +

    196

    +

    197

    +

    198

    +

    199

    +

    200

    +

    201

    +

    202

    203

    204

    205

    @@ -270,54 +270,54 @@

    207

    208

    209

    -

    210

    +

    210

    211

    -

    212

    -

    213

    -

    214

    -

    215

    -

    216

    -

    217

    +

    212

    +

    213

    +

    214

    +

    215

    +

    216

    +

    217

    218

    219

    -

    220

    -

    221

    -

    222

    -

    223

    -

    224

    -

    225

    -

    226

    +

    220

    +

    221

    +

    222

    +

    223

    +

    224

    +

    225

    +

    226

    227

    -

    228

    +

    228

    229

    -

    230

    -

    231

    -

    232

    -

    233

    +

    230

    +

    231

    +

    232

    +

    233

    234

    -

    235

    +

    235

    236

    -

    237

    +

    237

    238

    -

    239

    +

    239

    240

    241

    242

    -

    243

    +

    243

    244

    -

    245

    +

    245

    246

    247

    248

    249

    250

    -

    251

    -

    252

    +

    251

    +

    252

    253

    -

    254

    +

    254

    255

    256

    -

    257

    +

    257

    258

    259

    260

    @@ -327,14 +327,14 @@

    264

    265

    266

    -

    267

    +

    267

    268

    269

    270

    271

    -

    272

    -

    273

    -

    274

    +

    272

    +

    273

    +

    274

    275

    276

    277

    @@ -342,69 +342,69 @@

    279

    280

    281

    -

    282

    -

    283

    +

    282

    +

    283

    284

    -

    285

    -

    286

    -

    287

    +

    285

    +

    286

    +

    287

    288

    -

    289

    +

    289

    290

    291

    -

    292

    -

    293

    -

    294

    -

    295

    -

    296

    +

    292

    +

    293

    +

    294

    +

    295

    +

    296

    297

    -

    298

    +

    298

    299

    -

    300

    -

    301

    -

    302

    -

    303

    -

    304

    +

    300

    +

    301

    +

    302

    +

    303

    +

    304

    305

    306

    -

    307

    -

    308

    -

    309

    -

    310

    +

    307

    +

    308

    +

    309

    +

    310

    311

    -

    312

    +

    312

    313

    -

    314

    +

    314

    315

    -

    316

    +

    316

    317

    318

    319

    320

    -

    321

    +

    321

    322

    -

    323

    -

    324

    -

    325

    -

    326

    -

    327

    -

    328

    +

    323

    +

    324

    +

    325

    +

    326

    +

    327

    +

    328

    329

    330

    331

    -

    332

    +

    332

    333

    334

    335

    336

    337

    -

    338

    -

    339

    -

    340

    -

    341

    -

    342

    +

    338

    +

    339

    +

    340

    +

    341

    +

    342

    343

    -

    344

    +

    344

    345

    346

    347

    @@ -414,14 +414,14 @@

    351

    352

    353

    -

    354

    +

    354

    355

    356

    357

    358

    -

    359

    -

    360

    -

    361

    +

    359

    +

    360

    +

    361

    362

    363

    364

    @@ -438,38 +438,38 @@

    375

    376

    377

    -

    378

    +

    378

    379

    -

    380

    +

    380

    381

    382

    383

    384

    -

    385

    -

    386

    -

    387

    +

    385

    +

    386

    +

    387

    388

    389

    390

    -

    391

    -

    392

    -

    393

    -

    394

    +

    391

    +

    392

    +

    393

    +

    394

    395

    -

    396

    +

    396

    397

    398

    399

    400

    401

    -

    402

    -

    403

    -

    404

    +

    402

    +

    403

    +

    404

    405

    406

    407

    408

    -

    409

    +

    409

    410

    411

    412

    @@ -483,10 +483,10 @@

    420

    421

    422

    -

    423

    -

    424

    +

    423

    +

    424

    425

    -

    426

    +

    426

    427

    428

    429

    @@ -494,54 +494,54 @@

    431

    432

    433

    -

    434

    +

    434

    435

    -

    436

    -

    437

    +

    436

    +

    437

    438

    439

    440

    -

    441

    -

    442

    +

    441

    +

    442

    443

    -

    444

    +

    444

    445

    -

    446

    +

    446

    447

    -

    448

    +

    448

    449

    450

    451

    452

    453

    -

    454

    -

    455

    -

    456

    -

    457

    -

    458

    +

    454

    +

    455

    +

    456

    +

    457

    +

    458

    459

    -

    460

    -

    461

    -

    462

    +

    460

    +

    461

    +

    462

    463

    -

    464

    +

    464

    465

    466

    467

    468

    469

    -

    470

    -

    471

    +

    470

    +

    471

    472

    -

    473

    +

    473

    474

    -

    475

    -

    476

    -

    477

    -

    478

    -

    479

    -

    480

    -

    481

    +

    475

    +

    476

    +

    477

    +

    478

    +

    479

    +

    480

    +

    481

    482

    483

    484

    @@ -563,160 +563,160 @@

    500

    501

    502

    -

    503

    +

    503

    504

    505

    -

    506

    -

    507

    -

    508

    -

    509

    +

    506

    +

    507

    +

    508

    +

    509

    510

    -

    511

    +

    511

    512

    -

    513

    +

    513

    514

    -

    515

    +

    515

    516

    517

    518

    519

    520

    521

    -

    522

    -

    523

    +

    522

    +

    523

    524

    -

    525

    +

    525

    526

    -

    527

    -

    528

    -

    529

    +

    527

    +

    528

    +

    529

    530

    -

    531

    +

    531

    532

    533

    -

    534

    +

    534

    535

    -

    536

    +

    536

    537

    538

    539

    -

    540

    +

    540

    541

    -

    542

    +

    542

    543

    -

    544

    +

    544

    545

    -

    546

    +

    546

    547

    548

    549

    -

    550

    +

    550

    551

    -

    552

    +

    552

    553

    554

    -

    555

    +

    555

    556

    -

    557

    +

    557

    558

    559

    -

    560

    +

    560

    561

    -

    562

    +

    562

    563

    564

    565

    -

    566

    +

    566

    567

    -

    568

    +

    568

    569

    570

    -

    571

    +

    571

    572

    -

    573

    +

    573

    574

    575

    576

    -

    577

    +

    577

    578

    -

    579

    +

    579

    580

    -

    581

    +

    581

    582

    -

    583

    +

    583

    584

    585

    586

    -

    587

    +

    587

    588

    -

    589

    +

    589

    590

    -

    591

    +

    591

    592

    -

    593

    +

    593

    594

    595

    596

    -

    597

    +

    597

    598

    -

    599

    +

    599

    600

    601

    -

    602

    +

    602

    603

    -

    604

    +

    604

    605

    606

    -

    607

    +

    607

    608

    -

    609

    +

    609

    610

    611

    612

    -

    613

    +

    613

    614

    -

    615

    +

    615

    616

    -

    617

    +

    617

    618

    -

    619

    +

    619

    620

    621

    622

    623

    -

    624

    +

    624

    625

    -

    626

    -

    627

    +

    626

    +

    627

    628

    -

    629

    +

    629

    630

    631

    632

    633

    -

    634

    +

    634

    635

    -

    636

    -

    637

    +

    636

    +

    637

    638

    -

    639

    +

    639

    640

    641

    642

    643

    -

    644

    +

    644

    645

    -

    646

    -

    647

    +

    646

    +

    647

    648

    649

    650

    651

    652

    653

    -

    654

    +

    654

    655

    -

    656

    +

    656

    657

    658

    659

    @@ -724,9 +724,9 @@

    661

    662

    663

    -

    664

    +

    664

    665

    -

    666

    +

    666

    667

    668

    669

    @@ -734,9 +734,9 @@

    671

    672

    673

    -

    674

    +

    674

    675

    -

    676

    +

    676

    677

    678

    679

    @@ -744,7 +744,7 @@

    681

    682

    683

    -

    684

    +

    684

    685

    686

    687

    @@ -752,7 +752,7 @@

    689

    690

    691

    -

    692

    +

    692

    693

    694

    695

    @@ -768,17 +768,17 @@

    705

    706

    707

    -

    708

    +

    708

    709

    -

    710

    +

    710

    711

    712

    713

    714

    -

    715

    -

    716

    +

    715

    +

    716

    717

    -

    718

    +

    718

    719

    720

    721

    @@ -793,15 +793,15 @@

    730

    731

    732

    -

    733

    +

    733

    734

    735

    -

    736

    -

    737

    +

    736

    +

    737

    738

    739

    740

    -

    741

    +

    741

    742

    743

    744

    @@ -815,17 +815,17 @@

    752

    753

    754

    -

    755

    +

    755

    756

    -

    757

    +

    757

    758

    -

    759

    -

    760

    +

    759

    +

    760

    761

    -

    762

    -

    763

    +

    762

    +

    763

    764

    -

    765

    +

    765

    766

    767

    768

    @@ -840,17 +840,17 @@

    777

    778

    779

    -

    780

    +

    780

    781

    782

    -

    783

    -

    784

    +

    783

    +

    784

    785

    -

    786

    +

    786

    787

    -

    788

    +

    788

    789

    -

    790

    +

    790

    791

    792

    793

    @@ -859,19 +859,19 @@

    796

    797

    798

    -

    799

    +

    799

    800

    -

    801

    +

    801

    802

    803

    804

    805

    -

    806

    -

    807

    +

    806

    +

    807

    808

    -

    809

    +

    809

    810

    -

    811

    +

    811

    812

    813

    814

    @@ -879,37 +879,84 @@

    816

    817

    818

    -

    819

    +

    819

    820

    -

    821

    +

    821

    822

    823

    824

    825

    826

    -

    827

    +

    827

    828

    829

    830

    -

    831

    +

    831

    832

    -

    833

    +

    833

    834

    -

    835

    +

    835

    836

    -

    837

    +

    837

    838

    839

    840

    -

    841

    +

    841

    842

    -

    843

    +

    843

    844

    845

    -

    846

    +

    846

    847

    -

    848

    -

    849

    +

    848

    +

    849

    +

    850

    +

    851

    +

    852

    +

    853

    +

    854

    +

    855

    +

    856

    +

    857

    +

    858

    +

    859

    +

    860

    +

    861

    +

    862

    +

    863

    +

    864

    +

    865

    +

    866

    +

    867

    +

    868

    +

    869

    +

    870

    +

    871

    +

    872

    +

    873

    +

    874

    +

    875

    +

    876

    +

    877

    +

    878

    +

    879

    +

    880

    +

    881

    +

    882

    +

    883

    +

    884

    +

    885

    +

    886

    +

    887

    +

    888

    +

    889

    +

    890

    +

    891

    +

    892

    +

    893

    +

    894

    +

    895

    +

    896

    diff --git a/docs/html/coverage/openzwave_object.html b/docs/html/coverage/openzwave_object.html index 8e08ad3c..b0fdadc0 100644 --- a/docs/html/coverage/openzwave_object.html +++ b/docs/html/coverage/openzwave_object.html @@ -25,9 +25,9 @@

    Coverage for openzwave.object :

    - 126 statements   + 131 statements   0 run - 126 missing + 131 missing 0 excluded

    @@ -86,149 +86,149 @@

    23

    24

    25

    -

    26

    +

    26

    27

    28

    29

    30

    -

    31

    -

    32

    +

    31

    +

    32

    33

    34

    35

    36

    37

    38

    -

    39

    -

    40

    -

    41

    -

    42

    +

    39

    +

    40

    +

    41

    +

    42

    43

    -

    44

    -

    45

    +

    44

    +

    45

    46

    47

    48

    -

    49

    +

    49

    50

    51

    -

    52

    -

    53

    -

    54

    +

    52

    +

    53

    +

    54

    55

    -

    56

    -

    57

    +

    56

    +

    57

    58

    59

    60

    -

    61

    +

    61

    62

    63

    -

    64

    -

    65

    -

    66

    +

    64

    +

    65

    +

    66

    67

    -

    68

    -

    69

    +

    68

    +

    69

    70

    71

    72

    -

    73

    +

    73

    74

    75

    -

    76

    -

    77

    -

    78

    +

    76

    +

    77

    +

    78

    79

    -

    80

    -

    81

    +

    80

    +

    81

    82

    83

    84

    -

    85

    +

    85

    86

    87

    -

    88

    -

    89

    +

    88

    +

    89

    90

    -

    91

    -

    92

    +

    91

    +

    92

    93

    94

    95

    96

    -

    97

    +

    97

    98

    99

    100

    101

    -

    102

    -

    103

    -

    104

    -

    105

    -

    106

    +

    102

    +

    103

    +

    104

    +

    105

    +

    106

    107

    108

    -

    109

    +

    109

    110

    -

    111

    +

    111

    112

    -

    113

    +

    113

    114

    -

    115

    +

    115

    116

    -

    117

    +

    117

    118

    119

    -

    120

    +

    120

    121

    -

    122

    +

    122

    123

    124

    -

    125

    +

    125

    126

    -

    127

    +

    127

    128

    129

    -

    130

    +

    130

    131

    -

    132

    +

    132

    133

    134

    -

    135

    +

    135

    136

    -

    137

    +

    137

    138

    139

    -

    140

    +

    140

    141

    -

    142

    +

    142

    143

    144

    -

    145

    +

    145

    146

    -

    147

    +

    147

    148

    149

    -

    150

    +

    150

    151

    -

    152

    +

    152

    153

    154

    -

    155

    +

    155

    156

    -

    157

    +

    157

    158

    159

    160

    -

    161

    +

    161

    162

    -

    163

    +

    163

    164

    165

    -

    166

    +

    166

    167

    -

    168

    +

    168

    169

    170

    171

    @@ -238,140 +238,140 @@

    175

    176

    177

    -

    178

    +

    178

    179

    -

    180

    +

    180

    181

    182

    -

    183

    +

    183

    184

    -

    185

    +

    185

    186

    187

    188

    -

    189

    -

    190

    -

    191

    -

    192

    -

    193

    -

    194

    +

    189

    +

    190

    +

    191

    +

    192

    +

    193

    +

    194

    195

    -

    196

    +

    196

    197

    -

    198

    -

    199

    -

    200

    +

    198

    +

    199

    +

    200

    201

    -

    202

    +

    202

    203

    -

    204

    +

    204

    205

    206

    207

    -

    208

    -

    209

    +

    208

    +

    209

    210

    -

    211

    +

    211

    212

    -

    213

    +

    213

    214

    215

    216

    217

    -

    218

    -

    219

    +

    218

    +

    219

    220

    -

    221

    +

    221

    222

    -

    223

    +

    223

    224

    225

    -

    226

    -

    227

    -

    228

    -

    229

    +

    226

    +

    227

    +

    228

    +

    229

    230

    231

    -

    232

    +

    232

    233

    -

    234

    +

    234

    235

    -

    236

    +

    236

    237

    -

    238

    +

    238

    239

    240

    -

    241

    -

    242

    -

    243

    -

    244

    -

    245

    +

    241

    +

    242

    +

    243

    +

    244

    +

    245

    246

    247

    248

    249

    -

    250

    +

    250

    251

    -

    252

    +

    252

    253

    -

    254

    +

    254

    255

    -

    256

    +

    256

    257

    -

    258

    +

    258

    259

    260

    -

    261

    -

    262

    +

    261

    +

    262

    263

    -

    264

    +

    264

    265

    266

    -

    267

    +

    267

    268

    -

    269

    +

    269

    270

    -

    271

    +

    271

    272

    273

    274

    -

    275

    +

    275

    276

    -

    277

    +

    277

    278

    279

    -

    280

    +

    280

    281

    -

    282

    +

    282

    283

    284

    -

    285

    -

    286

    -

    287

    -

    288

    -

    289

    +

    285

    +

    286

    +

    287

    +

    288

    +

    289

    290

    291

    292

    293

    294

    295

    -

    296

    +

    296

    297

    -

    298

    -

    299

    -

    300

    +

    298

    +

    299

    +

    300

    301

    -

    302

    +

    302

    303

    304

    305

    306

    -

    307

    -

    308

    -

    309

    -

    310

    -

    311

    +

    307

    +

    308

    +

    309

    +

    310

    +

    311

    312

    313

    314

    @@ -380,25 +380,30 @@

    317

    318

    319

    -

    320

    +

    320

    321

    -

    322

    -

    323

    -

    324

    +

    322

    +

    323

    +

    324

    325

    -

    326

    +

    326

    327

    -

    328

    +

    328

    329

    330

    331

    332

    -

    333

    +

    333

    334

    335

    336

    337

    -

    338

    +

    338

    +

    339

    +

    340

    +

    341

    +

    342

    +

    343

    diff --git a/docs/html/coverage/openzwave_option.html b/docs/html/coverage/openzwave_option.html index 5ec5704f..82934ab7 100644 --- a/docs/html/coverage/openzwave_option.html +++ b/docs/html/coverage/openzwave_option.html @@ -25,9 +25,9 @@

    Coverage for openzwave.option :

    - 73 statements   + 78 statements   0 run - 73 missing + 78 missing 0 excluded

    @@ -91,30 +91,30 @@

    28

    29

    30

    -

    31

    -

    32

    +

    31

    +

    32

    33

    34

    35

    -

    36

    -

    37

    -

    38

    +

    36

    +

    37

    +

    38

    39

    40

    41

    42

    43

    44

    -

    45

    -

    46

    -

    47

    +

    45

    +

    46

    +

    47

    48

    49

    50

    51

    52

    53

    -

    54

    +

    54

    55

    56

    57

    @@ -123,69 +123,69 @@

    60

    61

    62

    -

    63

    -

    64

    -

    65

    -

    66

    +

    63

    +

    64

    +

    65

    +

    66

    67

    68

    69

    -

    70

    +

    70

    71

    -

    72

    +

    72

    73

    74

    -

    75

    +

    75

    76

    77

    78

    -

    79

    +

    79

    80

    -

    81

    -

    82

    -

    83

    +

    81

    +

    82

    +

    83

    84

    -

    85

    +

    85

    86

    87

    -

    88

    +

    88

    89

    -

    90

    +

    90

    91

    92

    -

    93

    +

    93

    94

    -

    95

    +

    95

    96

    97

    -

    98

    +

    98

    99

    -

    100

    +

    100

    101

    102

    -

    103

    +

    103

    104

    -

    105

    +

    105

    106

    107

    -

    108

    +

    108

    109

    -

    110

    +

    110

    111

    112

    -

    113

    +

    113

    114

    -

    115

    +

    115

    116

    117

    -

    118

    +

    118

    119

    -

    120

    +

    120

    121

    122

    -

    123

    +

    123

    124

    -

    125

    +

    125

    126

    127

    128

    @@ -200,14 +200,14 @@

    137

    138

    139

    -

    140

    +

    140

    141

    -

    142

    +

    142

    143

    144

    -

    145

    +

    145

    146

    -

    147

    +

    147

    148

    149

    150

    @@ -222,14 +222,14 @@

    159

    160

    161

    -

    162

    +

    162

    163

    -

    164

    +

    164

    165

    166

    -

    167

    +

    167

    168

    -

    169

    +

    169

    170

    171

    172

    @@ -244,146 +244,151 @@

    181

    182

    183

    -

    184

    +

    184

    185

    -

    186

    +

    186

    187

    188

    -

    189

    +

    189

    190

    -

    191

    +

    191

    192

    193

    -

    194

    +

    194

    195

    -

    196

    +

    196

    197

    198

    -

    199

    +

    199

    200

    -

    201

    +

    201

    202

    203

    -

    204

    +

    204

    205

    -

    206

    +

    206

    207

    208

    -

    209

    +

    209

    210

    -

    211

    +

    211

    212

    213

    -

    214

    +

    214

    215

    -

    216

    +

    216

    217

    218

    -

    219

    +

    219

    220

    -

    221

    +

    221

    222

    223

    -

    224

    +

    224

    225

    -

    226

    +

    226

    227

    228

    -

    229

    +

    229

    230

    -

    231

    +

    231

    232

    233

    -

    234

    +

    234

    235

    -

    236

    +

    236

    237

    238

    -

    239

    +

    239

    240

    -

    241

    +

    241

    242

    243

    -

    244

    +

    244

    245

    -

    246

    +

    246

    247

    248

    -

    249

    +

    249

    250

    -

    251

    +

    251

    252

    253

    -

    254

    +

    254

    255

    -

    256

    +

    256

    257

    258

    -

    259

    +

    259

    260

    -

    261

    +

    261

    262

    263

    -

    264

    +

    264

    265

    -

    266

    +

    266

    267

    268

    -

    269

    +

    269

    270

    -

    271

    +

    271

    272

    273

    -

    274

    +

    274

    275

    -

    276

    +

    276

    277

    278

    -

    279

    +

    279

    280

    -

    281

    +

    281

    282

    283

    -

    284

    +

    284

    285

    -

    286

    +

    286

    287

    288

    -

    289

    +

    289

    290

    -

    291

    +

    291

    292

    293

    -

    294

    +

    294

    295

    -

    296

    +

    296

    297

    298

    -

    299

    +

    299

    300

    -

    301

    +

    301

    302

    303

    -

    304

    +

    304

    305

    -

    306

    +

    306

    307

    308

    -

    309

    +

    309

    310

    -

    311

    +

    311

    312

    313

    -

    314

    +

    314

    315

    316

    -

    317

    +

    317

    318

    -

    319

    +

    319

    320

    321

    322

    323

    +

    324

    +

    325

    +

    326

    +

    327

    +

    328

    diff --git a/docs/html/coverage/openzwave_scene.html b/docs/html/coverage/openzwave_scene.html index 7b053d24..2391ef09 100644 --- a/docs/html/coverage/openzwave_scene.html +++ b/docs/html/coverage/openzwave_scene.html @@ -25,9 +25,9 @@

    Coverage for openzwave.scene :

    - 75 statements   + 80 statements   0 run - 75 missing + 80 missing 0 excluded

    @@ -87,200 +87,208 @@

    24

    25

    26

    -

    27

    -

    28

    +

    27

    +

    28

    29

    30

    31

    -

    32

    -

    33

    -

    34

    +

    32

    +

    33

    +

    34

    35

    36

    37

    38

    39

    40

    -

    41

    -

    42

    -

    43

    +

    41

    +

    42

    +

    43

    44

    45

    46

    47

    48

    49

    -

    50

    +

    50

    51

    52

    53

    54

    -

    55

    -

    56

    -

    57

    +

    55

    +

    56

    +

    57

    58

    -

    59

    -

    60

    -

    61

    -

    62

    +

    59

    +

    60

    +

    61

    +

    62

    63

    -

    64

    +

    64

    65

    -

    66

    +

    66

    67

    -

    68

    +

    68

    69

    70

    -

    71

    +

    71

    72

    -

    73

    +

    73

    74

    75

    -

    76

    +

    76

    77

    -

    78

    +

    78

    79

    80

    -

    81

    +

    81

    82

    -

    83

    +

    83

    84

    85

    -

    86

    +

    86

    87

    -

    88

    +

    88

    89

    90

    -

    91

    +

    91

    92

    -

    93

    +

    93

    94

    95

    96

    -

    97

    +

    97

    98

    -

    99

    +

    99

    100

    101

    -

    102

    +

    102

    103

    -

    104

    +

    104

    105

    106

    107

    108

    109

    -

    110

    -

    111

    -

    112

    -

    113

    -

    114

    +

    110

    +

    111

    +

    112

    +

    113

    +

    114

    115

    -

    116

    +

    116

    117

    -

    118

    -

    119

    -

    120

    +

    118

    +

    119

    +

    120

    121

    -

    122

    +

    122

    123

    124

    125

    126

    -

    127

    -

    128

    -

    129

    -

    130

    +

    127

    +

    128

    +

    129

    +

    130

    131

    132

    -

    133

    -

    134

    -

    135

    +

    133

    +

    134

    +

    135

    136

    -

    137

    +

    137

    138

    139

    140

    141

    -

    142

    -

    143

    -

    144

    -

    145

    +

    142

    +

    143

    +

    144

    +

    145

    146

    147

    -

    148

    -

    149

    -

    150

    +

    148

    +

    149

    +

    150

    151

    -

    152

    +

    152

    153

    154

    -

    155

    -

    156

    -

    157

    -

    158

    -

    159

    +

    155

    +

    156

    +

    157

    +

    158

    +

    159

    160

    161

    162

    -

    163

    +

    163

    164

    -

    165

    -

    166

    -

    167

    +

    165

    +

    166

    +

    167

    168

    -

    169

    +

    169

    170

    171

    -

    172

    -

    173

    -

    174

    -

    175

    -

    176

    +

    172

    +

    173

    +

    174

    +

    175

    +

    176

    177

    178

    179

    180

    181

    182

    -

    183

    +

    183

    184

    -

    185

    -

    186

    -

    187

    +

    185

    +

    186

    +

    187

    188

    -

    189

    +

    189

    190

    191

    192

    193

    -

    194

    +

    194

    195

    -

    196

    +

    196

    197

    198

    -

    199

    +

    199

    200

    -

    201

    +

    201

    202

    203

    -

    204

    +

    204

    205

    -

    206

    +

    206

    207

    208

    -

    209

    +

    209

    210

    -

    211

    +

    211

    212

    -

    213

    -

    214

    -

    215

    -

    216

    -

    217

    -

    218

    -

    219

    -

    220

    +

    213

    +

    214

    +

    215

    +

    216

    +

    217

    +

    218

    +

    219

    +

    220

    +

    221

    +

    222

    +

    223

    +

    224

    +

    225

    +

    226

    +

    227

    +

    228

    diff --git a/docs/html/coverage/openzwave_singleton.html b/docs/html/coverage/openzwave_singleton.html index eedc966e..bf8aa17b 100644 --- a/docs/html/coverage/openzwave_singleton.html +++ b/docs/html/coverage/openzwave_singleton.html @@ -25,9 +25,9 @@

    Coverage for openzwave.singleton :

    - 9 statements   + 14 statements   0 run - 9 missing + 14 missing 0 excluded

    @@ -86,23 +86,28 @@

    23

    24

    25

    -

    26

    +

    26

    27

    -

    28

    -

    29

    +

    28

    +

    29

    30

    31

    -

    32

    +

    32

    33

    34

    35

    36

    -

    37

    +

    37

    38

    -

    39

    +

    39

    40

    -

    41

    +

    41

    42

    +

    43

    +

    44

    +

    45

    +

    46

    +

    47

    diff --git a/docs/html/coverage/openzwave_value.html b/docs/html/coverage/openzwave_value.html index e1be6db9..7cfb061d 100644 --- a/docs/html/coverage/openzwave_value.html +++ b/docs/html/coverage/openzwave_value.html @@ -25,9 +25,9 @@

    Coverage for openzwave.value :

    - 170 statements   + 182 statements   0 run - 170 missing + 182 missing 0 excluded

    @@ -87,31 +87,31 @@

    24

    25

    26

    -

    27

    -

    28

    +

    27

    +

    28

    29

    30

    31

    -

    32

    -

    33

    -

    34

    +

    32

    +

    33

    +

    34

    35

    36

    37

    38

    39

    -

    40

    -

    41

    +

    40

    +

    41

    42

    -

    43

    +

    43

    44

    45

    -

    46

    -

    47

    +

    46

    +

    47

    48

    49

    50

    -

    51

    +

    51

    52

    53

    54

    @@ -132,40 +132,40 @@

    69

    70

    71

    -

    72

    -

    73

    -

    74

    +

    72

    +

    73

    +

    74

    75

    -

    76

    -

    77

    -

    78

    -

    79

    +

    76

    +

    77

    +

    78

    +

    79

    80

    -

    81

    +

    81

    82

    -

    83

    +

    83

    84

    85

    -

    86

    +

    86

    87

    -

    88

    +

    88

    89

    90

    91

    92

    -

    93

    +

    93

    94

    95

    -

    96

    +

    96

    97

    98

    99

    -

    100

    +

    100

    101

    102

    -

    103

    +

    103

    104

    -

    105

    +

    105

    106

    107

    108

    @@ -178,170 +178,170 @@

    115

    116

    117

    -

    118

    -

    119

    +

    118

    +

    119

    120

    121

    122

    -

    123

    -

    124

    -

    125

    +

    123

    +

    124

    +

    125

    126

    127

    128

    129

    130

    131

    -

    132

    +

    132

    133

    134

    -

    135

    +

    135

    136

    -

    137

    +

    137

    138

    -

    139

    +

    139

    140

    -

    141

    +

    141

    142

    143

    -

    144

    +

    144

    145

    -

    146

    +

    146

    147

    148

    -

    149

    +

    149

    150

    -

    151

    +

    151

    152

    153

    -

    154

    +

    154

    155

    -

    156

    +

    156

    157

    -

    158

    +

    158

    159

    -

    160

    +

    160

    161

    162

    -

    163

    +

    163

    164

    -

    165

    +

    165

    166

    167

    168

    -

    169

    +

    169

    170

    -

    171

    +

    171

    172

    173

    -

    174

    +

    174

    175

    -

    176

    +

    176

    177

    178

    -

    179

    +

    179

    180

    -

    181

    +

    181

    182

    183

    -

    184

    +

    184

    185

    -

    186

    +

    186

    187

    188

    189

    -

    190

    +

    190

    191

    -

    192

    +

    192

    193

    194

    -

    195

    +

    195

    196

    -

    197

    +

    197

    198

    199

    -

    200

    +

    200

    201

    -

    202

    +

    202

    203

    204

    -

    205

    +

    205

    206

    -

    207

    +

    207

    208

    209

    -

    210

    +

    210

    211

    -

    212

    +

    212

    213

    214

    -

    215

    +

    215

    216

    -

    217

    +

    217

    218

    219

    220

    221

    222

    -

    223

    +

    223

    224

    -

    225

    +

    225

    226

    227

    -

    228

    +

    228

    229

    -

    230

    +

    230

    231

    232

    233

    234

    235

    -

    236

    +

    236

    237

    -

    238

    +

    238

    239

    240

    -

    241

    +

    241

    242

    -

    243

    +

    243

    244

    245

    246

    247

    248

    249

    -

    250

    +

    250

    251

    -

    252

    +

    252

    253

    254

    -

    255

    +

    255

    256

    -

    257

    +

    257

    258

    259

    260

    261

    262

    -

    263

    +

    263

    264

    -

    265

    +

    265

    266

    267

    -

    268

    +

    268

    269

    -

    270

    +

    270

    271

    272

    273

    -

    274

    +

    274

    275

    -

    276

    +

    276

    277

    278

    -

    279

    +

    279

    280

    -

    281

    +

    281

    282

    283

    284

    @@ -351,32 +351,32 @@

    288

    289

    290

    -

    291

    +

    291

    292

    -

    293

    +

    293

    294

    295

    -

    296

    +

    296

    297

    -

    298

    +

    298

    299

    300

    -

    301

    +

    301

    302

    -

    303

    +

    303

    304

    305

    -

    306

    +

    306

    307

    -

    308

    +

    308

    309

    310

    311

    -

    312

    -

    313

    -

    314

    -

    315

    -

    316

    +

    312

    +

    313

    +

    314

    +

    315

    +

    316

    317

    318

    319

    @@ -390,35 +390,35 @@

    327

    328

    329

    -

    330

    +

    330

    331

    -

    332

    +

    332

    333

    -

    334

    +

    334

    335

    -

    336

    +

    336

    337

    -

    338

    +

    338

    339

    340

    341

    342

    343

    -

    344

    -

    345

    -

    346

    -

    347

    -

    348

    +

    344

    +

    345

    +

    346

    +

    347

    +

    348

    349

    350

    351

    352

    -

    353

    +

    353

    354

    355

    356

    357

    -

    358

    +

    358

    359

    360

    361

    @@ -457,162 +457,177 @@

    394

    395

    396

    -

    397

    +

    397

    398

    399

    400

    401

    -

    402

    -

    403

    +

    402

    +

    403

    404

    405

    -

    406

    +

    406

    407

    408

    -

    409

    -

    410

    +

    409

    +

    410

    411

    -

    412

    +

    412

    413

    414

    415

    416

    -

    417

    +

    417

    418

    -

    419

    +

    419

    420

    421

    -

    422

    +

    422

    423

    -

    424

    +

    424

    425

    426

    427

    -

    428

    +

    428

    429

    -

    430

    +

    430

    431

    432

    -

    433

    +

    433

    434

    -

    435

    +

    435

    436

    437

    438

    -

    439

    +

    439

    440

    -

    441

    +

    441

    442

    443

    -

    444

    +

    444

    445

    -

    446

    +

    446

    447

    448

    449

    450

    -

    451

    +

    451

    452

    -

    453

    +

    453

    454

    455

    -

    456

    +

    456

    457

    -

    458

    +

    458

    459

    460

    -

    461

    +

    461

    462

    -

    463

    +

    463

    464

    465

    -

    466

    +

    466

    467

    -

    468

    +

    468

    469

    470

    471

    472

    -

    473

    +

    473

    474

    -

    475

    +

    475

    476

    477

    -

    478

    +

    478

    479

    -

    480

    +

    480

    481

    482

    -

    483

    +

    483

    484

    -

    485

    +

    485

    486

    487

    -

    488

    +

    488

    489

    -

    490

    +

    490

    491

    492

    493

    -

    494

    +

    494

    495

    -

    496

    +

    496

    497

    498

    -

    499

    +

    499

    500

    -

    501

    +

    501

    502

    503

    -

    504

    +

    504

    505

    -

    506

    +

    506

    507

    508

    -

    509

    +

    509

    510

    -

    511

    +

    511

    512

    513

    514

    -

    515

    +

    515

    516

    -

    517

    +

    517

    518

    519

    -

    520

    +

    520

    521

    -

    522

    -

    523

    +

    522

    +

    523

    524

    525

    -

    526

    +

    526

    527

    -

    528

    +

    528

    529

    530

    -

    531

    +

    531

    532

    533

    534

    535

    -

    536

    -

    537

    +

    536

    +

    537

    538

    -

    539

    +

    539

    540

    -

    541

    -

    542

    +

    541

    +

    542

    543

    -

    544

    +

    544

    545

    -

    546

    -

    547

    -

    548

    -

    549

    -

    550

    -

    551

    -

    552

    +

    546

    +

    547

    +

    548

    +

    549

    +

    550

    +

    551

    +

    552

    +

    553

    +

    554

    +

    555

    +

    556

    +

    557

    +

    558

    +

    559

    +

    560

    +

    561

    +

    562

    +

    563

    +

    564

    +

    565

    +

    566

    +

    567

    diff --git a/docs/html/coverage/pyozwman_ozwsh_main.html b/docs/html/coverage/pyozwman_ozwsh_main.html index 439e7270..9dd6dd01 100644 --- a/docs/html/coverage/pyozwman_ozwsh_main.html +++ b/docs/html/coverage/pyozwman_ozwsh_main.html @@ -5,7 +5,7 @@ - Coverage for pyozwman.ozwsh_main: 15% + Coverage for pyozwman.ozwsh_main: 21% @@ -21,13 +21,13 @@ diff --git a/docs/html/coverage/pyozwman_ozwsh_widgets.html b/docs/html/coverage/pyozwman_ozwsh_widgets.html index 81c28254..2dec1f0b 100644 --- a/docs/html/coverage/pyozwman_ozwsh_widgets.html +++ b/docs/html/coverage/pyozwman_ozwsh_widgets.html @@ -5,10 +5,14 @@ +<<<<<<< HEAD <<<<<<< HEAD Coverage for pyozwman.ozwsh_widgets: 16% ======= Coverage for pyozwman.ozwsh_widgets: 24% +>>>>>>> master +======= + Coverage for pyozwman.ozwsh_widgets: 34% >>>>>>> master @@ -25,6 +29,7 @@ diff --git a/docs/html/coverage/pyozwweb_app_listener.html b/docs/html/coverage/pyozwweb_app_listener.html index a6a005d4..701cb6cb 100644 --- a/docs/html/coverage/pyozwweb_app_listener.html +++ b/docs/html/coverage/pyozwweb_app_listener.html @@ -5,7 +5,7 @@ - Coverage for pyozwweb.app.listener: 67% + Coverage for pyozwweb.app.listener: 71% @@ -21,13 +21,13 @@ diff --git a/docs/html/coverage/pyozwweb_app_socket_chat.html b/docs/html/coverage/pyozwweb_app_socket_chat.html index 17aaa505..230e8719 100644 --- a/docs/html/coverage/pyozwweb_app_socket_chat.html +++ b/docs/html/coverage/pyozwweb_app_socket_chat.html @@ -5,7 +5,7 @@ - Coverage for pyozwweb.app.socket.chat: 47% + Coverage for pyozwweb.app.socket.chat: 65% @@ -21,13 +21,13 @@ diff --git a/docs/html/coverage/pyozwweb_app_socket_ozwave.html b/docs/html/coverage/pyozwweb_app_socket_ozwave.html index 16e820ae..7109d936 100644 --- a/docs/html/coverage/pyozwweb_app_socket_ozwave.html +++ b/docs/html/coverage/pyozwweb_app_socket_ozwave.html @@ -5,7 +5,7 @@ - Coverage for pyozwweb.app.socket.ozwave: 23% + Coverage for pyozwweb.app.socket.ozwave: 29% @@ -21,13 +21,13 @@ diff --git a/docs/html/coverage/pyozwweb_app_views.html b/docs/html/coverage/pyozwweb_app_views.html index 41bdd0be..c661e60d 100644 --- a/docs/html/coverage/pyozwweb_app_views.html +++ b/docs/html/coverage/pyozwweb_app_views.html @@ -5,7 +5,7 @@ - Coverage for pyozwweb.app.views: 92% + Coverage for pyozwweb.app.views: 94% @@ -21,13 +21,13 @@ diff --git a/docs/html/coverage/pyozwweb_config.html b/docs/html/coverage/pyozwweb_config.html index a9a296e6..4fc8eac5 100644 --- a/docs/html/coverage/pyozwweb_config.html +++ b/docs/html/coverage/pyozwweb_config.html @@ -25,8 +25,8 @@

    Coverage for pyozwweb.config :

    - 41 statements   - 41 run + 44 statements   + 44 run 0 missing 0 excluded @@ -110,25 +110,25 @@

    47

    48

    49

    -

    50

    -

    51

    -

    52

    +

    50

    +

    51

    +

    52

    53

    54

    55

    -

    56

    -

    57

    -

    58

    +

    56

    +

    57

    +

    58

    59

    60

    -

    61

    -

    62

    +

    61

    +

    62

    63

    64

    65

    -

    66

    +

    66

    67

    -

    68

    +

    68

    69

    70

    71

    @@ -136,19 +136,23 @@

    73

    74

    75

    -

    76

    -

    77

    +

    76

    +

    77

    78

    79

    80

    -

    81

    +

    81

    82

    -

    83

    +

    83

    84

    85

    86

    -

    87

    -

    88

    +

    87

    +

    88

    +

    89

    +

    90

    +

    91

    +

    92

    diff --git a/docs/html/coverage/status.dat b/docs/html/coverage/status.dat index 77c47817..5831e8ed 100644 --- a/docs/html/coverage/status.dat +++ b/docs/html/coverage/status.dat @@ -37,7 +37,7 @@ p19 I0 sS'n_statements' p20 -I75 +I80 sS'n_excluded' p21 I0 @@ -46,13 +46,13 @@ p22 I0 sS'n_missing' p23 -I75 +I80 sS'n_missing_branches' p24 I0 sbssS'hash' p25 -S'\x120&\x8a\xd7\x97\x10\xd4\xd8\x0f\xcc~]\xf7q\x1d' +S'B+\xbc\xfb\xd9*=\xff\x83\xeb\xb4y\xc4\xcc\xfd\x1c' p26 ssS'pyozwman' p27 @@ -109,17 +109,17 @@ I1 sg19 I0 sg20 -I9 +I14 sg21 I0 sg22 I0 sg23 -I9 +I14 sg24 I0 sbssg25 -S'\xca\xce:\x1f\x1b\xec\x84dc>g\xe4JS\xff\x03' +S'\x05\xa5\xa6\xd7\x85\x91\xf4\xb9:a?\x85\x04\xc7\tB' p41 ssS'pyozwweb' p42 @@ -176,17 +176,17 @@ I1 sg19 I0 sg20 -I30 +I43 sg21 I0 sg22 I0 sg23 -I30 +I43 sg24 I0 sbssg25 -S'p\x80\x8f\xce\xaaCw\x12I\xaf;R\xf3\xfey9' +S'\x90^\xb9\x89O\xec\xfe6\xb4\xd1\x0b[@\xb3)\x1b' p56 ssS'openzwave_network' p57 @@ -210,17 +210,17 @@ I1 sg19 I0 sg20 -I539 +I546 sg21 I0 sg22 I0 sg23 -I539 +I546 sg24 I0 sbssg25 -S'\x00\x85z.k*\xfb\xffV\x9c\x94\xf6v\xe5\xbb7' +S'\xcb6\xac,\xae\xa1\xb1d\xf7y\xe4Zhp\xd3\xbc' p64 ssS'openzwave' p65 @@ -277,17 +277,17 @@ I1 sg19 I0 sg20 -I48 +I50 sg21 I0 sg22 I0 sg23 -I4 +I3 sg24 I0 sbssg25 -S"I\xc4x\x90\xa6\xa6~\xe89\x96'-y\xb1|I" +S'\x18\xd2\xb0\xe0\x16\xcf\xef\x03l\xb7\x970a\xadE\xc0' p79 ssS'openzwave_node' p80 @@ -311,17 +311,17 @@ I1 sg19 I0 sg20 -I204 +I228 sg21 I0 sg22 I0 sg23 -I204 +I228 sg24 I0 sbssg25 -S'#\x90\x06\xd2\xbckZ\xfd\xed\nW\xd2*@\xaa\xd7' +S'\x91s\xd8\x1fVY\xe7Vb-\x97\x9eE\xf8\xb5*' p87 ssS'openzwave_controller' p88 @@ -345,17 +345,17 @@ I1 sg19 I0 sg20 -I175 +I206 sg21 I0 sg22 I0 sg23 -I175 +I206 sg24 I0 sbssg25 -S'u\x90\x8d\x11n\xea\x8f\xa5\x08\xd7b\x89Q3B\xc4' +S'o\xbe\xb1oG^\x82\xd4\xd5\xdf\xb4-&MS\x1b' p95 ssS'pyozwweb_app_listener' p96 @@ -379,17 +379,17 @@ I1 sg19 I0 sg20 -I130 +I132 sg21 I0 sg22 I0 sg23 -I43 +I38 sg24 I0 sbssg25 -S'F5\xbb\xe7\x10\x81jYS\xb1y\x9e\x1e\xe4`\x00' +S'\xb9e}%\xfe\x15\x8e+\xf2\x95\xf2\xf8Z\xaa\xde\xe1' p103 ssS'openzwave_option' p104 @@ -413,17 +413,17 @@ I1 sg19 I0 sg20 -I73 +I78 sg21 I0 sg22 I0 sg23 -I73 +I78 sg24 I0 sbssg25 -S'\xcb\r`\xcap8\xb7\xd8\xb2\xfb\x98g\xca\xfc.\xa2' +S"}:9{\x0f\x03\xee\xac\xf3'u\xec\x03\xf2U\xc4" p111 ssS'pyozwman_ozwsh_widgets' p112 @@ -447,17 +447,17 @@ I1 sg19 I0 sg20 -I1393 +I1398 sg21 I0 sg22 I0 sg23 -I1057 +I925 sg24 I0 sbssg25 -S'\xfd\x9b\xa7\xcf\x1b\xecC;O\xcc\xf4\xfac\x99\xca\xa2' +S'\x12@e\xe0\xf4,}\xc75\xb7#\x1e\x91\xed\x8c0' p119 ssS'pyozwweb_app_socket' p120 @@ -515,17 +515,17 @@ I1 sg19 I0 sg20 -I126 +I131 sg21 I0 sg22 I0 sg23 -I126 +I131 sg24 I0 sbssg25 -S"\x83\xeb\xd7D\xa7\xf5\x86'\x12w\x85\xfaAR]\x06" +S'\xbb\x1d\xbf\x1fl\xdf_\xb5\x0b\n\x9b\x17\xf6k\x00\x9c' p135 ssS'pyozwweb_app_socket_chat' p136 @@ -549,17 +549,17 @@ I1 sg19 I0 sg20 -I49 +I54 sg21 I0 sg22 I0 sg23 -I26 +I19 sg24 I0 sbssg25 -S'ry\xd0\x9c&\x0b~\xf8~\xc78\xba\xa5"\xbd\xe0' +S'\xa1\xd8\xc4\xb3{\xf5{\x81\x88\xb9\xbd\xf5\x8bZ\x0f\x11' p143 ssS'openzwave_command' p144 @@ -583,17 +583,17 @@ I1 sg19 I0 sg20 -I123 +I128 sg21 I0 sg22 I0 sg23 -I123 +I128 sg24 I0 sbssg25 -S'\xb00\x0c\xa7\x1f\xe8db\xcd9W\x8c\xcb\x89P`' +S'Gv=\xc0\xebE\x85<\xc9\x995\xd0s\xf4\\\xb2' p151 ssS'openzwave_value' p152 @@ -617,17 +617,17 @@ I1 sg19 I0 sg20 -I170 +I182 sg21 I0 sg22 I0 sg23 -I170 +I182 sg24 I0 sbssg25 -S'E\xe3Lz\x94\x0e\x92$Xf\xaf\xae|&C%' +S'y\x93\x98A\x1fn\xb0\xe5\x98\\\xa3?\xcd\xf8\x8cL' p159 ssS'pyozwweb_config' p160 @@ -651,7 +651,7 @@ I1 sg19 I0 sg20 -I41 +I44 sg21 I0 sg22 @@ -661,7 +661,7 @@ I0 sg24 I0 sbssg25 -S'\xe5C\x13\xbe6X\x9c\x911#\xe3w:\x85\xd6B' +S'z\xa9\xe7\xc3\x16h`\x00\x8c!\xb4O\xb9z\xe6G' p167 ssS'pyozwweb_app_socket_ozwave' p168 @@ -685,17 +685,17 @@ I1 sg19 I0 sg20 -I213 +I218 sg21 I0 sg22 I0 sg23 -I165 +I155 sg24 I0 sbssg25 -S')\x04\x8f\xd9\xfb;e\xa1uWn(\x83\x10\xfe\xf8' +S'\r]\x85\x0e$\xe4\xc3\xd8\x1b_\xc8{7%\xa1g' p175 ssS'pyozwman_ozwsh_main' p176 @@ -719,17 +719,17 @@ I1 sg19 I0 sg20 -I400 +I405 sg21 I0 sg22 I0 sg23 -I340 +I318 sg24 I0 sbssg25 -S'\xf3\x05\x9b\xf6\x80\x0e\x9b\r\xa8\x101`\xeb\x97\xa5H' +S'lR1\x05\xd1\xd6\x02b\xaf\x94\xe5#\x84sW\xbe' p183 ssS'pyozwweb_app' p184 @@ -753,17 +753,17 @@ I1 sg19 I0 sg20 -I93 +I112 sg21 I0 sg22 I0 sg23 -I20 +I22 sg24 I0 sbssg25 -S'\x0f\xb3.\x86"\xf7\xd9.\xd9T\x93\x08`\x8bi?' +S'\xe9,`Y}\x8bS@#\x12Lh\x93"\x87U' p191 sssS'version' p192 diff --git a/docs/html/genindex.html b/docs/html/genindex.html index b8d5b3de..94087744 100644 --- a/docs/html/genindex.html +++ b/docs/html/genindex.html @@ -352,8 +352,6 @@

    D

    - - + - +
    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    Total3920318940783126 419%23%
    openzwave.command123123128128 0 0%
    openzwave.controller175175206206 0 0%
    openzwave.group30304343 0 0%
    openzwave.network539539546546 0 0%
    openzwave.node204204228228 0 0%
    openzwave.object126126131131 0 0%
    openzwave.option73737878 0 0%
    openzwave.scene75758080 0 0%
    openzwave.singleton991414 0 0%
    openzwave.value170170182182 0 0%
    pyozwman.ozwsh_main400340405318 015%21%
    pyozwman.ozwsh_widgets139310571398925 024%34%
    pyozwweb.app932011222 078%80%
    pyozwweb.app.listener1304313238 067%71%
    pyozwweb.app.socket.chat49265419 047%65%
    pyozwweb.app.socket.ozwave213165218155 023%29%
    pyozwweb.app.views484503 092%94%
    pyozwweb.config4144 0 0 @@ -775,667 +780,672 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    from openzwave.object import ZWaveNodeInterface 

    -

    from threading import Timer 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveNodeBasic(ZWaveNodeInterface): 

    -

        """ 

    -

        Represents an interface to BasicCommands 

    -

        I known it's not necessary as they can be included in the node directly. 

    -

        But it's a good starting point. 

    -

     

    -

        What I want to do is provide an automatic mapping system hidding 

    -

        the mapping classes. 

    -

     

    -

        First example, the battery level, it's not a basic command but don't care. 

    -

        Its command class is 0x80. 

    -

     

    -

        A user should write 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from openzwave.object import ZWaveNodeInterface 

    +

    from threading import Timer 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveNodeBasic(ZWaveNodeInterface): 

    +

        """ 

    +

        Represents an interface to BasicCommands 

    +

        I known it's not necessary as they can be included in the node directly. 

    +

        But it's a good starting point. 

    +

     

    +

        What I want to do is provide an automatic mapping system hidding 

    +

        the mapping classes. 

     

    -

        .. code-block:: python 

    -

     

    -

            if self.handle_command_class(class_id): 

    -

                ret=command_Class(...) 

    +

        First example, the battery level, it's not a basic command but don't care. 

    +

        Its command class is 0x80. 

    +

     

    +

        A user should write 

     

    -

        The classic way to do it is a classic method of registering. But 

    +

        .. code-block:: python 

     

    -

        Another way : using heritage multiple 

    -

     

    -

        ZWaveNode(ZWaveObject, ZWaveNodeBasic, ....) 

    -

        The interface will implement methods 

    -

        command_class_0x80(param1,param2,...) 

    -

        That's the first thing to do 

    -

        We also can define a property with a friendly name 

    -

     

    -

        handle_command_class will do the rest 

    -

     

    -

        Another way to do it : 

    -

        A node can manage actuators (switch, dimmer, ...) 

    -

        and sensors (temperature, consummation, temperature) 

    -

     

    -

        So we need a kind of mechanism to retrieve commands in a user friendly way 

    -

        Same for sensors. 

    -

     

    -

        A good use case is the AN158 Plug-in Meter Appliance Module 

    -

        We will study the following command classes : 

    -

        'COMMAND_CLASS_SWITCH_ALL', 'COMMAND_CLASS_SWITCH_BINARY', 

    -

        'COMMAND_CLASS_METER', 

    +

            if self.handle_command_class(class_id): 

    +

                ret=command_Class(...) 

    +

     

    +

        The classic way to do it is a classic method of registering. But 

    +

     

    +

        Another way : using heritage multiple 

    +

     

    +

        ZWaveNode(ZWaveObject, ZWaveNodeBasic, ....) 

    +

        The interface will implement methods 

    +

        command_class_0x80(param1,param2,...) 

    +

        That's the first thing to do 

    +

        We also can define a property with a friendly name 

    +

     

    +

        handle_command_class will do the rest 

    +

     

    +

        Another way to do it : 

    +

        A node can manage actuators (switch, dimmer, ...) 

    +

        and sensors (temperature, consummation, temperature) 

    +

     

    +

        So we need a kind of mechanism to retrieve commands in a user friendly way 

    +

        Same for sensors. 

     

    -

        The associated values are : 

    -

     

    -

        .. code-block:: python 

    -

     

    -

            COMMAND_CLASS_SWITCH_ALL : { 

    -

                72057594101481476L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 'On and Off Enabled', 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Switch All', 

    -

                    'readonly': False, 

    -

                    'data_str': 'On and Off Enabled', 

    -

                    'type': 'List'} 

    -

            } 

    -

            COMMAND_CLASS_SWITCH_BINARY : { 

    -

                72057594093060096L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': False, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Switch', 

    -

                    'readonly': False, 

    -

                    'data_str': False, 

    -

                    'type': 'Bool'} 

    -

            } 

    -

            COMMAND_CLASS_METER : { 

    -

                72057594093273600L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': False, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Exporting', 

    -

                    'readonly': True, 

    -

                    'data_str': False, 

    -

                    'type': 'Bool'}, 

    -

                72057594101662232L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 'False', 

    -

                    'min': 0L, 

    -

                    'writeonly': True, 

    -

                    'label': 'Reset', 

    -

                    'readonly': False, 

    -

                    'data_str': 'False', 

    -

                    'type': 'Button'}, 

    -

                72057594093273090L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': 'kWh', 

    -

                    'data': 0.0, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Energy', 

    -

                    'readonly': True, 

    -

                    'data_str': 0.0, 

    -

                    'type': 'Decimal'}, 

    -

                72057594093273218L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': 'W', 

    -

                    'data': 0.0, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Power', 

    -

                    'readonly': True, 

    -

                    'data_str': 0.0, 

    -

                    'type': 'Decimal'} 

    -

            } 

    -

     

    -

        Another example from an homePro dimmer (not configured in openzwave): 

    -

     

    -

        .. code-block:: python 

    -

     

    -

            COMMAND_CLASS_SWITCH_MULTILEVEL : { 

    -

                72057594109853736L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 'False', 

    -

                    'min': 0L, 

    -

                    'writeonly': True, 

    -

                    'label': 'Dim', 

    -

                    'readonly': False, 

    -

                    'data_str': 'False', 

    -

                    'type': 'Button'}, 

    -

                72057594109853697L: { 

    -

                    'help': '', 

    -

                    'max': 255L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 69, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Level', 

    -

                    'readonly': False, 

    -

                    'data_str': 69, 

    -

                    'type': 'Byte'}, 

    -

                72057594118242369L: { 

    -

                    'help': '', 

    -

                    'max': 255L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 0, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Start Level', 

    -

                    'readonly': False, 

    -

                    'data_str': 0, 

    -

                    'type': 'Byte'}, 

    -

                72057594109853720L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 'False', 

    -

                    'min': 0L, 

    -

                    'writeonly': True, 

    -

                    'label': 'Bright', 

    -

                    'readonly': False, 

    -

                    'data_str': 'False', 

    -

                    'type': 'Button'}, 

    -

                72057594118242352L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': False, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Ignore Start Level', 

    -

                    'readonly': False, 

    -

                    'data_str': False, 

    -

                    'type': 'Bool'} 

    -

            } 

    -

     

    -

        What about the conclusion : 

    -

     

    -

            The COMMAND_CLASS_SWITCH_ALL is defined with the same label and 

    -

            use a list as parameter. This should be a configuration parameter. 

    -

            Don't know what to do for this command class 

    -

     

    -

            The COMMAND_CLASS_SWITCH_BINARY use a bool as parameter while 

    -

            COMMAND_CLASS_SWITCH_MULTILEVEL use 2 buttons : Dim and Bright. 

    -

            Dim and Bright must be done in 2 steps : set the level and activate 

    -

            the button. 

    +

        A good use case is the AN158 Plug-in Meter Appliance Module 

    +

        We will study the following command classes : 

    +

        'COMMAND_CLASS_SWITCH_ALL', 'COMMAND_CLASS_SWITCH_BINARY', 

    +

        'COMMAND_CLASS_METER', 

    +

     

    +

        The associated values are : 

    +

     

    +

        .. code-block:: python 

    +

     

    +

            COMMAND_CLASS_SWITCH_ALL : { 

    +

                72057594101481476L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 'On and Off Enabled', 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Switch All', 

    +

                    'readonly': False, 

    +

                    'data_str': 'On and Off Enabled', 

    +

                    'type': 'List'} 

    +

            } 

    +

            COMMAND_CLASS_SWITCH_BINARY : { 

    +

                72057594093060096L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': False, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Switch', 

    +

                    'readonly': False, 

    +

                    'data_str': False, 

    +

                    'type': 'Bool'} 

    +

            } 

    +

            COMMAND_CLASS_METER : { 

    +

                72057594093273600L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': False, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Exporting', 

    +

                    'readonly': True, 

    +

                    'data_str': False, 

    +

                    'type': 'Bool'}, 

    +

                72057594101662232L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 'False', 

    +

                    'min': 0L, 

    +

                    'writeonly': True, 

    +

                    'label': 'Reset', 

    +

                    'readonly': False, 

    +

                    'data_str': 'False', 

    +

                    'type': 'Button'}, 

    +

                72057594093273090L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': 'kWh', 

    +

                    'data': 0.0, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Energy', 

    +

                    'readonly': True, 

    +

                    'data_str': 0.0, 

    +

                    'type': 'Decimal'}, 

    +

                72057594093273218L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': 'W', 

    +

                    'data': 0.0, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Power', 

    +

                    'readonly': True, 

    +

                    'data_str': 0.0, 

    +

                    'type': 'Decimal'} 

    +

            } 

    +

     

    +

        Another example from an homePro dimmer (not configured in openzwave): 

    +

     

    +

        .. code-block:: python 

    +

     

    +

            COMMAND_CLASS_SWITCH_MULTILEVEL : { 

    +

                72057594109853736L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 'False', 

    +

                    'min': 0L, 

    +

                    'writeonly': True, 

    +

                    'label': 'Dim', 

    +

                    'readonly': False, 

    +

                    'data_str': 'False', 

    +

                    'type': 'Button'}, 

    +

                72057594109853697L: { 

    +

                    'help': '', 

    +

                    'max': 255L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 69, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Level', 

    +

                    'readonly': False, 

    +

                    'data_str': 69, 

    +

                    'type': 'Byte'}, 

    +

                72057594118242369L: { 

    +

                    'help': '', 

    +

                    'max': 255L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 0, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Start Level', 

    +

                    'readonly': False, 

    +

                    'data_str': 0, 

    +

                    'type': 'Byte'}, 

    +

                72057594109853720L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 'False', 

    +

                    'min': 0L, 

    +

                    'writeonly': True, 

    +

                    'label': 'Bright', 

    +

                    'readonly': False, 

    +

                    'data_str': 'False', 

    +

                    'type': 'Button'}, 

    +

                72057594118242352L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': False, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Ignore Start Level', 

    +

                    'readonly': False, 

    +

                    'data_str': False, 

    +

                    'type': 'Bool'} 

    +

            } 

    +

     

    +

        What about the conclusion : 

    +

     

    +

            The COMMAND_CLASS_SWITCH_ALL is defined with the same label and 

    +

            use a list as parameter. This should be a configuration parameter. 

    +

            Don't know what to do for this command class 

     

    -

            So we must add one or more lines in the actuators : 

    -

     

    -

            Switch : {setter:self.set_command_class_0xYZ(valueId, new), getter:} 

    -

            We must find a way to access the value directly 

    +

            The COMMAND_CLASS_SWITCH_BINARY use a bool as parameter while 

    +

            COMMAND_CLASS_SWITCH_MULTILEVEL use 2 buttons : Dim and Bright. 

    +

            Dim and Bright must be done in 2 steps : set the level and activate 

    +

            the button. 

     

    -

            Bright 

    -

            Dim 

    -

     

    -

            So for the COMMAND_CLASS_SWITCH_BINARY we must define a function called 

    -

            Switch (=the label of the value). What happen if we have 2 switches 

    -

            on the node : 2 values I suppose. 

    -

     

    -

            COMMAND_CLASS_SWITCH_MULTILEVEL uses 2 commands : 4 when 2 dimmers on the 

    -

            done ? Don't know but it can. 

    -

     

    -

            COMMAND_CLASS_METER export many values : 2 of them sends a decimal 

    -

            and are readonly. They also have a Unit defined ans values are readonly 

    -

     

    -

            COMMAND_CLASS_METER are used for sensors only. So we would map 

    -

            every values entries as defined before 

    -

     

    -

            Programming : 

    -

            get_switches : retrieve the list of switches on the node 

    -

            is_switch (label) : says if the value with label=label is a switch 

    -

            get_switch (label) : retrieve the value where label=label 

    -

        """ 

    -

     

    -

     

    -

        def get_battery_level(self, value_id=None): 

    -

            """ 

    -

            The battery level of this node. 

    -

            The command 0x80 (COMMAND_CLASS_BATTERY) of this node. 

    +

            So we must add one or more lines in the actuators : 

    +

     

    +

            Switch : {setter:self.set_command_class_0xYZ(valueId, new), getter:} 

    +

            We must find a way to access the value directly 

    +

     

    +

            Bright 

    +

            Dim 

    +

     

    +

            So for the COMMAND_CLASS_SWITCH_BINARY we must define a function called 

    +

            Switch (=the label of the value). What happen if we have 2 switches 

    +

            on the node : 2 values I suppose. 

    +

     

    +

            COMMAND_CLASS_SWITCH_MULTILEVEL uses 2 commands : 4 when 2 dimmers on the 

    +

            done ? Don't know but it can. 

    +

     

    +

            COMMAND_CLASS_METER export many values : 2 of them sends a decimal 

    +

            and are readonly. They also have a Unit defined ans values are readonly 

    +

     

    +

            COMMAND_CLASS_METER are used for sensors only. So we would map 

    +

            every values entries as defined before 

    +

     

    +

            Programming : 

    +

            get_switches : retrieve the list of switches on the node 

    +

            is_switch (label) : says if the value with label=label is a switch 

    +

            get_switch (label) : retrieve the value where label=label 

    +

        """ 

    +

     

     

    -

            :param value_id: The value to retrieve state. If None, retrieve the first value 

    -

            :type value_id: int 

    -

            :return: The level of this battery 

    -

            :rtype: int 

    -

            """ 

    -

            if value_id is None: 

    -

                for val in self.get_battery_levels(): 

    -

                    return self.values[val].data 

    -

            elif value_id in self.get_battery_levels(): 

    -

                return self.values[value_id].data 

    -

            return None 

    -

     

    -

        def get_battery_levels(self): 

    -

            """ 

    -

            The command 0x80 (COMMAND_CLASS_BATTERY) of this node. 

    -

            Retrieve the list of values to consider as batteries. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x80 

    -

                genre = "User" 

    -

                type = "Byte" 

    -

                readonly = True 

    -

                writeonly = False 

    -

     

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    -

            """ 

    -

            return self.get_values(class_id=0x80, genre='User', \ 

    -

            type='Byte', readonly=True, writeonly=False) 

    -

     

    -

        def get_power_level(self, value_id=None): 

    -

            """ 

    -

            The power level of this node. 

    -

            The command 0x73 (COMMAND_CLASS_POWERLEVEL) of this node. 

    +

        def get_battery_level(self, value_id=None): 

    +

            """ 

    +

            The battery level of this node. 

    +

            The command 0x80 (COMMAND_CLASS_BATTERY) of this node. 

    +

     

    +

            :param value_id: The value to retrieve state. If None, retrieve the first value 

    +

            :type value_id: int 

    +

            :return: The level of this battery 

    +

            :rtype: int 

    +

            """ 

    +

            if value_id is None: 

    +

                for val in self.get_battery_levels(): 

    +

                    return self.values[val].data 

    +

            elif value_id in self.get_battery_levels(): 

    +

                return self.values[value_id].data 

    +

            return None 

    +

     

    +

        def get_battery_levels(self): 

    +

            """ 

    +

            The command 0x80 (COMMAND_CLASS_BATTERY) of this node. 

    +

            Retrieve the list of values to consider as batteries. 

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x80 

    +

                genre = "User" 

    +

                type = "Byte" 

    +

                readonly = True 

    +

                writeonly = False 

    +

     

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

            """ 

    +

            return self.get_values(class_id=0x80, genre='User', \ 

    +

            type='Byte', readonly=True, writeonly=False) 

     

    -

            :param value_id: The value to retrieve state. If None, retrieve the first value 

    -

            :type value_id: int 

    -

            :return: The level of this battery 

    -

            :rtype: int 

    -

            """ 

    -

            if value_id is None: 

    -

                for val in self.get_power_levels(): 

    -

                    return self.values[val].data 

    -

            elif value_id in self.get_power_levels(): 

    -

                return self.values[value_id].data 

    -

            return None 

    -

     

    -

        def get_power_levels(self): 

    -

            """ 

    -

            The command 0x73 (COMMAND_CLASS_POWERLEVEL) of this node. 

    -

            Retrieve the list of values to consider as power_levels. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x73 

    -

                genre = "User" 

    -

                type = "Byte" 

    -

                readonly = True 

    -

                writeonly = False 

    -

     

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    -

            """ 

    -

            return self.get_values(class_id=0x73, genre='User', \ 

    -

            type='Byte', readonly=True, writeonly=False) 

    -

     

    -

        def can_wake_up(self): 

    -

            """ 

    -

            Check if node contain the command class 0x84 (COMMAND_CLASS_WAKE_UP). 

    -

     

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x84 

    -

     

    -

            :return: True if the node can wake up 

    -

            :rtype: bool 

    -

            """ 

    -

            res = self.get_values(class_id=0x84) 

    -

            if res is not None and len(res) > 0: 

    -

                return True 

    -

            else: 

    -

                return False 

    -

     

    -

    class ZWaveNodeSwitch(ZWaveNodeInterface): 

    -

        """ 

    -

        Represents an interface to switches and dimmers Commands 

    -

     

    -

        """ 

    -

     

    -

        def get_switches_all(self): 

    -

            """ 

    -

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    -

            Retrieve the list of values to consider as switches_all. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x27 

    -

                genre = "System" 

    -

                type = "List" 

    -

                readonly = False 

    -

                writeonly = False 

    -

     

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            return self.get_values(class_id=0x27, genre='System', \ 

    -

            type='List', readonly=False, writeonly=False) 

    -

     

    -

        def set_switch_all(self, value_id, value): 

    -

            """ 

    -

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    -

            Set switches_all to value (using value value_id). 

    +

        def get_power_level(self, value_id=None): 

    +

            """ 

    +

            The power level of this node. 

    +

            The command 0x73 (COMMAND_CLASS_POWERLEVEL) of this node. 

    +

     

    +

            :param value_id: The value to retrieve state. If None, retrieve the first value 

    +

            :type value_id: int 

    +

            :return: The level of this battery 

    +

            :rtype: int 

    +

            """ 

    +

            if value_id is None: 

    +

                for val in self.get_power_levels(): 

    +

                    return self.values[val].data 

    +

            elif value_id in self.get_power_levels(): 

    +

                return self.values[value_id].data 

    +

            return None 

    +

     

    +

        def get_power_levels(self): 

    +

            """ 

    +

            The command 0x73 (COMMAND_CLASS_POWERLEVEL) of this node. 

    +

            Retrieve the list of values to consider as power_levels. 

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x73 

    +

                genre = "User" 

    +

                type = "Byte" 

    +

                readonly = True 

    +

                writeonly = False 

    +

     

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

            """ 

    +

            return self.get_values(class_id=0x73, genre='User', \ 

    +

            type='Byte', readonly=True, writeonly=False) 

    +

     

    +

        def can_wake_up(self): 

    +

            """ 

    +

            Check if node contain the command class 0x84 (COMMAND_CLASS_WAKE_UP). 

    +

     

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x84 

    +

     

    +

            :return: True if the node can wake up 

    +

            :rtype: bool 

    +

            """ 

    +

            res = self.get_values(class_id=0x84) 

    +

            if res is not None and len(res) > 0: 

    +

                return True 

    +

            else: 

    +

                return False 

    +

     

    +

    class ZWaveNodeSwitch(ZWaveNodeInterface): 

    +

        """ 

    +

        Represents an interface to switches and dimmers Commands 

    +

     

    +

        """ 

    +

     

    +

        def get_switches_all(self): 

    +

            """ 

    +

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    +

            Retrieve the list of values to consider as switches_all. 

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x27 

    +

                genre = "System" 

    +

                type = "List" 

    +

                readonly = False 

    +

                writeonly = False 

    +

     

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            return self.get_values(class_id=0x27, genre='System', \ 

    +

            type='List', readonly=False, writeonly=False) 

     

    -

            :param value_id: The value to retrieve state 

    -

            :type value_id: int 

    -

            :param value: A predefined string 

    -

            :type value: str 

    +

        def set_switch_all(self, value_id, value): 

    +

            """ 

    +

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    +

            Set switches_all to value (using value value_id). 

     

    -

            """ 

    -

            if value_id in self.get_switches_all(): 

    -

                self.values[value_id].data = value 

    -

                return True 

    -

            return False 

    -

     

    -

        def get_switch_all_state(self, value_id): 

    -

            """ 

    -

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    -

            Return the state (using value value_id) of a switch or a dimmer. 

    +

            :param value_id: The value to retrieve state 

    +

            :type value_id: int 

    +

            :param value: A predefined string 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            if value_id in self.get_switches_all(): 

    +

                self.values[value_id].data = value 

    +

                return True 

    +

            return False 

     

    -

            :param value_id: The value to retrieve state 

    -

            :type value_id: int 

    -

            :return: The state of the value 

    -

            :rtype: bool 

    +

        def get_switch_all_state(self, value_id): 

    +

            """ 

    +

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    +

            Return the state (using value value_id) of a switch or a dimmer. 

     

    -

            """ 

    -

            if value_id in self.get_switches_all(): 

    -

                instance = self.values[value_id].instance 

    -

                for switch in self.get_switches(): 

    -

                    if self.values[switch].instance == instance: 

    -

                        return self.values[switch].data 

    -

                for dimmer in self.get_dimmers(): 

    -

                    if self.values[dimmer].instance == instance: 

    -

                        if self.values[dimmer].data == 0: 

    -

                            return False 

    -

                        else: 

    -

                            return True 

    -

            return None 

    -

     

    -

        def get_switch_all_item(self, value_id): 

    -

            """ 

    -

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    -

            Return the current value (using value value_id) of a switch_all. 

    +

            :param value_id: The value to retrieve state 

    +

            :type value_id: int 

    +

            :return: The state of the value 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            if value_id in self.get_switches_all(): 

    +

                instance = self.values[value_id].instance 

    +

                for switch in self.get_switches(): 

    +

                    if self.values[switch].instance == instance: 

    +

                        return self.values[switch].data 

    +

                for dimmer in self.get_dimmers(): 

    +

                    if self.values[dimmer].instance == instance: 

    +

                        if self.values[dimmer].data == 0: 

    +

                            return False 

    +

                        else: 

    +

                            return True 

    +

            return None 

     

    -

            :param value_id: The value to retrieve switch_all value 

    -

            :type value_id: int 

    -

            :return: The value of the value 

    -

            :rtype: str 

    +

        def get_switch_all_item(self, value_id): 

    +

            """ 

    +

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    +

            Return the current value (using value value_id) of a switch_all. 

     

    -

            """ 

    -

            if value_id in self.get_switches_all(): 

    -

                return self.values[value_id].data 

    -

            return None 

    +

            :param value_id: The value to retrieve switch_all value 

    +

            :type value_id: int 

    +

            :return: The value of the value 

    +

            :rtype: str 

     

    -

        def get_switch_all_items(self, value_id): 

    -

            """ 

    -

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    -

            Return the all the possible values (using value value_id) of a switch_all. 

    +

            """ 

    +

            if value_id in self.get_switches_all(): 

    +

                return self.values[value_id].data 

    +

            return None 

     

    -

            :param value_id: The value to retrieve items list 

    -

            :type value_id: int 

    -

            :return: The value of the value 

    -

            :rtype: set() 

    +

        def get_switch_all_items(self, value_id): 

    +

            """ 

    +

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    +

            Return the all the possible values (using value value_id) of a switch_all. 

     

    -

            """ 

    -

            if value_id in self.get_switches_all(): 

    -

                return self.values[value_id].data_items 

    -

            return None 

    +

            :param value_id: The value to retrieve items list 

    +

            :type value_id: int 

    +

            :return: The value of the value 

    +

            :rtype: set() 

     

    -

        def get_switches(self): 

    -

            """ 

    -

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    -

            Retrieve the list of values to consider as switches. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x25 

    -

                genre = "User" 

    -

                type = "Bool" 

    -

                readonly = False 

    -

                writeonly = False 

    -

     

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            return self.get_values(class_id=0x25, genre='User', \ 

    -

            type='Bool', readonly=False, writeonly=False) 

    -

     

    -

        def set_switch(self, value_id, value): 

    -

            """ 

    -

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    -

            Set switch to value (using value value_id). 

    +

            """ 

    +

            if value_id in self.get_switches_all(): 

    +

                return self.values[value_id].data_items 

    +

            return None 

    +

     

    +

        def get_switches(self): 

    +

            """ 

    +

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    +

            Retrieve the list of values to consider as switches. 

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x25 

    +

                genre = "User" 

    +

                type = "Bool" 

    +

                readonly = False 

    +

                writeonly = False 

    +

     

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            return self.get_values(class_id=0x25, genre='User', \ 

    +

            type='Bool', readonly=False, writeonly=False) 

     

    -

            :param value_id: The value to retrieve state 

    -

            :type value_id: int 

    -

            :param value: True or False 

    -

            :type value: bool 

    +

        def set_switch(self, value_id, value): 

    +

            """ 

    +

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    +

            Set switch to value (using value value_id). 

     

    -

            """ 

    -

            if value_id in self.get_switches(): 

    -

                self.values[value_id].data = value 

    -

                return True 

    -

            return False 

    -

     

    -

        def get_switch_state(self, value_id): 

    -

            """ 

    -

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    -

            Return the state (using value value_id) of a switch. 

    +

            :param value_id: The value to retrieve state 

    +

            :type value_id: int 

    +

            :param value: True or False 

    +

            :type value: bool 

    +

     

    +

            """ 

    +

            if value_id in self.get_switches(): 

    +

                self.values[value_id].data = value 

    +

                return True 

    +

            return False 

     

    -

            :param value_id: The value to retrieve state 

    -

            :type value_id: int 

    -

            :return: The state of the value 

    -

            :rtype: bool 

    +

        def get_switch_state(self, value_id): 

    +

            """ 

    +

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    +

            Return the state (using value value_id) of a switch. 

     

    -

            """ 

    -

            if value_id in self.get_switches(): 

    -

                return self.values[value_id].data 

    -

            return None 

    +

            :param value_id: The value to retrieve state 

    +

            :type value_id: int 

    +

            :return: The state of the value 

    +

            :rtype: bool 

     

    -

        def get_dimmers(self): 

    -

            """ 

    -

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    -

            Retrieve the list of values to consider as dimmers. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x26 

    -

                genre = "User" 

    -

                type = "Bool" 

    -

                readonly = False 

    -

                writeonly = False 

    -

     

    -

            :return: The list of dimmers on this node 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            return self.get_values(class_id=0x26, genre='User', \ 

    -

            type='Byte', readonly=False, writeonly=False) 

    -

     

    -

        def set_dimmer(self, value_id, value): 

    -

            """ 

    -

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    -

            Set switch to value (using value value_id). 

    +

            """ 

    +

            if value_id in self.get_switches(): 

    +

                return self.values[value_id].data 

    +

            return None 

    +

     

    +

        def get_dimmers(self): 

    +

            """ 

    +

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    +

            Retrieve the list of values to consider as dimmers. 

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x26 

    +

                genre = "User" 

    +

                type = "Bool" 

    +

                readonly = False 

    +

                writeonly = False 

    +

     

    +

            :return: The list of dimmers on this node 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            return self.get_values(class_id=0x26, genre='User', \ 

    +

            type='Byte', readonly=False, writeonly=False) 

     

    -

            :param value_id: The value to retrieve state 

    -

            :type value_id: int 

    -

            :param value: The level : a value between 0-99 or 255. 255 set the level to the last value. \ 

    -

            0 turn the dimmer off 

    -

            :type value: int 

    -

     

    -

            """ 

    -

            logger.debug("set_dimmer Level:%s", value) 

    -

            if value_id in self.get_dimmers(): 

    -

                if 99 < value < 255: 

    -

                    value = 99 

    -

                elif value < 0: 

    -

                    value = 0 

    -

                self.values[value_id].data = value 

    -

                #Dimmers doesn't return the good level. 

    -

                #Add a Timer to refresh the value 

    -

                if value == 0: 

    -

                    timer1 = Timer(1, self.values[value_id].refresh) 

    -

                    timer1.start() 

    -

                    timer2 = Timer(2, self.values[value_id].refresh) 

    -

                    timer2.start() 

    -

                return True 

    -

            return False 

    -

     

    -

        def get_dimmer_level(self, value_id): 

    -

            """ 

    -

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    -

            Get the dimmer level (using value value_id). 

    +

        def set_dimmer(self, value_id, value): 

    +

            """ 

    +

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    +

            Set switch to value (using value value_id). 

    +

     

    +

            :param value_id: The value to retrieve state 

    +

            :type value_id: int 

    +

            :param value: The level : a value between 0-99 or 255. 255 set the level to the last value. \ 

    +

            0 turn the dimmer off 

    +

            :type value: int 

    +

     

    +

            """ 

    +

            logger.debug("set_dimmer Level:%s", value) 

    +

            if value_id in self.get_dimmers(): 

    +

                if 99 < value < 255: 

    +

                    value = 99 

    +

                elif value < 0: 

    +

                    value = 0 

    +

                self.values[value_id].data = value 

    +

                #Dimmers doesn't return the good level. 

    +

                #Add a Timer to refresh the value 

    +

                if value == 0: 

    +

                    timer1 = Timer(1, self.values[value_id].refresh) 

    +

                    timer1.start() 

    +

                    timer2 = Timer(2, self.values[value_id].refresh) 

    +

                    timer2.start() 

    +

                return True 

    +

            return False 

     

    -

            :param value_id: The value to retrieve level 

    -

            :type value_id: int 

    -

            :return: The level : a value between 0-99 

    -

            :rtype: int 

    +

        def get_dimmer_level(self, value_id): 

    +

            """ 

    +

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    +

            Get the dimmer level (using value value_id). 

     

    -

            """ 

    -

            if value_id in self.get_dimmers(): 

    -

                return self.values[value_id].data 

    -

            return None 

    +

            :param value_id: The value to retrieve level 

    +

            :type value_id: int 

    +

            :return: The level : a value between 0-99 

    +

            :rtype: int 

     

    -

    class ZWaveNodeSensor(ZWaveNodeInterface): 

    -

        """ 

    -

        Represents an interface to Sensor Commands 

    -

     

    -

        """ 

    -

     

    -

        def get_sensors(self, type='All'): 

    -

            """ 

    -

            The command 0x30 (COMMAND_CLASS_SENSOR_BINARY) of this node. 

    -

            The command 0x31 (COMMAND_CLASS_SENSOR_MULTILEVEL) of this node. 

    -

            The command 0x32 (COMMAND_CLASS_METER) of this node. 

    -

            Retrieve the list of values to consider as sensors. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x30-32 

    -

                genre = "User" 

    -

                readonly = True 

    -

                writeonly = False 

    +

            """ 

    +

            if value_id in self.get_dimmers(): 

    +

                return self.values[value_id].data 

    +

            return None 

    +

     

    +

    class ZWaveNodeSensor(ZWaveNodeInterface): 

    +

        """ 

    +

        Represents an interface to Sensor Commands 

    +

     

    +

        """ 

    +

     

    +

        def get_sensors(self, type='All'): 

    +

            """ 

    +

            The command 0x30 (COMMAND_CLASS_SENSOR_BINARY) of this node. 

    +

            The command 0x31 (COMMAND_CLASS_SENSOR_MULTILEVEL) of this node. 

    +

            The command 0x32 (COMMAND_CLASS_METER) of this node. 

    +

            Retrieve the list of values to consider as sensors. 

    +

            Filter rules are : 

     

    -

            :param type: the type of value 

    -

            :type type: 'All' or PyValueTypes 

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    +

                command_class = 0x30-32 

    +

                genre = "User" 

    +

                readonly = True 

    +

                writeonly = False 

     

    -

            """ 

    -

            values = {} 

    -

            values.update(self.get_values(type=type, class_id=0x30, genre='User', \ 

    -

                readonly=True, writeonly=False)) 

    -

            values.update(self.get_values(type=type, class_id=0x31, genre='User', \ 

    -

                readonly=True, writeonly=False)) 

    -

            values.update(self.get_values(type=type, class_id=0x32, genre='User', \ 

    -

                readonly=True, writeonly=False)) 

    -

            return values 

    -

     

    -

        def get_sensor_value(self, value_id): 

    -

            """ 

    -

            The command 0x30 (COMMAND_CLASS_SENSOR_BINARY) of this node. 

    -

            The command 0x31 (COMMAND_CLASS_SENSOR_MULTILEVEL) of this node. 

    -

            The command 0x32 (COMMAND_CLASS_METER) of this node. 

    -

     

    -

            :param value_id: The value to retrieve value 

    -

            :type value_id: int 

    -

            :return: The state of the sensors 

    -

            :rtype: variable 

    +

            :param type: the type of value 

    +

            :type type: 'All' or PyValueTypes 

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            values = {} 

    +

            values.update(self.get_values(type=type, class_id=0x30, genre='User', \ 

    +

                readonly=True, writeonly=False)) 

    +

            values.update(self.get_values(type=type, class_id=0x31, genre='User', \ 

    +

                readonly=True, writeonly=False)) 

    +

            values.update(self.get_values(type=type, class_id=0x32, genre='User', \ 

    +

                readonly=True, writeonly=False)) 

    +

            return values 

    +

     

    +

        def get_sensor_value(self, value_id): 

    +

            """ 

    +

            The command 0x30 (COMMAND_CLASS_SENSOR_BINARY) of this node. 

    +

            The command 0x31 (COMMAND_CLASS_SENSOR_MULTILEVEL) of this node. 

    +

            The command 0x32 (COMMAND_CLASS_METER) of this node. 

     

    -

            """ 

    -

            if value_id in self.get_sensors(): 

    -

                return self.values[value_id].data 

    -

            return None 

    +

            :param value_id: The value to retrieve value 

    +

            :type value_id: int 

    +

            :return: The state of the sensors 

    +

            :rtype: variable 

     

    -

    class ZWaveNodeSecurity(ZWaveNodeInterface): 

    -

        """ 

    -

        Represents an interface to Security Commands 

    -

     

    -

        """ 

    -

     

    -

        def get_protections(self): 

    -

            """ 

    -

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    -

            Retrieve the list of values to consider as protection. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x75 

    -

                genre = "User" 

    -

                readonly = True 

    -

                writeonly = False 

    +

            """ 

    +

            if value_id in self.get_sensors(): 

    +

                return self.values[value_id].data 

    +

            return None 

    +

     

    +

    class ZWaveNodeSecurity(ZWaveNodeInterface): 

    +

        """ 

    +

        Represents an interface to Security Commands 

    +

     

    +

        """ 

    +

     

    +

        def get_protections(self): 

    +

            """ 

    +

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    +

            Retrieve the list of values to consider as protection. 

    +

            Filter rules are : 

     

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            return self.get_values(class_id=0x75, genre='System', \ 

    -

                type='List', readonly=False, writeonly=False) 

    -

     

    -

        def set_protection(self, value_id, value): 

    -

            """ 

    -

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    -

            Set protection to value (using value value_id). 

    +

                command_class = 0x75 

    +

                genre = "User" 

    +

                readonly = True 

    +

                writeonly = False 

    +

     

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            return self.get_values(class_id=0x75, genre='System', \ 

    +

                type='List', readonly=False, writeonly=False) 

     

    -

            :param value_id: The value to set protection 

    -

            :type value_id: int 

    -

            :param value: A predefined string 

    -

            :type value: str 

    +

        def set_protection(self, value_id, value): 

    +

            """ 

    +

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    +

            Set protection to value (using value value_id). 

     

    -

            """ 

    -

            if value_id in self.get_protections(): 

    -

                self.values[value_id].data = value 

    -

                return True 

    -

            return False 

    -

     

    -

        def get_protection_item(self, value_id): 

    -

            """ 

    -

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    -

            Return the current value (using value value_id) of a protection. 

    +

            :param value_id: The value to set protection 

    +

            :type value_id: int 

    +

            :param value: A predefined string 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            if value_id in self.get_protections(): 

    +

                self.values[value_id].data = value 

    +

                return True 

    +

            return False 

     

    -

            :param value_id: The value to retrieve protection value 

    -

            :type value_id: int 

    -

            :return: The value of the value 

    -

            :rtype: str 

    +

        def get_protection_item(self, value_id): 

    +

            """ 

    +

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    +

            Return the current value (using value value_id) of a protection. 

     

    -

            """ 

    -

            if value_id in self.get_protections(): 

    -

                return self.values[value_id].data 

    -

            return None 

    +

            :param value_id: The value to retrieve protection value 

    +

            :type value_id: int 

    +

            :return: The value of the value 

    +

            :rtype: str 

     

    -

        def get_protection_items(self, value_id): 

    -

            """ 

    -

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    -

            Return the all the possible values (using value value_id) of a protection. 

    +

            """ 

    +

            if value_id in self.get_protections(): 

    +

                return self.values[value_id].data 

    +

            return None 

     

    -

            :param value_id: The value to retrieve items list 

    -

            :type value_id: int 

    -

            :return: The value of the value 

    -

            :rtype: set() 

    +

        def get_protection_items(self, value_id): 

    +

            """ 

    +

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    +

            Return the all the possible values (using value value_id) of a protection. 

     

    -

            """ 

    -

            if value_id in self.get_protections(): 

    -

                return self.values[value_id].data_items 

    -

            return None 

    +

            :param value_id: The value to retrieve items list 

    +

            :type value_id: int 

    +

            :return: The value of the value 

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            if value_id in self.get_protections(): 

    +

                return self.values[value_id].data_items 

    +

            return None 

    @@ -802,692 +868,758 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    import sys 

    -

    if sys.hexversion >= 0x3000000: 

    -

        from pydispatch import dispatcher 

    -

    else: 

    -

        from louie import dispatcher 

    -

    import time 

    -

    from openzwave.object import ZWaveObject 

    -

    from libopenzwave import PyStatDriver 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveController(ZWaveObject): 

    -

        ''' 

    -

        The controller manager. 

    -

     

    -

        Allows to retrieve informations about the library, statistics, ... 

    -

        Also used to send commands to the controller 

    -

     

    -

        Commands : 

    -

     

    -

            - Driver::ControllerCommand_AddController : Add a new secondary controller to the Z-Wave network. 

    -

            - Driver::ControllerCommand_AddDevice : Add a new device (but not a controller) to the Z-Wave network. 

    -

            - Driver::ControllerCommand_CreateNewPrimary : (Not yet implemented) 

    -

            - Driver::ControllerCommand_ReceiveConfiguration : 

    -

            - Driver::ControllerCommand_RemoveController : remove a controller from the Z-Wave network. 

    -

            - Driver::ControllerCommand_RemoveDevice : remove a device (but not a controller) from the Z-Wave network. 

    -

            - Driver::ControllerCommand_RemoveFailedNode : move a node to the controller's list of failed nodes.  The node must actually 

    -

                                                           have failed or have been disabled since the command will fail if it responds.  A node must be in the controller's failed nodes list 

    -

                                                           or ControllerCommand_ReplaceFailedNode to work. 

    -

            - Driver::ControllerCommand_HasNodeFailed : Check whether a node is in the controller's failed nodes list. 

    -

            - Driver::ControllerCommand_ReplaceFailedNode : replace a failed device with another. If the node is not in 

    -

                                                            the controller's failed nodes list, or the node responds, this command will fail. 

    -

            - Driver:: ControllerCommand_TransferPrimaryRole : (Not yet implemented) - Add a new controller to the network and 

    -

                                                               make it the primary.  The existing primary will become a secondary controller. 

    -

            - Driver::ControllerCommand_RequestNetworkUpdate : Update the controller with network information from the SUC/SIS. 

    -

            - Driver::ControllerCommand_RequestNodeNeighborUpdate : Get a node to rebuild its neighbour list.  This method also does ControllerCommand_RequestNodeNeighbors afterwards. 

    -

            - Driver::ControllerCommand_AssignReturnRoute : Assign a network return route to a device. 

    -

            - Driver::ControllerCommand_DeleteAllReturnRoutes : Delete all network return routes from a device. 

    -

            - Driver::ControllerCommand_CreateButton : Create a handheld button id. 

    -

            - Driver::ControllerCommand_DeleteButton : Delete a handheld button id. 

    -

     

    -

        Callbacks : 

    -

     

    -

            - Driver::ControllerState_Waiting : The controller is waiting for a user action.  A notice should be displayed 

    -

                                                to the user at this point, telling them what to do next. 

    -

                                                For the add, remove, replace and transfer primary role commands, the user needs to be told to press the 

    -

                                                inclusion button on the device that  is going to be added or removed.  For ControllerCommand_ReceiveConfiguration, 

    -

                                                they must set their other controller to send its data, and for ControllerCommand_CreateNewPrimary, set the other 

    -

                                                controller to learn new data. 

    -

            - Driver::ControllerState_InProgress : the controller is in the process of adding or removing the chosen node.  It is now too late to cancel the command. 

    -

            - Driver::ControllerState_Complete : the controller has finished adding or removing the node, and the command is complete. 

    -

            - Driver::ControllerState_Failed : will be sent if the command fails for any reason. 

    -

     

    -

        ''' 

    -

        SIGNAL_CTRL_NORMAL = 'Normal' 

    -

        SIGNAL_CTRL_STARTING = 'Starting' 

    -

        SIGNAL_CTRL_CANCEL = 'Cancel' 

    -

        SIGNAL_CTRL_ERROR = 'Error' 

    -

        SIGNAL_CTRL_WAITING = 'Waiting' 

    -

        SIGNAL_CTRL_SLEEPING = 'Sleeping' 

    -

        SIGNAL_CTRL_INPROGRESS = 'InProgress' 

    -

        SIGNAL_CTRL_COMPLETED = 'Completed' 

    -

        SIGNAL_CTRL_FAILED = 'Failed' 

    -

        SIGNAL_CTRL_NODEOK = 'NodeOK' 

    -

        SIGNAL_CTRL_NODEFAILED = 'NodeFailed' 

    -

     

    -

        SIGNAL_CONTROLLER = 'Message' 

    -

     

    -

        CMD_NONE = 0 

    -

        CMD_ADDDEVICE = 1 

    -

        CMD_CREATENEWPRIMARY = 2 

    -

        CMD_RECEIVECONFIGURATION = 3 

    -

        CMD_REMOVEDEVICE = 4 

    -

        CMD_REMOVEFAILEDNODE = 5 

    -

        CMD_HASNODEFAILED = 6 

    -

        CMD_REPLACEFAILEDNODE = 7 

    -

        CMD_TRANSFERPRIMARYROLE = 8 

    -

        CMD_REQUESTNETWORKUPDATE = 9 

    -

        CMD_REQUESTNODENEIGHBORUPDATE = 10 

    -

        CMD_ASSIGNRETURNROUTE = 11 

    -

        CMD_DELETEALLRETURNROUTES = 12 

    -

        CMD_SENDNODEINFORMATION = 13 

    -

        CMD_REPLICATIONSEND = 14 

    -

        CMD_CREATEBUTTON = 15 

    -

        CMD_DELETEBUTTON = 16 

    -

     

    -

        def __init__(self, controller_id, network, options=None): 

    -

            """ 

    -

            Initialize controller object 

    -

     

    -

            :param controller_id: The Id of the controller 

    -

            :type controller_id: int 

    -

            :param network: The network the controller is attached to 

    -

            :type network: ZwaveNetwork 

    -

            :param options: options of the manager 

    -

            :type options: str 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    import sys 

    +

    if sys.hexversion >= 0x3000000: 

    +

        from pydispatch import dispatcher 

    +

    else: 

    +

        from louie import dispatcher 

    +

    import time 

    +

    from openzwave.object import ZWaveObject 

    +

    from libopenzwave import PyStatDriver 

    +

    import threading 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveController(ZWaveObject): 

    +

        ''' 

    +

        The controller manager. 

    +

     

    +

        Allows to retrieve informations about the library, statistics, ... 

    +

        Also used to send commands to the controller 

    +

     

    +

        Commands : 

    +

     

    +

            - Driver::ControllerCommand_AddController : Add a new secondary controller to the Z-Wave network. 

    +

            - Driver::ControllerCommand_AddDevice : Add a new device (but not a controller) to the Z-Wave network. 

    +

            - Driver::ControllerCommand_CreateNewPrimary : (Not yet implemented) 

    +

            - Driver::ControllerCommand_ReceiveConfiguration : 

    +

            - Driver::ControllerCommand_RemoveController : remove a controller from the Z-Wave network. 

    +

            - Driver::ControllerCommand_RemoveDevice : remove a device (but not a controller) from the Z-Wave network. 

    +

            - Driver::ControllerCommand_RemoveFailedNode : move a node to the controller's list of failed nodes.  The node must actually 

    +

                                                           have failed or have been disabled since the command will fail if it responds.  A node must be in the controller's failed nodes list 

    +

                                                           or ControllerCommand_ReplaceFailedNode to work. 

    +

            - Driver::ControllerCommand_HasNodeFailed : Check whether a node is in the controller's failed nodes list. 

    +

            - Driver::ControllerCommand_ReplaceFailedNode : replace a failed device with another. If the node is not in 

    +

                                                            the controller's failed nodes list, or the node responds, this command will fail. 

    +

            - Driver:: ControllerCommand_TransferPrimaryRole : (Not yet implemented) - Add a new controller to the network and 

    +

                                                               make it the primary.  The existing primary will become a secondary controller. 

    +

            - Driver::ControllerCommand_RequestNetworkUpdate : Update the controller with network information from the SUC/SIS. 

    +

            - Driver::ControllerCommand_RequestNodeNeighborUpdate : Get a node to rebuild its neighbour list.  This method also does ControllerCommand_RequestNodeNeighbors afterwards. 

    +

            - Driver::ControllerCommand_AssignReturnRoute : Assign a network return route to a device. 

    +

            - Driver::ControllerCommand_DeleteAllReturnRoutes : Delete all network return routes from a device. 

    +

            - Driver::ControllerCommand_CreateButton : Create a handheld button id. 

    +

            - Driver::ControllerCommand_DeleteButton : Delete a handheld button id. 

    +

     

    +

        Callbacks : 

    +

     

    +

            - Driver::ControllerState_Waiting : The controller is waiting for a user action.  A notice should be displayed 

    +

                                                to the user at this point, telling them what to do next. 

    +

                                                For the add, remove, replace and transfer primary role commands, the user needs to be told to press the 

    +

                                                inclusion button on the device that  is going to be added or removed.  For ControllerCommand_ReceiveConfiguration, 

    +

                                                they must set their other controller to send its data, and for ControllerCommand_CreateNewPrimary, set the other 

    +

                                                controller to learn new data. 

    +

            - Driver::ControllerState_InProgress : the controller is in the process of adding or removing the chosen node.  It is now too late to cancel the command. 

    +

            - Driver::ControllerState_Complete : the controller has finished adding or removing the node, and the command is complete. 

    +

            - Driver::ControllerState_Failed : will be sent if the command fails for any reason. 

    +

     

    +

        ''' 

    +

        SIGNAL_CTRL_NORMAL = 'Normal' 

    +

        SIGNAL_CTRL_STARTING = 'Starting' 

    +

        SIGNAL_CTRL_CANCEL = 'Cancel' 

    +

        SIGNAL_CTRL_ERROR = 'Error' 

    +

        SIGNAL_CTRL_WAITING = 'Waiting' 

    +

        SIGNAL_CTRL_SLEEPING = 'Sleeping' 

    +

        SIGNAL_CTRL_INPROGRESS = 'InProgress' 

    +

        SIGNAL_CTRL_COMPLETED = 'Completed' 

    +

        SIGNAL_CTRL_FAILED = 'Failed' 

    +

        SIGNAL_CTRL_NODEOK = 'NodeOK' 

    +

        SIGNAL_CTRL_NODEFAILED = 'NodeFailed' 

    +

     

    +

        SIGNAL_CONTROLLER = 'Message' 

    +

        SIGNAL_CONTROLLER_STATS = 'ControllerStats' 

    +

     

    +

        CMD_NONE = 0 

    +

        CMD_ADDDEVICE = 1 

    +

        CMD_CREATENEWPRIMARY = 2 

    +

        CMD_RECEIVECONFIGURATION = 3 

    +

        CMD_REMOVEDEVICE = 4 

    +

        CMD_REMOVEFAILEDNODE = 5 

    +

        CMD_HASNODEFAILED = 6 

    +

        CMD_REPLACEFAILEDNODE = 7 

    +

        CMD_TRANSFERPRIMARYROLE = 8 

    +

        CMD_REQUESTNETWORKUPDATE = 9 

    +

        CMD_REQUESTNODENEIGHBORUPDATE = 10 

    +

        CMD_ASSIGNRETURNROUTE = 11 

    +

        CMD_DELETEALLRETURNROUTES = 12 

    +

        CMD_SENDNODEINFORMATION = 13 

    +

        CMD_REPLICATIONSEND = 14 

    +

        CMD_CREATEBUTTON = 15 

    +

        CMD_DELETEBUTTON = 16 

    +

     

    +

        def __init__(self, controller_id, network, options=None): 

    +

            """ 

    +

            Initialize controller object 

     

    -

            """ 

    -

            if controller_id is None: 

    -

                controller_id = 1 

    -

            ZWaveObject.__init__(self, controller_id, network) 

    -

            self._node = None 

    -

            self._options = options 

    -

            self._library_type_name = None 

    -

            self._library_version = None 

    -

            self._python_library_version = None 

    -

            self.ctrl_last_state = self.SIGNAL_CTRL_NORMAL 

    -

            self.ctrl_last_message = "" 

    -

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the node. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'home_id: [%s] id: [%s] name: [%s] product: [%s] capabilities: %s library: [%s]' % \ 

    -

              (self._network.home_id_str, self._object_id, self._node.name, self._node.product_name, self.capabilities, self.library_description) 

    -

     

    -

        @property 

    -

        def node(self): 

    -

            """ 

    -

            The node controller on the network. 

    -

     

    -

            :return: The node controller on the network 

    -

            :rtype: ZWaveNode 

    -

     

    -

            """ 

    -

            return self._node 

    +

            :param controller_id: The Id of the controller 

    +

            :type controller_id: int 

    +

            :param network: The network the controller is attached to 

    +

            :type network: ZwaveNetwork 

    +

            :param options: options of the manager 

    +

            :type options: str 

    +

     

    +

            """ 

    +

            if controller_id is None: 

    +

                controller_id = 1 

    +

            ZWaveObject.__init__(self, controller_id, network) 

    +

            self._node = None 

    +

            self._options = options 

    +

            self._library_type_name = None 

    +

            self._library_version = None 

    +

            self._python_library_version = None 

    +

            self.ctrl_last_state = self.SIGNAL_CTRL_NORMAL 

    +

            self.ctrl_last_message = "" 

    +

            self._timer_statistics = None 

    +

            self._interval_statistics = 0.0 

    +

     

    +

        def stop(self): 

    +

            """ 

    +

            Stop the controller and all this threads. 

    +

     

    +

            """ 

    +

            if self._timer_statistics is not None: 

    +

                self._timer_statistics.cancel() 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the node. 

     

    -

        @node.setter 

    -

        def node(self, value): 

    -

            """ 

    -

            The node controller on the network. 

    -

     

    -

            :param value: The node of the controller on the network 

    -

            :type value: ZWaveNode 

    -

     

    -

            """ 

    -

            self._node = value 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'home_id: [%s] id: [%s] name: [%s] product: [%s] capabilities: %s library: [%s]' % \ 

    +

              (self._network.home_id_str, self._object_id, self._node.name, self._node.product_name, self.capabilities, self.library_description) 

    +

     

    +

        @property 

    +

        def node(self): 

    +

            """ 

    +

            The node controller on the network. 

     

    -

        @property 

    -

        def node_id(self): 

    -

            """ 

    -

            The node Id of the controller on the network. 

    -

     

    -

            :return: The node id of the controller on the network 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            if self.node is not None: 

    -

                return self.node.object_id 

    -

            else: 

    -

                return None 

    +

            :return: The node controller on the network 

    +

            :rtype: ZWaveNode 

    +

     

    +

            """ 

    +

            return self._node 

    +

     

    +

        @node.setter 

    +

        def node(self, value): 

    +

            """ 

    +

            The node controller on the network. 

    +

     

    +

            :param value: The node of the controller on the network 

    +

            :type value: ZWaveNode 

     

    -

        @property 

    -

        def name(self): 

    -

            """ 

    -

            The node name of the controller on the network. 

    -

     

    -

            :return: The node's name of the controller on the network 

    -

            :rtype: str 

    +

            """ 

    +

            self._node = value 

    +

     

    +

        @property 

    +

        def node_id(self): 

    +

            """ 

    +

            The node Id of the controller on the network. 

     

    -

            """ 

    -

            if self.node is not None: 

    -

                return self.node.name 

    -

            else: 

    -

                return None 

    -

     

    -

        @property 

    -

        def library_type_name(self): 

    -

            """ 

    -

            The name of the library. 

    -

     

    -

            :return: The cpp library name 

    -

            :rtype: str 

    +

            :return: The node id of the controller on the network 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            if self.node is not None: 

    +

                return self.node.object_id 

    +

            else: 

    +

                return None 

    +

     

    +

        @property 

    +

        def name(self): 

    +

            """ 

    +

            The node name of the controller on the network. 

     

    -

            """ 

    -

            return self._network.manager.getLibraryTypeName(self._network.home_id) 

    +

            :return: The node's name of the controller on the network 

    +

            :rtype: str 

     

    -

        @property 

    -

        def library_description(self): 

    -

            """ 

    -

            The description of the library. 

    -

     

    -

            :return: The library description (name and version) 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return '%s version %s' % (self.library_type_name, self.library_version) 

    +

            """ 

    +

            if self.node is not None: 

    +

                return self.node.name 

    +

            else: 

    +

                return None 

    +

     

    +

        @property 

    +

        def library_type_name(self): 

    +

            """ 

    +

            The name of the library. 

     

    -

        @property 

    -

        def library_version(self): 

    -

            """ 

    -

            The version of the library. 

    -

     

    -

            :return: The cpp library version 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getLibraryVersion(self._network.home_id) 

    +

            :return: The cpp library name 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getLibraryTypeName(self._network.home_id) 

    +

     

    +

        @property 

    +

        def library_description(self): 

    +

            """ 

    +

            The description of the library. 

     

    -

        @property 

    -

        def python_library_version(self): 

    -

            """ 

    -

            The version of the python library. 

    -

     

    -

            :return: The python library version 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getPythonLibraryVersionNumber() 

    +

            :return: The library description (name and version) 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return '%s version %s' % (self.library_type_name, self.library_version) 

    +

     

    +

        @property 

    +

        def library_version(self): 

    +

            """ 

    +

            The version of the library. 

     

    -

        @property 

    -

        def ozw_library_version(self): 

    -

            """ 

    -

            The version of the openzwave library. 

    -

     

    -

            :return: The openzwave library version 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getOzwLibraryVersion() 

    +

            :return: The cpp library version 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getLibraryVersion(self._network.home_id) 

    +

     

    +

        @property 

    +

        def python_library_version(self): 

    +

            """ 

    +

            The version of the python library. 

     

    -

        @property 

    -

        def library_config_path(self): 

    -

            """ 

    -

            The library Config path. 

    -

     

    -

            :return: The library config directory 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            if self._options is not None: 

    -

                return self._options.config_path 

    -

            else: 

    -

                return None 

    +

            :return: The python library version 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getPythonLibraryVersionNumber() 

    +

     

    +

        @property 

    +

        def ozw_library_version(self): 

    +

            """ 

    +

            The version of the openzwave library. 

    +

     

    +

            :return: The openzwave library version 

    +

            :rtype: str 

     

    -

        @property 

    -

        def library_user_path(self): 

    -

            """ 

    -

            The library User path. 

    -

     

    -

            :return: The user directory to store user configuration 

    -

            :rtype: str 

    +

            """ 

    +

            return self._network.manager.getOzwLibraryVersion() 

    +

     

    +

        @property 

    +

        def library_config_path(self): 

    +

            """ 

    +

            The library Config path. 

     

    -

            """ 

    -

            if self._options is not None: 

    -

                return self._options.user_path 

    -

            else: 

    -

                return None 

    -

     

    -

        @property 

    -

        def device(self): 

    -

            """ 

    -

            The device path. 

    -

     

    -

            :return: The device (ie /dev/zwave) 

    -

            :rtype: str 

    +

            :return: The library config directory 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            if self._options is not None: 

    +

                return self._options.config_path 

    +

            else: 

    +

                return None 

    +

     

    +

        @property 

    +

        def library_user_path(self): 

    +

            """ 

    +

            The library User path. 

     

    -

            """ 

    -

            if self._options is not None: 

    -

                return self._options.device 

    -

            else: 

    -

                return None 

    -

     

    -

        @property 

    -

        def options(self): 

    -

            """ 

    -

            The starting options of the manager. 

    -

     

    -

            :return: The options used to start the manager 

    -

            :rtype: ZWaveOption 

    +

            :return: The user directory to store user configuration 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            if self._options is not None: 

    +

                return self._options.user_path 

    +

            else: 

    +

                return None 

    +

     

    +

        @property 

    +

        def device(self): 

    +

            """ 

    +

            The device path. 

     

    -

            """ 

    -

            return self._options 

    +

            :return: The device (ie /dev/zwave) 

    +

            :rtype: str 

     

    -

        @property 

    -

        def stats(self): 

    -

            """ 

    -

            Retrieve statistics from driver. 

    -

     

    -

            Statistics: 

    -

     

    -

                * s_SOFCnt                         : Number of SOF bytes received 

    -

                * s_ACKWaiting                     : Number of unsolicited messages while waiting for an ACK 

    -

                * s_readAborts                     : Number of times read were aborted due to timeouts 

    -

                * s_badChecksum                    : Number of bad checksums 

    -

                * s_readCnt                        : Number of messages successfully read 

    -

                * s_writeCnt                       : Number of messages successfully sent 

    -

                * s_CANCnt                         : Number of CAN bytes received 

    -

                * s_NAKCnt                         : Number of NAK bytes received 

    -

                * s_ACKCnt                         : Number of ACK bytes received 

    -

                * s_OOFCnt                         : Number of bytes out of framing 

    -

                * s_dropped                        : Number of messages dropped & not delivered 

    -

                * s_retries                        : Number of messages retransmitted 

    -

                * s_controllerReadCnt              : Number of controller messages read 

    -

                * s_controllerWriteCnt             : Number of controller messages sent 

    +

            """ 

    +

            if self._options is not None: 

    +

                return self._options.device 

    +

            else: 

    +

                return None 

    +

     

    +

        @property 

    +

        def options(self): 

    +

            """ 

    +

            The starting options of the manager. 

    +

     

    +

            :return: The options used to start the manager 

    +

            :rtype: ZWaveOption 

    +

     

    +

            """ 

    +

            return self._options 

    +

     

    +

        @property 

    +

        def stats(self): 

    +

            """ 

    +

            Retrieve statistics from driver. 

     

    -

            :return: Statistics of the controller 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            return self._network.manager.getDriverStatistics(self.home_id) 

    -

     

    -

        def get_stats_label(self, stat): 

    -

            """ 

    -

            Retrieve label of the statistic from driver. 

    -

     

    -

            :param stat: The code of the stat label to retrieve. 

    -

            :type stat: 

    -

            :return: The label or the stat. 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            #print "stat = %s" % stat 

    -

            return PyStatDriver[stat] 

    -

     

    -

        @property 

    -

        def capabilities(self): 

    -

            """ 

    -

            The capabilities of the controller. 

    -

     

    -

            :return: The capabilities of the controller 

    -

            :rtype: set 

    +

            Statistics: 

    +

     

    +

                * s_SOFCnt                         : Number of SOF bytes received 

    +

                * s_ACKWaiting                     : Number of unsolicited messages while waiting for an ACK 

    +

                * s_readAborts                     : Number of times read were aborted due to timeouts 

    +

                * s_badChecksum                    : Number of bad checksums 

    +

                * s_readCnt                        : Number of messages successfully read 

    +

                * s_writeCnt                       : Number of messages successfully sent 

    +

                * s_CANCnt                         : Number of CAN bytes received 

    +

                * s_NAKCnt                         : Number of NAK bytes received 

    +

                * s_ACKCnt                         : Number of ACK bytes received 

    +

                * s_OOFCnt                         : Number of bytes out of framing 

    +

                * s_dropped                        : Number of messages dropped & not delivered 

    +

                * s_retries                        : Number of messages retransmitted 

    +

                * s_controllerReadCnt              : Number of controller messages read 

    +

                * s_controllerWriteCnt             : Number of controller messages sent 

    +

     

    +

            :return: Statistics of the controller 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            return self._network.manager.getDriverStatistics(self.home_id) 

    +

     

    +

        def get_stats_label(self, stat): 

    +

            """ 

    +

            Retrieve label of the statistic from driver. 

     

    -

            """ 

    -

            caps = set() 

    -

            if self.is_primary_controller: 

    -

                caps.add('primaryController') 

    -

            if self.is_static_update_controller: 

    -

                caps.add('staticUpdateController') 

    -

            if self.is_bridge_controller: 

    -

                caps.add('bridgeController') 

    -

            return caps 

    -

     

    -

        @property 

    -

        def is_primary_controller(self): 

    -

            """ 

    -

            Is this node a primary controller of the network. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isPrimaryController(self.home_id) 

    -

     

    -

        @property 

    -

        def is_static_update_controller(self): 

    -

            """ 

    -

            Is this controller a static update controller (SUC). 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isStaticUpdateController(self.home_id) 

    -

     

    -

        @property 

    -

        def is_bridge_controller(self): 

    -

            """ 

    -

            Is this controller using the bridge controller library. 

    -

     

    -

            :rtype: bool 

    +

            :param stat: The code of the stat label to retrieve. 

    +

            :type stat: 

    +

            :return: The label or the stat. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            #print "stat = %s" % stat 

    +

            return PyStatDriver[stat] 

    +

     

    +

        def do_poll_statistics(self): 

    +

            """ 

    +

            Timer based polling system for statistics 

    +

            """ 

    +

            self._timer_statistics = None 

    +

            stats = self.stats 

    +

            dispatcher.send(self.SIGNAL_CONTROLLER_STATS, \ 

    +

                **{'controller':self, 'stats':stats}) 

    +

     

    +

            self._timer_statistics = threading.Timer(self._interval_statistics, self.do_poll_statistics) 

    +

            self._timer_statistics.start() 

    +

     

    +

        @property 

    +

        def poll_stats(self): 

    +

            """ 

    +

            The interval for polling statistics 

    +

     

    +

            :return: The interval in seconds 

    +

            :rtype: float 

    +

     

    +

            """ 

    +

            return self._interval_statistics 

    +

     

    +

        @poll_stats.setter 

    +

        def poll_stats(self, value): 

    +

            """ 

    +

            The interval for polling statistics 

     

    -

            """ 

    -

            return self._network.manager.isBridgeController(self.home_id) 

    +

            :return: The interval in seconds 

    +

            :rtype: ZWaveNode 

     

    -

        @property 

    -

        def send_queue_count(self): 

    -

            """ 

    -

            Get count of messages in the outgoing send queue. 

    -

     

    -

            :return: Thr count of messages in the outgoing send queue. 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getSendQueueCount(self.home_id) 

    -

     

    -

        def hard_reset(self): 

    -

            """ 

    -

            Hard Reset a PC Z-Wave Controller. 

    -

            Resets a controller and erases its network configuration settings. 

    -

            The controller becomes a primary controller ready to add devices to a new network. 

    +

            :param value: The interval in seconds 

    +

            :type value: float 

    +

     

    +

            """ 

    +

            if value != self._interval_statistics: 

    +

                if self._timer_statistics is not None: 

    +

                    self._timer_statistics.cancel() 

    +

                if value != 0: 

    +

                    self._interval_statistics = value 

    +

                    self._timer_statistics = threading.Timer(self._interval_statistics, self.do_poll_statistics) 

    +

                    self._timer_statistics.start() 

    +

     

    +

        @property 

    +

        def capabilities(self): 

    +

            """ 

    +

            The capabilities of the controller. 

     

    -

            This command fires a lot of louie signals. 

    -

            Louie's clients must disconnect from nodes and values signals 

    +

            :return: The capabilities of the controller 

    +

            :rtype: set 

     

    -

            .. code-block:: python 

    -

     

    -

                    dispatcher.send(self._network.SIGNAL_NETWORK_RESETTED, **{'network': self._network}) 

    -

     

    -

            """ 

    -

            self._network.state = self._network.STATE_RESETTED 

    -

            dispatcher.send(self._network.SIGNAL_NETWORK_RESETTED, \ 

    -

                **{'network': self._network}) 

    -

            self._network.manager.resetController(self._network.home_id) 

    -

            time.sleep(5) 

    -

     

    -

        def soft_reset(self): 

    +

            """ 

    +

            caps = set() 

    +

            if self.is_primary_controller: 

    +

                caps.add('primaryController') 

    +

            if self.is_static_update_controller: 

    +

                caps.add('staticUpdateController') 

    +

            if self.is_bridge_controller: 

    +

                caps.add('bridgeController') 

    +

            return caps 

    +

     

    +

        @property 

    +

        def is_primary_controller(self): 

            """ 

    -

            Soft Reset a PC Z-Wave Controller. 

    -

            Resets a controller without erasing its network configuration settings. 

    -

     

    -

            """ 

    -

            self._network.manager.softResetController(self._network.home_id) 

    -

     

    -

        def begin_command_send_node_information(self, node_id): 

    -

            """ 

    -

            Send a node information frame. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_SENDNODEINFORMATION, self.zwcallback, nodeId=node_id) 

    -

     

    -

        def begin_command_replication_send(self, high_power=False): 

    -

            """ 

    -

            Send information from primary to secondary. 

    -

     

    -

            :param high_power: Usually when adding or removing devices, the controller operates at low power so that the controller must 

    -

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    -

                               operate at normal power levels instead.  Defaults to false. 

    -

            :type high_power: bool 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REPLICATIONSEND, self.zwcallback, highPower=high_power) 

    -

     

    -

        def begin_command_request_network_update(self): 

    -

            """ 

    -

            Update the controller with network information from the SUC/SIS. 

    +

            Is this node a primary controller of the network. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isPrimaryController(self.home_id) 

    +

     

    +

        @property 

    +

        def is_static_update_controller(self): 

    +

            """ 

    +

            Is this controller a static update controller (SUC). 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isStaticUpdateController(self.home_id) 

    +

     

    +

        @property 

    +

        def is_bridge_controller(self): 

    +

            """ 

    +

            Is this controller using the bridge controller library. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isBridgeController(self.home_id) 

    +

     

    +

        @property 

    +

        def send_queue_count(self): 

    +

            """ 

    +

            Get count of messages in the outgoing send queue. 

    +

     

    +

            :return: Thr count of messages in the outgoing send queue. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getSendQueueCount(self.home_id) 

     

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REQUESTNETWORKUPDATE, self.zwcallback) 

    -

     

    -

        def begin_command_add_device(self, high_power=False): 

    -

            """ 

    -

            Add a new device to the Z-Wave network. 

    +

        def hard_reset(self): 

    +

            """ 

    +

            Hard Reset a PC Z-Wave Controller. 

    +

            Resets a controller and erases its network configuration settings. 

    +

            The controller becomes a primary controller ready to add devices to a new network. 

    +

     

    +

            This command fires a lot of louie signals. 

    +

            Louie's clients must disconnect from nodes and values signals 

    +

     

    +

            .. code-block:: python 

     

    -

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    -

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    -

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    -

                               operate at normal power levels instead.  Defaults to false. 

    -

            :type high_power: bool 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_ADDDEVICE, self.zwcallback, highPower=high_power) 

    -

     

    -

        def begin_command_remove_device(self, high_power=False): 

    -

            """ 

    -

            Remove a device from the Z-Wave network. 

    -

     

    -

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    -

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    -

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    -

                               operate at normal power levels instead.  Defaults to false. 

    -

            :type high_power: bool 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REMOVEDEVICE, self.zwcallback, highPower=high_power) 

    -

     

    -

        def begin_command_remove_failed_node(self, node_id): 

    -

            """ 

    -

            Move a node to the controller's list of failed nodes.  The node must 

    -

            actually have failed or have been disabled since the command 

    -

            will fail if it responds.  A node must be in the controller's 

    -

            failed nodes list for ControllerCommand_ReplaceFailedNode to work. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REMOVEFAILEDNODE, self.zwcallback, nodeId=node_id) 

    -

     

    -

        def begin_command_has_node_failed(self, node_id): 

    -

            """ 

    -

            Check whether a node is in the controller's failed nodes list. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_HASNODEFAILED, self.zwcallback, nodeId=node_id) 

    -

     

    -

        def begin_command_replace_failed_node(self, node_id): 

    -

            """ 

    -

            Replace a failed device with another. If the node is not in 

    -

            the controller's failed nodes list, or the node responds, this command will fail. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REPLACEFAILEDNODE, self.zwcallback, nodeId=node_id) 

    -

     

    -

        def begin_command_request_node_neigbhor_update(self, node_id): 

    -

            """ 

    -

            Get a node to rebuild its neighbors list. 

    -

            This method also does ControllerCommand_RequestNodeNeighbors afterwards. 

    +

                    dispatcher.send(self._network.SIGNAL_NETWORK_RESETTED, **{'network': self._network}) 

    +

     

    +

            """ 

    +

            self._network.state = self._network.STATE_RESETTED 

    +

            dispatcher.send(self._network.SIGNAL_NETWORK_RESETTED, \ 

    +

                **{'network':self._network}) 

    +

            self._network.manager.resetController(self._network.home_id) 

    +

            time.sleep(5) 

    +

     

    +

        def soft_reset(self): 

    +

            """ 

    +

            Soft Reset a PC Z-Wave Controller. 

    +

            Resets a controller without erasing its network configuration settings. 

    +

     

    +

            """ 

    +

            self._network.manager.softResetController(self._network.home_id) 

    +

     

    +

        def begin_command_send_node_information(self, node_id): 

    +

            """ 

    +

            Send a node information frame. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_SENDNODEINFORMATION, self.zwcallback, nodeId=node_id) 

    +

     

    +

        def begin_command_replication_send(self, high_power=False): 

    +

            """ 

    +

            Send information from primary to secondary. 

    +

     

    +

            :param high_power: Usually when adding or removing devices, the controller operates at low power so that the controller must 

    +

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    +

                               operate at normal power levels instead.  Defaults to false. 

    +

            :type high_power: bool 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REPLICATIONSEND, self.zwcallback, highPower=high_power) 

    +

     

    +

        def begin_command_request_network_update(self): 

    +

            """ 

    +

            Update the controller with network information from the SUC/SIS. 

    +

     

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REQUESTNETWORKUPDATE, self.zwcallback) 

    +

     

    +

        def begin_command_add_device(self, high_power=False): 

    +

            """ 

    +

            Add a new device to the Z-Wave network. 

    +

     

    +

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    +

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    +

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    +

                               operate at normal power levels instead.  Defaults to false. 

    +

            :type high_power: bool 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_ADDDEVICE, self.zwcallback, highPower=high_power) 

    +

     

    +

        def begin_command_remove_device(self, high_power=False): 

    +

            """ 

    +

            Remove a device from the Z-Wave network. 

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REQUESTNODENEIGHBORUPDATE, self.zwcallback, nodeId=node_id) 

    -

     

    -

        def begin_command_create_new_primary(self): 

    -

            """ 

    -

            Add a new controller to the Z-Wave network. Used when old primary fails. Requires SUC. 

    -

     

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_CREATENEWPRIMARY, self.zwcallback) 

    -

     

    -

        def begin_command_transfer_primary_role(self, high_power=False): 

    -

            """ 

    -

            Make a different controller the primary. 

    -

            The existing primary will become a secondary controller. 

    -

     

    -

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    -

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    -

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    -

                               operate at normal power levels instead.  Defaults to false. 

    -

            :type high_power: bool 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_TRANSFERPRIMARYROLE, self.zwcallback, highPower=high_power) 

    +

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    +

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    +

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    +

                               operate at normal power levels instead.  Defaults to false. 

    +

            :type high_power: bool 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REMOVEDEVICE, self.zwcallback, highPower=high_power) 

    +

     

    +

        def begin_command_remove_failed_node(self, node_id): 

    +

            """ 

    +

            Move a node to the controller's list of failed nodes.  The node must 

    +

            actually have failed or have been disabled since the command 

    +

            will fail if it responds.  A node must be in the controller's 

    +

            failed nodes list for ControllerCommand_ReplaceFailedNode to work. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REMOVEFAILEDNODE, self.zwcallback, nodeId=node_id) 

    +

     

    +

        def begin_command_has_node_failed(self, node_id): 

    +

            """ 

    +

            Check whether a node is in the controller's failed nodes list. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

     

    -

        def begin_command_receive_configuration(self): 

    -

            """ 

    -

            - 

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_HASNODEFAILED, self.zwcallback, nodeId=node_id) 

     

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_RECEIVECONFIGURATION, self.zwcallback) 

    -

     

    -

        def begin_command_assign_return_route(self, from_node_id, to_node_id): 

    -

            """ 

    -

            Assign a network return route from a node to another one. 

    -

     

    -

            :param from_node_id: The node that we will use the route. 

    -

            :type from_node_id: int 

    -

            :param to_node_id: The node that we will change the route 

    -

            :type to_node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_ASSIGNRETURNROUTE, self.zwcallback, nodeId=from_node_id, arg=to_node_id) 

    -

     

    -

        def begin_command_delete_all_return_routes(self, node_id): 

    -

            """ 

    -

            Delete all network return routes from a device. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_DELETEALLRETURNROUTES, self.zwcallback, nodeId=node_id) 

    +

        def begin_command_replace_failed_node(self, node_id): 

    +

            """ 

    +

            Replace a failed device with another. If the node is not in 

    +

            the controller's failed nodes list, or the node responds, this command will fail. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REPLACEFAILEDNODE, self.zwcallback, nodeId=node_id) 

    +

     

    +

        def begin_command_request_node_neigbhor_update(self, node_id): 

    +

            """ 

    +

            Get a node to rebuild its neighbors list. 

    +

            This method also does ControllerCommand_RequestNodeNeighbors afterwards. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REQUESTNODENEIGHBORUPDATE, self.zwcallback, nodeId=node_id) 

    +

     

    +

        def begin_command_create_new_primary(self): 

    +

            """ 

    +

            Add a new controller to the Z-Wave network. Used when old primary fails. Requires SUC. 

    +

     

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

     

    -

        def begin_command_create_button(self, node_id, arg=0): 

    -

            """ 

    -

            Create a handheld button id 

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_CREATENEWPRIMARY, self.zwcallback) 

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :param arg: 

    -

            :type arg: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_CREATEBUTTON, self.zwcallback, nodeId=node_id, arg=arg) 

    -

     

    -

        def begin_command_delete_button(self, node_id, arg=0): 

    -

            """ 

    -

            Delete a handheld button id. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :param arg: 

    -

            :type arg: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_DELETEBUTTON, self.zwcallback, nodeId=node_id, arg=arg) 

    -

     

    -

        def cancel_command(self): 

    -

            """ 

    -

            Cancels any in-progress command running on a controller. 

    -

     

    -

            """ 

    -

            return self._network.manager.cancelControllerCommand(self._network.home_id) 

    -

     

    -

        def zwcallback(self, args): 

    -

            """ 

    -

            The Callback Handler used when sendig commands to the controller. 

    -

            Dispatch a louie message. 

    -

     

    -

            To do : add node in signal when necessary 

    -

     

    -

            :param args: A dict containing informations about the state of the controller 

    -

            :type args: dict() 

    +

        def begin_command_transfer_primary_role(self, high_power=False): 

    +

            """ 

    +

            Make a different controller the primary. 

    +

            The existing primary will become a secondary controller. 

    +

     

    +

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    +

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    +

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    +

                               operate at normal power levels instead.  Defaults to false. 

    +

            :type high_power: bool 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_TRANSFERPRIMARYROLE, self.zwcallback, highPower=high_power) 

    +

     

    +

        def begin_command_receive_configuration(self): 

    +

            """ 

    +

            - 

    +

     

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_RECEIVECONFIGURATION, self.zwcallback) 

    +

     

    +

        def begin_command_assign_return_route(self, from_node_id, to_node_id): 

    +

            """ 

    +

            Assign a network return route from a node to another one. 

    +

     

    +

            :param from_node_id: The node that we will use the route. 

    +

            :type from_node_id: int 

    +

            :param to_node_id: The node that we will change the route 

    +

            :type to_node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_ASSIGNRETURNROUTE, self.zwcallback, nodeId=from_node_id, arg=to_node_id) 

     

    -

            """ 

    -

            logger.debug('Controller state change : %s', args) 

    -

            state = args['state'] 

    -

            message = args['message'] 

    -

            self.ctrl_last_state = state 

    -

            self.ctrl_last_message = message 

    -

            if state == self.SIGNAL_CTRL_WAITING: 

    -

                dispatcher.send(self.SIGNAL_CTRL_WAITING, \ 

    -

                    **{'state': state, 'message': message, 'network': self._network, 'controller': self}) 

    -

            dispatcher.send(self.SIGNAL_CONTROLLER, \ 

    -

                **{'state': state, 'message': message, 'network': self._network, 'controller': self}) 

    -

     

    -

        def to_dict(self): 

    -

            """ 

    -

            Return a dict representation of the controller. 

    -

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret=self.node.to_dict() 

    -

            ret['capabilities'].update(dict.fromkeys(self.capabilities, 0)) 

    -

            ret["zw_version"] = self.library_version 

    -

            ret["zw_description"] = self.library_description 

    -

            ret["oz_version"] = self.ozw_library_version 

    -

            ret["py_version"] = self.python_library_version 

    -

            return ret 

    -

     

    +

        def begin_command_delete_all_return_routes(self, node_id): 

    +

            """ 

    +

            Delete all network return routes from a device. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_DELETEALLRETURNROUTES, self.zwcallback, nodeId=node_id) 

    +

     

    +

        def begin_command_create_button(self, node_id, arg=0): 

    +

            """ 

    +

            Create a handheld button id 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :param arg: 

    +

            :type arg: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_CREATEBUTTON, self.zwcallback, nodeId=node_id, arg=arg) 

     

    -

     

    +

        def begin_command_delete_button(self, node_id, arg=0): 

    +

            """ 

    +

            Delete a handheld button id. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :param arg: 

    +

            :type arg: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_DELETEBUTTON, self.zwcallback, nodeId=node_id, arg=arg) 

    +

     

    +

        def cancel_command(self): 

    +

            """ 

    +

            Cancels any in-progress command running on a controller. 

    +

     

    +

            """ 

    +

            return self._network.manager.cancelControllerCommand(self._network.home_id) 

    +

     

    +

        def zwcallback(self, args): 

    +

            """ 

    +

            The Callback Handler used when sendig commands to the controller. 

    +

            Dispatch a louie message. 

    +

     

    +

            To do : add node in signal when necessary 

    +

     

    +

            :param args: A dict containing informations about the state of the controller 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Controller state change : %s', args) 

    +

            state = args['state'] 

    +

            message = args['message'] 

    +

            self.ctrl_last_state = state 

    +

            self.ctrl_last_message = message 

    +

            if state == self.SIGNAL_CTRL_WAITING: 

    +

                dispatcher.send(self.SIGNAL_CTRL_WAITING, \ 

    +

                    **{'state': state, 'message': message, 'network': self._network, 'controller': self}) 

    +

            dispatcher.send(self.SIGNAL_CONTROLLER, \ 

    +

                **{'state': state, 'message': message, 'network': self._network, 'controller': self}) 

    +

     

    +

        def to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the controller. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret=self.node.to_dict(extras=extras) 

    +

            if 'all' in extras: 

    +

                extras = ['kvals', 'capabilities', 'neighbors'] 

    +

            if 'capabilities' in extras: 

    +

                ret['capabilities'].update(dict.fromkeys(self.capabilities, 0)) 

    +

            ret["zw_version"] = self.library_version 

    +

            ret["zw_description"] = self.library_description 

    +

            ret["oz_version"] = self.ozw_library_version 

    +

            ret["py_version"] = self.python_library_version 

    +

            return ret 

    +

     

    +

     

    +

     

    @@ -242,134 +265,157 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    from openzwave.object import ZWaveObject 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveGroup(ZWaveObject): 

    -

        """ 

    -

        The driver object. 

    -

        Hold options of the manager 

    -

        Also used to retrieve information about the library, ... 

    -

        """ 

    -

     

    -

        def __init__(self, group_index, network=None, node_id=None): 

    -

            """ 

    -

            Initialize driver object 

    -

     

    -

            :param group_index: index of the group 

    -

            :type group_index: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    -

            :param node_id: ID of node 

    -

            :type node_id: int 

    -

     

    -

            """ 

    -

     

    -

            ZWaveObject.__init__(self, group_index, network) 

    -

     

    -

            self._node_id = node_id 

    -

            self._index = group_index 

    -

            #self._label = None 

    -

            #self.cache_property("self.label") 

    -

            #self._max_associations = set() 

    -

            #self.cache_property("self.max_associations") 

    -

            #self._members = set() 

    -

            #self.cache_property("self.members") 

    -

            #self._associations = set() 

    -

            #self.cache_property("self.associations") 

    -

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the group. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'index: [%s] label: [%s]' % (self.index, self.label) 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from openzwave.object import ZWaveObject 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveGroup(ZWaveObject): 

    +

        """ 

    +

        The driver object. 

    +

        Hold options of the manager 

    +

        Also used to retrieve information about the library, ... 

    +

        """ 

    +

     

    +

        def __init__(self, group_index, network=None, node_id=None): 

    +

            """ 

    +

            Initialize driver object 

    +

     

    +

            :param group_index: index of the group 

    +

            :type group_index: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

    +

            :param node_id: ID of node 

    +

            :type node_id: int 

    +

     

    +

            """ 

    +

     

    +

            ZWaveObject.__init__(self, group_index, network) 

    +

     

    +

            self._node_id = node_id 

    +

            self._index = group_index 

    +

            #self._label = None 

    +

            #self.cache_property("self.label") 

    +

            #self._max_associations = set() 

    +

            #self.cache_property("self.max_associations") 

    +

            #self._members = set() 

    +

            #self.cache_property("self.members") 

    +

            #self._associations = set() 

    +

            #self.cache_property("self.associations") 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the group. 

     

    -

        @property 

    -

        def index(self): 

    -

            """ 

    -

            The index of the group. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'index: [%s] label: [%s]' % (self.index, self.label) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._index 

    +

        @property 

    +

        def index(self): 

    +

            """ 

    +

            The index of the group. 

     

    -

        @property 

    -

        def label(self): 

    -

            """ 

    -

            The label of the group. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._index 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getGroupLabel(self.home_id, self._node_id, self.index) 

    +

        @property 

    +

        def label(self): 

    +

            """ 

    +

            The label of the group. 

     

    -

        @property 

    -

        def max_associations(self): 

    -

            """ 

    -

            The number of associations. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getGroupLabel(self.home_id, self._node_id, self.index) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getMaxAssociations(self.home_id, self._node_id, self.index) 

    +

        @property 

    +

        def max_associations(self): 

    +

            """ 

    +

            The number of associations. 

     

    -

     

    -

        @property 

    -

        def associations(self): 

    -

            """ 

    -

            The members of associations. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getMaxAssociations(self.home_id, self._node_id, self.index) 

    +

     

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            return self._network.manager.getAssociations(self.home_id, self._node_id, self.index) 

    +

        @property 

    +

        def associations(self): 

    +

            """ 

    +

            The members of associations. 

     

    -

        def add_association(self, target_node_id): 

    -

            """ 

    -

            Adds a node to an association group. 

    -

     

    -

            Due to the possibility of a device being asleep, the command is assumed to 

    -

            complete with success, and the association data held in this class is updated directly.  This 

    -

            will be reverted by a future Association message from the device if the Z-Wave 

    -

            message actually failed to get through.  Notification callbacks will be sent in 

    -

            both cases. 

    -

     

    -

            :param target_node_id: Identifier for the node that will be added to the association group. 

    -

            :type target_node_id: int 

    -

     

    -

            """ 

    -

            self._network.manager.addAssociation(self.home_id, self._node_id, self.index, target_node_id) 

    -

     

    -

        def remove_association(self, target_node_id): 

    -

            """ 

    -

            Removes a node from an association group. 

    -

     

    -

            Due to the possibility of a device being asleep, the command is assumed to 

    -

            succeed, and the association data held in this class is updated directly.  This 

    -

            will be reverted by a future Association message from the device if the Z-Wave 

    -

            message actually failed to get through.   Notification callbacks will be sent 

    -

            in both cases. 

    -

     

    -

            :param target_node_id: Identifier for the node that will be removed from the association group. 

    -

            :type target_node_id: int 

    -

     

    -

            """ 

    -

            self._network.manager.removeAssociation(self._network.home_id, self._node_id, self.index, target_node_id) 

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            return self._network.manager.getAssociations(self.home_id, self._node_id, self.index) 

    +

     

    +

        def add_association(self, target_node_id): 

    +

            """ 

    +

            Adds a node to an association group. 

    +

     

    +

            Due to the possibility of a device being asleep, the command is assumed to 

    +

            complete with success, and the association data held in this class is updated directly.  This 

    +

            will be reverted by a future Association message from the device if the Z-Wave 

    +

            message actually failed to get through.  Notification callbacks will be sent in 

    +

            both cases. 

    +

     

    +

            :param target_node_id: Identifier for the node that will be added to the association group. 

    +

            :type target_node_id: int 

    +

     

    +

            """ 

    +

            self._network.manager.addAssociation(self.home_id, self._node_id, self.index, target_node_id) 

    +

     

    +

        def remove_association(self, target_node_id): 

    +

            """ 

    +

            Removes a node from an association group. 

    +

     

    +

            Due to the possibility of a device being asleep, the command is assumed to 

    +

            succeed, and the association data held in this class is updated directly.  This 

    +

            will be reverted by a future Association message from the device if the Z-Wave 

    +

            message actually failed to get through.   Notification callbacks will be sent 

    +

            in both cases. 

    +

     

    +

            :param target_node_id: Identifier for the node that will be removed from the association group. 

    +

            :type target_node_id: int 

    +

     

    +

            """ 

    +

            self._network.manager.removeAssociation(self._network.home_id, self._node_id, self.index, target_node_id) 

    +

     

    +

        def to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the group. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            if 'all' in extras: 

    +

                    extras = ['associations'] 

    +

            ret={} 

    +

            ret['label'] = self.label 

    +

            if 'associations' in extras : 

    +

                    ret['associations'] = dict.fromkeys(self.associations, 0) 

    +

            return ret 

    @@ -1702,1594 +1718,1610 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    import os 

    -

    #from collections import namedtuple 

    -

    import time 

    -

    import sys 

    -

    if sys.hexversion >= 0x3000000: 

    -

        from pydispatch import dispatcher 

    -

        import _thread as thread 

    -

    else: 

    -

        from louie import dispatcher 

    -

        import thread 

    -

    import threading 

    -

    import libopenzwave 

    -

    import openzwave 

    -

    from openzwave.object import ZWaveException, ZWaveTypeException, ZWaveObject 

    -

    from openzwave.controller import ZWaveController 

    -

    from openzwave.node import ZWaveNode 

    -

    from openzwave.option import ZWaveOption 

    -

    from openzwave.scene import ZWaveScene 

    -

    from openzwave.singleton import Singleton 

    -

    import json 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    try: 

    -

        import sqlite3 as lite 

    -

    except ImportError: 

    -

        logger.warning('pysqlite is not installed') 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    import os 

    +

    #from collections import namedtuple 

    +

    import time 

    +

    import sys 

    +

    if sys.hexversion >= 0x3000000: 

    +

        from pydispatch import dispatcher 

    +

        import _thread as thread 

    +

    else: 

    +

        from louie import dispatcher 

    +

        import thread 

    +

    import threading 

    +

    import libopenzwave 

    +

    import openzwave 

    +

    from openzwave.object import ZWaveException, ZWaveTypeException, ZWaveObject 

    +

    from openzwave.controller import ZWaveController 

    +

    from openzwave.node import ZWaveNode 

    +

    from openzwave.option import ZWaveOption 

    +

    from openzwave.scene import ZWaveScene 

    +

    from openzwave.singleton import Singleton 

    +

    import json 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

     

    -

    class ZWaveNetwork(ZWaveObject): 

    -

        """ 

    -

        The network objet = homeid. 

    -

        It contains a reference to the manager and the controller. 

    +

    try: 

    +

        import sqlite3 as lite 

    +

    except ImportError: 

    +

        logger.warning('pysqlite is not installed') 

     

    -

        It dispatch the following louie signals : 

    -

     

    -

            * SIGNAL_NETWORK_FAILED = 'NetworkFailed' 

    -

            * SIGNAL_NETWORK_STARTED = 'NetworkStarted' 

    -

            * SIGNAL_NETWORK_READY = 'NetworkReady' 

    -

            * SIGNAL_NETWORK_STOPPED = 'NetworkStopped' 

    -

            * SIGNAL_NETWORK_RESETTED = 'DriverResetted' 

    -

            * SIGNAL_NETWORK_AWAKED = 'DriverAwaked' 

    -

            * SIGNAL_DRIVER_FAILED = 'DriverFailed' 

    -

            * SIGNAL_DRIVER_READY = 'DriverReady' 

    -

            * SIGNAL_DRIVER_RESET = 'DriverReset' 

    -

            * SIGNAL_DRIVER_REMOVED = 'DriverRemoved' 

    -

            * SIGNAL_NODE_ADDED = 'NodeAdded' 

    -

            * SIGNAL_NODE_EVENT = 'NodeEvent' 

    -

            * SIGNAL_NODE_NAMING = 'NodeNaming' 

    -

            * SIGNAL_NODE_NEW = 'NodeNew' 

    -

            * SIGNAL_NODE_PROTOCOL_INFO = 'NodeProtocolInfo' 

    -

            * SIGNAL_NODE_READY = 'NodeReady' 

    -

            * SIGNAL_NODE_REMOVED = 'NodeRemoved' 

    -

            * SIGNAL_SCENE_EVENT = 'SceneEvent' 

    -

            * SIGNAL_VALUE_ADDED = 'ValueAdded' 

    -

            * SIGNAL_VALUE_CHANGED = 'ValueChanged' 

    -

            * SIGNAL_VALUE_REFRESHED = 'ValueRefreshed' 

    -

            * SIGNAL_VALUE_REMOVED = 'ValueRemoved' 

    -

            * SIGNAL_POLLING_ENABLED = 'PollingEnabled' 

    -

            * SIGNAL_POLLING_DISABLED = 'PollingDisabled' 

    -

            * SIGNAL_CREATE_BUTTON = 'CreateButton' 

    -

            * SIGNAL_DELETE_BUTTON = 'DeleteButton' 

    -

            * SIGNAL_BUTTON_ON = 'ButtonOn' 

    -

            * SIGNAL_BUTTON_OFF = 'ButtonOff' 

    -

            * SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE = 'EssentialNodeQueriesComplete' 

    -

            * SIGNAL_NODE_QUERIES_COMPLETE = 'NodeQueriesComplete' 

    -

            * SIGNAL_AWAKE_NODES_QUERIED = 'AwakeNodesQueried' 

    -

            * SIGNAL_ALL_NODES_QUERIED = 'AllNodesQueried' 

    -

            * SIGNAL_MSG_COMPLETE = 'MsgComplete' 

    -

            * SIGNAL_ERROR = 'Error' 

    -

     

    -

        The table presented below sets notifications in the order they might typically be received, 

    -

        and grouped into a few logically related categories.  Of course, given the variety 

    -

        of ZWave controllers, devices and network configurations the actual sequence will vary (somewhat). 

    -

        The descriptions below the notification name (in square brackets) identify whether the 

    -

        notification is always sent (unless there’s a significant error in the network or software) 

    -

        or potentially sent during the execution sequence. 

    -

     

    -

        Driver Initialization Notification 

    -

     

    -

        The notification below is sent when OpenZWave has successfully connected 

    -

        to a physical ZWave controller. 

    +

    class ZWaveNetwork(ZWaveObject): 

    +

        """ 

    +

        The network objet = homeid. 

    +

        It contains a reference to the manager and the controller. 

    +

     

    +

        It dispatch the following louie signals : 

    +

     

    +

            * SIGNAL_NETWORK_FAILED = 'NetworkFailed' 

    +

            * SIGNAL_NETWORK_STARTED = 'NetworkStarted' 

    +

            * SIGNAL_NETWORK_READY = 'NetworkReady' 

    +

            * SIGNAL_NETWORK_STOPPED = 'NetworkStopped' 

    +

            * SIGNAL_NETWORK_RESETTED = 'DriverResetted' 

    +

            * SIGNAL_NETWORK_AWAKED = 'DriverAwaked' 

    +

            * SIGNAL_DRIVER_FAILED = 'DriverFailed' 

    +

            * SIGNAL_DRIVER_READY = 'DriverReady' 

    +

            * SIGNAL_DRIVER_RESET = 'DriverReset' 

    +

            * SIGNAL_DRIVER_REMOVED = 'DriverRemoved' 

    +

            * SIGNAL_NODE_ADDED = 'NodeAdded' 

    +

            * SIGNAL_NODE_EVENT = 'NodeEvent' 

    +

            * SIGNAL_NODE_NAMING = 'NodeNaming' 

    +

            * SIGNAL_NODE_NEW = 'NodeNew' 

    +

            * SIGNAL_NODE_PROTOCOL_INFO = 'NodeProtocolInfo' 

    +

            * SIGNAL_NODE_READY = 'NodeReady' 

    +

            * SIGNAL_NODE_REMOVED = 'NodeRemoved' 

    +

            * SIGNAL_SCENE_EVENT = 'SceneEvent' 

    +

            * SIGNAL_VALUE_ADDED = 'ValueAdded' 

    +

            * SIGNAL_VALUE_CHANGED = 'ValueChanged' 

    +

            * SIGNAL_VALUE_REFRESHED = 'ValueRefreshed' 

    +

            * SIGNAL_VALUE_REMOVED = 'ValueRemoved' 

    +

            * SIGNAL_POLLING_ENABLED = 'PollingEnabled' 

    +

            * SIGNAL_POLLING_DISABLED = 'PollingDisabled' 

    +

            * SIGNAL_CREATE_BUTTON = 'CreateButton' 

    +

            * SIGNAL_DELETE_BUTTON = 'DeleteButton' 

    +

            * SIGNAL_BUTTON_ON = 'ButtonOn' 

    +

            * SIGNAL_BUTTON_OFF = 'ButtonOff' 

    +

            * SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE = 'EssentialNodeQueriesComplete' 

    +

            * SIGNAL_NODE_QUERIES_COMPLETE = 'NodeQueriesComplete' 

    +

            * SIGNAL_AWAKE_NODES_QUERIED = 'AwakeNodesQueried' 

    +

            * SIGNAL_ALL_NODES_QUERIED = 'AllNodesQueried' 

    +

            * SIGNAL_MSG_COMPLETE = 'MsgComplete' 

    +

            * SIGNAL_ERROR = 'Error' 

    +

     

    +

        The table presented below sets notifications in the order they might typically be received, 

    +

        and grouped into a few logically related categories.  Of course, given the variety 

    +

        of ZWave controllers, devices and network configurations the actual sequence will vary (somewhat). 

    +

        The descriptions below the notification name (in square brackets) identify whether the 

    +

        notification is always sent (unless there’s a significant error in the network or software) 

    +

        or potentially sent during the execution sequence. 

     

    -

        * DriverReady 

    +

        Driver Initialization Notification 

     

    -

        [always sent]   Sent when the driver (representing a connection between OpenZWave 

    -

        and a Z-Wave controller attached to the specified serial (or HID) port) has been initialized. 

    -

        At the time this notification is sent, only certain information about the controller itself is known: 

    -

     

    -

            * Controller Z-Wave version 

    -

            * Network HomeID 

    -

            * Controller capabilities 

    -

            * Controller Application Version & Manufacturer/Product ID 

    -

            * Nodes included in the network 

    -

     

    -

        * DriverRemoved 

    -

     

    -

        [always sent (either due to Error or by request)] The Driver is being removed. 

    -

        Do Not Call Any Driver Related Methods after receiving this 

    +

        The notification below is sent when OpenZWave has successfully connected 

    +

        to a physical ZWave controller. 

    +

     

    +

        * DriverReady 

    +

     

    +

        [always sent]   Sent when the driver (representing a connection between OpenZWave 

    +

        and a Z-Wave controller attached to the specified serial (or HID) port) has been initialized. 

    +

        At the time this notification is sent, only certain information about the controller itself is known: 

    +

     

    +

            * Controller Z-Wave version 

    +

            * Network HomeID 

    +

            * Controller capabilities 

    +

            * Controller Application Version & Manufacturer/Product ID 

    +

            * Nodes included in the network 

     

    -

        Node Initialization Notifications 

    +

        * DriverRemoved 

     

    -

        As OpenZWave starts, it identifies and reads information about each node in the network. 

    -

        The following notifications may be sent during the initialization process. 

    +

        [always sent (either due to Error or by request)] The Driver is being removed. 

    +

        Do Not Call Any Driver Related Methods after receiving this 

     

    -

        * NodeNew 

    +

        Node Initialization Notifications 

     

    -

        [potentially sent]  Sent when a new node has been identified as part of the Z-Wave network. 

    -

        It is not sent if the node was identified in a prior execution of the OpenZWave library 

    -

        and stored in the zwcfg*.xml file. 

    -

        At the time this notification is sent, very little is known about the node itself... 

    -

        only that it is new to OpenZWave. This message is sent once for each new node identified. 

    -

     

    -

        * NodeAdded 

    -

     

    -

        [always sent (for each node associated with the controller)] 

    -

        Sent when a node has been added to OpenZWave’s set of nodes.  It can be 

    -

        triggered either as the zwcfg*.xml file is being read, when a new node 

    -

        is found on startup (see NodeNew notification above), or if a new node 

    -

        is included in the network while OpenZWave is running. 

    -

        As with NodeNew, very little is known about the node at the time the 

    -

        notification is sent…just the fact that a new node has been identified 

    -

        and its assigned NodeID. 

    -

     

    -

        * NodeProtocolInfo 

    -

     

    -

        [potentially sent]  Sent after a node’s protocol information has been 

    -

        successfully read from the controller. 

    -

        At the time this notification is sent, only certain information about the node is known: 

    -

     

    -

            * Whether it is a “listening” or “sleeping” device 

    -

            * Whether the node is capable of routing messages 

    -

            * Maximum baud rate for communication 

    -

            * Version number 

    -

            * Security byte 

    -

     

    -

        NodeNaming 

    -

     

    -

        [potentially sent]  Sent when a node’s name has been set or changed 

    -

        (although it may be “set” to “” or NULL). 

    +

        As OpenZWave starts, it identifies and reads information about each node in the network. 

    +

        The following notifications may be sent during the initialization process. 

    +

     

    +

        * NodeNew 

    +

     

    +

        [potentially sent]  Sent when a new node has been identified as part of the Z-Wave network. 

    +

        It is not sent if the node was identified in a prior execution of the OpenZWave library 

    +

        and stored in the zwcfg*.xml file. 

    +

        At the time this notification is sent, very little is known about the node itself... 

    +

        only that it is new to OpenZWave. This message is sent once for each new node identified. 

    +

     

    +

        * NodeAdded 

    +

     

    +

        [always sent (for each node associated with the controller)] 

    +

        Sent when a node has been added to OpenZWave’s set of nodes.  It can be 

    +

        triggered either as the zwcfg*.xml file is being read, when a new node 

    +

        is found on startup (see NodeNew notification above), or if a new node 

    +

        is included in the network while OpenZWave is running. 

    +

        As with NodeNew, very little is known about the node at the time the 

    +

        notification is sent…just the fact that a new node has been identified 

    +

        and its assigned NodeID. 

    +

     

    +

        * NodeProtocolInfo 

    +

     

    +

        [potentially sent]  Sent after a node’s protocol information has been 

    +

        successfully read from the controller. 

    +

        At the time this notification is sent, only certain information about the node is known: 

    +

     

    +

            * Whether it is a “listening” or “sleeping” device 

    +

            * Whether the node is capable of routing messages 

    +

            * Maximum baud rate for communication 

    +

            * Version number 

    +

            * Security byte 

     

    -

        * ValueAdded 

    +

        NodeNaming 

     

    -

        [potentially sent]  Sent when a new value has been associated with the node. 

    -

        At the time this notification is sent, the new value may or may not 

    -

        have “live” data associated with it. It may be populated, but it may 

    -

        alternatively just be a placeholder for a value that has not been read 

    -

        at the time the notification is sent. 

    -

     

    -

        * NodeQueriesComplete 

    -

     

    -

        [always sent (for each node associated with the controller that has been successfully queried)]     Sent when a node’s values and attributes have been fully queried. At the time this notification is sent, the node’s information has been fully read at least once.  So this notification might trigger “full” display of the node’s information, values, etc. If this notification is not sent, it indicates that there has been a problem initializing the device.  The most common issue is that the node is a “sleeping” device.  The NodeQueriesComplete notification will be sent when the node wakes up and the query process completes. 

    -

     

    -

        Initialization Complete Notifications 

    -

     

    -

        As indicated above, when OpenZWave starts it reads certain information 

    -

        from a file, from the controller and from the network.  The following 

    -

        notifications identify when this initialization/querying process is complete. 

    -

     

    -

        * AwakeNodesQueried 

    -

     

    -

        [always sent]   Sent when all “listening” -always-on-devices have been 

    -

        queried successfully.  It also indicates, by implication, that there 

    -

        are some “sleeping” nodes that will not complete their queries until 

    -

        they wake up. This notification should be sent relatively quickly 

    -

        after start-up. (Of course, it depends on the number of devices on 

    -

        the ZWave network and whether there are any messages that “time out” 

    -

        without a proper response.) 

    -

     

    -

        * AllNodesQueried 

    -

     

    -

        [potentially sent]  Sent when all nodes have been successfully queried. 

    -

     

    -

        This notification should be sent relatively quickly if there are 

    -

        no “sleeping” nodes. But it might be sent quite a while after start-up 

    -

        if there are sleeping nodes and at least one of these nodes has a long “wake-up” interval. 

    -

     

    -

        Other Notifications 

    -

     

    -

        In addition to the notifications described above, which are primarily 

    -

        “initialization” notifications that are sent during program start-up, 

    -

        the following notifications may be sent as a result of user actions, 

    -

        external program control, etc. 

    +

        [potentially sent]  Sent when a node’s name has been set or changed 

    +

        (although it may be “set” to “” or NULL). 

    +

     

    +

        * ValueAdded 

    +

     

    +

        [potentially sent]  Sent when a new value has been associated with the node. 

    +

        At the time this notification is sent, the new value may or may not 

    +

        have “live” data associated with it. It may be populated, but it may 

    +

        alternatively just be a placeholder for a value that has not been read 

    +

        at the time the notification is sent. 

    +

     

    +

        * NodeQueriesComplete 

    +

     

    +

        [always sent (for each node associated with the controller that has been successfully queried)]     Sent when a node’s values and attributes have been fully queried. At the time this notification is sent, the node’s information has been fully read at least once.  So this notification might trigger “full” display of the node’s information, values, etc. If this notification is not sent, it indicates that there has been a problem initializing the device.  The most common issue is that the node is a “sleeping” device.  The NodeQueriesComplete notification will be sent when the node wakes up and the query process completes. 

    +

     

    +

        Initialization Complete Notifications 

    +

     

    +

        As indicated above, when OpenZWave starts it reads certain information 

    +

        from a file, from the controller and from the network.  The following 

    +

        notifications identify when this initialization/querying process is complete. 

    +

     

    +

        * AwakeNodesQueried 

    +

     

    +

        [always sent]   Sent when all “listening” -always-on-devices have been 

    +

        queried successfully.  It also indicates, by implication, that there 

    +

        are some “sleeping” nodes that will not complete their queries until 

    +

        they wake up. This notification should be sent relatively quickly 

    +

        after start-up. (Of course, it depends on the number of devices on 

    +

        the ZWave network and whether there are any messages that “time out” 

    +

        without a proper response.) 

    +

     

    +

        * AllNodesQueried 

    +

     

    +

        [potentially sent]  Sent when all nodes have been successfully queried. 

    +

     

    +

        This notification should be sent relatively quickly if there are 

    +

        no “sleeping” nodes. But it might be sent quite a while after start-up 

    +

        if there are sleeping nodes and at least one of these nodes has a long “wake-up” interval. 

    +

     

    +

        Other Notifications 

     

    -

        * ValueChanged : Sent when a value associated with a node has changed. Receipt of this notification indicates that it may be a good time to read the new value and display or otherwise process it accordingly. 

    -

        * ValueRemoved : Sent when a value associated with a node has been removed. 

    -

        * Group : Sent when a node’s group association has changed. 

    -

        * NodeRemoved : Sent when a node has been removed from the ZWave network. 

    -

        * NodeEvent : Sent when a node sends a Basic_Set command to the controller.  This notification can be generated by certain sensors, for example, motion detectors, to indicate that an event has been sensed. 

    -

        * PollingEnabled : Sent when node/value polling has been enabled. 

    -

        * PollingDisabled : Sent when node/value polling has been disabled. 

    -

        * DriverReset : Sent to indicate when a controller has been reset.  This notification is intended to replace the potentially hundreds of notifications representing each value and node removed from the network. 

    -

     

    -

        About the use of louie signals : 

    -

        For network, python-openzwave send the following louie signal : 

    -

     

    -

            SIGNAL_NETWORK_FAILED : the driver has failed to start. 

    -

            SIGNAL_NETWORK_STARTED : the driver is ready, but network is not available. 

    -

            SIGNAL_NETWORK_AWAKED : all awake nodes are queried. Some sleeping nodes may be missing. 

    -

            SIGNAL_NETWORK_READY : all nodes are queried. Network is fully functionnal. 

    -

            SIGNAL_NETWORK_RESETTED : the network has been resetted. It will start again. 

    -

            SIGNAL_NETWORK_STOPPED : the network has been stopped. 

    -

     

    -

        Deprecated : SIGNAL_DRIVER_* shouldn't be used anymore. 

    -

     

    -

        """ 

    -

     

    -

        SIGNAL_NETWORK_FAILED = 'NetworkFailed' 

    -

        SIGNAL_NETWORK_STARTED = 'NetworkStarted' 

    -

        SIGNAL_NETWORK_READY = 'NetworkReady' 

    -

        SIGNAL_NETWORK_STOPPED = 'NetworkStopped' 

    -

        SIGNAL_NETWORK_RESETTED = 'DriverResetted' 

    -

        SIGNAL_NETWORK_AWAKED = 'DriverAwaked' 

    -

        SIGNAL_DRIVER_FAILED = 'DriverFailed' 

    -

        SIGNAL_DRIVER_READY = 'DriverReady' 

    -

        SIGNAL_DRIVER_RESET = 'DriverReset' 

    -

        SIGNAL_DRIVER_REMOVED = 'DriverRemoved' 

    -

        SIGNAL_GROUP = 'Group' 

    -

        SIGNAL_NODE = 'Node' 

    -

        SIGNAL_NODE_ADDED = 'NodeAdded' 

    -

        SIGNAL_NODE_EVENT = 'NodeEvent' 

    -

        SIGNAL_NODE_NAMING = 'NodeNaming' 

    -

        SIGNAL_NODE_NEW = 'NodeNew' 

    -

        SIGNAL_NODE_PROTOCOL_INFO = 'NodeProtocolInfo' 

    -

        SIGNAL_NODE_READY = 'NodeReady' 

    -

        SIGNAL_NODE_REMOVED = 'NodeRemoved' 

    -

        SIGNAL_SCENE_EVENT = 'SceneEvent' 

    -

        SIGNAL_VALUE = 'Value' 

    -

        SIGNAL_VALUE_ADDED = 'ValueAdded' 

    -

        SIGNAL_VALUE_CHANGED = 'ValueChanged' 

    -

        SIGNAL_VALUE_REFRESHED = 'ValueRefreshed' 

    -

        SIGNAL_VALUE_REMOVED = 'ValueRemoved' 

    -

        SIGNAL_POLLING_ENABLED = 'PollingEnabled' 

    -

        SIGNAL_POLLING_DISABLED = 'PollingDisabled' 

    -

        SIGNAL_CREATE_BUTTON = 'CreateButton' 

    -

        SIGNAL_DELETE_BUTTON = 'DeleteButton' 

    -

        SIGNAL_BUTTON_ON = 'ButtonOn' 

    -

        SIGNAL_BUTTON_OFF = 'ButtonOff' 

    -

        SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE = 'EssentialNodeQueriesComplete' 

    -

        SIGNAL_NODE_QUERIES_COMPLETE = 'NodeQueriesComplete' 

    -

        SIGNAL_AWAKE_NODES_QUERIED = 'AwakeNodesQueried' 

    -

        SIGNAL_ALL_NODES_QUERIED = 'AllNodesQueried' 

    -

        SIGNAL_ALL_NODES_QUERIED_SOME_DEAD = 'AllNodesQueriedSomeDead' 

    -

        SIGNAL_MSG_COMPLETE = 'MsgComplete' 

    -

        SIGNAL_NOTIFICATION = 'Notification' 

    -

     

    -

        STATE_STOPPED = 0 

    -

        STATE_FAILED = 1 

    -

        STATE_RESETTED = 3 

    -

        STATE_STARTED = 5 

    -

        STATE_AWAKED = 7 

    -

        STATE_READY = 10 

    -

     

    -

        ignoreSubsequent = True 

    -

     

    -

        def __init__(self, options, log=None, autostart=True, kvals=True): 

    -

            """ 

    -

            Initialize zwave network 

    -

     

    -

            :param options: Options to use with manager 

    -

            :type options: ZWaveOption 

    -

            :param log: A log file (not used. Deprecated 

    -

            :type log: 

    -

            :param autostart: should we start the network. 

    -

            :type autostart: bool 

    -

            :param autostart: Enable kvals (use pysqlite) 

    -

            :type autostart: bool 

    -

     

    -

            """ 

    -

            logger.debug("Create network object.") 

    -

            self.log = log 

    -

            self._options = options 

    -

            ZWaveObject.__init__(self, None, self) 

    -

            self._controller = ZWaveController(1, self, options) 

    -

            self._manager = libopenzwave.PyManager() 

    -

            self._manager.create() 

    -

            self._state = self.STATE_STOPPED 

    -

            self.nodes = None 

    -

            self._semaphore_nodes = threading.Semaphore() 

    -

            self._id_separator = '.' 

    -

            self.network_event = threading.Event() 

    -

            self.dbcon = None 

    -

            if kvals == True: 

    -

                try: 

    -

                    self.dbcon = lite.connect(os.path.join(self._options.user_path, 'pyozw.db'), check_same_thread=False) 

    -

                    cur = self.dbcon.cursor() 

    -

                    cur.execute('SELECT SQLITE_VERSION()') 

    -

                    data = cur.fetchone() 

    -

                    self._check_db_tables() 

    -

                except lite.Error as e: 

    -

                    logger.warning("Can't connect to sqlite database : kvals are disabled - %s", e.args[0]) 

    -

            self._started = False 

    -

            if autostart: 

    -

                self.start() 

    -

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the node. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'home_id: [%s] controller: [%s]' % \ 

    -

              (self.home_id_str, self.controller) 

    -

     

    -

        def _check_db_tables(self): 

    -

            """ 

    -

            Check that the tables for "classes" are in database. 

    -

     

    -

            :returns: True if operation succeed. False oterwise 

    -

            :rtype: boolean 

    -

     

    -

            """ 

    -

            if self.dbcon is None: 

    -

                return False 

    -

            cur = self.dbcon.cursor() 

    -

            for mycls in ['ZWaveOption', 'ZWaveOptionSingleton', 'ZWaveNetwork', 'ZWaveNetworkSingleton', 'ZWaveNode', 'ZWaveController', 'ZWaveValue']: 

    -

                cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='%s';" % mycls) 

    -

                data = cur.fetchone() 

    -

                if data is None: 

    -

                    cur.execute("CREATE TABLE %s(object_id INT, key TEXT, value TEXT)" % mycls) 

    -

            return True 

    -

     

    -

        def start(self): 

    -

            """ 

    -

            Start the network object : 

    -

                - add a watcher 

    -

                - add a driver 

    -

     

    -

            """ 

    -

            if self._started == True: 

    -

                return 

    -

            logger.info("Start Openzwave network.") 

    -

            self._manager.addWatcher(self.zwcallback) 

    -

            self._manager.addDriver(self._options.device) 

    -

            self._started = True 

    -

     

    -

        def stop(self, fire=True): 

    -

            """ 

    -

            Stop the network object. 

    -

     

    -

                - remove the watcher 

    -

                - remove the driver 

    -

                - clear the nodes 

    -

     

    -

            .. code-block:: python 

    -

     

    -

                dispatcher.send(self.SIGNAL_NETWORK_STOPPED, **{'network': self}) 

    -

     

    -

            """ 

    -

            if self._started == False: 

    -

                return 

    -

            self.write_config() 

    -

            if self.dbcon is not None: 

    -

                self.dbcon.close() 

    -

            logger.info("Stop Openzave network.") 

    -

            for i in range(0, 60): 

    -

                if self.controller.send_queue_count <= 0: 

    -

                    break 

    -

                else: 

    -

                    try: 

    -

                        self.network_event.wait(1.0) 

    -

                    except AssertionError: 

    -

                        #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    -

                        pass 

    -

            logger.debug("Wait for empty send_queue during %s second(s).", i) 

    -

            try: 

    -

                self._semaphore_nodes.acquire() 

    -

                self._manager.removeWatcher(self.zwcallback) 

    -

                try: 

    -

                    self.network_event.wait(1.0) 

    -

                except AssertionError: 

    -

                    #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    -

                    pass 

    -

                self._manager.removeDriver(self._options.device) 

    -

                try: 

    -

                    self.network_event.wait(1.0) 

    -

                except AssertionError: 

    -

                    #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    -

                    pass 

    -

                for i in range(0, 60): 

    -

                    if self.controller.send_queue_count <= 0: 

    -

                        break 

    -

                    else: 

    -

                        try: 

    -

                            self.network_event.wait(1.0) 

    -

                        except AssertionError: 

    -

                            #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    -

                            pass 

    -

                self.nodes = None 

    -

                self._state = self.STATE_STOPPED 

    -

                if fire: 

    -

                    dispatcher.send(self.SIGNAL_NETWORK_STOPPED, **{'network': self}) 

    -

            except: 

    -

                import sys, traceback 

    -

                logger.error('Stop network : %s', traceback.format_exception(*sys.exc_info())) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    -

            self._manager.destroy() 

    -

            self._options.destroy() 

    -

            self._started = False 

    -

     

    -

        @property 

    -

        def home_id(self): 

    -

            """ 

    -

            The home_id of the network. 

    -

     

    -

            :rtype: int 

    +

        In addition to the notifications described above, which are primarily 

    +

        “initialization” notifications that are sent during program start-up, 

    +

        the following notifications may be sent as a result of user actions, 

    +

        external program control, etc. 

    +

     

    +

        * ValueChanged : Sent when a value associated with a node has changed. Receipt of this notification indicates that it may be a good time to read the new value and display or otherwise process it accordingly. 

    +

        * ValueRemoved : Sent when a value associated with a node has been removed. 

    +

        * Group : Sent when a node’s group association has changed. 

    +

        * NodeRemoved : Sent when a node has been removed from the ZWave network. 

    +

        * NodeEvent : Sent when a node sends a Basic_Set command to the controller.  This notification can be generated by certain sensors, for example, motion detectors, to indicate that an event has been sensed. 

    +

        * PollingEnabled : Sent when node/value polling has been enabled. 

    +

        * PollingDisabled : Sent when node/value polling has been disabled. 

    +

        * DriverReset : Sent to indicate when a controller has been reset.  This notification is intended to replace the potentially hundreds of notifications representing each value and node removed from the network. 

    +

     

    +

        About the use of louie signals : 

    +

        For network, python-openzwave send the following louie signal : 

    +

     

    +

            SIGNAL_NETWORK_FAILED : the driver has failed to start. 

    +

            SIGNAL_NETWORK_STARTED : the driver is ready, but network is not available. 

    +

            SIGNAL_NETWORK_AWAKED : all awake nodes are queried. Some sleeping nodes may be missing. 

    +

            SIGNAL_NETWORK_READY : all nodes are queried. Network is fully functionnal. 

    +

            SIGNAL_NETWORK_RESETTED : the network has been resetted. It will start again. 

    +

            SIGNAL_NETWORK_STOPPED : the network has been stopped. 

    +

     

    +

        Deprecated : SIGNAL_DRIVER_* shouldn't be used anymore. 

    +

     

    +

        """ 

    +

     

    +

        SIGNAL_NETWORK_FAILED = 'NetworkFailed' 

    +

        SIGNAL_NETWORK_STARTED = 'NetworkStarted' 

    +

        SIGNAL_NETWORK_READY = 'NetworkReady' 

    +

        SIGNAL_NETWORK_STOPPED = 'NetworkStopped' 

    +

        SIGNAL_NETWORK_RESETTED = 'DriverResetted' 

    +

        SIGNAL_NETWORK_AWAKED = 'DriverAwaked' 

    +

        SIGNAL_DRIVER_FAILED = 'DriverFailed' 

    +

        SIGNAL_DRIVER_READY = 'DriverReady' 

    +

        SIGNAL_DRIVER_RESET = 'DriverReset' 

    +

        SIGNAL_DRIVER_REMOVED = 'DriverRemoved' 

    +

        SIGNAL_GROUP = 'Group' 

    +

        SIGNAL_NODE = 'Node' 

    +

        SIGNAL_NODE_ADDED = 'NodeAdded' 

    +

        SIGNAL_NODE_EVENT = 'NodeEvent' 

    +

        SIGNAL_NODE_NAMING = 'NodeNaming' 

    +

        SIGNAL_NODE_NEW = 'NodeNew' 

    +

        SIGNAL_NODE_PROTOCOL_INFO = 'NodeProtocolInfo' 

    +

        SIGNAL_NODE_READY = 'NodeReady' 

    +

        SIGNAL_NODE_REMOVED = 'NodeRemoved' 

    +

        SIGNAL_SCENE_EVENT = 'SceneEvent' 

    +

        SIGNAL_VALUE = 'Value' 

    +

        SIGNAL_VALUE_ADDED = 'ValueAdded' 

    +

        SIGNAL_VALUE_CHANGED = 'ValueChanged' 

    +

        SIGNAL_VALUE_REFRESHED = 'ValueRefreshed' 

    +

        SIGNAL_VALUE_REMOVED = 'ValueRemoved' 

    +

        SIGNAL_POLLING_ENABLED = 'PollingEnabled' 

    +

        SIGNAL_POLLING_DISABLED = 'PollingDisabled' 

    +

        SIGNAL_CREATE_BUTTON = 'CreateButton' 

    +

        SIGNAL_DELETE_BUTTON = 'DeleteButton' 

    +

        SIGNAL_BUTTON_ON = 'ButtonOn' 

    +

        SIGNAL_BUTTON_OFF = 'ButtonOff' 

    +

        SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE = 'EssentialNodeQueriesComplete' 

    +

        SIGNAL_NODE_QUERIES_COMPLETE = 'NodeQueriesComplete' 

    +

        SIGNAL_AWAKE_NODES_QUERIED = 'AwakeNodesQueried' 

    +

        SIGNAL_ALL_NODES_QUERIED = 'AllNodesQueried' 

    +

        SIGNAL_ALL_NODES_QUERIED_SOME_DEAD = 'AllNodesQueriedSomeDead' 

    +

        SIGNAL_MSG_COMPLETE = 'MsgComplete' 

    +

        SIGNAL_NOTIFICATION = 'Notification' 

    +

     

    +

        STATE_STOPPED = 0 

    +

        STATE_FAILED = 1 

    +

        STATE_RESETTED = 3 

    +

        STATE_STARTED = 5 

    +

        STATE_AWAKED = 7 

    +

        STATE_READY = 10 

    +

     

    +

        ignoreSubsequent = True 

    +

     

    +

        def __init__(self, options, log=None, autostart=True, kvals=True): 

    +

            """ 

    +

            Initialize zwave network 

    +

     

    +

            :param options: Options to use with manager 

    +

            :type options: ZWaveOption 

    +

            :param log: A log file (not used. Deprecated 

    +

            :type log: 

    +

            :param autostart: should we start the network. 

    +

            :type autostart: bool 

    +

            :param autostart: Enable kvals (use pysqlite) 

    +

            :type autostart: bool 

    +

     

    +

            """ 

    +

            logger.debug("Create network object.") 

    +

            self.log = log 

    +

            self._options = options 

    +

            ZWaveObject.__init__(self, None, self) 

    +

            self._controller = ZWaveController(1, self, options) 

    +

            self._manager = libopenzwave.PyManager() 

    +

            self._manager.create() 

    +

            self._state = self.STATE_STOPPED 

    +

            self.nodes = None 

    +

            self._semaphore_nodes = threading.Semaphore() 

    +

            self._id_separator = '.' 

    +

            self.network_event = threading.Event() 

    +

            self.dbcon = None 

    +

            if kvals == True: 

    +

                try: 

    +

                    self.dbcon = lite.connect(os.path.join(self._options.user_path, 'pyozw.db'), check_same_thread=False) 

    +

                    cur = self.dbcon.cursor() 

    +

                    cur.execute('SELECT SQLITE_VERSION()') 

    +

                    data = cur.fetchone() 

    +

                    self._check_db_tables() 

    +

                except lite.Error as e: 

    +

                    logger.warning("Can't connect to sqlite database : kvals are disabled - %s", e.args[0]) 

    +

            self._started = False 

    +

            if autostart: 

    +

                self.start() 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the node. 

    +

     

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'home_id: [%s] controller: [%s]' % \ 

    +

              (self.home_id_str, self.controller) 

    +

     

    +

        def _check_db_tables(self): 

    +

            """ 

    +

            Check that the tables for "classes" are in database. 

    +

     

    +

            :returns: True if operation succeed. False oterwise 

    +

            :rtype: boolean 

    +

     

    +

            """ 

    +

            if self.dbcon is None: 

    +

                return False 

    +

            cur = self.dbcon.cursor() 

    +

            for mycls in ['ZWaveOption', 'ZWaveOptionSingleton', 'ZWaveNetwork', 'ZWaveNetworkSingleton', 'ZWaveNode', 'ZWaveController', 'ZWaveValue']: 

    +

                cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='%s';" % mycls) 

    +

                data = cur.fetchone() 

    +

                if data is None: 

    +

                    cur.execute("CREATE TABLE %s(object_id INT, key TEXT, value TEXT)" % mycls) 

    +

            return True 

    +

     

    +

        def start(self): 

    +

            """ 

    +

            Start the network object : 

    +

                - add a watcher 

    +

                - add a driver 

    +

     

    +

            """ 

    +

            if self._started == True: 

    +

                return 

    +

            logger.info("Start Openzwave network.") 

    +

            self._manager.addWatcher(self.zwcallback) 

    +

            self._manager.addDriver(self._options.device) 

    +

            self._started = True 

    +

     

    +

        def stop(self, fire=True): 

    +

            """ 

    +

            Stop the network object. 

    +

     

    +

                - remove the watcher 

    +

                - remove the driver 

    +

                - clear the nodes 

    +

     

    +

            .. code-block:: python 

    +

     

    +

                dispatcher.send(self.SIGNAL_NETWORK_STOPPED, **{'network': self}) 

    +

     

    +

            """ 

    +

            if self._started == False: 

    +

                return 

    +

            if self.controller is not None: 

    +

                self.controller.stop() 

    +

            self.write_config() 

    +

            if self.dbcon is not None: 

    +

                self.dbcon.close() 

    +

            logger.info("Stop Openzave network.") 

    +

            for i in range(0, 60): 

    +

                if self.controller.send_queue_count <= 0: 

    +

                    break 

    +

                else: 

    +

                    try: 

    +

                        self.network_event.wait(1.0) 

    +

                    except AssertionError: 

    +

                        #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    +

                        pass 

    +

            logger.debug("Wait for empty send_queue during %s second(s).", i) 

    +

            try: 

    +

                self._semaphore_nodes.acquire() 

    +

                self._manager.removeWatcher(self.zwcallback) 

    +

                try: 

    +

                    self.network_event.wait(1.0) 

    +

                except AssertionError: 

    +

                    #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    +

                    pass 

    +

                self._manager.removeDriver(self._options.device) 

    +

                try: 

    +

                    self.network_event.wait(1.0) 

    +

                except AssertionError: 

    +

                    #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    +

                    pass 

    +

                for i in range(0, 60): 

    +

                    if self.controller.send_queue_count <= 0: 

    +

                        break 

    +

                    else: 

    +

                        try: 

    +

                            self.network_event.wait(1.0) 

    +

                        except AssertionError: 

    +

                            #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    +

                            pass 

    +

                self.nodes = None 

    +

                self._state = self.STATE_STOPPED 

    +

                if fire: 

    +

                    dispatcher.send(self.SIGNAL_NETWORK_STOPPED, **{'network': self}) 

    +

            except: 

    +

                import sys, traceback 

    +

                logger.error('Stop network : %s', traceback.format_exception(*sys.exc_info())) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

    +

            self._manager.destroy() 

    +

            self._options.destroy() 

    +

            self._started = False 

     

    -

            """ 

    -

            if self._object_id is None: 

    -

                return 0 

    -

            return self._object_id 

    +

        @property 

    +

        def home_id(self): 

    +

            """ 

    +

            The home_id of the network. 

     

    -

        @home_id.setter 

    -

        def home_id(self, value): 

    -

            """ 

    -

            The home_id of the network. 

    -

     

    -

            :param value: new home_id 

    -

            :type value: int 

    -

     

    -

            """ 

    -

            self._object_id = value 

    -

     

    -

        @property 

    -

        def home_id_str(self): 

    -

            """ 

    -

            The home_id of the network as string. 

    -

     

    -

            :rtype: str 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            if self._object_id is None: 

    +

                return 0 

    +

            return self._object_id 

    +

     

    +

        @home_id.setter 

    +

        def home_id(self, value): 

    +

            """ 

    +

            The home_id of the network. 

    +

     

    +

            :param value: new home_id 

    +

            :type value: int 

    +

     

    +

            """ 

    +

            self._object_id = value 

     

    -

            """ 

    -

            return "0x%0.8x" % self.home_id 

    -

     

    -

        @property 

    -

        def is_ready(self): 

    -

            """ 

    -

            Says if the network is ready for operations. 

    -

     

    -

            :rtype: bool 

    +

        @property 

    +

        def home_id_str(self): 

    +

            """ 

    +

            The home_id of the network as string. 

    +

     

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return "0x%0.8x" % self.home_id 

     

    -

            """ 

    -

            return self._state >= self.STATE_READY 

    -

     

    -

        @property 

    -

        def state(self): 

    -

            """ 

    -

            The state of the network. Values may be changed in the future, 

    -

            only order is important. 

    -

            You can safely ask node information when state >= STATE_READY 

    +

        @property 

    +

        def is_ready(self): 

    +

            """ 

    +

            Says if the network is ready for operations. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._state >= self.STATE_READY 

     

    -

            * STATE_STOPPED = 0 

    -

            * STATE_FAILED = 1 

    -

            * STATE_RESETTED = 3 

    -

            * STATE_STARTED = 5 

    -

            * STATE_AWAKED = 7 

    -

            * STATE_READY = 10 

    +

        @property 

    +

        def state(self): 

    +

            """ 

    +

            The state of the network. Values may be changed in the future, 

    +

            only order is important. 

    +

            You can safely ask node information when state >= STATE_READY 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._state 

    -

     

    -

        @state.setter 

    -

        def state(self, value): 

    -

            """ 

    -

            The state of the network. Values may be changed in the future, 

    -

            only order is important. 

    -

     

    -

            * STATE_STOPPED = 0 

    -

            * STATE_FAILED = 1 

    -

            * STATE_RESETTED = 3 

    -

            * STATE_STARTED = 5 

    -

            * STATE_AWAKED = 7 

    -

            * STATE_READY = 10 

    +

            * STATE_STOPPED = 0 

    +

            * STATE_FAILED = 1 

    +

            * STATE_RESETTED = 3 

    +

            * STATE_STARTED = 5 

    +

            * STATE_AWAKED = 7 

    +

            * STATE_READY = 10 

    +

     

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._state 

    +

     

    +

        @state.setter 

    +

        def state(self, value): 

    +

            """ 

    +

            The state of the network. Values may be changed in the future, 

    +

            only order is important. 

     

    -

            :param value: new state 

    -

            :type value: int 

    -

     

    -

            """ 

    -

            self._state = value 

    -

     

    -

        @property 

    -

        def state_str(self): 

    -

            """ 

    -

            The state of the network. Values may be changed in the future, 

    -

            only order is important. 

    -

            You can safely ask node informations when state >= STATE_AWAKED 

    +

            * STATE_STOPPED = 0 

    +

            * STATE_FAILED = 1 

    +

            * STATE_RESETTED = 3 

    +

            * STATE_STARTED = 5 

    +

            * STATE_AWAKED = 7 

    +

            * STATE_READY = 10 

    +

     

    +

            :param value: new state 

    +

            :type value: int 

    +

     

    +

            """ 

    +

            self._state = value 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            if self._state == self.STATE_STOPPED: 

    -

                return "Network is stopped" 

    -

            elif self._state == self.STATE_FAILED: 

    -

                return "Driver failed" 

    -

            elif self._state == self.STATE_STARTED: 

    -

                return "Driver initialised" 

    -

            elif self._state == self.STATE_RESETTED: 

    -

                return "Driver is reset" 

    -

            elif self._state == self.STATE_AWAKED: 

    -

                return "Topology loaded" 

    -

            elif self._state == self.STATE_READY: 

    -

                return "Network ready" 

    -

            else: 

    -

                return "Unknown state" 

    -

     

    -

        @property 

    -

        def manager(self): 

    -

            """ 

    -

            The manager to use to communicate with the lib c++. 

    -

     

    -

            :rtype: ZWaveManager 

    +

        @property 

    +

        def state_str(self): 

    +

            """ 

    +

            The state of the network. Values may be changed in the future, 

    +

            only order is important. 

    +

            You can safely ask node informations when state >= STATE_AWAKED 

    +

     

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            if self._state == self.STATE_STOPPED: 

    +

                return "Network is stopped" 

    +

            elif self._state == self.STATE_FAILED: 

    +

                return "Driver failed" 

    +

            elif self._state == self.STATE_STARTED: 

    +

                return "Driver initialised" 

    +

            elif self._state == self.STATE_RESETTED: 

    +

                return "Driver is reset" 

    +

            elif self._state == self.STATE_AWAKED: 

    +

                return "Topology loaded" 

    +

            elif self._state == self.STATE_READY: 

    +

                return "Network ready" 

    +

            else: 

    +

                return "Unknown state" 

     

    -

            """ 

    -

            if self._manager is not None: 

    -

                return self._manager 

    -

            else: 

    -

                raise ZWaveException("Manager not initialised") 

    -

     

    -

        @property 

    -

        def controller(self): 

    -

            """ 

    -

            The controller of the network. 

    -

     

    -

            :return: The controller of the network 

    -

            :rtype: ZWaveController 

    -

     

    -

            """ 

    -

            if self._controller is not None: 

    -

                return self._controller 

    -

            else: 

    -

                raise ZWaveException("Controller not initialised") 

    -

     

    -

        @property 

    -

        def nodes(self): 

    -

            """ 

    -

            The nodes of the network. 

    -

     

    -

            :rtype: dict() 

    +

        @property 

    +

        def manager(self): 

    +

            """ 

    +

            The manager to use to communicate with the lib c++. 

    +

     

    +

            :rtype: ZWaveManager 

    +

     

    +

            """ 

    +

            if self._manager is not None: 

    +

                return self._manager 

    +

            else: 

    +

                raise ZWaveException("Manager not initialised") 

    +

     

    +

        @property 

    +

        def controller(self): 

    +

            """ 

    +

            The controller of the network. 

    +

     

    +

            :return: The controller of the network 

    +

            :rtype: ZWaveController 

    +

     

    +

            """ 

    +

            if self._controller is not None: 

    +

                return self._controller 

    +

            else: 

    +

                raise ZWaveException("Controller not initialised") 

     

    -

            """ 

    -

            return self._nodes 

    -

     

    -

        def nodes_to_dict(self, kvals=True): 

    -

            """ 

    -

            Return a dict representation of the network. 

    +

        @property 

    +

        def nodes(self): 

    +

            """ 

    +

            The nodes of the network. 

    +

     

    +

            :rtype: dict() 

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            for ndid in self._nodes.keys(): 

    -

                ret[ndid]=self._nodes[ndid].to_dict(kvals=kvals) 

    -

            return ret 

    -

     

    -

        def to_dict(self, kvals=True): 

    -

            """ 

    -

            Return a dict representation of the network. 

    +

            """ 

    +

            return self._nodes 

    +

     

    +

        def nodes_to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the network. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            ret['state'] = self.state, 

    -

            ret['state_str'] = self.state_str, 

    -

            ret['home_id'] = self.home_id_str, 

    -

            ret['nodes_count'] = self.nodes_count, 

    -

            if kvals == True and self.network.dbcon is not None: 

    -

                vals = self.kvals 

    -

                for key in vals.keys(): 

    -

                    ret[key]=vals[key] 

    -

            return ret 

    -

     

    -

        @nodes.setter 

    -

        def nodes(self, value): 

    -

            """ 

    -

            The nodes of the network. 

    -

     

    -

            :param value: The new value 

    -

            :type value: dict() or None 

    -

     

    -

            """ 

    -

            if type(value) == type(dict()): 

    -

                self._nodes = value 

    -

            else: 

    -

                self._nodes = dict() 

    -

     

    -

        def switch_all(self, state): 

    +

            """ 

    +

            ret={} 

    +

            for ndid in self._nodes.keys(): 

    +

                ret[ndid]=self._nodes[ndid].to_dict(extras=extras) 

    +

            return ret 

    +

     

    +

        def to_dict(self, extras=['kvals']): 

    +

            """ 

    +

            Return a dict representation of the network. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret={} 

    +

            ret['state'] = self.state, 

    +

            ret['state_str'] = self.state_str, 

    +

            ret['home_id'] = self.home_id_str, 

    +

            ret['nodes_count'] = self.nodes_count, 

    +

            if 'kvals' in extras and self.network.dbcon is not None: 

    +

                vals = self.kvals 

    +

                for key in vals.keys(): 

    +

                    ret[key]=vals[key] 

    +

            return ret 

    +

     

    +

        @nodes.setter 

    +

        def nodes(self, value): 

            """ 

    -

            Method for switching all devices on or off together.  The devices must support 

    -

            the SwitchAll command class.  The command is first broadcast to all nodes, and 

    -

            then followed up with individual commands to each node (because broadcasts are 

    -

            not routed, the message might not otherwise reach all the nodes). 

    +

            The nodes of the network. 

    +

     

    +

            :param value: The new value 

    +

            :type value: dict() or None 

     

    -

            :param state: True to turn on the switches, False to turn them off 

    -

            :type state: bool 

    -

     

    -

            """ 

    -

            if state: 

    -

                self.manager.switchAllOn(self.home_id) 

    -

            else: 

    -

                self.manager.switchAllOff(self.home_id) 

    -

     

    -

        def test(self, count=1): 

    -

            """ 

    -

            Send a number of test messages to every node and record results. 

    +

            """ 

    +

            if type(value) == type(dict()): 

    +

                self._nodes = value 

    +

            else: 

    +

                self._nodes = dict() 

    +

     

    +

        def switch_all(self, state): 

    +

            """ 

    +

            Method for switching all devices on or off together.  The devices must support 

    +

            the SwitchAll command class.  The command is first broadcast to all nodes, and 

    +

            then followed up with individual commands to each node (because broadcasts are 

    +

            not routed, the message might not otherwise reach all the nodes). 

     

    -

            :param count: The number of test messages to send. 

    -

            :type count: int 

    +

            :param state: True to turn on the switches, False to turn them off 

    +

            :type state: bool 

     

            """ 

    -

            self.manager.testNetwork(self.home_id, count) 

    -

     

    -

        def heal(self, upNodeRoute=False): 

    -

            """ 

    -

            Heal network by requesting nodes rediscover their neighbors. 

    -

            Sends a ControllerCommand_RequestNodeNeighborUpdate to every node. 

    -

            Can take a while on larger networks. 

    -

     

    -

            :param upNodeRoute: Optional Whether to perform return routes initialization. (default = false). 

    -

            :type upNodeRoute: bool 

    -

            :return: True is the ControllerCommand ins sent. False otherwise 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            if self.network.state < self.network.STATE_AWAKED: 

    -

                logger.warning('Network state must a minimum set to awake') 

    -

                return False 

    -

            self.manager.healNetwork(self.home_id, upNodeRoute) 

    -

            return True 

    -

     

    -

        def get_value(self, value_id): 

    -

            """ 

    -

            Retrieve a value on the network. 

    -

     

    -

            Check every nodes to see if it holds the value 

    +

            if state: 

    +

                self.manager.switchAllOn(self.home_id) 

    +

            else: 

    +

                self.manager.switchAllOff(self.home_id) 

    +

     

    +

        def test(self, count=1): 

    +

            """ 

    +

            Send a number of test messages to every node and record results. 

    +

     

    +

            :param count: The number of test messages to send. 

    +

            :type count: int 

    +

     

    +

            """ 

    +

            self.manager.testNetwork(self.home_id, count) 

    +

     

    +

        def heal(self, upNodeRoute=False): 

    +

            """ 

    +

            Heal network by requesting nodes rediscover their neighbors. 

    +

            Sends a ControllerCommand_RequestNodeNeighborUpdate to every node. 

    +

            Can take a while on larger networks. 

    +

     

    +

            :param upNodeRoute: Optional Whether to perform return routes initialization. (default = false). 

    +

            :type upNodeRoute: bool 

    +

            :return: True is the ControllerCommand ins sent. False otherwise 

    +

            :rtype: bool 

     

    -

            :param value_id: The id of the value to find 

    -

            :type value_id: int 

    -

            :return: The value or None 

    -

            :rtype: ZWaveValue 

    -

     

    -

            """ 

    -

            for node in self.nodes: 

    -

                if value_id in self.nodes[node].values: 

    -

                    return self.nodes[node].values[value_id] 

    -

            return None 

    +

            """ 

    +

            if self.network.state < self.network.STATE_AWAKED: 

    +

                logger.warning('Network state must a minimum set to awake') 

    +

                return False 

    +

            self.manager.healNetwork(self.home_id, upNodeRoute) 

    +

            return True 

    +

     

    +

        def get_value(self, value_id): 

    +

            """ 

    +

            Retrieve a value on the network. 

     

    -

        @property 

    -

        def id_separator(self): 

    -

            """ 

    -

            The separator in id representation. 

    -

     

    -

            :rtype: char 

    +

            Check every nodes to see if it holds the value 

    +

     

    +

            :param value_id: The id of the value to find 

    +

            :type value_id: int 

    +

            :return: The value or None 

    +

            :rtype: ZWaveValue 

     

            """ 

    -

            return self._id_separator 

    -

     

    -

        @id_separator.setter 

    -

        def id_separator(self, value): 

    -

            """ 

    -

            The nodes of the network. 

    -

     

    -

            :param value: The new separator 

    -

            :type value: char 

    +

            for node in self.nodes: 

    +

                if value_id in self.nodes[node].values: 

    +

                    return self.nodes[node].values[value_id] 

    +

            return None 

    +

     

    +

        @property 

    +

        def id_separator(self): 

    +

            """ 

    +

            The separator in id representation. 

     

    -

            """ 

    -

            self._id_separator = value 

    -

     

    -

        def get_value_from_id_on_network(self, id_on_network): 

    -

            """ 

    -

            Retrieve a value on the network from it's id_on_network. 

    -

     

    -

            Check every nodes to see if it holds the value 

    -

     

    -

            :param id_on_network: The id_on_network of the value to find 

    -

            :type id_on_network: str 

    -

            :return: The value or None 

    -

            :rtype: ZWaveValue 

    -

     

    -

            """ 

    -

            for node in self.nodes.itervalues(): 

    -

                for val in node.values.itervalues(): 

    -

                    if val.id_on_network == id_on_network: 

    -

                        return val 

    -

            return None 

    -

     

    -

        def get_scenes(self): 

    -

            """ 

    -

            The scenes of the network. 

    -

     

    -

            Scenes are generated directly from the lib. There is no notification 

    -

            support to keep them up to date. So for a batch job, consider 

    -

            storing them in a local variable. 

    -

     

    -

            :return: return a dict() (that can be empty) of scene object. Return None if betwork is not ready 

    -

            :rtype: dict() or None 

    -

     

    -

            """ 

    -

            if self.state < self.STATE_AWAKED: 

    -

                return None 

    -

            else: 

    -

                return self._load_scenes() 

    +

            :rtype: char 

    +

     

    +

            """ 

    +

            return self._id_separator 

    +

     

    +

        @id_separator.setter 

    +

        def id_separator(self, value): 

    +

            """ 

    +

            The nodes of the network. 

    +

     

    +

            :param value: The new separator 

    +

            :type value: char 

    +

     

    +

            """ 

    +

            self._id_separator = value 

    +

     

    +

        def get_value_from_id_on_network(self, id_on_network): 

    +

            """ 

    +

            Retrieve a value on the network from it's id_on_network. 

    +

     

    +

            Check every nodes to see if it holds the value 

    +

     

    +

            :param id_on_network: The id_on_network of the value to find 

    +

            :type id_on_network: str 

    +

            :return: The value or None 

    +

            :rtype: ZWaveValue 

    +

     

    +

            """ 

    +

            for node in self.nodes.itervalues(): 

    +

                for val in node.values.itervalues(): 

    +

                    if val.id_on_network == id_on_network: 

    +

                        return val 

    +

            return None 

    +

     

    +

        def get_scenes(self): 

    +

            """ 

    +

            The scenes of the network. 

     

    -

        def scenes_to_dict(self, kvals=True): 

    -

            """ 

    -

            Return a JSONifiable dict representation of the scenes. 

    +

            Scenes are generated directly from the lib. There is no notification 

    +

            support to keep them up to date. So for a batch job, consider 

    +

            storing them in a local variable. 

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            scenes = self.get_scenes() 

    -

            for scnid in scenes.keys(): 

    -

                ret[scnid] = scenes[scnid].to_dict(kvals=kvals) 

    -

            return ret 

    +

            :return: return a dict() (that can be empty) of scene object. Return None if betwork is not ready 

    +

            :rtype: dict() or None 

    +

     

    +

            """ 

    +

            if self.state < self.STATE_AWAKED: 

    +

                return None 

    +

            else: 

    +

                return self._load_scenes() 

     

    -

        def _load_scenes(self): 

    +

        def scenes_to_dict(self, extras=['all']): 

            """ 

    -

            Load the scenes of the network. 

    +

            Return a JSONifiable dict representation of the scenes. 

     

    -

            :return: return a dict() (that can be empty) of scene object. 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret = {} 

    -

            set_scenes = self._manager.getAllScenes() 

    -

            logger.debug('Load Scenes: %s', set_scenes) 

    -

            for scene_id in set_scenes: 

    -

                scene = ZWaveScene(scene_id, network=self) 

    -

                ret[scene_id] = scene 

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret={} 

    +

            scenes = self.get_scenes() 

    +

            for scnid in scenes.keys(): 

    +

                ret[scnid] = scenes[scnid].to_dict(extras=extras) 

            return ret 

     

    -

        def create_scene(self, label=None): 

    +

        def _load_scenes(self): 

            """ 

    -

            Create a new scene on the network. 

    -

            If label is set, also change the label of the scene 

    -

     

    -

            If you store your scenes on a local variable, get a new one 

    -

            to get the scene id 

    -

     

    -

            :param label: The new label 

    -

            :type label: str or None 

    -

            :return: return the id of scene on the network. Return 0 if fails 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            scene = ZWaveScene(None, network=self) 

    -

            return scene.create(label) 

    -

     

    -

        def scene_exists(self, scene_id): 

    -

            """ 

    -

            Check that the scene exists 

    +

            Load the scenes of the network. 

    +

     

    +

            :return: return a dict() (that can be empty) of scene object. 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret = {} 

    +

            set_scenes = self._manager.getAllScenes() 

    +

            logger.debug('Load Scenes: %s', set_scenes) 

    +

            for scene_id in set_scenes: 

    +

                scene = ZWaveScene(scene_id, network=self) 

    +

                ret[scene_id] = scene 

    +

            return ret 

    +

     

    +

        def create_scene(self, label=None): 

    +

            """ 

    +

            Create a new scene on the network. 

    +

            If label is set, also change the label of the scene 

     

    -

            :param scene_id: The id of the scene to check 

    -

            :type scene_id: int 

    -

            :return: True if the scene exist. False in other cases 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.sceneExists(scene_id) 

    +

            If you store your scenes on a local variable, get a new one 

    +

            to get the scene id 

    +

     

    +

            :param label: The new label 

    +

            :type label: str or None 

    +

            :return: return the id of scene on the network. Return 0 if fails 

    +

            :rtype: int 

     

    -

        @property 

    -

        def scenes_count(self): 

    -

            """ 

    -

            Return the number of scenes 

    -

     

    -

            :return: The number of scenes 

    -

            :rtype: int 

    +

            """ 

    +

            scene = ZWaveScene(None, network=self) 

    +

            return scene.create(label) 

    +

     

    +

        def scene_exists(self, scene_id): 

    +

            """ 

    +

            Check that the scene exists 

     

    -

            """ 

    -

            return self._network.manager.getNumScenes() 

    -

     

    -

        def remove_scene(self, scene_id): 

    -

            """ 

    -

            Delete the scene on the network. 

    -

     

    -

            :param scene_id: The id of the scene to check 

    -

            :type scene_id: int 

    -

            :return: True if the scene was removed. False in other cases 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.removeScene(scene_id) 

    -

     

    -

        @property 

    -

        def nodes_count(self): 

    -

            """ 

    -

            The nodes count of the network. 

    -

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return len(self.nodes) 

    -

     

    -

        @property 

    -

        def sleeping_nodes_count(self): 

    -

            """ 

    -

            The count of sleeping nodes on the network. 

    -

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            result = 0 

    -

            for node in self.nodes: 

    -

                if node.is_sleeping: 

    -

                    result += 1 

    -

            return result 

    -

     

    -

        def get_poll_interval(self): 

    -

            """ 

    -

            Get the time period between polls of a nodes state 

    -

     

    -

            :return: The number of milliseconds between polls 

    -

            :rtype: int 

    +

            :param scene_id: The id of the scene to check 

    +

            :type scene_id: int 

    +

            :return: True if the scene exist. False in other cases 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.sceneExists(scene_id) 

    +

     

    +

        @property 

    +

        def scenes_count(self): 

    +

            """ 

    +

            Return the number of scenes 

    +

     

    +

            :return: The number of scenes 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNumScenes() 

    +

     

    +

        def remove_scene(self, scene_id): 

    +

            """ 

    +

            Delete the scene on the network. 

    +

     

    +

            :param scene_id: The id of the scene to check 

    +

            :type scene_id: int 

    +

            :return: True if the scene was removed. False in other cases 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.removeScene(scene_id) 

    +

     

    +

        @property 

    +

        def nodes_count(self): 

    +

            """ 

    +

            The nodes count of the network. 

    +

     

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return len(self.nodes) 

    +

     

    +

        @property 

    +

        def sleeping_nodes_count(self): 

    +

            """ 

    +

            The count of sleeping nodes on the network. 

     

    -

            """ 

    -

            return self.manager.getPollInterval() 

    -

     

    -

        def set_poll_interval(self, milliseconds=500, bIntervalBetweenPolls=True): 

    -

            """ 

    -

            Set the time period between polls of a nodes state. 

    -

     

    -

            Due to patent concerns, some devices do not report state changes automatically 

    -

            to the controller.  These devices need to have their state polled at regular 

    -

            intervals.  The length of the interval is the same for all devices.  To even 

    -

            out the Z-Wave network traffic generated by polling, OpenZWave divides the 

    -

            polling interval by the number of devices that have polling enabled, and polls 

    -

            each in turn.  It is recommended that if possible, the interval should not be 

    -

            set shorter than the number of polled devices in seconds (so that the network 

    -

            does not have to cope with more than one poll per second). 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            result = 0 

    +

            for node in self.nodes: 

    +

                if node.is_sleeping: 

    +

                    result += 1 

    +

            return result 

    +

     

    +

        def get_poll_interval(self): 

    +

            """ 

    +

            Get the time period between polls of a nodes state 

    +

     

    +

            :return: The number of milliseconds between polls 

    +

            :rtype: int 

     

    -

            :param milliseconds: The length of the polling interval in milliseconds. 

    -

            :type milliseconds: int 

    -

            :param bIntervalBetweenPolls: If set to true (via SetPollInterval), the pollInterval will be interspersed between each poll (so a much smaller m_pollInterval like 100, 500, or 1,000 may be appropriate). If false, the library attempts to complete all polls within m_pollInterval. 

    -

            :type bIntervalBetweenPolls: bool 

    -

     

    -

            """ 

    -

            self.manager.setPollInterval(milliseconds, bIntervalBetweenPolls) 

    -

     

    -

        def zwcallback(self, args): 

    -

            """ 

    -

            The Callback Handler used with the libopenzwave. 

    -

     

    -

            n['valueId'] = { 

    -

     

    -

                * 'home_id' : v.GetHomeId(), 

    -

                * 'node_id' : v.GetNodeId(), 

    -

                * 'commandClass' : PyManager.COMMAND_CLASS_DESC[v.GetCommandClassId()], 

    -

                * 'instance' : v.GetInstance(), 

    -

                * 'index' : v.GetIndex(), 

    -

                * 'id' : v.GetId(), 

    -

                * 'genre' : PyGenres[v.GetGenre()], 

    -

                * 'type' : PyValueTypes[v.GetType()], 

    -

                * #'value' : value.c_str(), 

    -

                * 'value' : getValueFromType(manager,v.GetId()), 

    -

                * 'label' : label.c_str(), 

    -

                * 'units' : units.c_str(), 

    -

                * 'readOnly': manager.IsValueReadOnly(v) 

    +

            """ 

    +

            return self.manager.getPollInterval() 

    +

     

    +

        def set_poll_interval(self, milliseconds=500, bIntervalBetweenPolls=True): 

    +

            """ 

    +

            Set the time period between polls of a nodes state. 

    +

     

    +

            Due to patent concerns, some devices do not report state changes automatically 

    +

            to the controller.  These devices need to have their state polled at regular 

    +

            intervals.  The length of the interval is the same for all devices.  To even 

    +

            out the Z-Wave network traffic generated by polling, OpenZWave divides the 

    +

            polling interval by the number of devices that have polling enabled, and polls 

    +

            each in turn.  It is recommended that if possible, the interval should not be 

    +

            set shorter than the number of polled devices in seconds (so that the network 

    +

            does not have to cope with more than one poll per second). 

    +

     

    +

            :param milliseconds: The length of the polling interval in milliseconds. 

    +

            :type milliseconds: int 

    +

            :param bIntervalBetweenPolls: If set to true (via SetPollInterval), the pollInterval will be interspersed between each poll (so a much smaller m_pollInterval like 100, 500, or 1,000 may be appropriate). If false, the library attempts to complete all polls within m_pollInterval. 

    +

            :type bIntervalBetweenPolls: bool 

    +

     

    +

            """ 

    +

            self.manager.setPollInterval(milliseconds, bIntervalBetweenPolls) 

    +

     

    +

        def zwcallback(self, args): 

    +

            """ 

    +

            The Callback Handler used with the libopenzwave. 

     

    -

            } 

    +

            n['valueId'] = { 

     

    -

            :param args: A dict containing informations about the state of the controller 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('zwcallback args=[%s]', args) 

    -

            try: 

    -

                notify_type = args['notificationType'] 

    -

                if notify_type == self.SIGNAL_DRIVER_FAILED: 

    -

                    self._handle_driver_failed(args) 

    -

                elif notify_type == self.SIGNAL_DRIVER_READY: 

    -

                    self._handle_driver_ready(args) 

    -

                elif notify_type == self.SIGNAL_DRIVER_RESET: 

    -

                    self._handle_driver_reset(args) 

    -

                elif notify_type == self.SIGNAL_NODE_ADDED: 

    -

                    self._handle_node_added(args) 

    -

                elif notify_type == self.SIGNAL_NODE_EVENT: 

    -

                    self._handle_node_event(args) 

    -

                elif notify_type == self.SIGNAL_NODE_NAMING: 

    -

                    self._handle_node_naming(args) 

    -

                elif notify_type == self.SIGNAL_NODE_NEW: 

    -

                    self._handle_node_new(args) 

    -

                elif notify_type == self.SIGNAL_NODE_PROTOCOL_INFO: 

    -

                    self._handle_node_protocol_info(args) 

    -

                elif notify_type == self.SIGNAL_NODE_READY: 

    -

                    self._handleNodeReady(args) 

    -

                elif notify_type == self.SIGNAL_NODE_REMOVED: 

    -

                    self._handle_node_removed(args) 

    -

                elif notify_type == self.SIGNAL_GROUP: 

    -

                    self._handle_group(args) 

    -

                elif notify_type == self.SIGNAL_SCENE_EVENT: 

    -

                    self._handle_scene_event(args) 

    -

                elif notify_type == self.SIGNAL_VALUE_ADDED: 

    -

                    self._handle_value_added(args) 

    -

                elif notify_type == self.SIGNAL_VALUE_CHANGED: 

    -

                    self._handle_value_changed(args) 

    -

                elif notify_type == self.SIGNAL_VALUE_REFRESHED: 

    -

                    self._handle_value_refreshed(args) 

    -

                elif notify_type == self.SIGNAL_VALUE_REMOVED: 

    -

                    self._handle_value_removed(args) 

    -

                elif notify_type == self.SIGNAL_POLLING_DISABLED: 

    -

                    self._handle_polling_disabled(args) 

    -

                elif notify_type == self.SIGNAL_POLLING_ENABLED: 

    -

                    self._handle_polling_enabled(args) 

    -

                elif notify_type == self.SIGNAL_CREATE_BUTTON: 

    -

                    self._handle_create_button(args) 

    -

                elif notify_type == self.SIGNAL_DELETE_BUTTON: 

    -

                    self._handle_delete_button(args) 

    -

                elif notify_type == self.SIGNAL_BUTTON_ON: 

    -

                    self._handle_button_on(args) 

    -

                elif notify_type == self.SIGNAL_BUTTON_OFF: 

    -

                    self._handle_button_off(args) 

    -

                elif notify_type == self.SIGNAL_ALL_NODES_QUERIED: 

    -

                    self._handle_all_nodes_queried(args) 

    -

                elif notify_type == self.SIGNAL_ALL_NODES_QUERIED_SOME_DEAD: 

    -

                    self._handle_all_nodes_queried_some_dead(args) 

    -

                elif notify_type == self.SIGNAL_AWAKE_NODES_QUERIED: 

    -

                    self._handle_awake_nodes_queried(args) 

    -

                elif notify_type == self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE: 

    -

                    self._handle_essential_node_queries_complete(args) 

    -

                elif notify_type == self.SIGNAL_NODE_QUERIES_COMPLETE: 

    -

                    self._handle_node_queries_complete(args) 

    -

                elif notify_type == self.SIGNAL_MSG_COMPLETE: 

    -

                    self._handle_msg_complete(args) 

    -

                elif notify_type == self.SIGNAL_NOTIFICATION: 

    -

                    self._handle_notification(args) 

    -

                elif notify_type == self.SIGNAL_DRIVER_REMOVED: 

    -

                    self._handle_driver_removed(args) 

    -

                else: 

    -

                    logger.warning('Skipping unhandled notification [%s]', args) 

    -

            except: 

    -

                import sys, traceback 

    -

                logger.error('Error in manager callback : %s', traceback.format_exception(*sys.exc_info())) 

    -

     

    -

        def _handle_driver_failed(self, args): 

    -

            """ 

    -

            Driver failed to load. 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_FAILED, **{'network': self}) 

    -

     

    -

            """ 

    -

            logger.warning('Z-Wave Notification DriverFailed : %s', args) 

    -

            self._manager = None 

    -

            self._controller = None 

    -

            self.nodes = None 

    -

            self._state = self.STATE_FAILED 

    -

            dispatcher.send(self.SIGNAL_DRIVER_FAILED, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_NETWORK_FAILED, **{'network': self}) 

    -

     

    -

        def _handle_driver_ready(self, args): 

    -

            """ 

    -

            A driver for a PC Z-Wave controller has been added and is ready to use. 

    -

            The notification will contain the controller's Home ID, 

    -

            which is needed to call most of the Manager methods. 

    -

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_STARTED, **{'network': self, 'controller': self._controller}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification DriverReady : %s', args) 

    -

            self._object_id = args['homeId'] 

    -

            try: 

    -

                controller_node = ZWaveNode(args['nodeId'], network=self) 

    -

                self._semaphore_nodes.acquire() 

    -

                self.nodes = None 

    -

                self.nodes[args['nodeId']] = controller_node 

    -

                self._controller.node = self.nodes[args['nodeId']] 

    -

                logger.info('Driver ready using library %s', self._controller.library_description) 

    -

                logger.info('home_id 0x%0.8x, controller node id is %d', self.home_id, self._controller.node_id) 

    -

                logger.debug('Network %s', self) 

    -

                dispatcher.send(self.SIGNAL_DRIVER_READY, \ 

    -

                    **{'network': self, 'controller': self._controller}) 

    -

                self._state = self.STATE_STARTED 

    -

                dispatcher.send(self.SIGNAL_NETWORK_STARTED, \ 

    -

                    **{'network': self}) 

    -

                ctrl_state = libopenzwave.PyControllerState[0] 

    -

                ctrl_message = libopenzwave.PyControllerState[0].doc 

    -

                dispatcher.send(self.controller.SIGNAL_CONTROLLER, \ 

    -

                    **{'state': ctrl_state, 'message': ctrl_message, 'network': self, 'controller': self.controller}) 

    -

            except: 

    -

                import sys, traceback 

    -

                logger.error('Z-Wave Notification DriverReady : %s', traceback.format_exception(*sys.exc_info())) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    -

     

    -

        def _handle_driver_reset(self, args): 

    -

            """ 

    -

            This notification is never fired. 

    -

     

    -

            Look at 

    -

                and 

    -

     

    -

            All nodes and values for this driver have been removed. 

    -

            This is sent instead of potentially hundreds of individual node 

    -

            and value notifications. 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification DriverReset : %s', args) 

    -

            try: 

    -

                self._semaphore_nodes.acquire() 

    -

                logger.debug('DriverReset received. Remove all nodes') 

    -

                #self.nodes = None 

    -

                #self._state = self.STATE_RESETTED 

    -

                dispatcher.send(self.SIGNAL_DRIVER_RESET, \ 

    -

                    **{'network': self}) 

    -

                dispatcher.send(self.SIGNAL_NETWORK_RESETTED, \ 

    -

                    **{'network': self}) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    -

     

    -

        def _handle_driver_removed(self, args): 

    -

            """ 

    -

            The Driver is being removed. (either due to Error or by request) 

    -

            Do Not Call Any Driver Related Methods after receiving this 

    -

     

    -

            dispatcher.send(self.SIGNAL_DRIVER_REMOVED, **{'network': self}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification DriverRemoved : %s', args) 

    -

            try: 

    -

                self._semaphore_nodes.acquire() 

    -

                self._state = self.STATE_STOPPED 

    -

                dispatcher.send(self.SIGNAL_DRIVER_REMOVED, \ 

    -

                    **{'network': self}) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    -

     

    -

        def _handle_group(self, args): 

    -

            """ 

    -

            The associations for the node have changed. 

    -

            The application should rebuild any group information 

    -

            it holds about the node. 

    +

                * 'home_id' : v.GetHomeId(), 

    +

                * 'node_id' : v.GetNodeId(), 

    +

                * 'commandClass' : PyManager.COMMAND_CLASS_DESC[v.GetCommandClassId()], 

    +

                * 'instance' : v.GetInstance(), 

    +

                * 'index' : v.GetIndex(), 

    +

                * 'id' : v.GetId(), 

    +

                * 'genre' : PyGenres[v.GetGenre()], 

    +

                * 'type' : PyValueTypes[v.GetType()], 

    +

                * #'value' : value.c_str(), 

    +

                * 'value' : getValueFromType(manager,v.GetId()), 

    +

                * 'label' : label.c_str(), 

    +

                * 'units' : units.c_str(), 

    +

                * 'readOnly': manager.IsValueReadOnly(v) 

    +

     

    +

            } 

    +

     

    +

            :param args: A dict containing informations about the state of the controller 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('zwcallback args=[%s]', args) 

    +

            try: 

    +

                notify_type = args['notificationType'] 

    +

                if notify_type == self.SIGNAL_DRIVER_FAILED: 

    +

                    self._handle_driver_failed(args) 

    +

                elif notify_type == self.SIGNAL_DRIVER_READY: 

    +

                    self._handle_driver_ready(args) 

    +

                elif notify_type == self.SIGNAL_DRIVER_RESET: 

    +

                    self._handle_driver_reset(args) 

    +

                elif notify_type == self.SIGNAL_NODE_ADDED: 

    +

                    self._handle_node_added(args) 

    +

                elif notify_type == self.SIGNAL_NODE_EVENT: 

    +

                    self._handle_node_event(args) 

    +

                elif notify_type == self.SIGNAL_NODE_NAMING: 

    +

                    self._handle_node_naming(args) 

    +

                elif notify_type == self.SIGNAL_NODE_NEW: 

    +

                    self._handle_node_new(args) 

    +

                elif notify_type == self.SIGNAL_NODE_PROTOCOL_INFO: 

    +

                    self._handle_node_protocol_info(args) 

    +

                elif notify_type == self.SIGNAL_NODE_READY: 

    +

                    self._handleNodeReady(args) 

    +

                elif notify_type == self.SIGNAL_NODE_REMOVED: 

    +

                    self._handle_node_removed(args) 

    +

                elif notify_type == self.SIGNAL_GROUP: 

    +

                    self._handle_group(args) 

    +

                elif notify_type == self.SIGNAL_SCENE_EVENT: 

    +

                    self._handle_scene_event(args) 

    +

                elif notify_type == self.SIGNAL_VALUE_ADDED: 

    +

                    self._handle_value_added(args) 

    +

                elif notify_type == self.SIGNAL_VALUE_CHANGED: 

    +

                    self._handle_value_changed(args) 

    +

                elif notify_type == self.SIGNAL_VALUE_REFRESHED: 

    +

                    self._handle_value_refreshed(args) 

    +

                elif notify_type == self.SIGNAL_VALUE_REMOVED: 

    +

                    self._handle_value_removed(args) 

    +

                elif notify_type == self.SIGNAL_POLLING_DISABLED: 

    +

                    self._handle_polling_disabled(args) 

    +

                elif notify_type == self.SIGNAL_POLLING_ENABLED: 

    +

                    self._handle_polling_enabled(args) 

    +

                elif notify_type == self.SIGNAL_CREATE_BUTTON: 

    +

                    self._handle_create_button(args) 

    +

                elif notify_type == self.SIGNAL_DELETE_BUTTON: 

    +

                    self._handle_delete_button(args) 

    +

                elif notify_type == self.SIGNAL_BUTTON_ON: 

    +

                    self._handle_button_on(args) 

    +

                elif notify_type == self.SIGNAL_BUTTON_OFF: 

    +

                    self._handle_button_off(args) 

    +

                elif notify_type == self.SIGNAL_ALL_NODES_QUERIED: 

    +

                    self._handle_all_nodes_queried(args) 

    +

                elif notify_type == self.SIGNAL_ALL_NODES_QUERIED_SOME_DEAD: 

    +

                    self._handle_all_nodes_queried_some_dead(args) 

    +

                elif notify_type == self.SIGNAL_AWAKE_NODES_QUERIED: 

    +

                    self._handle_awake_nodes_queried(args) 

    +

                elif notify_type == self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE: 

    +

                    self._handle_essential_node_queries_complete(args) 

    +

                elif notify_type == self.SIGNAL_NODE_QUERIES_COMPLETE: 

    +

                    self._handle_node_queries_complete(args) 

    +

                elif notify_type == self.SIGNAL_MSG_COMPLETE: 

    +

                    self._handle_msg_complete(args) 

    +

                elif notify_type == self.SIGNAL_NOTIFICATION: 

    +

                    self._handle_notification(args) 

    +

                elif notify_type == self.SIGNAL_DRIVER_REMOVED: 

    +

                    self._handle_driver_removed(args) 

    +

                else: 

    +

                    logger.warning('Skipping unhandled notification [%s]', args) 

    +

            except: 

    +

                import sys, traceback 

    +

                logger.error('Error in manager callback : %s', traceback.format_exception(*sys.exc_info())) 

    +

     

    +

        def _handle_driver_failed(self, args): 

    +

            """ 

    +

            Driver failed to load. 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_FAILED, **{'network': self}) 

    +

     

    +

            """ 

    +

            logger.warning('Z-Wave Notification DriverFailed : %s', args) 

    +

            self._manager = None 

    +

            self._controller = None 

    +

            self.nodes = None 

    +

            self._state = self.STATE_FAILED 

    +

            dispatcher.send(self.SIGNAL_DRIVER_FAILED, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_NETWORK_FAILED, **{'network': self}) 

    +

     

    +

        def _handle_driver_ready(self, args): 

    +

            """ 

    +

            A driver for a PC Z-Wave controller has been added and is ready to use. 

    +

            The notification will contain the controller's Home ID, 

    +

            which is needed to call most of the Manager methods. 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_STARTED, **{'network': self, 'controller': self._controller}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification DriverReady : %s', args) 

    +

            self._object_id = args['homeId'] 

    +

            try: 

    +

                controller_node = ZWaveNode(args['nodeId'], network=self) 

    +

                self._semaphore_nodes.acquire() 

    +

                self.nodes = None 

    +

                self.nodes[args['nodeId']] = controller_node 

    +

                self._controller.node = self.nodes[args['nodeId']] 

    +

                logger.info('Driver ready using library %s', self._controller.library_description) 

    +

                logger.info('home_id 0x%0.8x, controller node id is %d', self.home_id, self._controller.node_id) 

    +

                logger.debug('Network %s', self) 

    +

                dispatcher.send(self.SIGNAL_DRIVER_READY, \ 

    +

                    **{'network': self, 'controller': self._controller}) 

    +

                self._state = self.STATE_STARTED 

    +

                dispatcher.send(self.SIGNAL_NETWORK_STARTED, \ 

    +

                    **{'network': self}) 

    +

                ctrl_state = libopenzwave.PyControllerState[0] 

    +

                ctrl_message = libopenzwave.PyControllerState[0].doc 

    +

                dispatcher.send(self.controller.SIGNAL_CONTROLLER, \ 

    +

                    **{'state': ctrl_state, 'message': ctrl_message, 'network': self, 'controller': self.controller}) 

    +

            except: 

    +

                import sys, traceback 

    +

                logger.error('Z-Wave Notification DriverReady : %s', traceback.format_exception(*sys.exc_info())) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

    +

     

    +

        def _handle_driver_reset(self, args): 

    +

            """ 

    +

            This notification is never fired. 

    +

     

    +

            Look at 

    +

                and 

    +

     

    +

            All nodes and values for this driver have been removed. 

    +

            This is sent instead of potentially hundreds of individual node 

    +

            and value notifications. 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification DriverReset : %s', args) 

    +

            try: 

    +

                self._semaphore_nodes.acquire() 

    +

                logger.debug('DriverReset received. Remove all nodes') 

    +

                #self.nodes = None 

    +

                #self._state = self.STATE_RESETTED 

    +

                dispatcher.send(self.SIGNAL_DRIVER_RESET, \ 

    +

                    **{'network': self}) 

    +

                dispatcher.send(self.SIGNAL_NETWORK_RESETTED, \ 

    +

                    **{'network': self}) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

    +

     

    +

        def _handle_driver_removed(self, args): 

    +

            """ 

    +

            The Driver is being removed. (either due to Error or by request) 

    +

            Do Not Call Any Driver Related Methods after receiving this 

    +

     

    +

            dispatcher.send(self.SIGNAL_DRIVER_REMOVED, **{'network': self}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

     

    -

            dispatcher.send(self.SIGNAL_GROUP, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification Group : %s', args) 

    -

            dispatcher.send(self.SIGNAL_GROUP, \ 

    -

                    **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            """ 

    +

            logger.debug('Z-Wave Notification DriverRemoved : %s', args) 

    +

            try: 

    +

                self._semaphore_nodes.acquire() 

    +

                self._state = self.STATE_STOPPED 

    +

                dispatcher.send(self.SIGNAL_DRIVER_REMOVED, \ 

    +

                    **{'network': self}) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

     

    -

        def _handle_node(self, node): 

    +

        def _handle_group(self, args): 

            """ 

    -

            Sent when a node is changed, added, removed, ... 

    -

            If you don't interest in nodes event details you can listen to this 

    -

            signal only. 

    +

            The associations for the node have changed. 

    +

            The application should rebuild any group information 

    +

            it holds about the node. 

     

    -

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_GROUP, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

     

    -

            :param node: the node 

    -

            :type node: ZWaveNode 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

     

            """ 

    -

            logger.debug('Z-Wave Notification Node : %s', node) 

    -

            dispatcher.send(self.SIGNAL_NODE, \ 

    -

                    **{'network': self, 'node':node}) 

    +

            logger.debug('Z-Wave Notification Group : %s', args) 

    +

            dispatcher.send(self.SIGNAL_GROUP, \ 

    +

                    **{'network': self, 'node': self.nodes[args['nodeId']]}) 

     

    -

        def _handle_node_added(self, args): 

    +

        def _handle_node(self, node): 

            """ 

    -

            A new node has been added to OpenZWave's set. 

    -

            This may be due to a device being added to the Z-Wave network, 

    -

            or because the application is initializing itself. 

    +

            Sent when a node is changed, added, removed, ... 

    +

            If you don't interest in nodes event details you can listen to this 

    +

            signal only. 

     

    -

            dispatcher.send(self.SIGNAL_NODE_ADDED, **{'network': self, 'node': node}) 

    -

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeAdded : %s', args) 

    -

            try: 

    -

                node = ZWaveNode(args['nodeId'], network=self) 

    -

                self._semaphore_nodes.acquire() 

    -

                self.nodes[args['nodeId']] = node 

    -

                dispatcher.send(self.SIGNAL_NODE_ADDED, \ 

    -

                    **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

                self._handle_node(self.nodes[args['nodeId']]) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    -

     

    -

        def _handle_scene_event(self, args): 

    -

            """ 

    -

            Scene Activation Set received 

    +

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    +

     

    +

            :param node: the node 

    +

            :type node: ZWaveNode 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification Node : %s', node) 

    +

            dispatcher.send(self.SIGNAL_NODE, \ 

    +

                    **{'network': self, 'node':node}) 

    +

     

    +

        def _handle_node_added(self, args): 

    +

            """ 

    +

            A new node has been added to OpenZWave's set. 

    +

            This may be due to a device being added to the Z-Wave network, 

    +

            or because the application is initializing itself. 

    +

     

    +

            dispatcher.send(self.SIGNAL_NODE_ADDED, **{'network': self, 'node': node}) 

    +

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

     

    -

            Not implemented 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification SceneEvent : %s', args) 

    -

            dispatcher.send(self.SIGNAL_SCENE_EVENT, \ 

    -

                **{'network': self, 'node': self.nodes[args['nodeId']], 

    -

                   'scene_id': args['sceneId']}) 

    -

     

    -

        def _handle_node_event(self, args): 

    -

            """ 

    -

            A node has triggered an event.  This is commonly caused when a 

    -

            node sends a Basic_Set command to the controller. 

    -

            The event value is stored in the notification. 

    -

     

    -

            dispatcher.send(self.SIGNAL_NODE_EVENT, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeEvent : %s', args) 

    -

            dispatcher.send(self.SIGNAL_NODE_EVENT, 

    -

                            **{'network': self, 'node': self.nodes[args['nodeId']], 'value': args['event']}) 

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeAdded : %s', args) 

    +

            try: 

    +

                node = ZWaveNode(args['nodeId'], network=self) 

    +

                self._semaphore_nodes.acquire() 

    +

                self.nodes[args['nodeId']] = node 

    +

                dispatcher.send(self.SIGNAL_NODE_ADDED, \ 

    +

                    **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

                self._handle_node(self.nodes[args['nodeId']]) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

    +

     

    +

        def _handle_scene_event(self, args): 

    +

            """ 

    +

            Scene Activation Set received 

    +

     

    +

            Not implemented 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification SceneEvent : %s', args) 

    +

            dispatcher.send(self.SIGNAL_SCENE_EVENT, \ 

    +

                **{'network': self, 'node': self.nodes[args['nodeId']], 

    +

                   'scene_id': args['sceneId']}) 

     

    -

        def _handle_node_naming(self, args): 

    +

        def _handle_node_event(self, args): 

            """ 

    -

            One of the node names has changed (name, manufacturer, product). 

    -

     

    -

            dispatcher.send(self.SIGNAL_NODE_NAMING, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeNaming : %s', args) 

    -

            dispatcher.send(self.SIGNAL_NODE_NAMING, \ 

    -

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

            self._handle_node(self.nodes[args['nodeId']]) 

    +

            A node has triggered an event.  This is commonly caused when a 

    +

            node sends a Basic_Set command to the controller. 

    +

            The event value is stored in the notification. 

    +

     

    +

            dispatcher.send(self.SIGNAL_NODE_EVENT, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeEvent : %s', args) 

    +

            dispatcher.send(self.SIGNAL_NODE_EVENT, 

    +

                            **{'network': self, 'node': self.nodes[args['nodeId']], 'value': args['event']}) 

     

    -

        def _handle_node_new(self, args): 

    +

        def _handle_node_naming(self, args): 

            """ 

    -

            A new node has been found (not already stored in zwcfg*.xml file). 

    +

            One of the node names has changed (name, manufacturer, product). 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    +

            dispatcher.send(self.SIGNAL_NODE_NAMING, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeNew : %s', args) 

    -

            dispatcher.send(self.SIGNAL_NODE_NEW, \ 

    -

                **{'network': self, 'node_id': args['nodeId']}) 

    -

     

    -

        def _handle_node_protocol_info(self, args): 

    -

            """ 

    -

            Basic node information has been received, such as whether 

    -

            the node is a listening device, a routing device and its baud rate 

    -

            and basic, generic and specific types. 

    -

            It is after this notification that you can call Manager::GetNodeType 

    -

            to obtain a label containing the device description. 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeNaming : %s', args) 

    +

            dispatcher.send(self.SIGNAL_NODE_NAMING, \ 

    +

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            self._handle_node(self.nodes[args['nodeId']]) 

    +

     

    +

        def _handle_node_new(self, args): 

    +

            """ 

    +

            A new node has been found (not already stored in zwcfg*.xml file). 

     

            :param args: data sent by the notification 

            :type args: dict() 

     

            """ 

    -

            logger.debug('Z-Wave Notification NodeProtocolInfo : %s', args) 

    -

            dispatcher.send(self.SIGNAL_NODE_PROTOCOL_INFO, \ 

    -

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

            self._handle_node(self.nodes[args['nodeId']]) 

    -

     

    -

        def _handle_node_removed(self, args): 

    -

            """ 

    -

            A node has been removed from OpenZWave's set. 

    -

            This may be due to a device being removed from the Z-Wave network, 

    -

            or because the application is closing. 

    -

     

    -

            dispatcher.send(self.SIGNAL_NODE_REMOVED, **{'network': self, 'node_id': args['nodeId']}) 

    -

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeRemoved : %s', args) 

    -

            try: 

    -

                self._semaphore_nodes.acquire() 

    -

                if args['nodeId'] in self.nodes: 

    -

                    node = self.nodes[args['nodeId']] 

    -

                    del self.nodes[args['nodeId']] 

    -

                    dispatcher.send(self.SIGNAL_NODE_REMOVED, \ 

    -

                        **{'network': self, 'node': node}) 

    -

                    self._handle_node(node) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    +

            logger.debug('Z-Wave Notification NodeNew : %s', args) 

    +

            dispatcher.send(self.SIGNAL_NODE_NEW, \ 

    +

                **{'network': self, 'node_id': args['nodeId']}) 

    +

     

    +

        def _handle_node_protocol_info(self, args): 

    +

            """ 

    +

            Basic node information has been received, such as whether 

    +

            the node is a listening device, a routing device and its baud rate 

    +

            and basic, generic and specific types. 

    +

            It is after this notification that you can call Manager::GetNodeType 

    +

            to obtain a label containing the device description. 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeProtocolInfo : %s', args) 

    +

            dispatcher.send(self.SIGNAL_NODE_PROTOCOL_INFO, \ 

    +

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            self._handle_node(self.nodes[args['nodeId']]) 

    +

     

    +

        def _handle_node_removed(self, args): 

    +

            """ 

    +

            A node has been removed from OpenZWave's set. 

    +

            This may be due to a device being removed from the Z-Wave network, 

    +

            or because the application is closing. 

    +

     

    +

            dispatcher.send(self.SIGNAL_NODE_REMOVED, **{'network': self, 'node_id': args['nodeId']}) 

    +

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

     

    -

        def _handle_essential_node_queries_complete(self, args): 

    -

            """ 

    -

            The queries on a node that are essential to its operation have 

    -

            been completed. The node can now handle incoming messages. 

    -

     

    -

            dispatcher.send(self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification EssentialNodeQueriesComplete : %s', args) 

    -

            dispatcher.send(self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE, \ 

    -

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_node_queries_complete(self, args): 

    -

            """ 

    -

            All the initialisation queries on a node have been completed. 

    -

     

    -

            dispatcher.send(self.SIGNAL_NODE_QUERIES_COMPLETE, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    -

     

    -

            When receiving this value, we consider that the node is ready. 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeQueriesComplete : %s', args) 

    -

            #the query stage are now completed, set the flag is ready to operate 

    -

            self.nodes[args['nodeId']].isReady = True 

    -

            dispatcher.send(self.SIGNAL_NODE_QUERIES_COMPLETE, \ 

    -

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

            self._handle_node(self.nodes[args['nodeId']]) 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeRemoved : %s', args) 

    +

            try: 

    +

                self._semaphore_nodes.acquire() 

    +

                if args['nodeId'] in self.nodes: 

    +

                    node = self.nodes[args['nodeId']] 

    +

                    del self.nodes[args['nodeId']] 

    +

                    dispatcher.send(self.SIGNAL_NODE_REMOVED, \ 

    +

                        **{'network': self, 'node': node}) 

    +

                    self._handle_node(node) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

    +

     

    +

        def _handle_essential_node_queries_complete(self, args): 

    +

            """ 

    +

            The queries on a node that are essential to its operation have 

    +

            been completed. The node can now handle incoming messages. 

    +

     

    +

            dispatcher.send(self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification EssentialNodeQueriesComplete : %s', args) 

    +

            dispatcher.send(self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE, \ 

    +

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_node_queries_complete(self, args): 

    +

            """ 

    +

            All the initialisation queries on a node have been completed. 

     

    -

        def _handle_all_nodes_queried(self, args): 

    -

            """ 

    -

            All nodes have been queried, so client application can expected 

    -

            complete data. 

    +

            dispatcher.send(self.SIGNAL_NODE_QUERIES_COMPLETE, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    +

     

    +

            When receiving this value, we consider that the node is ready. 

     

            :param args: data sent by the notification 

            :type args: dict() 

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification AllNodesQueried : %s', args) 

    -

            self._state = self.STATE_READY 

    -

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, \ 

    -

                **{'network': self, 'controller': self._controller}) 

    -

        def _handle_all_nodes_queried_some_dead(self, args): 

    -

            """ 

    -

            All nodes have been queried, but some node ar mark dead, so client application can expected 

    -

            complete data. 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification AllNodesQueriedSomeDead : %s', args) 

    -

            self._state = self.STATE_READY 

    -

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED_SOME_DEAD, \ 

    -

                **{'network': self, 'controller': self._controller}) 

    -

     

    -

        def _handle_awake_nodes_queried(self, args): 

    -

            """ 

    -

            All awake nodes have been queried, so client application can 

    -

            expected complete data for these nodes. 

    -

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_AWAKE_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    -

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification AwakeNodesQueried : %s', args) 

    -

            self._object_id = args['homeId'] 

    -

            try: 

    -

                if self._state < self.STATE_AWAKED: 

    -

                    self._state = self.STATE_AWAKED 

    -

                dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    -

                dispatcher.send(self.SIGNAL_AWAKE_NODES_QUERIED, \ 

    -

                    **{'network': self, 'controller': self._controller}) 

    -

            except: 

    -

                import sys, traceback 

    -

                logger.error('Z-Wave Notification AwakeNodesQueried : %s', traceback.format_exception(*sys.exc_info())) 

    -

            finally: 

    -

                pass 

    -

     

    -

        def _handle_polling_disabled(self, args): 

    -

            """ 

    -

            Polling of a node has been successfully turned off by a call 

    -

            to Manager::DisablePoll. 

    -

     

    -

            dispatcher.send(self.SIGNAL_POLLING_DISABLED, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification PollingDisabled : %s', args) 

    -

            dispatcher.send(self.SIGNAL_POLLING_DISABLED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_polling_enabled(self, args): 

    -

            """ 

    -

            Polling of a node has been successfully turned on by a call 

    -

            to Manager::EnablePoll. 

    -

     

    -

            dispatcher.send(self.SIGNAL_POLLING_ENABLED, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification PollingEnabled : %s', args) 

    -

            dispatcher.send(self.SIGNAL_POLLING_ENABLED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_create_button(self, args): 

    -

            """ 

    -

            Handheld controller button event created. 

    -

     

    -

            dispatcher.send(self.SIGNAL_CREATE_BUTTON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeQueriesComplete : %s', args) 

    +

            #the query stage are now completed, set the flag is ready to operate 

    +

            self.nodes[args['nodeId']].isReady = True 

    +

            dispatcher.send(self.SIGNAL_NODE_QUERIES_COMPLETE, \ 

    +

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            self._handle_node(self.nodes[args['nodeId']]) 

    +

     

    +

        def _handle_all_nodes_queried(self, args): 

    +

            """ 

    +

            All nodes have been queried, so client application can expected 

    +

            complete data. 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification AllNodesQueried : %s', args) 

    +

            self._state = self.STATE_READY 

    +

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, \ 

    +

                **{'network': self, 'controller': self._controller}) 

    +

        def _handle_all_nodes_queried_some_dead(self, args): 

    +

            """ 

    +

            All nodes have been queried, but some node ar mark dead, so client application can expected 

    +

            complete data. 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification AllNodesQueriedSomeDead : %s', args) 

    +

            self._state = self.STATE_READY 

    +

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED_SOME_DEAD, \ 

    +

                **{'network': self, 'controller': self._controller}) 

    +

     

    +

        def _handle_awake_nodes_queried(self, args): 

    +

            """ 

    +

            All awake nodes have been queried, so client application can 

    +

            expected complete data for these nodes. 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_AWAKE_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification AwakeNodesQueried : %s', args) 

    +

            self._object_id = args['homeId'] 

    +

            try: 

    +

                if self._state < self.STATE_AWAKED: 

    +

                    self._state = self.STATE_AWAKED 

    +

                dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    +

                dispatcher.send(self.SIGNAL_AWAKE_NODES_QUERIED, \ 

    +

                    **{'network': self, 'controller': self._controller}) 

    +

            except: 

    +

                import sys, traceback 

    +

                logger.error('Z-Wave Notification AwakeNodesQueried : %s', traceback.format_exception(*sys.exc_info())) 

    +

            finally: 

    +

                pass 

    +

     

    +

        def _handle_polling_disabled(self, args): 

    +

            """ 

    +

            Polling of a node has been successfully turned off by a call 

    +

            to Manager::DisablePoll. 

    +

     

    +

            dispatcher.send(self.SIGNAL_POLLING_DISABLED, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification PollingDisabled : %s', args) 

    +

            dispatcher.send(self.SIGNAL_POLLING_DISABLED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_polling_enabled(self, args): 

    +

            """ 

    +

            Polling of a node has been successfully turned on by a call 

    +

            to Manager::EnablePoll. 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification CreateButton : %s', args) 

    -

            dispatcher.send(self.SIGNAL_CREATE_BUTTON, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_delete_button(self, args): 

    -

            """ 

    -

            Handheld controller button event deleted. 

    -

     

    -

            dispatcher.send(self.SIGNAL_DELETE_BUTTON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_POLLING_ENABLED, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification PollingEnabled : %s', args) 

    +

            dispatcher.send(self.SIGNAL_POLLING_ENABLED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_create_button(self, args): 

    +

            """ 

    +

            Handheld controller button event created. 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification DeleteButton : %s', args) 

    -

            dispatcher.send(self.SIGNAL_DELETE_BUTTON, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_button_on(self, args): 

    -

            """ 

    -

            Handheld controller button on pressed event. 

    -

     

    -

            dispatcher.send(self.SIGNAL_BUTTON_ON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_CREATE_BUTTON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification CreateButton : %s', args) 

    +

            dispatcher.send(self.SIGNAL_CREATE_BUTTON, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_delete_button(self, args): 

    +

            """ 

    +

            Handheld controller button event deleted. 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ButtonOn : %s', args) 

    -

            dispatcher.send(self.SIGNAL_BUTTON_ON, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_button_off(self, args): 

    -

            """ 

    -

            Handheld controller button off pressed event. 

    -

     

    -

            dispatcher.send(self.SIGNAL_BUTTON_OFF, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_DELETE_BUTTON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification DeleteButton : %s', args) 

    +

            dispatcher.send(self.SIGNAL_DELETE_BUTTON, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_button_on(self, args): 

    +

            """ 

    +

            Handheld controller button on pressed event. 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ButtonOff : %s', args) 

    -

            dispatcher.send(self.SIGNAL_BUTTON_OFF, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_value(self, node=None, value=None): 

    -

            """ 

    -

            Sent when a value is changed, addes, removed, ... 

    -

            If you don't interrest in values event details you can listen to this 

    -

            signal only. 

    +

            dispatcher.send(self.SIGNAL_BUTTON_ON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification ButtonOn : %s', args) 

    +

            dispatcher.send(self.SIGNAL_BUTTON_ON, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_button_off(self, args): 

    +

            """ 

    +

            Handheld controller button off pressed event. 

     

    -

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    +

            dispatcher.send(self.SIGNAL_BUTTON_OFF, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

     

    -

            :param nodeid: the id of the node who hold the value 

    -

            :type nodeid: int 

    -

            :param valueid: the id of the value 

    -

            :type valueid: int 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification Value : node=%s value=%s' % (node, value)) 

    -

            dispatcher.send(self.SIGNAL_VALUE, \ 

    -

                **{'network': self, 'node' : node, \ 

    -

                    'value' : value}) 

    -

     

    -

        def _handle_value_added(self, args): 

    -

            """ 

    -

            A new node value has been added to OpenZWave's set. 

    -

            These notifications occur after a node has been discovered, 

    -

            and details of its command classes have been received. 

    -

            Each command class may generate one or more values depending 

    -

            on the complexity of the item being represented. 

    -

     

    -

            dispatcher.send(self.SIGNAL_VALUE_ADDED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification ButtonOff : %s', args) 

    +

            dispatcher.send(self.SIGNAL_BUTTON_OFF, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_value(self, node=None, value=None): 

    +

            """ 

    +

            Sent when a value is changed, addes, removed, ... 

    +

            If you don't interrest in values event details you can listen to this 

    +

            signal only. 

    +

     

    +

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    +

     

    +

            :param nodeid: the id of the node who hold the value 

    +

            :type nodeid: int 

    +

            :param valueid: the id of the value 

    +

            :type valueid: int 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification Value : node=%s value=%s' % (node, value)) 

    +

            dispatcher.send(self.SIGNAL_VALUE, \ 

    +

                **{'network': self, 'node' : node, \ 

    +

                    'value' : value}) 

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ValueAdded : %s', args) 

    -

            self.nodes[args['nodeId']].add_value(args['valueId']['id']) 

    -

            dispatcher.send(self.SIGNAL_VALUE_ADDED, \ 

    -

                **{'network': self, \ 

    -

                   'node' : self.nodes[args['nodeId']], \ 

    -

                   'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    -

     

    -

        def _handle_value_changed(self, args): 

    -

            """ 

    -

            A node value has been updated from the Z-Wave network and it is 

    -

            different from the previous value. 

    -

     

    -

            dispatcher.send(self.SIGNAL_VALUE_CHANGED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ValueChanged : %s', args) 

    -

            if args['nodeId'] not in self.nodes: 

    -

                logger.warning('Z-Wave Notification ValueChanged (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    -

                return False 

    -

            self.nodes[args['nodeId']].change_value(args['valueId']['id']) 

    -

            dispatcher.send(self.SIGNAL_VALUE_CHANGED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    -

     

    -

        def _handle_value_refreshed(self, args): 

    -

            """ 

    -

            A node value has been updated from the Z-Wave network. 

    -

     

    -

            dispatcher.send(self.SIGNAL_VALUE_REFRESHED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ValueRefreshed : %s', args) 

    -

            if args['nodeId'] not in self.nodes: 

    -

                logger.warning('Z-Wave Notification ValueRefreshed (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    -

                return False 

    -

            self.nodes[args['nodeId']].refresh_value(args['valueId']['id']) 

    -

            dispatcher.send(self.SIGNAL_VALUE_REFRESHED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    -

     

    -

        def _handle_value_removed(self, args): 

    -

            """ 

    -

            A node value has been removed from OpenZWave's set. 

    -

            This only occurs when a node is removed. 

    +

        def _handle_value_added(self, args): 

    +

            """ 

    +

            A new node value has been added to OpenZWave's set. 

    +

            These notifications occur after a node has been discovered, 

    +

            and details of its command classes have been received. 

    +

            Each command class may generate one or more values depending 

    +

            on the complexity of the item being represented. 

    +

     

    +

            dispatcher.send(self.SIGNAL_VALUE_ADDED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification ValueAdded : %s', args) 

    +

            self.nodes[args['nodeId']].add_value(args['valueId']['id']) 

    +

            dispatcher.send(self.SIGNAL_VALUE_ADDED, \ 

    +

                **{'network': self, \ 

    +

                   'node' : self.nodes[args['nodeId']], \ 

    +

                   'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    +

     

    +

        def _handle_value_changed(self, args): 

    +

            """ 

    +

            A node value has been updated from the Z-Wave network and it is 

    +

            different from the previous value. 

    +

     

    +

            dispatcher.send(self.SIGNAL_VALUE_CHANGED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification ValueChanged : %s', args) 

    +

            if args['nodeId'] not in self.nodes: 

    +

                logger.warning('Z-Wave Notification ValueChanged (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    +

                return False 

    +

            self.nodes[args['nodeId']].change_value(args['valueId']['id']) 

    +

            dispatcher.send(self.SIGNAL_VALUE_CHANGED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    +

     

    +

        def _handle_value_refreshed(self, args): 

    +

            """ 

    +

            A node value has been updated from the Z-Wave network. 

    +

     

    +

            dispatcher.send(self.SIGNAL_VALUE_REFRESHED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

     

    -

            dispatcher.send(self.SIGNAL_VALUE_REMOVED, \ 

    -

                    **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                        'value' : val}) 

    -

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ValueRemoved : %s', args) 

    -

            if args['nodeId'] not in self.nodes: 

    -

                logger.warning('Z-Wave Notification ValueRemoved (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    -

                return False 

    -

            val = self.nodes[args['nodeId']].values[args['valueId']['id']] 

    -

            if self.nodes[args['nodeId']].remove_value(args['valueId']['id']): 

    -

                dispatcher.send(self.SIGNAL_VALUE_REMOVED, \ 

    -

                    **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                        'value' : val}) 

    -

                #self._handle_value(node=self.nodes[args['nodeId']], value=val) 

    -

            del self.nodes[args['nodeId']].values[args['valueId']['id']] 

    +

            """ 

    +

            logger.debug('Z-Wave Notification ValueRefreshed : %s', args) 

    +

            if args['nodeId'] not in self.nodes: 

    +

                logger.warning('Z-Wave Notification ValueRefreshed (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    +

                return False 

    +

            self.nodes[args['nodeId']].refresh_value(args['valueId']['id']) 

    +

            dispatcher.send(self.SIGNAL_VALUE_REFRESHED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    +

     

    +

        def _handle_value_removed(self, args): 

    +

            """ 

    +

            A node value has been removed from OpenZWave's set. 

    +

            This only occurs when a node is removed. 

    +

     

    +

            dispatcher.send(self.SIGNAL_VALUE_REMOVED, \ 

    +

                    **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                        'value' : val}) 

    +

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

     

    -

        def _handle_notification(self, args): 

    -

            """ 

    -

            Called when an error happened, or node changed (awake, sleep, death, no operation, timeout). 

    -

     

    -

            dispatcher.send(self.SIGNAL_NOTIFICATION, **{'network': self}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification : %s', args) 

    -

            dispatcher.send(self.SIGNAL_NOTIFICATION, \ 

    -

                **{'network': self, 'args': args}) 

    -

     

    -

        def _handle_msg_complete(self, args): 

    -

            """ 

    -

            The last message that was sent is now complete. 

    -

     

    -

            dispatcher.send(self.SIGNAL_MSG_COMPLETE, **{'network': self}) 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification ValueRemoved : %s', args) 

    +

            if args['nodeId'] not in self.nodes: 

    +

                logger.warning('Z-Wave Notification ValueRemoved (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    +

                return False 

    +

            val = self.nodes[args['nodeId']].values[args['valueId']['id']] 

    +

            if self.nodes[args['nodeId']].remove_value(args['valueId']['id']): 

    +

                dispatcher.send(self.SIGNAL_VALUE_REMOVED, \ 

    +

                    **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                        'value' : val}) 

    +

                #self._handle_value(node=self.nodes[args['nodeId']], value=val) 

    +

            del self.nodes[args['nodeId']].values[args['valueId']['id']] 

    +

     

    +

        def _handle_notification(self, args): 

    +

            """ 

    +

            Called when an error happened, or node changed (awake, sleep, death, no operation, timeout). 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification MsgComplete : %s', args) 

    -

            dispatcher.send(self.SIGNAL_MSG_COMPLETE, \ 

    -

                **{'network': self}) 

    -

     

    -

        def write_config(self): 

    -

            """ 

    -

            The last message that was sent is now complete. 

    -

     

    -

            """ 

    -

            self._manager.writeConfig(self.home_id) 

    -

            logger.info('ZWave configuration wrote to user directory.') 

    +

            dispatcher.send(self.SIGNAL_NOTIFICATION, **{'network': self}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification : %s', args) 

    +

            dispatcher.send(self.SIGNAL_NOTIFICATION, \ 

    +

                **{'network': self, 'args': args}) 

    +

     

    +

        def _handle_msg_complete(self, args): 

    +

            """ 

    +

            The last message that was sent is now complete. 

    +

     

    +

            dispatcher.send(self.SIGNAL_MSG_COMPLETE, **{'network': self}) 

     

    -

    """ 

    -

        initialization callback sequence: 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

     

    -

        [driverReady] 

    -

     

    -

        [nodeAdded] <-------------------------+ This cycle is extremely quick, well under one second. 

    -

            [nodeProtocolInfo]                | 

    -

            [nodeNaming]                      | 

    -

            [valueAdded] <---------------+    | 

    -

                                         |    | 

    -

            {REPEATS FOR EACH VALUE} ----+    | 

    -

                                              | 

    -

            [group] <--------------------+    | 

    -

                                         |    | 

    -

            {REPEATS FOR EACH GROUP} ----+    | 

    -

                                              | 

    -

        {REPEATS FOR EACH NODE} --------------+ 

    -

     

    -

        [? (no notification)] <---------------+ (no notification announces the beginning of this cycle) 

    -

                                              | 

    -

            [valueChanged] <-------------+    | This cycle can take some time, especially if some nodes 

    -

                                         |    | are sleeping or slow to respond. 

    -

            {REPEATS FOR EACH VALUE} ----+    | 

    -

                                              | 

    -

            [group] <--------------------+    | 

    +

            """ 

    +

            logger.debug('Z-Wave Notification MsgComplete : %s', args) 

    +

            dispatcher.send(self.SIGNAL_MSG_COMPLETE, \ 

    +

                **{'network': self}) 

    +

     

    +

        def write_config(self): 

    +

            """ 

    +

            The last message that was sent is now complete. 

    +

     

    +

            """ 

    +

            self._manager.writeConfig(self.home_id) 

    +

            logger.info('ZWave configuration wrote to user directory.') 

    +

     

    +

    """ 

    +

        initialization callback sequence: 

    +

     

    +

        [driverReady] 

    +

     

    +

        [nodeAdded] <-------------------------+ This cycle is extremely quick, well under one second. 

    +

            [nodeProtocolInfo]                | 

    +

            [nodeNaming]                      | 

    +

            [valueAdded] <---------------+    | 

                                         |    | 

    -

            {REPEATS FOR EACH GROUP} ----+    | 

    +

            {REPEATS FOR EACH VALUE} ----+    | 

                                              | 

    -

        [nodeQueriesComplete]                 | 

    -

                                              | 

    -

        {REPEATS FOR EACH NODE} --------------+ 

    -

     

    -

        [awakeNodesQueried] or [allNodesQueried] (with node_id 255) 

    +

            [group] <--------------------+    | 

    +

                                         |    | 

    +

            {REPEATS FOR EACH GROUP} ----+    | 

    +

                                              | 

    +

        {REPEATS FOR EACH NODE} --------------+ 

     

    -

        [driverRemoved] 

    -

    """ 

    -

     

    -

    class ZWaveNetworkSingleton(ZWaveNetwork): 

    -

        """ 

    -

        Represents a singleton Zwave network. 

    -

     

    -

        """ 

    -

        __metaclass__ = Singleton 

    -

     

    +

        [? (no notification)] <---------------+ (no notification announces the beginning of this cycle) 

    +

                                              | 

    +

            [valueChanged] <-------------+    | This cycle can take some time, especially if some nodes 

    +

                                         |    | are sleeping or slow to respond. 

    +

            {REPEATS FOR EACH VALUE} ----+    | 

    +

                                              | 

    +

            [group] <--------------------+    | 

    +

                                         |    | 

    +

            {REPEATS FOR EACH GROUP} ----+    | 

    +

                                              | 

    +

        [nodeQueriesComplete]                 | 

    +

                                              | 

    +

        {REPEATS FOR EACH NODE} --------------+ 

    +

     

    +

        [awakeNodesQueried] or [allNodesQueried] (with node_id 255) 

    +

     

    +

        [driverRemoved] 

    +

    """ 

    +

     

    +

    class ZWaveNetworkSingleton(ZWaveNetwork): 

    +

        """ 

    +

        Represents a singleton Zwave network. 

    +

     

    +

        """ 

    +

        __metaclass__ = Singleton 

    +

     

    @@ -938,830 +985,877 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    from openzwave.object import ZWaveObject 

    -

    from openzwave.group import ZWaveGroup 

    -

    from openzwave.value import ZWaveValue 

    -

    from openzwave.command import ZWaveNodeBasic, ZWaveNodeSwitch 

    -

    from openzwave.command import ZWaveNodeSensor, ZWaveNodeSecurity 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveNode(ZWaveObject, 

    -

                    ZWaveNodeBasic, ZWaveNodeSwitch, 

    -

                    ZWaveNodeSensor, ZWaveNodeSecurity): 

    -

        """ 

    -

        Represents a single Node within the Z-Wave Network. 

    -

     

    -

        """ 

    -

     

    -

        _isReady = False 

    -

     

    -

        def __init__(self, node_id, network): 

    -

            """ 

    -

            Initialize zwave node 

    -

     

    -

            :param node_id: ID of the node 

    -

            :type node_id: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from openzwave.object import ZWaveObject 

    +

    from openzwave.group import ZWaveGroup 

    +

    from openzwave.value import ZWaveValue 

    +

    from openzwave.command import ZWaveNodeBasic, ZWaveNodeSwitch 

    +

    from openzwave.command import ZWaveNodeSensor, ZWaveNodeSecurity 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveNode(ZWaveObject, 

    +

                    ZWaveNodeBasic, ZWaveNodeSwitch, 

    +

                    ZWaveNodeSensor, ZWaveNodeSecurity): 

    +

        """ 

    +

        Represents a single Node within the Z-Wave Network. 

    +

     

    +

        """ 

    +

     

    +

        _isReady = False 

    +

     

    +

        def __init__(self, node_id, network): 

    +

            """ 

    +

            Initialize zwave node 

     

    -

            """ 

    -

            logger.debug("Create object node (node_id:%s)" % (node_id)) 

    -

            ZWaveObject.__init__(self, node_id, network) 

    -

            #No cache management for values in nodes 

    -

            self.values = dict() 

    -

            self._is_locked = False 

    -

            self._isReady = False 

    -

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the node. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'home_id: [%s] id: [%s] name: [%s] model: [%s]' % \ 

    -

              (self._network.home_id_str, self._object_id, self.name, self.product_name) 

    -

     

    -

        @property 

    -

        def node_id(self): 

    -

            """ 

    -

            The id of the node. 

    +

            :param node_id: ID of the node 

    +

            :type node_id: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

    +

     

    +

            """ 

    +

            logger.debug("Create object node (node_id:%s)" % (node_id)) 

    +

            ZWaveObject.__init__(self, node_id, network) 

    +

            #No cache management for values in nodes 

    +

            self.values = dict() 

    +

            self._is_locked = False 

    +

            self._isReady = False 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the node. 

    +

     

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'home_id: [%s] id: [%s] name: [%s] model: [%s]' % \ 

    +

              (self._network.home_id_str, self._object_id, self.name, self.product_name) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._object_id 

    +

        @property 

    +

        def node_id(self): 

    +

            """ 

    +

            The id of the node. 

     

    -

        @property 

    -

        def name(self): 

    -

            """ 

    -

            The name of the node. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._object_id 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeName(self.home_id, self.object_id) 

    +

        @property 

    +

        def name(self): 

    +

            """ 

    +

            The name of the node. 

     

    -

        @name.setter 

    -

        def name(self, value): 

    -

            """ 

    -

            Set the name of the node. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeName(self.home_id, self.object_id) 

     

    -

            :param value: The new name of the node 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setNodeName(self.home_id, self.object_id, value) 

    -

     

    -

        @property 

    -

        def location(self): 

    -

            """ 

    -

            The location of the node. 

    +

        @name.setter 

    +

        def name(self, value): 

    +

            """ 

    +

            Set the name of the node. 

    +

     

    +

            :param value: The new name of the node 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setNodeName(self.home_id, self.object_id, value) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeLocation(self.home_id, self.object_id) 

    +

        @property 

    +

        def location(self): 

    +

            """ 

    +

            The location of the node. 

     

    -

        @location.setter 

    -

        def location(self, value): 

    -

            """ 

    -

            Set the location of the node. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeLocation(self.home_id, self.object_id) 

     

    -

            :param value: The new location of the node 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setNodeLocation(self.home_id, self.object_id, value) 

    -

     

    -

        @property 

    -

        def product_name(self): 

    -

            """ 

    -

            The product name of the node. 

    +

        @location.setter 

    +

        def location(self, value): 

    +

            """ 

    +

            Set the location of the node. 

    +

     

    +

            :param value: The new location of the node 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setNodeLocation(self.home_id, self.object_id, value) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeProductName(self.home_id, self.object_id) 

    +

        @property 

    +

        def product_name(self): 

    +

            """ 

    +

            The product name of the node. 

     

    -

        @product_name.setter 

    -

        def product_name(self, value): 

    -

            """ 

    -

            Set the product name of the node. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeProductName(self.home_id, self.object_id) 

     

    -

            :param value: The new name of the product 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setNodeProductName(self.home_id, self.object_id, value) 

    -

     

    -

        @property 

    -

        def product_type(self): 

    -

            """ 

    -

            The product type of the node. 

    +

        @product_name.setter 

    +

        def product_name(self, value): 

    +

            """ 

    +

            Set the product name of the node. 

    +

     

    +

            :param value: The new name of the product 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setNodeProductName(self.home_id, self.object_id, value) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeProductType(self.home_id, self.object_id) 

    +

        @property 

    +

        def product_type(self): 

    +

            """ 

    +

            The product type of the node. 

     

    -

        @property 

    -

        def product_id(self): 

    -

            """ 

    -

            The product Id of the node. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeProductType(self.home_id, self.object_id) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeProductId(self.home_id, self.object_id) 

    +

        @property 

    +

        def product_id(self): 

    +

            """ 

    +

            The product Id of the node. 

     

    -

        def to_dict(self, kvals=True): 

    -

            """ 

    -

            Return a dict representation of the node. 

    -

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            ret['name'] = self.name 

    -

            ret['location'] = self.location 

    -

            ret['product_type'] = self.product_type 

    -

            ret['product_name'] = self.product_name 

    -

            ret['node_id'] = self.node_id 

    -

            ret['neighbors'] = dict.fromkeys(self.neighbors, 0) 

    -

            ret['capabilities'] = dict.fromkeys(self.capabilities, 0) 

    -

            if kvals == True and self.network.dbcon is not None: 

    -

                vals = self.kvals 

    -

                for key in vals.keys(): 

    -

                    ret[key]=vals[key] 

    -

            return ret 

    -

     

    -

        @property 

    -

        def capabilities(self): 

    -

            """ 

    -

            The capabilities of the node. 

    -

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            caps = set() 

    -

            if self.is_routing_device: 

    -

                caps.add('routing') 

    -

            if self.is_listening_device: 

    -

                caps.add('listening') 

    -

            if self.is_frequent_listening_device: 

    -

                caps.add('frequent') 

    -

            if self.is_security_device: 

    -

                caps.add('security') 

    -

            if self.is_beaming_device: 

    -

                caps.add('beaming') 

    -

            if self.node_id == self._network.controller.node_id: 

    -

                for cap in self._network.controller.capabilities: 

    -

                    caps.add(cap) 

    -

            return caps 

    -

     

    -

        @property 

    -

        def neighbors(self): 

    -

            """ 

    -

            The neighbors of the node. 

    -

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeNeighbors(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def num_groups(self): 

    -

            """ 

    -

            Gets the number of association groups reported by this node. 

    -

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNumGroups(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def groups(self): 

    -

            """ 

    -

            Get the association groups reported by this node 

    -

     

    -

            In Z-Wave, groups are numbered starting from one.  For example, if a call to 

    -

            GetNumGroups returns 4, the _groupIdx value to use in calls to GetAssociations 

    -

            AddAssociation and RemoveAssociation will be a number between 1 and 4. 

    -

     

    -

            :rtype: dict() 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeProductId(self.home_id, self.object_id) 

    +

     

    +

        def to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the node. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            if 'all' in extras: 

    +

                    extras = ['kvals', 'capabilities', 'neighbors', 'groups', 'values'] 

    +

            ret={} 

    +

            ret['name'] = self.name 

    +

            ret['location'] = self.location 

    +

            ret['product_type'] = self.product_type 

    +

            ret['product_name'] = self.product_name 

    +

            ret['node_id'] = self.node_id 

    +

            if 'values' in extras : 

    +

                    ret['values'] = self.values_to_dict(extras=extras) 

    +

            if 'groups' in extras : 

    +

                    ret['groups'] = self.groups_to_dict(extras=extras) 

    +

            if 'neighbors' in extras : 

    +

                    ret['neighbors'] = dict.fromkeys(self.neighbors, 0) 

    +

            if 'capabilities' in extras : 

    +

                    ret['capabilities'] = dict.fromkeys(self.capabilities, 0) 

    +

            if 'kvals' in extras and self.network.dbcon is not None: 

    +

                vals = self.kvals 

    +

                for key in vals.keys(): 

    +

                    ret[key]=vals[key] 

    +

            return ret 

    +

     

    +

        @property 

    +

        def capabilities(self): 

    +

            """ 

    +

            The capabilities of the node. 

    +

     

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            caps = set() 

    +

            if self.is_routing_device: 

    +

                caps.add('routing') 

    +

            if self.is_listening_device: 

    +

                caps.add('listening') 

    +

            if self.is_frequent_listening_device: 

    +

                caps.add('frequent') 

    +

            if self.is_security_device: 

    +

                caps.add('security') 

    +

            if self.is_beaming_device: 

    +

                caps.add('beaming') 

    +

            if self.node_id == self._network.controller.node_id: 

    +

                for cap in self._network.controller.capabilities: 

    +

                    caps.add(cap) 

    +

            return caps 

    +

     

    +

        @property 

    +

        def neighbors(self): 

    +

            """ 

    +

            The neighbors of the node. 

    +

     

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeNeighbors(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def num_groups(self): 

    +

            """ 

    +

            Gets the number of association groups reported by this node. 

     

    -

            """ 

    -

            groups = dict() 

    -

            number_groups = self.num_groups 

    -

            for i in range(1, number_groups+1): 

    -

                groups[i] = ZWaveGroup(i, network=self._network, node_id=self.node_id) 

    -

            return groups 

    -

     

    -

        def heal(self, upNodeRoute=False): 

    -

            """ 

    -

            Heal network node by requesting the node rediscover their neighbors. 

    -

            Sends a ControllerCommand_RequestNodeNeighborUpdate to the node. 

    -

     

    -

            :param upNodeRoute: Optional Whether to perform return routes initialization. (default = false). 

    -

            :type upNodeRoute: bool 

    -

            :return: True is the ControllerCommand ins sent. False otherwise 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            if not self.isNodeAwake: 

    -

                logger.warning('Node state must a minimum set to awake') 

    -

                return False 

    -

            self.manager.healNetworkNode(self.home_id, self.object_id, upNodeRoute) 

    -

            return True 

    -

     

    -

        def test(self, count=1): 

    -

            """ 

    -

            Send a number of test messages to node and record results. 

    -

     

    -

            :param count: The number of test messages to send. 

    -

            :type count: int 

    -

     

    -

            """ 

    -

            self._network.manager.testNetworkNode(self.home_id, self.object_id, count) 

    -

     

    -

        @property 

    -

        def command_classes(self): 

    -

            """ 

    -

            The commandClasses of the node. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNumGroups(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def groups(self): 

    +

            """ 

    +

            Get the association groups reported by this node 

    +

     

    +

            In Z-Wave, groups are numbered starting from one.  For example, if a call to 

    +

            GetNumGroups returns 4, the _groupIdx value to use in calls to GetAssociations 

    +

            AddAssociation and RemoveAssociation will be a number between 1 and 4. 

    +

     

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            groups = dict() 

    +

            number_groups = self.num_groups 

    +

            for i in range(1, number_groups+1): 

    +

                groups[i] = ZWaveGroup(i, network=self._network, node_id=self.node_id) 

    +

            return groups 

    +

     

    +

        def groups_to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the groups. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            groups = self.groups 

    +

            ret={} 

    +

            for gid in groups.keys(): 

    +

                ret[gid] = groups[gid].to_dict(extras=extras) 

    +

            return ret 

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            command_classes = set() 

    -

            for cls in self._network.manager.COMMAND_CLASS_DESC: 

    -

                if self._network.manager.getNodeClassInformation(self.home_id, self.object_id, cls): 

    -

                    command_classes.add(cls) 

    -

            return command_classes 

    -

     

    -

        @property 

    -

        def command_classes_as_string(self): 

    -

            """ 

    -

            Return the command classes of the node as string. 

    -

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            commands = self.command_classes 

    -

            command_str = set() 

    -

            for cls in commands: 

    -

                command_str.add(self._network.manager.COMMAND_CLASS_DESC[cls]) 

    -

            return command_str 

    -

     

    -

        def get_command_class_as_string(self, class_id): 

    -

            """ 

    -

            Return the command class representation as string. 

    +

        def heal(self, upNodeRoute=False): 

    +

            """ 

    +

            Heal network node by requesting the node rediscover their neighbors. 

    +

            Sends a ControllerCommand_RequestNodeNeighborUpdate to the node. 

    +

     

    +

            :param upNodeRoute: Optional Whether to perform return routes initialization. (default = false). 

    +

            :type upNodeRoute: bool 

    +

            :return: True is the ControllerCommand ins sent. False otherwise 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            if not self.isNodeAwake: 

    +

                logger.warning('Node state must a minimum set to awake') 

    +

                return False 

    +

            self.manager.healNetworkNode(self.home_id, self.object_id, upNodeRoute) 

    +

            return True 

    +

     

    +

        def test(self, count=1): 

    +

            """ 

    +

            Send a number of test messages to node and record results. 

    +

     

    +

            :param count: The number of test messages to send. 

    +

            :type count: int 

    +

     

    +

            """ 

    +

            self._network.manager.testNetworkNode(self.home_id, self.object_id, count) 

     

    -

            :param class_id: the COMMAND_CLASS to get string representation 

    -

            :type class_id: hexadecimal code 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.COMMAND_CLASS_DESC[class_id] 

    +

        @property 

    +

        def command_classes(self): 

    +

            """ 

    +

            The commandClasses of the node. 

    +

     

    +

            :rtype: set() 

     

    -

        def get_command_class_genres(self): 

    -

            """ 

    -

            Return the list of genres of command classes 

    -

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            return ['User', 'Basic', 'Config', 'System'] 

    -

     

    -

        def get_values_by_command_classes(self, genre='All', \ 

    -

            type='All', readonly='All', writeonly='All'): 

    -

            """ 

    -

            Retrieve values in a dict() of dicts(). The dict is indexed on the COMMAND_CLASS. 

    -

            This allows to browse values grouped by the COMMAND_CLASS.You can optionnaly filter for a command class, 

    -

            a genre and/or a type. You can also filter readonly and writeonly params. 

    -

     

    -

            This method always filter the values. 

    -

            If you wan't to get all the node's values, use the property self.values instead. 

    -

     

    -

            :param genre: the genre of value 

    -

            :type genre: 'All' or PyGenres 

    -

            :param type: the type of value 

    -

            :type type: 'All' or PyValueTypes 

    -

            :param readonly: Is this value readonly 

    -

            :type readonly: 'All' or True or False 

    -

            :param writeonly: Is this value writeonly 

    -

            :type writeonly: 'All' or True or False 

    -

            :rtype: dict(command_class : dict(valueids)) 

    +

            """ 

    +

            command_classes = set() 

    +

            for cls in self._network.manager.COMMAND_CLASS_DESC: 

    +

                if self._network.manager.getNodeClassInformation(self.home_id, self.object_id, cls): 

    +

                    command_classes.add(cls) 

    +

            return command_classes 

    +

     

    +

        @property 

    +

        def command_classes_as_string(self): 

    +

            """ 

    +

            Return the command classes of the node as string. 

    +

     

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            commands = self.command_classes 

    +

            command_str = set() 

    +

            for cls in commands: 

    +

                command_str.add(self._network.manager.COMMAND_CLASS_DESC[cls]) 

    +

            return command_str 

    +

     

    +

        def get_command_class_as_string(self, class_id): 

    +

            """ 

    +

            Return the command class representation as string. 

    +

     

    +

            :param class_id: the COMMAND_CLASS to get string representation 

    +

            :type class_id: hexadecimal code 

    +

            :rtype: str 

     

            """ 

    -

            values = dict() 

    -

            for value in self.values: 

    -

                if (genre == 'All' or self.values[value].genre == genre) and \ 

    -

                  (type == 'All' or self.values[value].type == type) and \ 

    -

                  (readonly == 'All' or self.values[value].is_read_only == readonly) and \ 

    -

                  (writeonly == 'All' or self.values[value].is_write_only == writeonly): 

    -

                    if self.values[value].command_class not in values: 

    -

                        values[self.values[value].command_class] = dict() 

    -

                    values[self.values[value].command_class][value] = self.values[value] 

    -

            return values 

    +

            return self._network.manager.COMMAND_CLASS_DESC[class_id] 

    +

     

    +

        def get_command_class_genres(self): 

    +

            """ 

    +

            Return the list of genres of command classes 

    +

     

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            return ['User', 'Basic', 'Config', 'System'] 

     

    -

        def get_values_for_command_class(self, class_id): 

    -

            """ 

    -

            Retrieve the set of values for a command class. 

    -

            Deprecated 

    -

            For backward compatibility only. 

    -

            Use get_values instead 

    +

        def get_values_by_command_classes(self, genre='All', \ 

    +

            type='All', readonly='All', writeonly='All'): 

    +

            """ 

    +

            Retrieve values in a dict() of dicts(). The dict is indexed on the COMMAND_CLASS. 

    +

            This allows to browse values grouped by the COMMAND_CLASS.You can optionnaly filter for a command class, 

    +

            a genre and/or a type. You can also filter readonly and writeonly params. 

     

    -

            :param class_id: the COMMAND_CLASS to get values 

    -

            :type class_id: hexadecimal code or string 

    -

            :type writeonly: 'All' or True or False 

    -

            :rtype: set() of classId 

    -

     

    -

            """ 

    -

            #print class_id 

    -

            return self.get_values(class_id=class_id) 

    -

     

    -

        def get_values(self, class_id='All', genre='All', \ 

    -

            type='All', readonly='All', writeonly='All'): 

    -

            """ 

    -

            Retrieve the set of values. You can optionnaly filter for a command class, 

    -

            a genre and/or a type. You can also filter readonly and writeonly params. 

    -

     

    -

            This method always filter the values. 

    -

            If you wan't to get all the node's values, use self.values instead. 

    -

     

    -

            :param class_id: the COMMAND_CLASS to get values 

    -

            :type class_id: hexadecimal code or string 

    -

            :param genre: the genre of value 

    -

            :type genre: 'All' or PyGenres 

    -

            :param type: the type of value 

    -

            :type type: 'All' or PyValueTypes 

    -

            :param readonly: Is this value readonly 

    -

            :type readonly: 'All' or True or False 

    -

            :param writeonly: Is this value writeonly 

    -

            :type writeonly: 'All' or True or False 

    -

            :rtype: set() of Values 

    -

     

    -

            """ 

    -

            ret = dict() 

    -

            for value in self.values: 

    -

                if (class_id == 'All' or self.values[value].command_class == class_id) and \ 

    -

                  (genre == 'All' or self.values[value].genre == genre) and \ 

    -

                  (type == 'All' or self.values[value].type == type) and \ 

    -

                  (readonly == 'All' or self.values[value].is_read_only == readonly) and \ 

    -

                  (writeonly == 'All' or self.values[value].is_write_only == writeonly): 

    -

                    ret[value] = self.values[value] 

    -

            return ret 

    +

            This method always filter the values. 

    +

            If you wan't to get all the node's values, use the property self.values instead. 

    +

     

    +

            :param genre: the genre of value 

    +

            :type genre: 'All' or PyGenres 

    +

            :param type: the type of value 

    +

            :type type: 'All' or PyValueTypes 

    +

            :param readonly: Is this value readonly 

    +

            :type readonly: 'All' or True or False 

    +

            :param writeonly: Is this value writeonly 

    +

            :type writeonly: 'All' or True or False 

    +

            :rtype: dict(command_class : dict(valueids)) 

    +

     

    +

            """ 

    +

            values = dict() 

    +

            for value in self.values: 

    +

                if (genre == 'All' or self.values[value].genre == genre) and \ 

    +

                  (type == 'All' or self.values[value].type == type) and \ 

    +

                  (readonly == 'All' or self.values[value].is_read_only == readonly) and \ 

    +

                  (writeonly == 'All' or self.values[value].is_write_only == writeonly): 

    +

                    if self.values[value].command_class not in values: 

    +

                        values[self.values[value].command_class] = dict() 

    +

                    values[self.values[value].command_class][value] = self.values[value] 

    +

            return values 

    +

     

    +

        def get_values_for_command_class(self, class_id): 

    +

            """ 

    +

            Retrieve the set of values for a command class. 

    +

            Deprecated 

    +

            For backward compatibility only. 

    +

            Use get_values instead 

    +

     

    +

            :param class_id: the COMMAND_CLASS to get values 

    +

            :type class_id: hexadecimal code or string 

    +

            :type writeonly: 'All' or True or False 

    +

            :rtype: set() of classId 

    +

     

    +

            """ 

    +

            #print class_id 

    +

            return self.get_values(class_id=class_id) 

     

    -

        def add_value(self, value_id): 

    -

            """ 

    -

            Add a value to the node 

    -

     

    -

            :param value_id: The id of the value to add 

    -

            :type value_id: int 

    -

            :param command_class: The command_class of the value 

    -

            :type command_class: str 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            value = ZWaveValue(value_id, network=self.network, parent=self) 

    -

            self.values[value_id] = value 

    -

     

    -

        def change_value(self, value_id): 

    -

            """ 

    -

            Change a value of the node. 

    -

            Not implemented 

    -

     

    -

            :param value_id: The id of the value to change 

    -

            :type value_id: int 

    -

     

    -

            """ 

    -

            pass 

    -

     

    -

        def refresh_value(self, value_id): 

    -

            """ 

    -

            Refresh a value of the node. 

    -

            Not implemented 

    -

     

    -

            :param value_id: The id of the value to change 

    -

            :type value_id: int 

    -

     

    -

            """ 

    -

            return self._network.manager.refreshValue(value_id) 

    +

        def get_values(self, class_id='All', genre='All', \ 

    +

            type='All', readonly='All', writeonly='All'): 

    +

            """ 

    +

            Retrieve the set of values. You can optionnaly filter for a command class, 

    +

            a genre and/or a type. You can also filter readonly and writeonly params. 

    +

     

    +

            This method always filter the values. 

    +

            If you wan't to get all the node's values, use self.values instead. 

    +

     

    +

            :param class_id: the COMMAND_CLASS to get values 

    +

            :type class_id: hexadecimal code or string 

    +

            :param genre: the genre of value 

    +

            :type genre: 'All' or PyGenres 

    +

            :param type: the type of value 

    +

            :type type: 'All' or PyValueTypes 

    +

            :param readonly: Is this value readonly 

    +

            :type readonly: 'All' or True or False 

    +

            :param writeonly: Is this value writeonly 

    +

            :type writeonly: 'All' or True or False 

    +

            :rtype: set() of Values 

    +

     

    +

            """ 

    +

            ret = dict() 

    +

            for value in self.values: 

    +

                if (class_id == 'All' or self.values[value].command_class == class_id) and \ 

    +

                  (genre == 'All' or self.values[value].genre == genre) and \ 

    +

                  (type == 'All' or self.values[value].type == type) and \ 

    +

                  (readonly == 'All' or self.values[value].is_read_only == readonly) and \ 

    +

                  (writeonly == 'All' or self.values[value].is_write_only == writeonly): 

    +

                    ret[value] = self.values[value] 

    +

            return ret 

    +

     

    +

        def values_to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the values. 

     

    -

        def remove_value(self, value_id): 

    -

            """ 

    -

            Change a value of the node. Todo 

    -

     

    -

            :param value_id: The id of the value to change 

    -

            :type value_id: int 

    -

            :return: The result of the operation 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            if value_id in self.values: 

    -

                logger.debug("Remove value : %s" % self.values[value_id]) 

    -

                del self.values[value_id] 

    -

                return True 

    -

            return False 

    -

     

    -

        def set_field(self, field, value): 

    -

            """ 

    -

            A helper to set a writable field : name, location, product_name, ... 

    -

     

    -

            :param field: The field to set : name, location, product_name, manufacturer_name 

    -

            :type field: str 

    -

            :param value: The value to set 

    -

            :type value: str 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            if field == "name": 

    -

                self.name = value 

    -

            elif field == "location": 

    -

                self.location = value 

    -

            elif field == "product_name": 

    -

                self.product_name = value 

    -

            elif field == "manufacturer_name": 

    -

                self.manufacturer_name = value 

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret={} 

    +

            for vid in self.values.keys(): 

    +

                ret[vid] = self.values[vid].to_dict(extras=extras) 

    +

            return ret 

    +

     

    +

        def add_value(self, value_id): 

    +

            """ 

    +

            Add a value to the node 

    +

     

    +

            :param value_id: The id of the value to add 

    +

            :type value_id: int 

    +

            :param command_class: The command_class of the value 

    +

            :type command_class: str 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            value = ZWaveValue(value_id, network=self.network, parent=self) 

    +

            self.values[value_id] = value 

    +

     

    +

        def change_value(self, value_id): 

    +

            """ 

    +

            Change a value of the node. 

    +

            Not implemented 

    +

     

    +

            :param value_id: The id of the value to change 

    +

            :type value_id: int 

    +

     

    +

            """ 

    +

            pass 

     

    -

        def has_command_class(self, class_id): 

    +

        def refresh_value(self, value_id): 

            """ 

    -

            Check that this node use this commandClass. 

    -

     

    -

            :param classId: the COMMAND_CLASS to check 

    -

            :type classId: hexadecimal code 

    -

            :rtype: bool 

    +

            Refresh a value of the node. 

    +

            Not implemented 

    +

     

    +

            :param value_id: The id of the value to change 

    +

            :type value_id: int 

     

            """ 

    -

            return class_id in self.command_classes 

    +

            return self._network.manager.refreshValue(value_id) 

     

    -

        @property 

    -

        def manufacturer_id(self): 

    -

            """ 

    -

            The manufacturer id of the node. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeManufacturerId(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def manufacturer_name(self): 

    -

            """ 

    -

            The manufacturer name of the node. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeManufacturerName(self.home_id, self.object_id) 

    +

        def remove_value(self, value_id): 

    +

            """ 

    +

            Change a value of the node. Todo 

    +

     

    +

            :param value_id: The id of the value to change 

    +

            :type value_id: int 

    +

            :return: The result of the operation 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            if value_id in self.values: 

    +

                logger.debug("Remove value : %s" % self.values[value_id]) 

    +

                del self.values[value_id] 

    +

                return True 

    +

            return False 

    +

     

    +

        def set_field(self, field, value): 

    +

            """ 

    +

            A helper to set a writable field : name, location, product_name, ... 

     

    -

        @manufacturer_name.setter 

    -

        def manufacturer_name(self, value): 

    -

            """ 

    -

            Set the manufacturer name of the node. 

    -

     

    -

            :param value: The new manufacturer name of the node 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setNodeManufacturerName(self.home_id, self.object_id, value) 

    -

     

    -

        @property 

    -

        def generic(self): 

    -

            """ 

    -

            The generic type of the node. 

    +

            :param field: The field to set : name, location, product_name, manufacturer_name 

    +

            :type field: str 

    +

            :param value: The value to set 

    +

            :type value: str 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            if field == "name": 

    +

                self.name = value 

    +

            elif field == "location": 

    +

                self.location = value 

    +

            elif field == "product_name": 

    +

                self.product_name = value 

    +

            elif field == "manufacturer_name": 

    +

                self.manufacturer_name = value 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeGeneric(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def basic(self): 

    -

            """ 

    -

            The basic type of the node. 

    -

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeBasic(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def specific(self): 

    -

            """ 

    -

            The specific type of the node. 

    -

     

    -

            :return: The specific type of the node 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeSpecific(self.home_id, self.object_id) 

    +

        def has_command_class(self, class_id): 

    +

            """ 

    +

            Check that this node use this commandClass. 

    +

     

    +

            :param classId: the COMMAND_CLASS to check 

    +

            :type classId: hexadecimal code 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return class_id in self.command_classes 

    +

     

    +

        @property 

    +

        def manufacturer_id(self): 

    +

            """ 

    +

            The manufacturer id of the node. 

    +

     

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeManufacturerId(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def manufacturer_name(self): 

    +

            """ 

    +

            The manufacturer name of the node. 

     

    -

        @property 

    -

        def security(self): 

    -

            """ 

    -

            The security type of the node. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeManufacturerName(self.home_id, self.object_id) 

     

    -

            :return: The security type of the node 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeSecurity(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def version(self): 

    -

            """ 

    -

            The version of the node. 

    +

        @manufacturer_name.setter 

    +

        def manufacturer_name(self, value): 

    +

            """ 

    +

            Set the manufacturer name of the node. 

    +

     

    +

            :param value: The new manufacturer name of the node 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setNodeManufacturerName(self.home_id, self.object_id, value) 

     

    -

            :return: The version of the node 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeVersion(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def is_listening_device(self): 

    -

            """ 

    -

            Is this node a listening device. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isNodeListeningDevice(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def is_beaming_device(self): 

    -

            """ 

    -

            Is this node a beaming device. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isNodeBeamingDevice(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def is_frequent_listening_device(self): 

    -

            """ 

    -

            Is this node a frequent listening device. 

    +

        @property 

    +

        def generic(self): 

    +

            """ 

    +

            The generic type of the node. 

    +

     

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeGeneric(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def basic(self): 

    +

            """ 

    +

            The basic type of the node. 

    +

     

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeBasic(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def specific(self): 

    +

            """ 

    +

            The specific type of the node. 

    +

     

    +

            :return: The specific type of the node 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeSpecific(self.home_id, self.object_id) 

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isNodeFrequentListeningDevice(self.home_id, self.object_id) 

    +

        @property 

    +

        def security(self): 

    +

            """ 

    +

            The security type of the node. 

     

    -

        @property 

    -

        def is_security_device(self): 

    -

            """ 

    -

            Is this node a security device. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isNodeSecurityDevice(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def is_routing_device(self): 

    -

            """ 

    -

            Is this node a routing device. 

    -

     

    -

            :rtype: bool 

    +

            :return: The security type of the node 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeSecurity(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def version(self): 

    +

            """ 

    +

            The version of the node. 

    +

     

    +

            :return: The version of the node 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeVersion(self.home_id, self.object_id) 

     

    -

            """ 

    -

            return self._network.manager.isNodeRoutingDevice(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def is_locked(self): 

    -

            """ 

    -

            Is this node locked. 

    -

     

    -

            :rtype: bool 

    +

        @property 

    +

        def is_listening_device(self): 

    +

            """ 

    +

            Is this node a listening device. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeListeningDevice(self.home_id, self.object_id) 

     

    -

            """ 

    -

            return self._is_locked 

    -

     

    -

        @property 

    -

        def is_sleeping(self): 

    -

            """ 

    -

            Is this node sleeping. 

    -

     

    -

            :rtype: bool 

    +

        @property 

    +

        def is_beaming_device(self): 

    +

            """ 

    +

            Is this node a beaming device. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeBeamingDevice(self.home_id, self.object_id) 

     

    -

            """ 

    -

            return not self.isNodeAwake 

    -

     

    -

     

    -

    #    @property 

    -

    #    def level(self): 

    -

    #        """ 

    -

    #        The level of the node. 

    -

    #        Todo 

    -

    #        """ 

    -

    #        values = self._getValuesForCommandClass(0x26)  # COMMAND_CLASS_SWITCH_MULTILEVEL 

    -

    #        if values: 

    -

    #            for value in values: 

    -

    #                vdic = value.value_data 

    -

    #                if vdic and vdic.has_key('type') and vdic['type'] == 'Byte' and vdic.has_key('value'): 

    -

    #                    return int(vdic['value']) 

    -

    #        return 0 

    -

     

    -

    #    @property 

    -

    #    def is_on(self): 

    -

    #        """ 

    -

    #        Is this node On. 

    -

    #        Todo 

    -

    #        """ 

    -

    #        values = self._getValuesForCommandClass(0x25)  # COMMAND_CLASS_SWITCH_BINARY 

    -

    #        if values: 

    -

    #            for value in values: 

    -

    #                vdic = value.value_data 

    -

    #                if vdic and vdic.has_key('type') and vdic['type'] == 'Bool' and vdic.has_key('value'): 

    -

    #                    return vdic['value'] == 'True' 

    -

    #        return False 

    -

     

    -

    #    @property 

    -

    #    def signal_strength(self): 

    -

    #        """ 

    -

    #        The signal strenght of this node. 

    -

    #        Todo 

    -

    #        """ 

    -

    #        return 0 

    +

        @property 

    +

        def is_frequent_listening_device(self): 

    +

            """ 

    +

            Is this node a frequent listening device. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeFrequentListeningDevice(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def is_security_device(self): 

    +

            """ 

    +

            Is this node a security device. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeSecurityDevice(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def is_routing_device(self): 

    +

            """ 

    +

            Is this node a routing device. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeRoutingDevice(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def is_locked(self): 

    +

            """ 

    +

            Is this node locked. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._is_locked 

     

        @property 

    -

        def max_baud_rate(self): 

    +

        def is_sleeping(self): 

            """ 

    -

            Get the maximum baud rate of a node 

    +

            Is this node sleeping. 

     

    -

            """ 

    -

            return self._network.manager.getNodeMaxBaudRate(self.home_id, self.object_id) 

    -

     

    -

        def refresh_info(self): 

    -

            """ 

    -

            Trigger the fetching of fixed data about a node. 

    -

     

    -

            Causes the nodes data to be obtained from the Z-Wave network in the same way 

    -

            as if it had just been added.  This method would normally be called 

    -

            automatically by OpenZWave, but if you know that a node has been changed, 

    -

            calling this method will force a refresh of the data held by the library.  This 

    -

            can be especially useful for devices that were asleep when the application was 

    -

            first run. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.refreshNodeInfo(self.home_id, self.object_id)# 

    -

     

    -

        def request_all_config_params(self): 

    -

            """ 

    -

            Request the values of all known configurable parameters from a device. 

    -

     

    -

            """ 

    -

            logger.debug('Requesting config params for node [%s]' % (self.object_id,)) 

    -

            self._network.manager.requestAllConfigParams(self.home_id, self.object_id) 

    -

     

    -

        def request_config_param(self, param): 

    -

            """ 

    -

            Request the value of a configurable parameter from a device. 

    -

     

    -

            Some devices have various parameters that can be configured to control the 

    -

            device behaviour.  These are not reported by the device over the Z-Wave network 

    -

            but can usually be found in the devices user manual.  This method requests 

    -

            the value of a parameter from the device, and then returns immediately, 

    -

            without waiting for a response.  If the parameter index is valid for this 

    -

            device, and the device is awake, the value will eventually be reported via a 

    -

            ValueChanged notification callback.  The ValueID reported in the callback will 

    -

            have an index set the same as _param and a command class set to the same value 

    -

            as returned by a call to Configuration::StaticGetCommandClassId. 

    -

     

    -

            :param param: The param of the node. 

    -

            :type param: 

    -

     

    -

            """ 

    -

            logger.debug('Requesting config param %s for node [%s]' % (param, self.object_id)) 

    -

            self._network.manager.requestConfigParam(self.home_id, self.object_id, param) 

    -

     

    -

        def set_config_param(self, param, value, size=2): 

    -

            """ 

    -

            Set the value of a configurable parameter in a device. 

    -

     

    -

            Some devices have various parameters that can be configured to control the 

    -

            device behaviour.  These are not reported by the device over the Z-Wave network 

    -

            but can usually be found in the devices user manual.  This method returns 

    -

            immediately, without waiting for confirmation from the device that the change 

    -

            has been made. 

    -

     

    -

            :param param: The param of the node. 

    -

            :type param: 

    -

            :param value: The value of the param. 

    -

            :type value: 

    -

            :param size: Is an optional number of bytes to be sent for the parameter value. Defaults to 2. 

    -

            :type size: int 

    -

            :return: 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            logger.debug('Set config param %s for node [%s]' % (param, self.object_id,)) 

    -

            return self._network.manager.setConfigParam(self.home_id, self.object_id, param, value, size) 

    -

     

    -

    #    def setNodeOn(self, node): 

    -

    #        """ 

    -

    #        """ 

    -

    #        self._log.debug('Requesting setNodeOn for node {0}'.format(node.id)) 

    -

    #        self._manager.setNodeOn(node.home_id, node.id) 

    -

     

    -

    #    def setNodeOff(self, node): 

    -

    #        """ 

    -

    #        """ 

    -

    #        self._log.debug('Requesting setNodeOff for node {0}'.format(node.id)) 

    -

    #        self._manager.setNodeOff(node.home_id, node.id) 

    -

     

    -

    #    def setNodeLevel(self, node, level): 

    -

    #        """ 

    -

    #        """ 

    -

    #        self._log.debug('Requesting setNodeLevel for node {0} with new level {1}'.format(node.id, level)) 

    -

    #        self._manager.setNodeLevel(node.home_id, node.id, level) 

    -

     

    -

        def isNodeAwake(self): 

    -

            """ 

    -

            Is this node a awake. 

    -

     

    -

            :rtype: bool 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return not self.isNodeAwake 

    +

     

    +

     

    +

    #    @property 

    +

    #    def level(self): 

    +

    #        """ 

    +

    #        The level of the node. 

    +

    #        Todo 

    +

    #        """ 

    +

    #        values = self._getValuesForCommandClass(0x26)  # COMMAND_CLASS_SWITCH_MULTILEVEL 

    +

    #        if values: 

    +

    #            for value in values: 

    +

    #                vdic = value.value_data 

    +

    #                if vdic and vdic.has_key('type') and vdic['type'] == 'Byte' and vdic.has_key('value'): 

    +

    #                    return int(vdic['value']) 

    +

    #        return 0 

    +

     

    +

    #    @property 

    +

    #    def is_on(self): 

    +

    #        """ 

    +

    #        Is this node On. 

    +

    #        Todo 

    +

    #        """ 

    +

    #        values = self._getValuesForCommandClass(0x25)  # COMMAND_CLASS_SWITCH_BINARY 

    +

    #        if values: 

    +

    #            for value in values: 

    +

    #                vdic = value.value_data 

    +

    #                if vdic and vdic.has_key('type') and vdic['type'] == 'Bool' and vdic.has_key('value'): 

    +

    #                    return vdic['value'] == 'True' 

    +

    #        return False 

    +

     

    +

    #    @property 

    +

    #    def signal_strength(self): 

    +

    #        """ 

    +

    #        The signal strenght of this node. 

    +

    #        Todo 

    +

    #        """ 

    +

    #        return 0 

    +

     

    +

        @property 

    +

        def max_baud_rate(self): 

    +

            """ 

    +

            Get the maximum baud rate of a node 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeMaxBaudRate(self.home_id, self.object_id) 

    +

     

    +

        def refresh_info(self): 

    +

            """ 

    +

            Trigger the fetching of fixed data about a node. 

    +

     

    +

            Causes the nodes data to be obtained from the Z-Wave network in the same way 

    +

            as if it had just been added.  This method would normally be called 

    +

            automatically by OpenZWave, but if you know that a node has been changed, 

    +

            calling this method will force a refresh of the data held by the library.  This 

    +

            can be especially useful for devices that were asleep when the application was 

    +

            first run. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.refreshNodeInfo(self.home_id, self.object_id)# 

    +

     

    +

        def request_all_config_params(self): 

    +

            """ 

    +

            Request the values of all known configurable parameters from a device. 

    +

     

    +

            """ 

    +

            logger.debug('Requesting config params for node [%s]' % (self.object_id,)) 

    +

            self._network.manager.requestAllConfigParams(self.home_id, self.object_id) 

    +

     

    +

        def request_config_param(self, param): 

    +

            """ 

    +

            Request the value of a configurable parameter from a device. 

    +

     

    +

            Some devices have various parameters that can be configured to control the 

    +

            device behaviour.  These are not reported by the device over the Z-Wave network 

    +

            but can usually be found in the devices user manual.  This method requests 

    +

            the value of a parameter from the device, and then returns immediately, 

    +

            without waiting for a response.  If the parameter index is valid for this 

    +

            device, and the device is awake, the value will eventually be reported via a 

    +

            ValueChanged notification callback.  The ValueID reported in the callback will 

    +

            have an index set the same as _param and a command class set to the same value 

    +

            as returned by a call to Configuration::StaticGetCommandClassId. 

    +

     

    +

            :param param: The param of the node. 

    +

            :type param: 

    +

     

    +

            """ 

    +

            logger.debug('Requesting config param %s for node [%s]' % (param, self.object_id)) 

    +

            self._network.manager.requestConfigParam(self.home_id, self.object_id, param) 

     

    -

            """ 

    -

     

    -

            return self._network.manager.isNodeAwake(self.home_id, self.object_id) 

    +

        def set_config_param(self, param, value, size=2): 

    +

            """ 

    +

            Set the value of a configurable parameter in a device. 

     

    -

        @property 

    -

        def isNodeFailed(self): 

    -

            """ 

    -

            Is this node is presume failed. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

     

    -

            return self._network.manager.isNodeFailed(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def getNodeQueryStage(self): 

    -

            """ 

    -

            Is this node a awake. 

    -

     

    -

            :rtype: string 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeQueryStage(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def isReady(self): 

    -

            """ 

    -

            Get whether the node is ready to operate (QueryStage Completed). 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._isReady 

    +

            Some devices have various parameters that can be configured to control the 

    +

            device behaviour.  These are not reported by the device over the Z-Wave network 

    +

            but can usually be found in the devices user manual.  This method returns 

    +

            immediately, without waiting for confirmation from the device that the change 

    +

            has been made. 

    +

     

    +

            :param param: The param of the node. 

    +

            :type param: 

    +

            :param value: The value of the param. 

    +

            :type value: 

    +

            :param size: Is an optional number of bytes to be sent for the parameter value. Defaults to 2. 

    +

            :type size: int 

    +

            :return: 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            logger.debug('Set config param %s for node [%s]' % (param, self.object_id,)) 

    +

            return self._network.manager.setConfigParam(self.home_id, self.object_id, param, value, size) 

    +

     

    +

    #    def setNodeOn(self, node): 

    +

    #        """ 

    +

    #        """ 

    +

    #        self._log.debug('Requesting setNodeOn for node {0}'.format(node.id)) 

    +

    #        self._manager.setNodeOn(node.home_id, node.id) 

    +

     

    +

    #    def setNodeOff(self, node): 

    +

    #        """ 

    +

    #        """ 

    +

    #        self._log.debug('Requesting setNodeOff for node {0}'.format(node.id)) 

    +

    #        self._manager.setNodeOff(node.home_id, node.id) 

     

    -

        @isReady.setter 

    -

        def isReady(self, value): 

    -

            """ 

    -

            Set whether the node is ready to operate. 

    -

            automatically set to True by notification SIGNAL_NODE_QUERIES_COMPLETE 

    +

    #    def setNodeLevel(self, node, level): 

    +

    #        """ 

    +

    #        """ 

    +

    #        self._log.debug('Requesting setNodeLevel for node {0} with new level {1}'.format(node.id, level)) 

    +

    #        self._manager.setNodeLevel(node.home_id, node.id, level) 

     

    -

            :param value: is node ready 

    -

            :type value: bool 

    -

     

    -

            """ 

    -

            self._isReady = value 

    +

        def isNodeAwake(self): 

    +

            """ 

    +

            Is this node a awake. 

    +

     

    +

            :rtype: bool 

     

    -

        @property 

    -

        def isNodeInfoReceived(self): 

    -

            """ 

    -

            Get whether the node information has been received. Returns True if the node information has been received yet 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isNodeInfoReceived(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def type(self): 

    -

            """ 

    -

            Get a human-readable label describing the node 

    -

            :rtype: str 

    -

            """ 

    -

            return self._network.manager.getNodeType(self.home_id, self.object_id) 

    +

            """ 

    +

     

    +

            return self._network.manager.isNodeAwake(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def isNodeFailed(self): 

    +

            """ 

    +

            Is this node is presume failed. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

     

    +

            return self._network.manager.isNodeFailed(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def getNodeQueryStage(self): 

    +

            """ 

    +

            Is this node a awake. 

    +

     

    +

            :rtype: string 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeQueryStage(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def isReady(self): 

    +

            """ 

    +

            Get whether the node is ready to operate (QueryStage Completed). 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._isReady 

    +

     

    +

        @isReady.setter 

    +

        def isReady(self, value): 

    +

            """ 

    +

            Set whether the node is ready to operate. 

    +

            automatically set to True by notification SIGNAL_NODE_QUERIES_COMPLETE 

    +

     

    +

            :param value: is node ready 

    +

            :type value: bool 

    +

     

    +

            """ 

    +

            self._isReady = value 

    +

     

    +

        @property 

    +

        def isNodeInfoReceived(self): 

    +

            """ 

    +

            Get whether the node information has been received. Returns True if the node information has been received yet 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeInfoReceived(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def type(self): 

    +

            """ 

    +

            Get a human-readable label describing the node 

    +

            :rtype: str 

    +

            """ 

    +

            return self._network.manager.getNodeType(self.home_id, self.object_id) 

    @@ -427,319 +432,324 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveException(Exception): 

    -

        """ 

    -

        Exception class for OpenZWave 

    -

        """ 

    -

        def __init__(self, value): 

    -

            Exception.__init__(self) 

    -

            self.msg = "Zwave Generic Exception" 

    -

            self.value = value 

    -

     

    -

        def __str__(self): 

    -

            return repr(self.msg+' : '+self.value) 

    -

     

    -

    class ZWaveCacheException(ZWaveException): 

    -

        """ 

    -

        Exception class for OpenZWave 

    -

        """ 

    -

        def __init__(self, value): 

    -

            ZWaveException.__init__(self) 

    -

            self.msg = "Zwave Cache Exception" 

    -

            self.value = value 

    -

     

    -

        def __str__(self): 

    -

            return repr(self.msg+' : '+self.value) 

    -

     

    -

    class ZWaveTypeException(ZWaveException): 

    -

        """ 

    -

        Exception class for OpenZWave 

    -

        """ 

    -

        def __init__(self, value): 

    -

            ZWaveException.__init__(self) 

    -

            self.msg = "Zwave Type Exception" 

    -

            self.value = value 

    -

     

    -

        def __str__(self): 

    -

            return repr(self.msg+' : '+self.value) 

    -

     

    -

    class ZWaveCommandClassException(ZWaveException): 

    -

        """ 

    -

        Exception class for OpenZWave 

    -

        """ 

    -

        def __init__(self, value): 

    -

            ZWaveException.__init__(self) 

    -

            self.msg = "Zwave Command Class Exception" 

    -

            self.value = value 

    -

     

    -

        def __str__(self): 

    -

            return repr(self.msg+' : '+self.value) 

    -

     

    -

    class ZWaveObject(object): 

    -

        """ 

    -

        Represents a Zwave object. Values, nodes, ... can be changer by 

    -

        other managers on the network. 

    -

        """ 

    -

     

    -

        def __init__(self, object_id, network=None, use_cache=True): 

    -

            """ 

    -

            Initialize a Zwave object 

    -

     

    -

            :param object_id: ID of the object 

    -

            :type object_id: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveException(Exception): 

    +

        """ 

    +

        Exception class for OpenZWave 

    +

        """ 

    +

        def __init__(self, value): 

    +

            Exception.__init__(self) 

    +

            self.msg = "Zwave Generic Exception" 

    +

            self.value = value 

    +

     

    +

        def __str__(self): 

    +

            return repr(self.msg+' : '+self.value) 

    +

     

    +

    class ZWaveCacheException(ZWaveException): 

    +

        """ 

    +

        Exception class for OpenZWave 

    +

        """ 

    +

        def __init__(self, value): 

    +

            ZWaveException.__init__(self) 

    +

            self.msg = "Zwave Cache Exception" 

    +

            self.value = value 

    +

     

    +

        def __str__(self): 

    +

            return repr(self.msg+' : '+self.value) 

    +

     

    +

    class ZWaveTypeException(ZWaveException): 

    +

        """ 

    +

        Exception class for OpenZWave 

    +

        """ 

    +

        def __init__(self, value): 

    +

            ZWaveException.__init__(self) 

    +

            self.msg = "Zwave Type Exception" 

    +

            self.value = value 

    +

     

    +

        def __str__(self): 

    +

            return repr(self.msg+' : '+self.value) 

    +

     

    +

    class ZWaveCommandClassException(ZWaveException): 

    +

        """ 

    +

        Exception class for OpenZWave 

    +

        """ 

    +

        def __init__(self, value): 

    +

            ZWaveException.__init__(self) 

    +

            self.msg = "Zwave Command Class Exception" 

    +

            self.value = value 

    +

     

    +

        def __str__(self): 

    +

            return repr(self.msg+' : '+self.value) 

    +

     

    +

    class ZWaveObject(object): 

    +

        """ 

    +

        Represents a Zwave object. Values, nodes, ... can be changer by 

    +

        other managers on the network. 

    +

        """ 

    +

     

    +

        def __init__(self, object_id, network=None, use_cache=True): 

    +

            """ 

    +

            Initialize a Zwave object 

     

    -

            """ 

    -

            self._network = network 

    -

            self._last_update = None 

    -

            self._outdated = True 

    -

            self._use_cache = use_cache 

    -

            self._object_id = object_id 

    -

            if self._use_cache: 

    -

                self._cached_properties = dict() 

    -

            else: 

    -

                self._cached_properties = None 

    -

     

    -

        @property 

    -

        def home_id(self): 

    -

            """ 

    -

            The home_id of the node. 

    +

            :param object_id: ID of the object 

    +

            :type object_id: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

    +

     

    +

            """ 

    +

            self._network = network 

    +

            self._last_update = None 

    +

            self._outdated = True 

    +

            self._use_cache = use_cache 

    +

            self._object_id = object_id 

    +

            if self._use_cache: 

    +

                self._cached_properties = dict() 

    +

            else: 

    +

                self._cached_properties = None 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.object_id if self._network != None else None 

    +

        @property 

    +

        def home_id(self): 

    +

            """ 

    +

            The home_id of the node. 

     

    -

        @property 

    -

        def network(self): 

    -

            """ 

    -

            The network of the node. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.object_id if self._network != None else None 

     

    -

            :rtype: ZWaveNetwork 

    -

     

    -

            """ 

    -

            return self._network 

    +

        @property 

    +

        def network(self): 

    +

            """ 

    +

            The network of the node. 

     

    -

        @property 

    -

        def use_cache(self): 

    -

            """ 

    -

            Should this object use cache from property 

    +

            :rtype: ZWaveNetwork 

    +

     

    +

            """ 

    +

            return self._network 

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._use_cache 

    +

        @property 

    +

        def use_cache(self): 

    +

            """ 

    +

            Should this object use cache from property 

     

    -

        @property 

    -

        def last_update(self): 

    -

            """ 

    -

            The last update date of the device. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._use_cache 

     

    -

            :rtype: time 

    -

     

    -

            """ 

    -

            return self._last_update 

    +

        @property 

    +

        def last_update(self): 

    +

            """ 

    +

            The last update date of the device. 

     

    -

        @last_update.setter 

    -

        def last_update(self, value): 

    -

            """ 

    -

            Set the last update date of the device. 

    +

            :rtype: time 

    +

     

    +

            """ 

    +

            return self._last_update 

     

    -

            :param value: The time of last update 

    -

            :type value: time 

    -

     

    -

            """ 

    -

            self._last_update = value 

    -

     

    -

        @property 

    -

        def outdated(self): 

    -

            """ 

    -

            Are the information of this object outdated. 

    +

        @last_update.setter 

    +

        def last_update(self, value): 

    +

            """ 

    +

            Set the last update date of the device. 

    +

     

    +

            :param value: The time of last update 

    +

            :type value: time 

    +

     

    +

            """ 

    +

            self._last_update = value 

     

    -

            How to manage the cache ? 

    -

     

    -

            2 ways of doing it : 

    -

            - refresh information when setting the property 

    -

            - refresh information when getting getting property. 

    -

            Maybe whe could implement the 2 methods. 

    +

        @property 

    +

        def outdated(self): 

    +

            """ 

    +

            Are the information of this object outdated. 

    +

     

    +

            How to manage the cache ? 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._outdated 

    +

            2 ways of doing it : 

    +

            - refresh information when setting the property 

    +

            - refresh information when getting getting property. 

    +

            Maybe whe could implement the 2 methods. 

     

    -

        @outdated.setter 

    -

        def outdated(self, value): 

    -

            """ 

    -

            Set that this object ist outdated. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._outdated 

     

    -

            :param value: True 

    -

            :type value: bool - True 

    -

     

    -

            """ 

    -

            if self._use_cache: 

    -

                if value: 

    -

                    for prop in self._cached_properties: 

    -

                        self._cached_properties[prop] = True 

    -

                    self._outdated = value 

    -

                else: 

    -

                    raise ZWaveCacheException("Can't set outdated to False manually. It is done automatically.") 

    -

            else: 

    -

                raise ZWaveCacheException("Cache not enabled") 

    -

     

    -

        def is_outdated(self, prop): 

    -

            """ 

    -

            Check if property information is outdated. 

    -

     

    -

            :param prop: The property to check 

    -

            :type prop: lambda 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            if self._use_cache: 

    -

                if str(prop) in self._cached_properties: 

    -

                    #print "property in cache %s" % self._cached_properties[str(prop)] 

    -

                    return self._cached_properties[str(prop)] 

    -

                else: 

    -

                    #This property is not cached so return true 

    -

                    return True 

    -

            else: 

    -

                raise ZWaveCacheException("Cache not enabled") 

    -

     

    -

        def outdate(self, prop): 

    -

            """ 

    -

            Says that the property information is outdated. 

    -

     

    -

            :param prop: The property to outdate 

    -

            :type prop: lambda 

    -

     

    -

            """ 

    -

            if self._use_cache: 

    -

                if str(prop) in self._cached_properties: 

    -

                    self._cached_properties[str(prop)] = True 

    -

                    self._outdated = True 

    -

            else: 

    -

                raise ZWaveCacheException("Cache not enabled") 

    -

     

    -

        def update(self, prop): 

    -

            """ 

    -

            Says that the property are updated. 

    -

     

    -

            :param prop: The property to update 

    -

            :type prop: lambda 

    -

     

    -

            """ 

    -

            if self._use_cache: 

    -

                if str(prop) in self._cached_properties: 

    -

                    self._cached_properties[str(prop)] = False 

    -

                    out_dated = False 

    -

                    for prop in self._cached_properties: 

    -

                        if self._cached_properties[prop]: 

    -

                            out_dated = True 

    -

                            break 

    -

                    self._outdated = out_dated 

    -

            else: 

    -

                raise ZWaveCacheException("Cache not enabled") 

    -

     

    -

        def cache_property(self, prop): 

    -

            """ 

    -

            Add this property to the cache manager. 

    -

     

    -

            :param prop: The property to cache 

    -

            :type prop: lambda 

    -

     

    -

            """ 

    -

            if self._use_cache: 

    -

                self._cached_properties[str(prop)] = True 

    -

            else: 

    -

                raise ZWaveCacheException("Cache not enabled") 

    -

     

    -

        @property 

    -

        def object_id(self): 

    -

            """ 

    -

            The id of the object. 

    -

            object_id could be None, when creating a scene for example. 

    -

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._object_id 

    +

        @outdated.setter 

    +

        def outdated(self, value): 

    +

            """ 

    +

            Set that this object ist outdated. 

    +

     

    +

            :param value: True 

    +

            :type value: bool - True 

    +

     

    +

            """ 

    +

            if self._use_cache: 

    +

                if value: 

    +

                    for prop in self._cached_properties: 

    +

                        self._cached_properties[prop] = True 

    +

                    self._outdated = value 

    +

                else: 

    +

                    raise ZWaveCacheException("Can't set outdated to False manually. It is done automatically.") 

    +

            else: 

    +

                raise ZWaveCacheException("Cache not enabled") 

    +

     

    +

        def is_outdated(self, prop): 

    +

            """ 

    +

            Check if property information is outdated. 

    +

     

    +

            :param prop: The property to check 

    +

            :type prop: lambda 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            if self._use_cache: 

    +

                if str(prop) in self._cached_properties: 

    +

                    #print "property in cache %s" % self._cached_properties[str(prop)] 

    +

                    return self._cached_properties[str(prop)] 

    +

                else: 

    +

                    #This property is not cached so return true 

    +

                    return True 

    +

            else: 

    +

                raise ZWaveCacheException("Cache not enabled") 

    +

     

    +

        def outdate(self, prop): 

    +

            """ 

    +

            Says that the property information is outdated. 

    +

     

    +

            :param prop: The property to outdate 

    +

            :type prop: lambda 

    +

     

    +

            """ 

    +

            if self._use_cache: 

    +

                if str(prop) in self._cached_properties: 

    +

                    self._cached_properties[str(prop)] = True 

    +

                    self._outdated = True 

    +

            else: 

    +

                raise ZWaveCacheException("Cache not enabled") 

    +

     

    +

        def update(self, prop): 

    +

            """ 

    +

            Says that the property are updated. 

    +

     

    +

            :param prop: The property to update 

    +

            :type prop: lambda 

    +

     

    +

            """ 

    +

            if self._use_cache: 

    +

                if str(prop) in self._cached_properties: 

    +

                    self._cached_properties[str(prop)] = False 

    +

                    out_dated = False 

    +

                    for prop in self._cached_properties: 

    +

                        if self._cached_properties[prop]: 

    +

                            out_dated = True 

    +

                            break 

    +

                    self._outdated = out_dated 

    +

            else: 

    +

                raise ZWaveCacheException("Cache not enabled") 

    +

     

    +

        def cache_property(self, prop): 

    +

            """ 

    +

            Add this property to the cache manager. 

    +

     

    +

            :param prop: The property to cache 

    +

            :type prop: lambda 

    +

     

    +

            """ 

    +

            if self._use_cache: 

    +

                self._cached_properties[str(prop)] = True 

    +

            else: 

    +

                raise ZWaveCacheException("Cache not enabled") 

    +

     

    +

        @property 

    +

        def object_id(self): 

    +

            """ 

    +

            The id of the object. 

    +

            object_id could be None, when creating a scene for example. 

     

    -

        @property 

    -

        def kvals(self): 

    -

            """ 

    -

            The keyvals store in db for this object. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._object_id 

     

    -

            :rtype: {} 

    -

     

    -

            """ 

    -

            if self.network.dbcon is None: 

    -

                return None 

    -

            res = {} 

    -

            cur = self.network.dbcon.cursor() 

    -

            cur.execute("SELECT key,value FROM %s WHERE object_id=%s"%(self.__class__.__name__, self.object_id)) 

    -

            while True: 

    -

                row = cur.fetchone() 

    -

                if row == None: 

    -

                    break 

    -

                res[row[0]] = row[1] 

    -

            return res 

    -

     

    -

        @kvals.setter 

    -

        def kvals(self, kvs): 

    -

            """ 

    -

            The keyvals store in db for this object. 

    +

        @property 

    +

        def kvals(self): 

    +

            """ 

    +

            The keyvals store in db for this object. 

    +

     

    +

            :rtype: {} 

    +

     

    +

            """ 

    +

            if self.network.dbcon is None: 

    +

                return None 

    +

            res = {} 

    +

            cur = self.network.dbcon.cursor() 

    +

            cur.execute("SELECT key,value FROM %s WHERE object_id=%s"%(self.__class__.__name__, self.object_id)) 

    +

            while True: 

    +

                row = cur.fetchone() 

    +

                if row == None: 

    +

                    break 

    +

                res[row[0]] = row[1] 

    +

            return res 

     

    -

            :param kvs: The key/valuse to store in db. Setting a value to None will remove it. 

    -

            :type kvs: {} 

    -

            :rtype: boolean 

    -

     

    -

            """ 

    -

            if self.network.dbcon is None: 

    -

                return False 

    -

            if len(kvs) == 0: 

    -

                return True 

    -

            cur = self.network.dbcon.cursor() 

    -

            for key in kvs.keys(): 

    -

                logger.debug("DELETE FROM %s WHERE object_id=%s and key='%s'", self.__class__.__name__, self.object_id, key) 

    -

                cur.execute("DELETE FROM %s WHERE object_id=%s and key='%s'"%(self.__class__.__name__, self.object_id, key)) 

    -

                if kvs[key] is not None: 

    -

                    logger.debug("INSERT INTO %s(object_id, 'key', 'value') VALUES (%s,'%s','%s');", self.__class__.__name__, self.object_id, key, kvs[key]) 

    -

                    cur.execute("INSERT INTO %s(object_id, 'key', 'value') VALUES (%s,'%s','%s');"%(self.__class__.__name__, self.object_id, key, kvs[key])) 

    -

            self.network.dbcon.commit() 

    -

            return True 

    -

     

    -

    class ZWaveNodeInterface(object): 

    -

        """ 

    -

        Represents an interface of a node. An interface can manage 

    -

        specific commandClasses (ie a switch, a dimmer, a thermostat, ...). 

    -

        Don't know what to do with it now but sure it must exist 

    -

        """ 

    -

     

    -

        def __init__(self): 

    -

            """ 

    -

            Initialize a Zwave Node Interface 

    -

     

    -

            :param object_id: ID of the object 

    -

            :type object_id: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    +

        @kvals.setter 

    +

        def kvals(self, kvs): 

    +

            """ 

    +

            The keyvals store in db for this object. 

    +

     

    +

            :param kvs: The key/valuse to store in db. Setting a value to None will remove it. 

    +

            :type kvs: {} 

    +

            :rtype: boolean 

    +

     

    +

            """ 

    +

            if self.network.dbcon is None: 

    +

                return False 

    +

            if len(kvs) == 0: 

    +

                return True 

    +

            cur = self.network.dbcon.cursor() 

    +

            for key in kvs.keys(): 

    +

                logger.debug("DELETE FROM %s WHERE object_id=%s and key='%s'", self.__class__.__name__, self.object_id, key) 

    +

                cur.execute("DELETE FROM %s WHERE object_id=%s and key='%s'"%(self.__class__.__name__, self.object_id, key)) 

    +

                if kvs[key] is not None: 

    +

                    logger.debug("INSERT INTO %s(object_id, 'key', 'value') VALUES (%s,'%s','%s');", self.__class__.__name__, self.object_id, key, kvs[key]) 

    +

                    cur.execute("INSERT INTO %s(object_id, 'key', 'value') VALUES (%s,'%s','%s');"%(self.__class__.__name__, self.object_id, key, kvs[key])) 

    +

            self.network.dbcon.commit() 

    +

            return True 

    +

     

    +

    class ZWaveNodeInterface(object): 

    +

        """ 

    +

        Represents an interface of a node. An interface can manage 

    +

        specific commandClasses (ie a switch, a dimmer, a thermostat, ...). 

    +

        Don't know what to do with it now but sure it must exist 

    +

        """ 

    +

     

    +

        def __init__(self): 

    +

            """ 

    +

            Initialize a Zwave Node Interface 

     

    -

            """ 

    -

            self._class = "unknown" 

    +

            :param object_id: ID of the object 

    +

            :type object_id: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

    +

     

    +

            """ 

    +

            self._class = "unknown" 

    @@ -412,304 +417,309 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    import os 

    -

    import libopenzwave 

    -

    from libopenzwave import PyLogLevels 

    -

    from openzwave.object import ZWaveException 

    -

    from openzwave.singleton import Singleton 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveOption(libopenzwave.PyOptions): 

    -

        """ 

    -

        Represents a Zwave option used to start the manager. 

    -

     

    -

        """ 

    -

        def __init__(self, device=None, config_path=None, user_path=".", cmd_line=""): 

    -

            """ 

    -

            Create an option object and check that parameters are valid. 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    import os 

    +

    import libopenzwave 

    +

    from libopenzwave import PyLogLevels 

    +

    from openzwave.object import ZWaveException 

    +

    from openzwave.singleton import Singleton 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveOption(libopenzwave.PyOptions): 

    +

        """ 

    +

        Represents a Zwave option used to start the manager. 

     

    -

            :param device: The device to use 

    -

            :type device: str 

    -

            :param config_path: The openzwave config directory. If None, try to configure automatically. 

    -

            :type config_path: str 

    -

            :param user_path: The user directory 

    -

            :type user_path: str 

    -

            :param cmd_line: The "command line" options of the openzwave library 

    -

            :type cmd_line: str 

    -

     

    -

            """ 

    -

            try: 

    -

                if os.path.exists(device): 

    -

                    if os.access(device, os.R_OK) and os.access(device, os.W_OK): 

    -

                        self._device = device 

    -

                    else: 

    -

                        import sys, traceback 

    -

                        raise ZWaveException("Can't write to device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    -

                else: 

    -

                    import sys, traceback 

    -

                    raise ZWaveException("Can't find device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    -

            except: 

    -

                import sys, traceback 

    -

                raise ZWaveException("Error when retrieving device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    -

            libopenzwave.PyOptions.__init__(self, config_path=config_path, user_path=user_path, cmd_line=cmd_line) 

    -

            self._user_path = user_path 

    -

            self._config_path = config_path 

    -

     

    -

        def set_log_file(self, logfile): 

    -

            """ 

    -

            Set the log file location. 

    -

     

    -

            :param logfile: The location of the log file 

    -

            :type logfile: str 

    -

     

    -

            """ 

    -

            return self.addOptionString("LogFileName", logfile, False) 

    -

     

    -

        def set_logging(self, status): 

    -

            """ 

    -

            Set the status of logging. 

    -

     

    -

            :param status: True to activate logs, False to disable 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("Logging", status) 

    -

     

    -

        def set_append_log_file(self, status): 

    -

            """ 

    -

            Append new session logs to existing log file (false = overwrite). 

    -

     

    -

            :param status: 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("AppendLogFile", status) 

    -

     

    -

        def set_console_output(self, status): 

    -

            """ 

    -

            Display log information on console (as well as save to disk). 

    -

     

    -

            :param status: 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("ConsoleOutput", status) 

    -

     

    -

        def set_save_log_level(self, level): 

    -

            """ 

    -

            Save (to file) log messages equal to or above LogLevel_Detail. 

    -

     

    -

            :param level: 

    -

            :type level: PyLogLevels 

    -

     

    -

                * 'None':"Disable all logging" 

    -

                * 'Always':"These messages should always be shown" 

    -

                * 'Fatal':"A likely fatal issue in the library" 

    -

                * 'Error':"A serious issue with the library or the network" 

    -

                * 'Warning':"A minor issue from which the library should be able to recover" 

    -

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    -

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    -

                * 'Detail':"Detailed information on the progress of each message" / 

    -

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    -

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    -

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    -

     

    -

            """ 

    -

            return self.addOptionInt("SaveLogLevel", PyLogLevels[level]['value']) 

    -

     

    -

        def set_queue_log_level(self, level): 

    -

            """ 

    -

            Save (in RAM) log messages equal to or above LogLevel_Debug. 

    -

     

    -

            :param level: 

    -

            :type level: PyLogLevels 

    -

     

    -

                * 'None':"Disable all logging" 

    -

                * 'Always':"These messages should always be shown" 

    -

                * 'Fatal':"A likely fatal issue in the library" 

    -

                * 'Error':"A serious issue with the library or the network" 

    -

                * 'Warning':"A minor issue from which the library should be able to recover" 

    -

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    -

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    -

                * 'Detail':"Detailed information on the progress of each message" / 

    -

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    -

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    -

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    -

     

    -

            """ 

    -

            return self.addOptionInt("QueueLogLevel", PyLogLevels[level]) 

    -

     

    -

        def set_dump_trigger_level(self, level): 

    -

            """ 

    -

            Default is to never dump RAM-stored log messages. 

    -

     

    -

            :param level: 

    -

            :type level: PyLogLevels 

    -

     

    -

                * 'None':"Disable all logging" 

    -

                * 'Always':"These messages should always be shown" 

    -

                * 'Fatal':"A likely fatal issue in the library" 

    -

                * 'Error':"A serious issue with the library or the network" 

    -

                * 'Warning':"A minor issue from which the library should be able to recover" 

    -

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    -

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    -

                * 'Detail':"Detailed information on the progress of each message" / 

    -

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    -

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    -

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    -

     

    -

            """ 

    -

            return self.addOptionInt("DumpTriggerLevel", PyLogLevels[level]) 

    -

     

    -

        def set_associate(self, status): 

    -

            """ 

    -

            Enable automatic association of the controller with group one of every device. 

    -

     

    -

            :param status: True to enable logs, False to disable 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("Associate", status) 

    -

     

    -

        def set_exclude(self, commandClass): 

    -

            """ 

    -

            Remove support for the seted command classes. 

    -

     

    -

            :param commandClass: The command class to exclude 

    -

            :type commandClass: str 

    -

     

    -

            """ 

    -

            return self.addOptionString("Exclude", commandClass, True) 

    -

     

    -

        def set_include(self, commandClass): 

    -

            """ 

    -

            Only handle the specified command classes.  The Exclude option is ignored if anything is seted here. 

    -

     

    -

            :param commandClass: The location of the log file 

    -

            :type commandClass: str 

    -

     

    -

            """ 

    -

            return self.addOptionString("Include", commandClass, True) 

    -

     

    -

        def set_notify_transactions(self, status): 

    -

            """ 

    -

            Notifications when transaction complete is reported. 

    -

     

    -

            :param status: True to enable, False to disable 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("NotifyTransactions", status) 

    -

     

    -

        def set_interface(self, port): 

    -

            """ 

    -

            Identify the serial port to be accessed (TODO: change the code so more than one serial port can be specified and HID). 

    -

     

    -

            :param port: The serial port 

    -

            :type port: str 

    -

     

    -

            """ 

    -

            return self.addOptionString("Interface", port, True) 

    -

     

    -

        def set_save_configuration(self, status): 

    -

            """ 

    -

            Save the XML configuration upon driver close. 

    -

     

    -

            :param status: True to enable, False to disable 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("SaveConfiguration", status) 

    -

     

    -

        def set_driver_max_attempts(self, attempts): 

    -

            """ 

    -

            Set the driver max attempts before raising an error. 

    -

     

    -

            :param attempts: Number of attempts 

    -

            :type attempts: int 

    -

     

    -

            """ 

    -

            return self.addOptionInt("DriverMaxAttempts", attempts) 

    -

     

    -

        def set_poll_interval(self, interval): 

    -

            """ 

    -

            30 seconds (can easily poll 30 values in this time; ~120 values is the effective limit for 30 seconds). 

    -

     

    -

            :param interval: interval in seconds 

    -

            :type interval: int 

    -

     

    -

            """ 

    -

            return self.addOptionInt("PollInterval", interval) 

    -

     

    -

        def set_interval_between_polls(self, status): 

    -

            """ 

    -

            Notifications when transaction complete is reported. 

    -

     

    -

            :param status: if false, try to execute the entire poll set within the PollInterval time frame. If true, wait for PollInterval milliseconds between polls 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("IntervalBetweenPolls", status) 

    -

     

    -

        def set_suppress_value_refresh(self, status): 

    -

            """ 

    -

            if true, notifications for refreshed (but unchanged) values will not be sent. 

    -

     

    -

            :param status: True to enable, False to disable 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("SuppressValueRefresh", status) 

    -

     

    -

        @property 

    -

        def device(self): 

    -

            """ 

    -

            The device used by the controller. 

    +

        """ 

    +

        def __init__(self, device=None, config_path=None, user_path=".", cmd_line=""): 

    +

            """ 

    +

            Create an option object and check that parameters are valid. 

    +

     

    +

            :param device: The device to use 

    +

            :type device: str 

    +

            :param config_path: The openzwave config directory. If None, try to configure automatically. 

    +

            :type config_path: str 

    +

            :param user_path: The user directory 

    +

            :type user_path: str 

    +

            :param cmd_line: The "command line" options of the openzwave library 

    +

            :type cmd_line: str 

    +

     

    +

            """ 

    +

            try: 

    +

                if os.path.exists(device): 

    +

                    if os.access(device, os.R_OK) and os.access(device, os.W_OK): 

    +

                        self._device = device 

    +

                    else: 

    +

                        import sys, traceback 

    +

                        raise ZWaveException("Can't write to device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    +

                else: 

    +

                    import sys, traceback 

    +

                    raise ZWaveException("Can't find device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    +

            except: 

    +

                import sys, traceback 

    +

                raise ZWaveException("Error when retrieving device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    +

            libopenzwave.PyOptions.__init__(self, config_path=config_path, user_path=user_path, cmd_line=cmd_line) 

    +

            self._user_path = user_path 

    +

            self._config_path = config_path 

    +

     

    +

        def set_log_file(self, logfile): 

    +

            """ 

    +

            Set the log file location. 

    +

     

    +

            :param logfile: The location of the log file 

    +

            :type logfile: str 

    +

     

    +

            """ 

    +

            return self.addOptionString("LogFileName", logfile, False) 

    +

     

    +

        def set_logging(self, status): 

    +

            """ 

    +

            Set the status of logging. 

    +

     

    +

            :param status: True to activate logs, False to disable 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("Logging", status) 

    +

     

    +

        def set_append_log_file(self, status): 

    +

            """ 

    +

            Append new session logs to existing log file (false = overwrite). 

    +

     

    +

            :param status: 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("AppendLogFile", status) 

    +

     

    +

        def set_console_output(self, status): 

    +

            """ 

    +

            Display log information on console (as well as save to disk). 

    +

     

    +

            :param status: 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("ConsoleOutput", status) 

    +

     

    +

        def set_save_log_level(self, level): 

    +

            """ 

    +

            Save (to file) log messages equal to or above LogLevel_Detail. 

    +

     

    +

            :param level: 

    +

            :type level: PyLogLevels 

    +

     

    +

                * 'None':"Disable all logging" 

    +

                * 'Always':"These messages should always be shown" 

    +

                * 'Fatal':"A likely fatal issue in the library" 

    +

                * 'Error':"A serious issue with the library or the network" 

    +

                * 'Warning':"A minor issue from which the library should be able to recover" 

    +

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    +

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    +

                * 'Detail':"Detailed information on the progress of each message" / 

    +

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    +

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    +

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    +

     

    +

            """ 

    +

            return self.addOptionInt("SaveLogLevel", PyLogLevels[level]['value']) 

    +

     

    +

        def set_queue_log_level(self, level): 

    +

            """ 

    +

            Save (in RAM) log messages equal to or above LogLevel_Debug. 

    +

     

    +

            :param level: 

    +

            :type level: PyLogLevels 

    +

     

    +

                * 'None':"Disable all logging" 

    +

                * 'Always':"These messages should always be shown" 

    +

                * 'Fatal':"A likely fatal issue in the library" 

    +

                * 'Error':"A serious issue with the library or the network" 

    +

                * 'Warning':"A minor issue from which the library should be able to recover" 

    +

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    +

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    +

                * 'Detail':"Detailed information on the progress of each message" / 

    +

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    +

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    +

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    +

     

    +

            """ 

    +

            return self.addOptionInt("QueueLogLevel", PyLogLevels[level]) 

    +

     

    +

        def set_dump_trigger_level(self, level): 

    +

            """ 

    +

            Default is to never dump RAM-stored log messages. 

    +

     

    +

            :param level: 

    +

            :type level: PyLogLevels 

    +

     

    +

                * 'None':"Disable all logging" 

    +

                * 'Always':"These messages should always be shown" 

    +

                * 'Fatal':"A likely fatal issue in the library" 

    +

                * 'Error':"A serious issue with the library or the network" 

    +

                * 'Warning':"A minor issue from which the library should be able to recover" 

    +

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    +

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    +

                * 'Detail':"Detailed information on the progress of each message" / 

    +

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    +

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    +

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    +

     

    +

            """ 

    +

            return self.addOptionInt("DumpTriggerLevel", PyLogLevels[level]) 

    +

     

    +

        def set_associate(self, status): 

    +

            """ 

    +

            Enable automatic association of the controller with group one of every device. 

    +

     

    +

            :param status: True to enable logs, False to disable 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("Associate", status) 

    +

     

    +

        def set_exclude(self, commandClass): 

    +

            """ 

    +

            Remove support for the seted command classes. 

    +

     

    +

            :param commandClass: The command class to exclude 

    +

            :type commandClass: str 

    +

     

    +

            """ 

    +

            return self.addOptionString("Exclude", commandClass, True) 

    +

     

    +

        def set_include(self, commandClass): 

    +

            """ 

    +

            Only handle the specified command classes.  The Exclude option is ignored if anything is seted here. 

    +

     

    +

            :param commandClass: The location of the log file 

    +

            :type commandClass: str 

    +

     

    +

            """ 

    +

            return self.addOptionString("Include", commandClass, True) 

    +

     

    +

        def set_notify_transactions(self, status): 

    +

            """ 

    +

            Notifications when transaction complete is reported. 

    +

     

    +

            :param status: True to enable, False to disable 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("NotifyTransactions", status) 

    +

     

    +

        def set_interface(self, port): 

    +

            """ 

    +

            Identify the serial port to be accessed (TODO: change the code so more than one serial port can be specified and HID). 

    +

     

    +

            :param port: The serial port 

    +

            :type port: str 

    +

     

    +

            """ 

    +

            return self.addOptionString("Interface", port, True) 

    +

     

    +

        def set_save_configuration(self, status): 

    +

            """ 

    +

            Save the XML configuration upon driver close. 

    +

     

    +

            :param status: True to enable, False to disable 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("SaveConfiguration", status) 

    +

     

    +

        def set_driver_max_attempts(self, attempts): 

    +

            """ 

    +

            Set the driver max attempts before raising an error. 

    +

     

    +

            :param attempts: Number of attempts 

    +

            :type attempts: int 

    +

     

    +

            """ 

    +

            return self.addOptionInt("DriverMaxAttempts", attempts) 

    +

     

    +

        def set_poll_interval(self, interval): 

    +

            """ 

    +

            30 seconds (can easily poll 30 values in this time; ~120 values is the effective limit for 30 seconds). 

    +

     

    +

            :param interval: interval in seconds 

    +

            :type interval: int 

    +

     

    +

            """ 

    +

            return self.addOptionInt("PollInterval", interval) 

    +

     

    +

        def set_interval_between_polls(self, status): 

    +

            """ 

    +

            Notifications when transaction complete is reported. 

    +

     

    +

            :param status: if false, try to execute the entire poll set within the PollInterval time frame. If true, wait for PollInterval milliseconds between polls 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("IntervalBetweenPolls", status) 

    +

     

    +

        def set_suppress_value_refresh(self, status): 

    +

            """ 

    +

            if true, notifications for refreshed (but unchanged) values will not be sent. 

    +

     

    +

            :param status: True to enable, False to disable 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("SuppressValueRefresh", status) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._device 

    +

        @property 

    +

        def device(self): 

    +

            """ 

    +

            The device used by the controller. 

     

    -

        @property 

    -

        def config_path(self): 

    -

            """ 

    -

            The config path. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._device 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._config_path 

    +

        @property 

    +

        def config_path(self): 

    +

            """ 

    +

            The config path. 

     

    -

        @property 

    -

        def user_path(self): 

    -

            """ 

    -

            The config path. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._config_path 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._user_path 

    +

        @property 

    +

        def user_path(self): 

    +

            """ 

    +

            The config path. 

     

    -

     

    -

    class ZWaveOptionSingleton(ZWaveOption): 

    -

        """ 

    -

        Represents a singleton Zwave option used to start the manager. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._user_path 

     

    -

        """ 

    -

        __metaclass__ = Singleton 

    -

     

    +

     

    +

    class ZWaveOptionSingleton(ZWaveOption): 

    +

        """ 

    +

        Represents a singleton Zwave option used to start the manager. 

    +

     

    +

        """ 

    +

        __metaclass__ = Singleton 

    +

     

    @@ -309,201 +317,209 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    from openzwave.object import ZWaveObject 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveScene(ZWaveObject): 

    -

        """ 

    -

        Represents a single scene within the Z-Wave Network 

    -

        """ 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from openzwave.object import ZWaveObject 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

     

    -

        def __init__(self, scene_id, network=None): 

    -

            """ 

    -

            Initialize zwave scene 

    -

     

    -

            :param scene_id: ID of the scene 

    -

            :type scene_id: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    +

    class ZWaveScene(ZWaveObject): 

    +

        """ 

    +

        Represents a single scene within the Z-Wave Network 

    +

        """ 

    +

     

    +

        def __init__(self, scene_id, network=None): 

    +

            """ 

    +

            Initialize zwave scene 

     

    -

            """ 

    -

            ZWaveObject.__init__(self, scene_id, network) 

    -

            logger.debug("Create object scene (scene_id:%s)", scene_id) 

    -

            self.values = dict() 

    +

            :param scene_id: ID of the scene 

    +

            :type scene_id: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the scene. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'scene_id: [%s] label: [%s]' % (self.scene_id, self.label) 

    +

            """ 

    +

            ZWaveObject.__init__(self, scene_id, network) 

    +

            logger.debug("Create object scene (scene_id:%s)", scene_id) 

    +

            self.values = dict() 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the scene. 

     

    -

        @property 

    -

        def scene_id(self): 

    -

            """ 

    -

            The id of the scene. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'scene_id: [%s] label: [%s]' % (self.scene_id, self.label) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._object_id 

    +

        @property 

    +

        def scene_id(self): 

    +

            """ 

    +

            The id of the scene. 

     

    -

        @property 

    -

        def label(self): 

    -

            """ 

    -

            The label of the scene. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._object_id 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getSceneLabel(self.object_id) 

    +

        @property 

    +

        def label(self): 

    +

            """ 

    +

            The label of the scene. 

     

    -

        @label.setter 

    -

        def label(self, value): 

    -

            """ 

    -

            Set the label of the scene. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getSceneLabel(self.object_id) 

     

    -

            :param value: The new label of the scene 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setSceneLabel(self.object_id, value) 

    -

     

    -

        def create(self, label=None): 

    -

            """ 

    -

            Create a new zwave scene on the network and update the object_id field 

    -

            If label is set, also change the label of the scene 

    +

        @label.setter 

    +

        def label(self, value): 

    +

            """ 

    +

            Set the label of the scene. 

    +

     

    +

            :param value: The new label of the scene 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setSceneLabel(self.object_id, value) 

     

    -

            :param label: The new label 

    -

            :type label: str or None 

    -

            :returns: return the id of scene on the network. Return 0 if fails 

    -

            :rtype: int 

    +

        def create(self, label=None): 

    +

            """ 

    +

            Create a new zwave scene on the network and update the object_id field 

    +

            If label is set, also change the label of the scene 

     

    -

            """ 

    -

            scene_id = self._network.manager.createScene() 

    -

            if scene_id != 0: 

    -

                self._object_id = scene_id 

    -

                if label is not None: 

    -

                    self.label = label 

    -

            return scene_id 

    -

     

    -

        def add_value(self, value_id, value_data): 

    -

            """ 

    -

            Add a value with data value_data to the zwave scene. 

    -

     

    -

            :param value_id: The id of the value to add 

    -

            :type value_id: int 

    -

            :param value_data: The data of the value to add 

    -

            :type value_data: variable 

    +

            :param label: The new label 

    +

            :type label: str or None 

    +

            :returns: return the id of scene on the network. Return 0 if fails 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            scene_id = self._network.manager.createScene() 

    +

            if scene_id != 0: 

    +

                self._object_id = scene_id 

    +

                if label is not None: 

    +

                    self.label = label 

    +

            return scene_id 

    +

     

    +

        def add_value(self, value_id, value_data): 

    +

            """ 

    +

            Add a value with data value_data to the zwave scene. 

     

    -

            """ 

    -

            ret = self._network.manager.addSceneValue(self.scene_id, value_id, value_data) 

    -

            if ret == 1: 

    -

                return True 

    -

            return False 

    -

     

    -

        def set_value(self, value_id, value_data): 

    -

            """ 

    -

            Set a value data to value_data in the zwave scene. 

    -

     

    -

            :param value_id: The id of the value to add 

    -

            :type value_id: int 

    -

            :param value_data: The data of the value to add 

    -

            :type value_data: variable 

    +

            :param value_id: The id of the value to add 

    +

            :type value_id: int 

    +

            :param value_data: The data of the value to add 

    +

            :type value_data: variable 

    +

     

    +

            """ 

    +

            ret = self._network.manager.addSceneValue(self.scene_id, value_id, value_data) 

    +

            if ret == 1: 

    +

                return True 

    +

            return False 

    +

     

    +

        def set_value(self, value_id, value_data): 

    +

            """ 

    +

            Set a value data to value_data in the zwave scene. 

     

    -

            """ 

    -

            ret = self._network.manager.setSceneValue(self.scene_id, value_id, value_data) 

    -

            if ret == 1: 

    -

                return True 

    -

            return False 

    -

     

    -

        def get_values(self): 

    -

            """ 

    -

            Get all the values of the scene 

    -

     

    -

            :returns: A dict of values : {value_id={'value'=ZWaveValue, 'data'=data}, ...}. 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret = dict() 

    -

            values = self._network.manager.sceneGetValues(self.scene_id) 

    -

            if values is None: 

    -

                return ret 

    -

            for val in values: 

    -

                value = self._network.get_value(val) 

    -

                ret[val] = {'value':value, 'data':values[val]} 

    -

            return ret 

    -

     

    -

        def get_values_by_node(self): 

    -

            """ 

    -

            Get all the values of the scene grouped by nodes 

    -

     

    -

            :returns: A dict of values : {node_id={value_id={'value'=ZWaveValue, 'data'=data}, ...},...}. 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret = dict() 

    -

            values = self._network.manager.sceneGetValues(self.scene_id) 

    -

            if values is None: 

    -

                return ret 

    -

            for val in values: 

    -

                value = self._network.get_value(val) 

    -

                if value is not None: 

    -

                    if value.node.node_id not in ret: 

    -

                        ret[value.node.node_id] = {} 

    -

                    ret[value.node.node_id][val] = {'value':value, 'data':values[val]} 

    -

            return ret 

    -

     

    -

        def remove_value(self, value_id): 

    -

            """ 

    -

            Remove a value from the scene. 

    -

     

    -

            :param value_id: The id of the value to change 

    -

            :type value_id: int 

    -

            :returns: True if the scene is removed. False otherwise. 

    -

            :rtype: bool 

    +

            :param value_id: The id of the value to add 

    +

            :type value_id: int 

    +

            :param value_data: The data of the value to add 

    +

            :type value_data: variable 

    +

     

    +

            """ 

    +

            ret = self._network.manager.setSceneValue(self.scene_id, value_id, value_data) 

    +

            if ret == 1: 

    +

                return True 

    +

            return False 

    +

     

    +

        def get_values(self): 

    +

            """ 

    +

            Get all the values of the scene 

    +

     

    +

            :returns: A dict of values : {value_id={'value'=ZWaveValue, 'data'=data}, ...}. 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret = dict() 

    +

            values = self._network.manager.sceneGetValues(self.scene_id) 

    +

            if values is None: 

    +

                return ret 

    +

            for val in values: 

    +

                value = self._network.get_value(val) 

    +

                ret[val] = {'value':value, 'data':values[val]} 

    +

            return ret 

    +

     

    +

        def get_values_by_node(self): 

    +

            """ 

    +

            Get all the values of the scene grouped by nodes 

    +

     

    +

            :returns: A dict of values : {node_id={value_id={'value'=ZWaveValue, 'data'=data}, ...},...}. 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret = dict() 

    +

            values = self._network.manager.sceneGetValues(self.scene_id) 

    +

            if values is None: 

    +

                return ret 

    +

            for val in values: 

    +

                value = self._network.get_value(val) 

    +

                if value is not None: 

    +

                    if value.node.node_id not in ret: 

    +

                        ret[value.node.node_id] = {} 

    +

                    ret[value.node.node_id][val] = {'value':value, 'data':values[val]} 

    +

            return ret 

    +

     

    +

        def remove_value(self, value_id): 

    +

            """ 

    +

            Remove a value from the scene. 

     

    -

            """ 

    -

            return self._network.manager.removeSceneValue(self.scene_id, value_id) 

    -

     

    -

        def activate(self): 

    -

            """ 

    -

            Activate the zwave scene. 

    -

     

    -

            :returns: True if the scene is activated. False otherwise. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.activateScene(self.object_id) 

    -

     

    -

        def to_dict(self, kvals=True): 

    -

            """ 

    -

            Return a dict representation of the node. 

    -

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            ret['label'] = self.label 

    -

            ret['scene_id'] = self.scene_id 

    -

            if kvals == True and self.network.dbcon is not None: 

    -

                vals = self.kvals 

    -

                for key in vals.keys(): 

    -

                    ret[key]=vals[key] 

    -

            return ret 

    +

            :param value_id: The id of the value to change 

    +

            :type value_id: int 

    +

            :returns: True if the scene is removed. False otherwise. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.removeSceneValue(self.scene_id, value_id) 

    +

     

    +

        def activate(self): 

    +

            """ 

    +

            Activate the zwave scene. 

    +

     

    +

            :returns: True if the scene is activated. False otherwise. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.activateScene(self.object_id) 

    +

     

    +

        def to_dict(self, extras=['kvals']): 

    +

            """ 

    +

            Return a dict representation of the node. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret={} 

    +

            ret['label'] = self.label 

    +

            ret['scene_id'] = self.scene_id 

    +

            if 'kvals' in extras and self.network.dbcon is not None: 

    +

                vals = self.kvals 

    +

                for key in vals.keys(): 

    +

                    ret[key]=vals[key] 

    +

            return ret 

    @@ -131,23 +136,28 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

     

    -

    class Singleton(type): 

    -

        """ Singleton metaclass 

    -

        """ 

    -

        def __init__(self, *args, **kwargs): 

    -

            """ Init the metaclass 

    -

            @ivar __instances: instance of the class 

    -

            @type __instance: object 

    -

            """ 

    -

            super(Singleton, self).__init__(*args, **kwargs) 

    -

     

    -

            self.__instance = None 

    -

     

    -

        def __call__(self, *args, **kwargs): 

    -

            if self.__instance is None: 

    -

                self.__instance = super(Singleton, self).__call__(*args, **kwargs) 

    -

            return self.__instance 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

     

    +

    class Singleton(type): 

    +

        """ Singleton metaclass 

    +

        """ 

    +

        def __init__(self, *args, **kwargs): 

    +

            """ Init the metaclass 

    +

            @ivar __instances: instance of the class 

    +

            @type __instance: object 

    +

            """ 

    +

            super(Singleton, self).__init__(*args, **kwargs) 

    +

     

    +

            self.__instance = None 

    +

     

    +

        def __call__(self, *args, **kwargs): 

    +

            if self.__instance is None: 

    +

                self.__instance = super(Singleton, self).__call__(*args, **kwargs) 

    +

            return self.__instance 

    @@ -641,533 +656,548 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    from openzwave.object import ZWaveObject 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    # TODO: don't report controller node as sleeping 

    -

    # TODO: allow value identification by device/index/instance 

    -

    class ZWaveValue(ZWaveObject): 

    -

        """ 

    -

        Represents a single value. 

    -

        """ 

    -

        def __init__(self, value_id, network=None, parent=None): 

    -

            """ 

    -

            Initialize value 

    -

     

    -

            .. code-block:: python 

    -

     

    -

                    n['valueId'] = {'home_id' : v.GetHomeId(), 

    -

                        * 'parent_id' : v.GetNodeId(), 

    -

                        * 'commandClass' : PyManager.COMMAND_CLASS_DESC[v.GetCommandClassId()], 

    -

                        * 'instance' : v.GetInstance(), 

    -

                        * 'index' : v.GetIndex(), 

    -

                        * 'id' : v.GetId(), 

    -

                        * 'genre' : PyGenres[v.GetGenre()], 

    -

                        * 'type' : PyValueTypes[v.GetType()], 

    -

                        * #'value' : value.c_str(), 

    -

                        * 'value' : getValueFromType(manager,v.GetId()), 

    -

                        * 'label' : label.c_str(), 

    -

                        * 'units' : units.c_str(), 

    -

                        * 'readOnly': manager.IsValueReadOnly(v), 

    -

                        } 

    -

     

    -

            :param value_id: ID of the value 

    -

            :type value_id: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    -

            """ 

    -

            ZWaveObject.__init__(self, value_id, network=network) 

    -

            logger.debug("Create object value (valueId:%s)", value_id) 

    -

            self._parent = parent 

    -

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the value. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'home_id: [%s] id: [%s] parent_id: [%s] label: [%s] data: [%s]' % \ 

    -

              (self._network.home_id_str, self._object_id, self.parent_id, self.label, self.data) 

    -

     

    -

        @property 

    -

        def parent_id(self): 

    -

            """ 

    -

            Get the parent_id of the value. 

    -

            """ 

    -

            return self._parent.object_id 

    -

     

    -

        @property 

    -

        def value_id(self): 

    -

            """ 

    -

            Get the value_id of the value. 

    -

            """ 

    -

            return self._object_id 

    -

     

    -

        @property 

    -

        def id_on_network(self): 

    -

            """ 

    -

            Get an unique id for this value. 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from openzwave.object import ZWaveObject 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    # TODO: don't report controller node as sleeping 

    +

    # TODO: allow value identification by device/index/instance 

    +

    class ZWaveValue(ZWaveObject): 

    +

        """ 

    +

        Represents a single value. 

    +

        """ 

    +

        def __init__(self, value_id, network=None, parent=None): 

    +

            """ 

    +

            Initialize value 

    +

     

    +

            .. code-block:: python 

    +

     

    +

                    n['valueId'] = {'home_id' : v.GetHomeId(), 

    +

                        * 'parent_id' : v.GetNodeId(), 

    +

                        * 'commandClass' : PyManager.COMMAND_CLASS_DESC[v.GetCommandClassId()], 

    +

                        * 'instance' : v.GetInstance(), 

    +

                        * 'index' : v.GetIndex(), 

    +

                        * 'id' : v.GetId(), 

    +

                        * 'genre' : PyGenres[v.GetGenre()], 

    +

                        * 'type' : PyValueTypes[v.GetType()], 

    +

                        * #'value' : value.c_str(), 

    +

                        * 'value' : getValueFromType(manager,v.GetId()), 

    +

                        * 'label' : label.c_str(), 

    +

                        * 'units' : units.c_str(), 

    +

                        * 'readOnly': manager.IsValueReadOnly(v), 

    +

                        } 

    +

     

    +

            :param value_id: ID of the value 

    +

            :type value_id: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

    +

            """ 

    +

            ZWaveObject.__init__(self, value_id, network=network) 

    +

            logger.debug("Create object value (valueId:%s)", value_id) 

    +

            self._parent = parent 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the value. 

    +

     

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'home_id: [%s] id: [%s] parent_id: [%s] label: [%s] data: [%s]' % \ 

    +

              (self._network.home_id_str, self._object_id, self.parent_id, self.label, self.data) 

    +

     

    +

        @property 

    +

        def parent_id(self): 

    +

            """ 

    +

            Get the parent_id of the value. 

    +

            """ 

    +

            return self._parent.object_id 

    +

     

    +

        @property 

    +

        def value_id(self): 

    +

            """ 

    +

            Get the value_id of the value. 

    +

            """ 

    +

            return self._object_id 

     

    -

            The scenes use this to retrieve values 

    -

     

    -

            .. code-block:: xml 

    -

     

    -

                    <Scene id="1" label="scene1"> 

    -

                            <Value homeId="0x014d0ef5" nodeId="2" genre="user" commandClassId="38" instance="1" index="0" type="byte">54</Value> 

    -

                    </Scene> 

    -

     

    -

            The format is : 

    -

     

    -

                home_id.node_id.command_class.instance.index 

    -

     

    -

            """ 

    -

            separator = self._network.id_separator 

    -

            return "%0.8x%s%s%s%0.2x%s%s%s%s" % (self._network.home_id, \ 

    -

              separator, self.parent_id, \ 

    -

              separator, self.command_class, \ 

    -

              separator, self.instance, \ 

    -

              separator, self.index) 

    -

     

    -

        @property 

    -

        def node(self): 

    -

            """ 

    -

            The value_id of the value. 

    -

            """ 

    -

            return self._parent 

    -

     

    -

        @property 

    -

        def label(self): 

    -

            """ 

    -

            Get the label of the value. 

    +

        @property 

    +

        def id_on_network(self): 

    +

            """ 

    +

            Get an unique id for this value. 

    +

     

    +

            The scenes use this to retrieve values 

    +

     

    +

            .. code-block:: xml 

    +

     

    +

                    <Scene id="1" label="scene1"> 

    +

                            <Value homeId="0x014d0ef5" nodeId="2" genre="user" commandClassId="38" instance="1" index="0" type="byte">54</Value> 

    +

                    </Scene> 

    +

     

    +

            The format is : 

    +

     

    +

                home_id.node_id.command_class.instance.index 

    +

     

    +

            """ 

    +

            separator = self._network.id_separator 

    +

            return "%0.8x%s%s%s%0.2x%s%s%s%s" % (self._network.home_id, \ 

    +

              separator, self.parent_id, \ 

    +

              separator, self.command_class, \ 

    +

              separator, self.instance, \ 

    +

              separator, self.index) 

    +

     

    +

        @property 

    +

        def node(self): 

    +

            """ 

    +

            The value_id of the value. 

    +

            """ 

    +

            return self._parent 

     

    -

            :rtype: str 

    -

            """ 

    -

            return self._network.manager.getValueLabel(self.value_id) 

    -

     

    -

        @label.setter 

    -

        def label(self, value): 

    -

            """ 

    -

            Set the label of the value. 

    +

        @property 

    +

        def label(self): 

    +

            """ 

    +

            Get the label of the value. 

    +

     

    +

            :rtype: str 

    +

            """ 

    +

            return self._network.manager.getValueLabel(self.value_id) 

     

    -

            :param value: The new label value 

    -

            :type value: str 

    -

            """ 

    -

            self._network.manager.setValueLabel(self.value_id, value) 

    +

        @label.setter 

    +

        def label(self, value): 

    +

            """ 

    +

            Set the label of the value. 

     

    -

        @property 

    -

        def help(self): 

    -

            """ 

    -

            Gets a help string describing the value's purpose and usage. 

    +

            :param value: The new label value 

    +

            :type value: str 

    +

            """ 

    +

            self._network.manager.setValueLabel(self.value_id, value) 

     

    -

            :rtype: str 

    -

            """ 

    -

            return self._network.manager.getValueHelp(self.value_id) 

    -

     

    -

        @help.setter 

    -

        def help(self, value): 

    -

            """ 

    -

            Sets a help string describing the value's purpose and usage.. 

    +

        @property 

    +

        def help(self): 

    +

            """ 

    +

            Gets a help string describing the value's purpose and usage. 

    +

     

    +

            :rtype: str 

    +

            """ 

    +

            return self._network.manager.getValueHelp(self.value_id) 

     

    -

            :param value: The new help value 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setValueHelp(self.value_id, value) 

    -

     

    -

        @property 

    -

        def units(self): 

    -

            """ 

    -

            Gets the units that the value is measured in. 

    +

        @help.setter 

    +

        def help(self, value): 

    +

            """ 

    +

            Sets a help string describing the value's purpose and usage.. 

    +

     

    +

            :param value: The new help value 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setValueHelp(self.value_id, value) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueUnits(self.value_id) 

    +

        @property 

    +

        def units(self): 

    +

            """ 

    +

            Gets the units that the value is measured in. 

     

    -

        @units.setter 

    -

        def units(self, value): 

    -

            """ 

    -

            Sets the units that the value is measured in. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueUnits(self.value_id) 

     

    -

            :param value: The new units value 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setValueUnits(self.value_id, value) 

    -

     

    -

        @property 

    -

        def max(self): 

    -

            """ 

    -

            Gets the maximum that this value may contain. 

    +

        @units.setter 

    +

        def units(self, value): 

    +

            """ 

    +

            Sets the units that the value is measured in. 

    +

     

    +

            :param value: The new units value 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setValueUnits(self.value_id, value) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueMax(self.value_id) 

    +

        @property 

    +

        def max(self): 

    +

            """ 

    +

            Gets the maximum that this value may contain. 

     

    -

        @property 

    -

        def min(self): 

    -

            """ 

    -

            Gets the minimum that this value may contain. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueMax(self.value_id) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueMin(self.value_id) 

    +

        @property 

    +

        def min(self): 

    +

            """ 

    +

            Gets the minimum that this value may contain. 

     

    -

        @property 

    -

        def type(self): 

    -

            """ 

    -

            Get the type of the value.  The type describes the data held by the value 

    -

            and enables the user to select the correct value accessor method in the 

    -

            Manager class. 

    -

     

    -

            :return: type of the value 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueType(self.value_id) 

    -

     

    -

        @property 

    -

        def genre(self): 

    -

            """ 

    -

            Get the genre of the value.  The genre classifies a value to enable 

    -

            low-level system or configuration parameters to be filtered out 

    -

            by the application 

    -

     

    -

            :return: genre of the value (Basic, User, Config, System) 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueGenre(self.value_id) 

    -

     

    -

        @property 

    -

        def index(self): 

    -

            """ 

    -

            Get the value index.  The index is used to identify one of multiple 

    -

            values created and managed by a command class.  In the case of configurable 

    -

            parameters (handled by the configuration command class), the index is the 

    -

            same as the parameter ID. 

    -

     

    -

            :return: index of the value 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueIndex(self.value_id) 

    -

     

    -

        @property 

    -

        def instance(self): 

    -

            """ 

    -

            Get the command class instance of this value.  It is possible for there to be 

    -

            multiple instances of a command class, although currently it appears that 

    -

            only the SensorMultilevel command class ever does this. 

    -

     

    -

            :return: instance of the value 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueInstance(self.value_id) 

    -

     

    -

        @property 

    -

        def data(self): 

    -

            """ 

    -

            Get the current data of the value. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueMin(self.value_id) 

    +

     

    +

        @property 

    +

        def type(self): 

    +

            """ 

    +

            Get the type of the value.  The type describes the data held by the value 

    +

            and enables the user to select the correct value accessor method in the 

    +

            Manager class. 

    +

     

    +

            :return: type of the value 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueType(self.value_id) 

    +

     

    +

        @property 

    +

        def genre(self): 

    +

            """ 

    +

            Get the genre of the value.  The genre classifies a value to enable 

    +

            low-level system or configuration parameters to be filtered out 

    +

            by the application 

    +

     

    +

            :return: genre of the value (Basic, User, Config, System) 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueGenre(self.value_id) 

    +

     

    +

        @property 

    +

        def index(self): 

    +

            """ 

    +

            Get the value index.  The index is used to identify one of multiple 

    +

            values created and managed by a command class.  In the case of configurable 

    +

            parameters (handled by the configuration command class), the index is the 

    +

            same as the parameter ID. 

    +

     

    +

            :return: index of the value 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueIndex(self.value_id) 

    +

     

    +

        @property 

    +

        def instance(self): 

    +

            """ 

    +

            Get the command class instance of this value.  It is possible for there to be 

    +

            multiple instances of a command class, although currently it appears that 

    +

            only the SensorMultilevel command class ever does this. 

    +

     

    +

            :return: instance of the value 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueInstance(self.value_id) 

     

    -

            :return: The data of the value 

    -

            :rtype: depending of the type of the value 

    -

     

    -

            """ 

    -

            return self._network.manager.getValue(self.value_id) 

    -

     

    -

        @data.setter 

    -

        def data(self, value): 

    -

            """ 

    -

            Set the data of the value. 

    +

        @property 

    +

        def data(self): 

    +

            """ 

    +

            Get the current data of the value. 

    +

     

    +

            :return: The data of the value 

    +

            :rtype: depending of the type of the value 

    +

     

    +

            """ 

    +

            return self._network.manager.getValue(self.value_id) 

     

    -

            Best practice: Use check_data before setting it: 

    -

     

    -

            new_val = value.check_data(some_data) 

    -

            if new_val != None: 

    -

                value.data = new_val 

    -

     

    -

            :param value: The new data value 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setValue(self.value_id, value) 

    -

     

    -

        @property 

    -

        def data_as_string(self): 

    -

            """ 

    -

            Get the value data as String. 

    +

        @data.setter 

    +

        def data(self, value): 

    +

            """ 

    +

            Set the data of the value. 

    +

     

    +

            Best practice: Use check_data before setting it: 

    +

     

    +

            new_val = value.check_data(some_data) 

    +

            if new_val != None: 

    +

                value.data = new_val 

    +

     

    +

            :param value: The new data value 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setValue(self.value_id, value) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueAsString(self.value_id) 

    +

        @property 

    +

        def data_as_string(self): 

    +

            """ 

    +

            Get the value data as String. 

     

    -

        @property 

    -

        def data_items(self): 

    -

            """ 

    -

            When type of value is list, data_items contains a list of valid values 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueAsString(self.value_id) 

     

    -

            :return: The valid values or a help string 

    -

            :rtype: string or set 

    -

     

    -

            """ 

    -

            if self.is_read_only: 

    -

                return "Read only" 

    -

            if self.type == "Bool": 

    -

                return "True or False" 

    -

            elif self.type == "Byte": 

    -

                return "A byte between %s and %s" % (self.min, self.max) 

    -

            elif self.type == "Decimal": 

    -

                return "A decimal" 

    -

            elif self.type == "Int": 

    -

                return "An integer between %s and %s" % (self.min, self.max) 

    -

            elif self.type == "Short": 

    -

                return "A short between %s and %s" % (self.min, self.max) 

    -

            elif self.type == "String": 

    -

                return "A string" 

    -

            elif self.type == "Button": 

    -

                return "True or False" 

    -

            elif self.type == "List": 

    -

                return self._network.manager.getValueListItems(self.value_id) 

    -

            else: 

    -

                return "Unknown" 

    -

     

    -

        def check_data(self, data): 

    -

            """ 

    -

            Check that data is correct for this value. 

    -

            Return the data in a correct type. None is data is incorrect. 

    +

        @property 

    +

        def data_items(self): 

    +

            """ 

    +

            When type of value is list, data_items contains a list of valid values 

    +

     

    +

            :return: The valid values or a help string 

    +

            :rtype: string or set 

    +

     

    +

            """ 

    +

            if self.is_read_only: 

    +

                return "Read only" 

    +

            if self.type == "Bool": 

    +

                return "True or False" 

    +

            elif self.type == "Byte": 

    +

                return "A byte between %s and %s" % (self.min, self.max) 

    +

            elif self.type == "Decimal": 

    +

                return "A decimal" 

    +

            elif self.type == "Int": 

    +

                return "An integer between %s and %s" % (self.min, self.max) 

    +

            elif self.type == "Short": 

    +

                return "A short between %s and %s" % (self.min, self.max) 

    +

            elif self.type == "String": 

    +

                return "A string" 

    +

            elif self.type == "Button": 

    +

                return "True or False" 

    +

            elif self.type == "List": 

    +

                return self._network.manager.getValueListItems(self.value_id) 

    +

            else: 

    +

                return "Unknown" 

     

    -

            :param data:  The data value to check 

    -

            :type data: lambda 

    -

            :return: A variable of the good type if the data is correct. None otherwise. 

    -

            :rtype: variable 

    +

        def check_data(self, data): 

    +

            """ 

    +

            Check that data is correct for this value. 

    +

            Return the data in a correct type. None is data is incorrect. 

     

    -

            """ 

    -

            if self.is_read_only: 

    -

                return None 

    -

            new_data = None 

    -

            logger.debug("check_data type :%s", self.type) 

    -

            if self.type == "Bool": 

    -

                new_data = data 

    -

                if isinstance(data, basestring): 

    -

                    if data == "False" or data == "false" or data == "0": 

    -

                        new_data = False 

    -

                    else: 

    -

                        new_data = True 

    -

            elif self.type == "Byte": 

    -

                try: 

    -

                    new_data = int(data) 

    -

                except: 

    -

                    new_data = None 

    -

                if new_data is not None: 

    -

                    if new_data < 0: 

    -

                        new_data = 0 

    -

                    elif new_data > 255: 

    -

                        new_data = 255 

    -

            elif self.type == "Decimal": 

    -

                try: 

    -

                    new_data = float(data) 

    -

                except: 

    -

                    new_data = None 

    -

            elif self.type == "Int": 

    +

            :param data:  The data value to check 

    +

            :type data: lambda 

    +

            :return: A variable of the good type if the data is correct. None otherwise. 

    +

            :rtype: variable 

    +

     

    +

            """ 

    +

            if self.is_read_only: 

    +

                return None 

    +

            new_data = None 

    +

            logger.debug("check_data type :%s", self.type) 

    +

            if self.type == "Bool": 

    +

                new_data = data 

    +

                if isinstance(data, basestring): 

    +

                    if data == "False" or data == "false" or data == "0": 

    +

                        new_data = False 

    +

                    else: 

    +

                        new_data = True 

    +

            elif self.type == "Byte": 

    +

                try: 

    +

                    new_data = int(data) 

    +

                except: 

    +

                    new_data = None 

    +

                if new_data is not None: 

    +

                    if new_data < 0: 

    +

                        new_data = 0 

    +

                    elif new_data > 255: 

    +

                        new_data = 255 

    +

            elif self.type == "Decimal": 

                try: 

    -

                    new_data = int(data) 

    +

                    new_data = float(data) 

                except: 

                    new_data = None 

    -

                if new_data is not None: 

    -

                    if new_data < -2147483648: 

    -

                        new_data = -2147483648 

    -

                    elif new_data > 2147483647: 

    -

                        new_data = 2147483647 

    -

            elif self.type == "Short": 

    -

                try: 

    -

                    new_data = int(data) 

    -

                except: 

    -

                    new_data = None 

    -

                if new_data is not None: 

    -

                    if new_data < -32768: 

    -

                        new_data = -32768 

    -

                    elif new_data > 32767: 

    -

                        new_data = 32767 

    -

            elif self.type == "String": 

    -

                new_data = data 

    -

            elif self.type == "Button": 

    -

                new_data = data 

    -

                if isinstance(data, basestring): 

    -

                    if data == "False" or data == "false" or data == "0": 

    -

                        new_data = False 

    -

                    else: 

    -

                        new_data = True 

    -

            elif self.type == "List": 

    -

                if isinstance(data, basestring): 

    -

                    if data in self.data_items: 

    -

                        new_data = data 

    -

                    else: 

    -

                        new_data = None 

    -

            return new_data 

    -

     

    -

        @property 

    -

        def is_set(self): 

    -

            """ 

    -

            Test whether the value has been set. 

    +

            elif self.type == "Int": 

    +

                try: 

    +

                    new_data = int(data) 

    +

                except: 

    +

                    new_data = None 

    +

                if new_data is not None: 

    +

                    if new_data < -2147483648: 

    +

                        new_data = -2147483648 

    +

                    elif new_data > 2147483647: 

    +

                        new_data = 2147483647 

    +

            elif self.type == "Short": 

    +

                try: 

    +

                    new_data = int(data) 

    +

                except: 

    +

                    new_data = None 

    +

                if new_data is not None: 

    +

                    if new_data < -32768: 

    +

                        new_data = -32768 

    +

                    elif new_data > 32767: 

    +

                        new_data = 32767 

    +

            elif self.type == "String": 

    +

                new_data = data 

    +

            elif self.type == "Button": 

    +

                new_data = data 

    +

                if isinstance(data, basestring): 

    +

                    if data == "False" or data == "false" or data == "0": 

    +

                        new_data = False 

    +

                    else: 

    +

                        new_data = True 

    +

            elif self.type == "List": 

    +

                if isinstance(data, basestring): 

    +

                    if data in self.data_items: 

    +

                        new_data = data 

    +

                    else: 

    +

                        new_data = None 

    +

            return new_data 

     

    -

            :return: True if the value has actually been set by a status message 

    -

                     from the device, rather than simply being the default. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isValueSet(self.value_id) 

    -

     

    -

        @property 

    -

        def is_read_only(self): 

    -

            """ 

    -

            Test whether the value is read-only. 

    +

        @property 

    +

        def is_set(self): 

    +

            """ 

    +

            Test whether the value has been set. 

    +

     

    +

            :return: True if the value has actually been set by a status message 

    +

                     from the device, rather than simply being the default. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isValueSet(self.value_id) 

     

    -

            :return: True if the value cannot be changed by the user. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isValueReadOnly(self.value_id) 

    -

     

    -

        @property 

    -

        def is_write_only(self): 

    -

            """ 

    -

            Test whether the value is write-only. 

    +

        @property 

    +

        def is_read_only(self): 

    +

            """ 

    +

            Test whether the value is read-only. 

    +

     

    +

            :return: True if the value cannot be changed by the user. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isValueReadOnly(self.value_id) 

     

    -

            :return: True if the value can only be written to and not read. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isValueWriteOnly(self.value_id) 

    -

     

    -

        def enable_poll(self, intensity=1): 

    -

            """ 

    -

            Enable the polling of a device's state. 

    -

     

    -

            :param intensity: The intensity of the poll 

    -

            :type intensity: int 

    -

            :return: True if polling was enabled. 

    -

            :rtype: bool 

    +

        @property 

    +

        def is_write_only(self): 

    +

            """ 

    +

            Test whether the value is write-only. 

    +

     

    +

            :return: True if the value can only be written to and not read. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isValueWriteOnly(self.value_id) 

    +

     

    +

        def enable_poll(self, intensity=1): 

    +

            """ 

    +

            Enable the polling of a device's state. 

     

    -

            """ 

    -

            return self._network.manager.enablePoll(self.value_id, intensity) 

    -

     

    -

        def disable_poll(self): 

    -

            """ 

    -

            Disable poll off this value. 

    -

     

    -

            :return: True if polling was disabled. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.disablePoll(self.value_id) 

    -

     

    -

        @property 

    -

        def poll_intensity(self): 

    -

            """ 

    -

            The poll intensity of the value. 

    +

            :param intensity: The intensity of the poll 

    +

            :type intensity: int 

    +

            :return: True if polling was enabled. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.enablePoll(self.value_id, intensity) 

    +

     

    +

        def disable_poll(self): 

    +

            """ 

    +

            Disable poll off this value. 

    +

     

    +

            :return: True if polling was disabled. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.disablePoll(self.value_id) 

     

    -

            :returns: 0=none, 1=every time through the list, 2-every other time, etc 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            #always ask to manager to get poll intensity 

    -

            return self._network.manager.getPollIntensity(self.value_id) 

    -

     

    -

        @property 

    -

        def is_polled(self): 

    -

            """ 

    -

            Verify that the value is polled. 

    +

        @property 

    +

        def poll_intensity(self): 

    +

            """ 

    +

            The poll intensity of the value. 

    +

     

    +

            :returns: 0=none, 1=every time through the list, 2-every other time, etc 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            #always ask to manager to get poll intensity 

    +

            return self._network.manager.getPollIntensity(self.value_id) 

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isPolled(self.value_id) 

    +

        @property 

    +

        def is_polled(self): 

    +

            """ 

    +

            Verify that the value is polled. 

     

    -

        @property 

    -

        def command_class(self): 

    -

            """ 

    -

            The command class of the value. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isPolled(self.value_id) 

     

    -

            :returns: The command class of this value 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueCommandClass(self.value_id) 

    -

     

    -

        def refresh(self): 

    -

            """ 

    -

            Refresh the value. 

    -

     

    -

            :returns: True if the command was transmitted to controller 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.refreshValue(self.value_id) 

    -

     

    -

        @property 

    -

        def precision(self): 

    -

            """ 

    -

            Gets a float value's precision. 

    +

        @property 

    +

        def command_class(self): 

    +

            """ 

    +

            The command class of the value. 

    +

     

    +

            :returns: The command class of this value 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueCommandClass(self.value_id) 

    +

     

    +

        def refresh(self): 

    +

            """ 

    +

            Refresh the value. 

    +

     

    +

            :returns: True if the command was transmitted to controller 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.refreshValue(self.value_id) 

     

    -

            :returns: a float value's precision 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueFloatPrecision(self.value_id) 

    -

     

    -

        def is_change_verified(self): 

    -

            """ 

    -

            determine if value changes upon a refresh should be verified. 

    -

            If so, the library will immediately refresh the value a second time whenever a change is observed. 

    -

            This helps to filter out spurious data reported occasionally by some devices. 

    -

            """ 

    -

            return self._network.manager.getChangeVerified(self.value_id) 

    -

     

    -

     

    -

        def set_change_verified(self, verify): 

    -

            """ 

    -

            Sets a flag indicating whether value changes noted upon a refresh should be verified. 

    +

        @property 

    +

        def precision(self): 

    +

            """ 

    +

            Gets a float value's precision. 

    +

     

    +

            :returns: a float value's precision 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueFloatPrecision(self.value_id) 

    +

     

    +

        def is_change_verified(self): 

    +

            """ 

    +

            determine if value changes upon a refresh should be verified. 

    +

            If so, the library will immediately refresh the value a second time whenever a change is observed. 

    +

            This helps to filter out spurious data reported occasionally by some devices. 

    +

            """ 

    +

            return self._network.manager.getChangeVerified(self.value_id) 

     

    -

            If so, the library will immediately refresh the value a second time whenever a change is observed. 

    -

            This helps to filter out spurious data reported occasionally by some devices. 

    -

     

    -

            :param verify: if true, verify changes; if false, don't verify changes. 

    -

            :type verify: bool 

    -

            """ 

    -

            logger.debug('Set change verified %s for valueId [%s]', verify, self.value_id) 

    -

            self._network.manager.setChangeVerified(self.value_id, verify) 

    -

     

    -

        def to_dict(self): 

    -

            """ 

    -

            Return a dict representation of the value. 

    -

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            ret['label'] = self.label 

    -

            ret['value_id'] = self.value_id 

    -

            ret['node_id'] = self.node.node_id 

    -

            ret['units'] = self.units 

    -

            ret['data'] = self.data 

    -

            return ret 

    +

     

    +

        def set_change_verified(self, verify): 

    +

            """ 

    +

            Sets a flag indicating whether value changes noted upon a refresh should be verified. 

    +

     

    +

            If so, the library will immediately refresh the value a second time whenever a change is observed. 

    +

            This helps to filter out spurious data reported occasionally by some devices. 

    +

     

    +

            :param verify: if true, verify changes; if false, don't verify changes. 

    +

            :type verify: bool 

    +

            """ 

    +

            logger.debug('Set change verified %s for valueId [%s]', verify, self.value_id) 

    +

            self._network.manager.setChangeVerified(self.value_id, verify) 

    +

     

    +

        def to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the node. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            if 'all' in extras: 

    +

                    extras = ['kvals'] 

    +

            ret={} 

    +

            ret['label'] = self.label 

    +

            ret['value_id'] = self.value_id 

    +

            ret['node_id'] = self.node.node_id 

    +

            ret['units'] = self.units 

    +

            ret['genre'] = self.genre 

    +

            ret['data'] = self.data 

    +

            if 'kvals' in extras and self.network.dbcon is not None: 

    +

                vals = self.kvals 

    +

                for key in vals.keys(): 

    +

                    ret[key]=vals[key] 

    +

            return ret 

    @@ -675,557 +680,562 @@

     

    __author__ = 'bibi21000' 

     

    -

    from select import select 

    -

    import sys 

    -

    import os 

    -

    import urwid 

    -

    from urwid.raw_display import Screen 

    -

    #import headerpanel 

    -

    #import dirpanel 

    -

    #import setuppanel 

    -

    from traceback import format_exc 

    -

    #from ucp import UrwidCmdProc, isUCP 

    -

    #from utils import utilInit, log 

    -

    from openzwave.node import ZWaveNode 

    -

    from openzwave.value import ZWaveValue 

    -

    from openzwave.scene import ZWaveScene 

    -

    from openzwave.controller import ZWaveController 

    -

    from openzwave.network import ZWaveNetwork 

    -

    from openzwave.option import ZWaveOption 

    -

    from pyozwman.ozwsh_widgets import OldestTree 

    -

    from pyozwman.ozwsh_widgets import RootTree, RootBox, RootItem, RootDir 

    -

    from pyozwman.ozwsh_widgets import ControllerTree, ControllerBox 

    -

    from pyozwman.ozwsh_widgets import NodeTree, NodeBox 

    -

    from pyozwman.ozwsh_widgets import NodesTree, NodesBox, NodesItem 

    -

    from pyozwman.ozwsh_widgets import SensorsTree, SensorsBox, SensorsItem 

    -

    from pyozwman.ozwsh_widgets import SwitchesTree, SwitchesBox, SwitchesItem 

    -

    from pyozwman.ozwsh_widgets import DimmersTree, DimmersBox 

    -

    from pyozwman.ozwsh_widgets import ValuesTree, ValuesBox, ValuesItem 

    -

    from pyozwman.ozwsh_widgets import GroupsTree, GroupsBox, AssociationItem 

    -

    from pyozwman.ozwsh_widgets import SceneTree, SceneBox, SceneItem 

    -

    from pyozwman.ozwsh_widgets import ScenesTree, ScenesBox, ScenesItem 

    -

    from pyozwman.ozwsh_widgets import StatTree, StatBox 

    -

     

    -

    from louie import dispatcher, All 

    -

    import logging 

    -

     

    -

    MAIN_TITLE = "openzwave Shell" 

    -

    """ 

    -

    /nodes 

    -

        node_id/ 

    -

            name 

    -

            ... 

    -

            commands/ 

    -

                command_id/ 

    -

                    name 

    -

                    value_1/ 

    -

                        min 

    -

                        max 

    -

                        items 

    -

                        ... 

    -

                    value_2/ 

    -

                    value_3/ 

    -

                    value_4/ 

    -

            switches/ 

    -

            sensors/ 

    -

     

    -

    /scenes 

    -

    /controller 

    -

     

    -

    """ 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from select import select 

    +

    import sys 

    +

    import os 

    +

    import urwid 

    +

    from urwid.raw_display import Screen 

    +

    #import headerpanel 

    +

    #import dirpanel 

    +

    #import setuppanel 

    +

    from traceback import format_exc 

    +

    #from ucp import UrwidCmdProc, isUCP 

    +

    #from utils import utilInit, log 

    +

    from openzwave.node import ZWaveNode 

    +

    from openzwave.value import ZWaveValue 

    +

    from openzwave.scene import ZWaveScene 

    +

    from openzwave.controller import ZWaveController 

    +

    from openzwave.network import ZWaveNetwork 

    +

    from openzwave.option import ZWaveOption 

    +

    from pyozwman.ozwsh_widgets import OldestTree 

    +

    from pyozwman.ozwsh_widgets import RootTree, RootBox, RootItem, RootDir 

    +

    from pyozwman.ozwsh_widgets import ControllerTree, ControllerBox 

    +

    from pyozwman.ozwsh_widgets import NodeTree, NodeBox 

    +

    from pyozwman.ozwsh_widgets import NodesTree, NodesBox, NodesItem 

    +

    from pyozwman.ozwsh_widgets import SensorsTree, SensorsBox, SensorsItem 

    +

    from pyozwman.ozwsh_widgets import SwitchesTree, SwitchesBox, SwitchesItem 

    +

    from pyozwman.ozwsh_widgets import DimmersTree, DimmersBox 

    +

    from pyozwman.ozwsh_widgets import ValuesTree, ValuesBox, ValuesItem 

    +

    from pyozwman.ozwsh_widgets import GroupsTree, GroupsBox, AssociationItem 

    +

    from pyozwman.ozwsh_widgets import SceneTree, SceneBox, SceneItem 

    +

    from pyozwman.ozwsh_widgets import ScenesTree, ScenesBox, ScenesItem 

    +

    from pyozwman.ozwsh_widgets import StatTree, StatBox 

    +

     

    +

    from louie import dispatcher, All 

    +

    import logging 

    +

     

    +

    MAIN_TITLE = "openzwave Shell" 

    +

    """ 

    +

    /nodes 

    +

        node_id/ 

    +

            name 

    +

            ... 

    +

            commands/ 

    +

                command_id/ 

    +

                    name 

    +

                    value_1/ 

    +

                        min 

    +

                        max 

    +

                        items 

    +

                        ... 

    +

                    value_2/ 

    +

                    value_3/ 

    +

                    value_4/ 

    +

            switches/ 

    +

            sensors/ 

     

    -

    class StatusBar(urwid.WidgetWrap): 

    -

        def __init__(self, window): 

    -

            self.window = window 

    -

            self.statusbar = "%s" 

    -

            self.statusbar_urwid = urwid.Text(self.statusbar % "", wrap='clip') 

    -

            self.cmd = "$ %s" 

    -

            self.cmd_urwid = urwid.Edit(self.cmd % "") 

    -

            display_widget = urwid.Pile([ \ 

    -

                urwid.Divider("-"), 

    -

                self.statusbar_urwid, \ 

    -

                urwid.Divider("-"), 

    -

                self.cmd_urwid, \ 

    -

                ]) 

    -

            urwid.WidgetWrap.__init__(self, display_widget) 

    -

     

    -

        def update(self, status=None, cmd=None): 

    -

            if status != None: 

    -

                self.statusbar_urwid.set_text(self.statusbar % status) 

    -

            if cmd != None: 

    -

                self.set_command(cmd) 

    -

     

    -

        def get_command(self): 

    -

            return self.cmd_urwid.get_edit_text() 

    -

     

    -

        def set_command(self, cmd): 

    -

            self.cmd_urwid.set_edit_text(cmd) 

    -

     

    -

    class HeaderBar(urwid.WidgetWrap): 

    -

        def __init__(self, window): 

    -

            self.window = window 

    -

            self.cwd = "Path : %s" 

    -

            self.cwd_urwid = urwid.Text(self.cwd % "") 

    -

            display_widget = urwid.Pile([ \ 

    -

                urwid.AttrWrap(urwid.Text(MAIN_TITLE), 'header'),\ 

    -

                urwid.Divider("-"), \ 

    -

                self.cwd_urwid, \ 

    -

                urwid.Divider("-"), \ 

    -

                ]) 

    -

            urwid.WidgetWrap.__init__(self, display_widget) 

    -

     

    -

        def update(self, cwd=None): 

    -

            if cwd != None: 

    -

                self.cwd_urwid.set_text(self.cwd % cwd) 

    -

     

    -

    class MainWindow(Screen): 

    -

        def __init__(self, device=None, footer=True, loglevel="Info", user_path=".", config_path=None): 

    -

            Screen.__init__(self) 

    -

            self.device = device 

    -

            self.footer_display = footer 

    -

            self.loglevel = logging.INFO 

    -

            self.loglevel_ow = loglevel 

    -

            self.user_path = user_path 

    -

            self.config_path = config_path 

    -

            self._define_log() 

    -

            self._define_screen() 

    -

            self._connect_louie() 

    -

            self._start_network() 

    -

     

    -

        def _define_log(self): 

    -

            hdlr = logging.FileHandler('ozwsh.log') 

    -

            formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 

    -

            hdlr.setFormatter(formatter) 

    -

            if self.loglevel_ow == "Debug": 

    -

                self.loglevel = logging.DEBUG 

    -

            ozwlog = logging.getLogger('openzwave') 

    -

            ozwlog.setLevel(self.loglevel) 

    -

            ozwlog.addHandler(hdlr) 

    -

            lozwlog = logging.getLogger('libopenzwave') 

    -

            lozwlog.setLevel(self.loglevel) 

    -

            lozwlog.addHandler(hdlr) 

    -

            self.log = logging.getLogger('pyozwman') 

    -

            self.log.setLevel(self.loglevel) 

    -

            self.log.addHandler(hdlr) 

    -

            self.log.info("="*15 + " start " + "="*15) 

    -

     

    -

        def _define_screen(self): 

    -

            self._palette = [("title", "yellow", "dark cyan"), 

    -

            ("keys", "dark blue", "light gray"), 

    -

            ("message", "light cyan", "dark green"), 

    -

            ("linenr", "light blue", "dark cyan"), 

    -

            ("input", "light gray", "black"), 

    -

            ("input2", "dark red", "light gray"), 

    -

            ("focus", "black", "light gray", "bold"), 

    -

            ("dialog", "black", "light gray", "bold"), 

    -

            ("file", "light green", "dark blue"), 

    -

            ("errortxt", "dark red", "dark blue"), 

    -

            ("selectedfile", "yellow", "dark blue"), 

    -

            ("selectedfocus", "yellow", "light gray", "bold"), 

    -

            ("dir", "light gray", "dark blue"), 

    -

            ("fileedit", "light green", "dark red"), 

    -

            ('edit', 'yellow', 'dark blue'), 

    -

            ('body','default', 'default'), 

    -

            ('foot','dark cyan', 'dark blue', 'bold'), 

    -

            ('shadow','white','black'), 

    -

            ('border','black','dark blue'), 

    -

            ('error','black','dark red'), 

    -

            ('FxKey','light cyan', 'dark blue', 'underline')] 

    -

            self.network = None 

    -

            self.controller = None 

    -

            self.root_box = RootBox(self, None, "body") 

    -

            self.stat_box = StatBox(self, self.root_box, "body") 

    -

            self.controller_box = ControllerBox(self, self.root_box, "body") 

    -

            self.scenes_box = ScenesBox(self, self.root_box, "body") 

    -

            self.scene_box = SceneBox(self, self.scenes_box, "body") 

    -

            self.nodes_box = NodesBox(self, self.root_box, "body") 

    -

            self.switches_box = SwitchesBox(self, self.nodes_box, "body") 

    -

            self.dimmers_box = DimmersBox(self, self.nodes_box, "body") 

    -

            self.sensors_box = SensorsBox(self, self.nodes_box, "body") 

    -

            self.node_box = NodeBox(self, self.nodes_box, "body") 

    -

            self.values_box = ValuesBox(self, self.node_box, "body") 

    -

            self.groups_box = GroupsBox(self, self.node_box, "body") 

    -

     

    -

            self.status_bar = StatusBar(self) 

    -

            self.header_bar = HeaderBar(self) 

    -

     

    -

            self.framefocus = 'footer' 

    +

    /scenes 

    +

    /controller 

    +

     

    +

    """ 

    +

     

    +

    class StatusBar(urwid.WidgetWrap): 

    +

        def __init__(self, window): 

    +

            self.window = window 

    +

            self.statusbar = "%s" 

    +

            self.statusbar_urwid = urwid.Text(self.statusbar % "", wrap='clip') 

    +

            self.cmd = "$ %s" 

    +

            self.cmd_urwid = urwid.Edit(self.cmd % "") 

    +

            display_widget = urwid.Pile([ \ 

    +

                urwid.Divider("-"), 

    +

                self.statusbar_urwid, \ 

    +

                urwid.Divider("-"), 

    +

                self.cmd_urwid, \ 

    +

                ]) 

    +

            urwid.WidgetWrap.__init__(self, display_widget) 

    +

     

    +

        def update(self, status=None, cmd=None): 

    +

            if status != None: 

    +

                self.statusbar_urwid.set_text(self.statusbar % status) 

    +

            if cmd != None: 

    +

                self.set_command(cmd) 

    +

     

    +

        def get_command(self): 

    +

            return self.cmd_urwid.get_edit_text() 

    +

     

    +

        def set_command(self, cmd): 

    +

            self.cmd_urwid.set_edit_text(cmd) 

    +

     

    +

    class HeaderBar(urwid.WidgetWrap): 

    +

        def __init__(self, window): 

    +

            self.window = window 

    +

            self.cwd = "Path : %s" 

    +

            self.cwd_urwid = urwid.Text(self.cwd % "") 

    +

            display_widget = urwid.Pile([ \ 

    +

                urwid.AttrWrap(urwid.Text(MAIN_TITLE), 'header'),\ 

    +

                urwid.Divider("-"), \ 

    +

                self.cwd_urwid, \ 

    +

                urwid.Divider("-"), \ 

    +

                ]) 

    +

            urwid.WidgetWrap.__init__(self, display_widget) 

    +

     

    +

        def update(self, cwd=None): 

    +

            if cwd != None: 

    +

                self.cwd_urwid.set_text(self.cwd % cwd) 

    +

     

    +

    class MainWindow(Screen): 

    +

        def __init__(self, device=None, footer=True, loglevel="Info", user_path=".", config_path=None): 

    +

            Screen.__init__(self) 

    +

            self.device = device 

    +

            self.footer_display = footer 

    +

            self.loglevel = logging.INFO 

    +

            self.loglevel_ow = loglevel 

    +

            self.user_path = user_path 

    +

            self.config_path = config_path 

    +

            self._define_log() 

    +

            self._define_screen() 

    +

            self._connect_louie() 

    +

            self._start_network() 

    +

     

    +

        def _define_log(self): 

    +

            hdlr = logging.FileHandler('ozwsh.log') 

    +

            formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 

    +

            hdlr.setFormatter(formatter) 

    +

            if self.loglevel_ow == "Debug": 

    +

                self.loglevel = logging.DEBUG 

    +

            ozwlog = logging.getLogger('openzwave') 

    +

            ozwlog.setLevel(self.loglevel) 

    +

            ozwlog.addHandler(hdlr) 

    +

            lozwlog = logging.getLogger('libopenzwave') 

    +

            lozwlog.setLevel(self.loglevel) 

    +

            lozwlog.addHandler(hdlr) 

    +

            self.log = logging.getLogger('pyozwman') 

    +

            self.log.setLevel(self.loglevel) 

    +

            self.log.addHandler(hdlr) 

    +

            self.log.info("="*15 + " start " + "="*15) 

    +

     

    +

        def _define_screen(self): 

    +

            self._palette = [("title", "yellow", "dark cyan"), 

    +

            ("keys", "dark blue", "light gray"), 

    +

            ("message", "light cyan", "dark green"), 

    +

            ("linenr", "light blue", "dark cyan"), 

    +

            ("input", "light gray", "black"), 

    +

            ("input2", "dark red", "light gray"), 

    +

            ("focus", "black", "light gray", "bold"), 

    +

            ("dialog", "black", "light gray", "bold"), 

    +

            ("file", "light green", "dark blue"), 

    +

            ("errortxt", "dark red", "dark blue"), 

    +

            ("selectedfile", "yellow", "dark blue"), 

    +

            ("selectedfocus", "yellow", "light gray", "bold"), 

    +

            ("dir", "light gray", "dark blue"), 

    +

            ("fileedit", "light green", "dark red"), 

    +

            ('edit', 'yellow', 'dark blue'), 

    +

            ('body','default', 'default'), 

    +

            ('foot','dark cyan', 'dark blue', 'bold'), 

    +

            ('shadow','white','black'), 

    +

            ('border','black','dark blue'), 

    +

            ('error','black','dark red'), 

    +

            ('FxKey','light cyan', 'dark blue', 'underline')] 

    +

            self.network = None 

    +

            self.controller = None 

    +

            self.root_box = RootBox(self, None, "body") 

    +

            self.stat_box = StatBox(self, self.root_box, "body") 

    +

            self.controller_box = ControllerBox(self, self.root_box, "body") 

    +

            self.scenes_box = ScenesBox(self, self.root_box, "body") 

    +

            self.scene_box = SceneBox(self, self.scenes_box, "body") 

    +

            self.nodes_box = NodesBox(self, self.root_box, "body") 

    +

            self.switches_box = SwitchesBox(self, self.nodes_box, "body") 

    +

            self.dimmers_box = DimmersBox(self, self.nodes_box, "body") 

    +

            self.sensors_box = SensorsBox(self, self.nodes_box, "body") 

    +

            self.node_box = NodeBox(self, self.nodes_box, "body") 

    +

            self.values_box = ValuesBox(self, self.node_box, "body") 

    +

            self.groups_box = GroupsBox(self, self.node_box, "body") 

     

    -

            self._active_box = self.root_box 

    -

            self.frame = urwid.Frame(urwid.AttrWrap(self.active_box, 'body'), \ 

    -

                header=self.header_bar,\ 

    -

                footer=self.status_bar, \ 

    -

                focus_part=self.framefocus) 

    -

            self.active_box = self.root_box 

    -

     

    -

            self.loop = urwid.MainLoop(self.frame, \ 

    -

                self._palette, \ 

    -

                unhandled_input=self._unhandled_input) 

    -

     

    -

        @property 

    -

        def active_box(self): 

    -

            """ 

    -

            Gets the number of association groups reported by this node. 

    +

            self.status_bar = StatusBar(self) 

    +

            self.header_bar = HeaderBar(self) 

    +

     

    +

            self.framefocus = 'footer' 

    +

     

    +

            self._active_box = self.root_box 

    +

            self.frame = urwid.Frame(urwid.AttrWrap(self.active_box, 'body'), \ 

    +

                header=self.header_bar,\ 

    +

                footer=self.status_bar, \ 

    +

                focus_part=self.framefocus) 

    +

            self.active_box = self.root_box 

    +

     

    +

            self.loop = urwid.MainLoop(self.frame, \ 

    +

                self._palette, \ 

    +

                unhandled_input=self._unhandled_input) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._active_box 

    +

        @property 

    +

        def active_box(self): 

    +

            """ 

    +

            Gets the number of association groups reported by this node. 

     

    -

        @active_box.setter 

    -

        def active_box(self,value): 

    -

            """ 

    -

            Gets the number of association groups reported by this node. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._active_box 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            self._active_box = value 

    -

            self.frame.set_body(self._active_box) 

    -

            self.header_bar.update(self._active_box.walker.fullpath()) 

    +

        @active_box.setter 

    +

        def active_box(self,value): 

    +

            """ 

    +

            Gets the number of association groups reported by this node. 

    +

     

    +

            :rtype: int 

     

    -

        def exit(self): 

    -

            """ 

    -

            Quit the programm 

    -

            Clean network properly and exit 

    +

            """ 

    +

            self._active_box = value 

    +

            self.frame.set_body(self._active_box) 

    +

            self.header_bar.update(self._active_box.walker.fullpath()) 

     

    -

            """ 

    -

            self.network.write_config() 

    -

            self.network.stop() 

    -

            self.options.destroy() 

    -

            raise urwid.ExitMainLoop() 

    -

     

    -

        def execute(self, command): 

    -

            """ 

    -

            Parse an execute a commande 

    -

            """ 

    -

            #if wait_for_network == True: 

    -

            #    self.status_bar.set_command("Network is not ready. Please wait.") 

    -

            #    return True 

    -

            command = command.strip() 

    -

            if command.startswith('ls') : 

    -

                if ' ' in command : 

    -

                    cmd,options = command.split(' ') 

    -

                else: 

    -

                    options = "" 

    -

                options = options.strip() 

    -

                self.active_box.walker.ls(options) 

    -

                self.status_bar.set_command("") 

    -

                return True 

    -

            elif command.startswith('exit') : 

    -

                self.exit() 

    -

            elif command.startswith('cd') : 

    -

                if ' ' in command : 

    -

                    cmd,path = command.split(' ',1) 

    -

                else: 

    -

                    path = "/" 

    -

                path = path.strip() 

    -

                if self.active_box.walker.exist(path): 

    -

                    self.active_box = self.active_box.walker.cd(path) 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    self.log.info(" self.active_box %s" %  self.active_box.walker.path) 

    -

                    return True 

    -

                elif path == "/" : 

    -

                    self.active_box = self.root_box 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    self.log.info(" self.active_box %s" %  self.active_box.walker.path) 

    -

                    return True 

    -

                else: 

    -

                    self.status_bar.update(status='Unknown directory "%s"' % path) 

    -

                    return False 

    -

            elif command.startswith('send') : 

    -

                if ' ' in command : 

    -

                    cmd,value = command.split(' ',1) 

    -

                else: 

    -

                    self.status_bar.update(status='Usage : send <command>') 

    -

                    return False 

    -

                value = value.strip() 

    -

                if len(value) == 0 : 

    -

                    self.status_bar.update(status='Usage : send <command>') 

    -

                    return False 

    -

                if self.active_box.walker.send(value): 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    return True 

    -

                else : 

    -

                    return False 

    -

            elif command.startswith('create') : 

    -

                if ' ' in command : 

    -

                    cmd,value = command.split(' ',1) 

    -

                else: 

    -

                    self.status_bar.update(status='Usage : create <value>') 

    -

                    return False 

    -

                value = value.strip() 

    -

                if len(value) == 0 : 

    -

                    self.status_bar.update(status='Usage : create <value>') 

    -

                    return False 

    -

                if self.active_box.walker.create(value): 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    return True 

    -

                else : 

    -

                    return False 

    -

            elif command.startswith('delete') : 

    -

                if ' ' in command : 

    -

                    cmd,value = command.split(' ',1) 

    -

                else: 

    -

                    self.status_bar.update(status='Usage : delete <value>') 

    -

                    return False 

    -

                value = value.strip() 

    -

                if len(value) == 0 : 

    -

                    self.status_bar.update(status='Usage : delete <value>') 

    -

                    return False 

    -

                if self.active_box.walker.delete(value): 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    return True 

    -

                else : 

    -

                    return False 

    -

            elif command.startswith('activate') : 

    -

                if ' ' in command : 

    -

                    cmd,value = command.split(' ',1) 

    -

                else: 

    -

                    self.status_bar.update(status='Usage : activate <value>') 

    -

                    return False 

    -

                value = value.strip() 

    -

                if len(value) == 0 : 

    -

                    self.status_bar.update(status='Usage : activate <value>') 

    -

                    return False 

    -

                if self.active_box.walker.activate(value): 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    return True 

    -

                else : 

    -

                    return False 

    -

            elif command.startswith('set') : 

    -

                if ' ' in command : 

    -

                    cmd,end = command.split(' ',1) 

    -

                    if len(end) == 0 or ' ' not in end : 

    -

                        self.status_bar.update(status='Usage : set <field> to <value>') 

    -

                        return False 

    -

                    end = end.strip() 

    -

                    field,end = end.split(' ',1) 

    +

        def exit(self): 

    +

            """ 

    +

            Quit the programm 

    +

            Clean network properly and exit 

    +

     

    +

            """ 

    +

            self.network.write_config() 

    +

            self.network.stop() 

    +

            self.options.destroy() 

    +

            raise urwid.ExitMainLoop() 

    +

     

    +

        def execute(self, command): 

    +

            """ 

    +

            Parse an execute a commande 

    +

            """ 

    +

            #if wait_for_network == True: 

    +

            #    self.status_bar.set_command("Network is not ready. Please wait.") 

    +

            #    return True 

    +

            command = command.strip() 

    +

            if command.startswith('ls') : 

    +

                if ' ' in command : 

    +

                    cmd,options = command.split(' ') 

    +

                else: 

    +

                    options = "" 

    +

                options = options.strip() 

    +

                self.active_box.walker.ls(options) 

    +

                self.status_bar.set_command("") 

    +

                return True 

    +

            elif command.startswith('exit') : 

    +

                self.exit() 

    +

            elif command.startswith('cd') : 

    +

                if ' ' in command : 

    +

                    cmd,path = command.split(' ',1) 

    +

                else: 

    +

                    path = "/" 

    +

                path = path.strip() 

    +

                if self.active_box.walker.exist(path): 

    +

                    self.active_box = self.active_box.walker.cd(path) 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    self.log.info(" self.active_box %s" %  self.active_box.walker.path) 

    +

                    return True 

    +

                elif path == "/" : 

    +

                    self.active_box = self.root_box 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    self.log.info(" self.active_box %s" %  self.active_box.walker.path) 

    +

                    return True 

    +

                else: 

    +

                    self.status_bar.update(status='Unknown directory "%s"' % path) 

    +

                    return False 

    +

            elif command.startswith('send') : 

    +

                if ' ' in command : 

    +

                    cmd,value = command.split(' ',1) 

    +

                else: 

    +

                    self.status_bar.update(status='Usage : send <command>') 

    +

                    return False 

    +

                value = value.strip() 

    +

                if len(value) == 0 : 

    +

                    self.status_bar.update(status='Usage : send <command>') 

    +

                    return False 

    +

                if self.active_box.walker.send(value): 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    return True 

    +

                else : 

    +

                    return False 

    +

            elif command.startswith('create') : 

    +

                if ' ' in command : 

    +

                    cmd,value = command.split(' ',1) 

    +

                else: 

    +

                    self.status_bar.update(status='Usage : create <value>') 

    +

                    return False 

    +

                value = value.strip() 

    +

                if len(value) == 0 : 

    +

                    self.status_bar.update(status='Usage : create <value>') 

    +

                    return False 

    +

                if self.active_box.walker.create(value): 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    return True 

    +

                else : 

    +

                    return False 

    +

            elif command.startswith('delete') : 

    +

                if ' ' in command : 

    +

                    cmd,value = command.split(' ',1) 

    +

                else: 

    +

                    self.status_bar.update(status='Usage : delete <value>') 

    +

                    return False 

    +

                value = value.strip() 

    +

                if len(value) == 0 : 

    +

                    self.status_bar.update(status='Usage : delete <value>') 

    +

                    return False 

    +

                if self.active_box.walker.delete(value): 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    return True 

    +

                else : 

    +

                    return False 

    +

            elif command.startswith('activate') : 

    +

                if ' ' in command : 

    +

                    cmd,value = command.split(' ',1) 

    +

                else: 

    +

                    self.status_bar.update(status='Usage : activate <value>') 

    +

                    return False 

    +

                value = value.strip() 

    +

                if len(value) == 0 : 

    +

                    self.status_bar.update(status='Usage : activate <value>') 

    +

                    return False 

    +

                if self.active_box.walker.activate(value): 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    return True 

    +

                else : 

    +

                    return False 

    +

            elif command.startswith('set') : 

    +

                if ' ' in command : 

    +

                    cmd,end = command.split(' ',1) 

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : set <field> to <value>') 

                        return False 

                    end = end.strip() 

    -

                    to,value = end.split(' ',1) 

    -

                    if len(value) == 0 or to != "to"  : 

    +

                    field,end = end.split(' ',1) 

    +

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : set <field> to <value>') 

                        return False 

    -

                    value = value.strip() 

    -

                    if self.active_box.walker.set(field, value): 

    -

                        self.active_box.walker.ls("") 

    -

                        self.status_bar.set_command("") 

    -

                        return True 

    -

                    else : 

    -

                        return False 

    -

                else : 

    -

                    self.status_bar.update(status='Usage : set <field> to <value>') 

    -

                    return False 

    -

            elif command.startswith('poll') : 

    -

                if ' ' in command : 

    -

                    cmd,end = command.split(' ',1) 

    -

                    if len(end) == 0 or ' ' not in end : 

    -

                        self.status_bar.update(status='Usage : poll <value> to <intensity>') 

    -

                        return False 

    -

                    end = end.strip() 

    -

                    field,end = end.split(' ',1) 

    +

                    end = end.strip() 

    +

                    to,value = end.split(' ',1) 

    +

                    if len(value) == 0 or to != "to"  : 

    +

                        self.status_bar.update(status='Usage : set <field> to <value>') 

    +

                        return False 

    +

                    value = value.strip() 

    +

                    if self.active_box.walker.set(field, value): 

    +

                        self.active_box.walker.ls("") 

    +

                        self.status_bar.set_command("") 

    +

                        return True 

    +

                    else : 

    +

                        return False 

    +

                else : 

    +

                    self.status_bar.update(status='Usage : set <field> to <value>') 

    +

                    return False 

    +

            elif command.startswith('poll') : 

    +

                if ' ' in command : 

    +

                    cmd,end = command.split(' ',1) 

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : poll <value> to <intensity>') 

                        return False 

                    end = end.strip() 

    -

                    to,value = end.split(' ',1) 

    -

                    if len(value) == 0 or to != "to"  : 

    +

                    field,end = end.split(' ',1) 

    +

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : poll <value> to <intensity>') 

                        return False 

    -

                    value = value.strip() 

    -

                    if self.active_box.walker.poll(field, value): 

    -

                        self.active_box.walker.ls("") 

    -

                        self.status_bar.set_command("") 

    -

                        return True 

    -

                    else : 

    -

                        return False 

    -

                else : 

    -

                    self.status_bar.update(status='Usage : poll <value> to <intensity>') 

    -

                    return False 

    -

            elif command.startswith('add') : 

    -

                if ' ' in command : 

    -

                    cmd,end = command.split(' ',1) 

    -

                    if len(end) == 0 or ' ' not in end : 

    -

                        self.status_bar.update(status='Usage : add <value> to <list>') 

    -

                        return False 

    -

                    end = end.strip() 

    -

                    field,end = end.split(' ',1) 

    +

                    end = end.strip() 

    +

                    to,value = end.split(' ',1) 

    +

                    if len(value) == 0 or to != "to"  : 

    +

                        self.status_bar.update(status='Usage : poll <value> to <intensity>') 

    +

                        return False 

    +

                    value = value.strip() 

    +

                    if self.active_box.walker.poll(field, value): 

    +

                        self.active_box.walker.ls("") 

    +

                        self.status_bar.set_command("") 

    +

                        return True 

    +

                    else : 

    +

                        return False 

    +

                else : 

    +

                    self.status_bar.update(status='Usage : poll <value> to <intensity>') 

    +

                    return False 

    +

            elif command.startswith('add') : 

    +

                if ' ' in command : 

    +

                    cmd,end = command.split(' ',1) 

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : add <value> to <list>') 

                        return False 

                    end = end.strip() 

    -

                    to,value = end.split(' ',1) 

    -

                    if len(value) == 0 or to != "to"  : 

    +

                    field,end = end.split(' ',1) 

    +

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : add <value> to <list>') 

                        return False 

    -

                    value = value.strip() 

    -

                    if self.active_box.walker.add(value, field): 

    -

                        self.active_box.walker.ls("") 

    -

                        self.status_bar.set_command("") 

    -

                        return True 

    -

                    else : 

    -

                        return False 

    -

                else : 

    -

                    self.status_bar.update(status='Usage : add <value> to <list>') 

    -

                    return False 

    -

            elif command.startswith('remove') : 

    -

                if ' ' in command : 

    -

                    cmd,end = command.split(' ',1) 

    -

                    if len(end) == 0 or ' ' not in end : 

    -

                        self.status_bar.update(status='Usage : remove <value> from <list>') 

    -

                        return False 

    -

                    end = end.strip() 

    -

                    field,end = end.split(' ',1) 

    +

                    end = end.strip() 

    +

                    to,value = end.split(' ',1) 

    +

                    if len(value) == 0 or to != "to"  : 

    +

                        self.status_bar.update(status='Usage : add <value> to <list>') 

    +

                        return False 

    +

                    value = value.strip() 

    +

                    if self.active_box.walker.add(value, field): 

    +

                        self.active_box.walker.ls("") 

    +

                        self.status_bar.set_command("") 

    +

                        return True 

    +

                    else : 

    +

                        return False 

    +

                else : 

    +

                    self.status_bar.update(status='Usage : add <value> to <list>') 

    +

                    return False 

    +

            elif command.startswith('remove') : 

    +

                if ' ' in command : 

    +

                    cmd,end = command.split(' ',1) 

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : remove <value> from <list>') 

                        return False 

                    end = end.strip() 

    -

                    to,value = end.split(' ',1) 

    -

                    if len(value) == 0 or to != "from"  : 

    +

                    field,end = end.split(' ',1) 

    +

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : remove <value> from <list>') 

                        return False 

    -

                    value = value.strip() 

    -

                    if self.active_box.walker.remove(value, field): 

    -

                        self.active_box.walker.ls("") 

    -

                        self.status_bar.set_command("") 

    -

                        return True 

    -

                    else : 

    -

                        return False 

    -

                else : 

    -

                    self.status_bar.update(status='Usage : remove <value> from <list>') 

    -

                    return False 

    -

            elif command.startswith('reset') : 

    -

                if ' ' in command : 

    -

                    cmd,state = command.split(' ',1) 

    -

                    state = state.strip() 

    -

                    if len(state) == 0 : 

    -

                        self.status_bar.update(status='Usage : reset soft|hard') 

    -

                        return False 

    -

                    if self.active_box.walker.reset(state): 

    -

                        self.active_box.walker.ls("") 

    -

                        self.status_bar.set_command("") 

    -

                        return True 

    -

                    else : 

    -

                        self.status_bar.update(status='Unknowm state "%s"' % state) 

    -

                        return False 

    -

            else: 

    -

                self.status_bar.update(status='Unknown command "%s"' % command) 

    -

                return False 

    -

     

    -

        def _unhandled_input(self, key): 

    -

            if key == 'esc': 

    -

                self.exit() 

    -

            elif key == 'tab' or key == 'shift tab': 

    -

                if self.framefocus == 'footer': 

    -

                    self.framefocus = 'body' 

    -

                else: 

    -

                    self.framefocus = 'footer' 

    -

                self.frame.set_focus(self.framefocus) 

    -

                return True 

    -

            elif key == 'enter': 

    -

                self.log.info('handled: %s' % repr(key)) 

    -

                cmd = self.status_bar.get_command() 

    -

                self.execute(cmd) 

    +

                    end = end.strip() 

    +

                    to,value = end.split(' ',1) 

    +

                    if len(value) == 0 or to != "from"  : 

    +

                        self.status_bar.update(status='Usage : remove <value> from <list>') 

    +

                        return False 

    +

                    value = value.strip() 

    +

                    if self.active_box.walker.remove(value, field): 

    +

                        self.active_box.walker.ls("") 

    +

                        self.status_bar.set_command("") 

    +

                        return True 

    +

                    else : 

    +

                        return False 

    +

                else : 

    +

                    self.status_bar.update(status='Usage : remove <value> from <list>') 

    +

                    return False 

    +

            elif command.startswith('reset') : 

    +

                if ' ' in command : 

    +

                    cmd,state = command.split(' ',1) 

    +

                    state = state.strip() 

    +

                    if len(state) == 0 : 

    +

                        self.status_bar.update(status='Usage : reset soft|hard') 

    +

                        return False 

    +

                    if self.active_box.walker.reset(state): 

    +

                        self.active_box.walker.ls("") 

    +

                        self.status_bar.set_command("") 

    +

                        return True 

    +

                    else : 

    +

                        self.status_bar.update(status='Unknowm state "%s"' % state) 

    +

                        return False 

    +

            else: 

    +

                self.status_bar.update(status='Unknown command "%s"' % command) 

    +

                return False 

    +

     

    +

        def _unhandled_input(self, key): 

    +

            if key == 'esc': 

    +

                self.exit() 

    +

            elif key == 'tab' or key == 'shift tab': 

    +

                if self.framefocus == 'footer': 

    +

                    self.framefocus = 'body' 

    +

                else: 

    +

                    self.framefocus = 'footer' 

    +

                self.frame.set_focus(self.framefocus) 

                return True 

    -

            elif key == 'f5': 

    -

                self.refresh_nodes() 

    -

                return True 

    -

            else: 

    -

                self.log.info('unhandled: %s' % repr(key)) 

    -

     

    -

        def _start_network(self): 

    -

            #Define some manager options 

    -

            self.options = ZWaveOption(self.device, \ 

    -

              config_path=self.config_path, \ 

    -

              user_path=self.user_path, cmd_line="", \ 

    -

              kvals = False) 

    -

            self.options.set_log_file("OZW_Log.log") 

    -

            self.options.set_append_log_file(False) 

    -

            self.options.set_console_output(False) 

    -

            self.options.set_save_log_level(self.loglevel_ow) 

    -

            self.options.set_logging(True) 

    -

            self.options.lock() 

    -

            self.network = ZWaveNetwork(self.options, self.log) 

    -

            self.status_bar.update(status='Start Network') 

    -

     

    -

        def _connect_louie(self): 

    -

            dispatcher.connect(self._louie_network_started, ZWaveNetwork.SIGNAL_NETWORK_STARTED) 

    -

            dispatcher.connect(self._louie_network_resetted, ZWaveNetwork.SIGNAL_NETWORK_RESETTED) 

    -

            dispatcher.connect(self._louie_network_awaked, ZWaveNetwork.SIGNAL_NETWORK_AWAKED) 

    -

            dispatcher.connect(self._louie_network_ready, ZWaveNetwork.SIGNAL_NETWORK_READY) 

    -

            dispatcher.connect(self._louie_network_stopped, ZWaveNetwork.SIGNAL_NETWORK_STOPPED) 

    -

     

    -

        def _louie_network_started(self, network): 

    -

            self.log.info('OpenZWave network is started : homeid %0.8x - %d nodes were found.' % \ 

    -

                (network.home_id, network.nodes_count)) 

    -

            self.network = network 

    -

            self.status_bar.update(status='OpenZWave network is started ... Waiting ...') 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_network_resetted(self, network): 

    -

            self.log.info('OpenZWave network is resetted.') 

    -

            self.network = None 

    -

            #self._disconnect_louie_node_and_value() 

    -

            self.status_bar.update(status='OpenZWave network was resetted ... Waiting ...') 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_network_stopped(self, network): 

    -

            self.log.info('OpenZWave network is stopped.') 

    -

            self.network = None 

    -

            self.status_bar.update(status='OpenZWave network was stopped ... please quit') 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_network_awaked(self, network): 

    -

            self.log.info('OpenZWave network is awaked.') 

    -

            self.network = network 

    -

            self.status_bar.update(status='OpenZWave network is awaked ... Waiting ...') 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_network_ready(self, network): 

    -

            self.log.info('ZWave network is ready : %d nodes were found.' % network.nodes_count) 

    -

            self.log.info('Controller name : %s' % network.controller.node.product_name) 

    -

            self.network = network 

    -

            wait_for_network = False 

    -

            self.status_bar.update(status='ZWave network is ready') 

    -

            self.loop.draw_screen() 

    -

            self._connect_louie_node_and_value() 

    -

     

    -

        def _disconnect_louie_node_and_value(self): 

    -

            #pass 

    -

            dispatcher.disconnect(self._louie_group, ZWaveNetwork.SIGNAL_GROUP) 

    -

            dispatcher.disconnect(self._louie_node_update, ZWaveNetwork.SIGNAL_NODE) 

    -

            dispatcher.disconnect(self._louie_value_update, ZWaveNetwork.SIGNAL_VALUE) 

    -

            dispatcher.disconnect(self._louie_ctrl_message, ZWaveController.SIGNAL_CONTROLLER) 

    -

     

    -

        def _connect_louie_node_and_value(self): 

    -

            #pass 

    -

            dispatcher.connect(self._louie_group, ZWaveNetwork.SIGNAL_GROUP) 

    -

            dispatcher.connect(self._louie_node_update, ZWaveNetwork.SIGNAL_NODE) 

    -

            dispatcher.connect(self._louie_value_update, ZWaveNetwork.SIGNAL_VALUE) 

    -

            dispatcher.connect(self._louie_ctrl_message, ZWaveController.SIGNAL_CONTROLLER) 

    -

     

    -

        def _louie_node_update(self, network, node): 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_value_update(self, network, node, value): 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_group(self, network, node): 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_ctrl_message(self, state, message, network, controller): 

    -

            #self.status_bar.update(status='Message from controller: %s : %s' % (state,message)) 

    -

            self.status_bar.update(status='Message from controller: %s' % (message)) 

    +

            elif key == 'enter': 

    +

                self.log.info('handled: %s' % repr(key)) 

    +

                cmd = self.status_bar.get_command() 

    +

                self.execute(cmd) 

    +

                return True 

    +

            elif key == 'f5': 

    +

                self.refresh_nodes() 

    +

                return True 

    +

            else: 

    +

                self.log.info('unhandled: %s' % repr(key)) 

    +

     

    +

        def _start_network(self): 

    +

            #Define some manager options 

    +

            self.options = ZWaveOption(self.device, \ 

    +

              config_path=self.config_path, \ 

    +

              user_path=self.user_path, cmd_line="", \ 

    +

              kvals = False) 

    +

            self.options.set_log_file("OZW_Log.log") 

    +

            self.options.set_append_log_file(False) 

    +

            self.options.set_console_output(False) 

    +

            self.options.set_save_log_level(self.loglevel_ow) 

    +

            self.options.set_logging(True) 

    +

            self.options.lock() 

    +

            self.network = ZWaveNetwork(self.options, self.log) 

    +

            self.status_bar.update(status='Start Network') 

    +

     

    +

        def _connect_louie(self): 

    +

            dispatcher.connect(self._louie_network_started, ZWaveNetwork.SIGNAL_NETWORK_STARTED) 

    +

            dispatcher.connect(self._louie_network_resetted, ZWaveNetwork.SIGNAL_NETWORK_RESETTED) 

    +

            dispatcher.connect(self._louie_network_awaked, ZWaveNetwork.SIGNAL_NETWORK_AWAKED) 

    +

            dispatcher.connect(self._louie_network_ready, ZWaveNetwork.SIGNAL_NETWORK_READY) 

    +

            dispatcher.connect(self._louie_network_stopped, ZWaveNetwork.SIGNAL_NETWORK_STOPPED) 

    +

     

    +

        def _louie_network_started(self, network): 

    +

            self.log.info('OpenZWave network is started : homeid %0.8x - %d nodes were found.' % \ 

    +

                (network.home_id, network.nodes_count)) 

    +

            self.network = network 

    +

            self.status_bar.update(status='OpenZWave network is started ... Waiting ...') 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_network_resetted(self, network): 

    +

            self.log.info('OpenZWave network is resetted.') 

    +

            self.network = None 

    +

            #self._disconnect_louie_node_and_value() 

    +

            self.status_bar.update(status='OpenZWave network was resetted ... Waiting ...') 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_network_stopped(self, network): 

    +

            self.log.info('OpenZWave network is stopped.') 

    +

            self.network = None 

    +

            self.status_bar.update(status='OpenZWave network was stopped ... please quit') 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_network_awaked(self, network): 

    +

            self.log.info('OpenZWave network is awaked.') 

    +

            self.network = network 

    +

            self.status_bar.update(status='OpenZWave network is awaked ... Waiting ...') 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_network_ready(self, network): 

    +

            self.log.info('ZWave network is ready : %d nodes were found.' % network.nodes_count) 

    +

            self.log.info('Controller name : %s' % network.controller.node.product_name) 

    +

            self.network = network 

    +

            wait_for_network = False 

    +

            self.status_bar.update(status='ZWave network is ready') 

    +

            self.loop.draw_screen() 

    +

            self._connect_louie_node_and_value() 

    +

     

    +

        def _disconnect_louie_node_and_value(self): 

    +

            #pass 

    +

            dispatcher.disconnect(self._louie_group, ZWaveNetwork.SIGNAL_GROUP) 

    +

            dispatcher.disconnect(self._louie_node_update, ZWaveNetwork.SIGNAL_NODE) 

    +

            dispatcher.disconnect(self._louie_value_update, ZWaveNetwork.SIGNAL_VALUE) 

    +

            dispatcher.disconnect(self._louie_ctrl_message, ZWaveController.SIGNAL_CONTROLLER) 

    +

     

    +

        def _connect_louie_node_and_value(self): 

    +

            #pass 

    +

            dispatcher.connect(self._louie_group, ZWaveNetwork.SIGNAL_GROUP) 

    +

            dispatcher.connect(self._louie_node_update, ZWaveNetwork.SIGNAL_NODE) 

    +

            dispatcher.connect(self._louie_value_update, ZWaveNetwork.SIGNAL_VALUE) 

    +

            dispatcher.connect(self._louie_ctrl_message, ZWaveController.SIGNAL_CONTROLLER) 

    +

     

    +

        def _louie_node_update(self, network, node): 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_value_update(self, network, node, value): 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_group(self, network, node): 

            self.loop.draw_screen() 

    +

     

    +

        def _louie_ctrl_message(self, state, message, network, controller): 

    +

            #self.status_bar.update(status='Message from controller: %s : %s' % (state,message)) 

    +

            self.status_bar.update(status='Message from controller: %s' % (message)) 

    +

            self.loop.draw_screen() 

    @@ -348,7 +371,7 @@

        app_.debug = app.config['DEBUG'] 

        app_.testing = app.config['TESTING'] 

        logging.debug("Flask url maps %s" % app.url_map) 

    -

        socketio.run(app, use_reloader=app.config['RELOADER']) 

    +

        socketio.run(app, use_reloader=app.config['RELOADER'],host=app.config['HOST'], port=app.config['PORT']) 

        #print "App has ran" 

        #stop_all() 

     

    @@ -365,89 +388,112 @@

        _app.config.from_object(config_object) 

        global app 

        app = _app 

    -

        import logging.config, yaml 

    -

        logging.config.dictConfig(yaml.load(open(app.config['LOGGING_CONF']))) 

    -

        logging.debug("Load config from %s"%config_object) 

    -

        global fanstatic 

    -

        fanstatic = Fanstatic(app) 

    -

        global socketio 

    -

        socketio = SocketIO(app) 

    -

        if not app.config['DEBUG']: 

    -

            install_secret_key(app) 

    -

        import views 

    -

        from socket import ozwave, chat 

    -

        if not hasattr(app, 'extensions'): 

    -

            app.extensions = {} 

    -

        if 'zwnetwork' not in app.extensions or app.extensions['zwnetwork'] is None: 

    -

            app.extensions['zwnetwork'] = start_zwnetwork(app) 

    -

        return app, socketio 

    -

     

    -

    def start_zwnetwork(app): 

    -

        options = ZWaveOption(device=app.config['ZWAVE_DEVICE'], config_path=app.config['ZWAVE_DIR'], user_path=app.config['USER_DIR']) 

    -

        options.set_log_file("OZW_Log.log") 

    -

        options.set_append_log_file(False) 

    -

        options.set_console_output(False) 

    -

        options.set_save_log_level(app.config['ZWAVE_DEBUG']) 

    -

        options.set_logging(app.config['ZWAVE_LOGGING']) 

    -

        options.lock() 

    -

        zwnetwork = ZWaveNetwork(options) 

    -

        return zwnetwork 

    -

     

    -

    def stop_zwnetwork(zwnetwork): 

    -

        if zwnetwork is not None: 

    -

            zwnetwork.stop() 

    -

            #time.sleep(1.5) 

    -

            zwnetwork = None 

    -

     

    -

    ######################## 

    -

    # Configure Secret Key # 

    -

    ######################## 

    -

    def install_secret_key(app, filename='secret_key'): 

    -

        """Configure the SECRET_KEY from a file 

    -

        in the instance directory. 

    -

     

    -

        If the file does not exist, print instructions 

    -

        to create it from a shell with a random key, 

    -

        then exit. 

    -

        """ 

    -

        filename = os.path.join(app.instance_path, filename) 

    -

     

    -

        try: 

    -

            app.config['SECRET_KEY'] = open(filename, 'rb').read() 

    -

        except IOError: 

    -

            print('Error: No secret key. Create it with:') 

    -

            full_path = os.path.dirname(filename) 

    -

            if not os.path.isdir(full_path): 

    -

                print('mkdir -p {filename}'.format(filename=full_path)) 

    -

            print('head -c 24 /dev/urandom > {filename}'.format(filename=filename)) 

    -

            sys.exit(1) 

    +

        #Logging configuration 

    +

        import logging.config, yaml 

    +

        logs = yaml.load(open(app.config['LOGGING_CONF'])) 

    +

        logging.config.dictConfig(logs) 

    +

        logging.debug("Load config from %s"%config_object) 

    +

        if logs['loggers']['libopenzwave']['level'] == 'DEBUG': 

    +

            ZWAVE_DEBUG = "Debug" 

    +

        elif logs['loggers']['libopenzwave']['level'] == 'ERROR': 

    +

            ZWAVE_DEBUG = "Error" 

    +

        elif logs['loggers']['libopenzwave']['level'] == 'WARNING': 

    +

            ZWAVE_DEBUG = "Warning" 

    +

        else: 

    +

            ZWAVE_DEBUG = "Info" 

    +

        #Application configuration 

    +

        from ConfigParser import SafeConfigParser 

    +

        settings = SafeConfigParser() 

    +

        settings.read(app.config['APP_CONF']) 

    +

        section = "zwave" 

    +

        if settings.has_option(section, 'device'): 

    +

            app.config['ZWAVE_DEVICE'] = settings.get(section, 'device') 

    +

        section = "server" 

    +

        if settings.has_option(section, 'host'): 

    +

            app.config['HOST'] = settings.get(section, 'host') 

    +

        if settings.has_option(section, 'port'): 

    +

            app.config['PORT'] = settings.getint(section, 'port') 

    +

        #Flask stuff 

    +

        global fanstatic 

    +

        fanstatic = Fanstatic(app) 

    +

        global socketio 

    +

        socketio = SocketIO(app) 

    +

        if not app.config['DEBUG']: 

    +

            install_secret_key(app) 

    +

        import views 

    +

        from socket import ozwave, chat 

    +

        if not hasattr(app, 'extensions'): 

    +

            app.extensions = {} 

    +

        if 'zwnetwork' not in app.extensions or app.extensions['zwnetwork'] is None: 

    +

            app.extensions['zwnetwork'] = start_zwnetwork(app) 

    +

        return app, socketio 

    +

     

    +

    def start_zwnetwork(app): 

    +

        options = ZWaveOption(device=app.config['ZWAVE_DEVICE'], config_path=app.config['ZWAVE_DIR'], user_path=app.config['USER_DIR']) 

    +

        options.set_log_file("OZW_Log.log") 

    +

        options.set_append_log_file(False) 

    +

        options.set_console_output(False) 

    +

        options.set_save_log_level(app.config['ZWAVE_DEBUG']) 

    +

        options.set_logging(app.config['ZWAVE_LOGGING']) 

    +

        options.lock() 

    +

        zwnetwork = ZWaveNetwork(options) 

    +

        return zwnetwork 

    +

     

    +

    def stop_zwnetwork(zwnetwork): 

    +

        if zwnetwork is not None: 

    +

            zwnetwork.stop() 

    +

            #time.sleep(1.5) 

    +

            zwnetwork = None 

     

    -

    #from app.users.views import mod as usersModule 

    -

    #app.register_blueprint(usersModule) 

    -

     

    -

    # Later on you'll import the other blueprints the same way: 

    -

    #from app.comments.views import mod as commentsModule 

    -

    #from app.posts.views import mod as postsModule 

    -

    #app.register_blueprint(commentsModule) 

    -

    #app.register_blueprint(postsModule) 

    -

     

    -

    #try: 

    -

    #    __import__('pkg_resources').declare_namespace(__name__) 

    -

    #except: 

    -

    #    # bootstrapping 

    -

    #    pass 

    -

    # 

    -

    #from flask import Flask 

    -

    #import zmq 

    -

    # 

    -

    #app = Flask(__name__) 

    -

    #context = zmq.Context() 

    -

    #endpoint_cmd = "tcp://*:14015" 

    -

    #socket = context.socket(zmq.REQ) 

    -

    #socket.setsockopt(zmq.LINGER, 0) 

    -

    #socket.connect(endpoint_cmd) 

    -

    # 

    -

    #import views 

    +

    ######################## 

    +

    # Configure Secret Key # 

    +

    ######################## 

    +

    def install_secret_key(app, filename='secret_key'): 

    +

        """Configure the SECRET_KEY from a file 

    +

        in the instance directory. 

    +

     

    +

        If the file does not exist, print instructions 

    +

        to create it from a shell with a random key, 

    +

        then exit. 

    +

        """ 

    +

        filename = os.path.join(app.instance_path, filename) 

    +

     

    +

        try: 

    +

            app.config['SECRET_KEY'] = open(filename, 'rb').read() 

    +

        except IOError: 

    +

            print('Error: No secret key. Create it with:') 

    +

            full_path = os.path.dirname(filename) 

    +

            if not os.path.isdir(full_path): 

    +

                print('mkdir -p {filename}'.format(filename=full_path)) 

    +

            print('head -c 24 /dev/urandom > {filename}'.format(filename=filename)) 

    +

            sys.exit(1) 

    +

     

    +

    #from app.users.views import mod as usersModule 

    +

    #app.register_blueprint(usersModule) 

    +

     

    +

    # Later on you'll import the other blueprints the same way: 

    +

    #from app.comments.views import mod as commentsModule 

    +

    #from app.posts.views import mod as postsModule 

    +

    #app.register_blueprint(commentsModule) 

    +

    #app.register_blueprint(postsModule) 

    +

     

    +

    #try: 

    +

    #    __import__('pkg_resources').declare_namespace(__name__) 

    +

    #except: 

    +

    #    # bootstrapping 

    +

    #    pass 

    +

    # 

    +

    #from flask import Flask 

    +

    #import zmq 

    +

    # 

    +

    #app = Flask(__name__) 

    +

    #context = zmq.Context() 

    +

    #endpoint_cmd = "tcp://*:14015" 

    +

    #socket = context.socket(zmq.REQ) 

    +

    #socket.setsockopt(zmq.LINGER, 0) 

    +

    #socket.connect(endpoint_cmd) 

    +

    # 

    +

    #import views 

    @@ -418,130 +420,132 @@

        def _louie_network(self, network): 

            """Louie dispatch for netowrk 

            """ 

    -

            if network is None: 

    -

                self.socketio.emit('my network response', 

    -

                    {'data': data_room_network(current_app.extensions['zwnetwork'])}, 

    -

                    namespace='/ozwave') 

    -

            else: 

    -

                self.socketio.emit('my network response', 

    -

                    {'data': data_room_network(current_app.extensions['zwnetwork'])}, 

    -

                    namespace='/ozwave') 

    -

                logging.debug('OpenZWave network notification : homeid %0.8x (state:%s) - %d nodes were found.' % (network.home_id, network.state, network.nodes_count)) 

    -

     

    -

        def join_room_node(self): 

    -

            """Join room nodes 

    -

            """ 

    -

            dispatcher.connect(self._louie_node, ZWaveNetwork.SIGNAL_NODE) 

    -

            return True 

    -

     

    -

        def leave_room_node(self): 

    -

            """Leave room nodes 

    -

            """ 

    -

            dispatcher.disconnect(self._louie_node, ZWaveNetwork.SIGNAL_NODE) 

    -

            return True 

    -

     

    -

        def _louie_node(self, network, node): 

    -

            """Louie dispatch for node 

    -

            """ 

    -

            data=node.to_dict() 

    -

            self.socketio.emit('my node response', 

    -

                {'data': data}, 

    -

                namespace='/ozwave') 

    -

            logging.debug('OpenZWave node notification : node %s.', data) 

    -

     

    -

        def join_room_values(self): 

    -

            """Join room values 

    -

            """ 

    -

            dispatcher.connect(self._louie_values, ZWaveNetwork.SIGNAL_VALUE) 

    -

            return True 

    -

     

    -

        def leave_room_values(self): 

    -

            """Leave room values 

    -

            """ 

    -

            dispatcher.disconnect(self._louie_values, ZWaveNetwork.SIGNAL_VALUE) 

    -

            return True 

    -

     

    -

        def _louie_values(self, network, node, value): 

    -

            """Louie dispatch for values 

    -

            """ 

    -

            with self.app.test_request_context(): 

    -

                from flask import request 

    -

                if network is None: 

    -

                    self.socketio.emit('my values response', 

    -

                                       {'data': {'node_id':None, 'homeid':None, 'value_id':None},}, 

    -

                                       namespace='/ozwave') 

    -

                    logging.debug('OpenZWave values notification : Network is None.') 

    -

                elif node is None: 

    -

                    logging.debug('OpenZWave values notification : Node is None.') 

    -

                    self.socketio.emit('my values response', 

    -

                                       {'data': {'node_id':None, 'homeid':network.home_id_str, 'value_id':None},}, 

    -

                                       namespace='/ozwave') 

    -

                elif value is None: 

    -

                    self.socketio.emit('my values response', 

    -

                                       {'data': {'node_id':node.node_id, 'homeid':network.home_id_str, 'value_id':None},}, 

    -

                                       namespace='/ozwave') 

    -

                    logging.debug('OpenZWave values notification : Value is None.') 

    -

                else: 

    -

                    self.socketio.emit('my values response', 

    -

                                       {'data': network.nodes[node.node_id].values[value.value_id].to_dict(),}, 

    -

                                       namespace='/ozwave') 

    -

                    logging.debug('OpenZWave values notification : homeid %0.8x - node %d - value %d.', network.home_id, node.node_id, value.value_id) 

    -

     

    -

        def join_room_controller(self): 

    -

            """Join room controller 

    -

            """ 

    -

            dispatcher.connect(self._louie_controller, ZWaveController.SIGNAL_CTRL_WAITING) 

    -

            dispatcher.connect(self._louie_controller, ZWaveController.SIGNAL_CONTROLLER) 

    -

            return True 

    -

     

    -

        def leave_room_controller(self): 

    -

            """Leave room controller 

    -

            """ 

    -

            dispatcher.disconnect(self._louie_controller, ZWaveController.SIGNAL_CTRL_WAITING) 

    -

            dispatcher.disconnect(self._louie_controller, ZWaveController.SIGNAL_CONTROLLER) 

    -

            return True 

    -

     

    -

        def _louie_controller(self, state, message, network, controller): 

    -

            """Louie dispatch for controller 

    -

            """ 

    -

            with self.app.test_request_context(): 

    -

                from flask import request 

    -

                if network is None or controller is None: 

    -

                    self.socketio.emit('my message response', 

    -

                                       {'data': {'state':None, 'message':None},}, 

    -

                                       namespace='/ozwave') 

    -

                    logging.debug('OpenZWave controller message : Nework or Controller is None.') 

    -

                else: 

    -

                    self.socketio.emit('my message response', 

    -

                                       {'data': {'state':state, 'message':message},}, 

    -

                                       namespace='/ozwave') 

    -

                    logging.debug('OpenZWave controller message : state %s - message %s.', state, message) 

    -

     

    -

        def stop(self): 

    -

            """Stop the tread 

    -

            """ 

    -

            self.leave_room_node() 

    -

            self.leave_room_values() 

    -

            self.leave_room_controller() 

    -

            self.leave_room_network() 

    -

            self._stopevent.set( ) 

    -

            logging.info("Stop listener") 

    -

     

    -

    def start_listener(app_, socketio_): 

    -

        """Start the listener 

    -

        """ 

    -

        global listener 

    -

        if listener is None: 

    -

            listener = ListenerThread(socketio_, app_) 

    -

            listener.start() 

    -

        return listener 

    -

     

    -

    def stop_listener(): 

    -

        """Stop the listener 

    -

        """ 

    -

        global listener 

    -

        listener.stop() 

    -

        listener = None 

    +

            with self.app.test_request_context(): 

    +

                from flask import request 

    +

                if network is None: 

    +

                    self.socketio.emit('my network response', 

    +

                        {'data': data_room_network(current_app.extensions['zwnetwork'])}, 

    +

                        namespace='/ozwave') 

    +

                else: 

    +

                    self.socketio.emit('my network response', 

    +

                        {'data': data_room_network(current_app.extensions['zwnetwork'])}, 

    +

                        namespace='/ozwave') 

    +

                    logging.debug('OpenZWave network notification : homeid %0.8x (state:%s) - %d nodes were found.' % (network.home_id, network.state, network.nodes_count)) 

    +

     

    +

        def join_room_node(self): 

    +

            """Join room nodes 

    +

            """ 

    +

            dispatcher.connect(self._louie_node, ZWaveNetwork.SIGNAL_NODE) 

    +

            return True 

    +

     

    +

        def leave_room_node(self): 

    +

            """Leave room nodes 

    +

            """ 

    +

            dispatcher.disconnect(self._louie_node, ZWaveNetwork.SIGNAL_NODE) 

    +

            return True 

    +

     

    +

        def _louie_node(self, network, node): 

    +

            """Louie dispatch for node 

    +

            """ 

    +

            data=node.to_dict() 

    +

            self.socketio.emit('my node response', 

    +

                {'data': data}, 

    +

                namespace='/ozwave') 

    +

            logging.debug('OpenZWave node notification : node %s.', data) 

    +

     

    +

        def join_room_values(self): 

    +

            """Join room values 

    +

            """ 

    +

            dispatcher.connect(self._louie_values, ZWaveNetwork.SIGNAL_VALUE) 

    +

            return True 

    +

     

    +

        def leave_room_values(self): 

    +

            """Leave room values 

    +

            """ 

    +

            dispatcher.disconnect(self._louie_values, ZWaveNetwork.SIGNAL_VALUE) 

    +

            return True 

    +

     

    +

        def _louie_values(self, network, node, value): 

    +

            """Louie dispatch for values 

    +

            """ 

    +

            with self.app.test_request_context(): 

    +

                from flask import request 

    +

                if network is None: 

    +

                    self.socketio.emit('my values response', 

    +

                                       {'data': {'node_id':None, 'homeid':None, 'value_id':None},}, 

    +

                                       namespace='/ozwave') 

    +

                    logging.debug('OpenZWave values notification : Network is None.') 

    +

                elif node is None: 

    +

                    logging.debug('OpenZWave values notification : Node is None.') 

    +

                    self.socketio.emit('my values response', 

    +

                                       {'data': {'node_id':None, 'homeid':network.home_id_str, 'value_id':None},}, 

    +

                                       namespace='/ozwave') 

    +

                elif value is None: 

    +

                    self.socketio.emit('my values response', 

    +

                                       {'data': {'node_id':node.node_id, 'homeid':network.home_id_str, 'value_id':None},}, 

    +

                                       namespace='/ozwave') 

    +

                    logging.debug('OpenZWave values notification : Value is None.') 

    +

                else: 

    +

                    self.socketio.emit('my values response', 

    +

                                       {'data': network.nodes[node.node_id].values[value.value_id].to_dict(),}, 

    +

                                       namespace='/ozwave') 

    +

                    logging.debug('OpenZWave values notification : homeid %0.8x - node %d - value %d.', network.home_id, node.node_id, value.value_id) 

    +

     

    +

        def join_room_controller(self): 

    +

            """Join room controller 

    +

            """ 

    +

            dispatcher.connect(self._louie_controller, ZWaveController.SIGNAL_CTRL_WAITING) 

    +

            dispatcher.connect(self._louie_controller, ZWaveController.SIGNAL_CONTROLLER) 

    +

            return True 

    +

     

    +

        def leave_room_controller(self): 

    +

            """Leave room controller 

    +

            """ 

    +

            dispatcher.disconnect(self._louie_controller, ZWaveController.SIGNAL_CTRL_WAITING) 

    +

            dispatcher.disconnect(self._louie_controller, ZWaveController.SIGNAL_CONTROLLER) 

    +

            return True 

    +

     

    +

        def _louie_controller(self, state, message, network, controller): 

    +

            """Louie dispatch for controller 

    +

            """ 

    +

            with self.app.test_request_context(): 

    +

                from flask import request 

    +

                if network is None or controller is None: 

    +

                    self.socketio.emit('my message response', 

    +

                                       {'data': {'state':None, 'message':None},}, 

    +

                                       namespace='/ozwave') 

    +

                    logging.debug('OpenZWave controller message : Nework or Controller is None.') 

    +

                else: 

    +

                    self.socketio.emit('my message response', 

    +

                                       {'data': {'state':state, 'message':message},}, 

    +

                                       namespace='/ozwave') 

    +

                    logging.debug('OpenZWave controller message : state %s - message %s.', state, message) 

    +

     

    +

        def stop(self): 

    +

            """Stop the tread 

    +

            """ 

    +

            self.leave_room_node() 

    +

            self.leave_room_values() 

    +

            self.leave_room_controller() 

    +

            self.leave_room_network() 

    +

            self._stopevent.set( ) 

    +

            logging.info("Stop listener") 

    +

     

    +

    def start_listener(app_, socketio_): 

    +

        """Start the listener 

    +

        """ 

    +

        global listener 

    +

        if listener is None: 

    +

            listener = ListenerThread(socketio_, app_) 

    +

            listener.start() 

    +

        return listener 

    +

     

    +

    def stop_listener(): 

    +

        """Stop the listener 

    +

        """ 

    +

        global listener 

    +

        listener.stop() 

    +

        listener = None 

    @@ -308,180 +313,185 @@

    __author__ = 'Sébastien GALLET aka bibi21000' 

    __email__ = 'bibi21000@gmail.com' 

     

    -

    import os, sys 

    -

    import time 

    -

    from threading import Thread 

    -

     

    -

    from flask import Flask, render_template, session, request, current_app 

    -

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    -

     

    -

    from pyozwweb.app import socketio, app 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    import os, sys 

    +

    import time 

    +

    from threading import Thread 

     

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    -

     

    -

    @socketio.on('my event', namespace='/test') 

    -

    def test_message(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s echo message : %s", request.remote_addr, message) 

    -

        print "Client %s echo message : %s" % (request.remote_addr, message) 

    -

        emit('my response', 

    -

             {'data': message['data'], 'count': session['receive_count']}) 

    -

     

    -

     

    -

    @socketio.on('my broadcast event', namespace='/test') 

    -

    def test_broadcast_message(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', 

    -

             {'data': message['data'], 'count': session['receive_count']}, 

    -

             broadcast=True) 

    -

     

    -

     

    -

    @socketio.on('join', namespace='/test') 

    -

    def join(message): 

    -

        join_room(message['room']) 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', 

    -

             {'data': 'In rooms: ' + ', '.join(request.namespace.rooms), 

    -

              'count': session['receive_count']}) 

    -

     

    -

     

    -

    @socketio.on('leave', namespace='/test') 

    -

    def leave(message): 

    -

        leave_room(message['room']) 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', 

    -

             {'data': 'In rooms: ' + ', '.join(request.namespace.rooms), 

    -

              'count': session['receive_count']}) 

    -

     

    -

     

    -

    @socketio.on('close room', namespace='/test') 

    -

    def close(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', {'data': 'Room ' + message['room'] + ' is closing.', 

    -

                             'count': session['receive_count']}, 

    -

             room=message['room']) 

    -

        close_room(message['room']) 

    -

     

    -

     

    -

    @socketio.on('my room event', namespace='/test') 

    -

    def send_room_message(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', 

    -

             {'data': message['data'], 'count': session['receive_count']}, 

    -

             room=message['room']) 

    -

     

    -

     

    -

    @socketio.on('disconnect request', namespace='/test') 

    -

    def disconnect_request(): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', 

    -

             {'data': 'Disconnected!', 'count': session['receive_count']}) 

    -

        disconnect() 

    -

     

    -

     

    -

    @socketio.on('connect', namespace='/test') 

    -

    def test_connect(): 

    -

        emit('my response', {'data': 'Connected', 'count': 0}) 

    +

    from flask import Flask, render_template, session, request, current_app 

    +

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    +

     

    +

    from pyozwweb.app import socketio, app 

    +

     

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    +

     

    +

    @socketio.on('my event', namespace='/test') 

    +

    def test_message(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s echo message : %s", request.remote_addr, message) 

    +

        print "Client %s echo message : %s" % (request.remote_addr, message) 

    +

        emit('my response', 

    +

             {'data': message['data'], 'count': session['receive_count']}) 

    +

     

    +

     

    +

    @socketio.on('my broadcast event', namespace='/test') 

    +

    def test_broadcast_message(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', 

    +

             {'data': message['data'], 'count': session['receive_count']}, 

    +

             broadcast=True) 

    +

     

    +

     

    +

    @socketio.on('join', namespace='/test') 

    +

    def join(message): 

    +

        join_room(message['room']) 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', 

    +

             {'data': 'In rooms: ' + ', '.join(request.namespace.rooms), 

    +

              'count': session['receive_count']}) 

    +

     

    +

     

    +

    @socketio.on('leave', namespace='/test') 

    +

    def leave(message): 

    +

        leave_room(message['room']) 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', 

    +

             {'data': 'In rooms: ' + ', '.join(request.namespace.rooms), 

    +

              'count': session['receive_count']}) 

    +

     

    +

     

    +

    @socketio.on('close room', namespace='/test') 

    +

    def close(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', {'data': 'Room ' + message['room'] + ' is closing.', 

    +

                             'count': session['receive_count']}, 

    +

             room=message['room']) 

    +

        close_room(message['room']) 

    +

     

    +

     

    +

    @socketio.on('my room event', namespace='/test') 

    +

    def send_room_message(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', 

    +

             {'data': message['data'], 'count': session['receive_count']}, 

    +

             room=message['room']) 

    +

     

    +

     

    +

    @socketio.on('disconnect request', namespace='/test') 

    +

    def disconnect_request(): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', 

    +

             {'data': 'Disconnected!', 'count': session['receive_count']}) 

    +

        disconnect() 

     

     

    -

    @socketio.on('disconnect', namespace='/test') 

    -

    def test_disconnect(): 

    -

        print('Client disconnected') 

    +

    @socketio.on('connect', namespace='/test') 

    +

    def test_connect(): 

    +

        emit('my response', {'data': 'Connected', 'count': 0}) 

     

     

    -

    #~ @socketio.on('my echo event', namespace='/socket') 

    -

    #~ def socket_echo(message): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s send echo" % (request.remote_addr)) 

    -

        #~ logging.debug('Echo event %s', message) 

    -

        #~ socketio.emit('my echo response', 

    -

             #~ {'data': message, 'count': session['receive_count']}) 

    -

    #~ 

    -

    #~ @socketio.on('test event', namespace='/socket') 

    -

    #~ def test_message(message): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ socketio.emit('test response', 

    -

             #~ {'data': message['data'], 'count': session['receive_count']}) 

    -

    #~ 

    -

    #~ @socketio.on('my broadcast event', namespace='/socket') 

    -

    #~ def test_broadcast_message(message): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s has broadcast message" % (request.remote_addr)) 

    -

        #~ socketio.emit('my response', 

    -

             #~ {'data': message['data'], 'count': session['receive_count']}, 

    -

              #~ broadcast=True) 

    -

    #~ 

    -

    #~ @socketio.on('join', namespace='/socket') 

    -

    #~ def join(message): 

    -

        #~ data = 'No data for room %s' % message['room'] 

    -

        #~ if message['room'] == 'network': 

    -

            #~ data = data_room_network(current_app.extensions['zwnetwork']) 

    -

        #~ logging.debug("Client %s has joined room %s" % (request.remote_addr, message['room'])) 

    -

        #~ join_room(message['room']) 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ socketio.emit('my %s response' % message['room'], 

    -

             #~ {'data' : data, 

    -

              #~ 'count': session['receive_count']}, 

    -

              #~ room=message['room'], 

    -

              #~ ) 

    -

    #~ 

    -

    #~ @socketio.on('refresh', namespace='/socket') 

    -

    #~ def refresh(message): 

    -

        #~ data = 'No data for room %s' % message['room'] 

    -

        #~ if message['room'] == 'network': 

    -

            #~ data = data_room_network(current_app.extensions['zwnetwork']) 

    -

        #~ logging.debug("Client %s refresh room %s" % (request.remote_addr, message['room'])) 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ socketio.emit('my %s response' % message['room'], 

    -

             #~ {'data' : data, 

    -

              #~ 'count': session['receive_count']}, 

    -

              #~ room=message['room'], 

    -

              #~ ) 

    -

    #~ 

    -

    #~ @socketio.on('leave', namespace='/socket') 

    -

    #~ def leave(message): 

    -

        #~ leave_room(message['room']) 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s has leaved room %s" % (request.remote_addr, message['room'])) 

    -

        #~ socketio.emit('my %s response' % message['room'], 

    -

             #~ {'data': None, 

    -

              #~ 'count': session['receive_count']}, 

    -

              #~ room=message['room'], 

    -

              #~ ) 

    -

    #~ 

    -

    #~ @socketio.on('close room', namespace='/socket') 

    -

    #~ def close(message): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s has closed the room %s" % (request.remote_addr, message['room'])) 

    -

        #~ socketio.emit('my echo response', {'data': 'Room ' + message['room'] + ' is closing.', 

    -

                             #~ 'count': session['receive_count']}, 

    -

             #~ room=message['room']) 

    -

        #~ close_room(message['room']) 

    -

    #~ 

    -

    #~ @socketio.on('my room event', namespace='/socket') 

    -

    #~ def send_room_message(message): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s has sent message to room %s" % (request.remote_addr, message['room'])) 

    -

        #~ socketio.emit('my echo response', 

    -

             #~ {'data': message['data'], 'count': session['receive_count']}, 

    -

             #~ room=message['room']) 

    -

    #~ 

    -

    #~ 

    -

    #~ @socketio.on('disconnect request', namespace='/socket') 

    -

    #~ def disconnect_request(): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s disconnects." % (request.remote_addr)) 

    -

        #~ socketio.emit('my echo response', 

    -

             #~ {'data': 'Disconnected!', 'count': session['receive_count']}) 

    -

        #~ disconnect() 

    +

    @socketio.on('disconnect', namespace='/test') 

    +

    def test_disconnect(): 

    +

        print('Client disconnected') 

    +

     

    +

     

    +

    #~ @socketio.on('my echo event', namespace='/socket') 

    +

    #~ def socket_echo(message): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s send echo" % (request.remote_addr)) 

    +

        #~ logging.debug('Echo event %s', message) 

    +

        #~ socketio.emit('my echo response', 

    +

             #~ {'data': message, 'count': session['receive_count']}) 

    +

    #~ 

    +

    #~ @socketio.on('test event', namespace='/socket') 

    +

    #~ def test_message(message): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ socketio.emit('test response', 

    +

             #~ {'data': message['data'], 'count': session['receive_count']}) 

    +

    #~ 

    +

    #~ @socketio.on('my broadcast event', namespace='/socket') 

    +

    #~ def test_broadcast_message(message): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s has broadcast message" % (request.remote_addr)) 

    +

        #~ socketio.emit('my response', 

    +

             #~ {'data': message['data'], 'count': session['receive_count']}, 

    +

              #~ broadcast=True) 

    +

    #~ 

    +

    #~ @socketio.on('join', namespace='/socket') 

    +

    #~ def join(message): 

    +

        #~ data = 'No data for room %s' % message['room'] 

    +

        #~ if message['room'] == 'network': 

    +

            #~ data = data_room_network(current_app.extensions['zwnetwork']) 

    +

        #~ logging.debug("Client %s has joined room %s" % (request.remote_addr, message['room'])) 

    +

        #~ join_room(message['room']) 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ socketio.emit('my %s response' % message['room'], 

    +

             #~ {'data' : data, 

    +

              #~ 'count': session['receive_count']}, 

    +

              #~ room=message['room'], 

    +

              #~ ) 

    +

    #~ 

    +

    #~ @socketio.on('refresh', namespace='/socket') 

    +

    #~ def refresh(message): 

    +

        #~ data = 'No data for room %s' % message['room'] 

    +

        #~ if message['room'] == 'network': 

    +

            #~ data = data_room_network(current_app.extensions['zwnetwork']) 

    +

        #~ logging.debug("Client %s refresh room %s" % (request.remote_addr, message['room'])) 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ socketio.emit('my %s response' % message['room'], 

    +

             #~ {'data' : data, 

    +

              #~ 'count': session['receive_count']}, 

    +

              #~ room=message['room'], 

    +

              #~ ) 

    +

    #~ 

    +

    #~ @socketio.on('leave', namespace='/socket') 

    +

    #~ def leave(message): 

    +

        #~ leave_room(message['room']) 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s has leaved room %s" % (request.remote_addr, message['room'])) 

    +

        #~ socketio.emit('my %s response' % message['room'], 

    +

             #~ {'data': None, 

    +

              #~ 'count': session['receive_count']}, 

    +

              #~ room=message['room'], 

    +

              #~ ) 

    +

    #~ 

    +

    #~ @socketio.on('close room', namespace='/socket') 

    +

    #~ def close(message): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s has closed the room %s" % (request.remote_addr, message['room'])) 

    +

        #~ socketio.emit('my echo response', {'data': 'Room ' + message['room'] + ' is closing.', 

    +

                             #~ 'count': session['receive_count']}, 

    +

             #~ room=message['room']) 

    +

        #~ close_room(message['room']) 

    +

    #~ 

    +

    #~ @socketio.on('my room event', namespace='/socket') 

    +

    #~ def send_room_message(message): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s has sent message to room %s" % (request.remote_addr, message['room'])) 

    +

        #~ socketio.emit('my echo response', 

    +

             #~ {'data': message['data'], 'count': session['receive_count']}, 

    +

             #~ room=message['room']) 

    +

    #~ 

    +

    #~ 

    +

    #~ @socketio.on('disconnect request', namespace='/socket') 

    +

    #~ def disconnect_request(): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s disconnects." % (request.remote_addr)) 

    +

        #~ socketio.emit('my echo response', 

    +

             #~ {'data': 'Disconnected!', 'count': session['receive_count']}) 

    +

        #~ disconnect() 

    @@ -405,273 +409,277 @@

    """ 

    __author__ = 'Sébastien GALLET aka bibi21000' 

    __email__ = 'bibi21000@gmail.com' 

    -

     

    -

    import os, sys 

    -

    import time 

    -

    from threading import Thread 

    -

     

    -

    from flask import Flask, render_template, session, request, current_app 

    -

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    -

     

    -

    import libopenzwave 

    -

    import openzwave 

    -

    from openzwave.node import ZWaveNode 

    -

    from openzwave.value import ZWaveValue 

    -

    from openzwave.scene import ZWaveScene 

    -

    from openzwave.controller import ZWaveController 

    -

    from openzwave.network import ZWaveNetwork 

    -

    from openzwave.option import ZWaveOption 

    -

    from louie import dispatcher, All 

    -

    from pyozwweb.app import socketio, app 

    -

     

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    -

     

    -

    @socketio.on('my echo event', namespace='/ozwave') 

    -

    def echo_message(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s request echo message : %s", request.remote_addr, message) 

    -

        emit('my response', 

    -

             {'data': message['data'], 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('disconnect request', namespace='/ozwave') 

    -

    def disconnect_request(): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s disconnects", request.remote_addr) 

    -

        emit('my response', 

    -

             {'data': 'Disconnected!', 'count': session['receive_count']}) 

    -

        disconnect() 

    -

     

    -

    @socketio.on('connect', namespace='/ozwave') 

    -

    def echo_connect(): 

    -

        logging.debug("Client %s connects", request.remote_addr) 

    -

        emit('my response', {'data': 'Connected', 'count': 0}) 

    -

     

    -

    @socketio.on('my network event', namespace='/ozwave') 

    -

    def echo_network_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s network event : %s", request.remote_addr, message) 

    -

        done=False 

    -

        keys = ['zoomlevel','zoomx','zoomy','panx','pany'] 

    -

        kvals = {} 

    -

        for key in keys: 

    -

            if key in message: 

    -

                kvals[key]=message[key] 

    -

        logging.debug("kvals : %s", kvals) 

    -

        if len(kvals) > 0: 

    -

            current_app.extensions['zwnetwork'].kvals = kvals 

    -

            done = True 

    -

            #Should we emit an event ? Or the api should send a new python louie mesage ? Or nothing 

    -

        if done == False : 

    -

            emit('my network response', 

    -

                 {'data': current_app.extensions['zwnetwork'].to_dict(), 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my node event', namespace='/ozwave') 

    -

    def echo_node_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s node event : %s", request.remote_addr, message) 

    -

        try : 

    -

            node_id = int(message['node_id']) 

    -

        except ValueError: 

    -

            node_id = 0 

    -

        except KeyError: 

    -

            node_id = 0 

    -

        if node_id == 0 or node_id not in current_app.extensions['zwnetwork'].nodes: 

    -

            logging.warning('Received invalid node_id : %s', message) 

    -

            return 

    -

        done=False 

    -

        keys = ['posx','posy'] 

    -

        kvals = {} 

    -

        for key in keys: 

    -

            if key in message: 

    -

                kvals[key]=message[key] 

    -

        logging.debug("kvals : %s", kvals) 

    -

        if len(kvals) > 0: 

    -

            current_app.extensions['zwnetwork'].nodes[node_id].kvals = kvals 

    -

            done = True 

    -

            #Should we emit an event ? Or the api should send a new python louie mesage ? Or nothing 

    -

        if 'name' in message: 

    -

            current_app.extensions['zwnetwork'].nodes[node_id].name = message['name'] 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    import os, sys 

    +

    import time 

    +

    from threading import Thread 

    +

     

    +

    from flask import Flask, render_template, session, request, current_app 

    +

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    +

     

    +

    import libopenzwave 

    +

    import openzwave 

    +

    from openzwave.node import ZWaveNode 

    +

    from openzwave.value import ZWaveValue 

    +

    from openzwave.scene import ZWaveScene 

    +

    from openzwave.controller import ZWaveController 

    +

    from openzwave.network import ZWaveNetwork 

    +

    from openzwave.option import ZWaveOption 

    +

    from louie import dispatcher, All 

    +

    from pyozwweb.app import socketio, app 

    +

     

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    +

     

    +

    @socketio.on('my echo event', namespace='/ozwave') 

    +

    def echo_message(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s request echo message : %s", request.remote_addr, message) 

    +

        emit('my response', 

    +

             {'data': message['data'], 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('disconnect request', namespace='/ozwave') 

    +

    def disconnect_request(): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s disconnects", request.remote_addr) 

    +

        emit('my response', 

    +

             {'data': 'Disconnected!', 'count': session['receive_count']}) 

    +

        disconnect() 

    +

     

    +

    @socketio.on('connect', namespace='/ozwave') 

    +

    def echo_connect(): 

    +

        logging.debug("Client %s connects", request.remote_addr) 

    +

        emit('my response', {'data': 'Connected', 'count': 0}) 

    +

     

    +

    @socketio.on('my network event', namespace='/ozwave') 

    +

    def echo_network_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s network event : %s", request.remote_addr, message) 

    +

        done=False 

    +

        keys = ['zoomlevel','zoomx','zoomy','panx','pany'] 

    +

        kvals = {} 

    +

        for key in keys: 

    +

            if key in message: 

    +

                kvals[key]=message[key] 

    +

        logging.debug("kvals : %s", kvals) 

    +

        if len(kvals) > 0: 

    +

            current_app.extensions['zwnetwork'].kvals = kvals 

    +

            done = True 

    +

            #Should we emit an event ? Or the api should send a new python louie mesage ? Or nothing 

    +

        if done == False : 

    +

            emit('my network response', 

    +

                 {'data': current_app.extensions['zwnetwork'].to_dict(), 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my node event', namespace='/ozwave') 

    +

    def echo_node_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s node event : %s", request.remote_addr, message) 

    +

        try : 

    +

            node_id = int(message['node_id']) 

    +

        except ValueError: 

    +

            node_id = 0 

    +

        except KeyError: 

    +

            node_id = 0 

    +

        if node_id == 0 or node_id not in current_app.extensions['zwnetwork'].nodes: 

    +

            logging.warning('Received invalid node_id : %s', message) 

    +

            return 

    +

        done=False 

    +

        keys = ['posx','posy'] 

    +

        kvals = {} 

    +

        for key in keys: 

    +

            if key in message: 

    +

                kvals[key]=message[key] 

    +

        logging.debug("kvals : %s", kvals) 

    +

        if len(kvals) > 0: 

    +

            current_app.extensions['zwnetwork'].nodes[node_id].kvals = kvals 

            done = True 

    -

        if 'location' in message: 

    -

            current_app.extensions['zwnetwork'].nodes[node_id].location = message['location'] 

    -

            done = True 

    -

        if done == False : 

    -

            logging.debug("Client %s node event : emit my node response") 

    -

            emit('my node response', 

    -

                 {'data': current_app.extensions['zwnetwork'].nodes[node_id].to_dict(), 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my nodes event', namespace='/ozwave') 

    -

    def echo_nodes_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s nodes event : %s", request.remote_addr, message) 

    -

        print "%s"%current_app.extensions['zwnetwork'].nodes_to_dict() 

    -

        emit('my nodes response', 

    -

             {'data': current_app.extensions['zwnetwork'].nodes_to_dict(), 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my controller event', namespace='/ozwave') 

    -

    def echo_controller_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s controller event : %s", request.remote_addr, message) 

    -

        emit('my controller response', 

    -

             {'data': current_app.extensions['zwnetwork'].controller.to_dict(), 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my command event', namespace='/ozwave') 

    -

    def echo_command_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s controller command event : %s", request.remote_addr, message) 

    -

        data = {} 

    -

        data['result'] = False 

    -

        data['message'] = "Command fail to start" 

    -

        command = message['command'] 

    -

        init_data = {'result':False, 'message':'', 'state':'', 'command':command} 

    -

        #Emit a blank message to clean the old data in javascript 

    -

        emit('my command response', 

    -

            {'data': init_data, 

    -

            'count': session['receive_count']}) 

    -

        if command == 'no_command': 

    -

            #This is for first time launch. Return default values for javascript 

    -

            data = {} 

    -

            data['message'] = current_app.extensions['zwnetwork'].controller.ctrl_last_message 

    -

            data['state'] = current_app.extensions['zwnetwork'].controller.ctrl_last_state 

    -

            emit('my message response', 

    -

                {'data': data, 

    -

                'count': session['receive_count']}) 

    -

            emit('my command response', 

    -

                {'data': init_data, 

    -

                'count': session['receive_count']}) 

    -

            return 

    -

        elif command == 'send_node_information': 

    -

            node_id=-1 

    -

            try: 

    -

                node_id=int(message['node_id']) 

    -

            except ValueError: 

    -

                node_id = -1 

    -

            except KeyError: 

    -

                node_id = -1 

    -

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    -

                data['result'] = False 

    -

                data['message'] = "Bad node_id" 

    -

            else: 

    -

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_send_node_information(node_id) 

    -

                #data['result'] = True 

    -

        elif command == 'remove_failed_node': 

    -

            node_id=-1 

    -

            try: 

    -

                node_id=int(message['node_id']) 

    -

            except ValueError: 

    -

                node_id = -1 

    -

            except KeyError: 

    -

                node_id = -1 

    -

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    -

                data['result'] = False 

    -

                data['message'] = "Bad node_id" 

    -

            else: 

    -

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_remove_failed_node(node_id) 

    -

                #data['result'] = True 

    -

        elif command == 'has_node_failed': 

    -

            node_id=-1 

    -

            try: 

    -

                node_id=int(message['node_id']) 

    -

            except ValueError: 

    -

                node_id = -1 

    -

            except KeyError: 

    -

                node_id = -1 

    -

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    -

                data['result'] = False 

    -

                data['message'] = "Bad node_id" 

    -

            else: 

    -

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_has_node_failed(node_id) 

    -

                #data['result'] = True 

    -

        elif command == 'replace_failed_node': 

    -

            node_id=-1 

    -

            try: 

    -

                node_id=int(message['node_id']) 

    -

            except ValueError: 

    -

                node_id = -1 

    -

            except KeyError: 

    -

                node_id = -1 

    -

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    -

                data['result'] = False 

    -

                data['message'] = "Bad node_id" 

    -

            else: 

    -

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_replace_failed_node(node_id) 

    -

                #data['result'] = True 

    -

        elif command == 'request_node_neigbhor_update': 

    -

            node_id=-1 

    -

            try: 

    -

                node_id=int(message['node_id']) 

    -

            except ValueError: 

    -

                node_id = -1 

    -

            except KeyError: 

    -

                node_id = -1 

    -

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    -

                data['result'] = False 

    -

                data['message'] = "Bad node_id" 

    -

            else: 

    -

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_request_node_neigbhor_update(node_id) 

    -

                #data['result'] = True 

    -

        elif command == 'request_network_update': 

    -

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_request_network_update() 

    -

        elif command == 'replication_send': 

    -

            try: 

    -

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    -

            except ValueError: 

    -

                high_power = False 

    -

            except KeyError: 

    -

                high_power = False 

    -

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_replication_send(high_power) 

    -

            #data['result'] = True 

    -

        elif command == 'add_device': 

    -

            try: 

    -

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    -

            except ValueError: 

    -

                high_power = False 

    -

            except KeyError: 

    -

                high_power = False 

    -

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_add_device(high_power) 

    -

            #data['result'] = True 

    -

        elif command == 'remove_device': 

    -

            try: 

    -

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    -

            except ValueError: 

    -

                high_power = False 

    -

            except KeyError: 

    -

                high_power = False 

    -

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_remove_device(high_power) 

    -

            #data['result'] = True 

    -

        elif command == 'cancel_command': 

    -

            data['result'] = current_app.extensions['zwnetwork'].controller.cancel_command() 

    -

        if data['result'] == True : 

    -

            data['message'] = "Command started" 

    -

        logging.debug("Client %s controller command event, data returned : %s", request.remote_addr, data) 

    -

        emit('my command response', 

    -

             {'data': data, 

    -

              'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my value event', namespace='/ozwave') 

    -

    def echo_value_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        node_id = message['node_id'] 

    -

        value_id = message['value_id'] 

    -

        logging.debug("Client %s value event : %s", request.remote_addr, current_app.extensions['zwnetwork'].nodes[node_id].values[value_id].to_dict()) 

    -

        emit('my value response', 

    -

             {'data': current_app.extensions['zwnetwork'].nodes[node_id].values[value_id].to_dict(), 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my scenes event', namespace='/ozwave') 

    -

    def echo_scenes_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s scenes event : %s", request.remote_addr, message) 

    -

        print "%s"%current_app.extensions['zwnetwork'].get_scenes() 

    -

        emit('my scenes response', 

    -

             {'data': current_app.extensions['zwnetwork'].get_scenes(), 'count': session['receive_count']}) 

    +

            #Should we emit an event ? Or the api should send a new python louie mesage ? Or nothing 

    +

        if 'name' in message: 

    +

            current_app.extensions['zwnetwork'].nodes[node_id].name = message['name'] 

    +

            done = True 

    +

        if 'location' in message: 

    +

            current_app.extensions['zwnetwork'].nodes[node_id].location = message['location'] 

    +

            done = True 

    +

        if done == False : 

    +

            logging.debug("Client %s node event : emit my node response") 

    +

            emit('my node response', 

    +

                 {'data': current_app.extensions['zwnetwork'].nodes[node_id].to_dict(), 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my nodes event', namespace='/ozwave') 

    +

    def echo_nodes_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s nodes event : %s", request.remote_addr, message) 

    +

        print "%s"%current_app.extensions['zwnetwork'].nodes_to_dict() 

    +

        emit('my nodes response', 

    +

             {'data': current_app.extensions['zwnetwork'].nodes_to_dict(), 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my controller event', namespace='/ozwave') 

    +

    def echo_controller_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s controller event : %s", request.remote_addr, message) 

    +

        emit('my controller response', 

    +

             {'data': current_app.extensions['zwnetwork'].controller.to_dict(), 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my command event', namespace='/ozwave') 

    +

    def echo_command_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s controller command event : %s", request.remote_addr, message) 

    +

        data = {} 

    +

        data['result'] = False 

    +

        data['message'] = "Command fail to start" 

    +

        command = message['command'] 

    +

        init_data = {'result':False, 'message':'', 'state':'', 'command':command} 

    +

        #Emit a blank message to clean the old data in javascript 

    +

        emit('my command response', 

    +

            {'data': init_data, 

    +

            'count': session['receive_count']}) 

    +

        if command == 'no_command': 

    +

            #This is for first time launch. Return default values for javascript 

    +

            data = {} 

    +

            data['message'] = current_app.extensions['zwnetwork'].controller.ctrl_last_message 

    +

            data['state'] = current_app.extensions['zwnetwork'].controller.ctrl_last_state 

    +

            emit('my message response', 

    +

                {'data': data, 

    +

                'count': session['receive_count']}) 

    +

            emit('my command response', 

    +

                {'data': init_data, 

    +

                'count': session['receive_count']}) 

    +

            return 

    +

        elif command == 'send_node_information': 

    +

            node_id=-1 

    +

            try: 

    +

                node_id=int(message['node_id']) 

    +

            except ValueError: 

    +

                node_id = -1 

    +

            except KeyError: 

    +

                node_id = -1 

    +

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    +

                data['result'] = False 

    +

                data['message'] = "Bad node_id" 

    +

            else: 

    +

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_send_node_information(node_id) 

    +

                #data['result'] = True 

    +

        elif command == 'remove_failed_node': 

    +

            node_id=-1 

    +

            try: 

    +

                node_id=int(message['node_id']) 

    +

            except ValueError: 

    +

                node_id = -1 

    +

            except KeyError: 

    +

                node_id = -1 

    +

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    +

                data['result'] = False 

    +

                data['message'] = "Bad node_id" 

    +

            else: 

    +

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_remove_failed_node(node_id) 

    +

                #data['result'] = True 

    +

        elif command == 'has_node_failed': 

    +

            node_id=-1 

    +

            try: 

    +

                node_id=int(message['node_id']) 

    +

            except ValueError: 

    +

                node_id = -1 

    +

            except KeyError: 

    +

                node_id = -1 

    +

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    +

                data['result'] = False 

    +

                data['message'] = "Bad node_id" 

    +

            else: 

    +

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_has_node_failed(node_id) 

    +

                #data['result'] = True 

    +

        elif command == 'replace_failed_node': 

    +

            node_id=-1 

    +

            try: 

    +

                node_id=int(message['node_id']) 

    +

            except ValueError: 

    +

                node_id = -1 

    +

            except KeyError: 

    +

                node_id = -1 

    +

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    +

                data['result'] = False 

    +

                data['message'] = "Bad node_id" 

    +

            else: 

    +

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_replace_failed_node(node_id) 

    +

                #data['result'] = True 

    +

        elif command == 'request_node_neigbhor_update': 

    +

            node_id=-1 

    +

            try: 

    +

                node_id=int(message['node_id']) 

    +

            except ValueError: 

    +

                node_id = -1 

    +

            except KeyError: 

    +

                node_id = -1 

    +

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    +

                data['result'] = False 

    +

                data['message'] = "Bad node_id" 

    +

            else: 

    +

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_request_node_neigbhor_update(node_id) 

    +

                #data['result'] = True 

    +

        elif command == 'request_network_update': 

    +

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_request_network_update() 

    +

        elif command == 'replication_send': 

    +

            try: 

    +

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    +

            except ValueError: 

    +

                high_power = False 

    +

            except KeyError: 

    +

                high_power = False 

    +

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_replication_send(high_power) 

    +

            #data['result'] = True 

    +

        elif command == 'add_device': 

    +

            try: 

    +

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    +

            except ValueError: 

    +

                high_power = False 

    +

            except KeyError: 

    +

                high_power = False 

    +

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_add_device(high_power) 

    +

            #data['result'] = True 

    +

        elif command == 'remove_device': 

    +

            try: 

    +

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    +

            except ValueError: 

    +

                high_power = False 

    +

            except KeyError: 

    +

                high_power = False 

    +

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_remove_device(high_power) 

    +

            #data['result'] = True 

    +

        elif command == 'cancel_command': 

    +

            data['result'] = current_app.extensions['zwnetwork'].controller.cancel_command() 

    +

        if data['result'] == True : 

    +

            data['message'] = "Command started" 

    +

        logging.debug("Client %s controller command event, data returned : %s", request.remote_addr, data) 

    +

        emit('my command response', 

    +

             {'data': data, 

    +

              'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my value event', namespace='/ozwave') 

    +

    def echo_value_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        node_id = message['node_id'] 

    +

        value_id = message['value_id'] 

    +

        logging.debug("Client %s value event : %s", request.remote_addr, current_app.extensions['zwnetwork'].nodes[node_id].values[value_id].to_dict()) 

    +

        emit('my value response', 

    +

             {'data': current_app.extensions['zwnetwork'].nodes[node_id].values[value_id].to_dict(), 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my scenes event', namespace='/ozwave') 

    +

    def echo_scenes_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s scenes event : %s", request.remote_addr, message) 

    +

        print "%s"%current_app.extensions['zwnetwork'].get_scenes() 

    +

        emit('my scenes response', 

    +

             {'data': current_app.extensions['zwnetwork'].get_scenes(), 'count': session['receive_count']}) 

    @@ -204,72 +206,74 @@

    """ 

    __author__ = 'Sébastien GALLET aka bibi21000' 

    __email__ = 'bibi21000@gmail.com' 

    -

     

    -

    import os, sys 

    -

    import time 

    -

    from threading import Thread 

    -

     

    -

    from flask import Flask, render_template, session, request, current_app 

    -

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    -

     

    -

    import libopenzwave 

    -

    import openzwave 

    -

    from openzwave.node import ZWaveNode 

    -

    from openzwave.value import ZWaveValue 

    -

    from openzwave.scene import ZWaveScene 

    -

    from openzwave.controller import ZWaveController 

    -

    from openzwave.network import ZWaveNetwork 

    -

    from openzwave.option import ZWaveOption 

    -

    from louie import dispatcher, All 

    -

    from pyozwweb.app import socketio, app 

    -

    from listener import listener 

    -

     

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    -

     

    -

    @app.errorhandler(404) 

    -

    def not_found(error): 

    -

        return render_template('404.html'), 404 

    -

     

    -

    @app.route('/') 

    -

    def home(): 

    -

        return render_template('home.html') 

    -

     

    -

    @app.route('/node') 

    -

    @app.route('/node/<int:node_id>') 

    -

    def node(node_id=1): 

    -

        return render_template('node.html', node_id=node_id) 

    -

     

    -

    @app.route('/values') 

    -

    def values(): 

    -

        return render_template('values.html') 

    -

     

    -

    @app.route('/controller') 

    -

    def controller(): 

    -

        return render_template('controller.html') 

    -

     

    -

    @app.route('/debug') 

    -

    def debug(): 

    -

        return render_template('debug.html') 

    -

     

    -

    @app.route('/map') 

    -

    def map(): 

    -

        return render_template('map.html') 

    -

     

    -

    @app.route('/scenes') 

    -

    def scenes(): 

    -

        return render_template('scenes.html') 

    -

     

    -

    @app.route('/chat') 

    -

    def chat(): 

    -

        return render_template('chat.html') 

    +

    from gevent import monkey 

    +

    monkey.patch_all() 

    +

     

    +

    import os, sys 

    +

    import time 

    +

    from threading import Thread 

    +

     

    +

    from flask import Flask, render_template, session, request, current_app 

    +

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    +

     

    +

    import libopenzwave 

    +

    import openzwave 

    +

    from openzwave.node import ZWaveNode 

    +

    from openzwave.value import ZWaveValue 

    +

    from openzwave.scene import ZWaveScene 

    +

    from openzwave.controller import ZWaveController 

    +

    from openzwave.network import ZWaveNetwork 

    +

    from openzwave.option import ZWaveOption 

    +

    from louie import dispatcher, All 

    +

    from pyozwweb.app import socketio, app 

    +

    from listener import listener 

    +

     

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    +

     

    +

    @app.errorhandler(404) 

    +

    def not_found(error): 

    +

        return render_template('404.html'), 404 

    +

     

    +

    @app.route('/') 

    +

    def home(): 

    +

        return render_template('home.html') 

    +

     

    +

    @app.route('/node') 

    +

    @app.route('/node/<int:node_id>') 

    +

    def node(node_id=1): 

    +

        return render_template('node.html', node_id=node_id) 

    +

     

    +

    @app.route('/values') 

    +

    def values(): 

    +

        return render_template('values.html') 

    +

     

    +

    @app.route('/controller') 

    +

    def controller(): 

    +

        return render_template('controller.html') 

    +

     

    +

    @app.route('/debug') 

    +

    def debug(): 

    +

        return render_template('debug.html') 

    +

     

    +

    @app.route('/map') 

    +

    def map(): 

    +

        return render_template('map.html') 

    +

     

    +

    @app.route('/scenes') 

    +

    def scenes(): 

    +

        return render_template('scenes.html') 

    +

     

    +

    @app.route('/chat') 

    +

    def chat(): 

    +

        return render_template('chat.html') 

    @@ -200,46 +204,50 @@

        RELOADER = False 

        DATABASE_URI = 'sqlite://:memory:' 

     

    -

        LOGGING_CONF = 'logging.conf' 

    -

     

    -

        SECRET_KEY = 'This string will be replaced with a proper key in production.' 

    -

     

    -

        THREADS_PER_PAGE = 8 

    +

        HOST = "127.0.0.1" 

    +

        PORT = 5000 

    +

     

    +

        LOGGING_CONF = 'logging.conf' 

    +

        APP_CONF = 'app.conf' 

     

    -

        CSRF_ENABLED = True 

    -

        CSRF_SESSION_KEY = "somethingimpossibletoguess" 

    -

     

    -

        RECAPTCHA_USE_SSL = False 

    -

        RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' 

    -

        RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' 

    -

        RECAPTCHA_OPTIONS = {'theme': 'white'} 

    -

     

    -

        ZWAVE_DEVICE = "/dev/ttyUSB0" 

    -

        ZWAVE_DEBUG = "Debug" 

    -

        ZWAVE_LOGGING = True 

    -

        ZWAVE_DIR = None 

    -

        USER_DIR = "." 

    -

     

    -

    class ProductionConfig(Config): 

    -

        DATABASE_URI = 'mysql://user@localhost/foo' 

    -

        ZWAVE_DEBUG = "Warning" 

    +

        SECRET_KEY = 'This string will be replaced with a proper key in production.' 

    +

     

    +

        THREADS_PER_PAGE = 8 

    +

     

    +

        CSRF_ENABLED = True 

    +

        CSRF_SESSION_KEY = "somethingimpossibletoguess" 

    +

     

    +

        RECAPTCHA_USE_SSL = False 

    +

        RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' 

    +

        RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' 

    +

        RECAPTCHA_OPTIONS = {'theme': 'white'} 

    +

     

    +

        ZWAVE_DEVICE = "/dev/ttyUSB0" 

    +

        ZWAVE_DEBUG = "Debug" 

    +

        ZWAVE_LOGGING = True 

    +

        ZWAVE_DIR = None 

    +

        USER_DIR = "." 

     

    -

    class RunConfig(Config): 

    -

        TESTING = True 

    -

        DEBUG = True 

    -

        ZWAVE_DIR = "../../openzwave/config" 

    -

     

    -

    class ReloadConfig(Config): 

    -

        TESTING = True 

    -

        DEBUG = True 

    -

        RELOADER = True 

    -

        ZWAVE_DIR = "../../openzwave/config" 

    -

     

    -

    class TestingConfig(Config): 

    -

        TESTING = True 

    -

        LOGGING_CONF = 'tests/logging.conf' 

    -

        DEBUG = True 

    -

     

    +

    class ProductionConfig(Config): 

    +

        DATABASE_URI = 'mysql://user@localhost/foo' 

    +

        ZWAVE_DEBUG = "Warning" 

    +

     

    +

    class RunConfig(Config): 

    +

        TESTING = True 

    +

        DEBUG = True 

    +

        ZWAVE_DIR = "../../openzwave/config" 

    +

     

    +

    class ReloadConfig(Config): 

    +

        TESTING = True 

    +

        DEBUG = True 

    +

        RELOADER = True 

    +

        ZWAVE_DIR = "../../openzwave/config" 

    +

     

    +

    class TestingConfig(Config): 

    +

        TESTING = True 

    +

        LOGGING_CONF = 'tests/logging.conf' 

    +

        DEBUG = True 

    +

     

    device (openzwave.controller.ZWaveController attribute)
    @@ -364,6 +362,8 @@

    D

    +
    disable_poll() (openzwave.value.ZWaveValue method)
    @@ -373,6 +373,10 @@

    D

    +
    do_poll_statistics() (openzwave.controller.ZWaveController method) +
    + +
    driverData() (in module libopenzwave)
    @@ -608,12 +612,12 @@

    G

    getNodeProductId() (libopenzwave.PyManager method)
    -
    getNodeProductName() (libopenzwave.PyManager method)
    +
    getNodeProductType() (libopenzwave.PyManager method)
    @@ -806,6 +810,10 @@

    G

    groups (openzwave.node.ZWaveNode attribute)
    + +
    groups_to_dict() (openzwave.node.ZWaveNode method) +
    +
    @@ -1335,6 +1343,10 @@

    P

    +
    poll_stats (openzwave.controller.ZWaveController attribute) +
    + +
    precision (openzwave.value.ZWaveValue attribute)
    @@ -1358,12 +1370,12 @@

    P

    PyControllerCommand (in module libopenzwave)
    +
    +
    PyControllerState (in module libopenzwave)
    -
    -
    PyGenres (in module libopenzwave)
    @@ -1769,11 +1781,15 @@

    S

    -
    stop() (openzwave.network.ZWaveNetwork method) +
    stop() (openzwave.controller.ZWaveController method)
    +
    (openzwave.network.ZWaveNetwork method) +
    + +
    (pyozwweb.app.listener.ListenerThread method)
    @@ -1822,6 +1838,10 @@

    T

    +
    (openzwave.group.ZWaveGroup method) +
    + +
    (openzwave.network.ZWaveNetwork method)
    @@ -1882,6 +1902,10 @@

    V

    value_id (openzwave.value.ZWaveValue attribute)
    + +
    values_to_dict() (openzwave.node.ZWaveNode method) +
    +
    diff --git a/docs/html/group.html b/docs/html/group.html index ac2a1c71..d5bc9708 100644 --- a/docs/html/group.html +++ b/docs/html/group.html @@ -186,6 +186,24 @@

    Group documentation +
    +to_dict(extras=['all'])
    +

    Return a dict representation of the group.

    + +++ + + + + + + + +
    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    +

    +
    diff --git a/docs/html/network.html b/docs/html/network.html index 41722f5c..8bfb1140 100644 --- a/docs/html/network.html +++ b/docs/html/network.html @@ -487,12 +487,16 @@

    Network documentation
    -nodes_to_dict(kvals=True)
    +nodes_to_dict(extras=['all'])

    Return a dict representation of the network.

    + + + + @@ -553,12 +557,16 @@

    Network documentation
    -scenes_to_dict(kvals=True)
    +scenes_to_dict(extras=['all'])

    Return a JSONifiable dict representation of the scenes.

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    + + + + @@ -707,12 +715,16 @@

    Network documentation
    -to_dict(kvals=True)
    +to_dict(extras=['kvals'])

    Return a dict representation of the network.

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    + + + + diff --git a/docs/html/node.html b/docs/html/node.html index 425278e0..d9d115c2 100644 --- a/docs/html/node.html +++ b/docs/html/node.html @@ -330,6 +330,24 @@

    Node documentation +
    +groups_to_dict(extras=['all'])
    +

    Return a dict representation of the groups.

    +

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    +++ + + + + + + + +
    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    +

    +
    has_command_class(class_id)
    @@ -846,12 +864,16 @@

    Node documentation
    -to_dict(kvals=True)
    +to_dict(extras=['all'])

    Return a dict representation of the node.

    + + + + @@ -865,6 +887,24 @@

    Node documentation +
    +values_to_dict(extras=['all'])
    +

    Return a dict representation of the values.

    +

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    +++ + + + + + + + +
    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    +

    +
    version
    diff --git a/docs/html/nosetests/nosetests.html b/docs/html/nosetests/nosetests.html index 26db614e..cd7dea41 100644 --- a/docs/html/nosetests/nosetests.html +++ b/docs/html/nosetests/nosetests.html @@ -145,9 +145,9 @@

    Unit Test Report

    -

    Start Time: 2015-05-03 01:04:37

    -

    Duration: 0:04:39.646530

    -

    Status: Pass 73

    +

    Start Time: 2015-05-03 16:11:55

    +

    Duration: 0:03:41.667291

    +

    Status: Pass 77

    @@ -179,177 +179,183 @@

    Unit Test Report

    View - - tests.api.test_dimmer:TestDimmer - 51.00 - 2 - 2 - 0 - 0 - Detail - - - -
    test_010_dimmer_level
    - 43.00 - pass - - - -
    test_110_dimmer_on_off
    - 8.00 - pass - - - - tests.api.test_switch:TestSwitch - 45.00 - 2 - 2 - 0 - 0 - Detail - - - -
    test_010_switch_state
    - 42.00 - pass - - - -
    test_110_switch_on_off
    - 3.00 - pass - - tests.api.test_controller:TestController - 10.00 - 19 - 19 + 40.00 + 21 + 21 0 0 - Detail + Detail - +
    test_010_controller
    - 5.00 + 0.00 pass - +
    test_020_controller_capabilities
    0.00 pass - +
    test_030_controller_send_queue
    0.00 pass - +
    test_040_controller_stats
    0.00 pass - +
    test_110_controller_soft_reset
    5.00 pass - +
    test_310_controller_node
    0.00 pass - +
    test_320_controller_node_capabilities
    0.00 pass - +
    test_330_controller_node_neighbors
    0.00 pass - +
    test_340_controller_node_baud_rate
    0.00 pass - +
    test_410_controller_node_product
    0.00 pass - +
    test_420_controller_node_name
    0.00 pass - +
    test_430_controller_node_product_location
    0.00 pass - +
    test_440_controller_node_product_name
    0.00 pass - +
    test_510_controller_node_group
    0.00 pass - +
    test_610_controller_node_command_class
    0.00 pass - +
    test_710_controller_node_manufacturer_name
    0.00 pass - +
    test_760_controller_stats_label
    0.00 pass - +
    test_810_controller_node_values
    0.00 pass - +
    test_820_controller_node_generic
    0.00 pass + +
    test_830_controller_node_refresh
    + 0.00 + pass + + + +
    test_910_controller_stats_poll
    + 35.00 + pass + + + + tests.api.test_dimmer:TestDimmer + 8.00 + 2 + 2 + 0 + 0 + Detail + + + +
    test_010_dimmer_level
    + 0.00 + pass + + + +
    test_110_dimmer_on_off
    + 8.00 + pass + + + + tests.api.test_network_start:TestNetworkStartStop + 5.00 + 1 + 1 + 0 + 0 + Detail + + + +
    test_000_network_start_stop
    + 5.00 + pass + + tests.api.test_controller_command:TestControllerCommand - 9.00 + 5.00 3 3 0 @@ -359,41 +365,53 @@

    Unit Test Report

    test_010_command_send_node_information_nodeid
    - 2.00 + 1.00 pass
    test_020_command_send_node_information_nodeid_controller
    - 5.00 + 3.00 pass
    test_210_command_request_node_neigbhor_update_node
    - 2.00 + 1.00 pass - tests.api.test_network_start:TestNetworkStartStop - 6.00 - 1 - 1 + tests.api.test_switch_all:TestSwitchAll + 4.00 + 3 + 3 0 0 - Detail + Detail -
    test_000_network_start_stop
    - 6.00 +
    test_010_switch_all_item
    + 0.00 + pass + + + +
    test_015_switch_all_set_item
    + 4.00 + pass + + + +
    test_020_switch_all_items
    + 0.00 pass tests.api.test_protection:TestProtection - 6.00 + 4.00 4 4 0 @@ -403,7 +421,7 @@

    Unit Test Report

    test_010_protection_item
    - 2.00 + 0.00 pass @@ -426,297 +444,291 @@

    Unit Test Report

    - tests.api.test_scene:TestScene - 5.00 - 3 - 3 + tests.api.test_switch:TestSwitch + 3.00 + 2 + 2 0 0 - Detail + Detail -
    test_005_scene_add_remove
    - 5.00 - pass - - - -
    test_010_scenes_to_dict
    +
    test_010_switch_state
    0.00 pass - -
    test_020_scene_to_dict
    - 0.00 + +
    test_110_switch_on_off
    + 3.00 pass - tests.api.test_sensor:TestSensor - 5.00 - 2 - 2 + tests.api.autobuild.test_api:TestNetworkApi + 2.04 + 3 + 3 0 0 - Detail + Detail -
    test_010_sensor_bool
    - 5.00 +
    test_000_api_network
    + 2.04 pass -
    test_410_sensor_decimal
    - 0.00 - pass - - - - tests.api.test_switch_all:TestSwitchAll - 4.00 - 3 - 3 - 0 - 0 - Detail - - - -
    test_010_switch_all_item
    +
    test_900_api_singleton
    0.00 pass - -
    test_015_switch_all_set_item
    - 4.00 - pass - - - -
    test_020_switch_all_items
    + +
    test_905_network_singleton
    0.00 pass tests.api.test_network:TestNetwork - 3.01 + 2.04 9 9 0 0 - Detail + Detail - +
    test_000_network_awake
    - 1.00 + 0.00 pass - +
    test_010_network_ready
    0.00 pass - +
    test_100_network_test
    0.00 pass - +
    test_110_network_heal
    0.00 pass - +
    test_120_network_poll
    0.00 pass - +
    test_200_network_to_dict
    0.00 pass - +
    test_220_network_nodes_to_dict
    0.00 pass - +
    test_300_network_kvals_nodes
    - 1.05 + 1.07 pass - +
    test_310_network_kvals_controller
    0.06 pass - tests.api.test_nodes:TestNodes - 1.00 - 4 - 4 + tests.manager.autobuild.test_manager:ManagerTest + 0.07 + 1 + 1 0 0 - Detail - - - -
    test_000_nodes_count
    - 1.00 - pass + Detail - -
    test_100_nodes_test
    - 0.00 - pass - - - -
    test_200_nodes_to_dict
    - 0.00 - pass - - - -
    test_210_controller_to_dict
    - 0.00 + +
    test_000_import
    + 0.07 pass tests.web.test_server:FlaskServerTest - 0.03 + 0.04 9 9 0 0 - Detail + Detail - +
    test_000_server_start
    - 0.01 + 0.02 pass - +
    test_001_error_404
    0.00 pass - +
    test_100_home_is_up
    0.00 pass - +
    test_200_controller_is_up
    0.00 pass - +
    test_300_values_is_up
    0.00 pass - +
    test_400_controller_is_up
    0.00 pass - +
    test_500_node_is_up
    0.00 pass - +
    test_600_map_is_up
    0.00 pass - +
    test_700_scenes_is_up
    0.00 pass - tests.manager.autobuild.test_manager:ManagerTest - 0.02 - 1 - 1 + tests.lib.autobuild.test_lib:TestInit + 0.00 + 4 + 4 0 0 - Detail + Detail - -
    test_000_import
    - 0.02 + +
    test_000_init
    + 0.00 + pass + + + +
    test_010_options_exceptions
    + 0.00 + pass + + + +
    test_020_options_without_command_line
    + 0.00 + pass + + + +
    test_030_options_with_command_line
    + 0.00 pass - tests.lib.autobuild.test_lib:TestInit + tests.api.test_nodes:TestNodes 0.00 - 4 - 4 + 5 + 5 0 0 - Detail + Detail - -
    test_000_init
    + +
    test_000_nodes_count
    0.00 pass - -
    test_010_options_exceptions
    + +
    test_100_nodes_test
    0.00 pass - -
    test_020_options_without_command_line
    + +
    test_200_nodes_to_dict
    0.00 pass - -
    test_030_options_with_command_line
    + +
    test_210_controller_to_dict
    + 0.00 + pass + + + +
    test_220_nodes_groups_to_dict
    0.00 pass - tests.api.autobuild.test_api:TestNetworkApi + tests.api.test_value:TestValue + 0.00 + 1 + 1 + 0 + 0 + Detail + + + +
    test_200_values_to_dict
    + 0.00 + pass + + + + tests.api.test_scene:TestScene 0.00 3 3 @@ -726,19 +738,19 @@

    Unit Test Report

    -
    test_000_api_network
    +
    test_005_scene_add_remove
    0.00 pass -
    test_900_api_singleton
    +
    test_010_scenes_to_dict
    0.00 pass -
    test_905_network_singleton
    +
    test_020_scene_to_dict
    0.00 pass @@ -777,11 +789,33 @@

    Unit Test Report

    pass + + tests.api.test_sensor:TestSensor + 0.00 + 2 + 2 + 0 + 0 + Detail + + + +
    test_010_sensor_bool
    + 0.00 + pass + + + +
    test_410_sensor_decimal
    + 0.00 + pass + + Total - 2:25.09 - 73 - 73 + 1:15.03 + 77 + 77 0 0   diff --git a/docs/html/objects.inv b/docs/html/objects.inv index 0fb48823749ccb778e193d84d20f05a2a9e671b4..762ff856ee6cbf358370308ef80b41e291f44f25 100644 GIT binary patch delta 4729 zcmV-<5{B)%CHy6joqs2jb*&S7qIp#9g$0q2#0f=m2{N|w>$mZuNCE`ALFN=i7C=1u z-CsA)RhE|-f4dQF_DjL`ytsMy^G$tucQ${xJ+tSk7hH|YcKQb|?8tv&Syt6;UX`M4^71$yRpk4s=6~h)SN4tTvH!ez_fszF zswjAd`EA;8)^d^Zl4E{;z~@JUepQiJ7f@ z;Is7bm+f z!h=elA5Z(LK{9}nGOus|97yd#xEmlC)*>kqNJdFM^?xw@joPaLUdvPLVQboC0!y9x zQG3qLAoWR45?!k9C!+~;G}}~%7HB{TT9Q0JSKsi8X3vj#d3{1!ozJYya1SbAH+%O#{z=~idWLQp=)c*aIt{~Jg z@wZ&Gf`7zRxNS(un5SKxfq*0{R&@qlnYR@2g}1^60zA8bEXElkDG+)yP^p3kac1a5;H{^kk@y=xuDu20U(Y$QLDS70bt(BnMnc z7a2HfN>FwERUaRUlWqeRf5xW-zTD#`FzN>D#4y^c?Xt01wO=M$cygiNFD&M60Kh46Vd`?hw|gkB=OOm zk4@FpBymr$P1NKR*-cQ&1CJFSc(i*ks!<&qW?WGnHNn#~q>K&We_iQ=va-rn5`c`# z(wu4=^(3D~4uV!%4#+EtQ&M{-a2g-v#J*6D337HYu&CDTksgS#hXuAvL-9&M+7R?V zMU82iiJ%n|?Zt}-ssoqhf_R5h-G$W^gFpwt(lAO~$}#MN^kIWEYa`h*N4urOe1f3G zR$`=>phg$$w$C|iE%p0&aJXQ-o!D+4~?f}K~FtcPY1st$;)W@Vm$@)8DGB| z7}xdXm$Obn{>$-_^&j3TMLC#pG{$|@VAS<5%Fq}MRNn+f*wD;yjQK7!N=lj05cneS zd+UOak3oGG7^Thr;TZLeGorp!-(O$({+8ACt=0sSBkzAPfB&#*|2Mc>qfz>+&=~Dv zkH)C40%J5C4Tq?277qLNzkk8U&+?OEB^b|IFmb@%=QlqOj(W-_u30vp2f$U`fMMr|5quE z#L#D=k1a8tf7S32zHry*u^&Lv{FS$-_f`5kXxUqkCFUb>shU%I8rUfjDUUGG(h@}3 zcwqz93KCN;zHpXZ!t@kzXbrE6T$`1Nj7l$_n!go_3m%nDR&tJ;P3Y z)MS!ena@r#kSOS_TIn}Dv4uTNPd(`k)+Fm0Y26LTe;KqRx3n59aMbWW)kj#5G|(qY z7|5jn1HwSLr{}|gMAJr2szp5O&oEO`R&9Q`ByGb=!F2R%H0@BlE{dwh@=$%T34O}q zyd)^OO&v*cXsUCPX9>{uP<_VGrHydmXmUbE+L>I>x_$~=lx{BT%% zJxP|I$p6_1J#;-38xG|L4q3&4pR^14r%AePq<@WLnrIg=Q3$a$;?`vCuJcKs5_4XG zH41Q~XvV!e~79m95^s_h7=VgX`QnTNL2p>%DYQY zM#KCasT29P43Doda-YAylDTANHXE@b=~?Z=Xg#Yxe}#K=?sn+wc$T2fLK?1WpcK?F zM*f3P#cJ$}hFGjQNj1+(cfn2*VS~?#0&p!8E3&>_?-(zx94?drqbTjCaCi?&%xx`< zf1`HhHb27riAL{)EZC57m}Scz z%bcvx!Dq>KKgKPV$Ru!!8C*icL5G!z3=2DsDCH)6HpOS1TVAEq>V~Jek9cuRrG3Z0 zOiFG83Q<62(EJ=p7<2x==>7k&_dnU!e@B_SiIC$vh0FUx;qu0A=N8nJvYPGlB5!lP zhN0n19!{)0a-g65kgriWMRnA1rQJ16u)+kF`pIT zwYUhP-~M=Dz(F70Qr?G6dHnt)l7PKXb9A26Q`h^MIR8#vgd1VWOKeaF_Fj0$da(G!-jEY2X-F zoehr#46ERFJZFkj1qxQLZJ`&9%2@3e{wl$pFGG8Aqo8qA5CV)DB~Mm5y}*rXnm?U| zAg0ksiTBb{gpr4?OpU(YjGLvKlevnV=rj8SA2Nec9ojDvp%iJ_b2$xN46O+++{p)%k24I0`pHKQmsd5Bl31FU!UeeD@^Y}s~VNXW1giXHvorp zc;x8cI^JBs4?M2JevGGjm|h9Zd{-s_(9LtX#_~4hrHQJSo9VW@KlixA|re`a$}YTiBdS!yt) zAf$w?3#_o1ax}Y7q7#m%F!N-`bSSJ&9zHe{I{w0?Oe7|(Z)kzFQ~Wtx!_P66fXNw3 zXxg(ZWseqmQq!3ge|^TOm;g;0{eUwg1E!bsy;bOHq8nl(-o5riL9hZ5=8fX!J-p%V zo^{!mRhUyV*KRnf)fK;~!LY{0d6}ZqODf5rKTcp!TnBG>f<}tF)q{+A`vB z4XCV-r>rzuSe6aavumNtPxh+TVwbgFjt%t&*Yril=flvB|WHGT_&Hi_eLb@G89xILFk z5oIS+6&6)4O|4H2c)?e@2nQ1K!S4i56rylR*`UO7)0MFa*JygMD7h$j+tAP*0FS(; zZpeAk(UuR zhuA}u0%E&rbaq62^jJrfR6DvVJz%?Rl(6fKhE*3m)T^}Xy%Xf*)f}LxuBE(_A+bYV z#FyDk@0ymg`Yd~ym?k&^p;R30u8n_}e|abB9i^Co%1S=bt|8?-bFwgvs6fww(_VKi z`d}A*CU7v*ChwUO?=^*LBef`xWX(`LA|b#r17Si|I6ORm`gHgCee&>hx7!gSK}3wA z$ArY<6E}d1?bHjZHh>zSGs3eeIdqo-6mfrlO~E$Wvxx^zbZk{{auP=k__&KKe+*Lb zI6WqM?Xd@LCSqMnTUi=WV~aL`RY$3V#JZadDg286n8GpDaLTCluEAN_%iiL;{F8at zPK1jwi-JsxF5@xLatUgU1?7420;90>I4HdsuX318hP&8I4i*UFw0e*3d zU{K1+L4Vhh)9C6xyCT->eYJXTg2+C+PgVI&pVy-Q=wW^I|gd`0=jO5ARLc< z=Z`g!d|#lBX44Ff##wrru{_3YE^#(Sv!=S!_1F(NFEYBTZsdaj4%5M?f1!p^>@7O9 zVgmazKtjjI`6S@9?Iu|c8lb(MYjsNoQhbCejl#kR!}UXoUUa*rD#lnz{!*FA#G9#j1!LNaWqGXY4MOUkAqv>Vs zD{701>{uCR*_ze=m!nk@2@-5=m?e z)iI48W8Qz@!2k7IS5`ayroS&0k>+y52w*%9^_z6^P-*lmx+pw7@$_qAyFe_Ll6n|< zwrdBvKfYSZj<*}up6K^Bo22(fwXM+>(0m(4ZPO9aCh5r4Cv-t_Vk<^;AcKryIHfY> zlF9_qVmg~D;U5W{f0>rRMRkmul)n@OT1JFdL$=!Hs@R)$RV#9RMXB48nNYe$X+$0< zc6>|Z8<>;ESD24(Xd&XdD$N-qESM>YGDKuMuNW6}+(VXx!VHt*$7?ip-J2*@tz?7_MPxuaGW9E37r9M# zN+bnPE7<1q+ceZq@I6l+LoWg;sgBI$K77lr8K5sIt@Jo(Mii?>%3+=Rrf&?BFK#}T zqh9jy&5ms=uO$a(U7^1b_FYNI&SYsbY9R2rLO8JH0aY#@4hyAoxz~7Tm-b- z-!^zQYC`E7EWBN(QB^@Y={k5n$#VVueE&BTDhFrK7fU?1Zgk*{`bDQq25n(c{UZMl Hbw=pr;;an3 delta 4662 zcmV-663OlSCAuY$oqr{hb**E2qRgafFD!_JBu*%jOOUaZU%!nP1(6`w4Kk-FvH;@I z mRastU{Ov}x*>45g@#5y)uQ&Di-O2pn_Sl|^f82bkvaaAa5Av&D4!raXvfr8! z`lo`kCOuyNP=9BBw$(p)VF&&T%d)C&^QshWlb46tBi}9r};ilF+;>_-lj)Z6xDu@`8~`I`#zgn#2wkL$+H8eotW9m zcisqi5ORd1lz+Tzc>~vq9dd4uRSAD?;8JN%(??fV@I=fA*6^ZAzu_pkXOvx4p|&FE zyBGS1kr$r}`QyCYR}D{j{vEduOOZV7n!G&|cts6sft?ADsT&YtXkz=71xgu4NPVJ(s(fn=2AQ-2S`->AJB;I%x(9=4`UCa~10 zAGPD`1X7>$B+;enelnUsN3%_}Z-EAspe4!kQ}rFMXmeXW{r*c*|%);~j^RMvpNXed`myzX<$39JZaLWbo;N$o#g=?X#} z6MxG^D}P8#h1-UdjCtDC83;(SVpV6*m3d1MUwA9b5#ZSwWHHVVNrBKCN2Lmim;^fk ztMCOcGgw~-$JXH#x7Cv+K{C)xgCl1JjR_rX*Pd%Ew?vsaU>#R!&d~OrxqdJy9dlPu zNb|^xnrQQs0%=`b>|MfjzA_ktW3T?JDXzSHKUTWX6MNgSE^F{ck2B&$Z(c9RR4S3w*kS|KuDwdBmNjh9f z7a2HfN>FwEMIY~rlWqeRf5N8(zTDv^FzN>D#4yLRx_AP=5T0BtE*+ zp{cr>B<=~eiJF`uy9r9!@mTS|quqm1jq2Div4%$SaCdQadJa8Xx4uu27B%a&|DVsMhR(4#e2Q0^6mbc%>k12>PF* z#x%`D(27BO@gjoiz-750-r-PpVReNAbPy~Jqr{~g!#+qKHb}EJk}Y$zTS|;42pYB$ zBgF(2U9j6eYLGs`ds~ZedW7bR@b*$6AX^L|Hbsff2!Tz;BH-w(qDzfXczlx zjQT1tM$?fyM13=J*th@v3Ll^3C&fxIp0!}&fW6Oeeszw2NJY0V=TEF;2Ou`%waZ6y zaN@F?NpsCVJ{R)&TN6`xucd$VY`}*fC2c+`Zi=2pOTqWr3!9(C$DI0XH<$mbkVazY zGttME7|+Ume}oV2x_ayfkThTO_V~U^zkrs#1zBP~5|^qurKf?d5|Q!<6D=)4lwB{( zVXYuB<>E7E**Q#45r@|By2!OznMhQ6_S{Ai$t=?Rr>&AKH|%Mrxe`+z$)RW1s*jpX zk_+?MNgRoS-l~;;?upIpX?W^MZ?Gm=&q&K|K+d2Yf4RBUXn~`K|D`^{dZd9qSb`&$ z0t^TP<({7RdlF3>IjI)$tUtp{Nm;e|{+zT8D+SZ&*VVMHc%2nh59Pl4YyuYlD;ACEVPtMa5ph$M-i+YkQ zKal^E6ME>{6&oYU4IHwbJx z_Q|=;hin0PNhbejXiO|)oGV(O@Qq`jxO5ODe;)<7mRLFHpFsI!2};#Z-;p|ze@jq% ziD~-$EWFFG+| z$w{ht78?0>nh48zQpkWqm{>vc{c^{6Av5Aa3G+nhER{XCQNn3$5gN5KFL%mlW-L$M zf4RW)3RYs)oocWV^8?JE=meRNkr=YSvTWWdm||>=?@Au|Ii9CX{sGUE6$SWHpm54W zBCjJ~Z`MqkQQJ>Ce7i^k)eTQ`AEn_qK)YvOP1I`z3Q@Vjpr$#JFs58=(Yx4T2Yaxu zk1{+GA#}GY_3clU`gZNvtwCKWtJy9ufATixf^6+;g?6e-MA-nzDgUUb^SVi)drnLYX9 zT8k^8vQfSXm?KIeEc8!-8`U&_jTVBKMyDdYmv$n?u!>+c>EvW%RZMhmeYgxVL{RP9 z&oTul(xmlXyivYlB+x1FyC)SO-4Q3GtWpe{P&;e6+_W zJ)=~a@)Bei+wzkV%6psU%t*I6jEi@t1f!jUmQTTX?TI}^1XU~o(+S?hK-gXkraJK? z&qk|5N;{)+?}}n$oHf@bwDBDHxLb=OFn@zh|!%3IWo176aX8mZGO$-jBVW@Kl zixA|rW^+&MdwlAX)L?2YNDUl@4`6HgwQ4u#dpf9_*L!0~4;B`+q> zHVbJeBYK&P9HlQrh1%6z#+=yL;NvRTEi3^XsP>ifGLZ?WQE4D{g)3)UDMVhDrbH%P z^&KOyc8WjTYWO+E5-{OCnfvuDYsI65p44<^MNc>t6QD_>A8=-5!1R*7w*sFAx`CM8 zGS+^m9H#(Ayb|)=e`g}R-Lo$HyeO&D%(Zn$GJ2vdFS9>n`T0hbpD(Z!;0A3K5HV9O z2uuGyMze?uvq~!(mzIdb1yEUzrz|vDSe7}#*`>L`kM^pTCI@T391GS4*YsJV>ai;t z0j~G5`^wtcyHcZImC0zndzl8PrrQBIg2k^x;(`>hwEI-0e|l>ryLntyf+O_QHzJCS zXvGGz>|x+jcTkZ3!wOlbCp|O8H=T5Flhn%T7#qU)JIFW&0>+hQUT^$G!MU2_?_Sxr z)gpeNiA-#dXiUsGcUdC1%tUOfCiVs-b#*5qJ|A#tdDCx4rF)dt8&zbq$e$ckaZFdg z5Ym6ZWHA{)SzPXd4eO1=>Uc^B)NV}6&w!~)ECBQz%S7-DeJXwD;YFyO2{0xU13X;0 zSNA#ke*yi1!uCfM93eD6BJj>_h@IMsM7TEMhYTKZ)MUZe4I~4Ie1?UC^qQe zPdZ21(+sdTRZ^$=B>?T>Ld9R+3tBqg&Z00sJeI!bP=6YgFH-Aq6&B&5YT zp|whkY!&G;z>HD>HsXh)skn+NAf{Gq27K6ye^rCa>ha~v37)7Fz&TZc5~@vC#zsiJ zIu8pnN9UutW~!4ZRClSgR?bgr@OhSc9tdT*bJd2Kb%hQP|cpfc9 zfA>&Z6ng)Zm(k$3bfwS$d5BU#Y*&pAXQ+=J+lCSwU!hKWtq5DM@)upSt5<2)dnd@z zrl|~|x|Z@z0$TgLh_8wp-Zd@A^d!4`n6@wip;SiNU7PM><{hYalwt-dEBQdXhLrQf z$-*?E0zC&Vcipwjk^Ca0VDCj5&3oJud%e}c)V z^{&BL+VkGxvgna{`%Hw3F`2fQ7G1_;ux^=!8kR5uq`+z!{P2(Dklk_xUd0aPs#Mv0ll5)(k$G*>bkyk^Ti{qCrku6tBd zAqKwjCLTp(_{_Hwqh$Mge<~j3OWI<2+2y@(YVWA<0ZmtP`Xb2xv#ch%TEzxUFJ@oO zSQPF$?qAMQS`!DJM zO^Y#I6l41Lk5cXRTSFGR=%&*xHT!GK5m(8)(`j{sMj0yTokiDNf2T*DeoJhVh51TN z4&zW{gH78b$;lp}lYlqOzls%D`7K?LUb|NPgBL-O}nVMw!Wft++>(g?nP;>9VifdOXQn?lg3xS zj_&&);+hXl85JxTf1ijlC}h{G7{~9rSt==WF-(ddFBs^uHzF)r$$G4{brP~yh8hta zjBqp{ExpCBis@gi5z*ADaN5zta+*9HjC9AnJcpdbjSRSocAV`@b}l3ZP^-SCqsp{g zo8bF~JO*1texf?EG56s+TTP_bl7cx8PS2iLEmFF*;j6y6e@ebU_)uOoT#xVSYdc=e zIa>2^;dp7Owinav}dsszMO;>{w%c~|*a;R@y z!M-JFVj5i>O@5WaNLy)8Xg0eylpt&mwl7AY`!g)d@b5C1OYzl#tVNbmR8P8*$LK{K z(bYgk^qVObRHV0zdnBU6X(LQ?QSTh5qd2|G*j3|wr-52TMz+5_?j(Fc>5nVC-IY

    Report

    -

    1527 statements analysed.

    +

    4107 statements analysed.

    Statistics by type

    @@ -15,52 +15,69 @@

    Statistics by type

    - - + + - + - - + + - + - - - - - + + + + + - - + + - - + +
    module11112525 =90.9188.00 0.00
    class29297777 =100.0061.04 0.00
    method305305=100.004.26531530+1.0083.433.01
    function003939 =007.690.00

    External dependencies

    -
    libopenzwave (openzwave.network,openzwave.controller,openzwave.option)
    -louie 
    -  \-dispatcher (openzwave.network,openzwave.controller)
    -openzwave (openzwave.network)
    +
    flask (pyozwweb.app.views,pyozwweb.app.socket.chat,pyozwweb.app.listener,pyozwweb.app,pyozwweb.app.socket.ozwave)
    +flask_fanstatic (pyozwweb.app)
    +gevent 
    +  \-monkey (openzwave.controller,pyozwman.ozwsh_main,pyozwweb.app.socket.ozwave,openzwave.command,openzwave.network,pyozwweb.app.socket.chat,pyozwweb.app.views,openzwave.node,pyozwweb.run,openzwave.group,openzwave.scene,pyozwweb.app.listener,openzwave.object,openzwave.option,openzwave.singleton,pyozwman.ozwsh_widgets,pyozwweb.app,openzwave.value)
    +libopenzwave (openzwave.network,openzwave.controller,openzwave.option,pyozwweb.app.socket.ozwave,pyozwweb.app.views)
    +louie (pyozwweb.app.socket.ozwave,pyozwweb.app.views,pyozwman.ozwsh_main,pyozwweb.app.listener,pyozwman.ozwsh_widgets,pyozwweb.app)
    +  \-dispatcher (openzwave.controller,pyozwweb.app.socket.ozwave,pyozwman.ozwsh_main,openzwave.network,pyozwweb.app.views,pyozwweb.app.listener,pyozwman.ozwsh_widgets,pyozwweb.app)
    +openzwave (openzwave.network,pyozwweb.app.views,pyozwweb.app.socket.ozwave)
       \-command (openzwave.node)
    -  \-controller (openzwave.network)
    +  \-controller (pyozwweb.app.socket.ozwave,openzwave.network,pyozwman.ozwsh_main,pyozwweb.app.listener,pyozwman.ozwsh_widgets,pyozwweb.app.views)
       \-group (openzwave.node)
    -  \-node (openzwave.network)
    +  \-network (pyozwweb.app.socket.ozwave,pyozwweb.app.views,pyozwman.ozwsh_main,pyozwweb.app.listener,pyozwman.ozwsh_widgets,pyozwweb.app)
    +  \-node (openzwave.network,pyozwman.ozwsh_main,pyozwman.ozwsh_widgets,pyozwweb.app.socket.ozwave,pyozwweb.app.views)
       \-object (openzwave.controller,openzwave.command,openzwave.network,openzwave.node,openzwave.group,openzwave.scene,openzwave.option,openzwave.value)
    -  \-scene (openzwave.network)
    -  \-singleton (openzwave.network,openzwave.option)
    -  \-value (openzwave.node)
    + \-option (pyozwweb.app.socket.ozwave,openzwave.network,pyozwman.ozwsh_main,pyozwweb.app.listener,pyozwman.ozwsh_widgets,pyozwweb.app,pyozwweb.app.views) + \-scene (openzwave.network,pyozwman.ozwsh_main,pyozwman.ozwsh_widgets,pyozwweb.app.socket.ozwave,pyozwweb.app.views) + \-singleton (openzwave.network,openzwave.option,pyozwweb.app.listener) + \-value (pyozwweb.app.views,pyozwman.ozwsh_main,pyozwman.ozwsh_widgets,pyozwweb.app.socket.ozwave,openzwave.node) +pyozwman + \-ozwsh_widgets (pyozwman.ozwsh_main) +pyozwweb + \-app (pyozwweb.run,pyozwweb.reload,pyozwweb.app.socket.chat,pyozwweb.app.socket.ozwave,pyozwweb.app.views) + \-listener (pyozwweb.app.views,pyozwweb.app) + \-socket + | \-ozwave (pyozwweb.app) + \-views (pyozwweb.app) +urwid (pyozwman.ozwsh_main,pyozwman.ozwsh_widgets) + \-raw_display (pyozwman.ozwsh_main,pyozwman.ozwsh_widgets) +yaml (pyozwweb.app)

    Raw metrics

    @@ -73,31 +90,31 @@

    Raw metrics

    - - - - + + + + - - - - + + + + - - - + + + - - - - + + + +
    code182132.941821=500851.444995+13.00
    docstring326259.003262=384239.473829+13.00
    comment821.48822752.82275 =
    empty3646.58364=6106.27609+1.00
    @@ -112,15 +129,15 @@

    Duplication

    nb duplicated lines -132 -132 -= +2136 +2131 ++5.00 percent duplicated lines -2.393 -2.393 -= +21.409 +21.417 +-0.01
    @@ -135,26 +152,26 @@

    Messages by category

    convention -67 -67 -= +891 +888 ++3.00 refactor -18 -18 +63 +63 = warning -87 -87 -= +505 +501 ++4.00 error -58 -58 +90 +90 = @@ -171,80 +188,178 @@

    % errors / warnings by module

    openzwave.command -55.17 -1.15 +35.56 +0.20 0.00 -1.49 +0.11 +pyozwman.ozwsh_widgets +23.33 +30.50 +30.16 +61.95 + + openzwave.option -34.48 +22.22 +0.00 0.00 -27.78 -5.97 +0.45 - + openzwave.network -6.90 -74.71 -33.33 -29.85 +4.44 +13.47 +9.52 +2.24 + + +pyozwman.ozwsh_main +4.44 +11.68 +6.35 +16.84 + + +pyozwweb.app.__init__ +2.22 +4.95 +0.00 +2.58 + + +pyozwweb.app.listener +2.22 +4.36 +0.00 +1.80 + + +pyozwweb.app.views +1.11 +5.74 +0.00 +1.01 + + +pyozwweb.app.socket.ozwave +1.11 +4.16 +3.17 +5.05 openzwave.node -1.72 -12.64 -5.56 -16.42 +1.11 +3.76 +1.59 +1.91 +pyozwweb.app.socket.chat +1.11 +1.78 +38.10 +1.12 + + openzwave.controller -1.72 -3.45 -11.11 -28.36 +1.11 +0.99 +4.76 +2.13 + + +pyozwweb.shell +0.00 +15.25 +0.00 +0.00 openzwave.value 0.00 -6.90 -22.22 -2.99 +1.58 +6.35 +0.34 -openzwave +openzwave.group 0.00 -1.15 +0.59 0.00 -1.49 +0.34 openzwave.scene 0.00 +0.20 +0.00 +0.34 + + +pyozwweb +0.00 +0.20 +0.00 +0.11 + + +pyozwman 0.00 +0.20 0.00 -4.48 +0.11 -openzwave.object +openzwave +0.00 +0.20 +0.00 +0.11 + + +pyozwweb.app.socket.__init__ 0.00 +0.20 0.00 0.00 -4.48 + + +pyozwweb.config +0.00 +0.00 +0.00 +0.67 +openzwave.object +0.00 +0.00 +0.00 +0.34 + + openzwave.singleton 0.00 0.00 0.00 -2.99 +0.22 + + +pyozwweb.run +0.00 +0.00 +0.00 +0.11 -openzwave.group +pyozwweb.reload 0.00 0.00 0.00 -1.49 +0.11 @@ -256,127 +371,183 @@

    Messages

    occurrences -no-member -56 +bad-whitespace +406 -star-args -42 +bad-continuation +204 + + +missing-docstring +157 + + +unused-import +116 invalid-name -36 +93 -line-too-long -16 +unused-argument +82 -bad-whitespace -11 +no-member +81 + + +unused-wildcard-import +72 + + +star-args +43 bare-except -9 +33 -unused-import -7 +super-init-not-called +25 -logging-not-lazy -6 +line-too-long +23 -too-many-public-methods -4 +redefined-builtin +22 -super-init-not-called -4 +duplicate-code +20 -reimported -4 +logging-not-lazy +17 + + +unused-variable +15 + + +attribute-defined-outside-init +13 redefined-outer-name -4 +12 -duplicate-code -4 +no-self-use +10 -too-many-branches -3 +dangerous-default-value +10 -redefined-builtin -3 +bad-indentation +10 + + +too-many-instance-attributes +8 + + +reimported +8 import-error -3 +8 + + +pointless-statement +7 + + +global-statement +7 too-many-statements -2 +6 -too-many-return-statements -2 +too-many-branches +6 no-name-in-module -2 +6 -fixme -2 +too-many-public-methods +5 -bad-mcs-method-argument +relative-import +5 + + +too-many-return-statements +4 + + +superfluous-parens +4 + + +cyclic-import +3 + + +wildcard-import 2 -attribute-defined-outside-init +undefined-variable 2 -unused-variable -1 +too-many-lines +2 -undefined-loop-variable -1 +fixme +2 -too-many-lines -1 +bad-mcs-method-argument +2 -too-many-instance-attributes +unexpected-keyword-arg 1 -pointless-string-statement +undefined-loop-variable 1 -parse-error +pointless-string-statement 1 -no-self-use +parse-error 1 -missing-docstring +interface-not-implemented 1 -interface-not-implemented +global-variable-not-assigned 1 @@ -387,7 +558,7 @@

    Messages

    Global evaluation

    -Your code has been rated at 6.97/10 (previous run: 6.97/10, +0.00)
    +Your code has been rated at 5.35/10 (previous run: 5.35/10, -0.00)

    Messages

    @@ -427,7 +598,7 @@

    Messages

    - + @@ -435,7 +606,7 @@

    Messages

    - + @@ -443,39 +614,23 @@

    Messages

    - + - + - + - - - - - - - - - - - - - - - - - + - + - + - + - + - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + @@ -519,7 +834,7 @@

    Messages

    - + @@ -527,7 +842,7 @@

    Messages

    - + @@ -535,7 +850,7 @@

    Messages

    - + @@ -543,15 +858,31 @@

    Messages

    - + + + + + + + + + + + + + + + + + - + @@ -559,7 +890,7 @@

    Messages

    - + @@ -567,7 +898,7 @@

    Messages

    - + @@ -575,131 +906,147 @@

    Messages

    - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + - + @@ -707,7 +1054,7 @@

    Messages

    - + @@ -715,7 +1062,7 @@

    Messages

    - + @@ -723,7 +1070,7 @@

    Messages

    - + @@ -731,7 +1078,7 @@

    Messages

    - + @@ -739,7 +1086,7 @@

    Messages

    - + @@ -747,7 +1094,7 @@

    Messages

    - + @@ -755,17 +1102,17 @@

    Messages

    - + - + @@ -773,7 +1120,7 @@

    Messages

    - + @@ -781,23 +1128,39 @@

    Messages

    - + + + + + + + + + - + + + + + + + + + - + @@ -805,7 +1168,7 @@

    Messages

    - + @@ -813,7 +1176,7 @@

    Messages

    - + @@ -821,7 +1184,7 @@

    Messages

    - + @@ -829,7 +1192,7 @@

    Messages

    - + @@ -837,7 +1200,7 @@

    Messages

    - + @@ -845,7 +1208,7 @@

    Messages

    - + @@ -853,7 +1216,7 @@

    Messages

    - + @@ -861,7 +1224,7 @@

    Messages

    - + @@ -869,7 +1232,7 @@

    Messages

    - + @@ -877,7 +1240,7 @@

    Messages

    - + @@ -885,7 +1248,7 @@

    Messages

    - + @@ -893,545 +1256,577 @@

    Messages

    - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + - + + + + + + + + + - + @@ -1439,15 +1834,15 @@

    Messages

    - + - + - + @@ -1455,7 +1850,7 @@

    Messages

    - + @@ -1463,15 +1858,15 @@

    Messages

    - + - + - + @@ -1479,7 +1874,7 @@

    Messages

    - + @@ -1487,7 +1882,7 @@

    Messages

    - + @@ -1495,7 +1890,7 @@

    Messages

    - + @@ -1503,15 +1898,15 @@

    Messages

    - + - + - + @@ -1519,7 +1914,7 @@

    Messages

    - + @@ -1527,7 +1922,7 @@

    Messages

    - + @@ -1535,7 +1930,7 @@

    Messages

    - + @@ -1543,7 +1938,7 @@

    Messages

    - + @@ -1551,7 +1946,7 @@

    Messages

    - + @@ -1559,15 +1954,15 @@

    Messages

    - + - + - + @@ -1575,7 +1970,7 @@

    Messages

    - + @@ -1583,7 +1978,7 @@

    Messages

    - + @@ -1591,7 +1986,7 @@

    Messages

    - + @@ -1599,7 +1994,7 @@

    Messages

    - + @@ -1607,7 +2002,7 @@

    Messages

    - + @@ -1615,7 +2010,7 @@

    Messages

    - + @@ -1623,7 +2018,7 @@

    Messages

    - + @@ -1631,7 +2026,7 @@

    Messages

    - + @@ -1639,7 +2034,7 @@

    Messages

    - + @@ -1647,7 +2042,7 @@

    Messages

    - + @@ -1655,7 +2050,7 @@

    Messages

    - + @@ -1663,7 +2058,7 @@

    Messages

    - + @@ -1671,7 +2066,7 @@

    Messages

    - + @@ -1679,7 +2074,7 @@

    Messages

    - + @@ -1687,7 +2082,7 @@

    Messages

    - + @@ -1695,7 +2090,7 @@

    Messages

    - + @@ -1703,7 +2098,7 @@

    Messages

    - + @@ -1711,7 +2106,7 @@

    Messages

    - + @@ -1719,7 +2114,7 @@

    Messages

    - + @@ -1727,15 +2122,15 @@

    Messages

    - + - + - + @@ -1743,7 +2138,7 @@

    Messages

    - + @@ -1751,7 +2146,7 @@

    Messages

    - + @@ -1759,15 +2154,15 @@

    Messages

    - + - + - + @@ -1775,7 +2170,7 @@

    Messages

    - + @@ -1783,7 +2178,7 @@

    Messages

    - + @@ -1791,7 +2186,7 @@

    Messages

    - + @@ -1799,7 +2194,7 @@

    Messages

    - + @@ -1807,7 +2202,7 @@

    Messages

    - + @@ -1815,7 +2210,7 @@

    Messages

    - + @@ -1823,7 +2218,7 @@

    Messages

    - + @@ -1831,7 +2226,7 @@

    Messages

    - + @@ -1839,7 +2234,7 @@

    Messages

    - + @@ -1847,7 +2242,7 @@

    Messages

    - + @@ -1855,7 +2250,7 @@

    Messages

    - + @@ -1863,7 +2258,7 @@

    Messages

    - + @@ -1871,7 +2266,7 @@

    Messages

    - + @@ -1879,7 +2274,7 @@

    Messages

    - + @@ -1887,7 +2282,7 @@

    Messages

    - + @@ -1895,7 +2290,7 @@

    Messages

    - + @@ -1903,7 +2298,7 @@

    Messages

    - + @@ -1911,7 +2306,7 @@

    Messages

    - + @@ -1919,7 +2314,7 @@

    Messages

    - + @@ -1927,7 +2322,7 @@

    Messages

    - + @@ -1935,7 +2330,7 @@

    Messages

    - + @@ -1943,7 +2338,7 @@

    Messages

    - + @@ -1951,7 +2346,7 @@

    Messages

    - + @@ -1959,7 +2354,7 @@

    Messages

    - + @@ -1967,7 +2362,7 @@

    Messages

    - + @@ -1975,25 +2370,43 @@

    Messages

    - + + + + + + + + + - + + + + + + + + + - + @@ -2001,7 +2414,7 @@

    Messages

    - + @@ -2009,7 +2422,7 @@

    Messages

    - + @@ -2017,7 +2430,7 @@

    Messages

    - + @@ -2025,7 +2438,7 @@

    Messages

    - + @@ -2033,7 +2446,7 @@

    Messages

    - + @@ -2041,7 +2454,7 @@

    Messages

    - + @@ -2049,302 +2462,12376 @@

    Messages

    - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + - - - - + + + + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    convention openzwave.object  316321 0 Line too long (152/140)
    convention openzwave.object  317322 0 Line too long (152/140)
    convention openzwave.object  3540 0 Invalid constant name "logger"
    conventionwarning openzwave.group  37171 0Invalid constant name "logger"
    conventionopenzwave.singletonSingleton.__init__304Metaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__394Metaclass method __call__ should have 'cls' as first argumentBad indentation. Found 16 spaces, expected 12
    conventionopenzwave.nodeopenzwave.group  181172 0 Exactly one space required around assignment ret={} @@ -483,35 +638,195 @@

    Messages

    conventionopenzwave.nodeopenzwave.group  192174 0Exactly one space required around assignment - ret[key]=vals[key] - ^No space allowed before : + if 'associations' in extras : + ^
    conventionopenzwave.nodewarningopenzwave.group  41175 0Invalid constant name "logger"Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.group 420Invalid constant name "logger"
    warningopenzwave.groupZWaveGroup.to_dict1604Dangerous default value [] as argument
    conventionopenzwave.singletonSingleton.__init__354Metaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__444Metaclass method __call__ should have 'cls' as first argument
    warningopenzwave.node 1900Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 1910Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.node 1970No space allowed before : + if 'values' in extras : + ^
    warningopenzwave.node 1980Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 1990No space allowed before : + if 'groups' in extras : + ^
    warningopenzwave.node 2000Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2010No space allowed before : + if 'neighbors' in extras : + ^
    warningopenzwave.node 2020Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2030No space allowed before : + if 'capabilities' in extras : + ^
    warningopenzwave.node 2040Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2080Exactly one space required around assignment + ret[key]=vals[key] + ^
    conventionopenzwave.node 2840Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.node 4540Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.node 460Invalid constant name "logger"
    convention openzwave.node ZWaveNode.__init__698Invalid attribute name "_isReady"
    warningopenzwave.nodeZWaveNode.__init__54748Invalid attribute name "_isReady"
    warningopenzwave.nodeZWaveNode.__init__59 4 __init__ method from base class 'ZWaveNodeSwitch' is not called
    warning openzwave.node ZWaveNode.__init__5459 4 __init__ method from base class 'ZWaveNodeBasic' is not called
    warning openzwave.node ZWaveNode.__init__5459 4 __init__ method from base class 'ZWaveNodeSensor' is not called
    warning openzwave.node ZWaveNode.__init__5459 4 __init__ method from base class 'ZWaveNodeSecurity' is not called
    warning openzwave.node ZWaveNode.__init__6469 8 Specify string format arguments as logging function parameters
    warningopenzwave.nodeZWaveNode.to_dict1794Dangerous default value [] as argument
    warningopenzwave.nodeZWaveNode.groups_to_dict2734Dangerous default value [] as argument
    convention openzwave.node ZWaveNode.heal257289 4 Invalid argument name "upNodeRoute"
    error openzwave.node ZWaveNode.heal271303 8 Instance of 'ZWaveNode' has no 'manager' member
    warning openzwave.node ZWaveNode.get_values_by_command_classes333365 8 Redefining built-in 'type'
    warning openzwave.node ZWaveNode.get_values381413 8 Redefining built-in 'type'
    warning openzwave.nodeZWaveNode.values_to_dict4444Dangerous default value [] as argument
    warningopenzwave.node ZWaveNode.remove_value459506 12 Specify string format arguments as logging function parameters
    warning openzwave.node ZWaveNode.request_all_config_params715762 8 Specify string format arguments as logging function parameters
    warning openzwave.node ZWaveNode.request_config_param736783 8 Specify string format arguments as logging function parameters
    warning openzwave.node ZWaveNode.set_config_param759806 8 Specify string format arguments as logging function parameters
    convention openzwave.node ZWaveNode.isNodeAwake780827 4 Invalid method name "isNodeAwake"
    convention openzwave.node ZWaveNode.isNodeFailed791838 4 Invalid attribute name "isNodeFailed"
    convention openzwave.node ZWaveNode.getNodeQueryStage802849 4 Invalid attribute name "getNodeQueryStage"
    convention openzwave.node ZWaveNode.isReady812859 4 Invalid attribute name "isReady"
    convention openzwave.node ZWaveNode.isReady822869 4 Invalid attribute name "isReady"
    convention openzwave.node ZWaveNode.isNodeInfoReceived834881 4 Invalid attribute name "isNodeInfoReceived"
    refactor openzwave.node ZWaveNode4449 0Too many public methods (51/20)Too many public methods (53/20)
    convention openzwave.scene  213221 0 Exactly one space required around assignment ret={} ^
    convention openzwave.scene  219227 0 Exactly one space required around assignment ret[key]=vals[key] ^
    convention openzwave.scene  3742 0 Invalid constant name "logger"
    warningopenzwave.sceneZWaveScene.to_dict2114Dangerous default value [] as argument
    convention openzwave.controller  6470 0 Line too long (186/140)
    convention openzwave.controller  7278 0 Line too long (179/140)
    convention openzwave.controller  8288 0 Line too long (147/140)
    convention openzwave.controller  8389 0 Line too long (158/140)
    convention openzwave.controller  8490 0 Line too long (156/140)
    convention openzwave.controller  8692 0 Line too long (161/140)
    convention openzwave.controller  154171 0 Line too long (141/140)
    convention openzwave.controller  703766 0 Exactly one space required around assignment - ret=self.node.to_dict() + ret=self.node.to_dict(extras=extras) ^
    fatal openzwave.controller  2934 4 Unable to import 'pydispatch'
    error openzwave.controller  3439 0 No name 'PyStatDriver' in module 'libopenzwave'
    convention openzwave.controller  4551 0 Invalid constant name "logger"
    refactor openzwave.controllerZWaveController540Too many instance attributes (9/7)
    refactoropenzwave.controller ZWaveController.get_stats_label342359 4 Method could be a function
    warningopenzwave.controllerZWaveController.do_poll_statistics3788Used * or ** magic
    warning openzwave.controller ZWaveController.hard_reset429489 8 Used * or ** magic
    convention openzwave.controller ZWaveController.begin_command_send_node_information442502 4 Invalid method name "begin_command_send_node_information"
    convention openzwave.controller ZWaveController.begin_command_request_network_update470530 4 Invalid method name "begin_command_request_network_update"
    convention openzwave.controller ZWaveController.begin_command_remove_failed_node513573 4 Invalid method name "begin_command_remove_failed_node"
    convention openzwave.controller ZWaveController.begin_command_replace_failed_node542602 4 Invalid method name "begin_command_replace_failed_node"
    convention openzwave.controller ZWaveController.begin_command_request_node_neigbhor_update556616 4 Invalid method name "begin_command_request_node_neigbhor_update"
    convention openzwave.controller ZWaveController.begin_command_create_new_primary570630 4 Invalid method name "begin_command_create_new_primary"
    convention openzwave.controller ZWaveController.begin_command_transfer_primary_role581641 4 Invalid method name "begin_command_transfer_primary_role"
    convention openzwave.controller ZWaveController.begin_command_receive_configuration598658 4 Invalid method name "begin_command_receive_configuration"
    convention openzwave.controller ZWaveController.begin_command_assign_return_route609669 4 Invalid method name "begin_command_assign_return_route"
    convention openzwave.controller ZWaveController.begin_command_delete_all_return_routes624684 4 Invalid method name "begin_command_delete_all_return_routes"
    warning openzwave.controller ZWaveController.zwcallback691751 12 Used * or ** magic
    warning openzwave.controller ZWaveController.zwcallback693753 8 Used * or ** magic
    warningopenzwave.controllerZWaveController.to_dict7564Dangerous default value [] as argument
    refactor openzwave.controller ZWaveController4854 0Too many public methods (40/20)Too many public methods (43/20)
    convention openzwave.command  3843 0 Invalid constant name "logger"
    error openzwave.command ZWaveNodeBasic.get_battery_level285290 23 Instance of 'ZWaveNodeBasic' has no 'values' member
    error openzwave.command ZWaveNodeBasic.get_battery_level287292 19 Instance of 'ZWaveNodeBasic' has no 'values' member
    error openzwave.command ZWaveNodeBasic.get_battery_levels305310 15 Instance of 'ZWaveNodeBasic' has no 'get_values' member
    error openzwave.command ZWaveNodeBasic.get_power_level320325 23 Instance of 'ZWaveNodeBasic' has no 'values' member
    error openzwave.command ZWaveNodeBasic.get_power_level322327 19 Instance of 'ZWaveNodeBasic' has no 'values' member
    error openzwave.command ZWaveNodeBasic.get_power_levels340345 15 Instance of 'ZWaveNodeBasic' has no 'get_values' member
    error openzwave.command ZWaveNodeBasic.can_wake_up354359 14 Instance of 'ZWaveNodeBasic' has no 'get_values' member
    error openzwave.command ZWaveNodeSwitch.get_switches_all382387 15 Instance of 'ZWaveNodeSwitch' has no 'get_values' member
    error openzwave.command ZWaveNodeSwitch.set_switch_all397402 12 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_state413418 23 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_state415420 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_state416421 27 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_state418423 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_state419424 23 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_item437442 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_items452457 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switches471476 15 Instance of 'ZWaveNodeSwitch' has no 'get_values' member
    error openzwave.command ZWaveNodeSwitch.set_switch486491 12 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_state502507 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_dimmers521526 15 Instance of 'ZWaveNodeSwitch' has no 'get_values' member
    error openzwave.command ZWaveNodeSwitch.set_dimmer542547 12 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.set_dimmer546551 34 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.set_dimmer548553 34 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_dimmer_level565570 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    warning openzwave.command ZWaveNodeSensor.get_sensors574579 26 Redefining built-in 'type'
    error openzwave.command ZWaveNodeSensor.get_sensors594599 22 Instance of 'ZWaveNodeSensor' has no 'get_values' member
    error openzwave.command ZWaveNodeSensor.get_sensors596601 22 Instance of 'ZWaveNodeSensor' has no 'get_values' member
    error openzwave.command ZWaveNodeSensor.get_sensors598603 22 Instance of 'ZWaveNodeSensor' has no 'get_values' member
    error openzwave.command ZWaveNodeSensor.get_sensor_value615620 19 Instance of 'ZWaveNodeSensor' has no 'values' member
    error openzwave.command ZWaveNodeSecurity.get_protections639644 15 Instance of 'ZWaveNodeSecurity' has no 'get_values' member
    error openzwave.command ZWaveNodeSecurity.set_protection654659 12 Instance of 'ZWaveNodeSecurity' has no 'values' member
    error openzwave.command ZWaveNodeSecurity.get_protection_item670675 19 Instance of 'ZWaveNodeSecurity' has no 'values' member
    error openzwave.command ZWaveNodeSecurity.get_protection_items685690 19 Instance of 'ZWaveNodeSecurity' has no 'values' member
    convention openzwave.network  186191 0 Line too long (630/140)
    convention openzwave.network  219224 0 Line too long (211/140)
    convention openzwave.network  223228 0 Line too long (209/140)
    convention openzwave.network  226231 0 Line too long (213/140)
    convention openzwave.network  351356 0 Line too long (148/140)
    convention openzwave.network  587597 0 Exactly one space required around assignment ret={} ^
    convention openzwave.network  589599 0 Exactly one space required around assignment - ret[ndid]=self._nodes[ndid].to_dict(kvals=kvals) + ret[ndid]=self._nodes[ndid].to_dict(extras=extras) ^
    convention openzwave.network  599612 0 Exactly one space required around assignment ret={} ^
    convention openzwave.network  607620 0 Exactly one space required around assignment ret[key]=vals[key] ^
    convention openzwave.network  748764 0 Exactly one space required around assignment ret={} ^
    convention openzwave.network  871887 0 Line too long (286/140)
    convention openzwave.network   1 0Too many lines in module (1613/1000)Too many lines in module (1629/1000)
    fatal openzwave.network  3136 4 Unable to import 'pydispatch'
    fatal openzwave.network  3237 4 Unable to import '_thread'
    convention openzwave.network  5661 0 Invalid constant name "logger"
    refactor openzwave.network ZWaveNetwork6469 0 Too many instance attributes (13/7)
    convention openzwave.network ZWaveNetwork273278 4 Invalid class attribute name "SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE"
    convention openzwave.network ZWaveNetwork277282 4 Invalid class attribute name "SIGNAL_ALL_NODES_QUERIED_SOME_DEAD"
    error openzwave.network ZWaveNetwork.__init__309314 24 Module 'libopenzwave' has no 'PyManager' member
    convention openzwave.network ZWaveNetwork.__init__324329 33 Invalid variable name "e"
    warning openzwave.network ZWaveNetwork.__init__322327 16 Unused variable 'data'
    warning openzwave.network ZWaveNetwork.stop429436 12Redefining name 'sys' from outer scope (line 29)Redefining name 'sys' from outer scope (line 34)
    warning openzwave.network ZWaveNetwork.stop400407 71 Using possibly undefined loop variable 'i'
    warning openzwave.network ZWaveNetwork.stop428435 8 No exception type(s) specified
    warning openzwave.network ZWaveNetwork.stop427434 16 Used * or ** magic
    warning openzwave.network ZWaveNetwork.stop429436 12Reimport 'sys' (imported line 29)Reimport 'sys' (imported line 34)
    refactor openzwave.network ZWaveNetwork.stop372377 4Too many branches (16/12)Too many branches (17/12)
    warning openzwave.network ZWaveNetwork.home_id450457 4 Arguments number differs from overridden method
    refactor openzwave.network ZWaveNetwork.state_str519526 4 Too many return statements (7/6)
    warningopenzwave.networkZWaveNetwork.nodes_to_dict5874Dangerous default value [] as argument
    warningopenzwave.networkZWaveNetwork.to_dict6024Dangerous default value [] as argument
    convention openzwave.network ZWaveNetwork.heal650663 4 Invalid argument name "upNodeRoute"
    warningopenzwave.networkZWaveNetwork.scenes_to_dict7544Dangerous default value [] as argument
    convention openzwave.network ZWaveNetwork.set_poll_interval856872 4 Invalid argument name "bIntervalBetweenPolls"
    warning openzwave.network ZWaveNetwork.zwcallback969985 12Redefining name 'sys' from outer scope (line 29)Redefining name 'sys' from outer scope (line 34)
    warning openzwave.network ZWaveNetwork.zwcallback968984 8 No exception type(s) specified
    error openzwave.network ZWaveNetwork.zwcallback923939 16 Instance of 'ZWaveNetwork' has no '_handleNodeReady' member
    warning openzwave.network ZWaveNetwork.zwcallback969985 12Reimport 'sys' (imported line 29)Reimport 'sys' (imported line 34)
    refactor openzwave.network ZWaveNetwork.zwcallback877893 4 Too many branches (32/12)
    refactor openzwave.network ZWaveNetwork.zwcallback877893 4 Too many statements (69/50)
    warning openzwave.network ZWaveNetwork._handle_driver_failed9871003 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_failed9881004 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_ready10231039 12Redefining name 'sys' from outer scope (line 29)Redefining name 'sys' from outer scope (line 34)
    warning openzwave.network ZWaveNetwork._handle_driver_ready10221038 8 No exception type(s) specified
    warning openzwave.network ZWaveNetwork._handle_driver_ready10131029 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_ready10161032 12 Used * or ** magic
    error openzwave.network ZWaveNetwork._handle_driver_ready10181034 25 Module 'libopenzwave' has no 'PyControllerState' member
    error openzwave.network ZWaveNetwork._handle_driver_ready10191035 27 Module 'libopenzwave' has no 'PyControllerState' member
    warning openzwave.network ZWaveNetwork._handle_driver_ready10201036 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_ready10231039 12Reimport 'sys' (imported line 29)Reimport 'sys' (imported line 34)
    warning openzwave.network ZWaveNetwork._handle_driver_reset10491065 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_reset10511067 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_removed10711087 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_group10891105 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node11051121 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_added11261142 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_scene_event11431159 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_event11601176 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_naming11751191 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_new11881204 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_protocol_info12041220 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_removed12271243 16 Used * or ** magic
    convention openzwave.network ZWaveNetwork._handle_essential_node_queries_complete12331249 4 Invalid method name "_handle_essential_node_queries_complete"
    warning openzwave.network ZWaveNetwork._handle_essential_node_queries_complete12451261 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_queries_complete12641280 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_all_nodes_queried12821298 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_all_nodes_queried12831299 8 Used * or ** magic
    convention openzwave.network ZWaveNetwork._handle_all_nodes_queried_some_dead12851301 4 Invalid method name "_handle_all_nodes_queried_some_dead"
    warning openzwave.network ZWaveNetwork._handle_all_nodes_queried_some_dead12991315 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_all_nodes_queried_some_dead13001316 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_awake_nodes_queried13261342 12Redefining name 'sys' from outer scope (line 29)Redefining name 'sys' from outer scope (line 34)
    warning openzwave.network ZWaveNetwork._handle_awake_nodes_queried13251341 8 No exception type(s) specified
    warning openzwave.network ZWaveNetwork._handle_awake_nodes_queried13221338 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_awake_nodes_queried13231339 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_awake_nodes_queried13261342 12Reimport 'sys' (imported line 29)Reimport 'sys' (imported line 34)
    warning openzwave.network ZWaveNetwork._handle_polling_disabled13431359 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_polling_enabled13581374 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_create_button13721388 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_delete_button13861402 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_button_on14001416 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_button_off14141430 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_value14311447 8 Specify string format arguments as logging function parameters
    warning openzwave.network ZWaveNetwork._handle_value14321448 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_value_added14551471 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_value_changed14801496 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_value_refreshed15031519 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_value_removed15281544 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_notification15451561 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_msg_complete15591575 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork.nodes620633 12 Attribute '_nodes' defined outside __init__
    warning openzwave.network ZWaveNetwork.nodes622635 12 Attribute '_nodes' defined outside __init__
    refactor openzwave.network ZWaveNetwork6469 0 Too many public methods (30/20)
    warning openzwave.network  16051621 -1 String statement has no effect
    warning openzwave.network  2833 0 Unused import time
    warning openzwave.network  3237 4 Unused _thread imported as thread
    warning openzwave.network  3540 4 Unused import thread
    warning openzwave.network  3843 0 Unused import openzwave
    warning openzwave.network  3944 0 Unused ZWaveTypeException imported from openzwave.object
    warning openzwave.network  4247 0 Unused ZWaveOption imported from openzwave.option
    warning openzwave.network  4550 0 Unused import json
    warning openzwave.value  4045 0 TODO: don't report controller node as sleeping
    warning openzwave.value  4146 0 TODO: allow value identification by device/index/instance
    warningopenzwave.value 5550Bad indentation. Found 16 spaces, expected 12
    convention openzwave.value  546556 0 Exactly one space required around assignment ret={} ^
    conventionopenzwave.value 5660Exactly one space required around assignment + ret[key]=vals[key] + ^
    convention openzwave.value  3742 0 Invalid constant name "logger"
    refactor openzwave.value ZWaveValue.data_items304309 4 Too many return statements (10/6)
    warning openzwave.value ZWaveValue.check_data358363 12 No exception type(s) specified
    warning openzwave.value ZWaveValue.check_data368373 12 No exception type(s) specified
    warning openzwave.value ZWaveValue.check_data373378 12 No exception type(s) specified
    warning openzwave.value ZWaveValue.check_data383388 12 No exception type(s) specified
    refactor openzwave.value ZWaveValue.check_data333338 4 Too many branches (31/12)
    refactor openzwave.value ZWaveValue.check_data333338 4 Too many statements (61/50)
    warningopenzwave.valueZWaveValue.to_dict5444Dangerous default value [] as argument
    refactor openzwave.value ZWaveValue4247 0 Too many public methods (30/20)
    convention openzwave.option  270275 0 Line too long (161/140)
    error openzwave.option  2833 0 No name 'PyLogLevels' in module 'libopenzwave'
    convention openzwave.option  4146 0 Invalid constant name "logger"
    error openzwave.option ZWaveOption4449 18 Module 'libopenzwave' has no 'PyOptions' member
    error openzwave.option ZWaveOption.__init__7681 8 Module 'libopenzwave' has no 'PyOptions' member
    error openzwave.option ZWaveOption.set_log_file8893 15 Instance of 'ZWaveOption' has no 'addOptionString' member
    error openzwave.option ZWaveOption.set_logging98103 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_append_log_file108113 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_console_output118123 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_save_log_level140145 15 Instance of 'ZWaveOption' has no 'addOptionInt' member
    error openzwave.option ZWaveOption.set_queue_log_level162167 15 Instance of 'ZWaveOption' has no 'addOptionInt' member
    error openzwave.option ZWaveOption.set_dump_trigger_level184189 15 Instance of 'ZWaveOption' has no 'addOptionInt' member
    error openzwave.option ZWaveOption.set_associate194199 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    convention openzwave.option ZWaveOption.set_exclude196201 4 Invalid argument name "commandClass"
    error openzwave.option ZWaveOption.set_exclude204209 15 Instance of 'ZWaveOption' has no 'addOptionString' member
    convention openzwave.option ZWaveOption.set_include206211 4 Invalid argument name "commandClass"
    error openzwave.option ZWaveOption.set_include214219 15 Instance of 'ZWaveOption' has no 'addOptionString' member
    error openzwave.option ZWaveOption.set_notify_transactions224229 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_interface234239 15 Instance of 'ZWaveOption' has no 'addOptionString' member
    error openzwave.option ZWaveOption.set_save_configuration244249 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_driver_max_attempts254259 15 Instance of 'ZWaveOption' has no 'addOptionInt' member
    error openzwave.option ZWaveOption.set_poll_interval264269 15 Instance of 'ZWaveOption' has no 'addOptionInt' member
    error openzwave.option ZWaveOption.set_interval_between_polls274279 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_suppress_value_refresh284289 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    conventionpyozwman 10Missing module docstring
    refactoropenzwave.nodeZWaveNode44warningpyozwman 26 0Interface not implementedNo exception type(s) specified
    refactoropenzwave.optionconventionpyozwman.ozwsh_widgets  156 0Similar lines in 3 files -==openzwave.group:25 -==openzwave.scene:25 -==openzwave.value:25 -from openzwave.object import ZWaveObject - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - """NullHandler logger for python 2.6""" - def emit(self, record): - pass -logger = logging.getLogger('openzwave') -logger.addHandler(NullHandler()) -No space allowed before bracket + self.usage = ['ls : list directory', 'cd &lt;directory&gt; : change to directory &lt;directory&gt;', 'exit : quit the program' ] + ^
    refactoropenzwave.optionconventionpyozwman.ozwsh_widgets  171 0Similar lines in 9 files -==openzwave.command:29 -==openzwave.controller:36 -==openzwave.group:28 -==openzwave.network:47 -==openzwave.node:32 -==openzwave.object:26 -==openzwave.option:32 -==openzwave.scene:28 -==openzwave.value:28 -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - """NullHandler logger for python 2.6""" - def emit(self, record): - pass -logger = logging.getLogger('openzwave') -logger.addHandler(NullHandler()) -Exactly one space required around comparison + if pos &gt;= 0 and pos &lt; self.size and len(self.lines)&gt;0: + ^
    refactoropenzwave.optionconventionpyozwman.ozwsh_widgets  180 0Similar lines in 2 files -==openzwave.network:603 -==openzwave.node:188 - if kvals == True and self.network.dbcon is not None: - vals = self.kvals - for key in vals.keys(): - ret[key]=vals[key] - return ret -Exactly one space required after comma + line,pos = self._get_at_pos(self.focus) + ^
    refactoropenzwave.optionconventionpyozwman.ozwsh_widgets  1131 0Similar lines in 3 files -==openzwave.network:603 -==openzwave.node:188 -==openzwave.scene:215 - if kvals == True and self.network.dbcon is not None: - vals = self.kvals - for key in vals.keys(): - ret[key]=vals[key] - return retNo space allowed before comma + self.lines.append(urwid.Text("Help" , align='left')) + ^
    conventionpyozwman.ozwsh_widgets 1760No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 1790No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 2030Exactly one space required after comma + def path(self,value): + ^
    conventionpyozwman.ozwsh_widgets 2560Exactly one space required after assignment + self.walker =StatTree(window, parent.walker, self) + ^
    conventionpyozwman.ozwsh_widgets 2640No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 2650Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 2660Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 2670Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 2680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 2720Wrong continued indentation. + 'name':'stats', + ^ |
    conventionpyozwman.ozwsh_widgets 2730Wrong continued indentation. + 'help':'statistics', + ^ |
    conventionpyozwman.ozwsh_widgets 2740Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 2750No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 2760Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 2860No space allowed after bracket + self.lines.append(urwid.Text( " Statistics", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 2880No space allowed after bracket + self.lines.append(urwid.Text( " Frames processed: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2910No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully received: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2940No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully sent: . . . . . . . . . .%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2970No space allowed after bracket + self.lines.append(urwid.Text( " ACKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3000No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts read: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3030No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts sent: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3060No space allowed after bracket + self.lines.append(urwid.Text( " Queue:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3080No space allowed after bracket + self.lines.append(urwid.Text( " Messages in queue: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3110No space allowed after bracket + self.lines.append(urwid.Text( " Errors:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3130No space allowed after bracket + self.lines.append(urwid.Text( " Unsolicited messages received while waiting for ACK: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3160No space allowed after bracket + self.lines.append(urwid.Text( " Reads aborted due to timeouts: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3190No space allowed after bracket + self.lines.append(urwid.Text( " Bad checksum errors: . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3220No space allowed after bracket + self.lines.append(urwid.Text( " CANs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3250No space allowed after bracket + self.lines.append(urwid.Text( " NAKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3280No space allowed after bracket + self.lines.append(urwid.Text( " Out of frame data flow errors: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3310No space allowed after bracket + self.lines.append(urwid.Text( " Messages retransmitted: . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3340No space allowed after bracket + self.lines.append(urwid.Text( " Messages dropped and not delivered: . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3370No space allowed after bracket + self.lines.append(urwid.Text( " Number of unexpected callbacks: . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3400No space allowed after bracket + self.lines.append(urwid.Text( " Number of failed messages due to bad route response: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3430No space allowed after bracket + self.lines.append(urwid.Text( " Number of no ACK returned errors: . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3460No space allowed after bracket + self.lines.append(urwid.Text( " Number of network busy/failure messages: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3490No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages not delivered to network: . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3520No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages received with routed busy status: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3760No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 3770Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 3780Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 3790Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 3800Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3860Wrong continued indentation. + 'name':'groups', + | ^
    conventionpyozwman.ozwsh_widgets 3870Wrong continued indentation. + 'help':'Groups/Associations management', + | ^
    conventionpyozwman.ozwsh_widgets 3880Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 3890Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3900No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 4260No space allowed before : + for group in groups : + ^
    conventionpyozwman.ozwsh_widgets 4280No space allowed after bracket + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4280Exactly one space required after comma + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4330Wrong continued indentation. + )) + ^ |
    conventionpyozwman.ozwsh_widgets 4490No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 4690No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4810No space allowed before : + if value in self.window.network.nodes[self.node_id].groups : + ^
    conventionpyozwman.ozwsh_widgets 4850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4860Exactly one space required after comma + self.window.status_bar.update(status="Can't find node %s in group %s" % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 4880No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4920No space allowed before bracket +class AssociationItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 4940No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 5000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 5090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 5130No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5240No space allowed after bracket + self.childrens = { 'controller' : {'id':'ctl', + ^
    conventionpyozwman.ozwsh_widgets 5250Wrong continued indentation. + 'name':'Controller', + ^ |
    conventionpyozwman.ozwsh_widgets 5260Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 5270Wrong continued indentation. + 'widget_box' : None}, + ^ |
    conventionpyozwman.ozwsh_widgets 5280Wrong continued indentation. + 'scenes' : {'id':'scn', + ^ |
    conventionpyozwman.ozwsh_widgets 5320Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 5540No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5600No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5690No space allowed before bracket +class RootDir (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5710No space allowed before bracket + def __init__ (self, id=None, name=None, help=None): + ^
    conventionpyozwman.ozwsh_widgets 5760Wrong continued indentation. + urwid.Padding(urwid.AttrWrap(urwid.Text('%s' % id, wrap='clip'), 'body', 'focus'), left=2)), + | ^
    conventionpyozwman.ozwsh_widgets 5770Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5780Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5800No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5830No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5890No space allowed before bracket +class RootItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5910No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1): + ^
    conventionpyozwman.ozwsh_widgets 5970Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5980Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5990Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 6050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 6090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6160No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 6520No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 6530Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 6540Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 6550Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 6560Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6600Wrong continued indentation. + 'name':'nodes', + | ^
    conventionpyozwman.ozwsh_widgets 6610Wrong continued indentation. + 'help':'Nodes management', + | ^
    conventionpyozwman.ozwsh_widgets 6620Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 6630Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6640No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 7190No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7220No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7310No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 7370No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7400Exactly one space required around assignment + self.childrens['node']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 7420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7480No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7550Exactly one space required around assignment + val=True + ^
    conventionpyozwman.ozwsh_widgets 7570Exactly one space required around assignment + val=False + ^
    conventionpyozwman.ozwsh_widgets 7820No space allowed before bracket +class NodesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 7840No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1, awaked=False): + ^
    conventionpyozwman.ozwsh_widgets 7900Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7910Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7920Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7930Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7940Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % awaked, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7960No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 7990No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 8030Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8040Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8050Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8060Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8070Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Awaked", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8110No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 8330No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 8340Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 8350Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 8360Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 8370Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 8440Wrong continued indentation. + 'name':'node', + ^ |
    conventionpyozwman.ozwsh_widgets 8450Wrong continued indentation. + 'help':'Node management', + ^ |
    conventionpyozwman.ozwsh_widgets 8460Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 8500No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 8510Exactly one space required after comma + parent.add_child("node",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 8710No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 9150No space allowed after bracket + self.lines.append(urwid.Text( " Baud rate = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9180No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9210No space allowed after bracket + self.lines.append(urwid.Text( " Neighbors = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9240No space allowed after bracket + self.lines.append(urwid.Text( " Groups = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9270No space allowed before bracket + self.window.log.info("NodeTree num groups = %s" % self.window.network.nodes[self.key].num_groups ) + ^
    conventionpyozwman.ozwsh_widgets 9440No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 9500Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.key=directory + ^
    conventionpyozwman.ozwsh_widgets 9510Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.node_id=self.key + ^
    conventionpyozwman.ozwsh_widgets 9710No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 9720Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 9730Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 9740Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 9750Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 9820Wrong continued indentation. + 'name':'controller', + ^ |
    conventionpyozwman.ozwsh_widgets 9830Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 9840Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 9850No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 9860Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 10270No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 10510No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10590No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10710No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10730No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10790No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10850No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10870No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10930No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10990No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 11010No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 11520No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11570No space allowed after bracket + self.lines.append(urwid.Text( " Device=%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11820No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 11830Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 11840Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 11850Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 11860Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11950Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11970Wrong continued indentation. + 'name':'Basic', + ^|
    conventionpyozwman.ozwsh_widgets 11980Wrong continued indentation. + 'help':'Basic values management', + ^|
    conventionpyozwman.ozwsh_widgets 11990Wrong continued indentation. + 'widget_box': self.widget_box + ^|
    conventionpyozwman.ozwsh_widgets 12000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12020Wrong continued indentation. + 'name':'Config', + ^ |
    conventionpyozwman.ozwsh_widgets 12030Wrong continued indentation. + 'help':'Config values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12040Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12050Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12070Wrong continued indentation. + 'name':'System', + ^ |
    conventionpyozwman.ozwsh_widgets 12080Wrong continued indentation. + 'help':'System values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12090Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12100Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12120Wrong continued indentation. + 'name':'All', + |^
    conventionpyozwman.ozwsh_widgets 12130Wrong continued indentation. + 'help':'All values management', + |^
    conventionpyozwman.ozwsh_widgets 12140Wrong continued indentation. + 'widget_box': self.widget_box + |^
    conventionpyozwman.ozwsh_widgets 12150Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12160No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 12560No space allowed before : + for cmd in values : + ^
    conventionpyozwman.ozwsh_widgets 12570Line too long (148/140)
    conventionpyozwman.ozwsh_widgets 12570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % (self.window.network.nodes[self.node_id].get_command_class_as_string(cmd)), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 12840No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 13080No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13150No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 13160Exactly one space required after comma + self.window.status_bar.update(status='Value %s added to scene %s' % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 13180No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13330No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13440No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13450Exactly one space required around assignment + values[param].data=newval + ^
    conventionpyozwman.ozwsh_widgets 13480No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13510No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13660No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13700No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 13720No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 13740No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13750Exactly one space required after comma + self.window.log.info("poll %s to %s" %(param,newval)) + ^
    conventionpyozwman.ozwsh_widgets 13780No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13800Exactly one space required after comma + self.window.status_bar.update(status='Value %s polled to %s' % (param,value)) + ^
    conventionpyozwman.ozwsh_widgets 13820No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14000No space allowed before bracket +class ValuesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 14020No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False, polled=False): + ^
    conventionpyozwman.ozwsh_widgets 14050No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 14070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14150Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 14160Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14170Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14190No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 14220No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 14260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14280Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14290Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14300Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14310Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14350No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 14570No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 14580Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 14590Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 14600Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 14610Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14650Wrong continued indentation. + 'name':'switches', + | ^
    conventionpyozwman.ozwsh_widgets 14660Wrong continued indentation. + 'help':'All switches on the network', + | ^
    conventionpyozwman.ozwsh_widgets 14670Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 14680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14690No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 15010No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 15030No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 15040Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 15040No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15040Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15290No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15480Exactly one space required after comma + self.window.log.info("SwitchesTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 15530No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 15540Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15580No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 15610Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15630No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15660No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15860No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 15870Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 15880Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 15890Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 15900Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15940Wrong continued indentation. + 'name':'dimmers', + | ^
    conventionpyozwman.ozwsh_widgets 15950Wrong continued indentation. + 'help':'All dimmers on the network', + | ^
    conventionpyozwman.ozwsh_widgets 15960Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 15970Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15980No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 16310No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 16330No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 16340Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 16340No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16340Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16590No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16820No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 16830Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16870No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 16890No space allowed before : + if not values[switch].is_polled : + ^
    conventionpyozwman.ozwsh_widgets 16910Exactly one space required after comma + self.window.network.nodes[node].set_dimmer(switch,newval) + ^
    conventionpyozwman.ozwsh_widgets 16920Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16940No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 16970No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 17010No space allowed before bracket +class SwitchesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 17030No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All'): + ^
    conventionpyozwman.ozwsh_widgets 17100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17120Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 17130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 17190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 17230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17240Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17250Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17310No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 17530No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 17540Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 17550Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 17560Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 17570Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17610Wrong continued indentation. + 'name':'sensors', + | ^
    conventionpyozwman.ozwsh_widgets 17620Wrong continued indentation. + 'help':'All sensors on the network', + | ^
    conventionpyozwman.ozwsh_widgets 17630Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 17640Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17650No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 17980No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 18000No space allowed before : + if len(sensors) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 18010Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 18010No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18010Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18270No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 18350No space allowed before bracket +class SensorsItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 18370No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', units="", polled=0): + ^
    conventionpyozwman.ozwsh_widgets 18440Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18450Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18460Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18470Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 18480Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % units, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18510No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 18540No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 18580Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18590Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18600Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18610Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Units", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18670No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 18900No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 18910Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 18920Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 18930Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 18940Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 18990Wrong continued indentation. + 'name':'scene', + ^ |
    conventionpyozwman.ozwsh_widgets 19000Wrong continued indentation. + 'help':'Scene management', + ^ |
    conventionpyozwman.ozwsh_widgets 19010Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 19050No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 19060Exactly one space required after comma + parent.add_child("scene",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 19190No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 19460No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19710No space allowed before : + if not ok : + ^
    warningpyozwman.ozwsh_widgets 19750Bad indentation. Found 20 spaces, expected 16
    warningpyozwman.ozwsh_widgets 19760Bad indentation. Found 20 spaces, expected 16
    conventionpyozwman.ozwsh_widgets 19770No space allowed before : + if self.window.network.get_scenes()[self.key].remove_value(valueid) : + ^
    conventionpyozwman.ozwsh_widgets 19800No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19950Exactly one space required after comma + self.window.log.info("SceneTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 20000No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 20010Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 20040No space allowed before : + if switch in scene.get_values() : + ^
    conventionpyozwman.ozwsh_widgets 20130No space allowed before : + if new_val != None : + ^
    conventionpyozwman.ozwsh_widgets 20140No space allowed before : + if scene.set_value(switch, new_val) : + ^
    conventionpyozwman.ozwsh_widgets 20170No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20200No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20230No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20370No space allowed before bracket +class SceneItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 20390No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False): + ^
    conventionpyozwman.ozwsh_widgets 20420No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 20440No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20500Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20510Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 20520Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20530Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20550No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 20580No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 20620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20640Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20650Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20660Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20700No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 20960No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 20970Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 20980Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 20990Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 21000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21040Wrong continued indentation. + 'name':'scenes', + | ^
    conventionpyozwman.ozwsh_widgets 21050Wrong continued indentation. + 'help':'Scenes management', + | ^
    conventionpyozwman.ozwsh_widgets 21060Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 21070Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21080No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 21390No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21510No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 21570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21600Exactly one space required around assignment + self.childrens['scene']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 21620No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21670Exactly one space required around comparison + if self.window.network.create_scene(value)&gt;0: + ^
    conventionpyozwman.ozwsh_widgets 21700No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21750No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21820No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21900No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21970No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21990No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22020No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22060No space allowed before bracket +class ScenesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 22080No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 22140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 22160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 22190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 22230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'scene_header'), + | ^
    conventionpyozwman.ozwsh_widgets 22270No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 10Too many lines in module (2231/1000)
    conventionpyozwman.ozwsh_widgetsOldestTree500Missing class docstring
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many instance attributes (12/7)
    warningpyozwman.ozwsh_widgetsOldestTree.__init__6220Unused variable 'oldfocus'
    conventionpyozwman.ozwsh_widgetsOldestTree.add_child654Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree._get_at_pos704Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_nodeid764Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_id794Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.get_id8013Unused variable 'pos'
    conventionpyozwman.ozwsh_widgetsOldestTree.get_focus_entry864Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.set_focus894Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_first1014Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_last1044Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.read_lines1074Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_directories1184Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_help1284Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.refresh1394Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected1444Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected14612Invalid variable name "x"
    conventionpyozwman.ozwsh_widgetsOldestTree.ls1664Invalid method name "ls"
    warningpyozwman.ozwsh_widgetsOldestTree.ls16617Unused argument 'opts'
    conventionpyozwman.ozwsh_widgetsOldestTree.cd1724Invalid method name "cd"
    conventionpyozwman.ozwsh_widgetsOldestTree.set2124Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.set21218Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.set21225Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.poll2164Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.poll21619Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.poll21626Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.add2204Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.add22018Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.add22025Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.remove2244Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.remove22421Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.remove22428Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.reset2284Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.reset22820Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.create2324Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.create23221Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.delete2364Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.delete23621Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.activate2404Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.activate24023Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.send2444Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.send24419Unused argument 'value'
    warningpyozwman.ozwsh_widgetsOldestTree.path2108Attribute '_path' defined outside __init__
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many public methods (30/20)
    warningpyozwman.ozwsh_widgetsStatBox.__init__2524__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsStatBox.__init__2578Instance of 'StatBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsStatTree2600Missing class docstring
    refactorpyozwman.ozwsh_widgetsStatTree.read_lines2784Too many statements (54/50)
    warningpyozwman.ozwsh_widgetsGroupsBox.__init__3614__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsGroupsBox.__init__3668Instance of 'GroupsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsGroupsTree3680Missing class docstring
    refactorpyozwman.ozwsh_widgetsGroupsTree3680Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted3994Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted39938Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready4044Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready40435Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_node_update4104Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41042Unused argument 'node'
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41033Unused argument 'network'
    warningpyozwman.ozwsh_widgetsGroupsTree.add4628No exception type(s) specified
    warningpyozwman.ozwsh_widgetsGroupsTree.remove4778No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__4958Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsAssociationItem4920Missing class docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__49424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__4944__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__5028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsAssociationItem.__init__5038Instance of 'AssociationItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsAssociationItem.get_header5054Missing method docstring
    conventionpyozwman.ozwsh_widgetsAssociationItem.keypress5164Missing method docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.keypress51623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsAssociationItem.keypress5164Method could be a function
    conventionpyozwman.ozwsh_widgetsRootTree5190Missing class docstring
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_ready5394Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_ready53935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_resetted5444Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_resetted54438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5728Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootDir5690Missing class docstring
    warningpyozwman.ozwsh_widgetsRootDir.__init__57144Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsRootDir.__init__57124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootDir.__init__5714__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5808Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootDir.__init__5818Instance of 'RootDir' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootDir.keypress5864Missing method docstring
    warningpyozwman.ozwsh_widgetsRootDir.keypress58623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootDir.keypress5864Method could be a function
    conventionpyozwman.ozwsh_widgetsRootItem.__init__5928Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootItem5890Missing class docstring
    warningpyozwman.ozwsh_widgetsRootItem.__init__59124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootItem.__init__5914__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootItem.__init__6028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootItem.__init__6038Instance of 'RootItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootItem.get_header6054Missing method docstring
    conventionpyozwman.ozwsh_widgetsRootItem.keypress6194Missing method docstring
    warningpyozwman.ozwsh_widgetsRootItem.keypress61923Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootItem.keypress6194Method could be a function
    warningpyozwman.ozwsh_widgetsRootBox.__init__6264__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsRootBox.__init__6318Instance of 'RootBox' has no '__super' member
    warningpyozwman.ozwsh_widgetsNodesBox.__init__6374__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodesBox.__init__6428Instance of 'NodesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesTree6440Missing class docstring
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted6714Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted67138Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_ready6764Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_ready67635Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_node_update6884Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68842Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68833Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodesTree.exist7228No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.cd74212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.send74916Unused variable 'cmd'
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7858Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsNodesItem7820Missing class docstring
    warningpyozwman.ozwsh_widgetsNodesItem.__init__78424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsNodesItem.__init__7844__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7968Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsNodesItem.__init__7978Instance of 'NodesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesItem.get_header7994Missing method docstring
    conventionpyozwman.ozwsh_widgetsNodesItem.keypress8144Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesItem.keypress81423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsNodesItem.keypress8144Method could be a function
    warningpyozwman.ozwsh_widgetsNodeBox.__init__8214__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodeBox.__init__8268Instance of 'NodeBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodeTree8290Missing class docstring
    refactorpyozwman.ozwsh_widgetsNodeTree8290Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted8564Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted85638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_ready8614Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_ready86135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_node_update8674Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodeTree.read_lines8968Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsControllerBox.__init__9594__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsControllerBox.__init__9648Instance of 'ControllerBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsControllerTree9670Missing class docstring
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted10044Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted100438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_ready10094Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_ready100935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_node_update10174Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsControllerTree.send105912No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send107312No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send108712No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send110112No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send105216Unused variable 'cmd'
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many return statements (19/6)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many branches (22/12)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many statements (57/50)
    warningpyozwman.ozwsh_widgetsControllerTree.read_lines11318Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsValuesBox.__init__11664__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsValuesBox.__init__11718Instance of 'ValuesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesTree11740Missing class docstring
    refactorpyozwman.ozwsh_widgetsValuesTree11740Too many instance attributes (13/7)
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_ready12304Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_ready123035Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted12364Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted123638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_value_update12414Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124143Unused argument 'node'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124134Unused argument 'network'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124149Unused argument 'value'
    warningpyozwman.ozwsh_widgetsValuesTree.add12998No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.add13028Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.add130616Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.add130716Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.set13268No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.set132712Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.set133120Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.set133220Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll13598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136012Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136420Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.poll136520Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll137212No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14038Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsValuesItem14000Missing class docstring
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140241Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140261Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140224Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__14024__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14198Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsValuesItem.__init__14208Instance of 'ValuesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesItem.get_header14224Missing method docstring
    conventionpyozwman.ozwsh_widgetsValuesItem.keypress14384Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesItem.keypress143823Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsValuesItem.keypress14384Method could be a function
    warningpyozwman.ozwsh_widgetsSwitchesBox.__init__14454__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSwitchesBox.__init__14508Instance of 'SwitchesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesTree14520Missing class docstring
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted14774Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted147738Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready14824Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready148235Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update14864Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update14894Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree.set15428No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set15468Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set155116Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSwitchesTree.set155216Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsDimmersBox.__init__15744__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsDimmersBox.__init__15798Instance of 'DimmersBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsDimmersTree15810Missing class docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_resetted16064Missing method docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready16114Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready161135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_value_update16164Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_node_update16194Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree.set16728No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsDimmersTree.set16768Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsDimmersTree.set168016Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsDimmersTree.set168116Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17048Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSwitchesItem17010Missing class docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170341Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170361Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170324Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__17034__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSwitchesItem.__init__17178Instance of 'SwitchesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesItem.get_header17194Missing method docstring
    conventionpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.keypress173423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Method could be a function
    warningpyozwman.ozwsh_widgetsSensorsBox.__init__17414__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSensorsBox.__init__17468Instance of 'SensorsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsTree17480Missing class docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_resetted17734Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready17784Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready177835Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_value_update17834Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178343Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178334Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178349Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_node_update17864Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178642Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178633Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18388Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSensorsItem18350Missing class docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183741Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183761Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183724Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__18374__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18518Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSensorsItem.__init__18528Instance of 'SensorsItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsItem.get_header18544Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsItem.keypress18704Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.keypress187023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSensorsItem.keypress18704Method could be a function
    warningpyozwman.ozwsh_widgetsSceneBox.__init__18774__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSceneBox.__init__18828Instance of 'SceneBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneTree18850Missing class docstring
    refactorpyozwman.ozwsh_widgetsSceneTree18850Too many instance attributes (8/7)
    warningpyozwman.ozwsh_widgetsSceneTree.delete19598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196012Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197412No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196924Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197024Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsSceneTree.delete196321Unused variable 'switch'
    warningpyozwman.ozwsh_widgetsSceneTree.set19898No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.set19938Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSceneTree.set199816Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.set199916Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20408Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSceneItem20370Missing class docstring
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203941Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203961Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203924Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__20394__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20558Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSceneItem.__init__20568Instance of 'SceneItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneItem.get_header20584Missing method docstring
    conventionpyozwman.ozwsh_widgetsSceneItem.keypress20734Missing method docstring
    warningpyozwman.ozwsh_widgetsSceneItem.keypress207323Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSceneItem.keypress20734Method could be a function
    warningpyozwman.ozwsh_widgetsScenesBox.__init__20814__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsScenesBox.__init__20868Instance of 'ScenesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesTree20880Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesTree.exist21428No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.cd216212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.delete21778No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.activate21928No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22098Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsScenesItem22060Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesItem.__init__220824Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsScenesItem.__init__22084__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsScenesItem.__init__22178Instance of 'ScenesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesItem.get_header22194Missing method docstring
    conventionpyozwman.ozwsh_widgetsScenesItem.keypress22304Missing method docstring
    warningpyozwman.ozwsh_widgetsScenesItem.keypress223023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsScenesItem.keypress22304Method could be a function
    warningpyozwman.ozwsh_widgets 350Unused select imported from select
    warningpyozwman.ozwsh_widgets 360Unused import sys
    warningpyozwman.ozwsh_widgets 370Unused import os
    warningpyozwman.ozwsh_widgets 390Unused Screen imported from urwid.raw_display
    warningpyozwman.ozwsh_widgets 400Unused format_exc imported from traceback
    warningpyozwman.ozwsh_widgets 410Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_widgets 420Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_widgets 430Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_widgets 440Unused ZWaveController imported from openzwave.controller
    warningpyozwman.ozwsh_widgets 460Unused ZWaveOption imported from openzwave.option
    warningpyozwman.ozwsh_widgets 470Unused All imported from louie
    warningpyozwman.ozwsh_widgets 480Unused import logging
    conventionpyozwman.ozwsh_main 1720Wrong continued indentation. + ("keys", "dark blue", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1730Wrong continued indentation. + ("message", "light cyan", "dark green"), + ^ |
    conventionpyozwman.ozwsh_main 1740Wrong continued indentation. + ("linenr", "light blue", "dark cyan"), + ^ |
    conventionpyozwman.ozwsh_main 1750Wrong continued indentation. + ("input", "light gray", "black"), + ^ |
    conventionpyozwman.ozwsh_main 1760Wrong continued indentation. + ("input2", "dark red", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1770Wrong continued indentation. + ("focus", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1780Wrong continued indentation. + ("dialog", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1790Wrong continued indentation. + ("file", "light green", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1800Wrong continued indentation. + ("errortxt", "dark red", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1810Wrong continued indentation. + ("selectedfile", "yellow", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1820Wrong continued indentation. + ("selectedfocus", "yellow", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1830Wrong continued indentation. + ("dir", "light gray", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1840Wrong continued indentation. + ("fileedit", "light green", "dark red"), + ^ |
    conventionpyozwman.ozwsh_main 1850Wrong continued indentation. + ('edit', 'yellow', 'dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1860Wrong continued indentation. + ('body','default', 'default'), + ^ |
    conventionpyozwman.ozwsh_main 1860Exactly one space required after comma + ('body','default', 'default'), + ^
    conventionpyozwman.ozwsh_main 1870Wrong continued indentation. + ('foot','dark cyan', 'dark blue', 'bold'), + ^ |
    conventionpyozwman.ozwsh_main 1870Exactly one space required after comma + ('foot','dark cyan', 'dark blue', 'bold'), + ^
    conventionpyozwman.ozwsh_main 1880Wrong continued indentation. + ('shadow','white','black'), + ^ |
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1890Wrong continued indentation. + ('border','black','dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1900Wrong continued indentation. + ('error','black','dark red'), + ^ |
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1910Wrong continued indentation. + ('FxKey','light cyan', 'dark blue', 'underline')] + ^ |
    conventionpyozwman.ozwsh_main 1910Exactly one space required after comma + ('FxKey','light cyan', 'dark blue', 'underline')] + ^
    conventionpyozwman.ozwsh_main 2340Exactly one space required after comma + def active_box(self,value): + ^
    conventionpyozwman.ozwsh_main 2640No space allowed before : + if command.startswith('ls') : + ^
    conventionpyozwman.ozwsh_main 2650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2660Exactly one space required after comma + cmd,options = command.split(' ') + ^
    conventionpyozwman.ozwsh_main 2730No space allowed before : + elif command.startswith('exit') : + ^
    conventionpyozwman.ozwsh_main 2750No space allowed before : + elif command.startswith('cd') : + ^
    conventionpyozwman.ozwsh_main 2760No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2870No space allowed before : + elif path == "/" : + ^
    conventionpyozwman.ozwsh_main 2960No space allowed before : + elif command.startswith('send') : + ^
    conventionpyozwman.ozwsh_main 2970No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3030No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3100No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3120No space allowed before : + elif command.startswith('create') : + ^
    conventionpyozwman.ozwsh_main 3130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3190No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3260No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3280No space allowed before : + elif command.startswith('delete') : + ^
    conventionpyozwman.ozwsh_main 3290No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3350No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3420No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3440No space allowed before : + elif command.startswith('activate') : + ^
    conventionpyozwman.ozwsh_main 3450No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3510No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3580No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3600No space allowed before : + elif command.startswith('set') : + ^
    conventionpyozwman.ozwsh_main 3610No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3630No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3680No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3730No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 3810No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3830No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3860No space allowed before : + elif command.startswith('poll') : + ^
    conventionpyozwman.ozwsh_main 3870No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3890No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3940No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3990No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4090No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4120No space allowed before : + elif command.startswith('add') : + ^
    conventionpyozwman.ozwsh_main 4130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4150No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4200No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4250No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4330No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4350No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4380No space allowed before : + elif command.startswith('remove') : + ^
    conventionpyozwman.ozwsh_main 4390No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4410No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4460No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4510No space allowed before : + if len(value) == 0 or to != "from" : + ^
    conventionpyozwman.ozwsh_main 4590No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4610No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4640No space allowed before : + elif command.startswith('reset') : + ^
    conventionpyozwman.ozwsh_main 4650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4680No space allowed before : + if len(state) == 0 : + ^
    conventionpyozwman.ozwsh_main 4750No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 5080No space allowed around keyword argument assignment + kvals = False) + ^
    conventionpyozwman.ozwsh_mainStatusBar950Missing class docstring
    conventionpyozwman.ozwsh_mainStatusBar.update1104Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.get_command1164Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.set_command1194Missing method docstring
    conventionpyozwman.ozwsh_mainHeaderBar1220Missing class docstring
    conventionpyozwman.ozwsh_mainHeaderBar.update1354Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow1390Missing class docstring
    refactorpyozwman.ozwsh_mainMainWindow1390Too many instance attributes (30/7)
    conventionpyozwman.ozwsh_mainMainWindow._define_log1534Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._define_screen1704Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow.exit2538Instance of 'ZWaveOption' has no 'destroy' member
    warningpyozwman.ozwsh_mainMainWindow.execute28516Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow.execute29116Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow.execute37216Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute39816Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute42416Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute45016Invalid variable name "to"
    warningpyozwman.ozwsh_mainMainWindow.execute26616Unused variable 'cmd'
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many return statements (48/6)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many branches (72/12)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many statements (171/50)
    conventionpyozwman.ozwsh_mainMainWindow._unhandled_input4824Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input49312Specify string format arguments as logging function parameters
    errorpyozwman.ozwsh_mainMainWindow._unhandled_input49812Instance of 'MainWindow' has no 'refresh_nodes' member
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input50112Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._start_network5034Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow._start_network50523Unexpected keyword argument 'kvals' in constructor call
    errorpyozwman.ozwsh_mainMainWindow._start_network5148Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie5184Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_started5254Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5268Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_resetted5324Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted53238Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_stopped5394Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped53937Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_awaked5454Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_ready5514Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5528Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5538Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5558Unused variable 'wait_for_network'
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Invalid method name "_disconnect_louie_node_and_value"
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie_node_and_value5674Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_node_update5744Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57442Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57433Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_value_update5774Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57743Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57734Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57749Unused argument 'value'
    conventionpyozwman.ozwsh_mainMainWindow._louie_group5804Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_group58036Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_group58027Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_ctrl_message5834Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58350Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58359Unused argument 'controller'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58334Unused argument 'state'
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48716Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48916Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow.active_box2418Attribute '_active_box' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5288Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted5348Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped5418Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_awaked5478Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5548Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_main 360Unused select imported from select
    warningpyozwman.ozwsh_main 370Unused import sys
    warningpyozwman.ozwsh_main 380Unused import os
    warningpyozwman.ozwsh_main 440Unused format_exc imported from traceback
    warningpyozwman.ozwsh_main 470Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_main 480Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_main 490Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_main 530Unused OldestTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootDir imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 550Unused ControllerTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 560Unused NodeTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 600Unused DimmersTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused GroupsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused AssociationItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 650Unused StatTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 670Unused All imported from louie
    conventionpyozwweb 10Missing module docstring
    warningpyozwweb 260No exception type(s) specified
    warningpyozwweb.shell 360Wildcard import flask
    warningpyozwweb.shell 370Wildcard import app
    warningpyozwweb.shell 370Relative import 'app', should be 'pyozwweb.app'
    warningpyozwweb.shell 330Unused import readline
    warningpyozwweb.shell 340Unused pprint imported from pprint
    warningpyozwweb.shell 360Unused import render_template_string from wildcard import
    warningpyozwweb.shell 360Unused import Flask from wildcard import
    warningpyozwweb.shell 360Unused import request from wildcard import
    warningpyozwweb.shell 360Unused import get_flashed_messages from wildcard import
    warningpyozwweb.shell 360Unused import Blueprint from wildcard import
    warningpyozwweb.shell 360Unused import send_from_directory from wildcard import
    warningpyozwweb.shell 360Unused import session from wildcard import
    warningpyozwweb.shell 360Unused import Module from wildcard import
    warningpyozwweb.shell 360Unused import escape from wildcard import
    warningpyozwweb.shell 360Unused import Config from wildcard import
    warningpyozwweb.shell 360Unused import render_template from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_pushed from wildcard import
    warningpyozwweb.shell 360Unused import redirect from wildcard import
    warningpyozwweb.shell 360Unused import request_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import after_this_request from wildcard import
    warningpyozwweb.shell 360Unused import current_app from wildcard import
    warningpyozwweb.shell 360Unused import json from wildcard import
    warningpyozwweb.shell 360Unused import make_response from wildcard import
    warningpyozwweb.shell 360Unused import Response from wildcard import
    warningpyozwweb.shell 360Unused import request_started from wildcard import
    warningpyozwweb.shell 360Unused import has_app_context from wildcard import
    warningpyozwweb.shell 360Unused import send_file from wildcard import
    warningpyozwweb.shell 360Unused import get_template_attribute from wildcard import
    warningpyozwweb.shell 360Unused import Session from wildcard import
    warningpyozwweb.shell 360Unused import Markup from wildcard import
    warningpyozwweb.shell 360Unused import copy_current_request_context from wildcard import
    warningpyozwweb.shell 360Unused import Request from wildcard import
    warningpyozwweb.shell 360Unused import safe_join from wildcard import
    warningpyozwweb.shell 360Unused import flash from wildcard import
    warningpyozwweb.shell 360Unused import stream_with_context from wildcard import
    warningpyozwweb.shell 360Unused import template_rendered from wildcard import
    warningpyozwweb.shell 360Unused import got_request_exception from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import url_for from wildcard import
    warningpyozwweb.shell 360Unused import g from wildcard import
    warningpyozwweb.shell 360Unused import has_request_context from wildcard import
    warningpyozwweb.shell 360Unused import jsonify from wildcard import
    warningpyozwweb.shell 360Unused import json_available from wildcard import
    warningpyozwweb.shell 360Unused import message_flashed from wildcard import
    warningpyozwweb.shell 360Unused import abort from wildcard import
    warningpyozwweb.shell 360Unused import request_finished from wildcard import
    warningpyozwweb.shell 360Unused import signals_available from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_popped from wildcard import
    warningpyozwweb.shell 370Unused import leave_room from wildcard import
    warningpyozwweb.shell 370Unused import SocketIO from wildcard import
    warningpyozwweb.shell 370Unused import app from wildcard import
    warningpyozwweb.shell 370Unused import run_app from wildcard import
    warningpyozwweb.shell 370Unused import start_listener from wildcard import
    warningpyozwweb.shell 370Unused import create_app from wildcard import
    warningpyozwweb.shell 370Unused import NullHandler from wildcard import
    warningpyozwweb.shell 370Unused import disconnect from wildcard import
    warningpyozwweb.shell 370Unused import monkey from wildcard import
    warningpyozwweb.shell 370Unused import stop_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import stop_all from wildcard import
    warningpyozwweb.shell 370Unused import fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import time from wildcard import
    warningpyozwweb.shell 370Unused import close_room from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveNetwork from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveOption from wildcard import
    warningpyozwweb.shell 370Unused import sys from wildcard import
    warningpyozwweb.shell 370Unused import stop_listener from wildcard import
    warningpyozwweb.shell 370Unused import logging from wildcard import
    warningpyozwweb.shell 370Unused import install_secret_key from wildcard import
    warningpyozwweb.shell 370Unused import dispatcher from wildcard import
    warningpyozwweb.shell 370Unused import join_room from wildcard import
    warningpyozwweb.shell 370Unused import All from wildcard import
    warningpyozwweb.shell 370Unused import socketio from wildcard import
    warningpyozwweb.shell 370Unused import signal from wildcard import
    warningpyozwweb.shell 370Unused import Fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import threading from wildcard import
    warningpyozwweb.shell 370Unused import start_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import emit from wildcard import
    conventionpyozwweb.reloadmain330Missing function docstring
    conventionpyozwweb.runmain370Missing function docstring
    conventionpyozwweb.config 410Invalid constant name "_basedir"
    conventionpyozwweb.configConfig430Missing class docstring
    conventionpyozwweb.configProductionConfig730Missing class docstring
    conventionpyozwweb.configRunConfig770Missing class docstring
    conventionpyozwweb.configReloadConfig820Missing class docstring
    conventionpyozwweb.configTestingConfig880Missing class docstring
    conventionpyozwweb.app.listener 680No space allowed after bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 680No space allowed before bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 1200Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1210Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1240Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1250Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1260Line too long (168/140)
    conventionpyozwweb.app.listener 1430Exactly one space required around assignment + data=node.to_dict() + ^
    conventionpyozwweb.app.listener 1450Wrong continued indentation. + {'data': data}, + ^ |
    conventionpyozwweb.app.listener 1460Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1850Line too long (146/140)
    conventionpyozwweb.app.listener 2240No space allowed after bracket + self._stopevent.set( ) + ^
    conventionpyozwweb.app.listener 2240No space allowed before bracket + self._stopevent.set( ) + ^
    fatalpyozwweb.app.listener 344Unable to import 'pydispatch'
    conventionpyozwweb.app.listener 590Invalid constant name "listener"
    warningpyozwweb.app.listenerListenerThread._louie_network11712Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_network11712Reimport 'request' (imported line 47)
    errorpyozwweb.app.listenerListenerThread._louie_network12029Undefined variable 'data_room_network'
    errorpyozwweb.app.listenerListenerThread._louie_network12429Undefined variable 'data_room_network'
    warningpyozwweb.app.listenerListenerThread._louie_network12616Specify string format arguments as logging function parameters
    warningpyozwweb.app.listenerListenerThread._louie_network11712Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_node14026Unused argument 'network'
    warningpyozwweb.app.listenerListenerThread._louie_values16512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Unused variable 'request'
    warningpyozwweb.app.listenerstart_listener2304Using the global statement
    conventionpyozwweb.app.listenerstart_listener2304Invalid constant name "listener"
    warningpyozwweb.app.listenerstop_listener2394Using the global statement
    conventionpyozwweb.app.listenerstop_listener2394Invalid constant name "listener"
    warningpyozwweb.app.listener 310Unused import os
    warningpyozwweb.app.listener 370Unused import time
    warningpyozwweb.app.listener 410Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.listener 420Unused Singleton imported from openzwave.singleton
    warningpyozwweb.app.listener 450Unused All imported from louie
    warningpyozwweb.app.listener 470Unused Flask imported from flask
    warningpyozwweb.app.listener 470Unused request imported from flask
    warningpyozwweb.app.listener 470Unused session imported from flask
    warningpyozwweb.app.listener 470Unused render_template imported from flask
    warningpyozwweb.app.viewsmap960Redefining built-in 'map'
    errorpyozwweb.app.views 460No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.views 460Unable to import 'flask.ext.socketio'
    warningpyozwweb.app.views 580Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app.viewsnot_found710Missing function docstring
    warningpyozwweb.app.viewsnot_found7114Unused argument 'error'
    conventionpyozwweb.app.viewshome750Missing function docstring
    conventionpyozwweb.app.viewsnode800Missing function docstring
    conventionpyozwweb.app.viewsvalues840Missing function docstring
    conventionpyozwweb.app.viewscontroller880Missing function docstring
    conventionpyozwweb.app.viewsdebug920Missing function docstring
    conventionpyozwweb.app.viewsmap960Missing function docstring
    conventionpyozwweb.app.viewsscenes1000Missing function docstring
    conventionpyozwweb.app.viewschat1040Missing function docstring
    warningpyozwweb.app.views 410Unused import sys
    warningpyozwweb.app.views 410Unused import os
    warningpyozwweb.app.views 420Unused import time
    warningpyozwweb.app.views 430Unused Thread imported from threading
    warningpyozwweb.app.views 450Unused Flask imported from flask
    warningpyozwweb.app.views 450Unused session imported from flask
    warningpyozwweb.app.views 450Unused current_app imported from flask
    warningpyozwweb.app.views 450Unused request imported from flask
    warningpyozwweb.app.views 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused disconnect imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused emit imported from flask.ext.socketio
    warningpyozwweb.app.views 480Unused import libopenzwave
    warningpyozwweb.app.views 490Unused import openzwave
    warningpyozwweb.app.views 500Unused ZWaveNode imported from openzwave.node
    warningpyozwweb.app.views 510Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.views 520Unused ZWaveScene imported from openzwave.scene
    warningpyozwweb.app.views 530Unused ZWaveController imported from openzwave.controller
    warningpyozwweb.app.views 540Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.views 550Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.views 560Unused dispatcher imported from louie
    warningpyozwweb.app.views 560Unused All imported from louie
    warningpyozwweb.app.views 570Unused socketio imported from pyozwweb.app
    warningpyozwweb.app.views 580Unused listener imported from listener
    conventionpyozwweb.app.__init__ 930Exactly one space required after comma + socketio.run(app, use_reloader=app.config['RELOADER'],host=app.config['HOST'], port=app.config['PORT']) + ^
    conventionpyozwweb.app.__init__ 1830Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1860Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1870Unnecessary parens after u'print' keyword
    errorpyozwweb.app 430No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app 430Unable to import 'flask.ext.socketio'
    warningpyozwweb.app 670Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app 690Invalid constant name "fanstatic"
    conventionpyozwweb.app 700Invalid constant name "app"
    conventionpyozwweb.app 710Invalid constant name "socketio"
    conventionpyozwweb.apprun_app730Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Redefining name 'signal' from outer scope (line 65)
    conventionpyozwweb.apprun_app.signal_term_handler754Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Unused argument 'signal'
    warningpyozwweb.apprun_app.signal_term_handler7536Unused argument 'frame'
    warningpyozwweb.apprun_app834Using the global statement
    conventionpyozwweb.apprun_app834Invalid constant name "socketio"
    warningpyozwweb.apprun_app854Using the global statement
    conventionpyozwweb.apprun_app854Invalid constant name "app"
    warningpyozwweb.apprun_app874Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app924Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app7329Unused argument 'debug'
    conventionpyozwweb.appstop_all970Missing function docstring
    warningpyozwweb.appstop_all994Using global for 'app' but no assignment is done
    conventionpyozwweb.appstop_all994Invalid constant name "app"
    warningpyozwweb.appcreate_app1114Redefining name 'logging' from outer scope (line 55)
    warningpyozwweb.appcreate_app1034Redefining name 'monkey' from outer scope (line 35)
    conventionpyozwweb.appcreate_app1020Missing function docstring
    warningpyozwweb.appcreate_app1034Reimport 'monkey' (imported line 35)
    warningpyozwweb.appcreate_app1084Using the global statement
    conventionpyozwweb.appcreate_app1084Invalid constant name "app"
    warningpyozwweb.appcreate_app1144Specify string format arguments as logging function parameters
    conventionpyozwweb.appcreate_app1168Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1188Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1208Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1228Invalid variable name "ZWAVE_DEBUG"
    warningpyozwweb.appcreate_app1364Using the global statement
    conventionpyozwweb.appcreate_app1364Invalid constant name "fanstatic"
    warningpyozwweb.appcreate_app1384Using the global statement
    conventionpyozwweb.appcreate_app1384Invalid constant name "socketio"
    warningpyozwweb.appcreate_app1424Relative import 'views', should be 'pyozwweb.app.views'
    warningpyozwweb.appcreate_app1434Relative import 'socket', should be 'pyozwweb.app.socket'
    warningpyozwweb.appcreate_app1424Unused variable 'views'
    warningpyozwweb.appcreate_app1434Unused variable 'chat'
    warningpyozwweb.appcreate_app1434Unused variable 'ozwave'
    warningpyozwweb.appcreate_app1168Unused variable 'ZWAVE_DEBUG'
    warningpyozwweb.appstart_zwnetwork15020Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.appstart_zwnetwork1500Missing function docstring
    errorpyozwweb.appstart_zwnetwork1574Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwweb.appstop_zwnetwork1610Missing function docstring
    warningpyozwweb.appinstall_secret_key17023Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.app.socket.ozwave 950Exactly one space required around assignment + done=False + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 1000Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1060No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1140No space allowed before : + try : + ^
    conventionpyozwweb.app.socket.ozwave 1230Exactly one space required around assignment + done=False + ^
    conventionpyozwweb.app.socket.ozwave 1240Exactly one space required after comma + keys = ['posx','posy'] + ^
    conventionpyozwweb.app.socket.ozwave 1280Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1400No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1710Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1720Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1790Wrong continued indentation. + {'data': data, + ^|
    conventionpyozwweb.app.socket.ozwave 1800Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1820Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1830Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1860Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 1880Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 1930No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2000Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2020Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2070No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2140Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2160Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2210No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2280Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2300Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2350No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2420Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2440Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2490No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2860No space allowed before : + if data['result'] == True : + ^
    conventionpyozwweb.app.socket.ozwave 2980Line too long (147/140)
    errorpyozwweb.app.socket.ozwave 480No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.ozwave 480Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.ozwaveecho_message720Missing function docstring
    conventionpyozwweb.app.socket.ozwavedisconnect_request790Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_connect870Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_network_event920Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_node_event1110Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_nodes_event1460Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_controller_event1540Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_command_event1610Missing function docstring
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many branches (38/12)
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many statements (120/50)
    conventionpyozwweb.app.socket.ozwaveecho_value_event2940Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_scenes_event3030Missing function docstring
    warningpyozwweb.app.socket.ozwave 430Unused import os
    warningpyozwweb.app.socket.ozwave 430Unused import sys
    warningpyozwweb.app.socket.ozwave 440Unused import time
    warningpyozwweb.app.socket.ozwave 450Unused Thread imported from threading
    warningpyozwweb.app.socket.ozwave 470Unused Flask imported from flask
    warningpyozwweb.app.socket.ozwave 470Unused render_template imported from flask
    warningpyozwweb.app.socket.ozwave 480Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 500Unused import libopenzwave
    warningpyozwweb.app.socket.ozwave 510Unused import openzwave
    warningpyozwweb.app.socket.ozwave 520Unused ZWaveNode imported from openzwave.node
    warningpyozwweb.app.socket.ozwave 530Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.socket.ozwave 540Unused ZWaveScene imported from openzwave.scene
    warningpyozwweb.app.socket.ozwave 550Unused ZWaveController imported from openzwave.controller
    warningpyozwweb.app.socket.ozwave 560Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.socket.ozwave 570Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.socket.ozwave 580Unused All imported from louie
    warningpyozwweb.app.socket.ozwave 580Unused dispatcher imported from louie
    warningpyozwweb.app.socket.ozwave 590Unused app imported from pyozwweb.app
    warningpyozwweb.app.socket 900No exception type(s) specified
    conventionpyozwweb.app.socket.chat 1270Unnecessary parens after u'print' keyword
    errorpyozwweb.app.socket.chat 460No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.chat 460Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.chattest_message610Missing function docstring
    conventionpyozwweb.app.socket.chattest_broadcast_message700Missing function docstring
    conventionpyozwweb.app.socket.chatjoin780Missing function docstring
    conventionpyozwweb.app.socket.chatleave870Missing function docstring
    conventionpyozwweb.app.socket.chatclose960Missing function docstring
    conventionpyozwweb.app.socket.chatsend_room_message1050Missing function docstring
    conventionpyozwweb.app.socket.chatdisconnect_request1130Missing function docstring
    conventionpyozwweb.app.socket.chattest_connect1210Missing function docstring
    conventionpyozwweb.app.socket.chattest_disconnect1260Missing function docstring
    warningpyozwweb.app.socket.chat 410Unused import sys
    warningpyozwweb.app.socket.chat 410Unused import os
    warningpyozwweb.app.socket.chat 420Unused import time
    warningpyozwweb.app.socket.chat 430Unused Thread imported from threading
    warningpyozwweb.app.socket.chat 450Unused Flask imported from flask
    warningpyozwweb.app.socket.chat 450Unused current_app imported from flask
    warningpyozwweb.app.socket.chat 450Unused render_template imported from flask
    warningpyozwweb.app.socket.chat 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.chat 480Unused app imported from pyozwweb.app
    refactoropenzwave.nodeZWaveNode490Interface not implemented
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.ozwave)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.chat)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.views)
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.listener:6 +==pyozwweb.app.views:17 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +from gevent import monkey +monkey.patch_all() + +import os +import sys +if sys.hexversion &gt;= 0x3000000: + from pydispatch import dispatcher +else: + from louie import dispatcher +import time + +from openzwave.network import ZWaveNetwork +from openzwave.controller import ZWaveController +from openzwave.option import ZWaveOption +from openzwave.singleton import Singleton +import threading +from threading import Thread +from louie import dispatcher, All + +from flask import Flask, render_template, session, request, current_app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logging.getLogger('pyozwweb').addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} + + ZWAVE_DEVICE = "/dev/ttyUSB0"
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os, sys +import time +from threading import Thread + +from flask import Flask, render_template, session, request, current_app +from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect + +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from louie import dispatcher, All +from pyozwweb.app import socketio, app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler):
    refactorpyozwweb.app.socket.chat 10Similar lines in 5 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os, sys +import time +from threading import Thread + +from flask import Flask, render_template, session, request, current_app +from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect + +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from louie import dispatcher, All +from pyozwweb.app import socketio, app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError:
    refactorpyozwweb.app.socket.chat 10Similar lines in 6 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True
    refactorpyozwweb.app.socket.chat 10Similar lines in 7 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' +
    refactorpyozwweb.app.socket.chat 10Similar lines in 8 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000
    refactorpyozwweb.app.socket.chat 10Similar lines in 9 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:'
    refactorpyozwweb.app.socket.chat 10Similar lines in 10 files +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False
    refactorpyozwweb.app.socket.chat 10Similar lines in 13 files +==openzwave:1 +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.__init__:65 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +==pyozwweb:1 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False
    refactorpyozwweb.app.socket.chat 10Similar lines in 3 files +==openzwave.group:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject + +# Set default logging handler to avoid "No handler found" warnings. +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:28 +==pyozwman.ozwsh_widgets:27 +__author__ = 'bibi21000' + +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from select import select +import sys +import os +import urwid +from urwid.raw_display import Screen
    refactorpyozwweb.app.socket.chat 10Similar lines in 9 files +==openzwave.command:34 +==openzwave.controller:42 +==openzwave.group:33 +==openzwave.network:52 +==openzwave.node:37 +==openzwave.object:31 +==openzwave.option:37 +==openzwave.scene:33 +==openzwave.value:33 +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:46 +==pyozwman.ozwsh_widgets:40 +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==openzwave.network:25 +==openzwave.option:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==openzwave.network:616 +==openzwave.node:204 + if 'kvals' in extras and self.network.dbcon is not None: + vals = self.kvals + for key in vals.keys(): + ret[key]=vals[key] + return ret +
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==openzwave.group:25 +==openzwave.node:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==openzwave.object:25 +==openzwave.singleton:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==openzwave.network:616 +==openzwave.node:204 +==openzwave.scene:223 +==openzwave.value:562 + if 'kvals' in extras and self.network.dbcon is not None: + vals = self.kvals + for key in vals.keys(): + ret[key]=vals[key] + return ret
    refactorpyozwweb.app.socket.chat 10Similar lines in 12 files +==openzwave.command:25 +==openzwave.controller:26 +==openzwave.group:25 +==openzwave.network:25 +==openzwave.node:25 +==openzwave.object:25 +==openzwave.option:25 +==openzwave.scene:25 +==openzwave.singleton:25 +==openzwave.value:25 +==pyozwman.ozwsh_main:30 +==pyozwman.ozwsh_widgets:29 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass
    diff --git a/docs/html/pyozwweb.html b/docs/html/pyozwweb.html index f619735d..92828cf0 100644 --- a/docs/html/pyozwweb.html +++ b/docs/html/pyozwweb.html @@ -57,16 +57,23 @@

    Launching it

    Source

    diff --git a/docs/html/scene.html b/docs/html/scene.html index b52bc272..91c7c1e1 100644 --- a/docs/html/scene.html +++ b/docs/html/scene.html @@ -241,12 +241,16 @@

    Scene documentation
    -to_dict(kvals=True)
    +to_dict(extras=['kvals'])

    Return a dict representation of the node.

    + + + + diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js index 775fb723..9b79883c 100644 --- a/docs/html/searchindex.js +++ b/docs/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:42,terms:{zwavecontrol:[11,22,7],four:15,prefix:15,sleep:[14,11,25,7,15],ret:27,is_change_verifi:26,whose:15,sorri:10,"0x26":27,"0x27":27,"0x25":27,write_config:7,under:[14,15,6,7,0,19,2,26,9,22,27,25,16],command_class_climate_control_schedul:15,merchant:[14,15,6,7,0,19,2,26,22,27,25,16],digit:15,avril:9,everi:[15,7,18,26,3,27,16],controllercommand_requestnodeneighborupd:[14,15,22,7],nodefail:25,"_socketio":8,upload:15,ozw_library_vers:22,highpow:15,second:[15,7,26,16],command_class_alarm:15,even:[14,15,6,7,0,19,2,26,22,27,25,16],command_class_door_lock:15,"new":[5,15,16,18,2,22,27,10,25,7],ever:[15,26],told:[15,22],widget:3,never:[15,16],drwxrwsr:9,here:[28,11,15,16,9],getvaluefromtyp:7,path:[15,22,16,9],controllercommand_removedevic:[15,22],zwavescen:[11,2],library_descript:22,cdef:15,forum:10,anymor:[10,20,7,18],precis:[15,26],studi:27,basic_set:7,portabl:15,volunt:[4,17],pollingen:[25,7],unix:[14,15,6,16,19,2,26,22,27,25,7],controllercommand_deletebutton:[15,22],get_power_level:27,total:9,command_class_scene_controller_conf:15,unit:[15,27,7,26],describ:[14,15,7,26],would:[14,15,27],call:[14,15,7,20,9,27,11],recommend:[15,7],type:[14,15,19,6,7,1,2,21,22,3,27,26,16],tell:[15,22],notif:[25,23],notic:[15,22],warn:25,hold:[15,6,7],manufacturer_id:14,must:[15,7,19,20,9,28,22,27,10,11],join:8,room:8,work:[25,22,20,9],configpath:15,kwarg:25,root:9,signal_node_nam:7,getvaluecommandclass:15,give:15,controllercommand:[14,15,7],want:[27,20,9],unsign:15,recov:25,turn:[15,27,7],classifi:[15,26],verifi:[15,26],config:[15,16,8,26,9,22,3,11,25],updat:[18,9],actdiag:9,after:[15,7,18,20,9,11],pyvaluetyp:[14,27,25,7],controllercommand_requestnodeneighbor:22,befor:[15,16,9,27,10,11],averag:15,fedora:20,"0x014d0ef5":26,zwavevalu:[11,2,26,7],attempt:[15,7,16],command_class_multi_cmd:15,exclud:16,getcontrollerinterfacetyp:15,sinopsi:[14,15,6,16,19,2,26,22,27,25,7],lambda:[19,26],get_sensor_valu:27,origin:15,feedback:[15,25],softwar:[14,15,6,7,0,19,2,26,22,27,25,16],over:[14,15],becaus:[10,15,7],manufactu:15,callback_desc:15,broadcastreadcnt:15,vari:7,streamlin:25,getinst:7,fit:[14,15,6,7,0,19,2,26,22,27,25,16],fix:[14,15,18],better:15,change_valu:14,getdriverstatist:15,"_app":8,them:[15,7,18,9,22,3,27,28,11],woken:15,thei:[15,7,20,9,22,27,11],getozwlibraryvers:15,safe:7,use_cach:19,"break":11,command_class_simple_av_control:15,"0x31":27,"0x30":27,"0x32":27,isnoderoutingdevic:15,setvalu:15,set_driver_max_attempt:16,signal_driver_remov:7,remove_associ:6,s_cancnt:22,set_notify_transact:16,state_reset:7,getvalu:15,timeout:[15,22],each:[15,25,7],debug:[15,18,9,10,11,25],mean:[11,15,9],state_start:7,activatescen:15,is_outd:19,group:[10,25,21,9],get_values_by_nod:2,set_log_fil:[11,16],gassoci:3,extract:28,louie_value_upd:11,network:[5,15,6,18,21,22,23,10,11,25],goe:15,content:[10,5,12],rewrit:18,s_writecnt:22,signal_network_reset:[22,7],get_battery_level:27,free:[14,15,6,7,0,19,2,26,22,27,25,16],nodedata:15,ptyhon:18,zwavenodesensor:27,virtual_env:9,resetcontrol:15,commandclass:[14,15,19,7,16],ist:18,filter:[14,15,27,26],requestnodest:15,regress:20,louie:[11,3,22,7,23],controllercommand_createnewprimari:[15,22],rang:[11,15],alreadi:[28,20,18],wrapper:[10,27],signal_value_refresh:7,primari:[15,22],allnodesqueri:[15,25,7],sourc:[28,18,9],command_class_av_content_search_md:15,enumwithdoc:15,command_class_chimney_fan:15,sometim:20,scene1:26,getvalueasfloat_:15,master:[20,9],too:[15,22,9],zwave:[10,22,23,9],data_item:26,getnodemanufacturernam:15,noderemov:[25,7],consol:16,cancel_command:22,setuptool:[10,18],somewhat:7,nakcnt:15,driverawak:7,command_class_av_renderer_statu:15,signal_node_queries_complet:7,target:20,keyword:25,provid:[5,15,25,27],set_includ:16,tree:[10,18],zero:15,project:[14,15,6,7,0,19,2,26,22,27,25,16],averageresponsertt:15,minut:[11,15],ram:16,mind:20,raw:25,seem:18,python_exec:9,especi:[14,15],transmit:26,get_switch_st:27,getvalueasint:15,simplifi:15,sceneev:[25,7],usernam:9,object:[5,15,6,7,21,10,11,25],nodeid:[15,11,7,26],regular:[15,7],begin_command_assign_return_rout:22,command_class_zip_adv_cli:15,don:[15,19,26,9,27,10],signal_network_stop:7,doc:[25,18,20,9],doe:[15,7,18,26,22,10],bracket:7,networkfail:7,came:28,pfncontrollercallback_t:15,keyval:19,signal_button_off:7,get_scen:7,set_queue_log_level:16,identifi:[15,6,7,26,23,16],damen:0,zwavenodeinterfac:19,switch_al:[27,7],"_highpow":[15,22],"_groupidx":[14,15],configur:[14,15,7,26,9,22,27,16],busi:15,folder:15,command_class_meter_tbl_push:15,driverreadi:[15,25,7],softresetcontrol:15,stop:[15,11,18,7,8],setswitchpoint:15,report:[14,15,7,1,21,9,26,11,16],"public":[14,15,6,7,0,19,2,26,22,27,25,16],reload:18,bad:[15,22],releasebutton:15,respond:[15,22],getnodesecur:15,begin_command_transfer_primary_rol:22,id_on_network:[7,26],num:15,result:[14,15,1,7,21],respons:[14,15,7],command_class_mtp_window_cov:15,best:28,awar:25,ackcnt:15,valuetype_button:15,yet:[14,15,22],simplest:28,data_as_str:26,approach:15,attribut:[15,7],removescen:15,extens:3,setnodeon:15,groupidx:15,protect:15,easi:10,howev:15,enable_pol:26,getnodeproducttyp:15,logic:7,seri:15,com:[14,15,6,7,0,19,20,2,26,9,22,27,10,25,16],applianc:27,kwh:27,replacefailednod:[15,25,22],begin_command_has_node_fail:22,assum:[15,6],duplic:15,recur:15,set_config_param:14,getnodeproductid:15,setscenelabel:15,trigger:[14,15,7],interest:15,basic:[14,27,15,25,26],command_class_user_cod:15,nodenam:[15,25,7],driverreset:[25,7],retalloc:15,ani:[14,15,6,7,0,19,2,26,22,27,25,16],"catch":11,signal_driver_readi:7,gnu:[14,15,6,7,0,19,2,26,22,27,25,16],properti:[14,19,27],getallscen:15,command_class_displai:15,aid:15,join_room_valu:8,rediscov:[14,15,7],optionnali:14,conf:8,controllerstate_complet:[15,22],perform:[14,15,7],make:[15,20,9,28,22,10],driverfail:[25,7],complex:15,signal_scene_ev:7,complet:[14,15,6,7,22,25,16],rais:16,tune:8,max_associ:6,sentfail:15,deleteallreturnrout:25,thr:22,changer:19,client:[11,22,15],thi:[14,15,6,7,0,18,19,20,8,26,2,22,3,27,28,11,9,25,16],get_switch_all_item:27,everyth:[25,7],unchang:16,ttyusb0:[15,8,18],just:[14,15,7],receivedcnt:15,command_class_silence_alarm:15,human:[14,15],bit:15,previous:[15,20],nondeliveri:15,replicationsend:25,expos:15,had:[14,15],command_class_protect:15,els:11,save:[15,16],applic:[14,15,7,26,23,25],mayb:19,commmand:15,command_class:[14,27,26],background:15,valueid:[14,15,27,7],promari:15,isnodesecuritydevic:15,measur:[15,26],specif:[14,15,19],deprec:[14,7],manual:[14,11,15,24],louie_network_fail:11,enablepol:15,unstabl:20,www:[14,15,6,7,0,19,2,26,22,27,25,16],right:[28,8,9],old:[10,15,20,22,18],interv:[15,7,16],intern:25,sure:[28,19,9],heritag:27,successfulli:[15,22,7],txt:9,querystag:[14,15],command_class_remote_associ:15,getlibraryvers:15,plug:27,s_nakcnt:22,clearswitchpoint:15,soft_reset:22,set_save_configur:16,allnodesqueriedsomedead:25,command_class_thermostat_operating_st:15,joomla:9,sendnodeinform:25,commit:[20,9],thermostat:19,zwaveobject:[19,27],command_class_switch_toggle_multilevel:15,"float":[15,26],signal_button_on:7,down:3,create_scen:7,wan:14,accordingli:7,git:[10,28,20,9],wai:[14,15,19,9,27,28,11],support:9,networkstart:7,avail:[15,11,3,7],wordpress:15,setscenevalu:15,s_sofcnt:22,forc:[14,15],drwxr:9,taken:15,zwaveopt:[11,22,16],"true":[14,15,16,19,2,26,22,27,11,7],reset:[27,15,3,22,7],setdoc:15,maximum:[14,15,7,26],until:[15,7],pyozwman:18,classid:14,featur:[10,15],isnodeinforeceiv:[14,15],classic:27,getnodequerystagecod:15,zwavetypeexcept:19,exist:[15,7,19,22,25,16],check:[14,15,7,19,26,9,22,27],readonli:[14,27,7],api_sniff:23,state_stop:7,tip:9,signal_network_readi:[11,7],bibi21000:[14,15,6,7,0,19,20,2,26,9,22,27,28,25,16],role:[15,22],test:18,presum:14,"72057594109853720l":27,node:[5,15,6,7,18,20,21,22,27,23,11],relat:7,intend:7,command_class_network_stat:15,command_class_composit:15,intens:[15,26],consid:[27,7],occasion:[15,26],outdat:19,bitbucket:[10,18],receiv:[14,15,6,7,0,19,2,26,22,27,11,25,16],sendig:22,longer:15,command_class_screen_attribut:15,ignor:[27,16],time:[15,7,18,19,26,9,22,11,16],push:9,sniffer:11,backward:14,particular:[14,15,6,7,0,19,2,26,22,27,25,16],serialport:15,although:[15,7,26],signific:7,millisecond:[15,7,16],flask:[10,23,18],decim:[27,25],readabl:[14,15],pyozwweb:18,command_class_scene_activ:15,scenes_count:7,command_class_thermostat_fan_mod:15,valuerefresh:[25,7],begin_command_receive_configur:22,string:[14,15,7,26,9,27,25],set_console_output:[11,16],signal_driver_:7,zwcfg:7,word:11,brows:14,get_dimm:27,dim:[27,20],uwird:3,level:[5,15,16,18,19,26,22,27,25],signal_create_button:7,iter:25,item:[27,15,25],getsucnodeid:15,round:15,dir:20,max_baud_r:14,loglvel:16,getnumscen:15,isnodelisteningdevic:15,set_dump_trigger_level:16,sign:15,zwcfg_:15,port:[15,7,16],appear:[10,15,26],current:[15,27,26],getnodemaxbaudr:15,switchalloff:15,is_read_onli:26,gener:[14,15,6,7,0,19,2,26,9,22,27,11,25,16],getsendqueuecount:15,valueremov:[25,7],modif:11,along:[14,15,6,7,0,19,2,26,22,27,25,16],zwavecacheexcept:19,wait:[14,15,16,22,11,25],checksum:[15,22],command_class_sensor_binari:[15,27],queue:[15,22],environn:9,activ:[15,11,27,2,16],modul:[10,27],essentialnodequeriescomplet:[25,7],zwavegroup:6,instal:[18,23,9],command_class_batteri:[15,27],command_class_thermostat_setback:15,memori:[15,23],visit:3,live:7,handler:[15,22,7],utpdat:9,command_class_energy_product:15,command_class_associ:15,claus:11,pylint:[1,21,9],enhanc:15,signal_node_readi:7,signal_node_ad:7,lastrequestrtt:15,setvaluehelp:15,"72057594118242369l":27,maarten:0,uniqu:[15,26],can:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,10,11,9,25,16],memoryleaks3:15,purpos:[14,15,6,7,0,19,2,26,22,27,25,16],controllercommand_adddevic:[15,22],switchallon:15,nodereadi:7,abort:[15,22],add_associ:6,alwai:[14,15,25,7],multipl:[15,27,26],getoptionasstr:15,group_index:6,write:[11,27,15,26,9],setnodenam:15,"0x80":27,zwave_devic:8,map:[5,15,18,27,10,25],product:[14,15,7],command_class_application_statu:15,max:[27,16,26],clone:[20,9],id_separ:7,upnoderout:[14,15,7],"_getozwlibraryversionnumb":15,mai:[15,7,26,9],data:[22,1,27,21],setnodemanufacturernam:15,beam:[14,15],getvaluemax:15,getvalueasstr:15,secur:[14,15,22,7],favorit:8,requestnodeneighborupd:25,"switch":[15,7,18,19,20,3,27,23,11],still:15,pointer:15,interspers:[15,7],disconnect:22,sof:[15,22],platform:[14,15,6,16,19,2,26,22,27,25,7],main:[11,15],non:20,receiveconfigur:25,broadcastwritecnt:15,nov:9,now:[15,7,18,19,20,9,28,22,10,11],discuss:10,getgrouplabel:15,term:[14,15,6,7,0,19,2,26,22,27,25,16],louie_network_start:11,name:[14,15,7,20,22,3,27,10,11,25],drop:[15,22],revert:[15,6],getassoci:[14,15],separ:[15,7],getvalueasbool:15,compil:[10,28,20],replac:[15,22,7,18],individu:7,getscenelabel:15,continu:11,redistribut:[14,15,6,7,0,19,2,26,22,27,25,16],begin_command_request_node_neigbhor_upd:22,happen:27,is_security_devic:14,alpha2:18,alpha3:18,shown:25,alpha1:18,removescenevalu:15,alpha4:18,sensor:[11,3,27,7,23],correct:[15,26],getchangeverifi:15,get_value_from_id_on_network:7,leave_room_nod:8,loglevel_debug:16,org:[14,15,6,7,0,18,19,2,26,9,22,27,10,25,16],"byte":[14,15,7,26,22,27,25],care:27,signal_all_nodes_queri:7,frequenc:15,transferprimaryrol:25,motion:7,thing:[11,27],place:[15,9],frequent:[14,15],first:[14,11,27,7,15],oper:[14,15,22,7],hasnodefail:25,directli:[27,15,6,7,9],onc:[15,7],arrai:15,pynotif:25,command_class_configur:15,"long":7,open:[10,15,9],predefin:27,size:[14,15],getvalueasfloat:15,given:[15,7],convent:15,streamdetail:25,getcontrollerpath:15,has_command_class:14,frame:[15,22,16],to_node_id:22,hub:9,cope:[15,7],copi:[14,15,6,7,0,19,20,2,26,9,22,27,25,16],specifi:[15,22,7,16],broadcast:[15,7],github:[14,15,6,7,0,19,20,2,26,9,22,27,10,25,16],an158:27,"0x73":27,than:[15,7,26,16],sentt:15,param2:27,param1:27,were:[14,11,22,15],set_append_log_fil:[11,16],browser:8,sai:[15,19,27,7],controllercommand_sendnodeinform:15,argument:[11,25],deliv:[15,22],is_bridge_control:22,squar:7,"_network":22,destroi:15,object_id:[19,2],note:[10,26,24],take:[15,7],pycontrollerst:25,heal:[14,15,7,18],channel:11,receiveddup:15,normal:[14,15,25,22,18],buffer:25,pair:25,command_class_hail:15,getnodestatist:15,later:[14,15,6,7,0,19,2,26,22,27,11,25,16],order:7,writeconfig:15,bright:27,line:[10,15,27,9],xml:[15,7,16],is_lock:14,onli:[14,15,7,26,9,22,27,25,16],explicitli:15,libzwaveexcept:15,transact:16,naviso:15,written:[15,26],dict:[14,15,7,18,2,26,22,27,25],isnodefrequentlisteningdevic:15,command_class_meter_tbl_monitor:15,offici:20,state_fail:7,variou:[14,15],get:9,getid:7,secondari:[15,22],repo:[20,24],networkstop:7,cannot:[15,26],command_class_time_paramet:15,refreshnodeinfo:15,requir:[15,22],getozwlibraryversionnumb:15,createopt:15,leave_room_valu:8,to_dict:[14,22,2,26,7],where:[11,27],command_class_meter_puls:15,com3:15,lastreceivedmessag:15,asleep:[14,15,6],concern:[15,7],getnodeloc:15,disablepol:15,label:[14,15,6,7,2,26,22,27],behind:15,between:[14,15,7,3,27,16],dockerfil:[18,9],"import":[11,7,9],paramet:[14,15,6,7,18,19,2,26,22,3,27,11,16],getindex:7,request_all_config_param:14,parent:26,screen:[11,3],nodeev:[25,7],removeswitchpoint:15,compatibilti:9,readabort:15,tutori:[11,9],hard_reset:22,mani:[10,15,27],scene_exist:7,cancelcontrollercommand:15,period:[15,7],signal_valu:11,signal_nod:11,poll:[15,18,7,26,16],command_class_screen_md:15,bintervalbetweenpol:[15,7],rebuild:[15,22],signal_value_ad:7,getswitchpoint:15,repons:15,pyoption:[15,18],zwavecommandclassexcept:19,wake:[27,7],addassoci:[14,15],getvaluegenr:15,those:15,"case":[15,6,7,18,26,9,27,11],is_set:26,stdout:[11,15],begin_command_create_new_primari:22,eras:[15,22],"__init__":18,join_room_network:8,author:0,same:[14,15,7,26,27,11],removeallscen:15,binari:9,html:9,eventu:[14,15],finish:[15,22,18],"72057594118242352l":27,driver:[15,6,7,22,11,16],lastresponsertt:15,capabl:[14,15,22,7],command_class_languag:15,extern:7,appropri:[15,7],without:[14,15,6,7,0,19,2,26,9,22,27,25,16],join_room_control:8,setnodeloc:15,execut:[7,16,9],when:[14,15,7,19,20,26,9,22,27,10,11,16],loglevel_detail:16,rest:27,bitmap:15,venv:9,getconfigpath:15,targetnodeid:15,struct:15,except:[5,15,19,12,21],littl:7,command_class_geographic_loc:15,blog:15,"255l":27,homepro:27,is_primary_control:22,controllerstate_fail:[15,22],read:[15,22,7,26],addscenevalu:15,pollinterv:[15,7,16],dimmer:[18,19,3,27,23,11],temperatur:[15,27],traffic:[15,7],dispatch:[11,22,7],louie_network_readi:11,integ:15,command_class_proprietari:15,set_save_log_level:[11,16],either:[14,15,6,7,0,19,2,26,9,22,27,25,16],python_library_vers:22,manag:[26,15,6,7,19,8,21,9,22,3,27,23,10,11,16],createscen:15,autobuild:9,cancel:[15,25,22],get_values_by_command_class:14,is_write_onli:26,command_class_powerlevel:[15,27],confirm:[14,15],valuetype_schedul:15,definit:[5,12],protocol:[15,7],exit:15,command_class_grouping_nam:15,refer:[15,7],command_class_meter_tbl_config:15,isvaluewriteonli:15,power:[15,27,22],command_class_met:[15,27],fulli:[15,7],src:[10,18,8,9],patent:[15,7],central:7,ack:[15,22],degre:15,neighbor:[14,15,22,7],get_switches_al:27,effici:15,addoptionstr:15,urwid:3,your:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,23,10,11,9,25,16],zwaveexcept:19,log:[15,7,18,8,9,24,11,25,16],hex:15,overwrit:[15,16],start:[27,22,25,23,18],interfac:[15,19,27],low:[5,15,19,26,22,25],lot:22,reaload:18,set_suppress_value_refresh:16,inprogress:25,command_class_wake_up:[15,27],openzav:9,command_class_ind:15,set_switch:27,power_level:27,conclus:27,pull:10,zwavenodeswitch:27,begin_command_remove_devic:22,possibl:[27,15,6,7,26],"default":[14,15,7,26,22,16],assignreturnrout:25,set_exclud:16,connect:[11,23,7,8],controllercommand_createbutton:[15,22],creat:[15,7,19,20,2,26,9,22,28,11,25],certain:7,watcher:[15,7],file:[14,15,6,7,0,19,2,26,9,22,27,28,25,16],fill:15,incorrect:26,again:7,googl:10,allawakenodesqueri:15,event:[10,11,7,15,8],field:[14,2],valid:[14,15,26],zwavemanag:7,writabl:14,you:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,23,10,11,9,25,16],createnewprimari:25,get_values_for_command_class:14,request_config_param:14,get_dimmer_level:27,pygenr:[14,25,7],registri:9,sequenc:7,getnodegener:15,getpythonlibraryvers:15,removecontrol:[15,22],badchecksum:15,directori:[15,20,8,9,28,22,10,11],descript:[15,22,7],potenti:[15,7],cpp:22,represent:[14,22,2,26,7],all:[14,15,7,2,9,22,3,27,23,28,11,25],dist:[10,9],pth:10,get_sensor:27,follow:[7,20,9,3,27,28],disk:16,ozw_log:11,kval:[14,18,2,19,7],uint8_t:15,init:15,program:[27,7,9],"72057594101481476l":27,controllercommand_deleteallreturnrout:[15,22],fals:[14,15,16,2,26,22,27,11,7],controllercommand_addcontrol:22,mechan:[11,19,27],failur:15,veri:[25,7],manufacturer_nam:14,list:[14,15,26,28,22,27,23,10,25],helloworld:21,lisa:9,awakenodesqueri:[25,7],set_associ:16,valuechang:[14,15,25,7],delimit:15,isvaluereadonli:[15,7],rate:[14,15,7],pass:[11,15,9],further:11,what:[15,19,27,22],suc:[15,22],clock:15,abl:[15,25],delet:[15,3,22,7],version:[14,15,6,7,0,19,2,26,9,22,27,10,25,16],"_append":15,begin_command_create_button:22,method:[14,15,7,19,8,26,22,3,27],full:[10,20,18],command_class_thermostat_setpoint:15,get_poll_interv:7,behaviour:[14,15],shouldn:7,modifi:[14,15,6,7,0,19,2,26,22,27,11,25,16],valu:[14,5,15,7,18,25,19,8,21,2,22,3,27,23,11,12,16],signal_network_start:[11,7],sender:11,prior:7,base:15,state_readi:[11,7],nosetest:[18,9],action:[15,22,7],via:[14,15,7,9,10,25],setpollintens:15,vim:8,sucee:15,filenam:15,switchal:[15,7],getnodeclassinform:15,logdriverstatist:15,s_badchecksum:22,select:26,hexadecim:[14,15],regist:27,two:[15,25],coverag:[1,21,9],set_poll_interv:[7,16],minor:[10,25],more:[14,15,6,7,0,18,19,2,26,22,27,11,25,16],hundr:7,getvaluefloatprecis:15,flag:26,command_class_desc:[15,7],stick:9,command_class_zip_adv_servic:15,known:[14,15,27,7],set_valu:2,cach:19,none:[15,6,16,18,19,2,26,22,27,11,25,7],getcontrollernodeid:15,hour:15,socketio:8,dep:[28,20],dev:[15,18,8,22,3,23],learn:[15,22],def:[11,18],install_repo:10,accept:[15,22],minimum:[15,26],num_group:14,huge:25,cours:[7,9],nico0084:15,divid:[15,7],rather:[15,26],anoth:[15,27,22,9],manufacturer_specif:15,adddriv:15,simpl:11,badrout:15,get_command_class_as_str:14,command_class_no_oper:15,develop:18,setconfigparam:15,associ:[14,15,6,7,21,27,16],"short":25,product_typ:14,caus:[14,15],callback:[14,15,6,7,22,11],scenegetvalu:15,egg:[20,9],s_ackcnt:22,help:[15,3,27,26,9],isbridgecontrol:15,setback:15,held:[14,15,6,26],through:[15,6,26],s_readabort:22,get_valu:[14,2,7],get_command_class_genr:14,unwork:18,handheld:[15,22],late:[15,22],segfault:10,isreadi:14,addoptionbool:15,might:[15,20,7],signal_node_ev:7,zwavenod:[14,11,27,22],remove_valu:[14,2],good:[7,20,8,26,3,27],"return":[14,15,6,16,19,2,26,22,27,7],timestamp:25,framework:23,sleeping_nodes_count:7,productnam:15,sentcnt:15,controllercommand_receiveconfigur:[15,22],refresh:[14,15,19,16,26],easili:16,found:[14,11,7,15,9],send_queue_count:22,pyloglevel:[25,18],hard:[15,3,22],nodes_count:[11,7],expect:15,slave:15,energi:[15,27],todo:[14,16],controllerstate_wait:[15,22],ozwsh:[11,3,18],"72057594109853736l":27,command_class_zip_serv:15,unknown:15,publish:[14,15,6,7,0,19,2,26,22,27,25,16],command_class_switch_toggle_binari:15,getnodevers:15,print:11,check_data:26,reason:[15,22],healnetwork:15,ask:[10,7,9],command_class_av_content_directory_md:15,product_id:14,thread:15,launch:[10,18,20,9],script:[28,11,18],value_id:[14,27,2,26,7],assign:[15,22,7],logfil:16,singleton:[15,9],command_class_thermostat_mod:15,notifi:[11,15],"_param":[14,15],number:[14,15,6,7,22,16],placehold:7,install_arch:10,done:[15,17,20,3,27,4,11],"72057594093060096l":27,miss:[15,7],gpl:[14,15,6,7,0,19,2,26,22,27,25,16],differ:[15,22,18],s_retri:22,least:[7,9],getvaluelistselectionstr:15,setchangeverifi:15,store:[15,7,18,19,22,16],option:[14,5,15,6,7,0,18,25,19,21,28,22,27,10,11,12],controllercommand_replacefailednod:[15,22],command_class_garage_door:15,getter:27,reinstal:9,kind:27,whenev:[15,26],remov:[15,6,7,18,20,2,28,22,3,10,11,16],jqueri:[10,23,8,18],bridg:[15,22],controllercommand_removecontrol:22,str:[14,15,16,2,26,22,27,7],set_command_class_0xyz:27,comput:[20,9],add_valu:[14,2],sensormultilevel:[15,26],"72057594093273218l":27,packag:[10,28,20,9],homeid:[15,11,7,26],"null":[15,7],from_node_id:22,writeonli:[14,27],built:28,lib:18,trip:15,self:[14,7,18,22,27,11],msgcomplet:7,also:[14,15,6,7,20,2,9,22,27,10,11,8],getpollinterv:15,s_readcnt:22,distribut:[14,15,6,7,0,19,20,2,26,22,27,28,25,16],index:[14,5,15,6,7,26],isprimarycontrol:15,previou:[15,20],reach:7,most:[15,7],plai:20,node_id:[14,6,7,2,26,22],isvaluepol:15,begin_command_remove_failed_nod:22,clear:[15,7],driverremov:[25,7],part:[14,15,6,7,0,19,2,26,22,27,25,16],clean:[28,15,20],begin_command_replication_send:22,m_pollinterv:[15,7],rtt:15,session:[15,16,9],fine:[25,8],find:[15,27,7],copyright:24,command_class_switch_multilevel:[15,27],solut:8,nodess:15,queu:25,pythonfunc:15,setnodeoff:15,valuead:[25,7],hid:[15,27,7,16],fastest:28,getlibrarytypenam:15,sill:9,him:11,join_room_nod:8,user_path:[11,16,18],is_pol:[27,26],is_sleep:14,common:[5,12,7,25,9],set:[14,15,6,7,19,2,26,22,3,27,11,16],dump:16,see:[14,15,6,7,0,19,2,26,22,27,10,11,25,16],arg:[15,11,22,7],scene_id:[2,7],close:[15,22,16],command_class_thermostat_h:15,someth:[15,25,9],won:20,target_node_id:6,command_class_association_command_configur:15,signal_essential_node_queries_complet:7,altern:7,handle_command_class:27,unsolicit:[15,22],setnodelevel:15,signal_driver_fail:7,library_config_path:22,classnam:15,popul:[15,11,7],both:[15,6],last:[15,7,19,20,9,27],"72057594109853697l":27,command_class_av_tagging_md:15,context:15,load:11,readcnt:15,simpli:[11,15,26],point:[27,15,22,7],instanti:15,schedul:[15,25],consumm:27,removedriv:15,header:20,param:[14,15],shutdown:15,linux:[28,15],batteri:27,setvaluelabel:15,command_class_sensor_configur:15,buttonon:[25,7],devic:[14,15,6,7,18,19,26,22,3,23,11,16],due:[15,22,6,7],empti:[15,25,7],sinc:[15,22],begin_command_replace_failed_nod:22,fire:[22,7],getnodemanufacturerid:15,destroyopt:15,actdiag_sphinxhelp:9,refresh_valu:14,signal_node_remov:7,look:[15,17,20,9,28,4,10,11],oofcnt:15,batch:7,getpythonlibraryversionnumb:15,"while":[27,15,22,7],abov:[7,16],removefailednod:25,xvzf:28,averagerequestrtt:15,readi:[14,15,7,20,22,28,11],readm:[24,9],jpg:15,itself:7,sceneid:15,receivedunsolicit:15,nodead:[25,7],signal_error:7,shorter:[15,7],begin_command_send_node_inform:22,command_class_kick:15,signal_node_protocol_info:7,controllercommand_requestnetworkupd:[15,22],command_class_door_lock_log:15,setdoctyp:15,get_switch:27,alert:25,user:[14,15,7,18,26,9,22,27,25],typic:7,command_class_sensor_multilevel:[15,27],equival:15,toadddriv:15,older:15,entri:27,getvaluehelp:15,docker:[18,9],controllerstate_inprogress:[15,22],getvalueasshort:15,pollingdis:[25,7],build:9,format:26,"_getcontrollerinterfacetyp":15,biz:28,"72057594093273090l":27,nodequeriescomplet:[25,7],signal:[22,23],signal_polling_dis:7,command_class_vers:15,writecnt:15,api:[14,5,15,6,7,18,19,22,23,10,11],enumwithdoctyp:15,signal_awake_nodes_queri:7,jsonifi:7,signal_delete_button:7,some:[10,18,20,9],back:[11,25],command_class_0x80:27,ackwait:15,netbusi:15,per:[15,7],prop:19,retri:15,commandclassid:[15,26],nose:[1,21],run:[18,9],raspberri:28,step:27,command_class_multi_channel_v2:15,idx:15,class_id:[14,27],"72057594101662232l":27,pymanag:[15,7],primarili:7,within:[14,15,16,2,25,7],poll_intens:26,betwork:7,getvaluelabel:15,command_class_zip_cli:15,chang:[14,15,7,2,26,9,22,3,24,28,11,16],inclus:[15,22],submit:[10,9],includ:[27,18,25,7,9],suit:10,frost:15,getnumgroup:[14,15],link:9,newer:15,buttonoff:[25,7],info:[15,25,9],concaten:15,consist:15,lifespan:15,gethomeid:7,s_controllerreadcnt:22,command_class_manufacturer_proprietari:15,repres:[14,15,16,19,2,26,27,7],"char":7,config_path:[11,16,18],nak:[15,22],invalid:25,command_class_remote_association_activ:15,routedbusi:15,setvalueunit:15,sphinxdoc:15,high_pow:22,getmaxassoci:15,getnodetyp:15,getvaluemin:15,louie_node_upd:11,command_class_switch_binari:[15,27],data_str:27,code:[10,22,18,9],command_class_secur:15,queri:[15,11,7],library_user_path:22,last_upd:19,cython:[10,28,18,9],friendli:[15,27],send:[14,15,7,22,27,11],cmd_line:[11,16,18],autostart:[11,7],sens:7,fatal:25,healnetworknod:15,sent:[14,15,6,7,22,3,25,16],pycontrollercommand:25,objet:7,wave:[14,15,6,7,2,22],command_classes_as_str:14,set_dimm:27,tri:15,button:[27,15,25,22],signal_node_new:7,setnodeproductnam:15,"try":[23,16,9],signal_polling_en:7,begincontrollercommand:15,pleas:[10,18,9],impli:[14,15,6,7,0,19,2,26,22,27,25,16],smaller:[15,7],soltion:28,scenes_to_dict:7,command_class_clock:15,download:[28,20],zwavenetwork:[11,19,7],append:[15,16],compat:14,signal_network_awak:7,access:[15,27,16],testnetworknod:15,command_class_tim:15,state_str:7,isnodeawak:[14,15],becom:[15,22],can_wake_up:27,accessor:26,zwcallback:[22,7],larger:[15,7],genr:[14,15,27,7,26],implement:[14,15,18,19,22,27,10,11],command_class_scene_actuator_conf:15,s_oofcnt:22,getvaluelistselectionnum:15,appli:9,app:[8,18],disable_pol:26,foundat:[14,15,6,7,0,19,2,26,22,27,25,16],apt:20,isnodefail:[14,15],wit:18,cache_properti:19,command_class_node_nam:15,from:[23,9],usb:15,commun:[15,7],next:[15,22,8],implic:7,few:7,usr:[10,9],stage:15,command_class_mark:15,insensit:15,account:9,retriev:[14,15,6,7,20,26,22,27],s_drop:22,ccdata:15,getvalueunit:15,fetch:[14,15],control:[18,21,9],tar:28,process:18,lock:[14,11,15],celsiu:15,tab:3,serial:[15,7,16],command_class_thermostat_fan_st:15,signal_driver_reset:7,arelock:15,instead:[14,15,22,9],removewatch:15,physic:[15,22,7],alloc:15,essenti:15,seriou:25,getoptionasint:15,element:15,issu:[10,15,25,7,18],allow:[14,15,22,18],is_listening_devic:14,usermod:9,move:[15,22],meter:27,comma:15,addcontrol:[15,22],nodeprotocolinfo:[25,7],"0x84":27,getnodespecif:15,chosen:[15,22],command_class_bas:15,networkreadi:7,therefor:15,command_class_zip_adv_serv:15,signal_value_remov:7,set_interfac:16,command_class_ip_configur:15,handl:[15,16,26],auto:20,set_log:[11,16],createbutton:[25,7],anyth:16,edit:[15,3],mode:[10,15,18,9],requestallconfigparam:15,command_class_schedule_entry_lock:15,receivedt:15,getnodequerystag:[14,15],tenth:15,special:[15,9],variabl:[15,7,2,26,9,27],addwatch:15,categori:7,rel:7,hardwar:15,get_switch_all_st:27,getvaluetyp:15,basiccommand:27,controllercommand_assignreturnrout:[15,22],dictionari:25,releas:[10,11,20,8],afterward:[15,22],controllercommand_replicationsend:15,could:[11,19,15],s_ackwait:22,put:9,keep:[20,7,9],length:[15,7],command_class_controller_repl:15,transfer:[15,25,22],retain:15,leave_room_control:8,refreshvalu:15,requestnodedynam:15,qualiti:[15,9],scene:[5,15,7,18,19,20,21,3,11,12],get_stats_label:22,date:[19,7,9],facil:18,is_readi:7,library_type_nam:22,system:[27,15,25,26],messag:[14,15,6,7,26,22,25,16],home_id:[11,19,7,26],attach:[15,7],staticgetcommandclassid:[14,15],termin:18,"final":[15,18],getvaluelistitem:15,prone:15,command_class_firmware_update_md:15,shell:[3,23],travi:9,pressbutton:15,rst:9,lion:15,structur:[15,25],charact:15,yourzwavestick:[3,23],fail:[14,15,6,7,2,22,28,11,25],have:[14,15,6,7,0,19,20,2,26,9,28,22,27,10,11,25,16],need:[18,23,9],command_class_non_interoper:15,zwavenodebas:27,min:[27,26],rout:[14,15,22,7],isvalueset:15,which:[15,25,7],detector:7,singl:[14,15,2,26],pyx:[5,9],whe:19,unless:7,getnodeid:7,getvalueinst:15,set_change_verifi:26,set_switch_al:27,pyc:9,"class":[14,15,6,7,19,2,26,8,22,27,25,16],adaptat:22,request:[14,15,7,9],determin:[15,26],openzwav:[0,18],addoptionint:15,fact:7,spuriou:[15,26],command_class_multi_instance_associ:15,text:15,requestconfigparam:15,staff:9,locat:[14,11,3,15,16],ispol:15,removeassoci:[14,15],should:[14,15,6,7,0,19,2,26,9,22,27,25,16],manufactur:[14,15,7],suppos:27,nodenew:[25,7],local:[10,20,7,9],signal_network_fail:[11,7],hope:[14,15,6,7,0,19,2,26,22,27,25,16],pypa:[10,18],gettyp:[15,7],switches_al:27,command_class_lock:15,awak:[14,15,7],enabl:[15,27,7,26,16],setupttol:18,contain:[15,7,26,22,27,28],nodes_to_dict:7,removedevic:[15,25,22],view:3,controllercommand_removefailednod:[15,22],seten:15,testnetwork:15,adddevic:[15,25,22],knowledg:15,isstaticupdatecontrol:15,displai:[15,3,22,7,16],gmail:0,statu:[15,25,16,26],error:[15,11,25,7,16],state:[15,7,26,22,27,11],is_routing_devic:14,controllercommand_hasnodefail:[15,22],progress:[15,25,22],email:10,addopt:15,kei:[3,25],getcommandclassid:7,getvalueasstring_:15,job:7,entir:16,webapp:[10,8],addit:7,sniff:23,rtype:[14,15],refresh_info:14,equal:16,"_getcontrollerpath":15,etc:[15,25,7,26],instanc:[15,18,7,26,9],controllercommand_transferprimaryrol:[15,22],signal_msg_complet:7,command_class_basic_window_cov:15,chmod:9,respect:[10,18],signal_value_chang:7,command_class_actuator_multilevel:15,quit:7,tread:8,deletebutton:[25,7],set_interval_between_pol:16,cancnt:15,immedi:[14,15,26],stdouttologg:15,neighbour:[15,22],togeth:7,getnodebas:15,present:7,statist:[15,22],multi:15,defit:25,"72057594093273600l":27,defin:[11,27,15,18],getgenr:7,homei:15,observ:[15,26],helper:[14,15],almost:20,demo:[23,18],manufacturernam:15,begin_command_add_devic:22,archiv:18,product_nam:14,begin_command_delete_all_return_rout:22,set_field:14,member:[15,6],python:[0,18],is_switch:27,getpollintens:15,requestnetworkupd:25,getnodeproductnam:15,http:[14,15,6,7,0,18,19,20,8,26,9,28,22,27,10,2,25,16],listenerthread:8,upon:[16,26],effect:16,initi:[14,15,25,7],getnumswitchpoint:15,sete:16,off:[15,7,20,26,9,27],is_beaming_devic:14,well:[15,16],exampl:[14,15,7,18,19,21,3,27,23,24,10,11,25],command:[18,20,21,9,28,10],usual:[14,15,22],value_data:2,library_vers:22,less:15,"boolean":15,obtain:[14,15],getnodenam:15,command_class_sensor_alarm:15,driverdata:15,web:[23,8,18],makefil:[18,20,9],parent_id:26,add:[14,15,6,7,18,19,2,9,22,3,27],noack:15,logger:18,know:[14,15,19,27],burden:15,press:[15,22],password:9,python2:[10,9],like:[15,7,20,9,3,28,25],success:[15,6],is_frequent_listening_devic:14,necessari:[22,27],classvers:15,soft:[15,3,22],retransmit:[15,22],captur:15,setter:27,begin_command_delete_button:22,"export":27,flush:11,proper:7,home:15,sofcnt:15,librari:[14,15,6,7,18,1,20,26,9,22,23,10,25],is_static_update_control:22,outgo:[15,22],leav:8,setpollinterv:[15,7],"enum":[15,1,21],usag:[15,26,18],requestnodeneighbor:15,getnodeneighbor:15,leave_room_network:8,panel:[3,9],c_str:7,actual:[15,6,7,26,9,22],socket:[10,23,18],state_awak:7,s_controllerwritecnt:22,constructor:18,actuat:27,disabl:[15,7,26,22,25,16],own:9,remove_scen:7,automat:[14,15,7,9,27,16],warranti:[14,15,6,7,0,19,2,26,22,27,25,16],been:[14,15,7,26,9,22,11],merg:9,getvalueindex:15,getoptionasbool:15,much:[15,7],command_class_manufacturer_specif:15,"function":[11,27,15],receipt:7,nodeok:25,unexpect:[15,25],yeah:20,home_id_str:7,uninstal:[10,28,20],bug:[10,15,18],count:[14,15,22,7],succe:[15,6],made:[10,14,15],whether:[14,15,22,7,26],controller_id:22,record:[14,7],below:7,limit:16,otherwis:[14,15,7,2,26,9],problem:[10,7,18],quickli:[25,7],baud:[14,15,7],sceneexist:15,evalu:23,"int":[14,15,6,16,19,2,26,22,27,25,7],dure:[15,11,7],command_class_switch_al:[15,27],begin_command_request_network_upd:22,pip:[10,9],getvalueasbyt:15,detail:[14,15,6,7,0,19,2,26,22,27,25,16],virtual:[15,9],other:[15,7,19,26,9,22,28,25],bool:[14,15,16,19,2,26,22,27,25,7],futur:[15,6,7,8],branch:[18,9],varieti:7,getopt:15,isnodebeamingdevic:15,functionn:[11,7],stat:22,debian:[28,20,9],sphinx:9,reliabl:15,rule:27,command_class_zip_servic:15},objtypes:{"0":"py:module","1":"py:attribute","2":"py:method","3":"py:class","4":"py:data","5":"py:function","6":"py:exception"},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","class","Python class"],"4":["py","data","Python data"],"5":["py","function","Python function"],"6":["py","exception","Python exception"]},filenames:["COPYRIGHT","_index_lib","scene","pyozwman","INSTALL_WIN","index","group","network","pyozwweb","DEVEL","README","hello_world","openzwave","diagrams","node","libopenzwave","option","INSTALL_MAC","CHANGELOG","object","INSTALL_REPO","_index_api","controller","EXAMPLES","_index_txt","data","value","command","INSTALL_ARCH"],titles:["License","<no title>","Scene documentation","PyOzwMan documentation","Installing python-openzwave on Windows","Welcome to python-openzwave’s documentation!","Group documentation","Network documentation","PyOzwWeb documentation","Developpers information","python-openzwave","python-openzwave hello_world","API documentation","Notification’s diagrams","Node documentation","libopenzwave module","Option documentation","Installing python-openzwave on MacOs","Changelog","Object documentation","Installing python-openzwave from repository","<no title>","Controller documentation","python-openzwave","<no title>","Data documentation","Value documentation","Command documentation","Installing python-openzwave from archive"],objects:{"":{libopenzwave:[15,0,0,"-"]},"openzwave.controller":{ZWaveController:[22,3,1,""]},"openzwave.network.ZWaveNetwork":{nodes_count:[7,1,1,""],scenes_to_dict:[7,2,1,""],manager:[7,1,1,""],id_separator:[7,1,1,""],scene_exists:[7,2,1,""],get_value:[7,2,1,""],home_id:[7,1,1,""],start:[7,2,1,""],state:[7,1,1,""],is_ready:[7,1,1,""],write_config:[7,2,1,""],scenes_count:[7,1,1,""],test:[7,2,1,""],nodes:[7,1,1,""],get_scenes:[7,2,1,""],get_poll_interval:[7,2,1,""],get_value_from_id_on_network:[7,2,1,""],heal:[7,2,1,""],stop:[7,2,1,""],remove_scene:[7,2,1,""],home_id_str:[7,1,1,""],controller:[7,1,1,""],sleeping_nodes_count:[7,1,1,""],create_scene:[7,2,1,""],switch_all:[7,2,1,""],zwcallback:[7,2,1,""],state_str:[7,1,1,""],set_poll_interval:[7,2,1,""],to_dict:[7,2,1,""],nodes_to_dict:[7,2,1,""]},"openzwave.group.ZWaveGroup":{associations:[6,1,1,""],index:[6,1,1,""],max_associations:[6,1,1,""],add_association:[6,2,1,""],label:[6,1,1,""],remove_association:[6,2,1,""]},"openzwave.command.ZWaveNodeSwitch":{get_switch_state:[27,2,1,""],get_dimmer_level:[27,2,1,""],get_switch_all_state:[27,2,1,""],get_switches:[27,2,1,""],get_switch_all_items:[27,2,1,""],get_switches_all:[27,2,1,""],get_switch_all_item:[27,2,1,""],get_dimmers:[27,2,1,""],set_switch:[27,2,1,""],set_dimmer:[27,2,1,""],set_switch_all:[27,2,1,""]},"libopenzwave.PyOptions":{getOptionAsString:[15,2,1,""],getConfigPath:[15,2,1,""],addOption:[15,2,1,""],getOptionAsBool:[15,2,1,""],lock:[15,2,1,""],create:[15,2,1,""],getOptionAsInt:[15,2,1,""],areLocked:[15,2,1,""],addOptionInt:[15,2,1,""],destroy:[15,2,1,""],addOptionBool:[15,2,1,""],addOptionString:[15,2,1,""],getOption:[15,2,1,""]},"libopenzwave.EnumWithDocType":{setDocType:[15,2,1,""]},libopenzwave:{driverData:[15,5,1,""],PyLogLevels:[25,4,1,""],EnumWithDocType:[15,3,1,""],PyGenres:[25,4,1,""],PyManager:[15,3,1,""],EnumWithDoc:[15,3,1,""],RetAlloc:[15,3,1,""],configPath:[15,5,1,""],PyValueTypes:[25,4,1,""],PyNotifications:[25,4,1,""],LibZWaveException:[15,6,1,""],StdOutToLogger:[15,3,1,""],PyControllerState:[25,4,1,""],PyOptions:[15,3,1,""],PyControllerCommand:[25,4,1,""]},"openzwave.object.ZWaveObject":{use_cache:[19,1,1,""],is_outdated:[19,2,1,""],network:[19,1,1,""],update:[19,2,1,""],object_id:[19,1,1,""],last_update:[19,1,1,""],home_id:[19,1,1,""],kvals:[19,1,1,""],outdate:[19,2,1,""],cache_property:[19,2,1,""],outdated:[19,1,1,""]},"openzwave.command":{ZWaveNodeSwitch:[27,3,1,""],ZWaveNodeBasic:[27,3,1,""],ZWaveNodeSensor:[27,3,1,""]},"openzwave.scene":{ZWaveScene:[2,3,1,""]},"openzwave.scene.ZWaveScene":{activate:[2,2,1,""],add_value:[2,2,1,""],create:[2,2,1,""],label:[2,1,1,""],remove_value:[2,2,1,""],get_values_by_node:[2,2,1,""],to_dict:[2,2,1,""],scene_id:[2,1,1,""],set_value:[2,2,1,""],get_values:[2,2,1,""]},"openzwave.command.ZWaveNodeBasic":{can_wake_up:[27,2,1,""],get_power_level:[27,2,1,""],get_power_levels:[27,2,1,""],get_battery_level:[27,2,1,""],get_battery_levels:[27,2,1,""]},"libopenzwave.StdOutToLogger":{write:[15,2,1,""]},"openzwave.command.ZWaveNodeSensor":{get_sensor_value:[27,2,1,""],get_sensors:[27,2,1,""]},"openzwave.node":{ZWaveNode:[14,3,1,""]},"openzwave.group":{ZWaveGroup:[6,3,1,""]},"pyozwweb.app.listener.ListenerThread":{run:[8,2,1,""],leave_room_controller:[8,2,1,""],stop:[8,2,1,""],join_room_controller:[8,2,1,""],join_room_values:[8,2,1,""],join_room_node:[8,2,1,""],connect:[8,2,1,""],join_room_network:[8,2,1,""],leave_room_node:[8,2,1,""],leave_room_network:[8,2,1,""],leave_room_values:[8,2,1,""]},"libopenzwave.EnumWithDoc":{setDoc:[15,2,1,""]},"openzwave.object":{ZWaveCommandClassException:[19,6,1,""],ZWaveObject:[19,3,1,""],ZWaveCacheException:[19,6,1,""],ZWaveNodeInterface:[19,3,1,""],ZWaveTypeException:[19,6,1,""],ZWaveException:[19,6,1,""]},openzwave:{node:[14,0,0,"-"],group:[6,0,0,"-"],network:[7,0,0,"-"],object:[19,0,0,"-"],scene:[2,0,0,"-"],value:[26,0,0,"-"],controller:[22,0,0,"-"],command:[27,0,0,"-"],option:[16,0,0,"-"]},"pyozwweb.app":{listener:[8,0,0,"-"]},"openzwave.controller.ZWaveController":{begin_command_remove_failed_node:[22,2,1,""],is_bridge_controller:[22,1,1,""],begin_command_remove_device:[22,2,1,""],is_primary_controller:[22,1,1,""],library_user_path:[22,1,1,""],begin_command_has_node_failed:[22,2,1,""],begin_command_create_new_primary:[22,2,1,""],library_type_name:[22,1,1,""],library_config_path:[22,1,1,""],stats:[22,1,1,""],hard_reset:[22,2,1,""],begin_command_receive_configuration:[22,2,1,""],python_library_version:[22,1,1,""],capabilities:[22,1,1,""],begin_command_add_device:[22,2,1,""],begin_command_send_node_information:[22,2,1,""],begin_command_create_button:[22,2,1,""],library_version:[22,1,1,""],node:[22,1,1,""],begin_command_transfer_primary_role:[22,2,1,""],begin_command_delete_button:[22,2,1,""],begin_command_delete_all_return_routes:[22,2,1,""],begin_command_assign_return_route:[22,2,1,""],begin_command_request_network_update:[22,2,1,""],ozw_library_version:[22,1,1,""],cancel_command:[22,2,1,""],node_id:[22,1,1,""],is_static_update_controller:[22,1,1,""],device:[22,1,1,""],begin_command_request_node_neigbhor_update:[22,2,1,""],get_stats_label:[22,2,1,""],begin_command_replace_failed_node:[22,2,1,""],name:[22,1,1,""],zwcallback:[22,2,1,""],soft_reset:[22,2,1,""],library_description:[22,1,1,""],to_dict:[22,2,1,""],begin_command_replication_send:[22,2,1,""],send_queue_count:[22,1,1,""],options:[22,1,1,""]},"openzwave.option.ZWaveOption":{set_exclude:[16,2,1,""],set_associate:[16,2,1,""],set_interface:[16,2,1,""],config_path:[16,1,1,""],user_path:[16,1,1,""],set_console_output:[16,2,1,""],set_interval_between_polls:[16,2,1,""],set_dump_trigger_level:[16,2,1,""],set_include:[16,2,1,""],set_log_file:[16,2,1,""],set_poll_interval:[16,2,1,""],set_append_log_file:[16,2,1,""],set_queue_log_level:[16,2,1,""],set_save_log_level:[16,2,1,""],set_logging:[16,2,1,""],device:[16,1,1,""],set_notify_transactions:[16,2,1,""],set_driver_max_attempts:[16,2,1,""],set_save_configuration:[16,2,1,""],set_suppress_value_refresh:[16,2,1,""]},"libopenzwave.PyManager":{enablePoll:[15,2,1,""],getValueType:[15,2,1,""],isNodeAwake:[15,2,1,""],getValueAsInt:[15,2,1,""],getControllerPath:[15,2,1,""],getValueGenre:[15,2,1,""],removeDriver:[15,2,1,""],getSwitchPoint:[15,2,1,""],softResetController:[15,2,1,""],getNumScenes:[15,2,1,""],requestNodeState:[15,2,1,""],setPollInterval:[15,2,1,""],setNodeOff:[15,2,1,""],getNodeSecurity:[15,2,1,""],getValueUnits:[15,2,1,""],getValueMin:[15,2,1,""],disablePoll:[15,2,1,""],getNodeNeighbors:[15,2,1,""],setValueUnits:[15,2,1,""],setNodeLocation:[15,2,1,""],activateScene:[15,2,1,""],isPolled:[15,2,1,""],getValueAsShort:[15,2,1,""],isBridgeController:[15,2,1,""],getValueAsByte:[15,2,1,""],removeAllScenes:[15,2,1,""],isNodeRoutingDevice:[15,2,1,""],getChangeVerified:[15,2,1,""],addAssociation:[15,2,1,""],getGroupLabel:[15,2,1,""],refreshNodeInfo:[15,2,1,""],removeWatcher:[15,2,1,""],getNodeManufacturerId:[15,2,1,""],removeSceneValue:[15,2,1,""],isNodeFailed:[15,2,1,""],getNumGroups:[15,2,1,""],releaseButton:[15,2,1,""],getNodeSpecific:[15,2,1,""],requestAllConfigParams:[15,2,1,""],setValue:[15,2,1,""],clearSwitchPoints:[15,2,1,""],getValueListItems:[15,2,1,""],setNodeLevel:[15,2,1,""],getNodeProductType:[15,2,1,""],setNodeOn:[15,2,1,""],isStaticUpdateController:[15,2,1,""],isNodeBeamingDevice:[15,2,1,""],getValueMax:[15,2,1,""],getMaxAssociations:[15,2,1,""],resetController:[15,2,1,""],getNodeVersion:[15,2,1,""],isNodeInfoReceived:[15,2,1,""],setPollIntensity:[15,2,1,""],addSceneValue:[15,2,1,""],setNodeProductName:[15,2,1,""],requestConfigParam:[15,2,1,""],getPollIntensity:[15,2,1,""],healNetworkNode:[15,2,1,""],getNodeType:[15,2,1,""],getLibraryTypeName:[15,2,1,""],setSceneValue:[15,2,1,""],sceneExists:[15,2,1,""],getValueListSelectionNum:[15,2,1,""],cancelControllerCommand:[15,2,1,""],isNodeFrequentListeningDevice:[15,2,1,""],getSceneLabel:[15,2,1,""],getPythonLibraryVersion:[15,2,1,""],removeSwitchPoint:[15,2,1,""],getNodeStatistics:[15,2,1,""],COMMAND_CLASS_DESC:[15,1,1,""],getValueInstance:[15,2,1,""],isNodeListeningDevice:[15,2,1,""],getNodeGeneric:[15,2,1,""],getOzwLibraryVersionNumber:[15,2,1,""],getValueCommandClass:[15,2,1,""],getControllerInterfaceType:[15,2,1,""],getNodeManufacturerName:[15,2,1,""],create:[15,2,1,""],getPollInterval:[15,2,1,""],switchAllOn:[15,2,1,""],isValueSet:[15,2,1,""],getValueListSelectionStr:[15,2,1,""],setValueHelp:[15,2,1,""],isValuePolled:[15,2,1,""],beginControllerCommand:[15,2,1,""],getAssociations:[15,2,1,""],addDriver:[15,2,1,""],setNodeName:[15,2,1,""],removeAssociation:[15,2,1,""],getNodeClassInformation:[15,2,1,""],getNodeName:[15,2,1,""],getSUCNodeId:[15,2,1,""],getValueAsBool:[15,2,1,""],getValueFloatPrecision:[15,2,1,""],addWatcher:[15,2,1,""],getNumSwitchPoints:[15,2,1,""],switchAllOff:[15,2,1,""],getLibraryVersion:[15,2,1,""],writeConfig:[15,2,1,""],getValueIndex:[15,2,1,""],getValue:[15,2,1,""],getValueAsString:[15,2,1,""],getValueHelp:[15,2,1,""],setChangeVerified:[15,2,1,""],getNodeQueryStageCode:[15,2,1,""],isValueReadOnly:[15,2,1,""],getPythonLibraryVersionNumber:[15,2,1,""],requestNodeDynamic:[15,2,1,""],getSendQueueCount:[15,2,1,""],getValueAsFloat:[15,2,1,""],isPrimaryController:[15,2,1,""],getValueLabel:[15,2,1,""],logDriverStatistics:[15,2,1,""],removeScene:[15,2,1,""],setValueLabel:[15,2,1,""],getNodeQueryStage:[15,2,1,""],sceneGetValues:[15,2,1,""],setConfigParam:[15,2,1,""],getDriverStatistics:[15,2,1,""],getNodeBasic:[15,2,1,""],getNodeLocation:[15,2,1,""],setSceneLabel:[15,2,1,""],pressButton:[15,2,1,""],destroy:[15,2,1,""],getAllScenes:[15,2,1,""],isValueWriteOnly:[15,2,1,""],getNodeMaxBaudRate:[15,2,1,""],getOzwLibraryVersion:[15,2,1,""],getControllerNodeId:[15,2,1,""],isNodeSecurityDevice:[15,2,1,""],setNodeManufacturerName:[15,2,1,""],getNodeProductId:[15,2,1,""],testNetworkNode:[15,2,1,""],CALLBACK_DESC:[15,1,1,""],refreshValue:[15,2,1,""],testNetwork:[15,2,1,""],getNodeProductName:[15,2,1,""],createScene:[15,2,1,""],healNetwork:[15,2,1,""],setSwitchPoint:[15,2,1,""]},"openzwave.value":{ZWaveValue:[26,3,1,""]},"openzwave.value.ZWaveValue":{enable_poll:[26,2,1,""],help:[26,1,1,""],is_write_only:[26,1,1,""],id_on_network:[26,1,1,""],data_as_string:[26,1,1,""],index:[26,1,1,""],poll_intensity:[26,1,1,""],min:[26,1,1,""],label:[26,1,1,""],instance:[26,1,1,""],parent_id:[26,1,1,""],set_change_verified:[26,2,1,""],units:[26,1,1,""],type:[26,1,1,""],check_data:[26,2,1,""],value_id:[26,1,1,""],node:[26,1,1,""],max:[26,1,1,""],command_class:[26,1,1,""],precision:[26,1,1,""],is_read_only:[26,1,1,""],genre:[26,1,1,""],data:[26,1,1,""],disable_poll:[26,2,1,""],refresh:[26,2,1,""],data_items:[26,1,1,""],is_change_verified:[26,2,1,""],to_dict:[26,2,1,""],is_set:[26,1,1,""],is_polled:[26,1,1,""]},"openzwave.node.ZWaveNode":{neighbors:[14,1,1,""],get_values_by_command_classes:[14,2,1,""],isReady:[14,1,1,""],set_config_param:[14,2,1,""],change_value:[14,2,1,""],command_classes_as_string:[14,1,1,""],is_security_device:[14,1,1,""],command_classes:[14,1,1,""],is_beaming_device:[14,1,1,""],get_values_for_command_class:[14,2,1,""],num_groups:[14,1,1,""],isNodeAwake:[14,2,1,""],get_values:[14,2,1,""],manufacturer_name:[14,1,1,""],is_listening_device:[14,1,1,""],generic:[14,1,1,""],is_sleeping:[14,1,1,""],set_field:[14,2,1,""],capabilities:[14,1,1,""],isNodeFailed:[14,1,1,""],has_command_class:[14,2,1,""],version:[14,1,1,""],location:[14,1,1,""],basic:[14,1,1,""],test:[14,2,1,""],manufacturer_id:[14,1,1,""],getNodeQueryStage:[14,1,1,""],type:[14,1,1,""],product_name:[14,1,1,""],request_config_param:[14,2,1,""],add_value:[14,2,1,""],heal:[14,2,1,""],node_id:[14,1,1,""],groups:[14,1,1,""],request_all_config_params:[14,2,1,""],is_routing_device:[14,1,1,""],product_id:[14,1,1,""],is_frequent_listening_device:[14,1,1,""],isNodeInfoReceived:[14,1,1,""],product_type:[14,1,1,""],name:[14,1,1,""],is_locked:[14,1,1,""],refresh_value:[14,2,1,""],refresh_info:[14,2,1,""],get_command_class_as_string:[14,2,1,""],specific:[14,1,1,""],remove_value:[14,2,1,""],max_baud_rate:[14,1,1,""],to_dict:[14,2,1,""],security:[14,1,1,""],get_command_class_genres:[14,2,1,""]},"openzwave.network":{ZWaveNetwork:[7,3,1,""]},"pyozwweb.app.listener":{ListenerThread:[8,3,1,""]},"openzwave.option":{ZWaveOption:[16,3,1,""]}},titleterms:{control:22,repositroi:20,api_demo:23,code:11,from:[10,28,11,20],process:[28,20,13],modul:15,sudo:9,startup:13,scene:2,indic:5,pyozwman:[3,23],"static":9,tabl:5,need:[28,20],instal:[28,20,4,17],dynam:9,out:10,virtualenv:9,alpha3:10,some:11,group:6,welcom:5,lib:9,how:9,licens:0,support:10,archiv:28,pyozwweb:[8,23],launch:8,start:11,window:4,build:[28,20],memory_us:23,zwave:11,hello_world:11,document:[14,5,6,7,25,19,2,26,8,22,3,27,9,12,16],updat:20,node:14,test_lib:23,sourc:[20,8],run:20,option:16,get:[28,20],python:[5,17,20,9,28,4,10,11,23],share:9,tool:[28,20],notif:13,migrat:10,what:8,diagram:13,api_snif:23,test:[20,9],theori:11,repositori:20,maco:17,develop:9,data:25,valu:26,network:7,about:[20,9],full:13,developp:9,signal:11,changelog:18,object:19,inform:9,libopenzwav:[15,9],api:12,command:27,openzwav:[5,17,20,9,28,4,10,11,23],listen:11,python3:9,hello:11,depend:20}}) \ No newline at end of file +Search.setIndex({envversion:42,terms:{zwavecontrol:[11,22,7],four:15,prefix:15,sleep:[14,11,25,7,15],ret:27,is_change_verifi:26,whose:15,sorri:10,"0x26":27,"0x27":27,"0x25":27,write_config:7,under:[14,15,6,7,0,19,2,26,9,22,27,25,16],command_class_climate_control_schedul:15,merchant:[14,15,6,7,0,19,2,26,22,27,25,16],digit:15,avril:9,everi:[15,7,18,26,3,27,16],controllercommand_requestnodeneighborupd:[14,15,22,7],nodefail:25,"_socketio":8,upload:15,ozw_library_vers:22,highpow:15,second:[15,22,7,26,16],command_class_alarm:15,even:[14,15,6,7,0,19,2,26,22,27,25,16],command_class_door_lock:15,"new":[5,15,16,18,2,22,27,10,25,7],ever:[15,26],told:[15,22],widget:3,never:[15,16],drwxrwsr:9,here:[28,11,15,16,9],getvaluefromtyp:7,path:[15,22,16,9],controllercommand_removedevic:[15,22],zwavescen:[11,2],library_descript:22,cdef:15,forum:10,anymor:[10,20,7,18],precis:[15,26],studi:27,basic_set:7,portabl:15,volunt:[4,17],pollingen:[25,7],unix:[14,15,6,16,19,2,26,22,27,25,7],controllercommand_deletebutton:[15,22],get_power_level:27,total:9,command_class_scene_controller_conf:15,unit:[15,27,7,26],describ:[14,15,7,26],would:[14,15,27],call:[14,15,7,20,9,27,11],recommend:[15,7],type:[14,15,19,6,7,1,2,21,22,3,27,26,16],tell:[15,22],notif:[25,23],notic:[15,22],warn:25,hold:[15,6,7],manufacturer_id:14,must:[15,7,19,20,9,28,22,27,10,11],join:8,room:8,setup:18,work:[25,22,20,9],configpath:15,kwarg:25,root:9,signal_node_nam:7,getvaluecommandclass:15,give:15,controllercommand:[14,15,7],want:[27,20,9],unsign:15,recov:25,turn:[15,27,7],classifi:[15,26],verifi:[15,26],config:[15,16,18,8,26,9,22,3,11,25],updat:[18,9],actdiag:9,after:[15,7,18,20,9,11],pyvaluetyp:[14,27,25,7],controllercommand_requestnodeneighbor:22,befor:[15,16,9,27,10,11],averag:15,fedora:20,"0x014d0ef5":26,zwavevalu:[11,2,26,7],attempt:[15,7,16],command_class_multi_cmd:15,exclud:16,getcontrollerinterfacetyp:15,sinopsi:[14,15,6,16,19,2,26,22,27,25,7],lambda:[19,26],get_sensor_valu:27,origin:15,feedback:[15,25],softwar:[14,15,6,7,0,19,2,26,22,27,25,16],over:[14,15],becaus:[10,15,7],manufactu:15,callback_desc:15,broadcastreadcnt:15,vari:7,streamlin:25,getinst:7,fit:[14,15,6,7,0,19,2,26,22,27,25,16],fix:[14,15,18],better:15,change_valu:14,getdriverstatist:15,"_app":8,them:[15,7,18,9,22,3,27,28,11],woken:15,thei:[15,7,20,9,22,27,11],getozwlibraryvers:15,safe:7,use_cach:19,"break":11,command_class_simple_av_control:15,"0x31":27,"0x30":27,"0x32":27,isnoderoutingdevic:15,setvalu:15,set_driver_max_attempt:16,signal_driver_remov:7,remove_associ:6,s_cancnt:22,set_notify_transact:16,state_reset:7,getvalu:15,timeout:[15,22],each:[15,25,7],debug:[15,18,9,10,11,25],mean:[11,15,9],state_start:7,activatescen:15,is_outd:19,group:[10,25,21,9],get_values_by_nod:2,set_log_fil:[11,16],gassoci:3,extract:28,louie_value_upd:11,network:[5,15,6,18,21,22,23,10,11,25],goe:15,content:[10,5,12],rewrit:18,s_writecnt:22,signal_network_reset:[22,7],get_battery_level:27,free:[14,15,6,7,0,19,2,26,22,27,25,16],nodedata:15,ptyhon:18,zwavenodesensor:27,virtual_env:9,resetcontrol:15,commandclass:[14,15,19,7,16],ist:18,filter:[14,15,27,26],requestnodest:15,regress:20,louie:[11,3,22,7,23],controllercommand_createnewprimari:[15,22],rang:[11,15],alreadi:[28,20,18],wrapper:[10,27],signal_value_refresh:7,primari:[15,22],allnodesqueri:[15,25,7],sourc:[28,18,9],command_class_av_content_search_md:15,enumwithdoc:15,command_class_chimney_fan:15,sometim:20,scene1:26,getvalueasfloat_:15,master:[20,9],too:[15,22,9],zwave:[10,22,23,9],data_item:26,getnodemanufacturernam:15,noderemov:[25,7],consol:16,cancel_command:22,setuptool:[10,18],somewhat:7,nakcnt:15,driverawak:7,command_class_av_renderer_statu:15,signal_node_queries_complet:7,target:20,keyword:25,provid:[5,15,25,27],set_includ:16,tree:[10,18],zero:15,project:[14,15,6,7,0,19,2,26,22,27,25,16],averageresponsertt:15,minut:[11,15],ram:16,mind:20,raw:25,seem:18,python_exec:9,especi:[14,15],transmit:26,get_switch_st:27,getvalueasint:15,simplifi:15,sceneev:[25,7],usernam:9,object:[5,15,6,7,21,10,11,25],nodeid:[15,11,7,26],regular:[15,7],begin_command_assign_return_rout:22,command_class_zip_adv_cli:15,don:[15,19,26,9,27,10],signal_network_stop:7,doc:[25,18,20,9],doe:[15,7,18,26,22,10],bracket:7,networkfail:7,came:28,pfncontrollercallback_t:15,keyval:19,signal_button_off:7,get_scen:7,set_queue_log_level:16,identifi:[15,6,7,26,23,16],damen:0,zwavenodeinterfac:19,switch_al:[27,7],"_highpow":[15,22],"_groupidx":[14,15],configur:[14,15,7,26,9,22,27,16],busi:15,folder:15,command_class_meter_tbl_push:15,driverreadi:[15,25,7],softresetcontrol:15,stop:[15,7,18,8,22,11],setswitchpoint:15,report:[14,15,7,1,21,9,26,11,16],"public":[14,15,6,7,0,19,2,26,22,27,25,16],reload:18,bad:[15,22],releasebutton:15,respond:[15,22],getnodesecur:15,begin_command_transfer_primary_rol:22,id_on_network:[7,26],num:15,result:[14,15,1,7,21],respons:[14,15,7],command_class_mtp_window_cov:15,best:28,awar:25,ackcnt:15,valuetype_button:15,yet:[14,15,22],simplest:28,data_as_str:26,approach:15,attribut:[15,7],removescen:15,extens:3,setnodeon:15,groupidx:15,protect:15,easi:10,howev:15,enable_pol:26,getnodeproducttyp:15,logic:7,seri:15,com:[14,15,6,7,0,19,20,2,26,9,22,27,10,25,16],applianc:27,kwh:27,replacefailednod:[15,25,22],begin_command_has_node_fail:22,assum:[15,6],duplic:15,recur:15,set_config_param:14,getnodeproductid:15,setscenelabel:15,trigger:[14,15,7],interest:15,basic:[14,27,15,25,26],command_class_user_cod:15,nodenam:[15,25,7],driverreset:[25,7],retalloc:15,ani:[14,15,6,7,0,19,2,26,22,27,25,16],"catch":11,signal_driver_readi:7,gnu:[14,15,6,7,0,19,2,26,22,27,25,16],properti:[14,19,27],getallscen:15,command_class_displai:15,aid:15,join_room_valu:8,rediscov:[14,15,7],optionnali:14,conf:8,controllerstate_complet:[15,22],perform:[14,15,7],make:[15,20,9,28,22,10],driverfail:[25,7],complex:15,signal_scene_ev:7,complet:[14,15,6,7,22,25,16],rais:16,tune:8,max_associ:6,sentfail:15,deleteallreturnrout:25,thr:22,changer:19,client:[11,22,15],thi:[14,15,6,7,0,18,19,20,8,26,2,22,3,27,28,11,9,25,16],get_switch_all_item:27,everyth:[25,7],unchang:16,ttyusb0:[15,8,18],just:[14,15,7],receivedcnt:15,command_class_silence_alarm:15,human:[14,15],bit:15,previous:[15,20],nondeliveri:15,replicationsend:25,expos:15,had:[14,15],command_class_protect:15,els:11,save:[15,16],applic:[14,15,7,26,23,25],mayb:19,commmand:15,command_class:[14,27,26],background:15,valueid:[14,15,27,7],promari:15,isnodesecuritydevic:15,measur:[15,26],specif:[14,15,19],deprec:[14,7],manual:[14,11,15,24],louie_network_fail:11,enablepol:15,unstabl:20,www:[14,15,6,7,0,19,2,26,22,27,25,16],right:[28,8,9],old:[10,15,20,22,18],interv:[15,22,7,16],intern:25,sure:[28,19,9],heritag:27,successfulli:[15,22,7],txt:9,querystag:[14,15],command_class_remote_associ:15,getlibraryvers:15,plug:27,s_nakcnt:22,clearswitchpoint:15,soft_reset:22,set_save_configur:16,allnodesqueriedsomedead:25,command_class_thermostat_operating_st:15,joomla:9,sendnodeinform:25,commit:[20,9],thermostat:19,zwaveobject:[19,27],command_class_switch_toggle_multilevel:15,"float":[15,22,26],signal_button_on:7,down:3,create_scen:7,wan:14,accordingli:7,git:[10,28,20,9],wai:[14,15,19,9,27,28,11],support:9,networkstart:7,avail:[15,11,3,7],wordpress:15,setscenevalu:15,s_sofcnt:22,forc:[14,15],drwxr:9,taken:15,zwaveopt:[11,22,16],"true":[14,15,16,19,2,26,22,27,11,7],reset:[27,15,3,22,7],setdoc:15,maximum:[14,15,7,26],until:[15,7],pyozwman:18,classid:14,featur:[10,15],isnodeinforeceiv:[14,15],classic:27,getnodequerystagecod:15,zwavetypeexcept:19,exist:[15,7,19,22,25,16],check:[14,15,7,19,26,9,22,27],readonli:[14,27,7],api_sniff:23,state_stop:7,tip:9,signal_network_readi:[11,7],bibi21000:[14,15,6,7,0,19,20,2,26,9,22,27,28,25,16],role:[15,22],test:18,presum:14,"72057594109853720l":27,node:[5,15,6,7,18,20,21,22,27,23,11],relat:7,intend:7,command_class_network_stat:15,command_class_composit:15,intens:[15,26],consid:[27,7],occasion:[15,26],outdat:19,bitbucket:[10,18],receiv:[14,15,6,7,0,19,2,26,22,27,11,25,16],sendig:22,longer:15,command_class_screen_attribut:15,inforamt:[14,6,7,2,26,22],ignor:[27,16],time:[15,7,18,19,26,9,22,11,16],push:9,sniffer:11,backward:14,particular:[14,15,6,7,0,19,2,26,22,27,25,16],serialport:15,although:[15,7,26],signific:7,millisecond:[15,7,16],flask:[10,23,18],decim:[27,25],readabl:[14,15],pyozwweb:18,command_class_scene_activ:15,scenes_count:7,command_class_thermostat_fan_mod:15,valuerefresh:[25,7],begin_command_receive_configur:22,string:[14,15,7,26,9,27,25],set_console_output:[11,16],signal_driver_:7,zwcfg:7,word:11,brows:14,get_dimm:27,dim:[27,20],uwird:3,level:[5,15,16,18,19,26,22,27,25],signal_create_button:7,iter:25,item:[27,15,25],getsucnodeid:15,round:15,dir:20,max_baud_r:14,loglvel:16,getnumscen:15,isnodelisteningdevic:15,set_dump_trigger_level:16,sign:15,zwcfg_:15,port:[15,7,16,8],appear:[10,15,26],current:[15,27,26],getnodemaxbaudr:15,switchalloff:15,is_read_onli:26,gener:[14,15,6,7,0,19,2,26,9,22,27,11,25,16],learn:[15,22],getsendqueuecount:15,valueremov:[25,7],modif:11,along:[14,15,6,7,0,19,2,26,22,27,25,16],zwavecacheexcept:19,wait:[14,15,16,22,11,25],checksum:[15,22],command_class_sensor_binari:[15,27],queue:[15,22],environn:9,extra:[14,6,7,2,26,22],activ:[15,11,27,2,16],modul:[10,27],essentialnodequeriescomplet:[25,7],zwavegroup:6,instal:[18,23,9],command_class_batteri:[15,27],command_class_thermostat_setback:15,memori:[15,23],visit:3,live:7,handler:[15,22,7],utpdat:9,command_class_energy_product:15,command_class_associ:15,claus:11,pylint:[1,21,9],enhanc:15,signal_node_readi:7,signal_node_ad:7,lastrequestrtt:15,setvaluehelp:15,"72057594118242369l":27,maarten:0,uniqu:[15,26],can:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,10,11,9,25,16],memoryleaks3:15,purpos:[14,15,6,7,0,19,2,26,22,27,25,16],controllercommand_adddevic:[15,22],switchallon:15,nodereadi:7,abort:[15,22],add_associ:6,alwai:[14,15,25,7],multipl:[15,27,26],getoptionasstr:15,group_index:6,write:[11,27,15,26,9],setnodenam:15,"0x80":27,map:[5,15,18,27,10,25],product:[14,15,7],command_class_application_statu:15,max:[27,16,26],clone:[20,9],id_separ:7,upnoderout:[14,15,7],"_getozwlibraryversionnumb":15,mai:[15,7,26,9],data:[22,1,27,21],setnodemanufacturernam:15,beam:[14,15],getvaluemax:15,getvalueasstr:15,secur:[14,15,22,7],favorit:8,requestnodeneighborupd:25,"switch":[15,7,18,19,20,3,27,23,11],still:15,pointer:15,interspers:[15,7],disconnect:22,sof:[15,22],platform:[14,15,6,16,19,2,26,22,27,25,7],main:[11,15],non:20,receiveconfigur:25,broadcastwritecnt:15,nov:9,now:[15,7,18,19,20,9,28,22,10,11],discuss:10,getgrouplabel:15,term:[14,15,6,7,0,19,2,26,22,27,25,16],louie_network_start:11,name:[14,15,7,20,22,3,27,10,11,25],drop:[15,22],revert:[15,6],getassoci:[14,15],separ:[15,7],getvalueasbool:15,compil:[10,28,20],replac:[15,22,7,18],individu:7,getscenelabel:15,continu:11,redistribut:[14,15,6,7,0,19,2,26,22,27,25,16],begin_command_request_node_neigbhor_upd:22,happen:27,is_security_devic:14,alpha2:18,alpha3:18,shown:25,alpha1:18,removescenevalu:15,alpha4:18,sensor:[11,3,27,7,23],correct:[15,26],getchangeverifi:15,get_value_from_id_on_network:7,leave_room_nod:8,loglevel_debug:16,org:[14,15,6,7,0,18,19,2,26,9,22,27,10,25,16],"byte":[14,15,7,26,22,27,25],care:27,signal_all_nodes_queri:7,frequenc:15,transferprimaryrol:25,motion:7,thing:[11,27],place:[15,9],frequent:[14,15],first:[14,11,27,7,15],oper:[14,15,22,7],hasnodefail:25,directli:[27,15,6,7,9],onc:[15,7],arrai:15,pynotif:25,command_class_configur:15,"long":7,open:[10,15,9],predefin:27,size:[14,15],getvalueasfloat:15,given:[15,7],convent:15,streamdetail:25,getcontrollerpath:15,has_command_class:14,frame:[15,22,16],to_node_id:22,hub:9,cope:[15,7],copi:[14,15,6,7,0,19,20,2,26,9,22,27,25,16],specifi:[15,22,7,16],broadcast:[15,7],github:[14,15,6,7,0,19,20,2,26,9,22,27,10,25,16],an158:27,"0x73":27,than:[15,7,26,16],sentt:15,param2:27,param1:27,were:[14,11,22,15],set_append_log_fil:[11,16],browser:8,sai:[15,19,27,7],controllercommand_sendnodeinform:15,argument:[11,25],deliv:[15,22],is_bridge_control:22,squar:7,"_network":22,destroi:15,object_id:[19,2],note:[10,26,24],take:[15,7],pycontrollerst:25,heal:[14,15,7,18],channel:11,receiveddup:15,normal:[14,15,25,22,18],buffer:25,pair:25,command_class_hail:15,getnodestatist:15,later:[14,15,6,7,0,19,2,26,22,27,11,25,16],order:7,event:[10,11,7,15,8],writeconfig:15,bright:27,line:[10,15,27,9],xml:[15,7,16],is_lock:14,onli:[14,15,7,26,9,22,27,25,16],explicitli:15,libzwaveexcept:15,transact:16,naviso:15,written:[15,26],dict:[14,15,6,7,18,2,26,22,27,25],isnodefrequentlisteningdevic:15,command_class_meter_tbl_monitor:15,offici:20,state_fail:7,variou:[14,15],get:9,getid:7,secondari:[15,22],repo:[20,24],networkstop:7,cannot:[15,26],command_class_time_paramet:15,refreshnodeinfo:15,requir:[15,22],getozwlibraryversionnumb:15,createopt:15,leave_room_valu:8,to_dict:[14,6,7,2,26,22],where:[11,27],command_class_meter_puls:15,com3:15,lastreceivedmessag:15,asleep:[14,15,6],concern:[15,7],getnodeloc:15,disablepol:15,label:[14,15,6,7,2,26,22,27],behind:15,between:[14,15,7,3,27,16],dockerfil:[18,9],"import":[11,7,9],paramet:[14,15,6,7,18,19,2,26,22,3,27,11,16],getindex:7,request_all_config_param:14,parent:26,screen:[11,3],nodeev:[25,7],removeswitchpoint:15,compatibilti:9,readabort:15,tutori:[11,9],hard_reset:22,mani:[10,15,27],scene_exist:7,cancelcontrollercommand:15,period:[15,7],signal_valu:11,signal_nod:11,do_poll_statist:22,poll:[15,7,18,26,22,16],command_class_screen_md:15,bintervalbetweenpol:[15,7],rebuild:[15,22],signal_value_ad:7,getswitchpoint:15,repons:15,pyoption:[15,18],zwavecommandclassexcept:19,wake:[27,7],addassoci:[14,15],getvaluegenr:15,those:15,"case":[15,6,7,18,26,9,27,11],is_set:26,stdout:[11,15],begin_command_create_new_primari:22,eras:[15,22],"__init__":18,join_room_network:8,author:0,same:[14,15,7,26,27,11],removeallscen:15,binari:9,html:9,eventu:[14,15],finish:[15,22,18],"72057594118242352l":27,driver:[15,6,7,22,11,16],lastresponsertt:15,capabl:[14,15,22,7],command_class_languag:15,extern:7,appropri:[15,7],without:[14,15,6,7,0,19,2,26,9,22,27,25,16],join_room_control:8,setnodeloc:15,execut:[7,16,9],when:[14,15,7,18,19,20,26,9,22,27,10,11,16],loglevel_detail:16,rest:27,bitmap:15,venv:9,getconfigpath:15,targetnodeid:15,struct:15,except:[5,15,19,12,21],littl:7,command_class_geographic_loc:15,blog:15,"255l":27,homepro:27,is_primary_control:22,controllerstate_fail:[15,22],read:[15,22,7,26],addscenevalu:15,pollinterv:[15,7,16],dimmer:[18,19,3,27,23,11],temperatur:[15,27],traffic:[15,7],dispatch:[11,22,7],louie_network_readi:11,integ:15,server:8,command_class_proprietari:15,set_save_log_level:[11,16],either:[14,15,6,7,0,19,2,26,9,22,27,25,16],python_library_vers:22,manag:[26,15,6,7,19,8,21,9,22,3,27,23,10,11,16],createscen:15,autobuild:9,cancel:[15,25,22],get_values_by_command_class:14,is_write_onli:26,command_class_powerlevel:[15,27],confirm:[14,15],valuetype_schedul:15,definit:[5,12],protocol:[15,7],exit:15,command_class_grouping_nam:15,refer:[15,7],command_class_meter_tbl_config:15,isvaluewriteonli:15,power:[15,27,22],command_class_met:[15,27],fulli:[15,7],src:[10,18,8,9],patent:[15,7],central:7,ack:[15,22],degre:15,neighbor:[14,15,22,7],get_switches_al:27,effici:15,addoptionstr:15,urwid:3,your:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,23,10,11,9,25,16],zwaveexcept:19,log:[15,7,18,8,9,24,11,25,16],hex:15,overwrit:[15,16],start:[27,22,25,23,18],interfac:[15,19,27],low:[5,15,19,26,22,25],lot:22,reaload:18,set_suppress_value_refresh:16,inprogress:25,command_class_wake_up:[15,27],openzav:9,command_class_ind:15,set_switch:27,power_level:27,conclus:27,pull:10,zwavenodeswitch:27,begin_command_remove_devic:22,possibl:[27,15,6,7,26],"default":[14,15,7,26,22,16],assignreturnrout:25,set_exclud:16,connect:[11,23,7,8],controllercommand_createbutton:[15,22],creat:[15,7,19,20,2,26,9,22,28,11,25],certain:7,watcher:[15,7],file:[14,15,6,7,0,18,19,2,26,9,22,27,28,25,16],fill:15,incorrect:26,again:[7,18],googl:10,allawakenodesqueri:15,poll_stat:22,field:[14,2],valid:[14,15,26],zwavemanag:7,writabl:14,you:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,23,10,11,9,25,16],createnewprimari:25,get_values_for_command_class:14,request_config_param:14,get_dimmer_level:27,pygenr:[14,25,7],registri:9,sequenc:7,getnodegener:15,getpythonlibraryvers:15,removecontrol:[15,22],badchecksum:15,directori:[15,20,8,9,28,22,10,11],descript:[15,22,7],potenti:[15,7],cpp:22,represent:[14,6,7,2,26,22],all:[14,15,6,7,2,26,9,22,3,27,23,28,11,25],dist:[10,9],pth:10,get_sensor:27,follow:[7,20,9,3,27,28],disk:16,ozw_log:11,kval:[18,2,19,7],uint8_t:15,init:15,program:[27,7,9],"72057594101481476l":27,controllercommand_deleteallreturnrout:[15,22],fals:[14,15,16,2,26,22,27,11,7],controllercommand_addcontrol:22,mechan:[11,19,27],failur:15,veri:[25,7],manufacturer_nam:14,list:[14,15,26,28,22,27,23,10,25],helloworld:21,lisa:9,awakenodesqueri:[25,7],set_associ:16,valuechang:[14,15,25,7],delimit:15,isvaluereadonli:[15,7],rate:[14,15,7],pass:[11,15,9],further:11,what:[15,19,27,22],suc:[15,22],clock:15,abl:[15,25],delet:[15,3,22,7],version:[14,15,6,7,0,19,2,26,9,22,27,10,25,16],"_append":15,begin_command_create_button:22,method:[14,15,7,19,8,26,22,3,27],full:[10,20,18],command_class_thermostat_setpoint:15,get_poll_interv:7,behaviour:[14,15],shouldn:7,modifi:[14,15,6,7,0,19,2,26,22,27,11,25,16],valu:[14,5,15,7,18,25,19,8,21,2,22,3,27,23,11,12,16],signal_network_start:[11,7],sender:11,prior:7,base:[15,22],state_readi:[11,7],nosetest:[18,9],action:[15,22,7],via:[14,15,7,9,10,25],setpollintens:15,vim:8,sucee:15,filenam:15,switchal:[15,7],getnodeclassinform:15,logdriverstatist:15,s_badchecksum:22,select:26,hexadecim:[14,15],regist:27,two:[15,25],coverag:[1,21,9],set_poll_interv:[7,16],minor:[10,25],more:[14,15,6,7,0,18,19,2,26,22,27,11,25,16],hundr:7,getvaluefloatprecis:15,flag:26,command_class_desc:[15,7],stick:9,command_class_zip_adv_servic:15,known:[14,15,27,7],set_valu:2,cach:19,none:[15,6,16,18,19,2,26,22,27,11,25,7],getcontrollernodeid:15,hour:15,socketio:8,dep:[28,20],dev:[15,18,8,22,3,23],values_to_dict:14,def:[11,18],install_repo:10,accept:[15,22],minimum:[15,26],num_group:14,huge:25,cours:[7,9],nico0084:15,divid:[15,7],rather:[15,26],anoth:[15,27,22,9],manufacturer_specif:15,adddriv:15,simpl:11,badrout:15,get_command_class_as_str:14,command_class_no_oper:15,develop:18,setconfigparam:15,associ:[14,15,6,7,21,27,16],"short":25,product_typ:14,caus:[14,15],callback:[14,15,6,7,22,11],scenegetvalu:15,egg:[20,9],s_ackcnt:22,help:[15,3,27,26,9],isbridgecontrol:15,setback:15,held:[14,15,6,26],through:[15,6,26],s_readabort:22,get_valu:[14,2,7],get_command_class_genr:14,unwork:18,handheld:[15,22],late:[15,22],segfault:10,isreadi:14,addoptionbool:15,might:[15,20,7],signal_node_ev:7,zwavenod:[14,11,27,22],remove_valu:[14,2],good:[7,20,8,26,3,27],"return":[14,15,6,16,19,2,26,22,27,7],timestamp:25,framework:23,sleeping_nodes_count:7,productnam:15,sentcnt:15,controllercommand_receiveconfigur:[15,22],refresh:[14,15,19,16,26],easili:16,found:[14,11,7,15,9],send_queue_count:22,pyloglevel:[25,18],hard:[15,3,22],nodes_count:[11,7],expect:15,slave:15,energi:[15,27],todo:[14,16],controllerstate_wait:[15,22],ozwsh:[11,3,18],"72057594109853736l":27,command_class_zip_serv:15,unknown:15,publish:[14,15,6,7,0,19,2,26,22,27,25,16],command_class_switch_toggle_binari:15,getnodevers:15,print:11,check_data:26,reason:[15,22],healnetwork:15,ask:[10,7,9],command_class_av_content_directory_md:15,product_id:14,thread:[15,22],launch:[10,18,20,9],script:[28,11,18],value_id:[14,27,2,26,7],assign:[15,22,7],logfil:16,singleton:[15,9],command_class_thermostat_mod:15,notifi:[11,15],"_param":[14,15],number:[14,15,6,7,22,16],placehold:7,install_arch:10,done:[15,17,20,3,27,4,11],"72057594093060096l":27,miss:[15,7],gpl:[14,15,6,7,0,19,2,26,22,27,25,16],differ:[15,22,18],s_retri:22,least:[7,9],getvaluelistselectionstr:15,setchangeverifi:15,store:[15,7,18,19,22,16],option:[14,5,15,6,7,0,18,25,19,21,28,22,27,10,11,12],controllercommand_replacefailednod:[15,22],command_class_garage_door:15,getter:27,reinstal:9,kind:27,whenev:[15,26],remot:8,remov:[15,6,7,18,20,2,28,22,3,10,11,16],jqueri:[10,23,8,18],bridg:[15,22],controllercommand_removecontrol:22,str:[14,15,16,2,26,22,27,7],set_command_class_0xyz:27,comput:[20,9],add_valu:[14,2],sensormultilevel:[15,26],"72057594093273218l":27,packag:[10,28,20,9],homeid:[15,11,7,26],"null":[15,7],from_node_id:22,writeonli:[14,27],built:28,lib:18,trip:15,self:[14,7,18,22,27,11],msgcomplet:7,also:[14,15,6,7,20,2,9,22,27,10,11,8],getpollinterv:15,s_readcnt:22,distribut:[14,15,6,7,0,19,20,2,26,22,27,28,25,16],index:[14,5,15,6,7,26],isprimarycontrol:15,previou:[15,20],reach:7,most:[15,7],plai:20,node_id:[14,6,7,2,26,22],isvaluepol:15,begin_command_remove_failed_nod:22,clear:[15,7],driverremov:[25,7],part:[14,15,6,7,0,19,2,26,22,27,25,16],clean:[28,15,20],begin_command_replication_send:22,m_pollinterv:[15,7],rtt:15,session:[15,16,9],fine:[25,8],find:[15,27,7],copyright:24,command_class_switch_multilevel:[15,27],solut:8,queu:25,pythonfunc:15,setnodeoff:15,valuead:[25,7],hid:[15,27,7,16],fastest:28,getlibrarytypenam:15,sill:9,him:11,join_room_nod:8,user_path:[11,16,18],is_pol:[27,26],is_sleep:14,common:[5,12,7,25,9],set:[14,15,6,7,19,2,26,22,3,27,11,16],dump:16,see:[14,15,6,7,0,19,2,26,22,27,10,11,25,16],arg:[15,11,22,7],scene_id:[2,7],close:[15,22,16],command_class_thermostat_h:15,someth:[15,25,9],won:20,target_node_id:6,command_class_association_command_configur:15,signal_essential_node_queries_complet:7,altern:7,handle_command_class:27,unsolicit:[15,22],setnodelevel:15,signal_driver_fail:7,library_config_path:22,classnam:15,popul:[15,11,7],both:[15,6],last:[15,7,19,20,9,27],"72057594109853697l":27,command_class_av_tagging_md:15,context:15,load:11,readcnt:15,simpli:[11,15,26],point:[27,15,22,7],instanti:15,schedul:[15,25],consumm:27,removedriv:15,header:20,param:[14,15],shutdown:15,linux:[28,15],batteri:27,setvaluelabel:15,command_class_sensor_configur:15,buttonon:[25,7],devic:[14,15,6,7,18,19,8,26,22,3,23,11,16],due:[15,22,6,7],empti:[15,25,7],sinc:[15,22],begin_command_replace_failed_nod:22,fire:[22,7],getnodemanufacturerid:15,destroyopt:15,actdiag_sphinxhelp:9,refresh_valu:14,signal_node_remov:7,look:[15,17,20,9,28,4,10,11],oofcnt:15,batch:7,getpythonlibraryversionnumb:15,"while":[27,15,22,7],abov:[7,16],removefailednod:25,xvzf:28,averagerequestrtt:15,readi:[14,15,7,20,22,28,11],readm:[24,9],jpg:15,itself:7,sceneid:15,receivedunsolicit:15,nodead:[25,7],signal_error:7,shorter:[15,7],begin_command_send_node_inform:22,command_class_kick:15,signal_node_protocol_info:7,controllercommand_requestnetworkupd:[15,22],command_class_door_lock_log:15,setdoctyp:15,get_switch:27,alert:25,user:[14,15,7,18,26,9,22,27,25],typic:7,command_class_sensor_multilevel:[15,27],equival:15,toadddriv:15,older:15,entri:27,getvaluehelp:15,docker:[18,9],controllerstate_inprogress:[15,22],getvalueasshort:15,pollingdis:[25,7],build:9,format:26,"_getcontrollerinterfacetyp":15,biz:28,"72057594093273090l":27,nodequeriescomplet:[25,7],signal:[22,23],signal_polling_dis:7,command_class_vers:15,writecnt:15,"boolean":15,enumwithdoctyp:15,signal_awake_nodes_queri:7,jsonifi:7,signal_delete_button:7,some:[10,18,20,9],back:[11,25],command_class_0x80:27,ackwait:15,netbusi:15,per:[15,7],prop:19,retri:15,commandclassid:[15,26],nose:[1,21],run:[18,9],raspberri:28,step:27,command_class_multi_channel_v2:15,idx:15,class_id:[14,27],"72057594101662232l":27,pymanag:[15,7],primarili:7,within:[14,15,16,2,25,7],poll_intens:26,betwork:7,getvaluelabel:15,command_class_zip_cli:15,chang:[14,15,2,7,18,8,26,9,22,3,24,28,11,16],inclus:[15,22],submit:[10,9],includ:[27,18,25,7,9],suit:10,frost:15,getnumgroup:[14,15],link:9,newer:15,buttonoff:[25,7],info:[15,25,9],concaten:15,consist:15,lifespan:15,gethomeid:7,s_controllerreadcnt:22,command_class_manufacturer_proprietari:15,repres:[14,15,16,19,2,26,27,7],"char":7,config_path:[11,16,18],nak:[15,22],invalid:25,command_class_remote_association_activ:15,routedbusi:15,setvalueunit:15,sphinxdoc:15,high_pow:22,getmaxassoci:15,getnodetyp:15,getvaluemin:15,louie_node_upd:11,command_class_switch_binari:[15,27],data_str:27,code:[10,22,18,9],command_class_secur:15,queri:[15,11,7],library_user_path:22,last_upd:19,cython:[10,28,18,9],friendli:[15,27],send:[14,15,7,22,27,11],cmd_line:[11,16,18],autostart:[11,7],sens:7,fatal:25,healnetworknod:15,sent:[14,15,6,7,22,3,25,16],pycontrollercommand:25,objet:7,wave:[14,15,6,7,2,22],command_classes_as_str:14,set_dimm:27,tri:15,button:[27,15,25,22],signal_node_new:7,setnodeproductnam:15,"try":[23,16,9],signal_polling_en:7,begincontrollercommand:15,pleas:[10,18,9],impli:[14,15,6,7,0,19,2,26,22,27,25,16],smaller:[15,7],soltion:28,scenes_to_dict:7,command_class_clock:15,download:[28,20],zwavenetwork:[11,19,7],append:[15,16],compat:14,signal_network_awak:7,access:[15,27,16],testnetworknod:15,command_class_tim:15,state_str:7,isnodeawak:[14,15],becom:[15,22],can_wake_up:27,accessor:26,zwcallback:[22,7],larger:[15,7],genr:[14,15,27,7,26],implement:[14,15,18,19,22,27,10,11],command_class_scene_actuator_conf:15,s_oofcnt:22,getvaluelistselectionnum:15,appli:9,app:[8,18],disable_pol:26,foundat:[14,15,6,7,0,19,2,26,22,27,25,16],apt:20,isnodefail:[14,15],wit:18,cache_properti:19,command_class_node_nam:15,from:[23,9],usb:15,commun:[15,7],next:[15,22,8],implic:7,few:7,usr:[10,9],stage:15,command_class_mark:15,insensit:15,account:9,retriev:[14,15,6,7,20,26,22,27],s_drop:22,ccdata:15,getvalueunit:15,fetch:[14,15],control:[18,21,9],tar:28,process:18,lock:[14,11,15],celsiu:15,tab:3,serial:[15,7,16],command_class_thermostat_fan_st:15,signal_driver_reset:7,arelock:15,instead:[14,15,22,9],removewatch:15,physic:[15,22,7],alloc:15,essenti:15,seriou:25,getoptionasint:15,element:15,issu:[10,15,25,7,18],allow:[14,15,22,8,18],is_listening_devic:14,usermod:9,move:[15,22],meter:27,comma:15,addcontrol:[15,22],nodeprotocolinfo:[25,7],"0x84":27,getnodespecif:15,chosen:[15,22],command_class_bas:15,networkreadi:7,therefor:15,command_class_zip_adv_serv:15,signal_value_remov:7,set_interfac:16,command_class_ip_configur:15,handl:[15,16,26],auto:20,set_log:[11,16],createbutton:[25,7],anyth:16,edit:[15,3],mode:[10,15,18,9],requestallconfigparam:15,command_class_schedule_entry_lock:15,receivedt:15,getnodequerystag:[14,15],tenth:15,special:[15,9],variabl:[15,7,2,26,9,27],addwatch:15,categori:7,rel:7,hardwar:15,get_switch_all_st:27,getvaluetyp:15,basiccommand:27,controllercommand_assignreturnrout:[15,22],dictionari:25,releas:[10,11,20,8],afterward:[15,22],controllercommand_replicationsend:15,could:[11,19,15],s_ackwait:22,put:9,timer:22,keep:[20,7,9],length:[15,7],command_class_controller_repl:15,transfer:[15,25,22],retain:15,leave_room_control:8,refreshvalu:15,requestnodedynam:15,qualiti:[15,9],scene:[5,15,7,18,19,20,21,3,11,12],get_stats_label:22,date:[19,7,9],facil:18,is_readi:7,library_type_nam:22,system:[27,15,25,22,26],messag:[14,15,6,7,26,22,25,16],home_id:[11,19,7,26],attach:[15,7],staticgetcommandclassid:[14,15],termin:18,"final":[15,18],getvaluelistitem:15,prone:15,command_class_firmware_update_md:15,shell:[3,23],travi:9,pressbutton:15,rst:9,lion:15,structur:[15,25],charact:15,yourzwavestick:[3,23],fail:[14,15,6,7,2,22,28,11,25],have:[14,15,6,7,0,19,20,2,26,9,28,22,27,10,11,25,16],need:[18,23,9],command_class_non_interoper:15,zwavenodebas:27,min:[27,26],rout:[14,15,22,7],isvalueset:15,which:[15,25,7],detector:7,singl:[14,15,2,26],pyx:[5,9],whe:19,unless:7,getnodeid:7,getvalueinst:15,set_change_verifi:26,set_switch_al:27,pyc:9,"class":[14,15,6,7,19,2,26,8,22,27,25,16],adaptat:22,request:[14,15,7,9],determin:[15,26],openzwav:[0,18],addoptionint:15,fact:7,spuriou:[15,26],command_class_multi_instance_associ:15,text:15,requestconfigparam:15,staff:9,locat:[14,11,3,15,16],ispol:15,removeassoci:[14,15],should:[14,15,6,7,0,19,2,26,9,22,27,25,16],manufactur:[14,15,7],groups_to_dict:14,suppos:27,nodenew:[25,7],local:[10,20,7,9],signal_network_fail:[11,7],hope:[14,15,6,7,0,19,2,26,22,27,25,16],pypa:[10,18],gettyp:[15,7],switches_al:27,command_class_lock:15,awak:[14,15,7],enabl:[15,27,7,26,16],setupttol:18,contain:[15,7,26,22,27,28],nodes_to_dict:7,removedevic:[15,25,22],view:3,controllercommand_removefailednod:[15,22],seten:15,testnetwork:15,adddevic:[15,25,22],knowledg:15,isstaticupdatecontrol:15,displai:[15,3,22,7,16],gmail:0,statu:[15,25,16,26],error:[15,11,25,7,16],state:[15,7,26,22,27,11],is_routing_devic:14,controllercommand_hasnodefail:[15,22],progress:[15,25,22],email:10,addopt:15,kei:[3,25],getcommandclassid:7,getvalueasstring_:15,job:7,entir:16,webapp:[10,8],addit:7,sniff:23,rtype:[14,15],refresh_info:14,equal:16,"_getcontrollerpath":15,etc:[15,25,7,26],instanc:[15,18,7,26,9],controllercommand_transferprimaryrol:[15,22],signal_msg_complet:7,command_class_basic_window_cov:15,chmod:9,respect:[10,18],signal_value_chang:7,command_class_actuator_multilevel:15,quit:7,tread:8,deletebutton:[25,7],set_interval_between_pol:16,cancnt:15,immedi:[14,15,26],stdouttologg:15,neighbour:[15,22],togeth:7,getnodebas:15,present:7,statist:[15,22],multi:15,defit:25,"72057594093273600l":27,defin:[11,27,15,18],getgenr:7,homei:15,observ:[15,26],helper:[14,15],almost:20,demo:[23,18],manufacturernam:15,begin_command_add_devic:22,archiv:18,product_nam:14,begin_command_delete_all_return_rout:22,set_field:14,member:[15,6],python:[0,18],is_switch:27,getpollintens:15,requestnetworkupd:25,getnodeproductnam:15,http:[14,15,6,7,0,18,19,20,8,26,9,28,22,27,10,2,25,16],listenerthread:8,api:[14,5,15,6,7,18,19,22,23,10,11],upon:[16,26],effect:16,initi:[14,15,25,7],getnumswitchpoint:15,sete:16,off:[15,7,20,26,9,27],is_beaming_devic:14,well:[15,16],exampl:[14,15,7,18,19,21,3,27,23,24,10,11,25],command:[18,20,21,9,28,10],usual:[14,15,22],value_data:2,library_vers:22,less:15,nodess:15,obtain:[14,15],getnodenam:15,command_class_sensor_alarm:15,driverdata:15,web:[23,8,18],makefil:[18,20,9],parent_id:26,add:[14,15,6,7,18,19,2,26,9,22,3,27],noack:15,logger:18,know:[14,15,19,27],burden:15,press:[15,22],password:9,python2:[10,9],like:[15,7,20,9,3,28,25],success:[15,6],is_frequent_listening_devic:14,necessari:[22,27],classvers:15,soft:[15,3,22],retransmit:[15,22],captur:15,setter:27,confiur:18,begin_command_delete_button:22,"export":27,flush:11,proper:7,home:15,sofcnt:15,librari:[14,15,6,7,18,1,20,26,9,22,23,10,25],is_static_update_control:22,outgo:[15,22],leav:8,setpollinterv:[15,7],"enum":[15,1,21],usag:[15,26,18],host:8,requestnodeneighbor:15,getnodeneighbor:15,leave_room_network:8,panel:[3,9],c_str:7,actual:[15,6,7,26,9,22],socket:[10,23,18],state_awak:7,s_controllerwritecnt:22,constructor:18,actuat:27,disabl:[15,7,26,22,25,16],own:9,remove_scen:7,automat:[14,15,7,9,27,16],warranti:[14,15,6,7,0,19,2,26,22,27,25,16],been:[14,15,7,26,9,22,11],merg:9,getvalueindex:15,getoptionasbool:15,much:[15,7],command_class_manufacturer_specif:15,"function":[11,27,15],receipt:7,nodeok:25,unexpect:[15,25],yeah:20,home_id_str:7,uninstal:[10,28,20],bug:[10,15,18],count:[14,15,22,7],succe:[15,6],made:[10,14,15],whether:[14,15,22,7,26],controller_id:22,record:[14,7],below:7,limit:16,otherwis:[14,15,7,2,26,9],problem:[10,7,18],quickli:[25,7],baud:[14,15,7],sceneexist:15,evalu:23,"int":[14,15,6,16,19,2,26,22,27,25,7],dure:[15,11,7],command_class_switch_al:[15,27],begin_command_request_network_upd:22,pip:[10,9],getvalueasbyt:15,detail:[14,15,6,7,0,19,2,26,22,27,25,16],virtual:[15,9],other:[15,7,19,26,9,22,28,25],bool:[14,15,16,19,2,26,22,27,25,7],futur:[15,6,7,8],branch:[18,9],varieti:7,getopt:15,isnodebeamingdevic:15,functionn:[11,7],stat:22,debian:[28,20,9],sphinx:9,reliabl:15,rule:27,command_class_zip_servic:15},objtypes:{"0":"py:module","1":"py:attribute","2":"py:method","3":"py:class","4":"py:data","5":"py:exception","6":"py:function"},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","class","Python class"],"4":["py","data","Python data"],"5":["py","exception","Python exception"],"6":["py","function","Python function"]},filenames:["COPYRIGHT","_index_lib","scene","pyozwman","INSTALL_WIN","index","group","network","pyozwweb","DEVEL","README","hello_world","openzwave","diagrams","node","libopenzwave","option","INSTALL_MAC","CHANGELOG","object","INSTALL_REPO","_index_api","controller","EXAMPLES","_index_txt","data","value","command","INSTALL_ARCH"],titles:["License","<no title>","Scene documentation","PyOzwMan documentation","Installing python-openzwave on Windows","Welcome to python-openzwave’s documentation!","Group documentation","Network documentation","PyOzwWeb documentation","Developpers information","python-openzwave","python-openzwave hello_world","API documentation","Notification’s diagrams","Node documentation","libopenzwave module","Option documentation","Installing python-openzwave on MacOs","Changelog","Object documentation","Installing python-openzwave from repository","<no title>","Controller documentation","python-openzwave","<no title>","Data documentation","Value documentation","Command documentation","Installing python-openzwave from archive"],objects:{"":{libopenzwave:[15,0,0,"-"]},"openzwave.controller":{ZWaveController:[22,3,1,""]},"openzwave.network.ZWaveNetwork":{nodes_count:[7,1,1,""],scenes_to_dict:[7,2,1,""],manager:[7,1,1,""],id_separator:[7,1,1,""],scene_exists:[7,2,1,""],get_value:[7,2,1,""],home_id:[7,1,1,""],start:[7,2,1,""],state:[7,1,1,""],is_ready:[7,1,1,""],write_config:[7,2,1,""],scenes_count:[7,1,1,""],test:[7,2,1,""],nodes:[7,1,1,""],get_scenes:[7,2,1,""],get_poll_interval:[7,2,1,""],get_value_from_id_on_network:[7,2,1,""],heal:[7,2,1,""],stop:[7,2,1,""],remove_scene:[7,2,1,""],home_id_str:[7,1,1,""],controller:[7,1,1,""],sleeping_nodes_count:[7,1,1,""],create_scene:[7,2,1,""],switch_all:[7,2,1,""],zwcallback:[7,2,1,""],state_str:[7,1,1,""],set_poll_interval:[7,2,1,""],to_dict:[7,2,1,""],nodes_to_dict:[7,2,1,""]},"openzwave.group.ZWaveGroup":{associations:[6,1,1,""],index:[6,1,1,""],max_associations:[6,1,1,""],add_association:[6,2,1,""],label:[6,1,1,""],to_dict:[6,2,1,""],remove_association:[6,2,1,""]},"openzwave.command.ZWaveNodeSwitch":{get_switch_state:[27,2,1,""],get_dimmer_level:[27,2,1,""],get_switch_all_state:[27,2,1,""],get_switches:[27,2,1,""],get_switch_all_items:[27,2,1,""],get_switches_all:[27,2,1,""],get_switch_all_item:[27,2,1,""],get_dimmers:[27,2,1,""],set_switch:[27,2,1,""],set_dimmer:[27,2,1,""],set_switch_all:[27,2,1,""]},"libopenzwave.PyOptions":{getOptionAsString:[15,2,1,""],getConfigPath:[15,2,1,""],addOption:[15,2,1,""],getOptionAsBool:[15,2,1,""],lock:[15,2,1,""],create:[15,2,1,""],getOptionAsInt:[15,2,1,""],areLocked:[15,2,1,""],addOptionInt:[15,2,1,""],destroy:[15,2,1,""],addOptionBool:[15,2,1,""],addOptionString:[15,2,1,""],getOption:[15,2,1,""]},"libopenzwave.EnumWithDocType":{setDocType:[15,2,1,""]},libopenzwave:{driverData:[15,6,1,""],PyLogLevels:[25,4,1,""],EnumWithDocType:[15,3,1,""],PyGenres:[25,4,1,""],PyManager:[15,3,1,""],EnumWithDoc:[15,3,1,""],RetAlloc:[15,3,1,""],configPath:[15,6,1,""],PyValueTypes:[25,4,1,""],PyNotifications:[25,4,1,""],LibZWaveException:[15,5,1,""],StdOutToLogger:[15,3,1,""],PyControllerState:[25,4,1,""],PyOptions:[15,3,1,""],PyControllerCommand:[25,4,1,""]},"openzwave.object.ZWaveObject":{use_cache:[19,1,1,""],is_outdated:[19,2,1,""],network:[19,1,1,""],update:[19,2,1,""],object_id:[19,1,1,""],last_update:[19,1,1,""],home_id:[19,1,1,""],kvals:[19,1,1,""],outdate:[19,2,1,""],cache_property:[19,2,1,""],outdated:[19,1,1,""]},"openzwave.command":{ZWaveNodeSwitch:[27,3,1,""],ZWaveNodeBasic:[27,3,1,""],ZWaveNodeSensor:[27,3,1,""]},"openzwave.scene":{ZWaveScene:[2,3,1,""]},"openzwave.scene.ZWaveScene":{activate:[2,2,1,""],add_value:[2,2,1,""],create:[2,2,1,""],label:[2,1,1,""],remove_value:[2,2,1,""],get_values_by_node:[2,2,1,""],to_dict:[2,2,1,""],scene_id:[2,1,1,""],set_value:[2,2,1,""],get_values:[2,2,1,""]},"openzwave.command.ZWaveNodeBasic":{can_wake_up:[27,2,1,""],get_power_level:[27,2,1,""],get_power_levels:[27,2,1,""],get_battery_level:[27,2,1,""],get_battery_levels:[27,2,1,""]},"libopenzwave.StdOutToLogger":{write:[15,2,1,""]},"openzwave.command.ZWaveNodeSensor":{get_sensor_value:[27,2,1,""],get_sensors:[27,2,1,""]},"openzwave.node":{ZWaveNode:[14,3,1,""]},"openzwave.group":{ZWaveGroup:[6,3,1,""]},"pyozwweb.app.listener.ListenerThread":{run:[8,2,1,""],leave_room_controller:[8,2,1,""],stop:[8,2,1,""],join_room_controller:[8,2,1,""],join_room_values:[8,2,1,""],join_room_node:[8,2,1,""],connect:[8,2,1,""],join_room_network:[8,2,1,""],leave_room_node:[8,2,1,""],leave_room_network:[8,2,1,""],leave_room_values:[8,2,1,""]},"libopenzwave.EnumWithDoc":{setDoc:[15,2,1,""]},"openzwave.object":{ZWaveCommandClassException:[19,5,1,""],ZWaveObject:[19,3,1,""],ZWaveCacheException:[19,5,1,""],ZWaveNodeInterface:[19,3,1,""],ZWaveTypeException:[19,5,1,""],ZWaveException:[19,5,1,""]},openzwave:{node:[14,0,0,"-"],group:[6,0,0,"-"],network:[7,0,0,"-"],object:[19,0,0,"-"],scene:[2,0,0,"-"],value:[26,0,0,"-"],controller:[22,0,0,"-"],command:[27,0,0,"-"],option:[16,0,0,"-"]},"pyozwweb.app":{listener:[8,0,0,"-"]},"openzwave.controller.ZWaveController":{begin_command_remove_failed_node:[22,2,1,""],is_bridge_controller:[22,1,1,""],begin_command_remove_device:[22,2,1,""],is_primary_controller:[22,1,1,""],ozw_library_version:[22,1,1,""],begin_command_has_node_failed:[22,2,1,""],begin_command_create_new_primary:[22,2,1,""],poll_stats:[22,1,1,""],library_config_path:[22,1,1,""],stats:[22,1,1,""],hard_reset:[22,2,1,""],begin_command_receive_configuration:[22,2,1,""],python_library_version:[22,1,1,""],capabilities:[22,1,1,""],begin_command_add_device:[22,2,1,""],begin_command_send_node_information:[22,2,1,""],do_poll_statistics:[22,2,1,""],library_type_name:[22,1,1,""],begin_command_create_button:[22,2,1,""],library_version:[22,1,1,""],node:[22,1,1,""],begin_command_transfer_primary_role:[22,2,1,""],begin_command_delete_button:[22,2,1,""],begin_command_delete_all_return_routes:[22,2,1,""],begin_command_assign_return_route:[22,2,1,""],begin_command_request_network_update:[22,2,1,""],library_user_path:[22,1,1,""],cancel_command:[22,2,1,""],stop:[22,2,1,""],node_id:[22,1,1,""],is_static_update_controller:[22,1,1,""],device:[22,1,1,""],begin_command_request_node_neigbhor_update:[22,2,1,""],get_stats_label:[22,2,1,""],begin_command_replace_failed_node:[22,2,1,""],name:[22,1,1,""],zwcallback:[22,2,1,""],soft_reset:[22,2,1,""],library_description:[22,1,1,""],to_dict:[22,2,1,""],begin_command_replication_send:[22,2,1,""],send_queue_count:[22,1,1,""],options:[22,1,1,""]},"openzwave.option.ZWaveOption":{set_exclude:[16,2,1,""],set_associate:[16,2,1,""],set_interface:[16,2,1,""],config_path:[16,1,1,""],user_path:[16,1,1,""],set_console_output:[16,2,1,""],set_interval_between_polls:[16,2,1,""],set_dump_trigger_level:[16,2,1,""],set_include:[16,2,1,""],set_log_file:[16,2,1,""],set_poll_interval:[16,2,1,""],set_append_log_file:[16,2,1,""],set_queue_log_level:[16,2,1,""],set_save_log_level:[16,2,1,""],set_logging:[16,2,1,""],device:[16,1,1,""],set_notify_transactions:[16,2,1,""],set_driver_max_attempts:[16,2,1,""],set_save_configuration:[16,2,1,""],set_suppress_value_refresh:[16,2,1,""]},"libopenzwave.PyManager":{enablePoll:[15,2,1,""],getValueType:[15,2,1,""],isNodeAwake:[15,2,1,""],getValueAsInt:[15,2,1,""],getControllerPath:[15,2,1,""],getValueGenre:[15,2,1,""],removeDriver:[15,2,1,""],getSwitchPoint:[15,2,1,""],softResetController:[15,2,1,""],getNumScenes:[15,2,1,""],requestNodeState:[15,2,1,""],setPollInterval:[15,2,1,""],setNodeOff:[15,2,1,""],getNodeSecurity:[15,2,1,""],getValueUnits:[15,2,1,""],getValueMin:[15,2,1,""],disablePoll:[15,2,1,""],getNodeNeighbors:[15,2,1,""],setValueUnits:[15,2,1,""],setNodeLocation:[15,2,1,""],activateScene:[15,2,1,""],isPolled:[15,2,1,""],getValueAsShort:[15,2,1,""],isBridgeController:[15,2,1,""],getValueAsByte:[15,2,1,""],removeAllScenes:[15,2,1,""],isNodeRoutingDevice:[15,2,1,""],getChangeVerified:[15,2,1,""],addAssociation:[15,2,1,""],getGroupLabel:[15,2,1,""],refreshNodeInfo:[15,2,1,""],removeWatcher:[15,2,1,""],getNodeManufacturerId:[15,2,1,""],removeSceneValue:[15,2,1,""],isNodeFailed:[15,2,1,""],getNumGroups:[15,2,1,""],releaseButton:[15,2,1,""],getNodeSpecific:[15,2,1,""],requestAllConfigParams:[15,2,1,""],setValue:[15,2,1,""],clearSwitchPoints:[15,2,1,""],getValueListItems:[15,2,1,""],setNodeLevel:[15,2,1,""],getNodeProductType:[15,2,1,""],setNodeOn:[15,2,1,""],isStaticUpdateController:[15,2,1,""],isNodeBeamingDevice:[15,2,1,""],getValueMax:[15,2,1,""],getMaxAssociations:[15,2,1,""],resetController:[15,2,1,""],getNodeVersion:[15,2,1,""],isNodeInfoReceived:[15,2,1,""],setPollIntensity:[15,2,1,""],addSceneValue:[15,2,1,""],setNodeProductName:[15,2,1,""],requestConfigParam:[15,2,1,""],getPollIntensity:[15,2,1,""],healNetworkNode:[15,2,1,""],getNodeType:[15,2,1,""],getLibraryTypeName:[15,2,1,""],setSceneValue:[15,2,1,""],sceneExists:[15,2,1,""],getValueListSelectionNum:[15,2,1,""],cancelControllerCommand:[15,2,1,""],isNodeFrequentListeningDevice:[15,2,1,""],getSceneLabel:[15,2,1,""],getPythonLibraryVersion:[15,2,1,""],removeSwitchPoint:[15,2,1,""],getNodeStatistics:[15,2,1,""],COMMAND_CLASS_DESC:[15,1,1,""],getValueInstance:[15,2,1,""],isNodeListeningDevice:[15,2,1,""],getNodeGeneric:[15,2,1,""],getOzwLibraryVersionNumber:[15,2,1,""],getValueCommandClass:[15,2,1,""],getControllerInterfaceType:[15,2,1,""],getNodeManufacturerName:[15,2,1,""],create:[15,2,1,""],getPollInterval:[15,2,1,""],switchAllOn:[15,2,1,""],isValueSet:[15,2,1,""],getValueListSelectionStr:[15,2,1,""],setValueHelp:[15,2,1,""],isValuePolled:[15,2,1,""],beginControllerCommand:[15,2,1,""],getAssociations:[15,2,1,""],addDriver:[15,2,1,""],setNodeName:[15,2,1,""],removeAssociation:[15,2,1,""],getNodeClassInformation:[15,2,1,""],getNodeName:[15,2,1,""],getSUCNodeId:[15,2,1,""],getValueAsBool:[15,2,1,""],getValueFloatPrecision:[15,2,1,""],addWatcher:[15,2,1,""],getNumSwitchPoints:[15,2,1,""],switchAllOff:[15,2,1,""],getLibraryVersion:[15,2,1,""],writeConfig:[15,2,1,""],getValueIndex:[15,2,1,""],getValue:[15,2,1,""],getValueAsString:[15,2,1,""],getValueHelp:[15,2,1,""],setChangeVerified:[15,2,1,""],getNodeQueryStageCode:[15,2,1,""],isValueReadOnly:[15,2,1,""],getPythonLibraryVersionNumber:[15,2,1,""],requestNodeDynamic:[15,2,1,""],getSendQueueCount:[15,2,1,""],getValueAsFloat:[15,2,1,""],isPrimaryController:[15,2,1,""],getValueLabel:[15,2,1,""],logDriverStatistics:[15,2,1,""],removeScene:[15,2,1,""],setValueLabel:[15,2,1,""],getNodeQueryStage:[15,2,1,""],sceneGetValues:[15,2,1,""],setConfigParam:[15,2,1,""],getDriverStatistics:[15,2,1,""],getNodeBasic:[15,2,1,""],getNodeLocation:[15,2,1,""],setSceneLabel:[15,2,1,""],pressButton:[15,2,1,""],destroy:[15,2,1,""],getAllScenes:[15,2,1,""],isValueWriteOnly:[15,2,1,""],getNodeMaxBaudRate:[15,2,1,""],getOzwLibraryVersion:[15,2,1,""],getControllerNodeId:[15,2,1,""],isNodeSecurityDevice:[15,2,1,""],setNodeManufacturerName:[15,2,1,""],getNodeProductId:[15,2,1,""],testNetworkNode:[15,2,1,""],CALLBACK_DESC:[15,1,1,""],refreshValue:[15,2,1,""],testNetwork:[15,2,1,""],getNodeProductName:[15,2,1,""],createScene:[15,2,1,""],healNetwork:[15,2,1,""],setSwitchPoint:[15,2,1,""]},"openzwave.value":{ZWaveValue:[26,3,1,""]},"openzwave.value.ZWaveValue":{enable_poll:[26,2,1,""],help:[26,1,1,""],is_write_only:[26,1,1,""],id_on_network:[26,1,1,""],data_as_string:[26,1,1,""],instance:[26,1,1,""],poll_intensity:[26,1,1,""],min:[26,1,1,""],label:[26,1,1,""],parent_id:[26,1,1,""],set_change_verified:[26,2,1,""],units:[26,1,1,""],type:[26,1,1,""],check_data:[26,2,1,""],value_id:[26,1,1,""],node:[26,1,1,""],index:[26,1,1,""],max:[26,1,1,""],command_class:[26,1,1,""],precision:[26,1,1,""],is_read_only:[26,1,1,""],genre:[26,1,1,""],data:[26,1,1,""],disable_poll:[26,2,1,""],refresh:[26,2,1,""],data_items:[26,1,1,""],is_change_verified:[26,2,1,""],to_dict:[26,2,1,""],is_set:[26,1,1,""],is_polled:[26,1,1,""]},"openzwave.node.ZWaveNode":{neighbors:[14,1,1,""],get_values_by_command_classes:[14,2,1,""],isReady:[14,1,1,""],set_config_param:[14,2,1,""],change_value:[14,2,1,""],command_classes_as_string:[14,1,1,""],is_security_device:[14,1,1,""],command_classes:[14,1,1,""],is_beaming_device:[14,1,1,""],get_values_for_command_class:[14,2,1,""],num_groups:[14,1,1,""],isNodeAwake:[14,2,1,""],get_values:[14,2,1,""],manufacturer_name:[14,1,1,""],is_listening_device:[14,1,1,""],generic:[14,1,1,""],is_sleeping:[14,1,1,""],set_field:[14,2,1,""],capabilities:[14,1,1,""],isNodeFailed:[14,1,1,""],groups_to_dict:[14,2,1,""],has_command_class:[14,2,1,""],version:[14,1,1,""],location:[14,1,1,""],basic:[14,1,1,""],test:[14,2,1,""],manufacturer_id:[14,1,1,""],getNodeQueryStage:[14,1,1,""],type:[14,1,1,""],product_name:[14,1,1,""],request_config_param:[14,2,1,""],add_value:[14,2,1,""],heal:[14,2,1,""],node_id:[14,1,1,""],groups:[14,1,1,""],request_all_config_params:[14,2,1,""],is_routing_device:[14,1,1,""],product_id:[14,1,1,""],is_frequent_listening_device:[14,1,1,""],isNodeInfoReceived:[14,1,1,""],product_type:[14,1,1,""],name:[14,1,1,""],is_locked:[14,1,1,""],refresh_value:[14,2,1,""],refresh_info:[14,2,1,""],get_command_class_as_string:[14,2,1,""],specific:[14,1,1,""],remove_value:[14,2,1,""],max_baud_rate:[14,1,1,""],to_dict:[14,2,1,""],values_to_dict:[14,2,1,""],security:[14,1,1,""],get_command_class_genres:[14,2,1,""]},"openzwave.network":{ZWaveNetwork:[7,3,1,""]},"pyozwweb.app.listener":{ListenerThread:[8,3,1,""]},"openzwave.option":{ZWaveOption:[16,3,1,""]}},titleterms:{control:22,repositroi:20,api_demo:23,code:11,from:[10,28,11,20],process:[28,20,13],modul:15,sudo:9,startup:13,scene:2,indic:5,pyozwman:[3,23],"static":9,tabl:5,need:[28,20],instal:[28,20,4,17],dynam:9,out:10,virtualenv:9,alpha3:10,some:11,group:6,welcom:5,lib:9,how:9,licens:0,support:10,archiv:28,pyozwweb:[8,23],launch:8,start:11,window:4,build:[28,20],memory_us:23,zwave:11,hello_world:11,document:[14,5,6,7,25,19,2,26,8,22,3,27,9,12,16],updat:20,node:14,test_lib:23,sourc:[20,8],run:20,option:16,get:[28,20],python:[5,17,20,9,28,4,10,11,23],share:9,tool:[28,20],notif:13,migrat:10,what:8,diagram:13,api_snif:23,test:[20,9],theori:11,repositori:20,maco:17,develop:9,data:25,valu:26,network:7,about:[20,9],full:13,developp:9,signal:11,changelog:18,object:19,inform:9,libopenzwav:[15,9],api:12,command:27,openzwav:[5,17,20,9,28,4,10,11,23],listen:11,python3:9,hello:11,depend:20}}) \ No newline at end of file diff --git a/docs/html/value.html b/docs/html/value.html index 42eb6c36..5ef0d94d 100644 --- a/docs/html/value.html +++ b/docs/html/value.html @@ -480,12 +480,16 @@

    Value documentation
    -to_dict()
    -

    Return a dict representation of the value.

    +to_dict(extras=['all']) +

    Return a dict representation of the node.

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    + + + + diff --git a/docs/joomla/CHANGELOG.html b/docs/joomla/CHANGELOG.html index 8d1dc55c..de74e91e 100644 --- a/docs/joomla/CHANGELOG.html +++ b/docs/joomla/CHANGELOG.html @@ -7,12 +7,14 @@

    Changelog

    • Add more tests for the library : switches, dimmers, polling, heal, test, ...
    • Fix reloader problem : the network ist stop/start every time the app is realoaded. But in this case, the process terminates normally. But there seems to be 2 running instances of the network.
    • +
    • When updating config.py for pyozwweb, need to python setup-web.py install again ... need to change this. Add a config file.
    python-openzwave 0.3.0-alpha4:
    • Add pyozwman script : after installing you can launch it wit : Usage: ozwsh [–device=/dev/ttyUSB0] [–log=Debug] ...
    • +
    • Add pyozwweb confiuration file.
    diff --git a/docs/joomla/_sources/CHANGELOG.txt b/docs/joomla/_sources/CHANGELOG.txt index 4c2f59c8..5b6c2e33 100644 --- a/docs/joomla/_sources/CHANGELOG.txt +++ b/docs/joomla/_sources/CHANGELOG.txt @@ -8,9 +8,12 @@ To do for python-openzwave 0.3.0-final : * Add more tests for the library : switches, dimmers, polling, heal, test, ... * Fix reloader problem : the network ist stop/start every time the app is realoaded. But in this case, the process terminates normally. But there seems to be 2 running instances of the network. + * When updating config.py for pyozwweb, need to python setup-web.py install again ... need to change this. Add a config file. + python-openzwave 0.3.0-alpha4: * Add pyozwman script : after installing you can launch it wit : Usage: ozwsh [--device=/dev/ttyUSB0] [--log=Debug] ... + * Add pyozwweb confiuration file. python-openzwave 0.3.0-alpha3: diff --git a/docs/joomla/_sources/pyozwweb.txt b/docs/joomla/_sources/pyozwweb.txt index f71f97dc..275a04d2 100644 --- a/docs/joomla/_sources/pyozwweb.txt +++ b/docs/joomla/_sources/pyozwweb.txt @@ -20,11 +20,12 @@ Update the config : .. code-block:: bash - vim config.py + vim app.conf - ZWAVE_DEVICE = "/dev/ttyUSB0" + [zwave] + device = /dev/ttyUSB0 -You can fine tune logging in logging.conf. You can run the app : +You can fine tune logging in logging.conf and run the app : .. code-block:: bash @@ -32,6 +33,14 @@ You can fine tune logging in logging.conf. You can run the app : And connect to http://127.0.0.1:5000 using your favorite browser. +You can also change the ip/port to allow remote connections : + +.. code-block:: bash + + [server] + host = 0.0.0.0 + port = 8080 + Source ------ diff --git a/docs/joomla/controller.html b/docs/joomla/controller.html index 4f36a2b0..6169edb4 100644 --- a/docs/joomla/controller.html +++ b/docs/joomla/controller.html @@ -467,6 +467,12 @@

    Controller documentation

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()

    +
    +
    +do_poll_statistics()
    +

    Timer based polling system for statistics

    +
    +
    get_stats_label(stat)
    @@ -700,6 +706,22 @@

    Controller documentation

    +
    +
    +poll_stats
    +

    The interval for polling statistics

    + +++ + + + + + +
    Returns:The interval in seconds
    Return type:float
    +
    +
    python_library_version
    @@ -774,14 +796,24 @@

    Controller documentation

    +
    +
    +stop()
    +

    Stop the controller and all this threads.

    +
    +
    -to_dict()
    +to_dict(extras=['all'])

    Return a dict representation of the controller.

    + + + + diff --git a/docs/joomla/coverage/index.html b/docs/joomla/coverage/index.html index 898e58dd..3a9f9d4c 100644 --- a/docs/joomla/coverage/index.html +++ b/docs/joomla/coverage/index.html @@ -18,7 +18,7 @@ - - + + - + @@ -76,8 +76,8 @@

    Coverage report:

    - - + + @@ -85,8 +85,8 @@

    Coverage report:

    - - + + @@ -94,8 +94,8 @@

    Coverage report:

    - - + + @@ -103,8 +103,8 @@

    Coverage report:

    - - + + @@ -112,8 +112,8 @@

    Coverage report:

    - - + + @@ -121,8 +121,8 @@

    Coverage report:

    - - + + @@ -130,8 +130,8 @@

    Coverage report:

    - - + + @@ -139,8 +139,8 @@

    Coverage report:

    - - + + @@ -148,8 +148,8 @@

    Coverage report:

    - - + + @@ -157,8 +157,8 @@

    Coverage report:

    - - + + @@ -175,20 +175,20 @@

    Coverage report:

    - - + + - + - - + + - + @@ -202,20 +202,20 @@

    Coverage report:

    - - + + - + - - + + - + @@ -229,34 +229,34 @@

    Coverage report:

    - - + + - + - - + + - + - - + + - + - + diff --git a/docs/joomla/coverage/openzwave_command.html b/docs/joomla/coverage/openzwave_command.html index 771a43a5..8138ef9b 100644 --- a/docs/joomla/coverage/openzwave_command.html +++ b/docs/joomla/coverage/openzwave_command.html @@ -25,9 +25,9 @@

    Coverage for openzwave.command :

    - 123 statements   + 128 statements   0 run - 123 missing + 128 missing 0 excluded

    @@ -88,25 +88,25 @@

    25

    26

    27

    -

    28

    -

    29

    +

    28

    +

    29

    30

    31

    32

    -

    33

    -

    34

    -

    35

    +

    33

    +

    34

    +

    35

    36

    37

    38

    39

    40

    41

    -

    42

    -

    43

    -

    44

    +

    42

    +

    43

    +

    44

    45

    -

    46

    +

    46

    47

    48

    49

    @@ -333,29 +333,29 @@

    270

    271

    272

    -

    273

    +

    273

    274

    275

    276

    277

    -

    278

    +

    278

    279

    280

    281

    282

    -

    283

    -

    284

    -

    285

    -

    286

    -

    287

    +

    283

    +

    284

    +

    285

    +

    286

    +

    287

    288

    -

    289

    +

    289

    290

    -

    291

    -

    292

    -

    293

    +

    291

    +

    292

    +

    293

    294

    -

    295

    +

    295

    296

    297

    298

    @@ -365,32 +365,32 @@

    302

    303

    304

    -

    305

    +

    305

    306

    307

    -

    308

    +

    308

    309

    -

    310

    +

    310

    311

    312

    -

    313

    +

    313

    314

    315

    316

    317

    -

    318

    -

    319

    -

    320

    -

    321

    -

    322

    +

    318

    +

    319

    +

    320

    +

    321

    +

    322

    323

    -

    324

    +

    324

    325

    -

    326

    -

    327

    -

    328

    +

    326

    +

    327

    +

    328

    329

    -

    330

    +

    330

    331

    332

    333

    @@ -400,38 +400,38 @@

    337

    338

    339

    -

    340

    +

    340

    341

    342

    -

    343

    +

    343

    344

    -

    345

    +

    345

    346

    347

    -

    348

    +

    348

    349

    350

    351

    352

    353

    -

    354

    -

    355

    -

    356

    +

    354

    +

    355

    +

    356

    357

    -

    358

    -

    359

    +

    358

    +

    359

    360

    -

    361

    +

    361

    362

    -

    363

    +

    363

    364

    -

    365

    -

    366

    +

    365

    +

    366

    367

    368

    369

    370

    -

    371

    +

    371

    372

    373

    374

    @@ -442,85 +442,85 @@

    379

    380

    381

    -

    382

    +

    382

    383

    384

    -

    385

    +

    385

    386

    -

    387

    +

    387

    388

    389

    -

    390

    +

    390

    391

    392

    393

    394

    395

    -

    396

    -

    397

    -

    398

    -

    399

    +

    396

    +

    397

    +

    398

    +

    399

    400

    401

    -

    402

    -

    403

    -

    404

    +

    402

    +

    403

    +

    404

    405

    -

    406

    +

    406

    407

    408

    409

    410

    411

    -

    412

    -

    413

    -

    414

    -

    415

    -

    416

    +

    412

    +

    413

    +

    414

    +

    415

    +

    416

    417

    418

    419

    420

    -

    421

    +

    421

    422

    423

    -

    424

    +

    424

    425

    426

    -

    427

    -

    428

    +

    427

    +

    428

    429

    -

    430

    +

    430

    431

    432

    433

    434

    435

    -

    436

    -

    437

    -

    438

    +

    436

    +

    437

    +

    438

    439

    -

    440

    -

    441

    -

    442

    -

    443

    +

    440

    +

    441

    +

    442

    +

    443

    444

    -

    445

    +

    445

    446

    447

    448

    449

    450

    -

    451

    -

    452

    -

    453

    +

    451

    +

    452

    +

    453

    454

    -

    455

    -

    456

    -

    457

    -

    458

    +

    455

    +

    456

    +

    457

    +

    458

    459

    -

    460

    +

    460

    461

    462

    463

    @@ -531,46 +531,46 @@

    468

    469

    470

    -

    471

    +

    471

    472

    473

    -

    474

    +

    474

    475

    -

    476

    +

    476

    477

    478

    -

    479

    +

    479

    480

    481

    482

    483

    484

    -

    485

    -

    486

    -

    487

    -

    488

    +

    485

    +

    486

    +

    487

    +

    488

    489

    490

    -

    491

    -

    492

    -

    493

    +

    491

    +

    492

    +

    493

    494

    -

    495

    +

    495

    496

    497

    498

    499

    500

    -

    501

    -

    502

    -

    503

    +

    501

    +

    502

    +

    503

    504

    -

    505

    -

    506

    -

    507

    -

    508

    +

    505

    +

    506

    +

    507

    +

    508

    509

    -

    510

    +

    510

    511

    512

    513

    @@ -581,65 +581,65 @@

    518

    519

    520

    -

    521

    +

    521

    522

    523

    -

    524

    +

    524

    525

    -

    526

    +

    526

    527

    528

    -

    529

    +

    529

    530

    531

    532

    533

    534

    535

    -

    536

    -

    537

    -

    538

    -

    539

    -

    540

    +

    536

    +

    537

    +

    538

    +

    539

    +

    540

    541

    542

    -

    543

    -

    544

    +

    543

    +

    544

    545

    546

    547

    -

    548

    -

    549

    +

    548

    +

    549

    550

    551

    -

    552

    +

    552

    553

    -

    554

    -

    555

    -

    556

    +

    554

    +

    555

    +

    556

    557

    -

    558

    +

    558

    559

    560

    561

    562

    563

    -

    564

    -

    565

    -

    566

    +

    564

    +

    565

    +

    566

    567

    -

    568

    -

    569

    -

    570

    -

    571

    +

    568

    +

    569

    +

    570

    +

    571

    572

    -

    573

    -

    574

    +

    573

    +

    574

    575

    576

    577

    578

    -

    579

    +

    579

    580

    581

    582

    @@ -653,43 +653,43 @@

    590

    591

    592

    -

    593

    -

    594

    +

    593

    +

    594

    595

    -

    596

    +

    596

    597

    598

    -

    599

    -

    600

    -

    601

    -

    602

    -

    603

    +

    599

    +

    600

    +

    601

    +

    602

    +

    603

    604

    -

    605

    +

    605

    606

    -

    607

    +

    607

    608

    609

    610

    611

    612

    613

    -

    614

    -

    615

    -

    616

    +

    614

    +

    615

    +

    616

    617

    -

    618

    -

    619

    -

    620

    -

    621

    +

    618

    +

    619

    +

    620

    +

    621

    622

    -

    623

    -

    624

    +

    623

    +

    624

    625

    626

    627

    628

    -

    629

    +

    629

    630

    631

    632

    @@ -699,54 +699,59 @@

    636

    637

    638

    -

    639

    +

    639

    640

    641

    -

    642

    +

    642

    643

    -

    644

    +

    644

    645

    646

    -

    647

    +

    647

    648

    649

    650

    651

    652

    -

    653

    -

    654

    -

    655

    -

    656

    +

    653

    +

    654

    +

    655

    +

    656

    657

    658

    -

    659

    -

    660

    -

    661

    +

    659

    +

    660

    +

    661

    662

    -

    663

    +

    663

    664

    665

    666

    667

    668

    -

    669

    -

    670

    -

    671

    +

    669

    +

    670

    +

    671

    672

    -

    673

    -

    674

    -

    675

    -

    676

    +

    673

    +

    674

    +

    675

    +

    676

    677

    -

    678

    +

    678

    679

    680

    681

    682

    683

    -

    684

    -

    685

    -

    686

    +

    684

    +

    685

    +

    686

    +

    687

    +

    688

    +

    689

    +

    690

    +

    691

    diff --git a/docs/joomla/coverage/openzwave_controller.html b/docs/joomla/coverage/openzwave_controller.html index b82a241d..4ba1ae41 100644 --- a/docs/joomla/coverage/openzwave_controller.html +++ b/docs/joomla/coverage/openzwave_controller.html @@ -25,9 +25,9 @@

    Coverage for openzwave.controller :

    - 175 statements   + 206 statements   0 run - 175 missing + 206 missing 0 excluded

    @@ -90,31 +90,31 @@

    27

    28

    29

    -

    30

    +

    30

    31

    32

    33

    34

    35

    -

    36

    +

    36

    37

    38

    39

    40

    -

    41

    +

    41

    42

    43

    44

    45

    46

    -

    47

    -

    48

    -

    49

    -

    50

    -

    51

    -

    52

    +

    47

    +

    48

    +

    49

    +

    50

    +

    51

    +

    52

    53

    -

    54

    +

    54

    55

    56

    57

    @@ -151,27 +151,27 @@

    88

    89

    90

    -

    91

    -

    92

    -

    93

    -

    94

    -

    95

    -

    96

    +

    91

    +

    92

    +

    93

    +

    94

    +

    95

    +

    96

    97

    98

    99

    100

    101

    -

    102

    +

    102

    103

    -

    104

    +

    104

    105

    106

    107

    -

    108

    +

    108

    109

    110

    -

    111

    +

    111

    112

    113

    114

    @@ -182,205 +182,205 @@

    119

    120

    121

    -

    122

    +

    122

    123

    -

    124

    -

    125

    -

    126

    -

    127

    -

    128

    +

    124

    +

    125

    +

    126

    +

    127

    +

    128

    129

    -

    130

    +

    130

    131

    132

    133

    134

    -

    135

    -

    136

    -

    137

    -

    138

    -

    139

    -

    140

    -

    141

    +

    135

    +

    136

    +

    137

    +

    138

    +

    139

    +

    140

    +

    141

    142

    143

    144

    -

    145

    +

    145

    146

    -

    147

    -

    148

    -

    149

    -

    150

    -

    151

    -

    152

    +

    147

    +

    148

    +

    149

    +

    150

    +

    151

    +

    152

    153

    154

    -

    155

    -

    156

    +

    155

    +

    156

    157

    158

    159

    -

    160

    -

    161

    +

    160

    +

    161

    162

    -

    163

    +

    163

    164

    -

    165

    +

    165

    166

    -

    167

    +

    167

    168

    169

    -

    170

    +

    170

    171

    172

    -

    173

    +

    173

    174

    175

    -

    176

    +

    176

    177

    -

    178

    +

    178

    179

    180

    181

    -

    182

    +

    182

    183

    -

    184

    +

    184

    185

    186

    -

    187

    -

    188

    +

    187

    +

    188

    189

    -

    190

    +

    190

    191

    -

    192

    -

    193

    +

    192

    +

    193

    194

    -

    195

    +

    195

    196

    197

    198

    199

    200

    -

    201

    -

    202

    +

    201

    +

    202

    203

    204

    -

    205

    -

    206

    -

    207

    +

    205

    +

    206

    +

    207

    208

    -

    209

    +

    209

    210

    211

    212

    213

    214

    -

    215

    +

    215

    216

    -

    217

    -

    218

    -

    219

    +

    217

    +

    218

    +

    219

    220

    -

    221

    +

    221

    222

    -

    223

    +

    223

    224

    225

    -

    226

    +

    226

    227

    -

    228

    +

    228

    229

    230

    231

    -

    232

    +

    232

    233

    -

    234

    +

    234

    235

    236

    -

    237

    +

    237

    238

    -

    239

    +

    239

    240

    241

    242

    -

    243

    +

    243

    244

    -

    245

    +

    245

    246

    247

    -

    248

    +

    248

    249

    -

    250

    +

    250

    251

    252

    253

    -

    254

    +

    254

    255

    -

    256

    +

    256

    257

    258

    -

    259

    +

    259

    260

    -

    261

    +

    261

    262

    263

    264

    -

    265

    +

    265

    266

    -

    267

    +

    267

    268

    269

    -

    270

    -

    271

    +

    270

    +

    271

    272

    -

    273

    +

    273

    274

    -

    275

    -

    276

    +

    275

    +

    276

    277

    -

    278

    +

    278

    279

    280

    281

    282

    283

    -

    284

    -

    285

    +

    284

    +

    285

    286

    287

    -

    288

    -

    289

    -

    290

    +

    288

    +

    289

    +

    290

    291

    -

    292

    +

    292

    293

    294

    295

    296

    297

    -

    298

    -

    299

    +

    298

    +

    299

    300

    301

    -

    302

    -

    303

    -

    304

    +

    302

    +

    303

    +

    304

    305

    -

    306

    +

    306

    307

    308

    309

    310

    311

    -

    312

    +

    312

    313

    -

    314

    -

    315

    -

    316

    +

    314

    +

    315

    +

    316

    317

    -

    318

    +

    318

    319

    -

    320

    +

    320

    321

    322

    323

    @@ -389,9 +389,9 @@

    326

    327

    328

    -

    329

    +

    329

    330

    -

    331

    +

    331

    332

    333

    334

    @@ -400,9 +400,9 @@

    337

    338

    339

    -

    340

    +

    340

    341

    -

    342

    +

    342

    343

    344

    345

    @@ -413,69 +413,69 @@

    350

    351

    352

    -

    353

    +

    353

    354

    -

    355

    +

    355

    356

    -

    357

    +

    357

    358

    -

    359

    +

    359

    360

    361

    362

    363

    -

    364

    -

    365

    -

    366

    -

    367

    -

    368

    -

    369

    +

    364

    +

    365

    +

    366

    +

    367

    +

    368

    +

    369

    370

    -

    371

    -

    372

    -

    373

    +

    371

    +

    372

    +

    373

    374

    375

    -

    376

    -

    377

    -

    378

    +

    376

    +

    377

    +

    378

    379

    380

    381

    -

    382

    -

    383

    -

    384

    +

    382

    +

    383

    +

    384

    385

    386

    387

    388

    389

    390

    -

    391

    +

    391

    392

    393

    394

    -

    395

    +

    395

    396

    397

    398

    399

    400

    -

    401

    +

    401

    402

    -

    403

    +

    403

    404

    405

    406

    -

    407

    -

    408

    -

    409

    -

    410

    -

    411

    +

    407

    +

    408

    +

    409

    +

    410

    +

    411

    412

    -

    413

    -

    414

    -

    415

    +

    413

    +

    414

    +

    415

    416

    417

    418

    @@ -484,26 +484,26 @@

    421

    422

    423

    -

    424

    -

    425

    -

    426

    -

    427

    +

    424

    +

    425

    +

    426

    +

    427

    428

    429

    -

    430

    +

    430

    431

    -

    432

    -

    433

    -

    434

    +

    432

    +

    433

    +

    434

    435

    436

    437

    438

    439

    -

    440

    -

    441

    -

    442

    -

    443

    +

    440

    +

    441

    +

    442

    +

    443

    444

    445

    446

    @@ -511,58 +511,58 @@

    448

    449

    450

    -

    451

    -

    452

    -

    453

    +

    451

    +

    452

    +

    453

    454

    -

    455

    +

    455

    456

    457

    458

    459

    460

    -

    461

    +

    461

    462

    -

    463

    +

    463

    464

    465

    466

    -

    467

    +

    467

    468

    469

    -

    470

    +

    470

    471

    -

    472

    +

    472

    473

    -

    474

    +

    474

    475

    476

    477

    -

    478

    +

    478

    479

    480

    -

    481

    +

    481

    482

    483

    484

    485

    486

    487

    -

    488

    -

    489

    +

    488

    +

    489

    490

    -

    491

    -

    492

    +

    491

    +

    492

    493

    494

    495

    496

    -

    497

    +

    497

    498

    499

    -

    500

    +

    500

    501

    -

    502

    +

    502

    503

    504

    505

    @@ -570,12 +570,12 @@

    507

    508

    509

    -

    510

    +

    510

    511

    -

    512

    -

    513

    +

    512

    +

    513

    514

    -

    515

    +

    515

    516

    517

    518

    @@ -586,11 +586,11 @@

    523

    524

    525

    -

    526

    -

    527

    +

    526

    +

    527

    528

    -

    529

    -

    530

    +

    529

    +

    530

    531

    532

    533

    @@ -598,11 +598,11 @@

    535

    536

    537

    -

    538

    -

    539

    +

    538

    +

    539

    540

    -

    541

    -

    542

    +

    541

    +

    542

    543

    544

    545

    @@ -613,11 +613,11 @@

    550

    551

    552

    -

    553

    -

    554

    +

    553

    +

    554

    555

    -

    556

    -

    557

    +

    556

    +

    557

    558

    559

    560

    @@ -627,81 +627,81 @@

    564

    565

    566

    -

    567

    +

    567

    568

    569

    570

    571

    572

    -

    573

    +

    573

    574

    575

    576

    577

    -

    578

    +

    578

    579

    580

    -

    581

    +

    581

    582

    583

    584

    585

    -

    586

    +

    586

    587

    588

    -

    589

    +

    589

    590

    591

    592

    593

    594

    -

    595

    +

    595

    596

    597

    -

    598

    -

    599

    +

    598

    +

    599

    600

    601

    -

    602

    +

    602

    603

    604

    605

    -

    606

    +

    606

    607

    608

    -

    609

    +

    609

    610

    611

    612

    -

    613

    +

    613

    614

    615

    -

    616

    +

    616

    617

    618

    619

    620

    -

    621

    +

    621

    622

    623

    -

    624

    +

    624

    625

    626

    -

    627

    +

    627

    628

    629

    -

    630

    +

    630

    631

    632

    633

    -

    634

    +

    634

    635

    636

    -

    637

    -

    638

    +

    637

    +

    638

    639

    640

    -

    641

    +

    641

    642

    643

    644

    @@ -709,70 +709,136 @@

    646

    647

    648

    -

    649

    +

    649

    650

    651

    -

    652

    +

    652

    653

    654

    -

    655

    +

    655

    656

    657

    -

    658

    +

    658

    659

    660

    661

    662

    663

    -

    664

    +

    664

    665

    -

    666

    -

    667

    +

    666

    +

    667

    668

    -

    669

    +

    669

    670

    671

    -

    672

    +

    672

    673

    -

    674

    +

    674

    675

    676

    677

    678

    679

    680

    -

    681

    +

    681

    682

    683

    -

    684

    -

    685

    -

    686

    -

    687

    -

    688

    -

    689

    -

    690

    -

    691

    +

    684

    +

    685

    +

    686

    +

    687

    +

    688

    +

    689

    +

    690

    +

    691

    692

    -

    693

    -

    694

    +

    693

    +

    694

    695

    -

    696

    -

    697

    +

    696

    +

    697

    698

    699

    700

    701

    702

    -

    703

    -

    704

    -

    705

    -

    706

    -

    707

    -

    708

    +

    703

    +

    704

    +

    705

    +

    706

    +

    707

    +

    708

    709

    710

    711

    -

    712

    +

    712

    +

    713

    +

    714

    +

    715

    +

    716

    +

    717

    +

    718

    +

    719

    +

    720

    +

    721

    +

    722

    +

    723

    +

    724

    +

    725

    +

    726

    +

    727

    +

    728

    +

    729

    +

    730

    +

    731

    +

    732

    +

    733

    +

    734

    +

    735

    +

    736

    +

    737

    +

    738

    +

    739

    +

    740

    +

    741

    +

    742

    +

    743

    +

    744

    +

    745

    +

    746

    +

    747

    +

    748

    +

    749

    +

    750

    +

    751

    +

    752

    +

    753

    +

    754

    +

    755

    +

    756

    +

    757

    +

    758

    +

    759

    +

    760

    +

    761

    +

    762

    +

    763

    +

    764

    +

    765

    +

    766

    +

    767

    +

    768

    +

    769

    +

    770

    +

    771

    +

    772

    +

    773

    +

    774

    +

    775

    +

    776

    +

    777

    +

    778

    diff --git a/docs/joomla/coverage/openzwave_group.html b/docs/joomla/coverage/openzwave_group.html index 493e154e..22e6a3f2 100644 --- a/docs/joomla/coverage/openzwave_group.html +++ b/docs/joomla/coverage/openzwave_group.html @@ -25,9 +25,9 @@

    Coverage for openzwave.group :

    - 30 statements   + 43 statements   0 run - 30 missing + 43 missing 0 excluded

    @@ -87,32 +87,32 @@

    24

    25

    26

    -

    27

    -

    28

    +

    27

    +

    28

    29

    30

    31

    -

    32

    -

    33

    -

    34

    +

    32

    +

    33

    +

    34

    35

    36

    37

    38

    39

    40

    -

    41

    -

    42

    -

    43

    +

    41

    +

    42

    +

    43

    44

    -

    45

    +

    45

    46

    -

    47

    +

    47

    48

    49

    50

    51

    -

    52

    +

    52

    53

    54

    55

    @@ -120,75 +120,75 @@

    57

    58

    59

    -

    60

    +

    60

    61

    -

    62

    -

    63

    +

    62

    +

    63

    64

    -

    65

    +

    65

    66

    -

    67

    -

    68

    +

    67

    +

    68

    69

    70

    71

    72

    -

    73

    +

    73

    74

    75

    76

    77

    -

    78

    +

    78

    79

    -

    80

    +

    80

    81

    -

    82

    +

    82

    83

    84

    -

    85

    +

    85

    86

    -

    87

    +

    87

    88

    89

    -

    90

    +

    90

    91

    -

    92

    +

    92

    93

    94

    -

    95

    +

    95

    96

    -

    97

    +

    97

    98

    99

    -

    100

    +

    100

    101

    -

    102

    +

    102

    103

    104

    -

    105

    +

    105

    106

    -

    107

    +

    107

    108

    109

    -

    110

    +

    110

    111

    112

    -

    113

    +

    113

    114

    -

    115

    +

    115

    116

    117

    -

    118

    +

    118

    119

    120

    -

    121

    +

    121

    122

    -

    123

    +

    123

    124

    125

    -

    126

    +

    126

    127

    -

    128

    +

    128

    129

    130

    131

    @@ -197,14 +197,14 @@

    134

    135

    136

    -

    137

    +

    137

    138

    -

    139

    +

    139

    140

    141

    -

    142

    +

    142

    143

    -

    144

    +

    144

    145

    146

    147

    @@ -213,7 +213,30 @@

    150

    151

    152

    -

    153

    +

    153

    +

    154

    +

    155

    +

    156

    +

    157

    +

    158

    +

    159

    +

    160

    +

    161

    +

    162

    +

    163

    +

    164

    +

    165

    +

    166

    +

    167

    +

    168

    +

    169

    +

    170

    +

    171

    +

    172

    +

    173

    +

    174

    +

    175

    +

    176

    diff --git a/docs/joomla/coverage/openzwave_network.html b/docs/joomla/coverage/openzwave_network.html index 48fe76b7..b53734ea 100644 --- a/docs/joomla/coverage/openzwave_network.html +++ b/docs/joomla/coverage/openzwave_network.html @@ -25,9 +25,9 @@

    Coverage for openzwave.network :

    - 539 statements   + 546 statements   0 run - 539 missing + 546 missing 0 excluded

    @@ -87,18 +87,18 @@

    24

    25

    26

    -

    27

    +

    27

    28

    29

    30

    31

    -

    32

    -

    33

    +

    32

    +

    33

    34

    35

    36

    37

    -

    38

    +

    38

    39

    40

    41

    @@ -106,14 +106,14 @@

    43

    44

    45

    -

    46

    -

    47

    +

    46

    +

    47

    48

    49

    50

    -

    51

    -

    52

    -

    53

    +

    51

    +

    52

    +

    53

    54

    55

    56

    @@ -125,11 +125,11 @@

    62

    63

    64

    -

    65

    -

    66

    -

    67

    +

    65

    +

    66

    +

    67

    68

    -

    69

    +

    69

    70

    71

    72

    @@ -302,11 +302,11 @@

    239

    240

    241

    -

    242

    -

    243

    -

    244

    -

    245

    -

    246

    +

    242

    +

    243

    +

    244

    +

    245

    +

    246

    247

    248

    249

    @@ -340,22 +340,22 @@

    277

    278

    279

    -

    280

    +

    280

    281

    282

    283

    284

    -

    285

    +

    285

    286

    -

    287

    +

    287

    288

    -

    289

    +

    289

    290

    -

    291

    +

    291

    292

    -

    293

    +

    293

    294

    -

    295

    +

    295

    296

    297

    298

    @@ -364,11 +364,11 @@

    301

    302

    303

    -

    304

    -

    305

    -

    306

    -

    307

    -

    308

    +

    304

    +

    305

    +

    306

    +

    307

    +

    308

    309

    310

    311

    @@ -389,55 +389,55 @@

    326

    327

    328

    -

    329

    +

    329

    330

    -

    331

    -

    332

    -

    333

    +

    331

    +

    332

    +

    333

    334

    -

    335

    +

    335

    336

    -

    337

    +

    337

    338

    339

    -

    340

    +

    340

    341

    -

    342

    +

    342

    343

    344

    -

    345

    +

    345

    346

    347

    -

    348

    -

    349

    -

    350

    -

    351

    -

    352

    +

    348

    +

    349

    +

    350

    +

    351

    +

    352

    353

    354

    355

    356

    -

    357

    +

    357

    358

    -

    359

    -

    360

    -

    361

    +

    359

    +

    360

    +

    361

    362

    -

    363

    +

    363

    364

    -

    365

    -

    366

    -

    367

    -

    368

    -

    369

    +

    365

    +

    366

    +

    367

    +

    368

    +

    369

    370

    -

    371

    +

    371

    372

    -

    373

    -

    374

    -

    375

    +

    373

    +

    374

    +

    375

    376

    -

    377

    +

    377

    378

    379

    380

    @@ -445,109 +445,109 @@

    382

    383

    384

    -

    385

    -

    386

    -

    387

    -

    388

    -

    389

    +

    385

    +

    386

    +

    387

    +

    388

    +

    389

    390

    391

    392

    393

    -

    394

    +

    394

    395

    396

    397

    -

    398

    +

    398

    399

    400

    -

    401

    +

    401

    402

    403

    404

    -

    405

    +

    405

    406

    -

    407

    +

    407

    408

    409

    410

    411

    412

    -

    413

    -

    414

    +

    413

    +

    414

    415

    416

    417

    -

    418

    +

    418

    419

    -

    420

    +

    420

    421

    -

    422

    +

    422

    423

    424

    -

    425

    +

    425

    426

    427

    428

    -

    429

    +

    429

    430

    -

    431

    +

    431

    432

    433

    434

    435

    -

    436

    +

    436

    437

    438

    -

    439

    -

    440

    -

    441

    -

    442

    +

    439

    +

    440

    +

    441

    +

    442

    443

    -

    444

    -

    445

    -

    446

    -

    447

    +

    444

    +

    445

    +

    446

    +

    447

    448

    -

    449

    +

    449

    450

    451

    -

    452

    -

    453

    -

    454

    +

    452

    +

    453

    +

    454

    455

    -

    456

    +

    456

    457

    -

    458

    +

    458

    459

    -

    460

    +

    460

    461

    462

    463

    464

    -

    465

    +

    465

    466

    -

    467

    -

    468

    +

    467

    +

    468

    469

    -

    470

    +

    470

    471

    472

    473

    474

    -

    475

    +

    475

    476

    -

    477

    -

    478

    +

    477

    +

    478

    479

    -

    480

    +

    480

    481

    482

    483

    484

    -

    485

    +

    485

    486

    -

    487

    +

    487

    488

    489

    490

    @@ -557,16 +557,16 @@

    494

    495

    496

    -

    497

    +

    497

    498

    -

    499

    +

    499

    500

    501

    502

    503

    -

    504

    +

    504

    505

    -

    506

    +

    506

    507

    508

    509

    @@ -576,115 +576,115 @@

    513

    514

    515

    -

    516

    +

    516

    517

    -

    518

    +

    518

    519

    520

    521

    522

    -

    523

    +

    523

    524

    -

    525

    +

    525

    526

    527

    -

    528

    -

    529

    -

    530

    -

    531

    -

    532

    -

    533

    -

    534

    +

    528

    +

    529

    +

    530

    +

    531

    +

    532

    +

    533

    +

    534

    535

    536

    537

    538

    539

    -

    540

    +

    540

    541

    -

    542

    +

    542

    543

    -

    544

    -

    545

    -

    546

    +

    544

    +

    545

    +

    546

    547

    -

    548

    +

    548

    549

    -

    550

    -

    551

    -

    552

    +

    550

    +

    551

    +

    552

    553

    -

    554

    +

    554

    555

    -

    556

    +

    556

    557

    -

    558

    -

    559

    +

    558

    +

    559

    560

    -

    561

    +

    561

    562

    -

    563

    +

    563

    564

    -

    565

    -

    566

    +

    565

    +

    566

    567

    -

    568

    +

    568

    569

    -

    570

    +

    570

    571

    -

    572

    -

    573

    +

    572

    +

    573

    574

    -

    575

    +

    575

    576

    -

    577

    -

    578

    +

    577

    +

    578

    579

    -

    580

    +

    580

    581

    582

    583

    584

    -

    585

    +

    585

    586

    587

    -

    588

    -

    589

    -

    590

    +

    588

    +

    589

    +

    590

    591

    -

    592

    +

    592

    593

    594

    595

    596

    -

    597

    -

    598

    +

    597

    +

    598

    599

    600

    -

    601

    +

    601

    602

    -

    603

    -

    604

    -

    605

    -

    606

    -

    607

    -

    608

    +

    603

    +

    604

    +

    605

    +

    606

    +

    607

    +

    608

    609

    -

    610

    +

    610

    611

    -

    612

    -

    613

    -

    614

    -

    615

    -

    616

    -

    617

    -

    618

    +

    612

    +

    613

    +

    614

    +

    615

    +

    616

    +

    617

    +

    618

    619

    620

    -

    621

    -

    622

    -

    623

    -

    624

    +

    621

    +

    622

    +

    623

    +

    624

    625

    626

    627

    @@ -692,15 +692,15 @@

    629

    630

    631

    -

    632

    -

    633

    +

    632

    +

    633

    634

    635

    -

    636

    -

    637

    -

    638

    +

    636

    +

    637

    +

    638

    639

    -

    640

    +

    640

    641

    642

    643

    @@ -709,11 +709,11 @@

    646

    647

    648

    -

    649

    -

    650

    -

    651

    +

    649

    +

    650

    +

    651

    652

    -

    653

    +

    653

    654

    655

    656

    @@ -721,31 +721,31 @@

    658

    659

    660

    -

    661

    -

    662

    +

    661

    +

    662

    663

    -

    664

    -

    665

    -

    666

    +

    664

    +

    665

    +

    666

    667

    -

    668

    +

    668

    669

    670

    671

    672

    673

    674

    -

    675

    -

    676

    -

    677

    -

    678

    -

    679

    -

    680

    +

    675

    +

    676

    +

    677

    +

    678

    +

    679

    +

    680

    681

    -

    682

    -

    683

    +

    682

    +

    683

    684

    -

    685

    +

    685

    686

    687

    688

    @@ -754,21 +754,21 @@

    691

    692

    693

    -

    694

    +

    694

    695

    -

    696

    +

    696

    697

    -

    698

    +

    698

    699

    700

    701

    702

    703

    -

    704

    +

    704

    705

    706

    707

    -

    708

    +

    708

    709

    710

    711

    @@ -777,41 +777,41 @@

    714

    715

    716

    -

    717

    -

    718

    +

    717

    +

    718

    719

    -

    720

    -

    721

    -

    722

    +

    720

    +

    721

    +

    722

    723

    -

    724

    +

    724

    725

    726

    727

    728

    729

    730

    -

    731

    -

    732

    -

    733

    -

    734

    -

    735

    -

    736

    +

    731

    +

    732

    +

    733

    +

    734

    +

    735

    +

    736

    737

    738

    -

    739

    +

    739

    740

    -

    741

    +

    741

    742

    743

    744

    745

    746

    747

    -

    748

    +

    748

    749

    750

    -

    751

    +

    751

    752

    753

    754

    @@ -822,8 +822,8 @@

    759

    760

    761

    -

    762

    -

    763

    +

    762

    +

    763

    764

    765

    766

    @@ -838,16 +838,16 @@

    775

    776

    777

    -

    778

    -

    779

    -

    780

    -

    781

    -

    782

    -

    783

    +

    778

    +

    779

    +

    780

    +

    781

    +

    782

    +

    783

    784

    -

    785

    -

    786

    -

    787

    +

    785

    +

    786

    +

    787

    788

    789

    790

    @@ -857,72 +857,72 @@

    794

    795

    796

    -

    797

    +

    797

    798

    -

    799

    -

    800

    -

    801

    +

    799

    +

    800

    +

    801

    802

    -

    803

    +

    803

    804

    805

    806

    807

    -

    808

    +

    808

    809

    -

    810

    +

    810

    811

    812

    -

    813

    +

    813

    814

    -

    815

    +

    815

    816

    817

    818

    819

    -

    820

    +

    820

    821

    -

    822

    +

    822

    823

    -

    824

    +

    824

    825

    -

    826

    +

    826

    827

    828

    829

    -

    830

    +

    830

    831

    -

    832

    +

    832

    833

    834

    835

    -

    836

    +

    836

    837

    -

    838

    +

    838

    839

    -

    840

    -

    841

    -

    842

    -

    843

    -

    844

    +

    840

    +

    841

    +

    842

    +

    843

    +

    844

    845

    846

    847

    -

    848

    +

    848

    849

    850

    851

    852

    853

    -

    854

    +

    854

    855

    856

    -

    857

    -

    858

    -

    859

    -

    860

    +

    857

    +

    858

    +

    859

    +

    860

    861

    -

    862

    +

    862

    863

    864

    865

    @@ -930,14 +930,14 @@

    867

    868

    869

    -

    870

    +

    870

    871

    -

    872

    +

    872

    873

    874

    -

    875

    +

    875

    876

    -

    877

    +

    877

    878

    879

    880

    @@ -951,9 +951,9 @@

    888

    889

    890

    -

    891

    +

    891

    892

    -

    893

    +

    893

    894

    895

    896

    @@ -963,22 +963,22 @@

    900

    901

    902

    -

    903

    -

    904

    -

    905

    -

    906

    -

    907

    -

    908

    -

    909

    -

    910

    -

    911

    -

    912

    -

    913

    -

    914

    -

    915

    -

    916

    -

    917

    -

    918

    +

    903

    +

    904

    +

    905

    +

    906

    +

    907

    +

    908

    +

    909

    +

    910

    +

    911

    +

    912

    +

    913

    +

    914

    +

    915

    +

    916

    +

    917

    +

    918

    919

    920

    921

    @@ -1026,31 +1026,31 @@

    963

    964

    965

    -

    966

    +

    966

    967

    968

    969

    970

    -

    971

    +

    971

    972

    -

    973

    -

    974

    -

    975

    -

    976

    -

    977

    -

    978

    -

    979

    -

    980

    -

    981

    -

    982

    +

    973

    +

    974

    +

    975

    +

    976

    +

    977

    +

    978

    +

    979

    +

    980

    +

    981

    +

    982

    983

    984

    985

    986

    -

    987

    +

    987

    988

    989

    -

    990

    +

    990

    991

    992

    993

    @@ -1058,99 +1058,99 @@

    995

    996

    997

    -

    998

    -

    999

    -

    1000

    -

    1001

    +

    998

    +

    999

    +

    1000

    +

    1001

    1002

    1003

    1004

    -

    1005

    +

    1005

    1006

    -

    1007

    -

    1008

    -

    1009

    -

    1010

    -

    1011

    -

    1012

    -

    1013

    +

    1007

    +

    1008

    +

    1009

    +

    1010

    +

    1011

    +

    1012

    +

    1013

    1014

    -

    1015

    -

    1016

    +

    1015

    +

    1016

    1017

    1018

    1019

    1020

    -

    1021

    +

    1021

    1022

    1023

    1024

    -

    1025

    +

    1025

    1026

    -

    1027

    +

    1027

    1028

    -

    1029

    +

    1029

    1030

    -

    1031

    -

    1032

    +

    1031

    +

    1032

    1033

    -

    1034

    -

    1035

    -

    1036

    +

    1034

    +

    1035

    +

    1036

    1037

    -

    1038

    -

    1039

    -

    1040

    +

    1038

    +

    1039

    +

    1040

    1041

    -

    1042

    -

    1043

    +

    1042

    +

    1043

    1044

    -

    1045

    -

    1046

    +

    1045

    +

    1046

    1047

    1048

    -

    1049

    +

    1049

    1050

    -

    1051

    +

    1051

    1052

    1053

    -

    1054

    +

    1054

    1055

    -

    1056

    +

    1056

    1057

    1058

    -

    1059

    -

    1060

    -

    1061

    -

    1062

    +

    1059

    +

    1060

    +

    1061

    +

    1062

    1063

    1064

    -

    1065

    +

    1065

    1066

    1067

    -

    1068

    -

    1069

    +

    1068

    +

    1069

    1070

    -

    1071

    -

    1072

    +

    1071

    +

    1072

    1073

    -

    1074

    +

    1074

    1075

    -

    1076

    +

    1076

    1077

    1078

    1079

    1080

    1081

    1082

    -

    1083

    -

    1084

    -

    1085

    -

    1086

    -

    1087

    -

    1088

    -

    1089

    -

    1090

    +

    1083

    +

    1084

    +

    1085

    +

    1086

    +

    1087

    +

    1088

    +

    1089

    +

    1090

    1091

    1092

    1093

    @@ -1180,35 +1180,35 @@

    1117

    1118

    1119

    -

    1120

    +

    1120

    1121

    -

    1122

    -

    1123

    +

    1122

    +

    1123

    1124

    -

    1125

    -

    1126

    +

    1125

    +

    1126

    1127

    -

    1128

    +

    1128

    1129

    -

    1130

    +

    1130

    1131

    -

    1132

    +

    1132

    1133

    1134

    1135

    1136

    -

    1137

    -

    1138

    -

    1139

    -

    1140

    -

    1141

    +

    1137

    +

    1138

    +

    1139

    +

    1140

    +

    1141

    1142

    -

    1143

    -

    1144

    +

    1143

    +

    1144

    1145

    -

    1146

    -

    1147

    -

    1148

    +

    1146

    +

    1147

    +

    1148

    1149

    1150

    1151

    @@ -1218,9 +1218,9 @@

    1155

    1156

    1157

    -

    1158

    +

    1158

    1159

    -

    1160

    +

    1160

    1161

    1162

    1163

    @@ -1234,10 +1234,10 @@

    1171

    1172

    1173

    -

    1174

    +

    1174

    1175

    -

    1176

    -

    1177

    +

    1176

    +

    1177

    1178

    1179

    1180

    @@ -1247,15 +1247,15 @@

    1184

    1185

    1186

    -

    1187

    -

    1188

    +

    1187

    +

    1188

    1189

    -

    1190

    +

    1190

    1191

    1192

    -

    1193

    +

    1193

    1194

    -

    1195

    +

    1195

    1196

    1197

    1198

    @@ -1266,9 +1266,9 @@

    1203

    1204

    1205

    -

    1206

    -

    1207

    -

    1208

    +

    1206

    +

    1207

    +

    1208

    1209

    1210

    1211

    @@ -1279,37 +1279,37 @@

    1216

    1217

    1218

    -

    1219

    -

    1220

    -

    1221

    +

    1219

    +

    1220

    +

    1221

    1222

    -

    1223

    +

    1223

    1224

    -

    1225

    -

    1226

    -

    1227

    +

    1225

    +

    1226

    +

    1227

    1228

    -

    1229

    +

    1229

    1230

    -

    1231

    +

    1231

    1232

    -

    1233

    +

    1233

    1234

    1235

    1236

    -

    1237

    -

    1238

    -

    1239

    -

    1240

    -

    1241

    -

    1242

    -

    1243

    -

    1244

    +

    1237

    +

    1238

    +

    1239

    +

    1240

    +

    1241

    +

    1242

    +

    1243

    +

    1244

    1245

    1246

    -

    1247

    -

    1248

    -

    1249

    +

    1247

    +

    1248

    +

    1249

    1250

    1251

    1252

    @@ -1320,15 +1320,15 @@

    1257

    1258

    1259

    -

    1260

    +

    1260

    1261

    1262

    -

    1263

    +

    1263

    1264

    1265

    -

    1266

    +

    1266

    1267

    -

    1268

    +

    1268

    1269

    1270

    1271

    @@ -1337,15 +1337,15 @@

    1274

    1275

    1276

    -

    1277

    +

    1277

    1278

    -

    1279

    +

    1279

    1280

    -

    1281

    +

    1281

    1282

    -

    1283

    -

    1284

    -

    1285

    +

    1283

    +

    1284

    +

    1285

    1286

    1287

    1288

    @@ -1356,14 +1356,14 @@

    1293

    1294

    1295

    -

    1296

    +

    1296

    1297

    1298

    1299

    -

    1300

    -

    1301

    +

    1300

    +

    1301

    1302

    -

    1303

    +

    1303

    1304

    1305

    1306

    @@ -1373,41 +1373,41 @@

    1310

    1311

    1312

    -

    1313

    -

    1314

    -

    1315

    -

    1316

    -

    1317

    -

    1318

    +

    1313

    +

    1314

    +

    1315

    +

    1316

    +

    1317

    +

    1318

    1319

    -

    1320

    -

    1321

    -

    1322

    -

    1323

    +

    1320

    +

    1321

    +

    1322

    +

    1323

    1324

    -

    1325

    -

    1326

    -

    1327

    +

    1325

    +

    1326

    +

    1327

    1328

    -

    1329

    +

    1329

    1330

    -

    1331

    +

    1331

    1332

    -

    1333

    -

    1334

    -

    1335

    -

    1336

    -

    1337

    -

    1338

    -

    1339

    +

    1333

    +

    1334

    +

    1335

    +

    1336

    +

    1337

    +

    1338

    +

    1339

    1340

    -

    1341

    +

    1341

    1342

    1343

    1344

    -

    1345

    -

    1346

    -

    1347

    +

    1345

    +

    1346

    +

    1347

    1348

    1349

    1350

    @@ -1417,12 +1417,12 @@

    1354

    1355

    1356

    -

    1357

    +

    1357

    1358

    -

    1359

    +

    1359

    1360

    -

    1361

    -

    1362

    +

    1361

    +

    1362

    1363

    1364

    1365

    @@ -1431,13 +1431,13 @@

    1368

    1369

    1370

    -

    1371

    -

    1372

    -

    1373

    -

    1374

    -

    1375

    +

    1371

    +

    1372

    +

    1373

    +

    1374

    +

    1375

    1376

    -

    1377

    +

    1377

    1378

    1379

    1380

    @@ -1445,13 +1445,13 @@

    1382

    1383

    1384

    -

    1385

    -

    1386

    -

    1387

    -

    1388

    -

    1389

    +

    1385

    +

    1386

    +

    1387

    +

    1388

    +

    1389

    1390

    -

    1391

    +

    1391

    1392

    1393

    1394

    @@ -1459,13 +1459,13 @@

    1396

    1397

    1398

    -

    1399

    -

    1400

    -

    1401

    -

    1402

    -

    1403

    +

    1399

    +

    1400

    +

    1401

    +

    1402

    +

    1403

    1404

    -

    1405

    +

    1405

    1406

    1407

    1408

    @@ -1473,13 +1473,13 @@

    1410

    1411

    1412

    -

    1413

    -

    1414

    -

    1415

    -

    1416

    -

    1417

    +

    1413

    +

    1414

    +

    1415

    +

    1416

    +

    1417

    1418

    -

    1419

    +

    1419

    1420

    1421

    1422

    @@ -1489,14 +1489,14 @@

    1426

    1427

    1428

    -

    1429

    -

    1430

    -

    1431

    -

    1432

    -

    1433

    +

    1429

    +

    1430

    +

    1431

    +

    1432

    +

    1433

    1434

    1435

    -

    1436

    +

    1436

    1437

    1438

    1439

    @@ -1507,21 +1507,21 @@

    1444

    1445

    1446

    -

    1447

    -

    1448

    +

    1447

    +

    1448

    1449

    1450

    1451

    -

    1452

    -

    1453

    -

    1454

    -

    1455

    +

    1452

    +

    1453

    +

    1454

    +

    1455

    1456

    1457

    1458

    -

    1459

    +

    1459

    1460

    -

    1461

    +

    1461

    1462

    1463

    1464

    @@ -1529,88 +1529,88 @@

    1466

    1467

    1468

    -

    1469

    -

    1470

    -

    1471

    +

    1469

    +

    1470

    +

    1471

    1472

    1473

    1474

    1475

    -

    1476

    +

    1476

    1477

    -

    1478

    -

    1479

    -

    1480

    +

    1478

    +

    1479

    +

    1480

    1481

    1482

    -

    1483

    +

    1483

    1484

    -

    1485

    +

    1485

    1486

    1487

    1488

    1489

    1490

    -

    1491

    -

    1492

    -

    1493

    -

    1494

    -

    1495

    -

    1496

    +

    1491

    +

    1492

    +

    1493

    +

    1494

    +

    1495

    +

    1496

    1497

    -

    1498

    +

    1498

    1499

    -

    1500

    +

    1500

    1501

    -

    1502

    -

    1503

    +

    1502

    +

    1503

    1504

    1505

    -

    1506

    +

    1506

    1507

    -

    1508

    +

    1508

    1509

    1510

    1511

    1512

    1513

    -

    1514

    -

    1515

    -

    1516

    -

    1517

    -

    1518

    -

    1519

    +

    1514

    +

    1515

    +

    1516

    +

    1517

    +

    1518

    +

    1519

    1520

    1521

    1522

    -

    1523

    +

    1523

    1524

    -

    1525

    -

    1526

    -

    1527

    -

    1528

    +

    1525

    +

    1526

    +

    1527

    +

    1528

    1529

    1530

    1531

    -

    1532

    +

    1532

    1533

    -

    1534

    +

    1534

    1535

    1536

    1537

    -

    1538

    -

    1539

    -

    1540

    -

    1541

    -

    1542

    -

    1543

    +

    1538

    +

    1539

    +

    1540

    +

    1541

    +

    1542

    +

    1543

    1544

    -

    1545

    +

    1545

    1546

    1547

    1548

    1549

    -

    1550

    +

    1550

    1551

    1552

    1553

    @@ -1618,33 +1618,33 @@

    1555

    1556

    1557

    -

    1558

    -

    1559

    -

    1560

    -

    1561

    -

    1562

    +

    1558

    +

    1559

    +

    1560

    +

    1561

    +

    1562

    1563

    -

    1564

    +

    1564

    1565

    1566

    -

    1567

    -

    1568

    +

    1567

    +

    1568

    1569

    1570

    1571

    1572

    1573

    -

    1574

    -

    1575

    +

    1574

    +

    1575

    1576

    1577

    -

    1578

    +

    1578

    1579

    1580

    1581

    1582

    -

    1583

    -

    1584

    +

    1583

    +

    1584

    1585

    1586

    1587

    @@ -1667,13 +1667,29 @@

    1604

    1605

    1606

    -

    1607

    +

    1607

    1608

    1609

    1610

    1611

    -

    1612

    +

    1612

    1613

    +

    1614

    +

    1615

    +

    1616

    +

    1617

    +

    1618

    +

    1619

    +

    1620

    +

    1621

    +

    1622

    +

    1623

    +

    1624

    +

    1625

    +

    1626

    +

    1627

    +

    1628

    +

    1629

    diff --git a/docs/joomla/coverage/openzwave_node.html b/docs/joomla/coverage/openzwave_node.html index f05e3db2..8225ebf9 100644 --- a/docs/joomla/coverage/openzwave_node.html +++ b/docs/joomla/coverage/openzwave_node.html @@ -25,9 +25,9 @@

    Coverage for openzwave.node :

    - 204 statements   + 228 statements   0 run - 204 missing + 228 missing 0 excluded

    @@ -91,178 +91,178 @@

    28

    29

    30

    -

    31

    -

    32

    +

    31

    +

    32

    33

    34

    35

    -

    36

    -

    37

    -

    38

    +

    36

    +

    37

    +

    38

    39

    40

    41

    42

    43

    44

    -

    45

    -

    46

    -

    47

    +

    45

    +

    46

    +

    47

    48

    -

    49

    +

    49

    50

    51

    -

    52

    +

    52

    53

    -

    54

    +

    54

    55

    56

    -

    57

    +

    57

    58

    -

    59

    +

    59

    60

    61

    62

    63

    -

    64

    -

    65

    +

    64

    +

    65

    66

    -

    67

    -

    68

    +

    67

    +

    68

    69

    -

    70

    -

    71

    -

    72

    -

    73

    -

    74

    +

    70

    +

    71

    +

    72

    +

    73

    +

    74

    75

    -

    76

    +

    76

    77

    -

    78

    +

    78

    79

    80

    -

    81

    +

    81

    82

    -

    83

    +

    83

    84

    85

    -

    86

    +

    86

    87

    88

    -

    89

    +

    89

    90

    -

    91

    +

    91

    92

    93

    -

    94

    +

    94

    95

    -

    96

    +

    96

    97

    98

    -

    99

    +

    99

    100

    -

    101

    +

    101

    102

    103

    -

    104

    +

    104

    105

    -

    106

    +

    106

    107

    108

    109

    -

    110

    +

    110

    111

    -

    112

    +

    112

    113

    114

    -

    115

    +

    115

    116

    -

    117

    +

    117

    118

    119

    -

    120

    +

    120

    121

    -

    122

    +

    122

    123

    124

    -

    125

    +

    125

    126

    -

    127

    +

    127

    128

    129

    130

    -

    131

    +

    131

    132

    -

    133

    +

    133

    134

    135

    -

    136

    +

    136

    137

    -

    138

    +

    138

    139

    140

    -

    141

    +

    141

    142

    -

    143

    +

    143

    144

    145

    -

    146

    +

    146

    147

    -

    148

    +

    148

    149

    150

    151

    -

    152

    +

    152

    153

    -

    154

    +

    154

    155

    156

    -

    157

    +

    157

    158

    -

    159

    +

    159

    160

    161

    -

    162

    +

    162

    163

    -

    164

    +

    164

    165

    166

    -

    167

    +

    167

    168

    -

    169

    +

    169

    170

    171

    -

    172

    +

    172

    173

    -

    174

    +

    174

    175

    176

    -

    177

    +

    177

    178

    -

    179

    +

    179

    180

    -

    181

    -

    182

    -

    183

    -

    184

    -

    185

    -

    186

    -

    187

    -

    188

    +

    181

    +

    182

    +

    183

    +

    184

    +

    185

    +

    186

    +

    187

    +

    188

    189

    190

    191

    192

    193

    -

    194

    +

    194

    195

    -

    196

    -

    197

    -

    198

    -

    199

    -

    200

    -

    201

    -

    202

    +

    196

    +

    197

    +

    198

    +

    199

    +

    200

    +

    201

    +

    202

    203

    204

    205

    @@ -270,54 +270,54 @@

    207

    208

    209

    -

    210

    +

    210

    211

    -

    212

    -

    213

    -

    214

    -

    215

    -

    216

    -

    217

    +

    212

    +

    213

    +

    214

    +

    215

    +

    216

    +

    217

    218

    219

    -

    220

    -

    221

    -

    222

    -

    223

    -

    224

    -

    225

    -

    226

    +

    220

    +

    221

    +

    222

    +

    223

    +

    224

    +

    225

    +

    226

    227

    -

    228

    +

    228

    229

    -

    230

    -

    231

    -

    232

    -

    233

    +

    230

    +

    231

    +

    232

    +

    233

    234

    -

    235

    +

    235

    236

    -

    237

    +

    237

    238

    -

    239

    +

    239

    240

    241

    242

    -

    243

    +

    243

    244

    -

    245

    +

    245

    246

    247

    248

    249

    250

    -

    251

    -

    252

    +

    251

    +

    252

    253

    -

    254

    +

    254

    255

    256

    -

    257

    +

    257

    258

    259

    260

    @@ -327,14 +327,14 @@

    264

    265

    266

    -

    267

    +

    267

    268

    269

    270

    271

    -

    272

    -

    273

    -

    274

    +

    272

    +

    273

    +

    274

    275

    276

    277

    @@ -342,69 +342,69 @@

    279

    280

    281

    -

    282

    -

    283

    +

    282

    +

    283

    284

    -

    285

    -

    286

    -

    287

    +

    285

    +

    286

    +

    287

    288

    -

    289

    +

    289

    290

    291

    -

    292

    -

    293

    -

    294

    -

    295

    -

    296

    +

    292

    +

    293

    +

    294

    +

    295

    +

    296

    297

    -

    298

    +

    298

    299

    -

    300

    -

    301

    -

    302

    -

    303

    -

    304

    +

    300

    +

    301

    +

    302

    +

    303

    +

    304

    305

    306

    -

    307

    -

    308

    -

    309

    -

    310

    +

    307

    +

    308

    +

    309

    +

    310

    311

    -

    312

    +

    312

    313

    -

    314

    +

    314

    315

    -

    316

    +

    316

    317

    318

    319

    320

    -

    321

    +

    321

    322

    -

    323

    -

    324

    -

    325

    -

    326

    -

    327

    -

    328

    +

    323

    +

    324

    +

    325

    +

    326

    +

    327

    +

    328

    329

    330

    331

    -

    332

    +

    332

    333

    334

    335

    336

    337

    -

    338

    -

    339

    -

    340

    -

    341

    -

    342

    +

    338

    +

    339

    +

    340

    +

    341

    +

    342

    343

    -

    344

    +

    344

    345

    346

    347

    @@ -414,14 +414,14 @@

    351

    352

    353

    -

    354

    +

    354

    355

    356

    357

    358

    -

    359

    -

    360

    -

    361

    +

    359

    +

    360

    +

    361

    362

    363

    364

    @@ -438,38 +438,38 @@

    375

    376

    377

    -

    378

    +

    378

    379

    -

    380

    +

    380

    381

    382

    383

    384

    -

    385

    -

    386

    -

    387

    +

    385

    +

    386

    +

    387

    388

    389

    390

    -

    391

    -

    392

    -

    393

    -

    394

    +

    391

    +

    392

    +

    393

    +

    394

    395

    -

    396

    +

    396

    397

    398

    399

    400

    401

    -

    402

    -

    403

    -

    404

    +

    402

    +

    403

    +

    404

    405

    406

    407

    408

    -

    409

    +

    409

    410

    411

    412

    @@ -483,10 +483,10 @@

    420

    421

    422

    -

    423

    -

    424

    +

    423

    +

    424

    425

    -

    426

    +

    426

    427

    428

    429

    @@ -494,54 +494,54 @@

    431

    432

    433

    -

    434

    +

    434

    435

    -

    436

    -

    437

    +

    436

    +

    437

    438

    439

    440

    -

    441

    -

    442

    +

    441

    +

    442

    443

    -

    444

    +

    444

    445

    -

    446

    +

    446

    447

    -

    448

    +

    448

    449

    450

    451

    452

    453

    -

    454

    -

    455

    -

    456

    -

    457

    -

    458

    +

    454

    +

    455

    +

    456

    +

    457

    +

    458

    459

    -

    460

    -

    461

    -

    462

    +

    460

    +

    461

    +

    462

    463

    -

    464

    +

    464

    465

    466

    467

    468

    469

    -

    470

    -

    471

    +

    470

    +

    471

    472

    -

    473

    +

    473

    474

    -

    475

    -

    476

    -

    477

    -

    478

    -

    479

    -

    480

    -

    481

    +

    475

    +

    476

    +

    477

    +

    478

    +

    479

    +

    480

    +

    481

    482

    483

    484

    @@ -563,160 +563,160 @@

    500

    501

    502

    -

    503

    +

    503

    504

    505

    -

    506

    -

    507

    -

    508

    -

    509

    +

    506

    +

    507

    +

    508

    +

    509

    510

    -

    511

    +

    511

    512

    -

    513

    +

    513

    514

    -

    515

    +

    515

    516

    517

    518

    519

    520

    521

    -

    522

    -

    523

    +

    522

    +

    523

    524

    -

    525

    +

    525

    526

    -

    527

    -

    528

    -

    529

    +

    527

    +

    528

    +

    529

    530

    -

    531

    +

    531

    532

    533

    -

    534

    +

    534

    535

    -

    536

    +

    536

    537

    538

    539

    -

    540

    +

    540

    541

    -

    542

    +

    542

    543

    -

    544

    +

    544

    545

    -

    546

    +

    546

    547

    548

    549

    -

    550

    +

    550

    551

    -

    552

    +

    552

    553

    554

    -

    555

    +

    555

    556

    -

    557

    +

    557

    558

    559

    -

    560

    +

    560

    561

    -

    562

    +

    562

    563

    564

    565

    -

    566

    +

    566

    567

    -

    568

    +

    568

    569

    570

    -

    571

    +

    571

    572

    -

    573

    +

    573

    574

    575

    576

    -

    577

    +

    577

    578

    -

    579

    +

    579

    580

    -

    581

    +

    581

    582

    -

    583

    +

    583

    584

    585

    586

    -

    587

    +

    587

    588

    -

    589

    +

    589

    590

    -

    591

    +

    591

    592

    -

    593

    +

    593

    594

    595

    596

    -

    597

    +

    597

    598

    -

    599

    +

    599

    600

    601

    -

    602

    +

    602

    603

    -

    604

    +

    604

    605

    606

    -

    607

    +

    607

    608

    -

    609

    +

    609

    610

    611

    612

    -

    613

    +

    613

    614

    -

    615

    +

    615

    616

    -

    617

    +

    617

    618

    -

    619

    +

    619

    620

    621

    622

    623

    -

    624

    +

    624

    625

    -

    626

    -

    627

    +

    626

    +

    627

    628

    -

    629

    +

    629

    630

    631

    632

    633

    -

    634

    +

    634

    635

    -

    636

    -

    637

    +

    636

    +

    637

    638

    -

    639

    +

    639

    640

    641

    642

    643

    -

    644

    +

    644

    645

    -

    646

    -

    647

    +

    646

    +

    647

    648

    649

    650

    651

    652

    653

    -

    654

    +

    654

    655

    -

    656

    +

    656

    657

    658

    659

    @@ -724,9 +724,9 @@

    661

    662

    663

    -

    664

    +

    664

    665

    -

    666

    +

    666

    667

    668

    669

    @@ -734,9 +734,9 @@

    671

    672

    673

    -

    674

    +

    674

    675

    -

    676

    +

    676

    677

    678

    679

    @@ -744,7 +744,7 @@

    681

    682

    683

    -

    684

    +

    684

    685

    686

    687

    @@ -752,7 +752,7 @@

    689

    690

    691

    -

    692

    +

    692

    693

    694

    695

    @@ -768,17 +768,17 @@

    705

    706

    707

    -

    708

    +

    708

    709

    -

    710

    +

    710

    711

    712

    713

    714

    -

    715

    -

    716

    +

    715

    +

    716

    717

    -

    718

    +

    718

    719

    720

    721

    @@ -793,15 +793,15 @@

    730

    731

    732

    -

    733

    +

    733

    734

    735

    -

    736

    -

    737

    +

    736

    +

    737

    738

    739

    740

    -

    741

    +

    741

    742

    743

    744

    @@ -815,17 +815,17 @@

    752

    753

    754

    -

    755

    +

    755

    756

    -

    757

    +

    757

    758

    -

    759

    -

    760

    +

    759

    +

    760

    761

    -

    762

    -

    763

    +

    762

    +

    763

    764

    -

    765

    +

    765

    766

    767

    768

    @@ -840,17 +840,17 @@

    777

    778

    779

    -

    780

    +

    780

    781

    782

    -

    783

    -

    784

    +

    783

    +

    784

    785

    -

    786

    +

    786

    787

    -

    788

    +

    788

    789

    -

    790

    +

    790

    791

    792

    793

    @@ -859,19 +859,19 @@

    796

    797

    798

    -

    799

    +

    799

    800

    -

    801

    +

    801

    802

    803

    804

    805

    -

    806

    -

    807

    +

    806

    +

    807

    808

    -

    809

    +

    809

    810

    -

    811

    +

    811

    812

    813

    814

    @@ -879,37 +879,84 @@

    816

    817

    818

    -

    819

    +

    819

    820

    -

    821

    +

    821

    822

    823

    824

    825

    826

    -

    827

    +

    827

    828

    829

    830

    -

    831

    +

    831

    832

    -

    833

    +

    833

    834

    -

    835

    +

    835

    836

    -

    837

    +

    837

    838

    839

    840

    -

    841

    +

    841

    842

    -

    843

    +

    843

    844

    845

    -

    846

    +

    846

    847

    -

    848

    -

    849

    +

    848

    +

    849

    +

    850

    +

    851

    +

    852

    +

    853

    +

    854

    +

    855

    +

    856

    +

    857

    +

    858

    +

    859

    +

    860

    +

    861

    +

    862

    +

    863

    +

    864

    +

    865

    +

    866

    +

    867

    +

    868

    +

    869

    +

    870

    +

    871

    +

    872

    +

    873

    +

    874

    +

    875

    +

    876

    +

    877

    +

    878

    +

    879

    +

    880

    +

    881

    +

    882

    +

    883

    +

    884

    +

    885

    +

    886

    +

    887

    +

    888

    +

    889

    +

    890

    +

    891

    +

    892

    +

    893

    +

    894

    +

    895

    +

    896

    diff --git a/docs/joomla/coverage/openzwave_object.html b/docs/joomla/coverage/openzwave_object.html index 8e08ad3c..b0fdadc0 100644 --- a/docs/joomla/coverage/openzwave_object.html +++ b/docs/joomla/coverage/openzwave_object.html @@ -25,9 +25,9 @@

    Coverage for openzwave.object :

    - 126 statements   + 131 statements   0 run - 126 missing + 131 missing 0 excluded

    @@ -86,149 +86,149 @@

    23

    24

    25

    -

    26

    +

    26

    27

    28

    29

    30

    -

    31

    -

    32

    +

    31

    +

    32

    33

    34

    35

    36

    37

    38

    -

    39

    -

    40

    -

    41

    -

    42

    +

    39

    +

    40

    +

    41

    +

    42

    43

    -

    44

    -

    45

    +

    44

    +

    45

    46

    47

    48

    -

    49

    +

    49

    50

    51

    -

    52

    -

    53

    -

    54

    +

    52

    +

    53

    +

    54

    55

    -

    56

    -

    57

    +

    56

    +

    57

    58

    59

    60

    -

    61

    +

    61

    62

    63

    -

    64

    -

    65

    -

    66

    +

    64

    +

    65

    +

    66

    67

    -

    68

    -

    69

    +

    68

    +

    69

    70

    71

    72

    -

    73

    +

    73

    74

    75

    -

    76

    -

    77

    -

    78

    +

    76

    +

    77

    +

    78

    79

    -

    80

    -

    81

    +

    80

    +

    81

    82

    83

    84

    -

    85

    +

    85

    86

    87

    -

    88

    -

    89

    +

    88

    +

    89

    90

    -

    91

    -

    92

    +

    91

    +

    92

    93

    94

    95

    96

    -

    97

    +

    97

    98

    99

    100

    101

    -

    102

    -

    103

    -

    104

    -

    105

    -

    106

    +

    102

    +

    103

    +

    104

    +

    105

    +

    106

    107

    108

    -

    109

    +

    109

    110

    -

    111

    +

    111

    112

    -

    113

    +

    113

    114

    -

    115

    +

    115

    116

    -

    117

    +

    117

    118

    119

    -

    120

    +

    120

    121

    -

    122

    +

    122

    123

    124

    -

    125

    +

    125

    126

    -

    127

    +

    127

    128

    129

    -

    130

    +

    130

    131

    -

    132

    +

    132

    133

    134

    -

    135

    +

    135

    136

    -

    137

    +

    137

    138

    139

    -

    140

    +

    140

    141

    -

    142

    +

    142

    143

    144

    -

    145

    +

    145

    146

    -

    147

    +

    147

    148

    149

    -

    150

    +

    150

    151

    -

    152

    +

    152

    153

    154

    -

    155

    +

    155

    156

    -

    157

    +

    157

    158

    159

    160

    -

    161

    +

    161

    162

    -

    163

    +

    163

    164

    165

    -

    166

    +

    166

    167

    -

    168

    +

    168

    169

    170

    171

    @@ -238,140 +238,140 @@

    175

    176

    177

    -

    178

    +

    178

    179

    -

    180

    +

    180

    181

    182

    -

    183

    +

    183

    184

    -

    185

    +

    185

    186

    187

    188

    -

    189

    -

    190

    -

    191

    -

    192

    -

    193

    -

    194

    +

    189

    +

    190

    +

    191

    +

    192

    +

    193

    +

    194

    195

    -

    196

    +

    196

    197

    -

    198

    -

    199

    -

    200

    +

    198

    +

    199

    +

    200

    201

    -

    202

    +

    202

    203

    -

    204

    +

    204

    205

    206

    207

    -

    208

    -

    209

    +

    208

    +

    209

    210

    -

    211

    +

    211

    212

    -

    213

    +

    213

    214

    215

    216

    217

    -

    218

    -

    219

    +

    218

    +

    219

    220

    -

    221

    +

    221

    222

    -

    223

    +

    223

    224

    225

    -

    226

    -

    227

    -

    228

    -

    229

    +

    226

    +

    227

    +

    228

    +

    229

    230

    231

    -

    232

    +

    232

    233

    -

    234

    +

    234

    235

    -

    236

    +

    236

    237

    -

    238

    +

    238

    239

    240

    -

    241

    -

    242

    -

    243

    -

    244

    -

    245

    +

    241

    +

    242

    +

    243

    +

    244

    +

    245

    246

    247

    248

    249

    -

    250

    +

    250

    251

    -

    252

    +

    252

    253

    -

    254

    +

    254

    255

    -

    256

    +

    256

    257

    -

    258

    +

    258

    259

    260

    -

    261

    -

    262

    +

    261

    +

    262

    263

    -

    264

    +

    264

    265

    266

    -

    267

    +

    267

    268

    -

    269

    +

    269

    270

    -

    271

    +

    271

    272

    273

    274

    -

    275

    +

    275

    276

    -

    277

    +

    277

    278

    279

    -

    280

    +

    280

    281

    -

    282

    +

    282

    283

    284

    -

    285

    -

    286

    -

    287

    -

    288

    -

    289

    +

    285

    +

    286

    +

    287

    +

    288

    +

    289

    290

    291

    292

    293

    294

    295

    -

    296

    +

    296

    297

    -

    298

    -

    299

    -

    300

    +

    298

    +

    299

    +

    300

    301

    -

    302

    +

    302

    303

    304

    305

    306

    -

    307

    -

    308

    -

    309

    -

    310

    -

    311

    +

    307

    +

    308

    +

    309

    +

    310

    +

    311

    312

    313

    314

    @@ -380,25 +380,30 @@

    317

    318

    319

    -

    320

    +

    320

    321

    -

    322

    -

    323

    -

    324

    +

    322

    +

    323

    +

    324

    325

    -

    326

    +

    326

    327

    -

    328

    +

    328

    329

    330

    331

    332

    -

    333

    +

    333

    334

    335

    336

    337

    -

    338

    +

    338

    +

    339

    +

    340

    +

    341

    +

    342

    +

    343

    diff --git a/docs/joomla/coverage/openzwave_option.html b/docs/joomla/coverage/openzwave_option.html index 5ec5704f..82934ab7 100644 --- a/docs/joomla/coverage/openzwave_option.html +++ b/docs/joomla/coverage/openzwave_option.html @@ -25,9 +25,9 @@

    Coverage for openzwave.option :

    - 73 statements   + 78 statements   0 run - 73 missing + 78 missing 0 excluded

    @@ -91,30 +91,30 @@

    28

    29

    30

    -

    31

    -

    32

    +

    31

    +

    32

    33

    34

    35

    -

    36

    -

    37

    -

    38

    +

    36

    +

    37

    +

    38

    39

    40

    41

    42

    43

    44

    -

    45

    -

    46

    -

    47

    +

    45

    +

    46

    +

    47

    48

    49

    50

    51

    52

    53

    -

    54

    +

    54

    55

    56

    57

    @@ -123,69 +123,69 @@

    60

    61

    62

    -

    63

    -

    64

    -

    65

    -

    66

    +

    63

    +

    64

    +

    65

    +

    66

    67

    68

    69

    -

    70

    +

    70

    71

    -

    72

    +

    72

    73

    74

    -

    75

    +

    75

    76

    77

    78

    -

    79

    +

    79

    80

    -

    81

    -

    82

    -

    83

    +

    81

    +

    82

    +

    83

    84

    -

    85

    +

    85

    86

    87

    -

    88

    +

    88

    89

    -

    90

    +

    90

    91

    92

    -

    93

    +

    93

    94

    -

    95

    +

    95

    96

    97

    -

    98

    +

    98

    99

    -

    100

    +

    100

    101

    102

    -

    103

    +

    103

    104

    -

    105

    +

    105

    106

    107

    -

    108

    +

    108

    109

    -

    110

    +

    110

    111

    112

    -

    113

    +

    113

    114

    -

    115

    +

    115

    116

    117

    -

    118

    +

    118

    119

    -

    120

    +

    120

    121

    122

    -

    123

    +

    123

    124

    -

    125

    +

    125

    126

    127

    128

    @@ -200,14 +200,14 @@

    137

    138

    139

    -

    140

    +

    140

    141

    -

    142

    +

    142

    143

    144

    -

    145

    +

    145

    146

    -

    147

    +

    147

    148

    149

    150

    @@ -222,14 +222,14 @@

    159

    160

    161

    -

    162

    +

    162

    163

    -

    164

    +

    164

    165

    166

    -

    167

    +

    167

    168

    -

    169

    +

    169

    170

    171

    172

    @@ -244,146 +244,151 @@

    181

    182

    183

    -

    184

    +

    184

    185

    -

    186

    +

    186

    187

    188

    -

    189

    +

    189

    190

    -

    191

    +

    191

    192

    193

    -

    194

    +

    194

    195

    -

    196

    +

    196

    197

    198

    -

    199

    +

    199

    200

    -

    201

    +

    201

    202

    203

    -

    204

    +

    204

    205

    -

    206

    +

    206

    207

    208

    -

    209

    +

    209

    210

    -

    211

    +

    211

    212

    213

    -

    214

    +

    214

    215

    -

    216

    +

    216

    217

    218

    -

    219

    +

    219

    220

    -

    221

    +

    221

    222

    223

    -

    224

    +

    224

    225

    -

    226

    +

    226

    227

    228

    -

    229

    +

    229

    230

    -

    231

    +

    231

    232

    233

    -

    234

    +

    234

    235

    -

    236

    +

    236

    237

    238

    -

    239

    +

    239

    240

    -

    241

    +

    241

    242

    243

    -

    244

    +

    244

    245

    -

    246

    +

    246

    247

    248

    -

    249

    +

    249

    250

    -

    251

    +

    251

    252

    253

    -

    254

    +

    254

    255

    -

    256

    +

    256

    257

    258

    -

    259

    +

    259

    260

    -

    261

    +

    261

    262

    263

    -

    264

    +

    264

    265

    -

    266

    +

    266

    267

    268

    -

    269

    +

    269

    270

    -

    271

    +

    271

    272

    273

    -

    274

    +

    274

    275

    -

    276

    +

    276

    277

    278

    -

    279

    +

    279

    280

    -

    281

    +

    281

    282

    283

    -

    284

    +

    284

    285

    -

    286

    +

    286

    287

    288

    -

    289

    +

    289

    290

    -

    291

    +

    291

    292

    293

    -

    294

    +

    294

    295

    -

    296

    +

    296

    297

    298

    -

    299

    +

    299

    300

    -

    301

    +

    301

    302

    303

    -

    304

    +

    304

    305

    -

    306

    +

    306

    307

    308

    -

    309

    +

    309

    310

    -

    311

    +

    311

    312

    313

    -

    314

    +

    314

    315

    316

    -

    317

    +

    317

    318

    -

    319

    +

    319

    320

    321

    322

    323

    +

    324

    +

    325

    +

    326

    +

    327

    +

    328

    diff --git a/docs/joomla/coverage/openzwave_scene.html b/docs/joomla/coverage/openzwave_scene.html index 7b053d24..2391ef09 100644 --- a/docs/joomla/coverage/openzwave_scene.html +++ b/docs/joomla/coverage/openzwave_scene.html @@ -25,9 +25,9 @@

    Coverage for openzwave.scene :

    - 75 statements   + 80 statements   0 run - 75 missing + 80 missing 0 excluded

    @@ -87,200 +87,208 @@

    24

    25

    26

    -

    27

    -

    28

    +

    27

    +

    28

    29

    30

    31

    -

    32

    -

    33

    -

    34

    +

    32

    +

    33

    +

    34

    35

    36

    37

    38

    39

    40

    -

    41

    -

    42

    -

    43

    +

    41

    +

    42

    +

    43

    44

    45

    46

    47

    48

    49

    -

    50

    +

    50

    51

    52

    53

    54

    -

    55

    -

    56

    -

    57

    +

    55

    +

    56

    +

    57

    58

    -

    59

    -

    60

    -

    61

    -

    62

    +

    59

    +

    60

    +

    61

    +

    62

    63

    -

    64

    +

    64

    65

    -

    66

    +

    66

    67

    -

    68

    +

    68

    69

    70

    -

    71

    +

    71

    72

    -

    73

    +

    73

    74

    75

    -

    76

    +

    76

    77

    -

    78

    +

    78

    79

    80

    -

    81

    +

    81

    82

    -

    83

    +

    83

    84

    85

    -

    86

    +

    86

    87

    -

    88

    +

    88

    89

    90

    -

    91

    +

    91

    92

    -

    93

    +

    93

    94

    95

    96

    -

    97

    +

    97

    98

    -

    99

    +

    99

    100

    101

    -

    102

    +

    102

    103

    -

    104

    +

    104

    105

    106

    107

    108

    109

    -

    110

    -

    111

    -

    112

    -

    113

    -

    114

    +

    110

    +

    111

    +

    112

    +

    113

    +

    114

    115

    -

    116

    +

    116

    117

    -

    118

    -

    119

    -

    120

    +

    118

    +

    119

    +

    120

    121

    -

    122

    +

    122

    123

    124

    125

    126

    -

    127

    -

    128

    -

    129

    -

    130

    +

    127

    +

    128

    +

    129

    +

    130

    131

    132

    -

    133

    -

    134

    -

    135

    +

    133

    +

    134

    +

    135

    136

    -

    137

    +

    137

    138

    139

    140

    141

    -

    142

    -

    143

    -

    144

    -

    145

    +

    142

    +

    143

    +

    144

    +

    145

    146

    147

    -

    148

    -

    149

    -

    150

    +

    148

    +

    149

    +

    150

    151

    -

    152

    +

    152

    153

    154

    -

    155

    -

    156

    -

    157

    -

    158

    -

    159

    +

    155

    +

    156

    +

    157

    +

    158

    +

    159

    160

    161

    162

    -

    163

    +

    163

    164

    -

    165

    -

    166

    -

    167

    +

    165

    +

    166

    +

    167

    168

    -

    169

    +

    169

    170

    171

    -

    172

    -

    173

    -

    174

    -

    175

    -

    176

    +

    172

    +

    173

    +

    174

    +

    175

    +

    176

    177

    178

    179

    180

    181

    182

    -

    183

    +

    183

    184

    -

    185

    -

    186

    -

    187

    +

    185

    +

    186

    +

    187

    188

    -

    189

    +

    189

    190

    191

    192

    193

    -

    194

    +

    194

    195

    -

    196

    +

    196

    197

    198

    -

    199

    +

    199

    200

    -

    201

    +

    201

    202

    203

    -

    204

    +

    204

    205

    -

    206

    +

    206

    207

    208

    -

    209

    +

    209

    210

    -

    211

    +

    211

    212

    -

    213

    -

    214

    -

    215

    -

    216

    -

    217

    -

    218

    -

    219

    -

    220

    +

    213

    +

    214

    +

    215

    +

    216

    +

    217

    +

    218

    +

    219

    +

    220

    +

    221

    +

    222

    +

    223

    +

    224

    +

    225

    +

    226

    +

    227

    +

    228

    diff --git a/docs/joomla/coverage/openzwave_singleton.html b/docs/joomla/coverage/openzwave_singleton.html index eedc966e..bf8aa17b 100644 --- a/docs/joomla/coverage/openzwave_singleton.html +++ b/docs/joomla/coverage/openzwave_singleton.html @@ -25,9 +25,9 @@

    Coverage for openzwave.singleton :

    - 9 statements   + 14 statements   0 run - 9 missing + 14 missing 0 excluded

    @@ -86,23 +86,28 @@

    23

    24

    25

    -

    26

    +

    26

    27

    -

    28

    -

    29

    +

    28

    +

    29

    30

    31

    -

    32

    +

    32

    33

    34

    35

    36

    -

    37

    +

    37

    38

    -

    39

    +

    39

    40

    -

    41

    +

    41

    42

    +

    43

    +

    44

    +

    45

    +

    46

    +

    47

    diff --git a/docs/joomla/coverage/openzwave_value.html b/docs/joomla/coverage/openzwave_value.html index e1be6db9..7cfb061d 100644 --- a/docs/joomla/coverage/openzwave_value.html +++ b/docs/joomla/coverage/openzwave_value.html @@ -25,9 +25,9 @@

    Coverage for openzwave.value :

    - 170 statements   + 182 statements   0 run - 170 missing + 182 missing 0 excluded

    @@ -87,31 +87,31 @@

    24

    25

    26

    -

    27

    -

    28

    +

    27

    +

    28

    29

    30

    31

    -

    32

    -

    33

    -

    34

    +

    32

    +

    33

    +

    34

    35

    36

    37

    38

    39

    -

    40

    -

    41

    +

    40

    +

    41

    42

    -

    43

    +

    43

    44

    45

    -

    46

    -

    47

    +

    46

    +

    47

    48

    49

    50

    -

    51

    +

    51

    52

    53

    54

    @@ -132,40 +132,40 @@

    69

    70

    71

    -

    72

    -

    73

    -

    74

    +

    72

    +

    73

    +

    74

    75

    -

    76

    -

    77

    -

    78

    -

    79

    +

    76

    +

    77

    +

    78

    +

    79

    80

    -

    81

    +

    81

    82

    -

    83

    +

    83

    84

    85

    -

    86

    +

    86

    87

    -

    88

    +

    88

    89

    90

    91

    92

    -

    93

    +

    93

    94

    95

    -

    96

    +

    96

    97

    98

    99

    -

    100

    +

    100

    101

    102

    -

    103

    +

    103

    104

    -

    105

    +

    105

    106

    107

    108

    @@ -178,170 +178,170 @@

    115

    116

    117

    -

    118

    -

    119

    +

    118

    +

    119

    120

    121

    122

    -

    123

    -

    124

    -

    125

    +

    123

    +

    124

    +

    125

    126

    127

    128

    129

    130

    131

    -

    132

    +

    132

    133

    134

    -

    135

    +

    135

    136

    -

    137

    +

    137

    138

    -

    139

    +

    139

    140

    -

    141

    +

    141

    142

    143

    -

    144

    +

    144

    145

    -

    146

    +

    146

    147

    148

    -

    149

    +

    149

    150

    -

    151

    +

    151

    152

    153

    -

    154

    +

    154

    155

    -

    156

    +

    156

    157

    -

    158

    +

    158

    159

    -

    160

    +

    160

    161

    162

    -

    163

    +

    163

    164

    -

    165

    +

    165

    166

    167

    168

    -

    169

    +

    169

    170

    -

    171

    +

    171

    172

    173

    -

    174

    +

    174

    175

    -

    176

    +

    176

    177

    178

    -

    179

    +

    179

    180

    -

    181

    +

    181

    182

    183

    -

    184

    +

    184

    185

    -

    186

    +

    186

    187

    188

    189

    -

    190

    +

    190

    191

    -

    192

    +

    192

    193

    194

    -

    195

    +

    195

    196

    -

    197

    +

    197

    198

    199

    -

    200

    +

    200

    201

    -

    202

    +

    202

    203

    204

    -

    205

    +

    205

    206

    -

    207

    +

    207

    208

    209

    -

    210

    +

    210

    211

    -

    212

    +

    212

    213

    214

    -

    215

    +

    215

    216

    -

    217

    +

    217

    218

    219

    220

    221

    222

    -

    223

    +

    223

    224

    -

    225

    +

    225

    226

    227

    -

    228

    +

    228

    229

    -

    230

    +

    230

    231

    232

    233

    234

    235

    -

    236

    +

    236

    237

    -

    238

    +

    238

    239

    240

    -

    241

    +

    241

    242

    -

    243

    +

    243

    244

    245

    246

    247

    248

    249

    -

    250

    +

    250

    251

    -

    252

    +

    252

    253

    254

    -

    255

    +

    255

    256

    -

    257

    +

    257

    258

    259

    260

    261

    262

    -

    263

    +

    263

    264

    -

    265

    +

    265

    266

    267

    -

    268

    +

    268

    269

    -

    270

    +

    270

    271

    272

    273

    -

    274

    +

    274

    275

    -

    276

    +

    276

    277

    278

    -

    279

    +

    279

    280

    -

    281

    +

    281

    282

    283

    284

    @@ -351,32 +351,32 @@

    288

    289

    290

    -

    291

    +

    291

    292

    -

    293

    +

    293

    294

    295

    -

    296

    +

    296

    297

    -

    298

    +

    298

    299

    300

    -

    301

    +

    301

    302

    -

    303

    +

    303

    304

    305

    -

    306

    +

    306

    307

    -

    308

    +

    308

    309

    310

    311

    -

    312

    -

    313

    -

    314

    -

    315

    -

    316

    +

    312

    +

    313

    +

    314

    +

    315

    +

    316

    317

    318

    319

    @@ -390,35 +390,35 @@

    327

    328

    329

    -

    330

    +

    330

    331

    -

    332

    +

    332

    333

    -

    334

    +

    334

    335

    -

    336

    +

    336

    337

    -

    338

    +

    338

    339

    340

    341

    342

    343

    -

    344

    -

    345

    -

    346

    -

    347

    -

    348

    +

    344

    +

    345

    +

    346

    +

    347

    +

    348

    349

    350

    351

    352

    -

    353

    +

    353

    354

    355

    356

    357

    -

    358

    +

    358

    359

    360

    361

    @@ -457,162 +457,177 @@

    394

    395

    396

    -

    397

    +

    397

    398

    399

    400

    401

    -

    402

    -

    403

    +

    402

    +

    403

    404

    405

    -

    406

    +

    406

    407

    408

    -

    409

    -

    410

    +

    409

    +

    410

    411

    -

    412

    +

    412

    413

    414

    415

    416

    -

    417

    +

    417

    418

    -

    419

    +

    419

    420

    421

    -

    422

    +

    422

    423

    -

    424

    +

    424

    425

    426

    427

    -

    428

    +

    428

    429

    -

    430

    +

    430

    431

    432

    -

    433

    +

    433

    434

    -

    435

    +

    435

    436

    437

    438

    -

    439

    +

    439

    440

    -

    441

    +

    441

    442

    443

    -

    444

    +

    444

    445

    -

    446

    +

    446

    447

    448

    449

    450

    -

    451

    +

    451

    452

    -

    453

    +

    453

    454

    455

    -

    456

    +

    456

    457

    -

    458

    +

    458

    459

    460

    -

    461

    +

    461

    462

    -

    463

    +

    463

    464

    465

    -

    466

    +

    466

    467

    -

    468

    +

    468

    469

    470

    471

    472

    -

    473

    +

    473

    474

    -

    475

    +

    475

    476

    477

    -

    478

    +

    478

    479

    -

    480

    +

    480

    481

    482

    -

    483

    +

    483

    484

    -

    485

    +

    485

    486

    487

    -

    488

    +

    488

    489

    -

    490

    +

    490

    491

    492

    493

    -

    494

    +

    494

    495

    -

    496

    +

    496

    497

    498

    -

    499

    +

    499

    500

    -

    501

    +

    501

    502

    503

    -

    504

    +

    504

    505

    -

    506

    +

    506

    507

    508

    -

    509

    +

    509

    510

    -

    511

    +

    511

    512

    513

    514

    -

    515

    +

    515

    516

    -

    517

    +

    517

    518

    519

    -

    520

    +

    520

    521

    -

    522

    -

    523

    +

    522

    +

    523

    524

    525

    -

    526

    +

    526

    527

    -

    528

    +

    528

    529

    530

    -

    531

    +

    531

    532

    533

    534

    535

    -

    536

    -

    537

    +

    536

    +

    537

    538

    -

    539

    +

    539

    540

    -

    541

    -

    542

    +

    541

    +

    542

    543

    -

    544

    +

    544

    545

    -

    546

    -

    547

    -

    548

    -

    549

    -

    550

    -

    551

    -

    552

    +

    546

    +

    547

    +

    548

    +

    549

    +

    550

    +

    551

    +

    552

    +

    553

    +

    554

    +

    555

    +

    556

    +

    557

    +

    558

    +

    559

    +

    560

    +

    561

    +

    562

    +

    563

    +

    564

    +

    565

    +

    566

    +

    567

    diff --git a/docs/joomla/coverage/pyozwman_ozwsh_main.html b/docs/joomla/coverage/pyozwman_ozwsh_main.html index 439e7270..9dd6dd01 100644 --- a/docs/joomla/coverage/pyozwman_ozwsh_main.html +++ b/docs/joomla/coverage/pyozwman_ozwsh_main.html @@ -5,7 +5,7 @@ - Coverage for pyozwman.ozwsh_main: 15% + Coverage for pyozwman.ozwsh_main: 21% @@ -21,13 +21,13 @@ diff --git a/docs/joomla/coverage/pyozwman_ozwsh_widgets.html b/docs/joomla/coverage/pyozwman_ozwsh_widgets.html index 81c28254..2dec1f0b 100644 --- a/docs/joomla/coverage/pyozwman_ozwsh_widgets.html +++ b/docs/joomla/coverage/pyozwman_ozwsh_widgets.html @@ -5,10 +5,14 @@ +<<<<<<< HEAD <<<<<<< HEAD Coverage for pyozwman.ozwsh_widgets: 16% ======= Coverage for pyozwman.ozwsh_widgets: 24% +>>>>>>> master +======= + Coverage for pyozwman.ozwsh_widgets: 34% >>>>>>> master @@ -25,6 +29,7 @@ diff --git a/docs/joomla/coverage/pyozwweb_app_listener.html b/docs/joomla/coverage/pyozwweb_app_listener.html index a6a005d4..701cb6cb 100644 --- a/docs/joomla/coverage/pyozwweb_app_listener.html +++ b/docs/joomla/coverage/pyozwweb_app_listener.html @@ -5,7 +5,7 @@ - Coverage for pyozwweb.app.listener: 67% + Coverage for pyozwweb.app.listener: 71% @@ -21,13 +21,13 @@ diff --git a/docs/joomla/coverage/pyozwweb_app_socket_chat.html b/docs/joomla/coverage/pyozwweb_app_socket_chat.html index 17aaa505..230e8719 100644 --- a/docs/joomla/coverage/pyozwweb_app_socket_chat.html +++ b/docs/joomla/coverage/pyozwweb_app_socket_chat.html @@ -5,7 +5,7 @@ - Coverage for pyozwweb.app.socket.chat: 47% + Coverage for pyozwweb.app.socket.chat: 65% @@ -21,13 +21,13 @@ diff --git a/docs/joomla/coverage/pyozwweb_app_socket_ozwave.html b/docs/joomla/coverage/pyozwweb_app_socket_ozwave.html index 16e820ae..7109d936 100644 --- a/docs/joomla/coverage/pyozwweb_app_socket_ozwave.html +++ b/docs/joomla/coverage/pyozwweb_app_socket_ozwave.html @@ -5,7 +5,7 @@ - Coverage for pyozwweb.app.socket.ozwave: 23% + Coverage for pyozwweb.app.socket.ozwave: 29% @@ -21,13 +21,13 @@ diff --git a/docs/joomla/coverage/pyozwweb_app_views.html b/docs/joomla/coverage/pyozwweb_app_views.html index 41bdd0be..c661e60d 100644 --- a/docs/joomla/coverage/pyozwweb_app_views.html +++ b/docs/joomla/coverage/pyozwweb_app_views.html @@ -5,7 +5,7 @@ - Coverage for pyozwweb.app.views: 92% + Coverage for pyozwweb.app.views: 94% @@ -21,13 +21,13 @@ diff --git a/docs/joomla/coverage/pyozwweb_config.html b/docs/joomla/coverage/pyozwweb_config.html index a9a296e6..4fc8eac5 100644 --- a/docs/joomla/coverage/pyozwweb_config.html +++ b/docs/joomla/coverage/pyozwweb_config.html @@ -25,8 +25,8 @@

    Coverage for pyozwweb.config :

    - 41 statements   - 41 run + 44 statements   + 44 run 0 missing 0 excluded @@ -110,25 +110,25 @@

    47

    48

    49

    -

    50

    -

    51

    -

    52

    +

    50

    +

    51

    +

    52

    53

    54

    55

    -

    56

    -

    57

    -

    58

    +

    56

    +

    57

    +

    58

    59

    60

    -

    61

    -

    62

    +

    61

    +

    62

    63

    64

    65

    -

    66

    +

    66

    67

    -

    68

    +

    68

    69

    70

    71

    @@ -136,19 +136,23 @@

    73

    74

    75

    -

    76

    -

    77

    +

    76

    +

    77

    78

    79

    80

    -

    81

    +

    81

    82

    -

    83

    +

    83

    84

    85

    86

    -

    87

    -

    88

    +

    87

    +

    88

    +

    89

    +

    90

    +

    91

    +

    92

    diff --git a/docs/joomla/coverage/status.dat b/docs/joomla/coverage/status.dat index 77c47817..5831e8ed 100644 --- a/docs/joomla/coverage/status.dat +++ b/docs/joomla/coverage/status.dat @@ -37,7 +37,7 @@ p19 I0 sS'n_statements' p20 -I75 +I80 sS'n_excluded' p21 I0 @@ -46,13 +46,13 @@ p22 I0 sS'n_missing' p23 -I75 +I80 sS'n_missing_branches' p24 I0 sbssS'hash' p25 -S'\x120&\x8a\xd7\x97\x10\xd4\xd8\x0f\xcc~]\xf7q\x1d' +S'B+\xbc\xfb\xd9*=\xff\x83\xeb\xb4y\xc4\xcc\xfd\x1c' p26 ssS'pyozwman' p27 @@ -109,17 +109,17 @@ I1 sg19 I0 sg20 -I9 +I14 sg21 I0 sg22 I0 sg23 -I9 +I14 sg24 I0 sbssg25 -S'\xca\xce:\x1f\x1b\xec\x84dc>g\xe4JS\xff\x03' +S'\x05\xa5\xa6\xd7\x85\x91\xf4\xb9:a?\x85\x04\xc7\tB' p41 ssS'pyozwweb' p42 @@ -176,17 +176,17 @@ I1 sg19 I0 sg20 -I30 +I43 sg21 I0 sg22 I0 sg23 -I30 +I43 sg24 I0 sbssg25 -S'p\x80\x8f\xce\xaaCw\x12I\xaf;R\xf3\xfey9' +S'\x90^\xb9\x89O\xec\xfe6\xb4\xd1\x0b[@\xb3)\x1b' p56 ssS'openzwave_network' p57 @@ -210,17 +210,17 @@ I1 sg19 I0 sg20 -I539 +I546 sg21 I0 sg22 I0 sg23 -I539 +I546 sg24 I0 sbssg25 -S'\x00\x85z.k*\xfb\xffV\x9c\x94\xf6v\xe5\xbb7' +S'\xcb6\xac,\xae\xa1\xb1d\xf7y\xe4Zhp\xd3\xbc' p64 ssS'openzwave' p65 @@ -277,17 +277,17 @@ I1 sg19 I0 sg20 -I48 +I50 sg21 I0 sg22 I0 sg23 -I4 +I3 sg24 I0 sbssg25 -S"I\xc4x\x90\xa6\xa6~\xe89\x96'-y\xb1|I" +S'\x18\xd2\xb0\xe0\x16\xcf\xef\x03l\xb7\x970a\xadE\xc0' p79 ssS'openzwave_node' p80 @@ -311,17 +311,17 @@ I1 sg19 I0 sg20 -I204 +I228 sg21 I0 sg22 I0 sg23 -I204 +I228 sg24 I0 sbssg25 -S'#\x90\x06\xd2\xbckZ\xfd\xed\nW\xd2*@\xaa\xd7' +S'\x91s\xd8\x1fVY\xe7Vb-\x97\x9eE\xf8\xb5*' p87 ssS'openzwave_controller' p88 @@ -345,17 +345,17 @@ I1 sg19 I0 sg20 -I175 +I206 sg21 I0 sg22 I0 sg23 -I175 +I206 sg24 I0 sbssg25 -S'u\x90\x8d\x11n\xea\x8f\xa5\x08\xd7b\x89Q3B\xc4' +S'o\xbe\xb1oG^\x82\xd4\xd5\xdf\xb4-&MS\x1b' p95 ssS'pyozwweb_app_listener' p96 @@ -379,17 +379,17 @@ I1 sg19 I0 sg20 -I130 +I132 sg21 I0 sg22 I0 sg23 -I43 +I38 sg24 I0 sbssg25 -S'F5\xbb\xe7\x10\x81jYS\xb1y\x9e\x1e\xe4`\x00' +S'\xb9e}%\xfe\x15\x8e+\xf2\x95\xf2\xf8Z\xaa\xde\xe1' p103 ssS'openzwave_option' p104 @@ -413,17 +413,17 @@ I1 sg19 I0 sg20 -I73 +I78 sg21 I0 sg22 I0 sg23 -I73 +I78 sg24 I0 sbssg25 -S'\xcb\r`\xcap8\xb7\xd8\xb2\xfb\x98g\xca\xfc.\xa2' +S"}:9{\x0f\x03\xee\xac\xf3'u\xec\x03\xf2U\xc4" p111 ssS'pyozwman_ozwsh_widgets' p112 @@ -447,17 +447,17 @@ I1 sg19 I0 sg20 -I1393 +I1398 sg21 I0 sg22 I0 sg23 -I1057 +I925 sg24 I0 sbssg25 -S'\xfd\x9b\xa7\xcf\x1b\xecC;O\xcc\xf4\xfac\x99\xca\xa2' +S'\x12@e\xe0\xf4,}\xc75\xb7#\x1e\x91\xed\x8c0' p119 ssS'pyozwweb_app_socket' p120 @@ -515,17 +515,17 @@ I1 sg19 I0 sg20 -I126 +I131 sg21 I0 sg22 I0 sg23 -I126 +I131 sg24 I0 sbssg25 -S"\x83\xeb\xd7D\xa7\xf5\x86'\x12w\x85\xfaAR]\x06" +S'\xbb\x1d\xbf\x1fl\xdf_\xb5\x0b\n\x9b\x17\xf6k\x00\x9c' p135 ssS'pyozwweb_app_socket_chat' p136 @@ -549,17 +549,17 @@ I1 sg19 I0 sg20 -I49 +I54 sg21 I0 sg22 I0 sg23 -I26 +I19 sg24 I0 sbssg25 -S'ry\xd0\x9c&\x0b~\xf8~\xc78\xba\xa5"\xbd\xe0' +S'\xa1\xd8\xc4\xb3{\xf5{\x81\x88\xb9\xbd\xf5\x8bZ\x0f\x11' p143 ssS'openzwave_command' p144 @@ -583,17 +583,17 @@ I1 sg19 I0 sg20 -I123 +I128 sg21 I0 sg22 I0 sg23 -I123 +I128 sg24 I0 sbssg25 -S'\xb00\x0c\xa7\x1f\xe8db\xcd9W\x8c\xcb\x89P`' +S'Gv=\xc0\xebE\x85<\xc9\x995\xd0s\xf4\\\xb2' p151 ssS'openzwave_value' p152 @@ -617,17 +617,17 @@ I1 sg19 I0 sg20 -I170 +I182 sg21 I0 sg22 I0 sg23 -I170 +I182 sg24 I0 sbssg25 -S'E\xe3Lz\x94\x0e\x92$Xf\xaf\xae|&C%' +S'y\x93\x98A\x1fn\xb0\xe5\x98\\\xa3?\xcd\xf8\x8cL' p159 ssS'pyozwweb_config' p160 @@ -651,7 +651,7 @@ I1 sg19 I0 sg20 -I41 +I44 sg21 I0 sg22 @@ -661,7 +661,7 @@ I0 sg24 I0 sbssg25 -S'\xe5C\x13\xbe6X\x9c\x911#\xe3w:\x85\xd6B' +S'z\xa9\xe7\xc3\x16h`\x00\x8c!\xb4O\xb9z\xe6G' p167 ssS'pyozwweb_app_socket_ozwave' p168 @@ -685,17 +685,17 @@ I1 sg19 I0 sg20 -I213 +I218 sg21 I0 sg22 I0 sg23 -I165 +I155 sg24 I0 sbssg25 -S')\x04\x8f\xd9\xfb;e\xa1uWn(\x83\x10\xfe\xf8' +S'\r]\x85\x0e$\xe4\xc3\xd8\x1b_\xc8{7%\xa1g' p175 ssS'pyozwman_ozwsh_main' p176 @@ -719,17 +719,17 @@ I1 sg19 I0 sg20 -I400 +I405 sg21 I0 sg22 I0 sg23 -I340 +I318 sg24 I0 sbssg25 -S'\xf3\x05\x9b\xf6\x80\x0e\x9b\r\xa8\x101`\xeb\x97\xa5H' +S'lR1\x05\xd1\xd6\x02b\xaf\x94\xe5#\x84sW\xbe' p183 ssS'pyozwweb_app' p184 @@ -753,17 +753,17 @@ I1 sg19 I0 sg20 -I93 +I112 sg21 I0 sg22 I0 sg23 -I20 +I22 sg24 I0 sbssg25 -S'\x0f\xb3.\x86"\xf7\xd9.\xd9T\x93\x08`\x8bi?' +S'\xe9,`Y}\x8bS@#\x12Lh\x93"\x87U' p191 sssS'version' p192 diff --git a/docs/joomla/group.html b/docs/joomla/group.html index 1e021ab6..7cc69dce 100644 --- a/docs/joomla/group.html +++ b/docs/joomla/group.html @@ -132,6 +132,24 @@

    Group documentation

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    Total3920318940783126 419%23%
    openzwave.command123123128128 0 0%
    openzwave.controller175175206206 0 0%
    openzwave.group30304343 0 0%
    openzwave.network539539546546 0 0%
    openzwave.node204204228228 0 0%
    openzwave.object126126131131 0 0%
    openzwave.option73737878 0 0%
    openzwave.scene75758080 0 0%
    openzwave.singleton991414 0 0%
    openzwave.value170170182182 0 0%
    pyozwman.ozwsh_main400340405318 015%21%
    pyozwman.ozwsh_widgets139310571398925 024%34%
    pyozwweb.app932011222 078%80%
    pyozwweb.app.listener1304313238 067%71%
    pyozwweb.app.socket.chat49265419 047%65%
    pyozwweb.app.socket.ozwave213165218155 023%29%
    pyozwweb.app.views484503 092%94%
    pyozwweb.config4144 0 0 @@ -775,667 +780,672 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    from openzwave.object import ZWaveNodeInterface 

    -

    from threading import Timer 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveNodeBasic(ZWaveNodeInterface): 

    -

        """ 

    -

        Represents an interface to BasicCommands 

    -

        I known it's not necessary as they can be included in the node directly. 

    -

        But it's a good starting point. 

    -

     

    -

        What I want to do is provide an automatic mapping system hidding 

    -

        the mapping classes. 

    -

     

    -

        First example, the battery level, it's not a basic command but don't care. 

    -

        Its command class is 0x80. 

    -

     

    -

        A user should write 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from openzwave.object import ZWaveNodeInterface 

    +

    from threading import Timer 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveNodeBasic(ZWaveNodeInterface): 

    +

        """ 

    +

        Represents an interface to BasicCommands 

    +

        I known it's not necessary as they can be included in the node directly. 

    +

        But it's a good starting point. 

    +

     

    +

        What I want to do is provide an automatic mapping system hidding 

    +

        the mapping classes. 

     

    -

        .. code-block:: python 

    -

     

    -

            if self.handle_command_class(class_id): 

    -

                ret=command_Class(...) 

    +

        First example, the battery level, it's not a basic command but don't care. 

    +

        Its command class is 0x80. 

    +

     

    +

        A user should write 

     

    -

        The classic way to do it is a classic method of registering. But 

    +

        .. code-block:: python 

     

    -

        Another way : using heritage multiple 

    -

     

    -

        ZWaveNode(ZWaveObject, ZWaveNodeBasic, ....) 

    -

        The interface will implement methods 

    -

        command_class_0x80(param1,param2,...) 

    -

        That's the first thing to do 

    -

        We also can define a property with a friendly name 

    -

     

    -

        handle_command_class will do the rest 

    -

     

    -

        Another way to do it : 

    -

        A node can manage actuators (switch, dimmer, ...) 

    -

        and sensors (temperature, consummation, temperature) 

    -

     

    -

        So we need a kind of mechanism to retrieve commands in a user friendly way 

    -

        Same for sensors. 

    -

     

    -

        A good use case is the AN158 Plug-in Meter Appliance Module 

    -

        We will study the following command classes : 

    -

        'COMMAND_CLASS_SWITCH_ALL', 'COMMAND_CLASS_SWITCH_BINARY', 

    -

        'COMMAND_CLASS_METER', 

    +

            if self.handle_command_class(class_id): 

    +

                ret=command_Class(...) 

    +

     

    +

        The classic way to do it is a classic method of registering. But 

    +

     

    +

        Another way : using heritage multiple 

    +

     

    +

        ZWaveNode(ZWaveObject, ZWaveNodeBasic, ....) 

    +

        The interface will implement methods 

    +

        command_class_0x80(param1,param2,...) 

    +

        That's the first thing to do 

    +

        We also can define a property with a friendly name 

    +

     

    +

        handle_command_class will do the rest 

    +

     

    +

        Another way to do it : 

    +

        A node can manage actuators (switch, dimmer, ...) 

    +

        and sensors (temperature, consummation, temperature) 

    +

     

    +

        So we need a kind of mechanism to retrieve commands in a user friendly way 

    +

        Same for sensors. 

     

    -

        The associated values are : 

    -

     

    -

        .. code-block:: python 

    -

     

    -

            COMMAND_CLASS_SWITCH_ALL : { 

    -

                72057594101481476L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 'On and Off Enabled', 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Switch All', 

    -

                    'readonly': False, 

    -

                    'data_str': 'On and Off Enabled', 

    -

                    'type': 'List'} 

    -

            } 

    -

            COMMAND_CLASS_SWITCH_BINARY : { 

    -

                72057594093060096L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': False, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Switch', 

    -

                    'readonly': False, 

    -

                    'data_str': False, 

    -

                    'type': 'Bool'} 

    -

            } 

    -

            COMMAND_CLASS_METER : { 

    -

                72057594093273600L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': False, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Exporting', 

    -

                    'readonly': True, 

    -

                    'data_str': False, 

    -

                    'type': 'Bool'}, 

    -

                72057594101662232L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 'False', 

    -

                    'min': 0L, 

    -

                    'writeonly': True, 

    -

                    'label': 'Reset', 

    -

                    'readonly': False, 

    -

                    'data_str': 'False', 

    -

                    'type': 'Button'}, 

    -

                72057594093273090L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': 'kWh', 

    -

                    'data': 0.0, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Energy', 

    -

                    'readonly': True, 

    -

                    'data_str': 0.0, 

    -

                    'type': 'Decimal'}, 

    -

                72057594093273218L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': 'W', 

    -

                    'data': 0.0, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Power', 

    -

                    'readonly': True, 

    -

                    'data_str': 0.0, 

    -

                    'type': 'Decimal'} 

    -

            } 

    -

     

    -

        Another example from an homePro dimmer (not configured in openzwave): 

    -

     

    -

        .. code-block:: python 

    -

     

    -

            COMMAND_CLASS_SWITCH_MULTILEVEL : { 

    -

                72057594109853736L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 'False', 

    -

                    'min': 0L, 

    -

                    'writeonly': True, 

    -

                    'label': 'Dim', 

    -

                    'readonly': False, 

    -

                    'data_str': 'False', 

    -

                    'type': 'Button'}, 

    -

                72057594109853697L: { 

    -

                    'help': '', 

    -

                    'max': 255L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 69, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Level', 

    -

                    'readonly': False, 

    -

                    'data_str': 69, 

    -

                    'type': 'Byte'}, 

    -

                72057594118242369L: { 

    -

                    'help': '', 

    -

                    'max': 255L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 0, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Start Level', 

    -

                    'readonly': False, 

    -

                    'data_str': 0, 

    -

                    'type': 'Byte'}, 

    -

                72057594109853720L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': 'False', 

    -

                    'min': 0L, 

    -

                    'writeonly': True, 

    -

                    'label': 'Bright', 

    -

                    'readonly': False, 

    -

                    'data_str': 'False', 

    -

                    'type': 'Button'}, 

    -

                72057594118242352L: { 

    -

                    'help': '', 

    -

                    'max': 0L, 

    -

                    'is_polled': False, 

    -

                    'units': '', 

    -

                    'data': False, 

    -

                    'min': 0L, 

    -

                    'writeonly': False, 

    -

                    'label': 'Ignore Start Level', 

    -

                    'readonly': False, 

    -

                    'data_str': False, 

    -

                    'type': 'Bool'} 

    -

            } 

    -

     

    -

        What about the conclusion : 

    -

     

    -

            The COMMAND_CLASS_SWITCH_ALL is defined with the same label and 

    -

            use a list as parameter. This should be a configuration parameter. 

    -

            Don't know what to do for this command class 

    -

     

    -

            The COMMAND_CLASS_SWITCH_BINARY use a bool as parameter while 

    -

            COMMAND_CLASS_SWITCH_MULTILEVEL use 2 buttons : Dim and Bright. 

    -

            Dim and Bright must be done in 2 steps : set the level and activate 

    -

            the button. 

    +

        A good use case is the AN158 Plug-in Meter Appliance Module 

    +

        We will study the following command classes : 

    +

        'COMMAND_CLASS_SWITCH_ALL', 'COMMAND_CLASS_SWITCH_BINARY', 

    +

        'COMMAND_CLASS_METER', 

    +

     

    +

        The associated values are : 

    +

     

    +

        .. code-block:: python 

    +

     

    +

            COMMAND_CLASS_SWITCH_ALL : { 

    +

                72057594101481476L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 'On and Off Enabled', 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Switch All', 

    +

                    'readonly': False, 

    +

                    'data_str': 'On and Off Enabled', 

    +

                    'type': 'List'} 

    +

            } 

    +

            COMMAND_CLASS_SWITCH_BINARY : { 

    +

                72057594093060096L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': False, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Switch', 

    +

                    'readonly': False, 

    +

                    'data_str': False, 

    +

                    'type': 'Bool'} 

    +

            } 

    +

            COMMAND_CLASS_METER : { 

    +

                72057594093273600L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': False, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Exporting', 

    +

                    'readonly': True, 

    +

                    'data_str': False, 

    +

                    'type': 'Bool'}, 

    +

                72057594101662232L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 'False', 

    +

                    'min': 0L, 

    +

                    'writeonly': True, 

    +

                    'label': 'Reset', 

    +

                    'readonly': False, 

    +

                    'data_str': 'False', 

    +

                    'type': 'Button'}, 

    +

                72057594093273090L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': 'kWh', 

    +

                    'data': 0.0, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Energy', 

    +

                    'readonly': True, 

    +

                    'data_str': 0.0, 

    +

                    'type': 'Decimal'}, 

    +

                72057594093273218L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': 'W', 

    +

                    'data': 0.0, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Power', 

    +

                    'readonly': True, 

    +

                    'data_str': 0.0, 

    +

                    'type': 'Decimal'} 

    +

            } 

    +

     

    +

        Another example from an homePro dimmer (not configured in openzwave): 

    +

     

    +

        .. code-block:: python 

    +

     

    +

            COMMAND_CLASS_SWITCH_MULTILEVEL : { 

    +

                72057594109853736L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 'False', 

    +

                    'min': 0L, 

    +

                    'writeonly': True, 

    +

                    'label': 'Dim', 

    +

                    'readonly': False, 

    +

                    'data_str': 'False', 

    +

                    'type': 'Button'}, 

    +

                72057594109853697L: { 

    +

                    'help': '', 

    +

                    'max': 255L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 69, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Level', 

    +

                    'readonly': False, 

    +

                    'data_str': 69, 

    +

                    'type': 'Byte'}, 

    +

                72057594118242369L: { 

    +

                    'help': '', 

    +

                    'max': 255L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 0, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Start Level', 

    +

                    'readonly': False, 

    +

                    'data_str': 0, 

    +

                    'type': 'Byte'}, 

    +

                72057594109853720L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': 'False', 

    +

                    'min': 0L, 

    +

                    'writeonly': True, 

    +

                    'label': 'Bright', 

    +

                    'readonly': False, 

    +

                    'data_str': 'False', 

    +

                    'type': 'Button'}, 

    +

                72057594118242352L: { 

    +

                    'help': '', 

    +

                    'max': 0L, 

    +

                    'is_polled': False, 

    +

                    'units': '', 

    +

                    'data': False, 

    +

                    'min': 0L, 

    +

                    'writeonly': False, 

    +

                    'label': 'Ignore Start Level', 

    +

                    'readonly': False, 

    +

                    'data_str': False, 

    +

                    'type': 'Bool'} 

    +

            } 

    +

     

    +

        What about the conclusion : 

    +

     

    +

            The COMMAND_CLASS_SWITCH_ALL is defined with the same label and 

    +

            use a list as parameter. This should be a configuration parameter. 

    +

            Don't know what to do for this command class 

     

    -

            So we must add one or more lines in the actuators : 

    -

     

    -

            Switch : {setter:self.set_command_class_0xYZ(valueId, new), getter:} 

    -

            We must find a way to access the value directly 

    +

            The COMMAND_CLASS_SWITCH_BINARY use a bool as parameter while 

    +

            COMMAND_CLASS_SWITCH_MULTILEVEL use 2 buttons : Dim and Bright. 

    +

            Dim and Bright must be done in 2 steps : set the level and activate 

    +

            the button. 

     

    -

            Bright 

    -

            Dim 

    -

     

    -

            So for the COMMAND_CLASS_SWITCH_BINARY we must define a function called 

    -

            Switch (=the label of the value). What happen if we have 2 switches 

    -

            on the node : 2 values I suppose. 

    -

     

    -

            COMMAND_CLASS_SWITCH_MULTILEVEL uses 2 commands : 4 when 2 dimmers on the 

    -

            done ? Don't know but it can. 

    -

     

    -

            COMMAND_CLASS_METER export many values : 2 of them sends a decimal 

    -

            and are readonly. They also have a Unit defined ans values are readonly 

    -

     

    -

            COMMAND_CLASS_METER are used for sensors only. So we would map 

    -

            every values entries as defined before 

    -

     

    -

            Programming : 

    -

            get_switches : retrieve the list of switches on the node 

    -

            is_switch (label) : says if the value with label=label is a switch 

    -

            get_switch (label) : retrieve the value where label=label 

    -

        """ 

    -

     

    -

     

    -

        def get_battery_level(self, value_id=None): 

    -

            """ 

    -

            The battery level of this node. 

    -

            The command 0x80 (COMMAND_CLASS_BATTERY) of this node. 

    +

            So we must add one or more lines in the actuators : 

    +

     

    +

            Switch : {setter:self.set_command_class_0xYZ(valueId, new), getter:} 

    +

            We must find a way to access the value directly 

    +

     

    +

            Bright 

    +

            Dim 

    +

     

    +

            So for the COMMAND_CLASS_SWITCH_BINARY we must define a function called 

    +

            Switch (=the label of the value). What happen if we have 2 switches 

    +

            on the node : 2 values I suppose. 

    +

     

    +

            COMMAND_CLASS_SWITCH_MULTILEVEL uses 2 commands : 4 when 2 dimmers on the 

    +

            done ? Don't know but it can. 

    +

     

    +

            COMMAND_CLASS_METER export many values : 2 of them sends a decimal 

    +

            and are readonly. They also have a Unit defined ans values are readonly 

    +

     

    +

            COMMAND_CLASS_METER are used for sensors only. So we would map 

    +

            every values entries as defined before 

    +

     

    +

            Programming : 

    +

            get_switches : retrieve the list of switches on the node 

    +

            is_switch (label) : says if the value with label=label is a switch 

    +

            get_switch (label) : retrieve the value where label=label 

    +

        """ 

    +

     

     

    -

            :param value_id: The value to retrieve state. If None, retrieve the first value 

    -

            :type value_id: int 

    -

            :return: The level of this battery 

    -

            :rtype: int 

    -

            """ 

    -

            if value_id is None: 

    -

                for val in self.get_battery_levels(): 

    -

                    return self.values[val].data 

    -

            elif value_id in self.get_battery_levels(): 

    -

                return self.values[value_id].data 

    -

            return None 

    -

     

    -

        def get_battery_levels(self): 

    -

            """ 

    -

            The command 0x80 (COMMAND_CLASS_BATTERY) of this node. 

    -

            Retrieve the list of values to consider as batteries. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x80 

    -

                genre = "User" 

    -

                type = "Byte" 

    -

                readonly = True 

    -

                writeonly = False 

    -

     

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    -

            """ 

    -

            return self.get_values(class_id=0x80, genre='User', \ 

    -

            type='Byte', readonly=True, writeonly=False) 

    -

     

    -

        def get_power_level(self, value_id=None): 

    -

            """ 

    -

            The power level of this node. 

    -

            The command 0x73 (COMMAND_CLASS_POWERLEVEL) of this node. 

    +

        def get_battery_level(self, value_id=None): 

    +

            """ 

    +

            The battery level of this node. 

    +

            The command 0x80 (COMMAND_CLASS_BATTERY) of this node. 

    +

     

    +

            :param value_id: The value to retrieve state. If None, retrieve the first value 

    +

            :type value_id: int 

    +

            :return: The level of this battery 

    +

            :rtype: int 

    +

            """ 

    +

            if value_id is None: 

    +

                for val in self.get_battery_levels(): 

    +

                    return self.values[val].data 

    +

            elif value_id in self.get_battery_levels(): 

    +

                return self.values[value_id].data 

    +

            return None 

    +

     

    +

        def get_battery_levels(self): 

    +

            """ 

    +

            The command 0x80 (COMMAND_CLASS_BATTERY) of this node. 

    +

            Retrieve the list of values to consider as batteries. 

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x80 

    +

                genre = "User" 

    +

                type = "Byte" 

    +

                readonly = True 

    +

                writeonly = False 

    +

     

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

            """ 

    +

            return self.get_values(class_id=0x80, genre='User', \ 

    +

            type='Byte', readonly=True, writeonly=False) 

     

    -

            :param value_id: The value to retrieve state. If None, retrieve the first value 

    -

            :type value_id: int 

    -

            :return: The level of this battery 

    -

            :rtype: int 

    -

            """ 

    -

            if value_id is None: 

    -

                for val in self.get_power_levels(): 

    -

                    return self.values[val].data 

    -

            elif value_id in self.get_power_levels(): 

    -

                return self.values[value_id].data 

    -

            return None 

    -

     

    -

        def get_power_levels(self): 

    -

            """ 

    -

            The command 0x73 (COMMAND_CLASS_POWERLEVEL) of this node. 

    -

            Retrieve the list of values to consider as power_levels. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x73 

    -

                genre = "User" 

    -

                type = "Byte" 

    -

                readonly = True 

    -

                writeonly = False 

    -

     

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    -

            """ 

    -

            return self.get_values(class_id=0x73, genre='User', \ 

    -

            type='Byte', readonly=True, writeonly=False) 

    -

     

    -

        def can_wake_up(self): 

    -

            """ 

    -

            Check if node contain the command class 0x84 (COMMAND_CLASS_WAKE_UP). 

    -

     

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x84 

    -

     

    -

            :return: True if the node can wake up 

    -

            :rtype: bool 

    -

            """ 

    -

            res = self.get_values(class_id=0x84) 

    -

            if res is not None and len(res) > 0: 

    -

                return True 

    -

            else: 

    -

                return False 

    -

     

    -

    class ZWaveNodeSwitch(ZWaveNodeInterface): 

    -

        """ 

    -

        Represents an interface to switches and dimmers Commands 

    -

     

    -

        """ 

    -

     

    -

        def get_switches_all(self): 

    -

            """ 

    -

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    -

            Retrieve the list of values to consider as switches_all. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x27 

    -

                genre = "System" 

    -

                type = "List" 

    -

                readonly = False 

    -

                writeonly = False 

    -

     

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            return self.get_values(class_id=0x27, genre='System', \ 

    -

            type='List', readonly=False, writeonly=False) 

    -

     

    -

        def set_switch_all(self, value_id, value): 

    -

            """ 

    -

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    -

            Set switches_all to value (using value value_id). 

    +

        def get_power_level(self, value_id=None): 

    +

            """ 

    +

            The power level of this node. 

    +

            The command 0x73 (COMMAND_CLASS_POWERLEVEL) of this node. 

    +

     

    +

            :param value_id: The value to retrieve state. If None, retrieve the first value 

    +

            :type value_id: int 

    +

            :return: The level of this battery 

    +

            :rtype: int 

    +

            """ 

    +

            if value_id is None: 

    +

                for val in self.get_power_levels(): 

    +

                    return self.values[val].data 

    +

            elif value_id in self.get_power_levels(): 

    +

                return self.values[value_id].data 

    +

            return None 

    +

     

    +

        def get_power_levels(self): 

    +

            """ 

    +

            The command 0x73 (COMMAND_CLASS_POWERLEVEL) of this node. 

    +

            Retrieve the list of values to consider as power_levels. 

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x73 

    +

                genre = "User" 

    +

                type = "Byte" 

    +

                readonly = True 

    +

                writeonly = False 

    +

     

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

            """ 

    +

            return self.get_values(class_id=0x73, genre='User', \ 

    +

            type='Byte', readonly=True, writeonly=False) 

    +

     

    +

        def can_wake_up(self): 

    +

            """ 

    +

            Check if node contain the command class 0x84 (COMMAND_CLASS_WAKE_UP). 

    +

     

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x84 

    +

     

    +

            :return: True if the node can wake up 

    +

            :rtype: bool 

    +

            """ 

    +

            res = self.get_values(class_id=0x84) 

    +

            if res is not None and len(res) > 0: 

    +

                return True 

    +

            else: 

    +

                return False 

    +

     

    +

    class ZWaveNodeSwitch(ZWaveNodeInterface): 

    +

        """ 

    +

        Represents an interface to switches and dimmers Commands 

    +

     

    +

        """ 

    +

     

    +

        def get_switches_all(self): 

    +

            """ 

    +

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    +

            Retrieve the list of values to consider as switches_all. 

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x27 

    +

                genre = "System" 

    +

                type = "List" 

    +

                readonly = False 

    +

                writeonly = False 

    +

     

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            return self.get_values(class_id=0x27, genre='System', \ 

    +

            type='List', readonly=False, writeonly=False) 

     

    -

            :param value_id: The value to retrieve state 

    -

            :type value_id: int 

    -

            :param value: A predefined string 

    -

            :type value: str 

    +

        def set_switch_all(self, value_id, value): 

    +

            """ 

    +

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    +

            Set switches_all to value (using value value_id). 

     

    -

            """ 

    -

            if value_id in self.get_switches_all(): 

    -

                self.values[value_id].data = value 

    -

                return True 

    -

            return False 

    -

     

    -

        def get_switch_all_state(self, value_id): 

    -

            """ 

    -

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    -

            Return the state (using value value_id) of a switch or a dimmer. 

    +

            :param value_id: The value to retrieve state 

    +

            :type value_id: int 

    +

            :param value: A predefined string 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            if value_id in self.get_switches_all(): 

    +

                self.values[value_id].data = value 

    +

                return True 

    +

            return False 

     

    -

            :param value_id: The value to retrieve state 

    -

            :type value_id: int 

    -

            :return: The state of the value 

    -

            :rtype: bool 

    +

        def get_switch_all_state(self, value_id): 

    +

            """ 

    +

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    +

            Return the state (using value value_id) of a switch or a dimmer. 

     

    -

            """ 

    -

            if value_id in self.get_switches_all(): 

    -

                instance = self.values[value_id].instance 

    -

                for switch in self.get_switches(): 

    -

                    if self.values[switch].instance == instance: 

    -

                        return self.values[switch].data 

    -

                for dimmer in self.get_dimmers(): 

    -

                    if self.values[dimmer].instance == instance: 

    -

                        if self.values[dimmer].data == 0: 

    -

                            return False 

    -

                        else: 

    -

                            return True 

    -

            return None 

    -

     

    -

        def get_switch_all_item(self, value_id): 

    -

            """ 

    -

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    -

            Return the current value (using value value_id) of a switch_all. 

    +

            :param value_id: The value to retrieve state 

    +

            :type value_id: int 

    +

            :return: The state of the value 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            if value_id in self.get_switches_all(): 

    +

                instance = self.values[value_id].instance 

    +

                for switch in self.get_switches(): 

    +

                    if self.values[switch].instance == instance: 

    +

                        return self.values[switch].data 

    +

                for dimmer in self.get_dimmers(): 

    +

                    if self.values[dimmer].instance == instance: 

    +

                        if self.values[dimmer].data == 0: 

    +

                            return False 

    +

                        else: 

    +

                            return True 

    +

            return None 

     

    -

            :param value_id: The value to retrieve switch_all value 

    -

            :type value_id: int 

    -

            :return: The value of the value 

    -

            :rtype: str 

    +

        def get_switch_all_item(self, value_id): 

    +

            """ 

    +

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    +

            Return the current value (using value value_id) of a switch_all. 

     

    -

            """ 

    -

            if value_id in self.get_switches_all(): 

    -

                return self.values[value_id].data 

    -

            return None 

    +

            :param value_id: The value to retrieve switch_all value 

    +

            :type value_id: int 

    +

            :return: The value of the value 

    +

            :rtype: str 

     

    -

        def get_switch_all_items(self, value_id): 

    -

            """ 

    -

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    -

            Return the all the possible values (using value value_id) of a switch_all. 

    +

            """ 

    +

            if value_id in self.get_switches_all(): 

    +

                return self.values[value_id].data 

    +

            return None 

     

    -

            :param value_id: The value to retrieve items list 

    -

            :type value_id: int 

    -

            :return: The value of the value 

    -

            :rtype: set() 

    +

        def get_switch_all_items(self, value_id): 

    +

            """ 

    +

            The command 0x27 (COMMAND_CLASS_SWITCH_ALL) of this node. 

    +

            Return the all the possible values (using value value_id) of a switch_all. 

     

    -

            """ 

    -

            if value_id in self.get_switches_all(): 

    -

                return self.values[value_id].data_items 

    -

            return None 

    +

            :param value_id: The value to retrieve items list 

    +

            :type value_id: int 

    +

            :return: The value of the value 

    +

            :rtype: set() 

     

    -

        def get_switches(self): 

    -

            """ 

    -

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    -

            Retrieve the list of values to consider as switches. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x25 

    -

                genre = "User" 

    -

                type = "Bool" 

    -

                readonly = False 

    -

                writeonly = False 

    -

     

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            return self.get_values(class_id=0x25, genre='User', \ 

    -

            type='Bool', readonly=False, writeonly=False) 

    -

     

    -

        def set_switch(self, value_id, value): 

    -

            """ 

    -

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    -

            Set switch to value (using value value_id). 

    +

            """ 

    +

            if value_id in self.get_switches_all(): 

    +

                return self.values[value_id].data_items 

    +

            return None 

    +

     

    +

        def get_switches(self): 

    +

            """ 

    +

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    +

            Retrieve the list of values to consider as switches. 

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x25 

    +

                genre = "User" 

    +

                type = "Bool" 

    +

                readonly = False 

    +

                writeonly = False 

    +

     

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            return self.get_values(class_id=0x25, genre='User', \ 

    +

            type='Bool', readonly=False, writeonly=False) 

     

    -

            :param value_id: The value to retrieve state 

    -

            :type value_id: int 

    -

            :param value: True or False 

    -

            :type value: bool 

    +

        def set_switch(self, value_id, value): 

    +

            """ 

    +

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    +

            Set switch to value (using value value_id). 

     

    -

            """ 

    -

            if value_id in self.get_switches(): 

    -

                self.values[value_id].data = value 

    -

                return True 

    -

            return False 

    -

     

    -

        def get_switch_state(self, value_id): 

    -

            """ 

    -

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    -

            Return the state (using value value_id) of a switch. 

    +

            :param value_id: The value to retrieve state 

    +

            :type value_id: int 

    +

            :param value: True or False 

    +

            :type value: bool 

    +

     

    +

            """ 

    +

            if value_id in self.get_switches(): 

    +

                self.values[value_id].data = value 

    +

                return True 

    +

            return False 

     

    -

            :param value_id: The value to retrieve state 

    -

            :type value_id: int 

    -

            :return: The state of the value 

    -

            :rtype: bool 

    +

        def get_switch_state(self, value_id): 

    +

            """ 

    +

            The command 0x25 (COMMAND_CLASS_SWITCH_BINARY) of this node. 

    +

            Return the state (using value value_id) of a switch. 

     

    -

            """ 

    -

            if value_id in self.get_switches(): 

    -

                return self.values[value_id].data 

    -

            return None 

    +

            :param value_id: The value to retrieve state 

    +

            :type value_id: int 

    +

            :return: The state of the value 

    +

            :rtype: bool 

     

    -

        def get_dimmers(self): 

    -

            """ 

    -

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    -

            Retrieve the list of values to consider as dimmers. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x26 

    -

                genre = "User" 

    -

                type = "Bool" 

    -

                readonly = False 

    -

                writeonly = False 

    -

     

    -

            :return: The list of dimmers on this node 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            return self.get_values(class_id=0x26, genre='User', \ 

    -

            type='Byte', readonly=False, writeonly=False) 

    -

     

    -

        def set_dimmer(self, value_id, value): 

    -

            """ 

    -

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    -

            Set switch to value (using value value_id). 

    +

            """ 

    +

            if value_id in self.get_switches(): 

    +

                return self.values[value_id].data 

    +

            return None 

    +

     

    +

        def get_dimmers(self): 

    +

            """ 

    +

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    +

            Retrieve the list of values to consider as dimmers. 

    +

            Filter rules are : 

    +

     

    +

                command_class = 0x26 

    +

                genre = "User" 

    +

                type = "Bool" 

    +

                readonly = False 

    +

                writeonly = False 

    +

     

    +

            :return: The list of dimmers on this node 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            return self.get_values(class_id=0x26, genre='User', \ 

    +

            type='Byte', readonly=False, writeonly=False) 

     

    -

            :param value_id: The value to retrieve state 

    -

            :type value_id: int 

    -

            :param value: The level : a value between 0-99 or 255. 255 set the level to the last value. \ 

    -

            0 turn the dimmer off 

    -

            :type value: int 

    -

     

    -

            """ 

    -

            logger.debug("set_dimmer Level:%s", value) 

    -

            if value_id in self.get_dimmers(): 

    -

                if 99 < value < 255: 

    -

                    value = 99 

    -

                elif value < 0: 

    -

                    value = 0 

    -

                self.values[value_id].data = value 

    -

                #Dimmers doesn't return the good level. 

    -

                #Add a Timer to refresh the value 

    -

                if value == 0: 

    -

                    timer1 = Timer(1, self.values[value_id].refresh) 

    -

                    timer1.start() 

    -

                    timer2 = Timer(2, self.values[value_id].refresh) 

    -

                    timer2.start() 

    -

                return True 

    -

            return False 

    -

     

    -

        def get_dimmer_level(self, value_id): 

    -

            """ 

    -

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    -

            Get the dimmer level (using value value_id). 

    +

        def set_dimmer(self, value_id, value): 

    +

            """ 

    +

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    +

            Set switch to value (using value value_id). 

    +

     

    +

            :param value_id: The value to retrieve state 

    +

            :type value_id: int 

    +

            :param value: The level : a value between 0-99 or 255. 255 set the level to the last value. \ 

    +

            0 turn the dimmer off 

    +

            :type value: int 

    +

     

    +

            """ 

    +

            logger.debug("set_dimmer Level:%s", value) 

    +

            if value_id in self.get_dimmers(): 

    +

                if 99 < value < 255: 

    +

                    value = 99 

    +

                elif value < 0: 

    +

                    value = 0 

    +

                self.values[value_id].data = value 

    +

                #Dimmers doesn't return the good level. 

    +

                #Add a Timer to refresh the value 

    +

                if value == 0: 

    +

                    timer1 = Timer(1, self.values[value_id].refresh) 

    +

                    timer1.start() 

    +

                    timer2 = Timer(2, self.values[value_id].refresh) 

    +

                    timer2.start() 

    +

                return True 

    +

            return False 

     

    -

            :param value_id: The value to retrieve level 

    -

            :type value_id: int 

    -

            :return: The level : a value between 0-99 

    -

            :rtype: int 

    +

        def get_dimmer_level(self, value_id): 

    +

            """ 

    +

            The command 0x26 (COMMAND_CLASS_SWITCH_MULTILEVEL) of this node. 

    +

            Get the dimmer level (using value value_id). 

     

    -

            """ 

    -

            if value_id in self.get_dimmers(): 

    -

                return self.values[value_id].data 

    -

            return None 

    +

            :param value_id: The value to retrieve level 

    +

            :type value_id: int 

    +

            :return: The level : a value between 0-99 

    +

            :rtype: int 

     

    -

    class ZWaveNodeSensor(ZWaveNodeInterface): 

    -

        """ 

    -

        Represents an interface to Sensor Commands 

    -

     

    -

        """ 

    -

     

    -

        def get_sensors(self, type='All'): 

    -

            """ 

    -

            The command 0x30 (COMMAND_CLASS_SENSOR_BINARY) of this node. 

    -

            The command 0x31 (COMMAND_CLASS_SENSOR_MULTILEVEL) of this node. 

    -

            The command 0x32 (COMMAND_CLASS_METER) of this node. 

    -

            Retrieve the list of values to consider as sensors. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x30-32 

    -

                genre = "User" 

    -

                readonly = True 

    -

                writeonly = False 

    +

            """ 

    +

            if value_id in self.get_dimmers(): 

    +

                return self.values[value_id].data 

    +

            return None 

    +

     

    +

    class ZWaveNodeSensor(ZWaveNodeInterface): 

    +

        """ 

    +

        Represents an interface to Sensor Commands 

    +

     

    +

        """ 

    +

     

    +

        def get_sensors(self, type='All'): 

    +

            """ 

    +

            The command 0x30 (COMMAND_CLASS_SENSOR_BINARY) of this node. 

    +

            The command 0x31 (COMMAND_CLASS_SENSOR_MULTILEVEL) of this node. 

    +

            The command 0x32 (COMMAND_CLASS_METER) of this node. 

    +

            Retrieve the list of values to consider as sensors. 

    +

            Filter rules are : 

     

    -

            :param type: the type of value 

    -

            :type type: 'All' or PyValueTypes 

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    +

                command_class = 0x30-32 

    +

                genre = "User" 

    +

                readonly = True 

    +

                writeonly = False 

     

    -

            """ 

    -

            values = {} 

    -

            values.update(self.get_values(type=type, class_id=0x30, genre='User', \ 

    -

                readonly=True, writeonly=False)) 

    -

            values.update(self.get_values(type=type, class_id=0x31, genre='User', \ 

    -

                readonly=True, writeonly=False)) 

    -

            values.update(self.get_values(type=type, class_id=0x32, genre='User', \ 

    -

                readonly=True, writeonly=False)) 

    -

            return values 

    -

     

    -

        def get_sensor_value(self, value_id): 

    -

            """ 

    -

            The command 0x30 (COMMAND_CLASS_SENSOR_BINARY) of this node. 

    -

            The command 0x31 (COMMAND_CLASS_SENSOR_MULTILEVEL) of this node. 

    -

            The command 0x32 (COMMAND_CLASS_METER) of this node. 

    -

     

    -

            :param value_id: The value to retrieve value 

    -

            :type value_id: int 

    -

            :return: The state of the sensors 

    -

            :rtype: variable 

    +

            :param type: the type of value 

    +

            :type type: 'All' or PyValueTypes 

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            values = {} 

    +

            values.update(self.get_values(type=type, class_id=0x30, genre='User', \ 

    +

                readonly=True, writeonly=False)) 

    +

            values.update(self.get_values(type=type, class_id=0x31, genre='User', \ 

    +

                readonly=True, writeonly=False)) 

    +

            values.update(self.get_values(type=type, class_id=0x32, genre='User', \ 

    +

                readonly=True, writeonly=False)) 

    +

            return values 

    +

     

    +

        def get_sensor_value(self, value_id): 

    +

            """ 

    +

            The command 0x30 (COMMAND_CLASS_SENSOR_BINARY) of this node. 

    +

            The command 0x31 (COMMAND_CLASS_SENSOR_MULTILEVEL) of this node. 

    +

            The command 0x32 (COMMAND_CLASS_METER) of this node. 

     

    -

            """ 

    -

            if value_id in self.get_sensors(): 

    -

                return self.values[value_id].data 

    -

            return None 

    +

            :param value_id: The value to retrieve value 

    +

            :type value_id: int 

    +

            :return: The state of the sensors 

    +

            :rtype: variable 

     

    -

    class ZWaveNodeSecurity(ZWaveNodeInterface): 

    -

        """ 

    -

        Represents an interface to Security Commands 

    -

     

    -

        """ 

    -

     

    -

        def get_protections(self): 

    -

            """ 

    -

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    -

            Retrieve the list of values to consider as protection. 

    -

            Filter rules are : 

    -

     

    -

                command_class = 0x75 

    -

                genre = "User" 

    -

                readonly = True 

    -

                writeonly = False 

    +

            """ 

    +

            if value_id in self.get_sensors(): 

    +

                return self.values[value_id].data 

    +

            return None 

    +

     

    +

    class ZWaveNodeSecurity(ZWaveNodeInterface): 

    +

        """ 

    +

        Represents an interface to Security Commands 

    +

     

    +

        """ 

    +

     

    +

        def get_protections(self): 

    +

            """ 

    +

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    +

            Retrieve the list of values to consider as protection. 

    +

            Filter rules are : 

     

    -

            :return: The list of switches on this node 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            return self.get_values(class_id=0x75, genre='System', \ 

    -

                type='List', readonly=False, writeonly=False) 

    -

     

    -

        def set_protection(self, value_id, value): 

    -

            """ 

    -

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    -

            Set protection to value (using value value_id). 

    +

                command_class = 0x75 

    +

                genre = "User" 

    +

                readonly = True 

    +

                writeonly = False 

    +

     

    +

            :return: The list of switches on this node 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            return self.get_values(class_id=0x75, genre='System', \ 

    +

                type='List', readonly=False, writeonly=False) 

     

    -

            :param value_id: The value to set protection 

    -

            :type value_id: int 

    -

            :param value: A predefined string 

    -

            :type value: str 

    +

        def set_protection(self, value_id, value): 

    +

            """ 

    +

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    +

            Set protection to value (using value value_id). 

     

    -

            """ 

    -

            if value_id in self.get_protections(): 

    -

                self.values[value_id].data = value 

    -

                return True 

    -

            return False 

    -

     

    -

        def get_protection_item(self, value_id): 

    -

            """ 

    -

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    -

            Return the current value (using value value_id) of a protection. 

    +

            :param value_id: The value to set protection 

    +

            :type value_id: int 

    +

            :param value: A predefined string 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            if value_id in self.get_protections(): 

    +

                self.values[value_id].data = value 

    +

                return True 

    +

            return False 

     

    -

            :param value_id: The value to retrieve protection value 

    -

            :type value_id: int 

    -

            :return: The value of the value 

    -

            :rtype: str 

    +

        def get_protection_item(self, value_id): 

    +

            """ 

    +

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    +

            Return the current value (using value value_id) of a protection. 

     

    -

            """ 

    -

            if value_id in self.get_protections(): 

    -

                return self.values[value_id].data 

    -

            return None 

    +

            :param value_id: The value to retrieve protection value 

    +

            :type value_id: int 

    +

            :return: The value of the value 

    +

            :rtype: str 

     

    -

        def get_protection_items(self, value_id): 

    -

            """ 

    -

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    -

            Return the all the possible values (using value value_id) of a protection. 

    +

            """ 

    +

            if value_id in self.get_protections(): 

    +

                return self.values[value_id].data 

    +

            return None 

     

    -

            :param value_id: The value to retrieve items list 

    -

            :type value_id: int 

    -

            :return: The value of the value 

    -

            :rtype: set() 

    +

        def get_protection_items(self, value_id): 

    +

            """ 

    +

            The command 0x75 (COMMAND_CLASS_PROTECTION) of this node. 

    +

            Return the all the possible values (using value value_id) of a protection. 

     

    -

            """ 

    -

            if value_id in self.get_protections(): 

    -

                return self.values[value_id].data_items 

    -

            return None 

    +

            :param value_id: The value to retrieve items list 

    +

            :type value_id: int 

    +

            :return: The value of the value 

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            if value_id in self.get_protections(): 

    +

                return self.values[value_id].data_items 

    +

            return None 

    @@ -802,692 +868,758 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    import sys 

    -

    if sys.hexversion >= 0x3000000: 

    -

        from pydispatch import dispatcher 

    -

    else: 

    -

        from louie import dispatcher 

    -

    import time 

    -

    from openzwave.object import ZWaveObject 

    -

    from libopenzwave import PyStatDriver 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveController(ZWaveObject): 

    -

        ''' 

    -

        The controller manager. 

    -

     

    -

        Allows to retrieve informations about the library, statistics, ... 

    -

        Also used to send commands to the controller 

    -

     

    -

        Commands : 

    -

     

    -

            - Driver::ControllerCommand_AddController : Add a new secondary controller to the Z-Wave network. 

    -

            - Driver::ControllerCommand_AddDevice : Add a new device (but not a controller) to the Z-Wave network. 

    -

            - Driver::ControllerCommand_CreateNewPrimary : (Not yet implemented) 

    -

            - Driver::ControllerCommand_ReceiveConfiguration : 

    -

            - Driver::ControllerCommand_RemoveController : remove a controller from the Z-Wave network. 

    -

            - Driver::ControllerCommand_RemoveDevice : remove a device (but not a controller) from the Z-Wave network. 

    -

            - Driver::ControllerCommand_RemoveFailedNode : move a node to the controller's list of failed nodes.  The node must actually 

    -

                                                           have failed or have been disabled since the command will fail if it responds.  A node must be in the controller's failed nodes list 

    -

                                                           or ControllerCommand_ReplaceFailedNode to work. 

    -

            - Driver::ControllerCommand_HasNodeFailed : Check whether a node is in the controller's failed nodes list. 

    -

            - Driver::ControllerCommand_ReplaceFailedNode : replace a failed device with another. If the node is not in 

    -

                                                            the controller's failed nodes list, or the node responds, this command will fail. 

    -

            - Driver:: ControllerCommand_TransferPrimaryRole : (Not yet implemented) - Add a new controller to the network and 

    -

                                                               make it the primary.  The existing primary will become a secondary controller. 

    -

            - Driver::ControllerCommand_RequestNetworkUpdate : Update the controller with network information from the SUC/SIS. 

    -

            - Driver::ControllerCommand_RequestNodeNeighborUpdate : Get a node to rebuild its neighbour list.  This method also does ControllerCommand_RequestNodeNeighbors afterwards. 

    -

            - Driver::ControllerCommand_AssignReturnRoute : Assign a network return route to a device. 

    -

            - Driver::ControllerCommand_DeleteAllReturnRoutes : Delete all network return routes from a device. 

    -

            - Driver::ControllerCommand_CreateButton : Create a handheld button id. 

    -

            - Driver::ControllerCommand_DeleteButton : Delete a handheld button id. 

    -

     

    -

        Callbacks : 

    -

     

    -

            - Driver::ControllerState_Waiting : The controller is waiting for a user action.  A notice should be displayed 

    -

                                                to the user at this point, telling them what to do next. 

    -

                                                For the add, remove, replace and transfer primary role commands, the user needs to be told to press the 

    -

                                                inclusion button on the device that  is going to be added or removed.  For ControllerCommand_ReceiveConfiguration, 

    -

                                                they must set their other controller to send its data, and for ControllerCommand_CreateNewPrimary, set the other 

    -

                                                controller to learn new data. 

    -

            - Driver::ControllerState_InProgress : the controller is in the process of adding or removing the chosen node.  It is now too late to cancel the command. 

    -

            - Driver::ControllerState_Complete : the controller has finished adding or removing the node, and the command is complete. 

    -

            - Driver::ControllerState_Failed : will be sent if the command fails for any reason. 

    -

     

    -

        ''' 

    -

        SIGNAL_CTRL_NORMAL = 'Normal' 

    -

        SIGNAL_CTRL_STARTING = 'Starting' 

    -

        SIGNAL_CTRL_CANCEL = 'Cancel' 

    -

        SIGNAL_CTRL_ERROR = 'Error' 

    -

        SIGNAL_CTRL_WAITING = 'Waiting' 

    -

        SIGNAL_CTRL_SLEEPING = 'Sleeping' 

    -

        SIGNAL_CTRL_INPROGRESS = 'InProgress' 

    -

        SIGNAL_CTRL_COMPLETED = 'Completed' 

    -

        SIGNAL_CTRL_FAILED = 'Failed' 

    -

        SIGNAL_CTRL_NODEOK = 'NodeOK' 

    -

        SIGNAL_CTRL_NODEFAILED = 'NodeFailed' 

    -

     

    -

        SIGNAL_CONTROLLER = 'Message' 

    -

     

    -

        CMD_NONE = 0 

    -

        CMD_ADDDEVICE = 1 

    -

        CMD_CREATENEWPRIMARY = 2 

    -

        CMD_RECEIVECONFIGURATION = 3 

    -

        CMD_REMOVEDEVICE = 4 

    -

        CMD_REMOVEFAILEDNODE = 5 

    -

        CMD_HASNODEFAILED = 6 

    -

        CMD_REPLACEFAILEDNODE = 7 

    -

        CMD_TRANSFERPRIMARYROLE = 8 

    -

        CMD_REQUESTNETWORKUPDATE = 9 

    -

        CMD_REQUESTNODENEIGHBORUPDATE = 10 

    -

        CMD_ASSIGNRETURNROUTE = 11 

    -

        CMD_DELETEALLRETURNROUTES = 12 

    -

        CMD_SENDNODEINFORMATION = 13 

    -

        CMD_REPLICATIONSEND = 14 

    -

        CMD_CREATEBUTTON = 15 

    -

        CMD_DELETEBUTTON = 16 

    -

     

    -

        def __init__(self, controller_id, network, options=None): 

    -

            """ 

    -

            Initialize controller object 

    -

     

    -

            :param controller_id: The Id of the controller 

    -

            :type controller_id: int 

    -

            :param network: The network the controller is attached to 

    -

            :type network: ZwaveNetwork 

    -

            :param options: options of the manager 

    -

            :type options: str 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    import sys 

    +

    if sys.hexversion >= 0x3000000: 

    +

        from pydispatch import dispatcher 

    +

    else: 

    +

        from louie import dispatcher 

    +

    import time 

    +

    from openzwave.object import ZWaveObject 

    +

    from libopenzwave import PyStatDriver 

    +

    import threading 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveController(ZWaveObject): 

    +

        ''' 

    +

        The controller manager. 

    +

     

    +

        Allows to retrieve informations about the library, statistics, ... 

    +

        Also used to send commands to the controller 

    +

     

    +

        Commands : 

    +

     

    +

            - Driver::ControllerCommand_AddController : Add a new secondary controller to the Z-Wave network. 

    +

            - Driver::ControllerCommand_AddDevice : Add a new device (but not a controller) to the Z-Wave network. 

    +

            - Driver::ControllerCommand_CreateNewPrimary : (Not yet implemented) 

    +

            - Driver::ControllerCommand_ReceiveConfiguration : 

    +

            - Driver::ControllerCommand_RemoveController : remove a controller from the Z-Wave network. 

    +

            - Driver::ControllerCommand_RemoveDevice : remove a device (but not a controller) from the Z-Wave network. 

    +

            - Driver::ControllerCommand_RemoveFailedNode : move a node to the controller's list of failed nodes.  The node must actually 

    +

                                                           have failed or have been disabled since the command will fail if it responds.  A node must be in the controller's failed nodes list 

    +

                                                           or ControllerCommand_ReplaceFailedNode to work. 

    +

            - Driver::ControllerCommand_HasNodeFailed : Check whether a node is in the controller's failed nodes list. 

    +

            - Driver::ControllerCommand_ReplaceFailedNode : replace a failed device with another. If the node is not in 

    +

                                                            the controller's failed nodes list, or the node responds, this command will fail. 

    +

            - Driver:: ControllerCommand_TransferPrimaryRole : (Not yet implemented) - Add a new controller to the network and 

    +

                                                               make it the primary.  The existing primary will become a secondary controller. 

    +

            - Driver::ControllerCommand_RequestNetworkUpdate : Update the controller with network information from the SUC/SIS. 

    +

            - Driver::ControllerCommand_RequestNodeNeighborUpdate : Get a node to rebuild its neighbour list.  This method also does ControllerCommand_RequestNodeNeighbors afterwards. 

    +

            - Driver::ControllerCommand_AssignReturnRoute : Assign a network return route to a device. 

    +

            - Driver::ControllerCommand_DeleteAllReturnRoutes : Delete all network return routes from a device. 

    +

            - Driver::ControllerCommand_CreateButton : Create a handheld button id. 

    +

            - Driver::ControllerCommand_DeleteButton : Delete a handheld button id. 

    +

     

    +

        Callbacks : 

    +

     

    +

            - Driver::ControllerState_Waiting : The controller is waiting for a user action.  A notice should be displayed 

    +

                                                to the user at this point, telling them what to do next. 

    +

                                                For the add, remove, replace and transfer primary role commands, the user needs to be told to press the 

    +

                                                inclusion button on the device that  is going to be added or removed.  For ControllerCommand_ReceiveConfiguration, 

    +

                                                they must set their other controller to send its data, and for ControllerCommand_CreateNewPrimary, set the other 

    +

                                                controller to learn new data. 

    +

            - Driver::ControllerState_InProgress : the controller is in the process of adding or removing the chosen node.  It is now too late to cancel the command. 

    +

            - Driver::ControllerState_Complete : the controller has finished adding or removing the node, and the command is complete. 

    +

            - Driver::ControllerState_Failed : will be sent if the command fails for any reason. 

    +

     

    +

        ''' 

    +

        SIGNAL_CTRL_NORMAL = 'Normal' 

    +

        SIGNAL_CTRL_STARTING = 'Starting' 

    +

        SIGNAL_CTRL_CANCEL = 'Cancel' 

    +

        SIGNAL_CTRL_ERROR = 'Error' 

    +

        SIGNAL_CTRL_WAITING = 'Waiting' 

    +

        SIGNAL_CTRL_SLEEPING = 'Sleeping' 

    +

        SIGNAL_CTRL_INPROGRESS = 'InProgress' 

    +

        SIGNAL_CTRL_COMPLETED = 'Completed' 

    +

        SIGNAL_CTRL_FAILED = 'Failed' 

    +

        SIGNAL_CTRL_NODEOK = 'NodeOK' 

    +

        SIGNAL_CTRL_NODEFAILED = 'NodeFailed' 

    +

     

    +

        SIGNAL_CONTROLLER = 'Message' 

    +

        SIGNAL_CONTROLLER_STATS = 'ControllerStats' 

    +

     

    +

        CMD_NONE = 0 

    +

        CMD_ADDDEVICE = 1 

    +

        CMD_CREATENEWPRIMARY = 2 

    +

        CMD_RECEIVECONFIGURATION = 3 

    +

        CMD_REMOVEDEVICE = 4 

    +

        CMD_REMOVEFAILEDNODE = 5 

    +

        CMD_HASNODEFAILED = 6 

    +

        CMD_REPLACEFAILEDNODE = 7 

    +

        CMD_TRANSFERPRIMARYROLE = 8 

    +

        CMD_REQUESTNETWORKUPDATE = 9 

    +

        CMD_REQUESTNODENEIGHBORUPDATE = 10 

    +

        CMD_ASSIGNRETURNROUTE = 11 

    +

        CMD_DELETEALLRETURNROUTES = 12 

    +

        CMD_SENDNODEINFORMATION = 13 

    +

        CMD_REPLICATIONSEND = 14 

    +

        CMD_CREATEBUTTON = 15 

    +

        CMD_DELETEBUTTON = 16 

    +

     

    +

        def __init__(self, controller_id, network, options=None): 

    +

            """ 

    +

            Initialize controller object 

     

    -

            """ 

    -

            if controller_id is None: 

    -

                controller_id = 1 

    -

            ZWaveObject.__init__(self, controller_id, network) 

    -

            self._node = None 

    -

            self._options = options 

    -

            self._library_type_name = None 

    -

            self._library_version = None 

    -

            self._python_library_version = None 

    -

            self.ctrl_last_state = self.SIGNAL_CTRL_NORMAL 

    -

            self.ctrl_last_message = "" 

    -

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the node. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'home_id: [%s] id: [%s] name: [%s] product: [%s] capabilities: %s library: [%s]' % \ 

    -

              (self._network.home_id_str, self._object_id, self._node.name, self._node.product_name, self.capabilities, self.library_description) 

    -

     

    -

        @property 

    -

        def node(self): 

    -

            """ 

    -

            The node controller on the network. 

    -

     

    -

            :return: The node controller on the network 

    -

            :rtype: ZWaveNode 

    -

     

    -

            """ 

    -

            return self._node 

    +

            :param controller_id: The Id of the controller 

    +

            :type controller_id: int 

    +

            :param network: The network the controller is attached to 

    +

            :type network: ZwaveNetwork 

    +

            :param options: options of the manager 

    +

            :type options: str 

    +

     

    +

            """ 

    +

            if controller_id is None: 

    +

                controller_id = 1 

    +

            ZWaveObject.__init__(self, controller_id, network) 

    +

            self._node = None 

    +

            self._options = options 

    +

            self._library_type_name = None 

    +

            self._library_version = None 

    +

            self._python_library_version = None 

    +

            self.ctrl_last_state = self.SIGNAL_CTRL_NORMAL 

    +

            self.ctrl_last_message = "" 

    +

            self._timer_statistics = None 

    +

            self._interval_statistics = 0.0 

    +

     

    +

        def stop(self): 

    +

            """ 

    +

            Stop the controller and all this threads. 

    +

     

    +

            """ 

    +

            if self._timer_statistics is not None: 

    +

                self._timer_statistics.cancel() 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the node. 

     

    -

        @node.setter 

    -

        def node(self, value): 

    -

            """ 

    -

            The node controller on the network. 

    -

     

    -

            :param value: The node of the controller on the network 

    -

            :type value: ZWaveNode 

    -

     

    -

            """ 

    -

            self._node = value 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'home_id: [%s] id: [%s] name: [%s] product: [%s] capabilities: %s library: [%s]' % \ 

    +

              (self._network.home_id_str, self._object_id, self._node.name, self._node.product_name, self.capabilities, self.library_description) 

    +

     

    +

        @property 

    +

        def node(self): 

    +

            """ 

    +

            The node controller on the network. 

     

    -

        @property 

    -

        def node_id(self): 

    -

            """ 

    -

            The node Id of the controller on the network. 

    -

     

    -

            :return: The node id of the controller on the network 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            if self.node is not None: 

    -

                return self.node.object_id 

    -

            else: 

    -

                return None 

    +

            :return: The node controller on the network 

    +

            :rtype: ZWaveNode 

    +

     

    +

            """ 

    +

            return self._node 

    +

     

    +

        @node.setter 

    +

        def node(self, value): 

    +

            """ 

    +

            The node controller on the network. 

    +

     

    +

            :param value: The node of the controller on the network 

    +

            :type value: ZWaveNode 

     

    -

        @property 

    -

        def name(self): 

    -

            """ 

    -

            The node name of the controller on the network. 

    -

     

    -

            :return: The node's name of the controller on the network 

    -

            :rtype: str 

    +

            """ 

    +

            self._node = value 

    +

     

    +

        @property 

    +

        def node_id(self): 

    +

            """ 

    +

            The node Id of the controller on the network. 

     

    -

            """ 

    -

            if self.node is not None: 

    -

                return self.node.name 

    -

            else: 

    -

                return None 

    -

     

    -

        @property 

    -

        def library_type_name(self): 

    -

            """ 

    -

            The name of the library. 

    -

     

    -

            :return: The cpp library name 

    -

            :rtype: str 

    +

            :return: The node id of the controller on the network 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            if self.node is not None: 

    +

                return self.node.object_id 

    +

            else: 

    +

                return None 

    +

     

    +

        @property 

    +

        def name(self): 

    +

            """ 

    +

            The node name of the controller on the network. 

     

    -

            """ 

    -

            return self._network.manager.getLibraryTypeName(self._network.home_id) 

    +

            :return: The node's name of the controller on the network 

    +

            :rtype: str 

     

    -

        @property 

    -

        def library_description(self): 

    -

            """ 

    -

            The description of the library. 

    -

     

    -

            :return: The library description (name and version) 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return '%s version %s' % (self.library_type_name, self.library_version) 

    +

            """ 

    +

            if self.node is not None: 

    +

                return self.node.name 

    +

            else: 

    +

                return None 

    +

     

    +

        @property 

    +

        def library_type_name(self): 

    +

            """ 

    +

            The name of the library. 

     

    -

        @property 

    -

        def library_version(self): 

    -

            """ 

    -

            The version of the library. 

    -

     

    -

            :return: The cpp library version 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getLibraryVersion(self._network.home_id) 

    +

            :return: The cpp library name 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getLibraryTypeName(self._network.home_id) 

    +

     

    +

        @property 

    +

        def library_description(self): 

    +

            """ 

    +

            The description of the library. 

     

    -

        @property 

    -

        def python_library_version(self): 

    -

            """ 

    -

            The version of the python library. 

    -

     

    -

            :return: The python library version 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getPythonLibraryVersionNumber() 

    +

            :return: The library description (name and version) 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return '%s version %s' % (self.library_type_name, self.library_version) 

    +

     

    +

        @property 

    +

        def library_version(self): 

    +

            """ 

    +

            The version of the library. 

     

    -

        @property 

    -

        def ozw_library_version(self): 

    -

            """ 

    -

            The version of the openzwave library. 

    -

     

    -

            :return: The openzwave library version 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getOzwLibraryVersion() 

    +

            :return: The cpp library version 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getLibraryVersion(self._network.home_id) 

    +

     

    +

        @property 

    +

        def python_library_version(self): 

    +

            """ 

    +

            The version of the python library. 

     

    -

        @property 

    -

        def library_config_path(self): 

    -

            """ 

    -

            The library Config path. 

    -

     

    -

            :return: The library config directory 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            if self._options is not None: 

    -

                return self._options.config_path 

    -

            else: 

    -

                return None 

    +

            :return: The python library version 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getPythonLibraryVersionNumber() 

    +

     

    +

        @property 

    +

        def ozw_library_version(self): 

    +

            """ 

    +

            The version of the openzwave library. 

    +

     

    +

            :return: The openzwave library version 

    +

            :rtype: str 

     

    -

        @property 

    -

        def library_user_path(self): 

    -

            """ 

    -

            The library User path. 

    -

     

    -

            :return: The user directory to store user configuration 

    -

            :rtype: str 

    +

            """ 

    +

            return self._network.manager.getOzwLibraryVersion() 

    +

     

    +

        @property 

    +

        def library_config_path(self): 

    +

            """ 

    +

            The library Config path. 

     

    -

            """ 

    -

            if self._options is not None: 

    -

                return self._options.user_path 

    -

            else: 

    -

                return None 

    -

     

    -

        @property 

    -

        def device(self): 

    -

            """ 

    -

            The device path. 

    -

     

    -

            :return: The device (ie /dev/zwave) 

    -

            :rtype: str 

    +

            :return: The library config directory 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            if self._options is not None: 

    +

                return self._options.config_path 

    +

            else: 

    +

                return None 

    +

     

    +

        @property 

    +

        def library_user_path(self): 

    +

            """ 

    +

            The library User path. 

     

    -

            """ 

    -

            if self._options is not None: 

    -

                return self._options.device 

    -

            else: 

    -

                return None 

    -

     

    -

        @property 

    -

        def options(self): 

    -

            """ 

    -

            The starting options of the manager. 

    -

     

    -

            :return: The options used to start the manager 

    -

            :rtype: ZWaveOption 

    +

            :return: The user directory to store user configuration 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            if self._options is not None: 

    +

                return self._options.user_path 

    +

            else: 

    +

                return None 

    +

     

    +

        @property 

    +

        def device(self): 

    +

            """ 

    +

            The device path. 

     

    -

            """ 

    -

            return self._options 

    +

            :return: The device (ie /dev/zwave) 

    +

            :rtype: str 

     

    -

        @property 

    -

        def stats(self): 

    -

            """ 

    -

            Retrieve statistics from driver. 

    -

     

    -

            Statistics: 

    -

     

    -

                * s_SOFCnt                         : Number of SOF bytes received 

    -

                * s_ACKWaiting                     : Number of unsolicited messages while waiting for an ACK 

    -

                * s_readAborts                     : Number of times read were aborted due to timeouts 

    -

                * s_badChecksum                    : Number of bad checksums 

    -

                * s_readCnt                        : Number of messages successfully read 

    -

                * s_writeCnt                       : Number of messages successfully sent 

    -

                * s_CANCnt                         : Number of CAN bytes received 

    -

                * s_NAKCnt                         : Number of NAK bytes received 

    -

                * s_ACKCnt                         : Number of ACK bytes received 

    -

                * s_OOFCnt                         : Number of bytes out of framing 

    -

                * s_dropped                        : Number of messages dropped & not delivered 

    -

                * s_retries                        : Number of messages retransmitted 

    -

                * s_controllerReadCnt              : Number of controller messages read 

    -

                * s_controllerWriteCnt             : Number of controller messages sent 

    +

            """ 

    +

            if self._options is not None: 

    +

                return self._options.device 

    +

            else: 

    +

                return None 

    +

     

    +

        @property 

    +

        def options(self): 

    +

            """ 

    +

            The starting options of the manager. 

    +

     

    +

            :return: The options used to start the manager 

    +

            :rtype: ZWaveOption 

    +

     

    +

            """ 

    +

            return self._options 

    +

     

    +

        @property 

    +

        def stats(self): 

    +

            """ 

    +

            Retrieve statistics from driver. 

     

    -

            :return: Statistics of the controller 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            return self._network.manager.getDriverStatistics(self.home_id) 

    -

     

    -

        def get_stats_label(self, stat): 

    -

            """ 

    -

            Retrieve label of the statistic from driver. 

    -

     

    -

            :param stat: The code of the stat label to retrieve. 

    -

            :type stat: 

    -

            :return: The label or the stat. 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            #print "stat = %s" % stat 

    -

            return PyStatDriver[stat] 

    -

     

    -

        @property 

    -

        def capabilities(self): 

    -

            """ 

    -

            The capabilities of the controller. 

    -

     

    -

            :return: The capabilities of the controller 

    -

            :rtype: set 

    +

            Statistics: 

    +

     

    +

                * s_SOFCnt                         : Number of SOF bytes received 

    +

                * s_ACKWaiting                     : Number of unsolicited messages while waiting for an ACK 

    +

                * s_readAborts                     : Number of times read were aborted due to timeouts 

    +

                * s_badChecksum                    : Number of bad checksums 

    +

                * s_readCnt                        : Number of messages successfully read 

    +

                * s_writeCnt                       : Number of messages successfully sent 

    +

                * s_CANCnt                         : Number of CAN bytes received 

    +

                * s_NAKCnt                         : Number of NAK bytes received 

    +

                * s_ACKCnt                         : Number of ACK bytes received 

    +

                * s_OOFCnt                         : Number of bytes out of framing 

    +

                * s_dropped                        : Number of messages dropped & not delivered 

    +

                * s_retries                        : Number of messages retransmitted 

    +

                * s_controllerReadCnt              : Number of controller messages read 

    +

                * s_controllerWriteCnt             : Number of controller messages sent 

    +

     

    +

            :return: Statistics of the controller 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            return self._network.manager.getDriverStatistics(self.home_id) 

    +

     

    +

        def get_stats_label(self, stat): 

    +

            """ 

    +

            Retrieve label of the statistic from driver. 

     

    -

            """ 

    -

            caps = set() 

    -

            if self.is_primary_controller: 

    -

                caps.add('primaryController') 

    -

            if self.is_static_update_controller: 

    -

                caps.add('staticUpdateController') 

    -

            if self.is_bridge_controller: 

    -

                caps.add('bridgeController') 

    -

            return caps 

    -

     

    -

        @property 

    -

        def is_primary_controller(self): 

    -

            """ 

    -

            Is this node a primary controller of the network. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isPrimaryController(self.home_id) 

    -

     

    -

        @property 

    -

        def is_static_update_controller(self): 

    -

            """ 

    -

            Is this controller a static update controller (SUC). 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isStaticUpdateController(self.home_id) 

    -

     

    -

        @property 

    -

        def is_bridge_controller(self): 

    -

            """ 

    -

            Is this controller using the bridge controller library. 

    -

     

    -

            :rtype: bool 

    +

            :param stat: The code of the stat label to retrieve. 

    +

            :type stat: 

    +

            :return: The label or the stat. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            #print "stat = %s" % stat 

    +

            return PyStatDriver[stat] 

    +

     

    +

        def do_poll_statistics(self): 

    +

            """ 

    +

            Timer based polling system for statistics 

    +

            """ 

    +

            self._timer_statistics = None 

    +

            stats = self.stats 

    +

            dispatcher.send(self.SIGNAL_CONTROLLER_STATS, \ 

    +

                **{'controller':self, 'stats':stats}) 

    +

     

    +

            self._timer_statistics = threading.Timer(self._interval_statistics, self.do_poll_statistics) 

    +

            self._timer_statistics.start() 

    +

     

    +

        @property 

    +

        def poll_stats(self): 

    +

            """ 

    +

            The interval for polling statistics 

    +

     

    +

            :return: The interval in seconds 

    +

            :rtype: float 

    +

     

    +

            """ 

    +

            return self._interval_statistics 

    +

     

    +

        @poll_stats.setter 

    +

        def poll_stats(self, value): 

    +

            """ 

    +

            The interval for polling statistics 

     

    -

            """ 

    -

            return self._network.manager.isBridgeController(self.home_id) 

    +

            :return: The interval in seconds 

    +

            :rtype: ZWaveNode 

     

    -

        @property 

    -

        def send_queue_count(self): 

    -

            """ 

    -

            Get count of messages in the outgoing send queue. 

    -

     

    -

            :return: Thr count of messages in the outgoing send queue. 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getSendQueueCount(self.home_id) 

    -

     

    -

        def hard_reset(self): 

    -

            """ 

    -

            Hard Reset a PC Z-Wave Controller. 

    -

            Resets a controller and erases its network configuration settings. 

    -

            The controller becomes a primary controller ready to add devices to a new network. 

    +

            :param value: The interval in seconds 

    +

            :type value: float 

    +

     

    +

            """ 

    +

            if value != self._interval_statistics: 

    +

                if self._timer_statistics is not None: 

    +

                    self._timer_statistics.cancel() 

    +

                if value != 0: 

    +

                    self._interval_statistics = value 

    +

                    self._timer_statistics = threading.Timer(self._interval_statistics, self.do_poll_statistics) 

    +

                    self._timer_statistics.start() 

    +

     

    +

        @property 

    +

        def capabilities(self): 

    +

            """ 

    +

            The capabilities of the controller. 

     

    -

            This command fires a lot of louie signals. 

    -

            Louie's clients must disconnect from nodes and values signals 

    +

            :return: The capabilities of the controller 

    +

            :rtype: set 

     

    -

            .. code-block:: python 

    -

     

    -

                    dispatcher.send(self._network.SIGNAL_NETWORK_RESETTED, **{'network': self._network}) 

    -

     

    -

            """ 

    -

            self._network.state = self._network.STATE_RESETTED 

    -

            dispatcher.send(self._network.SIGNAL_NETWORK_RESETTED, \ 

    -

                **{'network': self._network}) 

    -

            self._network.manager.resetController(self._network.home_id) 

    -

            time.sleep(5) 

    -

     

    -

        def soft_reset(self): 

    +

            """ 

    +

            caps = set() 

    +

            if self.is_primary_controller: 

    +

                caps.add('primaryController') 

    +

            if self.is_static_update_controller: 

    +

                caps.add('staticUpdateController') 

    +

            if self.is_bridge_controller: 

    +

                caps.add('bridgeController') 

    +

            return caps 

    +

     

    +

        @property 

    +

        def is_primary_controller(self): 

            """ 

    -

            Soft Reset a PC Z-Wave Controller. 

    -

            Resets a controller without erasing its network configuration settings. 

    -

     

    -

            """ 

    -

            self._network.manager.softResetController(self._network.home_id) 

    -

     

    -

        def begin_command_send_node_information(self, node_id): 

    -

            """ 

    -

            Send a node information frame. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_SENDNODEINFORMATION, self.zwcallback, nodeId=node_id) 

    -

     

    -

        def begin_command_replication_send(self, high_power=False): 

    -

            """ 

    -

            Send information from primary to secondary. 

    -

     

    -

            :param high_power: Usually when adding or removing devices, the controller operates at low power so that the controller must 

    -

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    -

                               operate at normal power levels instead.  Defaults to false. 

    -

            :type high_power: bool 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REPLICATIONSEND, self.zwcallback, highPower=high_power) 

    -

     

    -

        def begin_command_request_network_update(self): 

    -

            """ 

    -

            Update the controller with network information from the SUC/SIS. 

    +

            Is this node a primary controller of the network. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isPrimaryController(self.home_id) 

    +

     

    +

        @property 

    +

        def is_static_update_controller(self): 

    +

            """ 

    +

            Is this controller a static update controller (SUC). 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isStaticUpdateController(self.home_id) 

    +

     

    +

        @property 

    +

        def is_bridge_controller(self): 

    +

            """ 

    +

            Is this controller using the bridge controller library. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isBridgeController(self.home_id) 

    +

     

    +

        @property 

    +

        def send_queue_count(self): 

    +

            """ 

    +

            Get count of messages in the outgoing send queue. 

    +

     

    +

            :return: Thr count of messages in the outgoing send queue. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getSendQueueCount(self.home_id) 

     

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REQUESTNETWORKUPDATE, self.zwcallback) 

    -

     

    -

        def begin_command_add_device(self, high_power=False): 

    -

            """ 

    -

            Add a new device to the Z-Wave network. 

    +

        def hard_reset(self): 

    +

            """ 

    +

            Hard Reset a PC Z-Wave Controller. 

    +

            Resets a controller and erases its network configuration settings. 

    +

            The controller becomes a primary controller ready to add devices to a new network. 

    +

     

    +

            This command fires a lot of louie signals. 

    +

            Louie's clients must disconnect from nodes and values signals 

    +

     

    +

            .. code-block:: python 

     

    -

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    -

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    -

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    -

                               operate at normal power levels instead.  Defaults to false. 

    -

            :type high_power: bool 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_ADDDEVICE, self.zwcallback, highPower=high_power) 

    -

     

    -

        def begin_command_remove_device(self, high_power=False): 

    -

            """ 

    -

            Remove a device from the Z-Wave network. 

    -

     

    -

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    -

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    -

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    -

                               operate at normal power levels instead.  Defaults to false. 

    -

            :type high_power: bool 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REMOVEDEVICE, self.zwcallback, highPower=high_power) 

    -

     

    -

        def begin_command_remove_failed_node(self, node_id): 

    -

            """ 

    -

            Move a node to the controller's list of failed nodes.  The node must 

    -

            actually have failed or have been disabled since the command 

    -

            will fail if it responds.  A node must be in the controller's 

    -

            failed nodes list for ControllerCommand_ReplaceFailedNode to work. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REMOVEFAILEDNODE, self.zwcallback, nodeId=node_id) 

    -

     

    -

        def begin_command_has_node_failed(self, node_id): 

    -

            """ 

    -

            Check whether a node is in the controller's failed nodes list. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_HASNODEFAILED, self.zwcallback, nodeId=node_id) 

    -

     

    -

        def begin_command_replace_failed_node(self, node_id): 

    -

            """ 

    -

            Replace a failed device with another. If the node is not in 

    -

            the controller's failed nodes list, or the node responds, this command will fail. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REPLACEFAILEDNODE, self.zwcallback, nodeId=node_id) 

    -

     

    -

        def begin_command_request_node_neigbhor_update(self, node_id): 

    -

            """ 

    -

            Get a node to rebuild its neighbors list. 

    -

            This method also does ControllerCommand_RequestNodeNeighbors afterwards. 

    +

                    dispatcher.send(self._network.SIGNAL_NETWORK_RESETTED, **{'network': self._network}) 

    +

     

    +

            """ 

    +

            self._network.state = self._network.STATE_RESETTED 

    +

            dispatcher.send(self._network.SIGNAL_NETWORK_RESETTED, \ 

    +

                **{'network':self._network}) 

    +

            self._network.manager.resetController(self._network.home_id) 

    +

            time.sleep(5) 

    +

     

    +

        def soft_reset(self): 

    +

            """ 

    +

            Soft Reset a PC Z-Wave Controller. 

    +

            Resets a controller without erasing its network configuration settings. 

    +

     

    +

            """ 

    +

            self._network.manager.softResetController(self._network.home_id) 

    +

     

    +

        def begin_command_send_node_information(self, node_id): 

    +

            """ 

    +

            Send a node information frame. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_SENDNODEINFORMATION, self.zwcallback, nodeId=node_id) 

    +

     

    +

        def begin_command_replication_send(self, high_power=False): 

    +

            """ 

    +

            Send information from primary to secondary. 

    +

     

    +

            :param high_power: Usually when adding or removing devices, the controller operates at low power so that the controller must 

    +

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    +

                               operate at normal power levels instead.  Defaults to false. 

    +

            :type high_power: bool 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REPLICATIONSEND, self.zwcallback, highPower=high_power) 

    +

     

    +

        def begin_command_request_network_update(self): 

    +

            """ 

    +

            Update the controller with network information from the SUC/SIS. 

    +

     

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REQUESTNETWORKUPDATE, self.zwcallback) 

    +

     

    +

        def begin_command_add_device(self, high_power=False): 

    +

            """ 

    +

            Add a new device to the Z-Wave network. 

    +

     

    +

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    +

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    +

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    +

                               operate at normal power levels instead.  Defaults to false. 

    +

            :type high_power: bool 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_ADDDEVICE, self.zwcallback, highPower=high_power) 

    +

     

    +

        def begin_command_remove_device(self, high_power=False): 

    +

            """ 

    +

            Remove a device from the Z-Wave network. 

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_REQUESTNODENEIGHBORUPDATE, self.zwcallback, nodeId=node_id) 

    -

     

    -

        def begin_command_create_new_primary(self): 

    -

            """ 

    -

            Add a new controller to the Z-Wave network. Used when old primary fails. Requires SUC. 

    -

     

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_CREATENEWPRIMARY, self.zwcallback) 

    -

     

    -

        def begin_command_transfer_primary_role(self, high_power=False): 

    -

            """ 

    -

            Make a different controller the primary. 

    -

            The existing primary will become a secondary controller. 

    -

     

    -

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    -

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    -

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    -

                               operate at normal power levels instead.  Defaults to false. 

    -

            :type high_power: bool 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_TRANSFERPRIMARYROLE, self.zwcallback, highPower=high_power) 

    +

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    +

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    +

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    +

                               operate at normal power levels instead.  Defaults to false. 

    +

            :type high_power: bool 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REMOVEDEVICE, self.zwcallback, highPower=high_power) 

    +

     

    +

        def begin_command_remove_failed_node(self, node_id): 

    +

            """ 

    +

            Move a node to the controller's list of failed nodes.  The node must 

    +

            actually have failed or have been disabled since the command 

    +

            will fail if it responds.  A node must be in the controller's 

    +

            failed nodes list for ControllerCommand_ReplaceFailedNode to work. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REMOVEFAILEDNODE, self.zwcallback, nodeId=node_id) 

    +

     

    +

        def begin_command_has_node_failed(self, node_id): 

    +

            """ 

    +

            Check whether a node is in the controller's failed nodes list. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

     

    -

        def begin_command_receive_configuration(self): 

    -

            """ 

    -

            - 

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_HASNODEFAILED, self.zwcallback, nodeId=node_id) 

     

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_RECEIVECONFIGURATION, self.zwcallback) 

    -

     

    -

        def begin_command_assign_return_route(self, from_node_id, to_node_id): 

    -

            """ 

    -

            Assign a network return route from a node to another one. 

    -

     

    -

            :param from_node_id: The node that we will use the route. 

    -

            :type from_node_id: int 

    -

            :param to_node_id: The node that we will change the route 

    -

            :type to_node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_ASSIGNRETURNROUTE, self.zwcallback, nodeId=from_node_id, arg=to_node_id) 

    -

     

    -

        def begin_command_delete_all_return_routes(self, node_id): 

    -

            """ 

    -

            Delete all network return routes from a device. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_DELETEALLRETURNROUTES, self.zwcallback, nodeId=node_id) 

    +

        def begin_command_replace_failed_node(self, node_id): 

    +

            """ 

    +

            Replace a failed device with another. If the node is not in 

    +

            the controller's failed nodes list, or the node responds, this command will fail. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REPLACEFAILEDNODE, self.zwcallback, nodeId=node_id) 

    +

     

    +

        def begin_command_request_node_neigbhor_update(self, node_id): 

    +

            """ 

    +

            Get a node to rebuild its neighbors list. 

    +

            This method also does ControllerCommand_RequestNodeNeighbors afterwards. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_REQUESTNODENEIGHBORUPDATE, self.zwcallback, nodeId=node_id) 

    +

     

    +

        def begin_command_create_new_primary(self): 

    +

            """ 

    +

            Add a new controller to the Z-Wave network. Used when old primary fails. Requires SUC. 

    +

     

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

     

    -

        def begin_command_create_button(self, node_id, arg=0): 

    -

            """ 

    -

            Create a handheld button id 

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_CREATENEWPRIMARY, self.zwcallback) 

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :param arg: 

    -

            :type arg: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_CREATEBUTTON, self.zwcallback, nodeId=node_id, arg=arg) 

    -

     

    -

        def begin_command_delete_button(self, node_id, arg=0): 

    -

            """ 

    -

            Delete a handheld button id. 

    -

     

    -

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    -

            :type node_id: int 

    -

            :param arg: 

    -

            :type arg: int 

    -

            :return: True if the command was accepted and has started. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    -

                self.CMD_DELETEBUTTON, self.zwcallback, nodeId=node_id, arg=arg) 

    -

     

    -

        def cancel_command(self): 

    -

            """ 

    -

            Cancels any in-progress command running on a controller. 

    -

     

    -

            """ 

    -

            return self._network.manager.cancelControllerCommand(self._network.home_id) 

    -

     

    -

        def zwcallback(self, args): 

    -

            """ 

    -

            The Callback Handler used when sendig commands to the controller. 

    -

            Dispatch a louie message. 

    -

     

    -

            To do : add node in signal when necessary 

    -

     

    -

            :param args: A dict containing informations about the state of the controller 

    -

            :type args: dict() 

    +

        def begin_command_transfer_primary_role(self, high_power=False): 

    +

            """ 

    +

            Make a different controller the primary. 

    +

            The existing primary will become a secondary controller. 

    +

     

    +

            :param high_power: Used only with the AddDevice, AddController, RemoveDevice and RemoveController commands. 

    +

                               Usually when adding or removing devices, the controller operates at low power so that the controller must 

    +

                               be physically close to the device for security reasons.  If _highPower is true, the controller will 

    +

                               operate at normal power levels instead.  Defaults to false. 

    +

            :type high_power: bool 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_TRANSFERPRIMARYROLE, self.zwcallback, highPower=high_power) 

    +

     

    +

        def begin_command_receive_configuration(self): 

    +

            """ 

    +

            - 

    +

     

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_RECEIVECONFIGURATION, self.zwcallback) 

    +

     

    +

        def begin_command_assign_return_route(self, from_node_id, to_node_id): 

    +

            """ 

    +

            Assign a network return route from a node to another one. 

    +

     

    +

            :param from_node_id: The node that we will use the route. 

    +

            :type from_node_id: int 

    +

            :param to_node_id: The node that we will change the route 

    +

            :type to_node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_ASSIGNRETURNROUTE, self.zwcallback, nodeId=from_node_id, arg=to_node_id) 

     

    -

            """ 

    -

            logger.debug('Controller state change : %s', args) 

    -

            state = args['state'] 

    -

            message = args['message'] 

    -

            self.ctrl_last_state = state 

    -

            self.ctrl_last_message = message 

    -

            if state == self.SIGNAL_CTRL_WAITING: 

    -

                dispatcher.send(self.SIGNAL_CTRL_WAITING, \ 

    -

                    **{'state': state, 'message': message, 'network': self._network, 'controller': self}) 

    -

            dispatcher.send(self.SIGNAL_CONTROLLER, \ 

    -

                **{'state': state, 'message': message, 'network': self._network, 'controller': self}) 

    -

     

    -

        def to_dict(self): 

    -

            """ 

    -

            Return a dict representation of the controller. 

    -

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret=self.node.to_dict() 

    -

            ret['capabilities'].update(dict.fromkeys(self.capabilities, 0)) 

    -

            ret["zw_version"] = self.library_version 

    -

            ret["zw_description"] = self.library_description 

    -

            ret["oz_version"] = self.ozw_library_version 

    -

            ret["py_version"] = self.python_library_version 

    -

            return ret 

    -

     

    +

        def begin_command_delete_all_return_routes(self, node_id): 

    +

            """ 

    +

            Delete all network return routes from a device. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_DELETEALLRETURNROUTES, self.zwcallback, nodeId=node_id) 

    +

     

    +

        def begin_command_create_button(self, node_id, arg=0): 

    +

            """ 

    +

            Create a handheld button id 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :param arg: 

    +

            :type arg: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_CREATEBUTTON, self.zwcallback, nodeId=node_id, arg=arg) 

     

    -

     

    +

        def begin_command_delete_button(self, node_id, arg=0): 

    +

            """ 

    +

            Delete a handheld button id. 

    +

     

    +

            :param node_id: Used only with the ReplaceFailedNode command, to specify the node that is going to be replaced. 

    +

            :type node_id: int 

    +

            :param arg: 

    +

            :type arg: int 

    +

            :return: True if the command was accepted and has started. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.beginControllerCommand(self._network.home_id, \ 

    +

                self.CMD_DELETEBUTTON, self.zwcallback, nodeId=node_id, arg=arg) 

    +

     

    +

        def cancel_command(self): 

    +

            """ 

    +

            Cancels any in-progress command running on a controller. 

    +

     

    +

            """ 

    +

            return self._network.manager.cancelControllerCommand(self._network.home_id) 

    +

     

    +

        def zwcallback(self, args): 

    +

            """ 

    +

            The Callback Handler used when sendig commands to the controller. 

    +

            Dispatch a louie message. 

    +

     

    +

            To do : add node in signal when necessary 

    +

     

    +

            :param args: A dict containing informations about the state of the controller 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Controller state change : %s', args) 

    +

            state = args['state'] 

    +

            message = args['message'] 

    +

            self.ctrl_last_state = state 

    +

            self.ctrl_last_message = message 

    +

            if state == self.SIGNAL_CTRL_WAITING: 

    +

                dispatcher.send(self.SIGNAL_CTRL_WAITING, \ 

    +

                    **{'state': state, 'message': message, 'network': self._network, 'controller': self}) 

    +

            dispatcher.send(self.SIGNAL_CONTROLLER, \ 

    +

                **{'state': state, 'message': message, 'network': self._network, 'controller': self}) 

    +

     

    +

        def to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the controller. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret=self.node.to_dict(extras=extras) 

    +

            if 'all' in extras: 

    +

                extras = ['kvals', 'capabilities', 'neighbors'] 

    +

            if 'capabilities' in extras: 

    +

                ret['capabilities'].update(dict.fromkeys(self.capabilities, 0)) 

    +

            ret["zw_version"] = self.library_version 

    +

            ret["zw_description"] = self.library_description 

    +

            ret["oz_version"] = self.ozw_library_version 

    +

            ret["py_version"] = self.python_library_version 

    +

            return ret 

    +

     

    +

     

    +

     

    @@ -242,134 +265,157 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    from openzwave.object import ZWaveObject 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveGroup(ZWaveObject): 

    -

        """ 

    -

        The driver object. 

    -

        Hold options of the manager 

    -

        Also used to retrieve information about the library, ... 

    -

        """ 

    -

     

    -

        def __init__(self, group_index, network=None, node_id=None): 

    -

            """ 

    -

            Initialize driver object 

    -

     

    -

            :param group_index: index of the group 

    -

            :type group_index: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    -

            :param node_id: ID of node 

    -

            :type node_id: int 

    -

     

    -

            """ 

    -

     

    -

            ZWaveObject.__init__(self, group_index, network) 

    -

     

    -

            self._node_id = node_id 

    -

            self._index = group_index 

    -

            #self._label = None 

    -

            #self.cache_property("self.label") 

    -

            #self._max_associations = set() 

    -

            #self.cache_property("self.max_associations") 

    -

            #self._members = set() 

    -

            #self.cache_property("self.members") 

    -

            #self._associations = set() 

    -

            #self.cache_property("self.associations") 

    -

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the group. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'index: [%s] label: [%s]' % (self.index, self.label) 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from openzwave.object import ZWaveObject 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveGroup(ZWaveObject): 

    +

        """ 

    +

        The driver object. 

    +

        Hold options of the manager 

    +

        Also used to retrieve information about the library, ... 

    +

        """ 

    +

     

    +

        def __init__(self, group_index, network=None, node_id=None): 

    +

            """ 

    +

            Initialize driver object 

    +

     

    +

            :param group_index: index of the group 

    +

            :type group_index: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

    +

            :param node_id: ID of node 

    +

            :type node_id: int 

    +

     

    +

            """ 

    +

     

    +

            ZWaveObject.__init__(self, group_index, network) 

    +

     

    +

            self._node_id = node_id 

    +

            self._index = group_index 

    +

            #self._label = None 

    +

            #self.cache_property("self.label") 

    +

            #self._max_associations = set() 

    +

            #self.cache_property("self.max_associations") 

    +

            #self._members = set() 

    +

            #self.cache_property("self.members") 

    +

            #self._associations = set() 

    +

            #self.cache_property("self.associations") 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the group. 

     

    -

        @property 

    -

        def index(self): 

    -

            """ 

    -

            The index of the group. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'index: [%s] label: [%s]' % (self.index, self.label) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._index 

    +

        @property 

    +

        def index(self): 

    +

            """ 

    +

            The index of the group. 

     

    -

        @property 

    -

        def label(self): 

    -

            """ 

    -

            The label of the group. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._index 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getGroupLabel(self.home_id, self._node_id, self.index) 

    +

        @property 

    +

        def label(self): 

    +

            """ 

    +

            The label of the group. 

     

    -

        @property 

    -

        def max_associations(self): 

    -

            """ 

    -

            The number of associations. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getGroupLabel(self.home_id, self._node_id, self.index) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getMaxAssociations(self.home_id, self._node_id, self.index) 

    +

        @property 

    +

        def max_associations(self): 

    +

            """ 

    +

            The number of associations. 

     

    -

     

    -

        @property 

    -

        def associations(self): 

    -

            """ 

    -

            The members of associations. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getMaxAssociations(self.home_id, self._node_id, self.index) 

    +

     

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            return self._network.manager.getAssociations(self.home_id, self._node_id, self.index) 

    +

        @property 

    +

        def associations(self): 

    +

            """ 

    +

            The members of associations. 

     

    -

        def add_association(self, target_node_id): 

    -

            """ 

    -

            Adds a node to an association group. 

    -

     

    -

            Due to the possibility of a device being asleep, the command is assumed to 

    -

            complete with success, and the association data held in this class is updated directly.  This 

    -

            will be reverted by a future Association message from the device if the Z-Wave 

    -

            message actually failed to get through.  Notification callbacks will be sent in 

    -

            both cases. 

    -

     

    -

            :param target_node_id: Identifier for the node that will be added to the association group. 

    -

            :type target_node_id: int 

    -

     

    -

            """ 

    -

            self._network.manager.addAssociation(self.home_id, self._node_id, self.index, target_node_id) 

    -

     

    -

        def remove_association(self, target_node_id): 

    -

            """ 

    -

            Removes a node from an association group. 

    -

     

    -

            Due to the possibility of a device being asleep, the command is assumed to 

    -

            succeed, and the association data held in this class is updated directly.  This 

    -

            will be reverted by a future Association message from the device if the Z-Wave 

    -

            message actually failed to get through.   Notification callbacks will be sent 

    -

            in both cases. 

    -

     

    -

            :param target_node_id: Identifier for the node that will be removed from the association group. 

    -

            :type target_node_id: int 

    -

     

    -

            """ 

    -

            self._network.manager.removeAssociation(self._network.home_id, self._node_id, self.index, target_node_id) 

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            return self._network.manager.getAssociations(self.home_id, self._node_id, self.index) 

    +

     

    +

        def add_association(self, target_node_id): 

    +

            """ 

    +

            Adds a node to an association group. 

    +

     

    +

            Due to the possibility of a device being asleep, the command is assumed to 

    +

            complete with success, and the association data held in this class is updated directly.  This 

    +

            will be reverted by a future Association message from the device if the Z-Wave 

    +

            message actually failed to get through.  Notification callbacks will be sent in 

    +

            both cases. 

    +

     

    +

            :param target_node_id: Identifier for the node that will be added to the association group. 

    +

            :type target_node_id: int 

    +

     

    +

            """ 

    +

            self._network.manager.addAssociation(self.home_id, self._node_id, self.index, target_node_id) 

    +

     

    +

        def remove_association(self, target_node_id): 

    +

            """ 

    +

            Removes a node from an association group. 

    +

     

    +

            Due to the possibility of a device being asleep, the command is assumed to 

    +

            succeed, and the association data held in this class is updated directly.  This 

    +

            will be reverted by a future Association message from the device if the Z-Wave 

    +

            message actually failed to get through.   Notification callbacks will be sent 

    +

            in both cases. 

    +

     

    +

            :param target_node_id: Identifier for the node that will be removed from the association group. 

    +

            :type target_node_id: int 

    +

     

    +

            """ 

    +

            self._network.manager.removeAssociation(self._network.home_id, self._node_id, self.index, target_node_id) 

    +

     

    +

        def to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the group. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            if 'all' in extras: 

    +

                    extras = ['associations'] 

    +

            ret={} 

    +

            ret['label'] = self.label 

    +

            if 'associations' in extras : 

    +

                    ret['associations'] = dict.fromkeys(self.associations, 0) 

    +

            return ret 

    @@ -1702,1594 +1718,1610 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    import os 

    -

    #from collections import namedtuple 

    -

    import time 

    -

    import sys 

    -

    if sys.hexversion >= 0x3000000: 

    -

        from pydispatch import dispatcher 

    -

        import _thread as thread 

    -

    else: 

    -

        from louie import dispatcher 

    -

        import thread 

    -

    import threading 

    -

    import libopenzwave 

    -

    import openzwave 

    -

    from openzwave.object import ZWaveException, ZWaveTypeException, ZWaveObject 

    -

    from openzwave.controller import ZWaveController 

    -

    from openzwave.node import ZWaveNode 

    -

    from openzwave.option import ZWaveOption 

    -

    from openzwave.scene import ZWaveScene 

    -

    from openzwave.singleton import Singleton 

    -

    import json 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    try: 

    -

        import sqlite3 as lite 

    -

    except ImportError: 

    -

        logger.warning('pysqlite is not installed') 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    import os 

    +

    #from collections import namedtuple 

    +

    import time 

    +

    import sys 

    +

    if sys.hexversion >= 0x3000000: 

    +

        from pydispatch import dispatcher 

    +

        import _thread as thread 

    +

    else: 

    +

        from louie import dispatcher 

    +

        import thread 

    +

    import threading 

    +

    import libopenzwave 

    +

    import openzwave 

    +

    from openzwave.object import ZWaveException, ZWaveTypeException, ZWaveObject 

    +

    from openzwave.controller import ZWaveController 

    +

    from openzwave.node import ZWaveNode 

    +

    from openzwave.option import ZWaveOption 

    +

    from openzwave.scene import ZWaveScene 

    +

    from openzwave.singleton import Singleton 

    +

    import json 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

     

    -

    class ZWaveNetwork(ZWaveObject): 

    -

        """ 

    -

        The network objet = homeid. 

    -

        It contains a reference to the manager and the controller. 

    +

    try: 

    +

        import sqlite3 as lite 

    +

    except ImportError: 

    +

        logger.warning('pysqlite is not installed') 

     

    -

        It dispatch the following louie signals : 

    -

     

    -

            * SIGNAL_NETWORK_FAILED = 'NetworkFailed' 

    -

            * SIGNAL_NETWORK_STARTED = 'NetworkStarted' 

    -

            * SIGNAL_NETWORK_READY = 'NetworkReady' 

    -

            * SIGNAL_NETWORK_STOPPED = 'NetworkStopped' 

    -

            * SIGNAL_NETWORK_RESETTED = 'DriverResetted' 

    -

            * SIGNAL_NETWORK_AWAKED = 'DriverAwaked' 

    -

            * SIGNAL_DRIVER_FAILED = 'DriverFailed' 

    -

            * SIGNAL_DRIVER_READY = 'DriverReady' 

    -

            * SIGNAL_DRIVER_RESET = 'DriverReset' 

    -

            * SIGNAL_DRIVER_REMOVED = 'DriverRemoved' 

    -

            * SIGNAL_NODE_ADDED = 'NodeAdded' 

    -

            * SIGNAL_NODE_EVENT = 'NodeEvent' 

    -

            * SIGNAL_NODE_NAMING = 'NodeNaming' 

    -

            * SIGNAL_NODE_NEW = 'NodeNew' 

    -

            * SIGNAL_NODE_PROTOCOL_INFO = 'NodeProtocolInfo' 

    -

            * SIGNAL_NODE_READY = 'NodeReady' 

    -

            * SIGNAL_NODE_REMOVED = 'NodeRemoved' 

    -

            * SIGNAL_SCENE_EVENT = 'SceneEvent' 

    -

            * SIGNAL_VALUE_ADDED = 'ValueAdded' 

    -

            * SIGNAL_VALUE_CHANGED = 'ValueChanged' 

    -

            * SIGNAL_VALUE_REFRESHED = 'ValueRefreshed' 

    -

            * SIGNAL_VALUE_REMOVED = 'ValueRemoved' 

    -

            * SIGNAL_POLLING_ENABLED = 'PollingEnabled' 

    -

            * SIGNAL_POLLING_DISABLED = 'PollingDisabled' 

    -

            * SIGNAL_CREATE_BUTTON = 'CreateButton' 

    -

            * SIGNAL_DELETE_BUTTON = 'DeleteButton' 

    -

            * SIGNAL_BUTTON_ON = 'ButtonOn' 

    -

            * SIGNAL_BUTTON_OFF = 'ButtonOff' 

    -

            * SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE = 'EssentialNodeQueriesComplete' 

    -

            * SIGNAL_NODE_QUERIES_COMPLETE = 'NodeQueriesComplete' 

    -

            * SIGNAL_AWAKE_NODES_QUERIED = 'AwakeNodesQueried' 

    -

            * SIGNAL_ALL_NODES_QUERIED = 'AllNodesQueried' 

    -

            * SIGNAL_MSG_COMPLETE = 'MsgComplete' 

    -

            * SIGNAL_ERROR = 'Error' 

    -

     

    -

        The table presented below sets notifications in the order they might typically be received, 

    -

        and grouped into a few logically related categories.  Of course, given the variety 

    -

        of ZWave controllers, devices and network configurations the actual sequence will vary (somewhat). 

    -

        The descriptions below the notification name (in square brackets) identify whether the 

    -

        notification is always sent (unless there’s a significant error in the network or software) 

    -

        or potentially sent during the execution sequence. 

    -

     

    -

        Driver Initialization Notification 

    -

     

    -

        The notification below is sent when OpenZWave has successfully connected 

    -

        to a physical ZWave controller. 

    +

    class ZWaveNetwork(ZWaveObject): 

    +

        """ 

    +

        The network objet = homeid. 

    +

        It contains a reference to the manager and the controller. 

    +

     

    +

        It dispatch the following louie signals : 

    +

     

    +

            * SIGNAL_NETWORK_FAILED = 'NetworkFailed' 

    +

            * SIGNAL_NETWORK_STARTED = 'NetworkStarted' 

    +

            * SIGNAL_NETWORK_READY = 'NetworkReady' 

    +

            * SIGNAL_NETWORK_STOPPED = 'NetworkStopped' 

    +

            * SIGNAL_NETWORK_RESETTED = 'DriverResetted' 

    +

            * SIGNAL_NETWORK_AWAKED = 'DriverAwaked' 

    +

            * SIGNAL_DRIVER_FAILED = 'DriverFailed' 

    +

            * SIGNAL_DRIVER_READY = 'DriverReady' 

    +

            * SIGNAL_DRIVER_RESET = 'DriverReset' 

    +

            * SIGNAL_DRIVER_REMOVED = 'DriverRemoved' 

    +

            * SIGNAL_NODE_ADDED = 'NodeAdded' 

    +

            * SIGNAL_NODE_EVENT = 'NodeEvent' 

    +

            * SIGNAL_NODE_NAMING = 'NodeNaming' 

    +

            * SIGNAL_NODE_NEW = 'NodeNew' 

    +

            * SIGNAL_NODE_PROTOCOL_INFO = 'NodeProtocolInfo' 

    +

            * SIGNAL_NODE_READY = 'NodeReady' 

    +

            * SIGNAL_NODE_REMOVED = 'NodeRemoved' 

    +

            * SIGNAL_SCENE_EVENT = 'SceneEvent' 

    +

            * SIGNAL_VALUE_ADDED = 'ValueAdded' 

    +

            * SIGNAL_VALUE_CHANGED = 'ValueChanged' 

    +

            * SIGNAL_VALUE_REFRESHED = 'ValueRefreshed' 

    +

            * SIGNAL_VALUE_REMOVED = 'ValueRemoved' 

    +

            * SIGNAL_POLLING_ENABLED = 'PollingEnabled' 

    +

            * SIGNAL_POLLING_DISABLED = 'PollingDisabled' 

    +

            * SIGNAL_CREATE_BUTTON = 'CreateButton' 

    +

            * SIGNAL_DELETE_BUTTON = 'DeleteButton' 

    +

            * SIGNAL_BUTTON_ON = 'ButtonOn' 

    +

            * SIGNAL_BUTTON_OFF = 'ButtonOff' 

    +

            * SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE = 'EssentialNodeQueriesComplete' 

    +

            * SIGNAL_NODE_QUERIES_COMPLETE = 'NodeQueriesComplete' 

    +

            * SIGNAL_AWAKE_NODES_QUERIED = 'AwakeNodesQueried' 

    +

            * SIGNAL_ALL_NODES_QUERIED = 'AllNodesQueried' 

    +

            * SIGNAL_MSG_COMPLETE = 'MsgComplete' 

    +

            * SIGNAL_ERROR = 'Error' 

    +

     

    +

        The table presented below sets notifications in the order they might typically be received, 

    +

        and grouped into a few logically related categories.  Of course, given the variety 

    +

        of ZWave controllers, devices and network configurations the actual sequence will vary (somewhat). 

    +

        The descriptions below the notification name (in square brackets) identify whether the 

    +

        notification is always sent (unless there’s a significant error in the network or software) 

    +

        or potentially sent during the execution sequence. 

     

    -

        * DriverReady 

    +

        Driver Initialization Notification 

     

    -

        [always sent]   Sent when the driver (representing a connection between OpenZWave 

    -

        and a Z-Wave controller attached to the specified serial (or HID) port) has been initialized. 

    -

        At the time this notification is sent, only certain information about the controller itself is known: 

    -

     

    -

            * Controller Z-Wave version 

    -

            * Network HomeID 

    -

            * Controller capabilities 

    -

            * Controller Application Version & Manufacturer/Product ID 

    -

            * Nodes included in the network 

    -

     

    -

        * DriverRemoved 

    -

     

    -

        [always sent (either due to Error or by request)] The Driver is being removed. 

    -

        Do Not Call Any Driver Related Methods after receiving this 

    +

        The notification below is sent when OpenZWave has successfully connected 

    +

        to a physical ZWave controller. 

    +

     

    +

        * DriverReady 

    +

     

    +

        [always sent]   Sent when the driver (representing a connection between OpenZWave 

    +

        and a Z-Wave controller attached to the specified serial (or HID) port) has been initialized. 

    +

        At the time this notification is sent, only certain information about the controller itself is known: 

    +

     

    +

            * Controller Z-Wave version 

    +

            * Network HomeID 

    +

            * Controller capabilities 

    +

            * Controller Application Version & Manufacturer/Product ID 

    +

            * Nodes included in the network 

     

    -

        Node Initialization Notifications 

    +

        * DriverRemoved 

     

    -

        As OpenZWave starts, it identifies and reads information about each node in the network. 

    -

        The following notifications may be sent during the initialization process. 

    +

        [always sent (either due to Error or by request)] The Driver is being removed. 

    +

        Do Not Call Any Driver Related Methods after receiving this 

     

    -

        * NodeNew 

    +

        Node Initialization Notifications 

     

    -

        [potentially sent]  Sent when a new node has been identified as part of the Z-Wave network. 

    -

        It is not sent if the node was identified in a prior execution of the OpenZWave library 

    -

        and stored in the zwcfg*.xml file. 

    -

        At the time this notification is sent, very little is known about the node itself... 

    -

        only that it is new to OpenZWave. This message is sent once for each new node identified. 

    -

     

    -

        * NodeAdded 

    -

     

    -

        [always sent (for each node associated with the controller)] 

    -

        Sent when a node has been added to OpenZWave’s set of nodes.  It can be 

    -

        triggered either as the zwcfg*.xml file is being read, when a new node 

    -

        is found on startup (see NodeNew notification above), or if a new node 

    -

        is included in the network while OpenZWave is running. 

    -

        As with NodeNew, very little is known about the node at the time the 

    -

        notification is sent…just the fact that a new node has been identified 

    -

        and its assigned NodeID. 

    -

     

    -

        * NodeProtocolInfo 

    -

     

    -

        [potentially sent]  Sent after a node’s protocol information has been 

    -

        successfully read from the controller. 

    -

        At the time this notification is sent, only certain information about the node is known: 

    -

     

    -

            * Whether it is a “listening” or “sleeping” device 

    -

            * Whether the node is capable of routing messages 

    -

            * Maximum baud rate for communication 

    -

            * Version number 

    -

            * Security byte 

    -

     

    -

        NodeNaming 

    -

     

    -

        [potentially sent]  Sent when a node’s name has been set or changed 

    -

        (although it may be “set” to “” or NULL). 

    +

        As OpenZWave starts, it identifies and reads information about each node in the network. 

    +

        The following notifications may be sent during the initialization process. 

    +

     

    +

        * NodeNew 

    +

     

    +

        [potentially sent]  Sent when a new node has been identified as part of the Z-Wave network. 

    +

        It is not sent if the node was identified in a prior execution of the OpenZWave library 

    +

        and stored in the zwcfg*.xml file. 

    +

        At the time this notification is sent, very little is known about the node itself... 

    +

        only that it is new to OpenZWave. This message is sent once for each new node identified. 

    +

     

    +

        * NodeAdded 

    +

     

    +

        [always sent (for each node associated with the controller)] 

    +

        Sent when a node has been added to OpenZWave’s set of nodes.  It can be 

    +

        triggered either as the zwcfg*.xml file is being read, when a new node 

    +

        is found on startup (see NodeNew notification above), or if a new node 

    +

        is included in the network while OpenZWave is running. 

    +

        As with NodeNew, very little is known about the node at the time the 

    +

        notification is sent…just the fact that a new node has been identified 

    +

        and its assigned NodeID. 

    +

     

    +

        * NodeProtocolInfo 

    +

     

    +

        [potentially sent]  Sent after a node’s protocol information has been 

    +

        successfully read from the controller. 

    +

        At the time this notification is sent, only certain information about the node is known: 

    +

     

    +

            * Whether it is a “listening” or “sleeping” device 

    +

            * Whether the node is capable of routing messages 

    +

            * Maximum baud rate for communication 

    +

            * Version number 

    +

            * Security byte 

     

    -

        * ValueAdded 

    +

        NodeNaming 

     

    -

        [potentially sent]  Sent when a new value has been associated with the node. 

    -

        At the time this notification is sent, the new value may or may not 

    -

        have “live” data associated with it. It may be populated, but it may 

    -

        alternatively just be a placeholder for a value that has not been read 

    -

        at the time the notification is sent. 

    -

     

    -

        * NodeQueriesComplete 

    -

     

    -

        [always sent (for each node associated with the controller that has been successfully queried)]     Sent when a node’s values and attributes have been fully queried. At the time this notification is sent, the node’s information has been fully read at least once.  So this notification might trigger “full” display of the node’s information, values, etc. If this notification is not sent, it indicates that there has been a problem initializing the device.  The most common issue is that the node is a “sleeping” device.  The NodeQueriesComplete notification will be sent when the node wakes up and the query process completes. 

    -

     

    -

        Initialization Complete Notifications 

    -

     

    -

        As indicated above, when OpenZWave starts it reads certain information 

    -

        from a file, from the controller and from the network.  The following 

    -

        notifications identify when this initialization/querying process is complete. 

    -

     

    -

        * AwakeNodesQueried 

    -

     

    -

        [always sent]   Sent when all “listening” -always-on-devices have been 

    -

        queried successfully.  It also indicates, by implication, that there 

    -

        are some “sleeping” nodes that will not complete their queries until 

    -

        they wake up. This notification should be sent relatively quickly 

    -

        after start-up. (Of course, it depends on the number of devices on 

    -

        the ZWave network and whether there are any messages that “time out” 

    -

        without a proper response.) 

    -

     

    -

        * AllNodesQueried 

    -

     

    -

        [potentially sent]  Sent when all nodes have been successfully queried. 

    -

     

    -

        This notification should be sent relatively quickly if there are 

    -

        no “sleeping” nodes. But it might be sent quite a while after start-up 

    -

        if there are sleeping nodes and at least one of these nodes has a long “wake-up” interval. 

    -

     

    -

        Other Notifications 

    -

     

    -

        In addition to the notifications described above, which are primarily 

    -

        “initialization” notifications that are sent during program start-up, 

    -

        the following notifications may be sent as a result of user actions, 

    -

        external program control, etc. 

    +

        [potentially sent]  Sent when a node’s name has been set or changed 

    +

        (although it may be “set” to “” or NULL). 

    +

     

    +

        * ValueAdded 

    +

     

    +

        [potentially sent]  Sent when a new value has been associated with the node. 

    +

        At the time this notification is sent, the new value may or may not 

    +

        have “live” data associated with it. It may be populated, but it may 

    +

        alternatively just be a placeholder for a value that has not been read 

    +

        at the time the notification is sent. 

    +

     

    +

        * NodeQueriesComplete 

    +

     

    +

        [always sent (for each node associated with the controller that has been successfully queried)]     Sent when a node’s values and attributes have been fully queried. At the time this notification is sent, the node’s information has been fully read at least once.  So this notification might trigger “full” display of the node’s information, values, etc. If this notification is not sent, it indicates that there has been a problem initializing the device.  The most common issue is that the node is a “sleeping” device.  The NodeQueriesComplete notification will be sent when the node wakes up and the query process completes. 

    +

     

    +

        Initialization Complete Notifications 

    +

     

    +

        As indicated above, when OpenZWave starts it reads certain information 

    +

        from a file, from the controller and from the network.  The following 

    +

        notifications identify when this initialization/querying process is complete. 

    +

     

    +

        * AwakeNodesQueried 

    +

     

    +

        [always sent]   Sent when all “listening” -always-on-devices have been 

    +

        queried successfully.  It also indicates, by implication, that there 

    +

        are some “sleeping” nodes that will not complete their queries until 

    +

        they wake up. This notification should be sent relatively quickly 

    +

        after start-up. (Of course, it depends on the number of devices on 

    +

        the ZWave network and whether there are any messages that “time out” 

    +

        without a proper response.) 

    +

     

    +

        * AllNodesQueried 

    +

     

    +

        [potentially sent]  Sent when all nodes have been successfully queried. 

    +

     

    +

        This notification should be sent relatively quickly if there are 

    +

        no “sleeping” nodes. But it might be sent quite a while after start-up 

    +

        if there are sleeping nodes and at least one of these nodes has a long “wake-up” interval. 

    +

     

    +

        Other Notifications 

     

    -

        * ValueChanged : Sent when a value associated with a node has changed. Receipt of this notification indicates that it may be a good time to read the new value and display or otherwise process it accordingly. 

    -

        * ValueRemoved : Sent when a value associated with a node has been removed. 

    -

        * Group : Sent when a node’s group association has changed. 

    -

        * NodeRemoved : Sent when a node has been removed from the ZWave network. 

    -

        * NodeEvent : Sent when a node sends a Basic_Set command to the controller.  This notification can be generated by certain sensors, for example, motion detectors, to indicate that an event has been sensed. 

    -

        * PollingEnabled : Sent when node/value polling has been enabled. 

    -

        * PollingDisabled : Sent when node/value polling has been disabled. 

    -

        * DriverReset : Sent to indicate when a controller has been reset.  This notification is intended to replace the potentially hundreds of notifications representing each value and node removed from the network. 

    -

     

    -

        About the use of louie signals : 

    -

        For network, python-openzwave send the following louie signal : 

    -

     

    -

            SIGNAL_NETWORK_FAILED : the driver has failed to start. 

    -

            SIGNAL_NETWORK_STARTED : the driver is ready, but network is not available. 

    -

            SIGNAL_NETWORK_AWAKED : all awake nodes are queried. Some sleeping nodes may be missing. 

    -

            SIGNAL_NETWORK_READY : all nodes are queried. Network is fully functionnal. 

    -

            SIGNAL_NETWORK_RESETTED : the network has been resetted. It will start again. 

    -

            SIGNAL_NETWORK_STOPPED : the network has been stopped. 

    -

     

    -

        Deprecated : SIGNAL_DRIVER_* shouldn't be used anymore. 

    -

     

    -

        """ 

    -

     

    -

        SIGNAL_NETWORK_FAILED = 'NetworkFailed' 

    -

        SIGNAL_NETWORK_STARTED = 'NetworkStarted' 

    -

        SIGNAL_NETWORK_READY = 'NetworkReady' 

    -

        SIGNAL_NETWORK_STOPPED = 'NetworkStopped' 

    -

        SIGNAL_NETWORK_RESETTED = 'DriverResetted' 

    -

        SIGNAL_NETWORK_AWAKED = 'DriverAwaked' 

    -

        SIGNAL_DRIVER_FAILED = 'DriverFailed' 

    -

        SIGNAL_DRIVER_READY = 'DriverReady' 

    -

        SIGNAL_DRIVER_RESET = 'DriverReset' 

    -

        SIGNAL_DRIVER_REMOVED = 'DriverRemoved' 

    -

        SIGNAL_GROUP = 'Group' 

    -

        SIGNAL_NODE = 'Node' 

    -

        SIGNAL_NODE_ADDED = 'NodeAdded' 

    -

        SIGNAL_NODE_EVENT = 'NodeEvent' 

    -

        SIGNAL_NODE_NAMING = 'NodeNaming' 

    -

        SIGNAL_NODE_NEW = 'NodeNew' 

    -

        SIGNAL_NODE_PROTOCOL_INFO = 'NodeProtocolInfo' 

    -

        SIGNAL_NODE_READY = 'NodeReady' 

    -

        SIGNAL_NODE_REMOVED = 'NodeRemoved' 

    -

        SIGNAL_SCENE_EVENT = 'SceneEvent' 

    -

        SIGNAL_VALUE = 'Value' 

    -

        SIGNAL_VALUE_ADDED = 'ValueAdded' 

    -

        SIGNAL_VALUE_CHANGED = 'ValueChanged' 

    -

        SIGNAL_VALUE_REFRESHED = 'ValueRefreshed' 

    -

        SIGNAL_VALUE_REMOVED = 'ValueRemoved' 

    -

        SIGNAL_POLLING_ENABLED = 'PollingEnabled' 

    -

        SIGNAL_POLLING_DISABLED = 'PollingDisabled' 

    -

        SIGNAL_CREATE_BUTTON = 'CreateButton' 

    -

        SIGNAL_DELETE_BUTTON = 'DeleteButton' 

    -

        SIGNAL_BUTTON_ON = 'ButtonOn' 

    -

        SIGNAL_BUTTON_OFF = 'ButtonOff' 

    -

        SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE = 'EssentialNodeQueriesComplete' 

    -

        SIGNAL_NODE_QUERIES_COMPLETE = 'NodeQueriesComplete' 

    -

        SIGNAL_AWAKE_NODES_QUERIED = 'AwakeNodesQueried' 

    -

        SIGNAL_ALL_NODES_QUERIED = 'AllNodesQueried' 

    -

        SIGNAL_ALL_NODES_QUERIED_SOME_DEAD = 'AllNodesQueriedSomeDead' 

    -

        SIGNAL_MSG_COMPLETE = 'MsgComplete' 

    -

        SIGNAL_NOTIFICATION = 'Notification' 

    -

     

    -

        STATE_STOPPED = 0 

    -

        STATE_FAILED = 1 

    -

        STATE_RESETTED = 3 

    -

        STATE_STARTED = 5 

    -

        STATE_AWAKED = 7 

    -

        STATE_READY = 10 

    -

     

    -

        ignoreSubsequent = True 

    -

     

    -

        def __init__(self, options, log=None, autostart=True, kvals=True): 

    -

            """ 

    -

            Initialize zwave network 

    -

     

    -

            :param options: Options to use with manager 

    -

            :type options: ZWaveOption 

    -

            :param log: A log file (not used. Deprecated 

    -

            :type log: 

    -

            :param autostart: should we start the network. 

    -

            :type autostart: bool 

    -

            :param autostart: Enable kvals (use pysqlite) 

    -

            :type autostart: bool 

    -

     

    -

            """ 

    -

            logger.debug("Create network object.") 

    -

            self.log = log 

    -

            self._options = options 

    -

            ZWaveObject.__init__(self, None, self) 

    -

            self._controller = ZWaveController(1, self, options) 

    -

            self._manager = libopenzwave.PyManager() 

    -

            self._manager.create() 

    -

            self._state = self.STATE_STOPPED 

    -

            self.nodes = None 

    -

            self._semaphore_nodes = threading.Semaphore() 

    -

            self._id_separator = '.' 

    -

            self.network_event = threading.Event() 

    -

            self.dbcon = None 

    -

            if kvals == True: 

    -

                try: 

    -

                    self.dbcon = lite.connect(os.path.join(self._options.user_path, 'pyozw.db'), check_same_thread=False) 

    -

                    cur = self.dbcon.cursor() 

    -

                    cur.execute('SELECT SQLITE_VERSION()') 

    -

                    data = cur.fetchone() 

    -

                    self._check_db_tables() 

    -

                except lite.Error as e: 

    -

                    logger.warning("Can't connect to sqlite database : kvals are disabled - %s", e.args[0]) 

    -

            self._started = False 

    -

            if autostart: 

    -

                self.start() 

    -

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the node. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'home_id: [%s] controller: [%s]' % \ 

    -

              (self.home_id_str, self.controller) 

    -

     

    -

        def _check_db_tables(self): 

    -

            """ 

    -

            Check that the tables for "classes" are in database. 

    -

     

    -

            :returns: True if operation succeed. False oterwise 

    -

            :rtype: boolean 

    -

     

    -

            """ 

    -

            if self.dbcon is None: 

    -

                return False 

    -

            cur = self.dbcon.cursor() 

    -

            for mycls in ['ZWaveOption', 'ZWaveOptionSingleton', 'ZWaveNetwork', 'ZWaveNetworkSingleton', 'ZWaveNode', 'ZWaveController', 'ZWaveValue']: 

    -

                cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='%s';" % mycls) 

    -

                data = cur.fetchone() 

    -

                if data is None: 

    -

                    cur.execute("CREATE TABLE %s(object_id INT, key TEXT, value TEXT)" % mycls) 

    -

            return True 

    -

     

    -

        def start(self): 

    -

            """ 

    -

            Start the network object : 

    -

                - add a watcher 

    -

                - add a driver 

    -

     

    -

            """ 

    -

            if self._started == True: 

    -

                return 

    -

            logger.info("Start Openzwave network.") 

    -

            self._manager.addWatcher(self.zwcallback) 

    -

            self._manager.addDriver(self._options.device) 

    -

            self._started = True 

    -

     

    -

        def stop(self, fire=True): 

    -

            """ 

    -

            Stop the network object. 

    -

     

    -

                - remove the watcher 

    -

                - remove the driver 

    -

                - clear the nodes 

    -

     

    -

            .. code-block:: python 

    -

     

    -

                dispatcher.send(self.SIGNAL_NETWORK_STOPPED, **{'network': self}) 

    -

     

    -

            """ 

    -

            if self._started == False: 

    -

                return 

    -

            self.write_config() 

    -

            if self.dbcon is not None: 

    -

                self.dbcon.close() 

    -

            logger.info("Stop Openzave network.") 

    -

            for i in range(0, 60): 

    -

                if self.controller.send_queue_count <= 0: 

    -

                    break 

    -

                else: 

    -

                    try: 

    -

                        self.network_event.wait(1.0) 

    -

                    except AssertionError: 

    -

                        #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    -

                        pass 

    -

            logger.debug("Wait for empty send_queue during %s second(s).", i) 

    -

            try: 

    -

                self._semaphore_nodes.acquire() 

    -

                self._manager.removeWatcher(self.zwcallback) 

    -

                try: 

    -

                    self.network_event.wait(1.0) 

    -

                except AssertionError: 

    -

                    #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    -

                    pass 

    -

                self._manager.removeDriver(self._options.device) 

    -

                try: 

    -

                    self.network_event.wait(1.0) 

    -

                except AssertionError: 

    -

                    #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    -

                    pass 

    -

                for i in range(0, 60): 

    -

                    if self.controller.send_queue_count <= 0: 

    -

                        break 

    -

                    else: 

    -

                        try: 

    -

                            self.network_event.wait(1.0) 

    -

                        except AssertionError: 

    -

                            #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    -

                            pass 

    -

                self.nodes = None 

    -

                self._state = self.STATE_STOPPED 

    -

                if fire: 

    -

                    dispatcher.send(self.SIGNAL_NETWORK_STOPPED, **{'network': self}) 

    -

            except: 

    -

                import sys, traceback 

    -

                logger.error('Stop network : %s', traceback.format_exception(*sys.exc_info())) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    -

            self._manager.destroy() 

    -

            self._options.destroy() 

    -

            self._started = False 

    -

     

    -

        @property 

    -

        def home_id(self): 

    -

            """ 

    -

            The home_id of the network. 

    -

     

    -

            :rtype: int 

    +

        In addition to the notifications described above, which are primarily 

    +

        “initialization” notifications that are sent during program start-up, 

    +

        the following notifications may be sent as a result of user actions, 

    +

        external program control, etc. 

    +

     

    +

        * ValueChanged : Sent when a value associated with a node has changed. Receipt of this notification indicates that it may be a good time to read the new value and display or otherwise process it accordingly. 

    +

        * ValueRemoved : Sent when a value associated with a node has been removed. 

    +

        * Group : Sent when a node’s group association has changed. 

    +

        * NodeRemoved : Sent when a node has been removed from the ZWave network. 

    +

        * NodeEvent : Sent when a node sends a Basic_Set command to the controller.  This notification can be generated by certain sensors, for example, motion detectors, to indicate that an event has been sensed. 

    +

        * PollingEnabled : Sent when node/value polling has been enabled. 

    +

        * PollingDisabled : Sent when node/value polling has been disabled. 

    +

        * DriverReset : Sent to indicate when a controller has been reset.  This notification is intended to replace the potentially hundreds of notifications representing each value and node removed from the network. 

    +

     

    +

        About the use of louie signals : 

    +

        For network, python-openzwave send the following louie signal : 

    +

     

    +

            SIGNAL_NETWORK_FAILED : the driver has failed to start. 

    +

            SIGNAL_NETWORK_STARTED : the driver is ready, but network is not available. 

    +

            SIGNAL_NETWORK_AWAKED : all awake nodes are queried. Some sleeping nodes may be missing. 

    +

            SIGNAL_NETWORK_READY : all nodes are queried. Network is fully functionnal. 

    +

            SIGNAL_NETWORK_RESETTED : the network has been resetted. It will start again. 

    +

            SIGNAL_NETWORK_STOPPED : the network has been stopped. 

    +

     

    +

        Deprecated : SIGNAL_DRIVER_* shouldn't be used anymore. 

    +

     

    +

        """ 

    +

     

    +

        SIGNAL_NETWORK_FAILED = 'NetworkFailed' 

    +

        SIGNAL_NETWORK_STARTED = 'NetworkStarted' 

    +

        SIGNAL_NETWORK_READY = 'NetworkReady' 

    +

        SIGNAL_NETWORK_STOPPED = 'NetworkStopped' 

    +

        SIGNAL_NETWORK_RESETTED = 'DriverResetted' 

    +

        SIGNAL_NETWORK_AWAKED = 'DriverAwaked' 

    +

        SIGNAL_DRIVER_FAILED = 'DriverFailed' 

    +

        SIGNAL_DRIVER_READY = 'DriverReady' 

    +

        SIGNAL_DRIVER_RESET = 'DriverReset' 

    +

        SIGNAL_DRIVER_REMOVED = 'DriverRemoved' 

    +

        SIGNAL_GROUP = 'Group' 

    +

        SIGNAL_NODE = 'Node' 

    +

        SIGNAL_NODE_ADDED = 'NodeAdded' 

    +

        SIGNAL_NODE_EVENT = 'NodeEvent' 

    +

        SIGNAL_NODE_NAMING = 'NodeNaming' 

    +

        SIGNAL_NODE_NEW = 'NodeNew' 

    +

        SIGNAL_NODE_PROTOCOL_INFO = 'NodeProtocolInfo' 

    +

        SIGNAL_NODE_READY = 'NodeReady' 

    +

        SIGNAL_NODE_REMOVED = 'NodeRemoved' 

    +

        SIGNAL_SCENE_EVENT = 'SceneEvent' 

    +

        SIGNAL_VALUE = 'Value' 

    +

        SIGNAL_VALUE_ADDED = 'ValueAdded' 

    +

        SIGNAL_VALUE_CHANGED = 'ValueChanged' 

    +

        SIGNAL_VALUE_REFRESHED = 'ValueRefreshed' 

    +

        SIGNAL_VALUE_REMOVED = 'ValueRemoved' 

    +

        SIGNAL_POLLING_ENABLED = 'PollingEnabled' 

    +

        SIGNAL_POLLING_DISABLED = 'PollingDisabled' 

    +

        SIGNAL_CREATE_BUTTON = 'CreateButton' 

    +

        SIGNAL_DELETE_BUTTON = 'DeleteButton' 

    +

        SIGNAL_BUTTON_ON = 'ButtonOn' 

    +

        SIGNAL_BUTTON_OFF = 'ButtonOff' 

    +

        SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE = 'EssentialNodeQueriesComplete' 

    +

        SIGNAL_NODE_QUERIES_COMPLETE = 'NodeQueriesComplete' 

    +

        SIGNAL_AWAKE_NODES_QUERIED = 'AwakeNodesQueried' 

    +

        SIGNAL_ALL_NODES_QUERIED = 'AllNodesQueried' 

    +

        SIGNAL_ALL_NODES_QUERIED_SOME_DEAD = 'AllNodesQueriedSomeDead' 

    +

        SIGNAL_MSG_COMPLETE = 'MsgComplete' 

    +

        SIGNAL_NOTIFICATION = 'Notification' 

    +

     

    +

        STATE_STOPPED = 0 

    +

        STATE_FAILED = 1 

    +

        STATE_RESETTED = 3 

    +

        STATE_STARTED = 5 

    +

        STATE_AWAKED = 7 

    +

        STATE_READY = 10 

    +

     

    +

        ignoreSubsequent = True 

    +

     

    +

        def __init__(self, options, log=None, autostart=True, kvals=True): 

    +

            """ 

    +

            Initialize zwave network 

    +

     

    +

            :param options: Options to use with manager 

    +

            :type options: ZWaveOption 

    +

            :param log: A log file (not used. Deprecated 

    +

            :type log: 

    +

            :param autostart: should we start the network. 

    +

            :type autostart: bool 

    +

            :param autostart: Enable kvals (use pysqlite) 

    +

            :type autostart: bool 

    +

     

    +

            """ 

    +

            logger.debug("Create network object.") 

    +

            self.log = log 

    +

            self._options = options 

    +

            ZWaveObject.__init__(self, None, self) 

    +

            self._controller = ZWaveController(1, self, options) 

    +

            self._manager = libopenzwave.PyManager() 

    +

            self._manager.create() 

    +

            self._state = self.STATE_STOPPED 

    +

            self.nodes = None 

    +

            self._semaphore_nodes = threading.Semaphore() 

    +

            self._id_separator = '.' 

    +

            self.network_event = threading.Event() 

    +

            self.dbcon = None 

    +

            if kvals == True: 

    +

                try: 

    +

                    self.dbcon = lite.connect(os.path.join(self._options.user_path, 'pyozw.db'), check_same_thread=False) 

    +

                    cur = self.dbcon.cursor() 

    +

                    cur.execute('SELECT SQLITE_VERSION()') 

    +

                    data = cur.fetchone() 

    +

                    self._check_db_tables() 

    +

                except lite.Error as e: 

    +

                    logger.warning("Can't connect to sqlite database : kvals are disabled - %s", e.args[0]) 

    +

            self._started = False 

    +

            if autostart: 

    +

                self.start() 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the node. 

    +

     

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'home_id: [%s] controller: [%s]' % \ 

    +

              (self.home_id_str, self.controller) 

    +

     

    +

        def _check_db_tables(self): 

    +

            """ 

    +

            Check that the tables for "classes" are in database. 

    +

     

    +

            :returns: True if operation succeed. False oterwise 

    +

            :rtype: boolean 

    +

     

    +

            """ 

    +

            if self.dbcon is None: 

    +

                return False 

    +

            cur = self.dbcon.cursor() 

    +

            for mycls in ['ZWaveOption', 'ZWaveOptionSingleton', 'ZWaveNetwork', 'ZWaveNetworkSingleton', 'ZWaveNode', 'ZWaveController', 'ZWaveValue']: 

    +

                cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='%s';" % mycls) 

    +

                data = cur.fetchone() 

    +

                if data is None: 

    +

                    cur.execute("CREATE TABLE %s(object_id INT, key TEXT, value TEXT)" % mycls) 

    +

            return True 

    +

     

    +

        def start(self): 

    +

            """ 

    +

            Start the network object : 

    +

                - add a watcher 

    +

                - add a driver 

    +

     

    +

            """ 

    +

            if self._started == True: 

    +

                return 

    +

            logger.info("Start Openzwave network.") 

    +

            self._manager.addWatcher(self.zwcallback) 

    +

            self._manager.addDriver(self._options.device) 

    +

            self._started = True 

    +

     

    +

        def stop(self, fire=True): 

    +

            """ 

    +

            Stop the network object. 

    +

     

    +

                - remove the watcher 

    +

                - remove the driver 

    +

                - clear the nodes 

    +

     

    +

            .. code-block:: python 

    +

     

    +

                dispatcher.send(self.SIGNAL_NETWORK_STOPPED, **{'network': self}) 

    +

     

    +

            """ 

    +

            if self._started == False: 

    +

                return 

    +

            if self.controller is not None: 

    +

                self.controller.stop() 

    +

            self.write_config() 

    +

            if self.dbcon is not None: 

    +

                self.dbcon.close() 

    +

            logger.info("Stop Openzave network.") 

    +

            for i in range(0, 60): 

    +

                if self.controller.send_queue_count <= 0: 

    +

                    break 

    +

                else: 

    +

                    try: 

    +

                        self.network_event.wait(1.0) 

    +

                    except AssertionError: 

    +

                        #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    +

                        pass 

    +

            logger.debug("Wait for empty send_queue during %s second(s).", i) 

    +

            try: 

    +

                self._semaphore_nodes.acquire() 

    +

                self._manager.removeWatcher(self.zwcallback) 

    +

                try: 

    +

                    self.network_event.wait(1.0) 

    +

                except AssertionError: 

    +

                    #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    +

                    pass 

    +

                self._manager.removeDriver(self._options.device) 

    +

                try: 

    +

                    self.network_event.wait(1.0) 

    +

                except AssertionError: 

    +

                    #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    +

                    pass 

    +

                for i in range(0, 60): 

    +

                    if self.controller.send_queue_count <= 0: 

    +

                        break 

    +

                    else: 

    +

                        try: 

    +

                            self.network_event.wait(1.0) 

    +

                        except AssertionError: 

    +

                            #For gevent AssertionError: Impossible to call blocking function in the event loop callback 

    +

                            pass 

    +

                self.nodes = None 

    +

                self._state = self.STATE_STOPPED 

    +

                if fire: 

    +

                    dispatcher.send(self.SIGNAL_NETWORK_STOPPED, **{'network': self}) 

    +

            except: 

    +

                import sys, traceback 

    +

                logger.error('Stop network : %s', traceback.format_exception(*sys.exc_info())) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

    +

            self._manager.destroy() 

    +

            self._options.destroy() 

    +

            self._started = False 

     

    -

            """ 

    -

            if self._object_id is None: 

    -

                return 0 

    -

            return self._object_id 

    +

        @property 

    +

        def home_id(self): 

    +

            """ 

    +

            The home_id of the network. 

     

    -

        @home_id.setter 

    -

        def home_id(self, value): 

    -

            """ 

    -

            The home_id of the network. 

    -

     

    -

            :param value: new home_id 

    -

            :type value: int 

    -

     

    -

            """ 

    -

            self._object_id = value 

    -

     

    -

        @property 

    -

        def home_id_str(self): 

    -

            """ 

    -

            The home_id of the network as string. 

    -

     

    -

            :rtype: str 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            if self._object_id is None: 

    +

                return 0 

    +

            return self._object_id 

    +

     

    +

        @home_id.setter 

    +

        def home_id(self, value): 

    +

            """ 

    +

            The home_id of the network. 

    +

     

    +

            :param value: new home_id 

    +

            :type value: int 

    +

     

    +

            """ 

    +

            self._object_id = value 

     

    -

            """ 

    -

            return "0x%0.8x" % self.home_id 

    -

     

    -

        @property 

    -

        def is_ready(self): 

    -

            """ 

    -

            Says if the network is ready for operations. 

    -

     

    -

            :rtype: bool 

    +

        @property 

    +

        def home_id_str(self): 

    +

            """ 

    +

            The home_id of the network as string. 

    +

     

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return "0x%0.8x" % self.home_id 

     

    -

            """ 

    -

            return self._state >= self.STATE_READY 

    -

     

    -

        @property 

    -

        def state(self): 

    -

            """ 

    -

            The state of the network. Values may be changed in the future, 

    -

            only order is important. 

    -

            You can safely ask node information when state >= STATE_READY 

    +

        @property 

    +

        def is_ready(self): 

    +

            """ 

    +

            Says if the network is ready for operations. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._state >= self.STATE_READY 

     

    -

            * STATE_STOPPED = 0 

    -

            * STATE_FAILED = 1 

    -

            * STATE_RESETTED = 3 

    -

            * STATE_STARTED = 5 

    -

            * STATE_AWAKED = 7 

    -

            * STATE_READY = 10 

    +

        @property 

    +

        def state(self): 

    +

            """ 

    +

            The state of the network. Values may be changed in the future, 

    +

            only order is important. 

    +

            You can safely ask node information when state >= STATE_READY 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._state 

    -

     

    -

        @state.setter 

    -

        def state(self, value): 

    -

            """ 

    -

            The state of the network. Values may be changed in the future, 

    -

            only order is important. 

    -

     

    -

            * STATE_STOPPED = 0 

    -

            * STATE_FAILED = 1 

    -

            * STATE_RESETTED = 3 

    -

            * STATE_STARTED = 5 

    -

            * STATE_AWAKED = 7 

    -

            * STATE_READY = 10 

    +

            * STATE_STOPPED = 0 

    +

            * STATE_FAILED = 1 

    +

            * STATE_RESETTED = 3 

    +

            * STATE_STARTED = 5 

    +

            * STATE_AWAKED = 7 

    +

            * STATE_READY = 10 

    +

     

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._state 

    +

     

    +

        @state.setter 

    +

        def state(self, value): 

    +

            """ 

    +

            The state of the network. Values may be changed in the future, 

    +

            only order is important. 

     

    -

            :param value: new state 

    -

            :type value: int 

    -

     

    -

            """ 

    -

            self._state = value 

    -

     

    -

        @property 

    -

        def state_str(self): 

    -

            """ 

    -

            The state of the network. Values may be changed in the future, 

    -

            only order is important. 

    -

            You can safely ask node informations when state >= STATE_AWAKED 

    +

            * STATE_STOPPED = 0 

    +

            * STATE_FAILED = 1 

    +

            * STATE_RESETTED = 3 

    +

            * STATE_STARTED = 5 

    +

            * STATE_AWAKED = 7 

    +

            * STATE_READY = 10 

    +

     

    +

            :param value: new state 

    +

            :type value: int 

    +

     

    +

            """ 

    +

            self._state = value 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            if self._state == self.STATE_STOPPED: 

    -

                return "Network is stopped" 

    -

            elif self._state == self.STATE_FAILED: 

    -

                return "Driver failed" 

    -

            elif self._state == self.STATE_STARTED: 

    -

                return "Driver initialised" 

    -

            elif self._state == self.STATE_RESETTED: 

    -

                return "Driver is reset" 

    -

            elif self._state == self.STATE_AWAKED: 

    -

                return "Topology loaded" 

    -

            elif self._state == self.STATE_READY: 

    -

                return "Network ready" 

    -

            else: 

    -

                return "Unknown state" 

    -

     

    -

        @property 

    -

        def manager(self): 

    -

            """ 

    -

            The manager to use to communicate with the lib c++. 

    -

     

    -

            :rtype: ZWaveManager 

    +

        @property 

    +

        def state_str(self): 

    +

            """ 

    +

            The state of the network. Values may be changed in the future, 

    +

            only order is important. 

    +

            You can safely ask node informations when state >= STATE_AWAKED 

    +

     

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            if self._state == self.STATE_STOPPED: 

    +

                return "Network is stopped" 

    +

            elif self._state == self.STATE_FAILED: 

    +

                return "Driver failed" 

    +

            elif self._state == self.STATE_STARTED: 

    +

                return "Driver initialised" 

    +

            elif self._state == self.STATE_RESETTED: 

    +

                return "Driver is reset" 

    +

            elif self._state == self.STATE_AWAKED: 

    +

                return "Topology loaded" 

    +

            elif self._state == self.STATE_READY: 

    +

                return "Network ready" 

    +

            else: 

    +

                return "Unknown state" 

     

    -

            """ 

    -

            if self._manager is not None: 

    -

                return self._manager 

    -

            else: 

    -

                raise ZWaveException("Manager not initialised") 

    -

     

    -

        @property 

    -

        def controller(self): 

    -

            """ 

    -

            The controller of the network. 

    -

     

    -

            :return: The controller of the network 

    -

            :rtype: ZWaveController 

    -

     

    -

            """ 

    -

            if self._controller is not None: 

    -

                return self._controller 

    -

            else: 

    -

                raise ZWaveException("Controller not initialised") 

    -

     

    -

        @property 

    -

        def nodes(self): 

    -

            """ 

    -

            The nodes of the network. 

    -

     

    -

            :rtype: dict() 

    +

        @property 

    +

        def manager(self): 

    +

            """ 

    +

            The manager to use to communicate with the lib c++. 

    +

     

    +

            :rtype: ZWaveManager 

    +

     

    +

            """ 

    +

            if self._manager is not None: 

    +

                return self._manager 

    +

            else: 

    +

                raise ZWaveException("Manager not initialised") 

    +

     

    +

        @property 

    +

        def controller(self): 

    +

            """ 

    +

            The controller of the network. 

    +

     

    +

            :return: The controller of the network 

    +

            :rtype: ZWaveController 

    +

     

    +

            """ 

    +

            if self._controller is not None: 

    +

                return self._controller 

    +

            else: 

    +

                raise ZWaveException("Controller not initialised") 

     

    -

            """ 

    -

            return self._nodes 

    -

     

    -

        def nodes_to_dict(self, kvals=True): 

    -

            """ 

    -

            Return a dict representation of the network. 

    +

        @property 

    +

        def nodes(self): 

    +

            """ 

    +

            The nodes of the network. 

    +

     

    +

            :rtype: dict() 

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            for ndid in self._nodes.keys(): 

    -

                ret[ndid]=self._nodes[ndid].to_dict(kvals=kvals) 

    -

            return ret 

    -

     

    -

        def to_dict(self, kvals=True): 

    -

            """ 

    -

            Return a dict representation of the network. 

    +

            """ 

    +

            return self._nodes 

    +

     

    +

        def nodes_to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the network. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            ret['state'] = self.state, 

    -

            ret['state_str'] = self.state_str, 

    -

            ret['home_id'] = self.home_id_str, 

    -

            ret['nodes_count'] = self.nodes_count, 

    -

            if kvals == True and self.network.dbcon is not None: 

    -

                vals = self.kvals 

    -

                for key in vals.keys(): 

    -

                    ret[key]=vals[key] 

    -

            return ret 

    -

     

    -

        @nodes.setter 

    -

        def nodes(self, value): 

    -

            """ 

    -

            The nodes of the network. 

    -

     

    -

            :param value: The new value 

    -

            :type value: dict() or None 

    -

     

    -

            """ 

    -

            if type(value) == type(dict()): 

    -

                self._nodes = value 

    -

            else: 

    -

                self._nodes = dict() 

    -

     

    -

        def switch_all(self, state): 

    +

            """ 

    +

            ret={} 

    +

            for ndid in self._nodes.keys(): 

    +

                ret[ndid]=self._nodes[ndid].to_dict(extras=extras) 

    +

            return ret 

    +

     

    +

        def to_dict(self, extras=['kvals']): 

    +

            """ 

    +

            Return a dict representation of the network. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret={} 

    +

            ret['state'] = self.state, 

    +

            ret['state_str'] = self.state_str, 

    +

            ret['home_id'] = self.home_id_str, 

    +

            ret['nodes_count'] = self.nodes_count, 

    +

            if 'kvals' in extras and self.network.dbcon is not None: 

    +

                vals = self.kvals 

    +

                for key in vals.keys(): 

    +

                    ret[key]=vals[key] 

    +

            return ret 

    +

     

    +

        @nodes.setter 

    +

        def nodes(self, value): 

            """ 

    -

            Method for switching all devices on or off together.  The devices must support 

    -

            the SwitchAll command class.  The command is first broadcast to all nodes, and 

    -

            then followed up with individual commands to each node (because broadcasts are 

    -

            not routed, the message might not otherwise reach all the nodes). 

    +

            The nodes of the network. 

    +

     

    +

            :param value: The new value 

    +

            :type value: dict() or None 

     

    -

            :param state: True to turn on the switches, False to turn them off 

    -

            :type state: bool 

    -

     

    -

            """ 

    -

            if state: 

    -

                self.manager.switchAllOn(self.home_id) 

    -

            else: 

    -

                self.manager.switchAllOff(self.home_id) 

    -

     

    -

        def test(self, count=1): 

    -

            """ 

    -

            Send a number of test messages to every node and record results. 

    +

            """ 

    +

            if type(value) == type(dict()): 

    +

                self._nodes = value 

    +

            else: 

    +

                self._nodes = dict() 

    +

     

    +

        def switch_all(self, state): 

    +

            """ 

    +

            Method for switching all devices on or off together.  The devices must support 

    +

            the SwitchAll command class.  The command is first broadcast to all nodes, and 

    +

            then followed up with individual commands to each node (because broadcasts are 

    +

            not routed, the message might not otherwise reach all the nodes). 

     

    -

            :param count: The number of test messages to send. 

    -

            :type count: int 

    +

            :param state: True to turn on the switches, False to turn them off 

    +

            :type state: bool 

     

            """ 

    -

            self.manager.testNetwork(self.home_id, count) 

    -

     

    -

        def heal(self, upNodeRoute=False): 

    -

            """ 

    -

            Heal network by requesting nodes rediscover their neighbors. 

    -

            Sends a ControllerCommand_RequestNodeNeighborUpdate to every node. 

    -

            Can take a while on larger networks. 

    -

     

    -

            :param upNodeRoute: Optional Whether to perform return routes initialization. (default = false). 

    -

            :type upNodeRoute: bool 

    -

            :return: True is the ControllerCommand ins sent. False otherwise 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            if self.network.state < self.network.STATE_AWAKED: 

    -

                logger.warning('Network state must a minimum set to awake') 

    -

                return False 

    -

            self.manager.healNetwork(self.home_id, upNodeRoute) 

    -

            return True 

    -

     

    -

        def get_value(self, value_id): 

    -

            """ 

    -

            Retrieve a value on the network. 

    -

     

    -

            Check every nodes to see if it holds the value 

    +

            if state: 

    +

                self.manager.switchAllOn(self.home_id) 

    +

            else: 

    +

                self.manager.switchAllOff(self.home_id) 

    +

     

    +

        def test(self, count=1): 

    +

            """ 

    +

            Send a number of test messages to every node and record results. 

    +

     

    +

            :param count: The number of test messages to send. 

    +

            :type count: int 

    +

     

    +

            """ 

    +

            self.manager.testNetwork(self.home_id, count) 

    +

     

    +

        def heal(self, upNodeRoute=False): 

    +

            """ 

    +

            Heal network by requesting nodes rediscover their neighbors. 

    +

            Sends a ControllerCommand_RequestNodeNeighborUpdate to every node. 

    +

            Can take a while on larger networks. 

    +

     

    +

            :param upNodeRoute: Optional Whether to perform return routes initialization. (default = false). 

    +

            :type upNodeRoute: bool 

    +

            :return: True is the ControllerCommand ins sent. False otherwise 

    +

            :rtype: bool 

     

    -

            :param value_id: The id of the value to find 

    -

            :type value_id: int 

    -

            :return: The value or None 

    -

            :rtype: ZWaveValue 

    -

     

    -

            """ 

    -

            for node in self.nodes: 

    -

                if value_id in self.nodes[node].values: 

    -

                    return self.nodes[node].values[value_id] 

    -

            return None 

    +

            """ 

    +

            if self.network.state < self.network.STATE_AWAKED: 

    +

                logger.warning('Network state must a minimum set to awake') 

    +

                return False 

    +

            self.manager.healNetwork(self.home_id, upNodeRoute) 

    +

            return True 

    +

     

    +

        def get_value(self, value_id): 

    +

            """ 

    +

            Retrieve a value on the network. 

     

    -

        @property 

    -

        def id_separator(self): 

    -

            """ 

    -

            The separator in id representation. 

    -

     

    -

            :rtype: char 

    +

            Check every nodes to see if it holds the value 

    +

     

    +

            :param value_id: The id of the value to find 

    +

            :type value_id: int 

    +

            :return: The value or None 

    +

            :rtype: ZWaveValue 

     

            """ 

    -

            return self._id_separator 

    -

     

    -

        @id_separator.setter 

    -

        def id_separator(self, value): 

    -

            """ 

    -

            The nodes of the network. 

    -

     

    -

            :param value: The new separator 

    -

            :type value: char 

    +

            for node in self.nodes: 

    +

                if value_id in self.nodes[node].values: 

    +

                    return self.nodes[node].values[value_id] 

    +

            return None 

    +

     

    +

        @property 

    +

        def id_separator(self): 

    +

            """ 

    +

            The separator in id representation. 

     

    -

            """ 

    -

            self._id_separator = value 

    -

     

    -

        def get_value_from_id_on_network(self, id_on_network): 

    -

            """ 

    -

            Retrieve a value on the network from it's id_on_network. 

    -

     

    -

            Check every nodes to see if it holds the value 

    -

     

    -

            :param id_on_network: The id_on_network of the value to find 

    -

            :type id_on_network: str 

    -

            :return: The value or None 

    -

            :rtype: ZWaveValue 

    -

     

    -

            """ 

    -

            for node in self.nodes.itervalues(): 

    -

                for val in node.values.itervalues(): 

    -

                    if val.id_on_network == id_on_network: 

    -

                        return val 

    -

            return None 

    -

     

    -

        def get_scenes(self): 

    -

            """ 

    -

            The scenes of the network. 

    -

     

    -

            Scenes are generated directly from the lib. There is no notification 

    -

            support to keep them up to date. So for a batch job, consider 

    -

            storing them in a local variable. 

    -

     

    -

            :return: return a dict() (that can be empty) of scene object. Return None if betwork is not ready 

    -

            :rtype: dict() or None 

    -

     

    -

            """ 

    -

            if self.state < self.STATE_AWAKED: 

    -

                return None 

    -

            else: 

    -

                return self._load_scenes() 

    +

            :rtype: char 

    +

     

    +

            """ 

    +

            return self._id_separator 

    +

     

    +

        @id_separator.setter 

    +

        def id_separator(self, value): 

    +

            """ 

    +

            The nodes of the network. 

    +

     

    +

            :param value: The new separator 

    +

            :type value: char 

    +

     

    +

            """ 

    +

            self._id_separator = value 

    +

     

    +

        def get_value_from_id_on_network(self, id_on_network): 

    +

            """ 

    +

            Retrieve a value on the network from it's id_on_network. 

    +

     

    +

            Check every nodes to see if it holds the value 

    +

     

    +

            :param id_on_network: The id_on_network of the value to find 

    +

            :type id_on_network: str 

    +

            :return: The value or None 

    +

            :rtype: ZWaveValue 

    +

     

    +

            """ 

    +

            for node in self.nodes.itervalues(): 

    +

                for val in node.values.itervalues(): 

    +

                    if val.id_on_network == id_on_network: 

    +

                        return val 

    +

            return None 

    +

     

    +

        def get_scenes(self): 

    +

            """ 

    +

            The scenes of the network. 

     

    -

        def scenes_to_dict(self, kvals=True): 

    -

            """ 

    -

            Return a JSONifiable dict representation of the scenes. 

    +

            Scenes are generated directly from the lib. There is no notification 

    +

            support to keep them up to date. So for a batch job, consider 

    +

            storing them in a local variable. 

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            scenes = self.get_scenes() 

    -

            for scnid in scenes.keys(): 

    -

                ret[scnid] = scenes[scnid].to_dict(kvals=kvals) 

    -

            return ret 

    +

            :return: return a dict() (that can be empty) of scene object. Return None if betwork is not ready 

    +

            :rtype: dict() or None 

    +

     

    +

            """ 

    +

            if self.state < self.STATE_AWAKED: 

    +

                return None 

    +

            else: 

    +

                return self._load_scenes() 

     

    -

        def _load_scenes(self): 

    +

        def scenes_to_dict(self, extras=['all']): 

            """ 

    -

            Load the scenes of the network. 

    +

            Return a JSONifiable dict representation of the scenes. 

     

    -

            :return: return a dict() (that can be empty) of scene object. 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret = {} 

    -

            set_scenes = self._manager.getAllScenes() 

    -

            logger.debug('Load Scenes: %s', set_scenes) 

    -

            for scene_id in set_scenes: 

    -

                scene = ZWaveScene(scene_id, network=self) 

    -

                ret[scene_id] = scene 

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret={} 

    +

            scenes = self.get_scenes() 

    +

            for scnid in scenes.keys(): 

    +

                ret[scnid] = scenes[scnid].to_dict(extras=extras) 

            return ret 

     

    -

        def create_scene(self, label=None): 

    +

        def _load_scenes(self): 

            """ 

    -

            Create a new scene on the network. 

    -

            If label is set, also change the label of the scene 

    -

     

    -

            If you store your scenes on a local variable, get a new one 

    -

            to get the scene id 

    -

     

    -

            :param label: The new label 

    -

            :type label: str or None 

    -

            :return: return the id of scene on the network. Return 0 if fails 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            scene = ZWaveScene(None, network=self) 

    -

            return scene.create(label) 

    -

     

    -

        def scene_exists(self, scene_id): 

    -

            """ 

    -

            Check that the scene exists 

    +

            Load the scenes of the network. 

    +

     

    +

            :return: return a dict() (that can be empty) of scene object. 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret = {} 

    +

            set_scenes = self._manager.getAllScenes() 

    +

            logger.debug('Load Scenes: %s', set_scenes) 

    +

            for scene_id in set_scenes: 

    +

                scene = ZWaveScene(scene_id, network=self) 

    +

                ret[scene_id] = scene 

    +

            return ret 

    +

     

    +

        def create_scene(self, label=None): 

    +

            """ 

    +

            Create a new scene on the network. 

    +

            If label is set, also change the label of the scene 

     

    -

            :param scene_id: The id of the scene to check 

    -

            :type scene_id: int 

    -

            :return: True if the scene exist. False in other cases 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.sceneExists(scene_id) 

    +

            If you store your scenes on a local variable, get a new one 

    +

            to get the scene id 

    +

     

    +

            :param label: The new label 

    +

            :type label: str or None 

    +

            :return: return the id of scene on the network. Return 0 if fails 

    +

            :rtype: int 

     

    -

        @property 

    -

        def scenes_count(self): 

    -

            """ 

    -

            Return the number of scenes 

    -

     

    -

            :return: The number of scenes 

    -

            :rtype: int 

    +

            """ 

    +

            scene = ZWaveScene(None, network=self) 

    +

            return scene.create(label) 

    +

     

    +

        def scene_exists(self, scene_id): 

    +

            """ 

    +

            Check that the scene exists 

     

    -

            """ 

    -

            return self._network.manager.getNumScenes() 

    -

     

    -

        def remove_scene(self, scene_id): 

    -

            """ 

    -

            Delete the scene on the network. 

    -

     

    -

            :param scene_id: The id of the scene to check 

    -

            :type scene_id: int 

    -

            :return: True if the scene was removed. False in other cases 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.removeScene(scene_id) 

    -

     

    -

        @property 

    -

        def nodes_count(self): 

    -

            """ 

    -

            The nodes count of the network. 

    -

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return len(self.nodes) 

    -

     

    -

        @property 

    -

        def sleeping_nodes_count(self): 

    -

            """ 

    -

            The count of sleeping nodes on the network. 

    -

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            result = 0 

    -

            for node in self.nodes: 

    -

                if node.is_sleeping: 

    -

                    result += 1 

    -

            return result 

    -

     

    -

        def get_poll_interval(self): 

    -

            """ 

    -

            Get the time period between polls of a nodes state 

    -

     

    -

            :return: The number of milliseconds between polls 

    -

            :rtype: int 

    +

            :param scene_id: The id of the scene to check 

    +

            :type scene_id: int 

    +

            :return: True if the scene exist. False in other cases 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.sceneExists(scene_id) 

    +

     

    +

        @property 

    +

        def scenes_count(self): 

    +

            """ 

    +

            Return the number of scenes 

    +

     

    +

            :return: The number of scenes 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNumScenes() 

    +

     

    +

        def remove_scene(self, scene_id): 

    +

            """ 

    +

            Delete the scene on the network. 

    +

     

    +

            :param scene_id: The id of the scene to check 

    +

            :type scene_id: int 

    +

            :return: True if the scene was removed. False in other cases 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.removeScene(scene_id) 

    +

     

    +

        @property 

    +

        def nodes_count(self): 

    +

            """ 

    +

            The nodes count of the network. 

    +

     

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return len(self.nodes) 

    +

     

    +

        @property 

    +

        def sleeping_nodes_count(self): 

    +

            """ 

    +

            The count of sleeping nodes on the network. 

     

    -

            """ 

    -

            return self.manager.getPollInterval() 

    -

     

    -

        def set_poll_interval(self, milliseconds=500, bIntervalBetweenPolls=True): 

    -

            """ 

    -

            Set the time period between polls of a nodes state. 

    -

     

    -

            Due to patent concerns, some devices do not report state changes automatically 

    -

            to the controller.  These devices need to have their state polled at regular 

    -

            intervals.  The length of the interval is the same for all devices.  To even 

    -

            out the Z-Wave network traffic generated by polling, OpenZWave divides the 

    -

            polling interval by the number of devices that have polling enabled, and polls 

    -

            each in turn.  It is recommended that if possible, the interval should not be 

    -

            set shorter than the number of polled devices in seconds (so that the network 

    -

            does not have to cope with more than one poll per second). 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            result = 0 

    +

            for node in self.nodes: 

    +

                if node.is_sleeping: 

    +

                    result += 1 

    +

            return result 

    +

     

    +

        def get_poll_interval(self): 

    +

            """ 

    +

            Get the time period between polls of a nodes state 

    +

     

    +

            :return: The number of milliseconds between polls 

    +

            :rtype: int 

     

    -

            :param milliseconds: The length of the polling interval in milliseconds. 

    -

            :type milliseconds: int 

    -

            :param bIntervalBetweenPolls: If set to true (via SetPollInterval), the pollInterval will be interspersed between each poll (so a much smaller m_pollInterval like 100, 500, or 1,000 may be appropriate). If false, the library attempts to complete all polls within m_pollInterval. 

    -

            :type bIntervalBetweenPolls: bool 

    -

     

    -

            """ 

    -

            self.manager.setPollInterval(milliseconds, bIntervalBetweenPolls) 

    -

     

    -

        def zwcallback(self, args): 

    -

            """ 

    -

            The Callback Handler used with the libopenzwave. 

    -

     

    -

            n['valueId'] = { 

    -

     

    -

                * 'home_id' : v.GetHomeId(), 

    -

                * 'node_id' : v.GetNodeId(), 

    -

                * 'commandClass' : PyManager.COMMAND_CLASS_DESC[v.GetCommandClassId()], 

    -

                * 'instance' : v.GetInstance(), 

    -

                * 'index' : v.GetIndex(), 

    -

                * 'id' : v.GetId(), 

    -

                * 'genre' : PyGenres[v.GetGenre()], 

    -

                * 'type' : PyValueTypes[v.GetType()], 

    -

                * #'value' : value.c_str(), 

    -

                * 'value' : getValueFromType(manager,v.GetId()), 

    -

                * 'label' : label.c_str(), 

    -

                * 'units' : units.c_str(), 

    -

                * 'readOnly': manager.IsValueReadOnly(v) 

    +

            """ 

    +

            return self.manager.getPollInterval() 

    +

     

    +

        def set_poll_interval(self, milliseconds=500, bIntervalBetweenPolls=True): 

    +

            """ 

    +

            Set the time period between polls of a nodes state. 

    +

     

    +

            Due to patent concerns, some devices do not report state changes automatically 

    +

            to the controller.  These devices need to have their state polled at regular 

    +

            intervals.  The length of the interval is the same for all devices.  To even 

    +

            out the Z-Wave network traffic generated by polling, OpenZWave divides the 

    +

            polling interval by the number of devices that have polling enabled, and polls 

    +

            each in turn.  It is recommended that if possible, the interval should not be 

    +

            set shorter than the number of polled devices in seconds (so that the network 

    +

            does not have to cope with more than one poll per second). 

    +

     

    +

            :param milliseconds: The length of the polling interval in milliseconds. 

    +

            :type milliseconds: int 

    +

            :param bIntervalBetweenPolls: If set to true (via SetPollInterval), the pollInterval will be interspersed between each poll (so a much smaller m_pollInterval like 100, 500, or 1,000 may be appropriate). If false, the library attempts to complete all polls within m_pollInterval. 

    +

            :type bIntervalBetweenPolls: bool 

    +

     

    +

            """ 

    +

            self.manager.setPollInterval(milliseconds, bIntervalBetweenPolls) 

    +

     

    +

        def zwcallback(self, args): 

    +

            """ 

    +

            The Callback Handler used with the libopenzwave. 

     

    -

            } 

    +

            n['valueId'] = { 

     

    -

            :param args: A dict containing informations about the state of the controller 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('zwcallback args=[%s]', args) 

    -

            try: 

    -

                notify_type = args['notificationType'] 

    -

                if notify_type == self.SIGNAL_DRIVER_FAILED: 

    -

                    self._handle_driver_failed(args) 

    -

                elif notify_type == self.SIGNAL_DRIVER_READY: 

    -

                    self._handle_driver_ready(args) 

    -

                elif notify_type == self.SIGNAL_DRIVER_RESET: 

    -

                    self._handle_driver_reset(args) 

    -

                elif notify_type == self.SIGNAL_NODE_ADDED: 

    -

                    self._handle_node_added(args) 

    -

                elif notify_type == self.SIGNAL_NODE_EVENT: 

    -

                    self._handle_node_event(args) 

    -

                elif notify_type == self.SIGNAL_NODE_NAMING: 

    -

                    self._handle_node_naming(args) 

    -

                elif notify_type == self.SIGNAL_NODE_NEW: 

    -

                    self._handle_node_new(args) 

    -

                elif notify_type == self.SIGNAL_NODE_PROTOCOL_INFO: 

    -

                    self._handle_node_protocol_info(args) 

    -

                elif notify_type == self.SIGNAL_NODE_READY: 

    -

                    self._handleNodeReady(args) 

    -

                elif notify_type == self.SIGNAL_NODE_REMOVED: 

    -

                    self._handle_node_removed(args) 

    -

                elif notify_type == self.SIGNAL_GROUP: 

    -

                    self._handle_group(args) 

    -

                elif notify_type == self.SIGNAL_SCENE_EVENT: 

    -

                    self._handle_scene_event(args) 

    -

                elif notify_type == self.SIGNAL_VALUE_ADDED: 

    -

                    self._handle_value_added(args) 

    -

                elif notify_type == self.SIGNAL_VALUE_CHANGED: 

    -

                    self._handle_value_changed(args) 

    -

                elif notify_type == self.SIGNAL_VALUE_REFRESHED: 

    -

                    self._handle_value_refreshed(args) 

    -

                elif notify_type == self.SIGNAL_VALUE_REMOVED: 

    -

                    self._handle_value_removed(args) 

    -

                elif notify_type == self.SIGNAL_POLLING_DISABLED: 

    -

                    self._handle_polling_disabled(args) 

    -

                elif notify_type == self.SIGNAL_POLLING_ENABLED: 

    -

                    self._handle_polling_enabled(args) 

    -

                elif notify_type == self.SIGNAL_CREATE_BUTTON: 

    -

                    self._handle_create_button(args) 

    -

                elif notify_type == self.SIGNAL_DELETE_BUTTON: 

    -

                    self._handle_delete_button(args) 

    -

                elif notify_type == self.SIGNAL_BUTTON_ON: 

    -

                    self._handle_button_on(args) 

    -

                elif notify_type == self.SIGNAL_BUTTON_OFF: 

    -

                    self._handle_button_off(args) 

    -

                elif notify_type == self.SIGNAL_ALL_NODES_QUERIED: 

    -

                    self._handle_all_nodes_queried(args) 

    -

                elif notify_type == self.SIGNAL_ALL_NODES_QUERIED_SOME_DEAD: 

    -

                    self._handle_all_nodes_queried_some_dead(args) 

    -

                elif notify_type == self.SIGNAL_AWAKE_NODES_QUERIED: 

    -

                    self._handle_awake_nodes_queried(args) 

    -

                elif notify_type == self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE: 

    -

                    self._handle_essential_node_queries_complete(args) 

    -

                elif notify_type == self.SIGNAL_NODE_QUERIES_COMPLETE: 

    -

                    self._handle_node_queries_complete(args) 

    -

                elif notify_type == self.SIGNAL_MSG_COMPLETE: 

    -

                    self._handle_msg_complete(args) 

    -

                elif notify_type == self.SIGNAL_NOTIFICATION: 

    -

                    self._handle_notification(args) 

    -

                elif notify_type == self.SIGNAL_DRIVER_REMOVED: 

    -

                    self._handle_driver_removed(args) 

    -

                else: 

    -

                    logger.warning('Skipping unhandled notification [%s]', args) 

    -

            except: 

    -

                import sys, traceback 

    -

                logger.error('Error in manager callback : %s', traceback.format_exception(*sys.exc_info())) 

    -

     

    -

        def _handle_driver_failed(self, args): 

    -

            """ 

    -

            Driver failed to load. 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_FAILED, **{'network': self}) 

    -

     

    -

            """ 

    -

            logger.warning('Z-Wave Notification DriverFailed : %s', args) 

    -

            self._manager = None 

    -

            self._controller = None 

    -

            self.nodes = None 

    -

            self._state = self.STATE_FAILED 

    -

            dispatcher.send(self.SIGNAL_DRIVER_FAILED, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_NETWORK_FAILED, **{'network': self}) 

    -

     

    -

        def _handle_driver_ready(self, args): 

    -

            """ 

    -

            A driver for a PC Z-Wave controller has been added and is ready to use. 

    -

            The notification will contain the controller's Home ID, 

    -

            which is needed to call most of the Manager methods. 

    -

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_STARTED, **{'network': self, 'controller': self._controller}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification DriverReady : %s', args) 

    -

            self._object_id = args['homeId'] 

    -

            try: 

    -

                controller_node = ZWaveNode(args['nodeId'], network=self) 

    -

                self._semaphore_nodes.acquire() 

    -

                self.nodes = None 

    -

                self.nodes[args['nodeId']] = controller_node 

    -

                self._controller.node = self.nodes[args['nodeId']] 

    -

                logger.info('Driver ready using library %s', self._controller.library_description) 

    -

                logger.info('home_id 0x%0.8x, controller node id is %d', self.home_id, self._controller.node_id) 

    -

                logger.debug('Network %s', self) 

    -

                dispatcher.send(self.SIGNAL_DRIVER_READY, \ 

    -

                    **{'network': self, 'controller': self._controller}) 

    -

                self._state = self.STATE_STARTED 

    -

                dispatcher.send(self.SIGNAL_NETWORK_STARTED, \ 

    -

                    **{'network': self}) 

    -

                ctrl_state = libopenzwave.PyControllerState[0] 

    -

                ctrl_message = libopenzwave.PyControllerState[0].doc 

    -

                dispatcher.send(self.controller.SIGNAL_CONTROLLER, \ 

    -

                    **{'state': ctrl_state, 'message': ctrl_message, 'network': self, 'controller': self.controller}) 

    -

            except: 

    -

                import sys, traceback 

    -

                logger.error('Z-Wave Notification DriverReady : %s', traceback.format_exception(*sys.exc_info())) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    -

     

    -

        def _handle_driver_reset(self, args): 

    -

            """ 

    -

            This notification is never fired. 

    -

     

    -

            Look at 

    -

                and 

    -

     

    -

            All nodes and values for this driver have been removed. 

    -

            This is sent instead of potentially hundreds of individual node 

    -

            and value notifications. 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification DriverReset : %s', args) 

    -

            try: 

    -

                self._semaphore_nodes.acquire() 

    -

                logger.debug('DriverReset received. Remove all nodes') 

    -

                #self.nodes = None 

    -

                #self._state = self.STATE_RESETTED 

    -

                dispatcher.send(self.SIGNAL_DRIVER_RESET, \ 

    -

                    **{'network': self}) 

    -

                dispatcher.send(self.SIGNAL_NETWORK_RESETTED, \ 

    -

                    **{'network': self}) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    -

     

    -

        def _handle_driver_removed(self, args): 

    -

            """ 

    -

            The Driver is being removed. (either due to Error or by request) 

    -

            Do Not Call Any Driver Related Methods after receiving this 

    -

     

    -

            dispatcher.send(self.SIGNAL_DRIVER_REMOVED, **{'network': self}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification DriverRemoved : %s', args) 

    -

            try: 

    -

                self._semaphore_nodes.acquire() 

    -

                self._state = self.STATE_STOPPED 

    -

                dispatcher.send(self.SIGNAL_DRIVER_REMOVED, \ 

    -

                    **{'network': self}) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    -

     

    -

        def _handle_group(self, args): 

    -

            """ 

    -

            The associations for the node have changed. 

    -

            The application should rebuild any group information 

    -

            it holds about the node. 

    +

                * 'home_id' : v.GetHomeId(), 

    +

                * 'node_id' : v.GetNodeId(), 

    +

                * 'commandClass' : PyManager.COMMAND_CLASS_DESC[v.GetCommandClassId()], 

    +

                * 'instance' : v.GetInstance(), 

    +

                * 'index' : v.GetIndex(), 

    +

                * 'id' : v.GetId(), 

    +

                * 'genre' : PyGenres[v.GetGenre()], 

    +

                * 'type' : PyValueTypes[v.GetType()], 

    +

                * #'value' : value.c_str(), 

    +

                * 'value' : getValueFromType(manager,v.GetId()), 

    +

                * 'label' : label.c_str(), 

    +

                * 'units' : units.c_str(), 

    +

                * 'readOnly': manager.IsValueReadOnly(v) 

    +

     

    +

            } 

    +

     

    +

            :param args: A dict containing informations about the state of the controller 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('zwcallback args=[%s]', args) 

    +

            try: 

    +

                notify_type = args['notificationType'] 

    +

                if notify_type == self.SIGNAL_DRIVER_FAILED: 

    +

                    self._handle_driver_failed(args) 

    +

                elif notify_type == self.SIGNAL_DRIVER_READY: 

    +

                    self._handle_driver_ready(args) 

    +

                elif notify_type == self.SIGNAL_DRIVER_RESET: 

    +

                    self._handle_driver_reset(args) 

    +

                elif notify_type == self.SIGNAL_NODE_ADDED: 

    +

                    self._handle_node_added(args) 

    +

                elif notify_type == self.SIGNAL_NODE_EVENT: 

    +

                    self._handle_node_event(args) 

    +

                elif notify_type == self.SIGNAL_NODE_NAMING: 

    +

                    self._handle_node_naming(args) 

    +

                elif notify_type == self.SIGNAL_NODE_NEW: 

    +

                    self._handle_node_new(args) 

    +

                elif notify_type == self.SIGNAL_NODE_PROTOCOL_INFO: 

    +

                    self._handle_node_protocol_info(args) 

    +

                elif notify_type == self.SIGNAL_NODE_READY: 

    +

                    self._handleNodeReady(args) 

    +

                elif notify_type == self.SIGNAL_NODE_REMOVED: 

    +

                    self._handle_node_removed(args) 

    +

                elif notify_type == self.SIGNAL_GROUP: 

    +

                    self._handle_group(args) 

    +

                elif notify_type == self.SIGNAL_SCENE_EVENT: 

    +

                    self._handle_scene_event(args) 

    +

                elif notify_type == self.SIGNAL_VALUE_ADDED: 

    +

                    self._handle_value_added(args) 

    +

                elif notify_type == self.SIGNAL_VALUE_CHANGED: 

    +

                    self._handle_value_changed(args) 

    +

                elif notify_type == self.SIGNAL_VALUE_REFRESHED: 

    +

                    self._handle_value_refreshed(args) 

    +

                elif notify_type == self.SIGNAL_VALUE_REMOVED: 

    +

                    self._handle_value_removed(args) 

    +

                elif notify_type == self.SIGNAL_POLLING_DISABLED: 

    +

                    self._handle_polling_disabled(args) 

    +

                elif notify_type == self.SIGNAL_POLLING_ENABLED: 

    +

                    self._handle_polling_enabled(args) 

    +

                elif notify_type == self.SIGNAL_CREATE_BUTTON: 

    +

                    self._handle_create_button(args) 

    +

                elif notify_type == self.SIGNAL_DELETE_BUTTON: 

    +

                    self._handle_delete_button(args) 

    +

                elif notify_type == self.SIGNAL_BUTTON_ON: 

    +

                    self._handle_button_on(args) 

    +

                elif notify_type == self.SIGNAL_BUTTON_OFF: 

    +

                    self._handle_button_off(args) 

    +

                elif notify_type == self.SIGNAL_ALL_NODES_QUERIED: 

    +

                    self._handle_all_nodes_queried(args) 

    +

                elif notify_type == self.SIGNAL_ALL_NODES_QUERIED_SOME_DEAD: 

    +

                    self._handle_all_nodes_queried_some_dead(args) 

    +

                elif notify_type == self.SIGNAL_AWAKE_NODES_QUERIED: 

    +

                    self._handle_awake_nodes_queried(args) 

    +

                elif notify_type == self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE: 

    +

                    self._handle_essential_node_queries_complete(args) 

    +

                elif notify_type == self.SIGNAL_NODE_QUERIES_COMPLETE: 

    +

                    self._handle_node_queries_complete(args) 

    +

                elif notify_type == self.SIGNAL_MSG_COMPLETE: 

    +

                    self._handle_msg_complete(args) 

    +

                elif notify_type == self.SIGNAL_NOTIFICATION: 

    +

                    self._handle_notification(args) 

    +

                elif notify_type == self.SIGNAL_DRIVER_REMOVED: 

    +

                    self._handle_driver_removed(args) 

    +

                else: 

    +

                    logger.warning('Skipping unhandled notification [%s]', args) 

    +

            except: 

    +

                import sys, traceback 

    +

                logger.error('Error in manager callback : %s', traceback.format_exception(*sys.exc_info())) 

    +

     

    +

        def _handle_driver_failed(self, args): 

    +

            """ 

    +

            Driver failed to load. 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_FAILED, **{'network': self}) 

    +

     

    +

            """ 

    +

            logger.warning('Z-Wave Notification DriverFailed : %s', args) 

    +

            self._manager = None 

    +

            self._controller = None 

    +

            self.nodes = None 

    +

            self._state = self.STATE_FAILED 

    +

            dispatcher.send(self.SIGNAL_DRIVER_FAILED, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_NETWORK_FAILED, **{'network': self}) 

    +

     

    +

        def _handle_driver_ready(self, args): 

    +

            """ 

    +

            A driver for a PC Z-Wave controller has been added and is ready to use. 

    +

            The notification will contain the controller's Home ID, 

    +

            which is needed to call most of the Manager methods. 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_STARTED, **{'network': self, 'controller': self._controller}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification DriverReady : %s', args) 

    +

            self._object_id = args['homeId'] 

    +

            try: 

    +

                controller_node = ZWaveNode(args['nodeId'], network=self) 

    +

                self._semaphore_nodes.acquire() 

    +

                self.nodes = None 

    +

                self.nodes[args['nodeId']] = controller_node 

    +

                self._controller.node = self.nodes[args['nodeId']] 

    +

                logger.info('Driver ready using library %s', self._controller.library_description) 

    +

                logger.info('home_id 0x%0.8x, controller node id is %d', self.home_id, self._controller.node_id) 

    +

                logger.debug('Network %s', self) 

    +

                dispatcher.send(self.SIGNAL_DRIVER_READY, \ 

    +

                    **{'network': self, 'controller': self._controller}) 

    +

                self._state = self.STATE_STARTED 

    +

                dispatcher.send(self.SIGNAL_NETWORK_STARTED, \ 

    +

                    **{'network': self}) 

    +

                ctrl_state = libopenzwave.PyControllerState[0] 

    +

                ctrl_message = libopenzwave.PyControllerState[0].doc 

    +

                dispatcher.send(self.controller.SIGNAL_CONTROLLER, \ 

    +

                    **{'state': ctrl_state, 'message': ctrl_message, 'network': self, 'controller': self.controller}) 

    +

            except: 

    +

                import sys, traceback 

    +

                logger.error('Z-Wave Notification DriverReady : %s', traceback.format_exception(*sys.exc_info())) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

    +

     

    +

        def _handle_driver_reset(self, args): 

    +

            """ 

    +

            This notification is never fired. 

    +

     

    +

            Look at 

    +

                and 

    +

     

    +

            All nodes and values for this driver have been removed. 

    +

            This is sent instead of potentially hundreds of individual node 

    +

            and value notifications. 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification DriverReset : %s', args) 

    +

            try: 

    +

                self._semaphore_nodes.acquire() 

    +

                logger.debug('DriverReset received. Remove all nodes') 

    +

                #self.nodes = None 

    +

                #self._state = self.STATE_RESETTED 

    +

                dispatcher.send(self.SIGNAL_DRIVER_RESET, \ 

    +

                    **{'network': self}) 

    +

                dispatcher.send(self.SIGNAL_NETWORK_RESETTED, \ 

    +

                    **{'network': self}) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

    +

     

    +

        def _handle_driver_removed(self, args): 

    +

            """ 

    +

            The Driver is being removed. (either due to Error or by request) 

    +

            Do Not Call Any Driver Related Methods after receiving this 

    +

     

    +

            dispatcher.send(self.SIGNAL_DRIVER_REMOVED, **{'network': self}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

     

    -

            dispatcher.send(self.SIGNAL_GROUP, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification Group : %s', args) 

    -

            dispatcher.send(self.SIGNAL_GROUP, \ 

    -

                    **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            """ 

    +

            logger.debug('Z-Wave Notification DriverRemoved : %s', args) 

    +

            try: 

    +

                self._semaphore_nodes.acquire() 

    +

                self._state = self.STATE_STOPPED 

    +

                dispatcher.send(self.SIGNAL_DRIVER_REMOVED, \ 

    +

                    **{'network': self}) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

     

    -

        def _handle_node(self, node): 

    +

        def _handle_group(self, args): 

            """ 

    -

            Sent when a node is changed, added, removed, ... 

    -

            If you don't interest in nodes event details you can listen to this 

    -

            signal only. 

    +

            The associations for the node have changed. 

    +

            The application should rebuild any group information 

    +

            it holds about the node. 

     

    -

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_GROUP, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

     

    -

            :param node: the node 

    -

            :type node: ZWaveNode 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

     

            """ 

    -

            logger.debug('Z-Wave Notification Node : %s', node) 

    -

            dispatcher.send(self.SIGNAL_NODE, \ 

    -

                    **{'network': self, 'node':node}) 

    +

            logger.debug('Z-Wave Notification Group : %s', args) 

    +

            dispatcher.send(self.SIGNAL_GROUP, \ 

    +

                    **{'network': self, 'node': self.nodes[args['nodeId']]}) 

     

    -

        def _handle_node_added(self, args): 

    +

        def _handle_node(self, node): 

            """ 

    -

            A new node has been added to OpenZWave's set. 

    -

            This may be due to a device being added to the Z-Wave network, 

    -

            or because the application is initializing itself. 

    +

            Sent when a node is changed, added, removed, ... 

    +

            If you don't interest in nodes event details you can listen to this 

    +

            signal only. 

     

    -

            dispatcher.send(self.SIGNAL_NODE_ADDED, **{'network': self, 'node': node}) 

    -

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeAdded : %s', args) 

    -

            try: 

    -

                node = ZWaveNode(args['nodeId'], network=self) 

    -

                self._semaphore_nodes.acquire() 

    -

                self.nodes[args['nodeId']] = node 

    -

                dispatcher.send(self.SIGNAL_NODE_ADDED, \ 

    -

                    **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

                self._handle_node(self.nodes[args['nodeId']]) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    -

     

    -

        def _handle_scene_event(self, args): 

    -

            """ 

    -

            Scene Activation Set received 

    +

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    +

     

    +

            :param node: the node 

    +

            :type node: ZWaveNode 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification Node : %s', node) 

    +

            dispatcher.send(self.SIGNAL_NODE, \ 

    +

                    **{'network': self, 'node':node}) 

    +

     

    +

        def _handle_node_added(self, args): 

    +

            """ 

    +

            A new node has been added to OpenZWave's set. 

    +

            This may be due to a device being added to the Z-Wave network, 

    +

            or because the application is initializing itself. 

    +

     

    +

            dispatcher.send(self.SIGNAL_NODE_ADDED, **{'network': self, 'node': node}) 

    +

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

     

    -

            Not implemented 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification SceneEvent : %s', args) 

    -

            dispatcher.send(self.SIGNAL_SCENE_EVENT, \ 

    -

                **{'network': self, 'node': self.nodes[args['nodeId']], 

    -

                   'scene_id': args['sceneId']}) 

    -

     

    -

        def _handle_node_event(self, args): 

    -

            """ 

    -

            A node has triggered an event.  This is commonly caused when a 

    -

            node sends a Basic_Set command to the controller. 

    -

            The event value is stored in the notification. 

    -

     

    -

            dispatcher.send(self.SIGNAL_NODE_EVENT, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeEvent : %s', args) 

    -

            dispatcher.send(self.SIGNAL_NODE_EVENT, 

    -

                            **{'network': self, 'node': self.nodes[args['nodeId']], 'value': args['event']}) 

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeAdded : %s', args) 

    +

            try: 

    +

                node = ZWaveNode(args['nodeId'], network=self) 

    +

                self._semaphore_nodes.acquire() 

    +

                self.nodes[args['nodeId']] = node 

    +

                dispatcher.send(self.SIGNAL_NODE_ADDED, \ 

    +

                    **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

                self._handle_node(self.nodes[args['nodeId']]) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

    +

     

    +

        def _handle_scene_event(self, args): 

    +

            """ 

    +

            Scene Activation Set received 

    +

     

    +

            Not implemented 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification SceneEvent : %s', args) 

    +

            dispatcher.send(self.SIGNAL_SCENE_EVENT, \ 

    +

                **{'network': self, 'node': self.nodes[args['nodeId']], 

    +

                   'scene_id': args['sceneId']}) 

     

    -

        def _handle_node_naming(self, args): 

    +

        def _handle_node_event(self, args): 

            """ 

    -

            One of the node names has changed (name, manufacturer, product). 

    -

     

    -

            dispatcher.send(self.SIGNAL_NODE_NAMING, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeNaming : %s', args) 

    -

            dispatcher.send(self.SIGNAL_NODE_NAMING, \ 

    -

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

            self._handle_node(self.nodes[args['nodeId']]) 

    +

            A node has triggered an event.  This is commonly caused when a 

    +

            node sends a Basic_Set command to the controller. 

    +

            The event value is stored in the notification. 

    +

     

    +

            dispatcher.send(self.SIGNAL_NODE_EVENT, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeEvent : %s', args) 

    +

            dispatcher.send(self.SIGNAL_NODE_EVENT, 

    +

                            **{'network': self, 'node': self.nodes[args['nodeId']], 'value': args['event']}) 

     

    -

        def _handle_node_new(self, args): 

    +

        def _handle_node_naming(self, args): 

            """ 

    -

            A new node has been found (not already stored in zwcfg*.xml file). 

    +

            One of the node names has changed (name, manufacturer, product). 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    +

            dispatcher.send(self.SIGNAL_NODE_NAMING, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeNew : %s', args) 

    -

            dispatcher.send(self.SIGNAL_NODE_NEW, \ 

    -

                **{'network': self, 'node_id': args['nodeId']}) 

    -

     

    -

        def _handle_node_protocol_info(self, args): 

    -

            """ 

    -

            Basic node information has been received, such as whether 

    -

            the node is a listening device, a routing device and its baud rate 

    -

            and basic, generic and specific types. 

    -

            It is after this notification that you can call Manager::GetNodeType 

    -

            to obtain a label containing the device description. 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeNaming : %s', args) 

    +

            dispatcher.send(self.SIGNAL_NODE_NAMING, \ 

    +

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            self._handle_node(self.nodes[args['nodeId']]) 

    +

     

    +

        def _handle_node_new(self, args): 

    +

            """ 

    +

            A new node has been found (not already stored in zwcfg*.xml file). 

     

            :param args: data sent by the notification 

            :type args: dict() 

     

            """ 

    -

            logger.debug('Z-Wave Notification NodeProtocolInfo : %s', args) 

    -

            dispatcher.send(self.SIGNAL_NODE_PROTOCOL_INFO, \ 

    -

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

            self._handle_node(self.nodes[args['nodeId']]) 

    -

     

    -

        def _handle_node_removed(self, args): 

    -

            """ 

    -

            A node has been removed from OpenZWave's set. 

    -

            This may be due to a device being removed from the Z-Wave network, 

    -

            or because the application is closing. 

    -

     

    -

            dispatcher.send(self.SIGNAL_NODE_REMOVED, **{'network': self, 'node_id': args['nodeId']}) 

    -

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeRemoved : %s', args) 

    -

            try: 

    -

                self._semaphore_nodes.acquire() 

    -

                if args['nodeId'] in self.nodes: 

    -

                    node = self.nodes[args['nodeId']] 

    -

                    del self.nodes[args['nodeId']] 

    -

                    dispatcher.send(self.SIGNAL_NODE_REMOVED, \ 

    -

                        **{'network': self, 'node': node}) 

    -

                    self._handle_node(node) 

    -

            finally: 

    -

                self._semaphore_nodes.release() 

    +

            logger.debug('Z-Wave Notification NodeNew : %s', args) 

    +

            dispatcher.send(self.SIGNAL_NODE_NEW, \ 

    +

                **{'network': self, 'node_id': args['nodeId']}) 

    +

     

    +

        def _handle_node_protocol_info(self, args): 

    +

            """ 

    +

            Basic node information has been received, such as whether 

    +

            the node is a listening device, a routing device and its baud rate 

    +

            and basic, generic and specific types. 

    +

            It is after this notification that you can call Manager::GetNodeType 

    +

            to obtain a label containing the device description. 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeProtocolInfo : %s', args) 

    +

            dispatcher.send(self.SIGNAL_NODE_PROTOCOL_INFO, \ 

    +

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            self._handle_node(self.nodes[args['nodeId']]) 

    +

     

    +

        def _handle_node_removed(self, args): 

    +

            """ 

    +

            A node has been removed from OpenZWave's set. 

    +

            This may be due to a device being removed from the Z-Wave network, 

    +

            or because the application is closing. 

    +

     

    +

            dispatcher.send(self.SIGNAL_NODE_REMOVED, **{'network': self, 'node_id': args['nodeId']}) 

    +

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

     

    -

        def _handle_essential_node_queries_complete(self, args): 

    -

            """ 

    -

            The queries on a node that are essential to its operation have 

    -

            been completed. The node can now handle incoming messages. 

    -

     

    -

            dispatcher.send(self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification EssentialNodeQueriesComplete : %s', args) 

    -

            dispatcher.send(self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE, \ 

    -

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_node_queries_complete(self, args): 

    -

            """ 

    -

            All the initialisation queries on a node have been completed. 

    -

     

    -

            dispatcher.send(self.SIGNAL_NODE_QUERIES_COMPLETE, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    -

     

    -

            When receiving this value, we consider that the node is ready. 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification NodeQueriesComplete : %s', args) 

    -

            #the query stage are now completed, set the flag is ready to operate 

    -

            self.nodes[args['nodeId']].isReady = True 

    -

            dispatcher.send(self.SIGNAL_NODE_QUERIES_COMPLETE, \ 

    -

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    -

            self._handle_node(self.nodes[args['nodeId']]) 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeRemoved : %s', args) 

    +

            try: 

    +

                self._semaphore_nodes.acquire() 

    +

                if args['nodeId'] in self.nodes: 

    +

                    node = self.nodes[args['nodeId']] 

    +

                    del self.nodes[args['nodeId']] 

    +

                    dispatcher.send(self.SIGNAL_NODE_REMOVED, \ 

    +

                        **{'network': self, 'node': node}) 

    +

                    self._handle_node(node) 

    +

            finally: 

    +

                self._semaphore_nodes.release() 

    +

     

    +

        def _handle_essential_node_queries_complete(self, args): 

    +

            """ 

    +

            The queries on a node that are essential to its operation have 

    +

            been completed. The node can now handle incoming messages. 

    +

     

    +

            dispatcher.send(self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification EssentialNodeQueriesComplete : %s', args) 

    +

            dispatcher.send(self.SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE, \ 

    +

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_node_queries_complete(self, args): 

    +

            """ 

    +

            All the initialisation queries on a node have been completed. 

     

    -

        def _handle_all_nodes_queried(self, args): 

    -

            """ 

    -

            All nodes have been queried, so client application can expected 

    -

            complete data. 

    +

            dispatcher.send(self.SIGNAL_NODE_QUERIES_COMPLETE, **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_NODE, **{'network': self, 'node':self.nodes[args['nodeId']]}) 

    +

     

    +

            When receiving this value, we consider that the node is ready. 

     

            :param args: data sent by the notification 

            :type args: dict() 

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification AllNodesQueried : %s', args) 

    -

            self._state = self.STATE_READY 

    -

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, \ 

    -

                **{'network': self, 'controller': self._controller}) 

    -

        def _handle_all_nodes_queried_some_dead(self, args): 

    -

            """ 

    -

            All nodes have been queried, but some node ar mark dead, so client application can expected 

    -

            complete data. 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification AllNodesQueriedSomeDead : %s', args) 

    -

            self._state = self.STATE_READY 

    -

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED_SOME_DEAD, \ 

    -

                **{'network': self, 'controller': self._controller}) 

    -

     

    -

        def _handle_awake_nodes_queried(self, args): 

    -

            """ 

    -

            All awake nodes have been queried, so client application can 

    -

            expected complete data for these nodes. 

    -

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    -

            dispatcher.send(self.SIGNAL_AWAKE_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    -

     

    -

            dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification AwakeNodesQueried : %s', args) 

    -

            self._object_id = args['homeId'] 

    -

            try: 

    -

                if self._state < self.STATE_AWAKED: 

    -

                    self._state = self.STATE_AWAKED 

    -

                dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    -

                dispatcher.send(self.SIGNAL_AWAKE_NODES_QUERIED, \ 

    -

                    **{'network': self, 'controller': self._controller}) 

    -

            except: 

    -

                import sys, traceback 

    -

                logger.error('Z-Wave Notification AwakeNodesQueried : %s', traceback.format_exception(*sys.exc_info())) 

    -

            finally: 

    -

                pass 

    -

     

    -

        def _handle_polling_disabled(self, args): 

    -

            """ 

    -

            Polling of a node has been successfully turned off by a call 

    -

            to Manager::DisablePoll. 

    -

     

    -

            dispatcher.send(self.SIGNAL_POLLING_DISABLED, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification PollingDisabled : %s', args) 

    -

            dispatcher.send(self.SIGNAL_POLLING_DISABLED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_polling_enabled(self, args): 

    -

            """ 

    -

            Polling of a node has been successfully turned on by a call 

    -

            to Manager::EnablePoll. 

    -

     

    -

            dispatcher.send(self.SIGNAL_POLLING_ENABLED, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification PollingEnabled : %s', args) 

    -

            dispatcher.send(self.SIGNAL_POLLING_ENABLED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_create_button(self, args): 

    -

            """ 

    -

            Handheld controller button event created. 

    -

     

    -

            dispatcher.send(self.SIGNAL_CREATE_BUTTON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

            """ 

    +

            logger.debug('Z-Wave Notification NodeQueriesComplete : %s', args) 

    +

            #the query stage are now completed, set the flag is ready to operate 

    +

            self.nodes[args['nodeId']].isReady = True 

    +

            dispatcher.send(self.SIGNAL_NODE_QUERIES_COMPLETE, \ 

    +

                **{'network': self, 'node': self.nodes[args['nodeId']]}) 

    +

            self._handle_node(self.nodes[args['nodeId']]) 

    +

     

    +

        def _handle_all_nodes_queried(self, args): 

    +

            """ 

    +

            All nodes have been queried, so client application can expected 

    +

            complete data. 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification AllNodesQueried : %s', args) 

    +

            self._state = self.STATE_READY 

    +

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, \ 

    +

                **{'network': self, 'controller': self._controller}) 

    +

        def _handle_all_nodes_queried_some_dead(self, args): 

    +

            """ 

    +

            All nodes have been queried, but some node ar mark dead, so client application can expected 

    +

            complete data. 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification AllNodesQueriedSomeDead : %s', args) 

    +

            self._state = self.STATE_READY 

    +

            dispatcher.send(self.SIGNAL_NETWORK_READY, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_ALL_NODES_QUERIED_SOME_DEAD, \ 

    +

                **{'network': self, 'controller': self._controller}) 

    +

     

    +

        def _handle_awake_nodes_queried(self, args): 

    +

            """ 

    +

            All awake nodes have been queried, so client application can 

    +

            expected complete data for these nodes. 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    +

            dispatcher.send(self.SIGNAL_AWAKE_NODES_QUERIED, **{'network': self, 'controller': self._controller}) 

    +

     

    +

            dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification AwakeNodesQueried : %s', args) 

    +

            self._object_id = args['homeId'] 

    +

            try: 

    +

                if self._state < self.STATE_AWAKED: 

    +

                    self._state = self.STATE_AWAKED 

    +

                dispatcher.send(self.SIGNAL_NETWORK_AWAKED, **{'network': self}) 

    +

                dispatcher.send(self.SIGNAL_AWAKE_NODES_QUERIED, \ 

    +

                    **{'network': self, 'controller': self._controller}) 

    +

            except: 

    +

                import sys, traceback 

    +

                logger.error('Z-Wave Notification AwakeNodesQueried : %s', traceback.format_exception(*sys.exc_info())) 

    +

            finally: 

    +

                pass 

    +

     

    +

        def _handle_polling_disabled(self, args): 

    +

            """ 

    +

            Polling of a node has been successfully turned off by a call 

    +

            to Manager::DisablePoll. 

    +

     

    +

            dispatcher.send(self.SIGNAL_POLLING_DISABLED, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification PollingDisabled : %s', args) 

    +

            dispatcher.send(self.SIGNAL_POLLING_DISABLED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_polling_enabled(self, args): 

    +

            """ 

    +

            Polling of a node has been successfully turned on by a call 

    +

            to Manager::EnablePoll. 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification CreateButton : %s', args) 

    -

            dispatcher.send(self.SIGNAL_CREATE_BUTTON, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_delete_button(self, args): 

    -

            """ 

    -

            Handheld controller button event deleted. 

    -

     

    -

            dispatcher.send(self.SIGNAL_DELETE_BUTTON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_POLLING_ENABLED, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification PollingEnabled : %s', args) 

    +

            dispatcher.send(self.SIGNAL_POLLING_ENABLED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_create_button(self, args): 

    +

            """ 

    +

            Handheld controller button event created. 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification DeleteButton : %s', args) 

    -

            dispatcher.send(self.SIGNAL_DELETE_BUTTON, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_button_on(self, args): 

    -

            """ 

    -

            Handheld controller button on pressed event. 

    -

     

    -

            dispatcher.send(self.SIGNAL_BUTTON_ON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_CREATE_BUTTON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification CreateButton : %s', args) 

    +

            dispatcher.send(self.SIGNAL_CREATE_BUTTON, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_delete_button(self, args): 

    +

            """ 

    +

            Handheld controller button event deleted. 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ButtonOn : %s', args) 

    -

            dispatcher.send(self.SIGNAL_BUTTON_ON, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_button_off(self, args): 

    -

            """ 

    -

            Handheld controller button off pressed event. 

    -

     

    -

            dispatcher.send(self.SIGNAL_BUTTON_OFF, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

            dispatcher.send(self.SIGNAL_DELETE_BUTTON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification DeleteButton : %s', args) 

    +

            dispatcher.send(self.SIGNAL_DELETE_BUTTON, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_button_on(self, args): 

    +

            """ 

    +

            Handheld controller button on pressed event. 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ButtonOff : %s', args) 

    -

            dispatcher.send(self.SIGNAL_BUTTON_OFF, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    -

     

    -

        def _handle_value(self, node=None, value=None): 

    -

            """ 

    -

            Sent when a value is changed, addes, removed, ... 

    -

            If you don't interrest in values event details you can listen to this 

    -

            signal only. 

    +

            dispatcher.send(self.SIGNAL_BUTTON_ON, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification ButtonOn : %s', args) 

    +

            dispatcher.send(self.SIGNAL_BUTTON_ON, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_button_off(self, args): 

    +

            """ 

    +

            Handheld controller button off pressed event. 

     

    -

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    +

            dispatcher.send(self.SIGNAL_BUTTON_OFF, **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

     

    -

            :param nodeid: the id of the node who hold the value 

    -

            :type nodeid: int 

    -

            :param valueid: the id of the value 

    -

            :type valueid: int 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification Value : node=%s value=%s' % (node, value)) 

    -

            dispatcher.send(self.SIGNAL_VALUE, \ 

    -

                **{'network': self, 'node' : node, \ 

    -

                    'value' : value}) 

    -

     

    -

        def _handle_value_added(self, args): 

    -

            """ 

    -

            A new node value has been added to OpenZWave's set. 

    -

            These notifications occur after a node has been discovered, 

    -

            and details of its command classes have been received. 

    -

            Each command class may generate one or more values depending 

    -

            on the complexity of the item being represented. 

    -

     

    -

            dispatcher.send(self.SIGNAL_VALUE_ADDED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification ButtonOff : %s', args) 

    +

            dispatcher.send(self.SIGNAL_BUTTON_OFF, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']]}) 

    +

     

    +

        def _handle_value(self, node=None, value=None): 

    +

            """ 

    +

            Sent when a value is changed, addes, removed, ... 

    +

            If you don't interrest in values event details you can listen to this 

    +

            signal only. 

    +

     

    +

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    +

     

    +

            :param nodeid: the id of the node who hold the value 

    +

            :type nodeid: int 

    +

            :param valueid: the id of the value 

    +

            :type valueid: int 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification Value : node=%s value=%s' % (node, value)) 

    +

            dispatcher.send(self.SIGNAL_VALUE, \ 

    +

                **{'network': self, 'node' : node, \ 

    +

                    'value' : value}) 

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ValueAdded : %s', args) 

    -

            self.nodes[args['nodeId']].add_value(args['valueId']['id']) 

    -

            dispatcher.send(self.SIGNAL_VALUE_ADDED, \ 

    -

                **{'network': self, \ 

    -

                   'node' : self.nodes[args['nodeId']], \ 

    -

                   'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    -

     

    -

        def _handle_value_changed(self, args): 

    -

            """ 

    -

            A node value has been updated from the Z-Wave network and it is 

    -

            different from the previous value. 

    -

     

    -

            dispatcher.send(self.SIGNAL_VALUE_CHANGED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ValueChanged : %s', args) 

    -

            if args['nodeId'] not in self.nodes: 

    -

                logger.warning('Z-Wave Notification ValueChanged (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    -

                return False 

    -

            self.nodes[args['nodeId']].change_value(args['valueId']['id']) 

    -

            dispatcher.send(self.SIGNAL_VALUE_CHANGED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    -

     

    -

        def _handle_value_refreshed(self, args): 

    -

            """ 

    -

            A node value has been updated from the Z-Wave network. 

    -

     

    -

            dispatcher.send(self.SIGNAL_VALUE_REFRESHED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ValueRefreshed : %s', args) 

    -

            if args['nodeId'] not in self.nodes: 

    -

                logger.warning('Z-Wave Notification ValueRefreshed (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    -

                return False 

    -

            self.nodes[args['nodeId']].refresh_value(args['valueId']['id']) 

    -

            dispatcher.send(self.SIGNAL_VALUE_REFRESHED, \ 

    -

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    -

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    -

     

    -

        def _handle_value_removed(self, args): 

    -

            """ 

    -

            A node value has been removed from OpenZWave's set. 

    -

            This only occurs when a node is removed. 

    +

        def _handle_value_added(self, args): 

    +

            """ 

    +

            A new node value has been added to OpenZWave's set. 

    +

            These notifications occur after a node has been discovered, 

    +

            and details of its command classes have been received. 

    +

            Each command class may generate one or more values depending 

    +

            on the complexity of the item being represented. 

    +

     

    +

            dispatcher.send(self.SIGNAL_VALUE_ADDED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification ValueAdded : %s', args) 

    +

            self.nodes[args['nodeId']].add_value(args['valueId']['id']) 

    +

            dispatcher.send(self.SIGNAL_VALUE_ADDED, \ 

    +

                **{'network': self, \ 

    +

                   'node' : self.nodes[args['nodeId']], \ 

    +

                   'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    +

     

    +

        def _handle_value_changed(self, args): 

    +

            """ 

    +

            A node value has been updated from the Z-Wave network and it is 

    +

            different from the previous value. 

    +

     

    +

            dispatcher.send(self.SIGNAL_VALUE_CHANGED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification ValueChanged : %s', args) 

    +

            if args['nodeId'] not in self.nodes: 

    +

                logger.warning('Z-Wave Notification ValueChanged (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    +

                return False 

    +

            self.nodes[args['nodeId']].change_value(args['valueId']['id']) 

    +

            dispatcher.send(self.SIGNAL_VALUE_CHANGED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    +

     

    +

        def _handle_value_refreshed(self, args): 

    +

            """ 

    +

            A node value has been updated from the Z-Wave network. 

    +

     

    +

            dispatcher.send(self.SIGNAL_VALUE_REFRESHED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

     

    -

            dispatcher.send(self.SIGNAL_VALUE_REMOVED, \ 

    -

                    **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                        'value' : val}) 

    -

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification ValueRemoved : %s', args) 

    -

            if args['nodeId'] not in self.nodes: 

    -

                logger.warning('Z-Wave Notification ValueRemoved (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    -

                return False 

    -

            val = self.nodes[args['nodeId']].values[args['valueId']['id']] 

    -

            if self.nodes[args['nodeId']].remove_value(args['valueId']['id']): 

    -

                dispatcher.send(self.SIGNAL_VALUE_REMOVED, \ 

    -

                    **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    -

                        'value' : val}) 

    -

                #self._handle_value(node=self.nodes[args['nodeId']], value=val) 

    -

            del self.nodes[args['nodeId']].values[args['valueId']['id']] 

    +

            """ 

    +

            logger.debug('Z-Wave Notification ValueRefreshed : %s', args) 

    +

            if args['nodeId'] not in self.nodes: 

    +

                logger.warning('Z-Wave Notification ValueRefreshed (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    +

                return False 

    +

            self.nodes[args['nodeId']].refresh_value(args['valueId']['id']) 

    +

            dispatcher.send(self.SIGNAL_VALUE_REFRESHED, \ 

    +

                **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                    'value' : self.nodes[args['nodeId']].values[args['valueId']['id']]}) 

    +

            self._handle_value(node=self.nodes[args['nodeId']], value=self.nodes[args['nodeId']].values[args['valueId']['id']]) 

    +

     

    +

        def _handle_value_removed(self, args): 

    +

            """ 

    +

            A node value has been removed from OpenZWave's set. 

    +

            This only occurs when a node is removed. 

    +

     

    +

            dispatcher.send(self.SIGNAL_VALUE_REMOVED, \ 

    +

                    **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                        'value' : val}) 

    +

            dispatcher.send(self.SIGNAL_VALUE, **{'network': self, 'node' : node, 'value' : value}) 

     

    -

        def _handle_notification(self, args): 

    -

            """ 

    -

            Called when an error happened, or node changed (awake, sleep, death, no operation, timeout). 

    -

     

    -

            dispatcher.send(self.SIGNAL_NOTIFICATION, **{'network': self}) 

    -

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification : %s', args) 

    -

            dispatcher.send(self.SIGNAL_NOTIFICATION, \ 

    -

                **{'network': self, 'args': args}) 

    -

     

    -

        def _handle_msg_complete(self, args): 

    -

            """ 

    -

            The last message that was sent is now complete. 

    -

     

    -

            dispatcher.send(self.SIGNAL_MSG_COMPLETE, **{'network': self}) 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification ValueRemoved : %s', args) 

    +

            if args['nodeId'] not in self.nodes: 

    +

                logger.warning('Z-Wave Notification ValueRemoved (%s) for an unknown node %s', args['valueId'], args['nodeId']) 

    +

                return False 

    +

            val = self.nodes[args['nodeId']].values[args['valueId']['id']] 

    +

            if self.nodes[args['nodeId']].remove_value(args['valueId']['id']): 

    +

                dispatcher.send(self.SIGNAL_VALUE_REMOVED, \ 

    +

                    **{'network': self, 'node' : self.nodes[args['nodeId']], \ 

    +

                        'value' : val}) 

    +

                #self._handle_value(node=self.nodes[args['nodeId']], value=val) 

    +

            del self.nodes[args['nodeId']].values[args['valueId']['id']] 

    +

     

    +

        def _handle_notification(self, args): 

    +

            """ 

    +

            Called when an error happened, or node changed (awake, sleep, death, no operation, timeout). 

     

    -

            :param args: data sent by the notification 

    -

            :type args: dict() 

    -

     

    -

            """ 

    -

            logger.debug('Z-Wave Notification MsgComplete : %s', args) 

    -

            dispatcher.send(self.SIGNAL_MSG_COMPLETE, \ 

    -

                **{'network': self}) 

    -

     

    -

        def write_config(self): 

    -

            """ 

    -

            The last message that was sent is now complete. 

    -

     

    -

            """ 

    -

            self._manager.writeConfig(self.home_id) 

    -

            logger.info('ZWave configuration wrote to user directory.') 

    +

            dispatcher.send(self.SIGNAL_NOTIFICATION, **{'network': self}) 

    +

     

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

    +

     

    +

            """ 

    +

            logger.debug('Z-Wave Notification : %s', args) 

    +

            dispatcher.send(self.SIGNAL_NOTIFICATION, \ 

    +

                **{'network': self, 'args': args}) 

    +

     

    +

        def _handle_msg_complete(self, args): 

    +

            """ 

    +

            The last message that was sent is now complete. 

    +

     

    +

            dispatcher.send(self.SIGNAL_MSG_COMPLETE, **{'network': self}) 

     

    -

    """ 

    -

        initialization callback sequence: 

    +

            :param args: data sent by the notification 

    +

            :type args: dict() 

     

    -

        [driverReady] 

    -

     

    -

        [nodeAdded] <-------------------------+ This cycle is extremely quick, well under one second. 

    -

            [nodeProtocolInfo]                | 

    -

            [nodeNaming]                      | 

    -

            [valueAdded] <---------------+    | 

    -

                                         |    | 

    -

            {REPEATS FOR EACH VALUE} ----+    | 

    -

                                              | 

    -

            [group] <--------------------+    | 

    -

                                         |    | 

    -

            {REPEATS FOR EACH GROUP} ----+    | 

    -

                                              | 

    -

        {REPEATS FOR EACH NODE} --------------+ 

    -

     

    -

        [? (no notification)] <---------------+ (no notification announces the beginning of this cycle) 

    -

                                              | 

    -

            [valueChanged] <-------------+    | This cycle can take some time, especially if some nodes 

    -

                                         |    | are sleeping or slow to respond. 

    -

            {REPEATS FOR EACH VALUE} ----+    | 

    -

                                              | 

    -

            [group] <--------------------+    | 

    +

            """ 

    +

            logger.debug('Z-Wave Notification MsgComplete : %s', args) 

    +

            dispatcher.send(self.SIGNAL_MSG_COMPLETE, \ 

    +

                **{'network': self}) 

    +

     

    +

        def write_config(self): 

    +

            """ 

    +

            The last message that was sent is now complete. 

    +

     

    +

            """ 

    +

            self._manager.writeConfig(self.home_id) 

    +

            logger.info('ZWave configuration wrote to user directory.') 

    +

     

    +

    """ 

    +

        initialization callback sequence: 

    +

     

    +

        [driverReady] 

    +

     

    +

        [nodeAdded] <-------------------------+ This cycle is extremely quick, well under one second. 

    +

            [nodeProtocolInfo]                | 

    +

            [nodeNaming]                      | 

    +

            [valueAdded] <---------------+    | 

                                         |    | 

    -

            {REPEATS FOR EACH GROUP} ----+    | 

    +

            {REPEATS FOR EACH VALUE} ----+    | 

                                              | 

    -

        [nodeQueriesComplete]                 | 

    -

                                              | 

    -

        {REPEATS FOR EACH NODE} --------------+ 

    -

     

    -

        [awakeNodesQueried] or [allNodesQueried] (with node_id 255) 

    +

            [group] <--------------------+    | 

    +

                                         |    | 

    +

            {REPEATS FOR EACH GROUP} ----+    | 

    +

                                              | 

    +

        {REPEATS FOR EACH NODE} --------------+ 

     

    -

        [driverRemoved] 

    -

    """ 

    -

     

    -

    class ZWaveNetworkSingleton(ZWaveNetwork): 

    -

        """ 

    -

        Represents a singleton Zwave network. 

    -

     

    -

        """ 

    -

        __metaclass__ = Singleton 

    -

     

    +

        [? (no notification)] <---------------+ (no notification announces the beginning of this cycle) 

    +

                                              | 

    +

            [valueChanged] <-------------+    | This cycle can take some time, especially if some nodes 

    +

                                         |    | are sleeping or slow to respond. 

    +

            {REPEATS FOR EACH VALUE} ----+    | 

    +

                                              | 

    +

            [group] <--------------------+    | 

    +

                                         |    | 

    +

            {REPEATS FOR EACH GROUP} ----+    | 

    +

                                              | 

    +

        [nodeQueriesComplete]                 | 

    +

                                              | 

    +

        {REPEATS FOR EACH NODE} --------------+ 

    +

     

    +

        [awakeNodesQueried] or [allNodesQueried] (with node_id 255) 

    +

     

    +

        [driverRemoved] 

    +

    """ 

    +

     

    +

    class ZWaveNetworkSingleton(ZWaveNetwork): 

    +

        """ 

    +

        Represents a singleton Zwave network. 

    +

     

    +

        """ 

    +

        __metaclass__ = Singleton 

    +

     

    @@ -938,830 +985,877 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    from openzwave.object import ZWaveObject 

    -

    from openzwave.group import ZWaveGroup 

    -

    from openzwave.value import ZWaveValue 

    -

    from openzwave.command import ZWaveNodeBasic, ZWaveNodeSwitch 

    -

    from openzwave.command import ZWaveNodeSensor, ZWaveNodeSecurity 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveNode(ZWaveObject, 

    -

                    ZWaveNodeBasic, ZWaveNodeSwitch, 

    -

                    ZWaveNodeSensor, ZWaveNodeSecurity): 

    -

        """ 

    -

        Represents a single Node within the Z-Wave Network. 

    -

     

    -

        """ 

    -

     

    -

        _isReady = False 

    -

     

    -

        def __init__(self, node_id, network): 

    -

            """ 

    -

            Initialize zwave node 

    -

     

    -

            :param node_id: ID of the node 

    -

            :type node_id: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from openzwave.object import ZWaveObject 

    +

    from openzwave.group import ZWaveGroup 

    +

    from openzwave.value import ZWaveValue 

    +

    from openzwave.command import ZWaveNodeBasic, ZWaveNodeSwitch 

    +

    from openzwave.command import ZWaveNodeSensor, ZWaveNodeSecurity 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveNode(ZWaveObject, 

    +

                    ZWaveNodeBasic, ZWaveNodeSwitch, 

    +

                    ZWaveNodeSensor, ZWaveNodeSecurity): 

    +

        """ 

    +

        Represents a single Node within the Z-Wave Network. 

    +

     

    +

        """ 

    +

     

    +

        _isReady = False 

    +

     

    +

        def __init__(self, node_id, network): 

    +

            """ 

    +

            Initialize zwave node 

     

    -

            """ 

    -

            logger.debug("Create object node (node_id:%s)" % (node_id)) 

    -

            ZWaveObject.__init__(self, node_id, network) 

    -

            #No cache management for values in nodes 

    -

            self.values = dict() 

    -

            self._is_locked = False 

    -

            self._isReady = False 

    -

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the node. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'home_id: [%s] id: [%s] name: [%s] model: [%s]' % \ 

    -

              (self._network.home_id_str, self._object_id, self.name, self.product_name) 

    -

     

    -

        @property 

    -

        def node_id(self): 

    -

            """ 

    -

            The id of the node. 

    +

            :param node_id: ID of the node 

    +

            :type node_id: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

    +

     

    +

            """ 

    +

            logger.debug("Create object node (node_id:%s)" % (node_id)) 

    +

            ZWaveObject.__init__(self, node_id, network) 

    +

            #No cache management for values in nodes 

    +

            self.values = dict() 

    +

            self._is_locked = False 

    +

            self._isReady = False 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the node. 

    +

     

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'home_id: [%s] id: [%s] name: [%s] model: [%s]' % \ 

    +

              (self._network.home_id_str, self._object_id, self.name, self.product_name) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._object_id 

    +

        @property 

    +

        def node_id(self): 

    +

            """ 

    +

            The id of the node. 

     

    -

        @property 

    -

        def name(self): 

    -

            """ 

    -

            The name of the node. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._object_id 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeName(self.home_id, self.object_id) 

    +

        @property 

    +

        def name(self): 

    +

            """ 

    +

            The name of the node. 

     

    -

        @name.setter 

    -

        def name(self, value): 

    -

            """ 

    -

            Set the name of the node. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeName(self.home_id, self.object_id) 

     

    -

            :param value: The new name of the node 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setNodeName(self.home_id, self.object_id, value) 

    -

     

    -

        @property 

    -

        def location(self): 

    -

            """ 

    -

            The location of the node. 

    +

        @name.setter 

    +

        def name(self, value): 

    +

            """ 

    +

            Set the name of the node. 

    +

     

    +

            :param value: The new name of the node 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setNodeName(self.home_id, self.object_id, value) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeLocation(self.home_id, self.object_id) 

    +

        @property 

    +

        def location(self): 

    +

            """ 

    +

            The location of the node. 

     

    -

        @location.setter 

    -

        def location(self, value): 

    -

            """ 

    -

            Set the location of the node. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeLocation(self.home_id, self.object_id) 

     

    -

            :param value: The new location of the node 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setNodeLocation(self.home_id, self.object_id, value) 

    -

     

    -

        @property 

    -

        def product_name(self): 

    -

            """ 

    -

            The product name of the node. 

    +

        @location.setter 

    +

        def location(self, value): 

    +

            """ 

    +

            Set the location of the node. 

    +

     

    +

            :param value: The new location of the node 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setNodeLocation(self.home_id, self.object_id, value) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeProductName(self.home_id, self.object_id) 

    +

        @property 

    +

        def product_name(self): 

    +

            """ 

    +

            The product name of the node. 

     

    -

        @product_name.setter 

    -

        def product_name(self, value): 

    -

            """ 

    -

            Set the product name of the node. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeProductName(self.home_id, self.object_id) 

     

    -

            :param value: The new name of the product 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setNodeProductName(self.home_id, self.object_id, value) 

    -

     

    -

        @property 

    -

        def product_type(self): 

    -

            """ 

    -

            The product type of the node. 

    +

        @product_name.setter 

    +

        def product_name(self, value): 

    +

            """ 

    +

            Set the product name of the node. 

    +

     

    +

            :param value: The new name of the product 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setNodeProductName(self.home_id, self.object_id, value) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeProductType(self.home_id, self.object_id) 

    +

        @property 

    +

        def product_type(self): 

    +

            """ 

    +

            The product type of the node. 

     

    -

        @property 

    -

        def product_id(self): 

    -

            """ 

    -

            The product Id of the node. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeProductType(self.home_id, self.object_id) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeProductId(self.home_id, self.object_id) 

    +

        @property 

    +

        def product_id(self): 

    +

            """ 

    +

            The product Id of the node. 

     

    -

        def to_dict(self, kvals=True): 

    -

            """ 

    -

            Return a dict representation of the node. 

    -

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            ret['name'] = self.name 

    -

            ret['location'] = self.location 

    -

            ret['product_type'] = self.product_type 

    -

            ret['product_name'] = self.product_name 

    -

            ret['node_id'] = self.node_id 

    -

            ret['neighbors'] = dict.fromkeys(self.neighbors, 0) 

    -

            ret['capabilities'] = dict.fromkeys(self.capabilities, 0) 

    -

            if kvals == True and self.network.dbcon is not None: 

    -

                vals = self.kvals 

    -

                for key in vals.keys(): 

    -

                    ret[key]=vals[key] 

    -

            return ret 

    -

     

    -

        @property 

    -

        def capabilities(self): 

    -

            """ 

    -

            The capabilities of the node. 

    -

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            caps = set() 

    -

            if self.is_routing_device: 

    -

                caps.add('routing') 

    -

            if self.is_listening_device: 

    -

                caps.add('listening') 

    -

            if self.is_frequent_listening_device: 

    -

                caps.add('frequent') 

    -

            if self.is_security_device: 

    -

                caps.add('security') 

    -

            if self.is_beaming_device: 

    -

                caps.add('beaming') 

    -

            if self.node_id == self._network.controller.node_id: 

    -

                for cap in self._network.controller.capabilities: 

    -

                    caps.add(cap) 

    -

            return caps 

    -

     

    -

        @property 

    -

        def neighbors(self): 

    -

            """ 

    -

            The neighbors of the node. 

    -

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeNeighbors(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def num_groups(self): 

    -

            """ 

    -

            Gets the number of association groups reported by this node. 

    -

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNumGroups(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def groups(self): 

    -

            """ 

    -

            Get the association groups reported by this node 

    -

     

    -

            In Z-Wave, groups are numbered starting from one.  For example, if a call to 

    -

            GetNumGroups returns 4, the _groupIdx value to use in calls to GetAssociations 

    -

            AddAssociation and RemoveAssociation will be a number between 1 and 4. 

    -

     

    -

            :rtype: dict() 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeProductId(self.home_id, self.object_id) 

    +

     

    +

        def to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the node. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            if 'all' in extras: 

    +

                    extras = ['kvals', 'capabilities', 'neighbors', 'groups', 'values'] 

    +

            ret={} 

    +

            ret['name'] = self.name 

    +

            ret['location'] = self.location 

    +

            ret['product_type'] = self.product_type 

    +

            ret['product_name'] = self.product_name 

    +

            ret['node_id'] = self.node_id 

    +

            if 'values' in extras : 

    +

                    ret['values'] = self.values_to_dict(extras=extras) 

    +

            if 'groups' in extras : 

    +

                    ret['groups'] = self.groups_to_dict(extras=extras) 

    +

            if 'neighbors' in extras : 

    +

                    ret['neighbors'] = dict.fromkeys(self.neighbors, 0) 

    +

            if 'capabilities' in extras : 

    +

                    ret['capabilities'] = dict.fromkeys(self.capabilities, 0) 

    +

            if 'kvals' in extras and self.network.dbcon is not None: 

    +

                vals = self.kvals 

    +

                for key in vals.keys(): 

    +

                    ret[key]=vals[key] 

    +

            return ret 

    +

     

    +

        @property 

    +

        def capabilities(self): 

    +

            """ 

    +

            The capabilities of the node. 

    +

     

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            caps = set() 

    +

            if self.is_routing_device: 

    +

                caps.add('routing') 

    +

            if self.is_listening_device: 

    +

                caps.add('listening') 

    +

            if self.is_frequent_listening_device: 

    +

                caps.add('frequent') 

    +

            if self.is_security_device: 

    +

                caps.add('security') 

    +

            if self.is_beaming_device: 

    +

                caps.add('beaming') 

    +

            if self.node_id == self._network.controller.node_id: 

    +

                for cap in self._network.controller.capabilities: 

    +

                    caps.add(cap) 

    +

            return caps 

    +

     

    +

        @property 

    +

        def neighbors(self): 

    +

            """ 

    +

            The neighbors of the node. 

    +

     

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeNeighbors(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def num_groups(self): 

    +

            """ 

    +

            Gets the number of association groups reported by this node. 

     

    -

            """ 

    -

            groups = dict() 

    -

            number_groups = self.num_groups 

    -

            for i in range(1, number_groups+1): 

    -

                groups[i] = ZWaveGroup(i, network=self._network, node_id=self.node_id) 

    -

            return groups 

    -

     

    -

        def heal(self, upNodeRoute=False): 

    -

            """ 

    -

            Heal network node by requesting the node rediscover their neighbors. 

    -

            Sends a ControllerCommand_RequestNodeNeighborUpdate to the node. 

    -

     

    -

            :param upNodeRoute: Optional Whether to perform return routes initialization. (default = false). 

    -

            :type upNodeRoute: bool 

    -

            :return: True is the ControllerCommand ins sent. False otherwise 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            if not self.isNodeAwake: 

    -

                logger.warning('Node state must a minimum set to awake') 

    -

                return False 

    -

            self.manager.healNetworkNode(self.home_id, self.object_id, upNodeRoute) 

    -

            return True 

    -

     

    -

        def test(self, count=1): 

    -

            """ 

    -

            Send a number of test messages to node and record results. 

    -

     

    -

            :param count: The number of test messages to send. 

    -

            :type count: int 

    -

     

    -

            """ 

    -

            self._network.manager.testNetworkNode(self.home_id, self.object_id, count) 

    -

     

    -

        @property 

    -

        def command_classes(self): 

    -

            """ 

    -

            The commandClasses of the node. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNumGroups(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def groups(self): 

    +

            """ 

    +

            Get the association groups reported by this node 

    +

     

    +

            In Z-Wave, groups are numbered starting from one.  For example, if a call to 

    +

            GetNumGroups returns 4, the _groupIdx value to use in calls to GetAssociations 

    +

            AddAssociation and RemoveAssociation will be a number between 1 and 4. 

    +

     

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            groups = dict() 

    +

            number_groups = self.num_groups 

    +

            for i in range(1, number_groups+1): 

    +

                groups[i] = ZWaveGroup(i, network=self._network, node_id=self.node_id) 

    +

            return groups 

    +

     

    +

        def groups_to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the groups. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            groups = self.groups 

    +

            ret={} 

    +

            for gid in groups.keys(): 

    +

                ret[gid] = groups[gid].to_dict(extras=extras) 

    +

            return ret 

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            command_classes = set() 

    -

            for cls in self._network.manager.COMMAND_CLASS_DESC: 

    -

                if self._network.manager.getNodeClassInformation(self.home_id, self.object_id, cls): 

    -

                    command_classes.add(cls) 

    -

            return command_classes 

    -

     

    -

        @property 

    -

        def command_classes_as_string(self): 

    -

            """ 

    -

            Return the command classes of the node as string. 

    -

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            commands = self.command_classes 

    -

            command_str = set() 

    -

            for cls in commands: 

    -

                command_str.add(self._network.manager.COMMAND_CLASS_DESC[cls]) 

    -

            return command_str 

    -

     

    -

        def get_command_class_as_string(self, class_id): 

    -

            """ 

    -

            Return the command class representation as string. 

    +

        def heal(self, upNodeRoute=False): 

    +

            """ 

    +

            Heal network node by requesting the node rediscover their neighbors. 

    +

            Sends a ControllerCommand_RequestNodeNeighborUpdate to the node. 

    +

     

    +

            :param upNodeRoute: Optional Whether to perform return routes initialization. (default = false). 

    +

            :type upNodeRoute: bool 

    +

            :return: True is the ControllerCommand ins sent. False otherwise 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            if not self.isNodeAwake: 

    +

                logger.warning('Node state must a minimum set to awake') 

    +

                return False 

    +

            self.manager.healNetworkNode(self.home_id, self.object_id, upNodeRoute) 

    +

            return True 

    +

     

    +

        def test(self, count=1): 

    +

            """ 

    +

            Send a number of test messages to node and record results. 

    +

     

    +

            :param count: The number of test messages to send. 

    +

            :type count: int 

    +

     

    +

            """ 

    +

            self._network.manager.testNetworkNode(self.home_id, self.object_id, count) 

     

    -

            :param class_id: the COMMAND_CLASS to get string representation 

    -

            :type class_id: hexadecimal code 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.COMMAND_CLASS_DESC[class_id] 

    +

        @property 

    +

        def command_classes(self): 

    +

            """ 

    +

            The commandClasses of the node. 

    +

     

    +

            :rtype: set() 

     

    -

        def get_command_class_genres(self): 

    -

            """ 

    -

            Return the list of genres of command classes 

    -

     

    -

            :rtype: set() 

    -

     

    -

            """ 

    -

            return ['User', 'Basic', 'Config', 'System'] 

    -

     

    -

        def get_values_by_command_classes(self, genre='All', \ 

    -

            type='All', readonly='All', writeonly='All'): 

    -

            """ 

    -

            Retrieve values in a dict() of dicts(). The dict is indexed on the COMMAND_CLASS. 

    -

            This allows to browse values grouped by the COMMAND_CLASS.You can optionnaly filter for a command class, 

    -

            a genre and/or a type. You can also filter readonly and writeonly params. 

    -

     

    -

            This method always filter the values. 

    -

            If you wan't to get all the node's values, use the property self.values instead. 

    -

     

    -

            :param genre: the genre of value 

    -

            :type genre: 'All' or PyGenres 

    -

            :param type: the type of value 

    -

            :type type: 'All' or PyValueTypes 

    -

            :param readonly: Is this value readonly 

    -

            :type readonly: 'All' or True or False 

    -

            :param writeonly: Is this value writeonly 

    -

            :type writeonly: 'All' or True or False 

    -

            :rtype: dict(command_class : dict(valueids)) 

    +

            """ 

    +

            command_classes = set() 

    +

            for cls in self._network.manager.COMMAND_CLASS_DESC: 

    +

                if self._network.manager.getNodeClassInformation(self.home_id, self.object_id, cls): 

    +

                    command_classes.add(cls) 

    +

            return command_classes 

    +

     

    +

        @property 

    +

        def command_classes_as_string(self): 

    +

            """ 

    +

            Return the command classes of the node as string. 

    +

     

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            commands = self.command_classes 

    +

            command_str = set() 

    +

            for cls in commands: 

    +

                command_str.add(self._network.manager.COMMAND_CLASS_DESC[cls]) 

    +

            return command_str 

    +

     

    +

        def get_command_class_as_string(self, class_id): 

    +

            """ 

    +

            Return the command class representation as string. 

    +

     

    +

            :param class_id: the COMMAND_CLASS to get string representation 

    +

            :type class_id: hexadecimal code 

    +

            :rtype: str 

     

            """ 

    -

            values = dict() 

    -

            for value in self.values: 

    -

                if (genre == 'All' or self.values[value].genre == genre) and \ 

    -

                  (type == 'All' or self.values[value].type == type) and \ 

    -

                  (readonly == 'All' or self.values[value].is_read_only == readonly) and \ 

    -

                  (writeonly == 'All' or self.values[value].is_write_only == writeonly): 

    -

                    if self.values[value].command_class not in values: 

    -

                        values[self.values[value].command_class] = dict() 

    -

                    values[self.values[value].command_class][value] = self.values[value] 

    -

            return values 

    +

            return self._network.manager.COMMAND_CLASS_DESC[class_id] 

    +

     

    +

        def get_command_class_genres(self): 

    +

            """ 

    +

            Return the list of genres of command classes 

    +

     

    +

            :rtype: set() 

    +

     

    +

            """ 

    +

            return ['User', 'Basic', 'Config', 'System'] 

     

    -

        def get_values_for_command_class(self, class_id): 

    -

            """ 

    -

            Retrieve the set of values for a command class. 

    -

            Deprecated 

    -

            For backward compatibility only. 

    -

            Use get_values instead 

    +

        def get_values_by_command_classes(self, genre='All', \ 

    +

            type='All', readonly='All', writeonly='All'): 

    +

            """ 

    +

            Retrieve values in a dict() of dicts(). The dict is indexed on the COMMAND_CLASS. 

    +

            This allows to browse values grouped by the COMMAND_CLASS.You can optionnaly filter for a command class, 

    +

            a genre and/or a type. You can also filter readonly and writeonly params. 

     

    -

            :param class_id: the COMMAND_CLASS to get values 

    -

            :type class_id: hexadecimal code or string 

    -

            :type writeonly: 'All' or True or False 

    -

            :rtype: set() of classId 

    -

     

    -

            """ 

    -

            #print class_id 

    -

            return self.get_values(class_id=class_id) 

    -

     

    -

        def get_values(self, class_id='All', genre='All', \ 

    -

            type='All', readonly='All', writeonly='All'): 

    -

            """ 

    -

            Retrieve the set of values. You can optionnaly filter for a command class, 

    -

            a genre and/or a type. You can also filter readonly and writeonly params. 

    -

     

    -

            This method always filter the values. 

    -

            If you wan't to get all the node's values, use self.values instead. 

    -

     

    -

            :param class_id: the COMMAND_CLASS to get values 

    -

            :type class_id: hexadecimal code or string 

    -

            :param genre: the genre of value 

    -

            :type genre: 'All' or PyGenres 

    -

            :param type: the type of value 

    -

            :type type: 'All' or PyValueTypes 

    -

            :param readonly: Is this value readonly 

    -

            :type readonly: 'All' or True or False 

    -

            :param writeonly: Is this value writeonly 

    -

            :type writeonly: 'All' or True or False 

    -

            :rtype: set() of Values 

    -

     

    -

            """ 

    -

            ret = dict() 

    -

            for value in self.values: 

    -

                if (class_id == 'All' or self.values[value].command_class == class_id) and \ 

    -

                  (genre == 'All' or self.values[value].genre == genre) and \ 

    -

                  (type == 'All' or self.values[value].type == type) and \ 

    -

                  (readonly == 'All' or self.values[value].is_read_only == readonly) and \ 

    -

                  (writeonly == 'All' or self.values[value].is_write_only == writeonly): 

    -

                    ret[value] = self.values[value] 

    -

            return ret 

    +

            This method always filter the values. 

    +

            If you wan't to get all the node's values, use the property self.values instead. 

    +

     

    +

            :param genre: the genre of value 

    +

            :type genre: 'All' or PyGenres 

    +

            :param type: the type of value 

    +

            :type type: 'All' or PyValueTypes 

    +

            :param readonly: Is this value readonly 

    +

            :type readonly: 'All' or True or False 

    +

            :param writeonly: Is this value writeonly 

    +

            :type writeonly: 'All' or True or False 

    +

            :rtype: dict(command_class : dict(valueids)) 

    +

     

    +

            """ 

    +

            values = dict() 

    +

            for value in self.values: 

    +

                if (genre == 'All' or self.values[value].genre == genre) and \ 

    +

                  (type == 'All' or self.values[value].type == type) and \ 

    +

                  (readonly == 'All' or self.values[value].is_read_only == readonly) and \ 

    +

                  (writeonly == 'All' or self.values[value].is_write_only == writeonly): 

    +

                    if self.values[value].command_class not in values: 

    +

                        values[self.values[value].command_class] = dict() 

    +

                    values[self.values[value].command_class][value] = self.values[value] 

    +

            return values 

    +

     

    +

        def get_values_for_command_class(self, class_id): 

    +

            """ 

    +

            Retrieve the set of values for a command class. 

    +

            Deprecated 

    +

            For backward compatibility only. 

    +

            Use get_values instead 

    +

     

    +

            :param class_id: the COMMAND_CLASS to get values 

    +

            :type class_id: hexadecimal code or string 

    +

            :type writeonly: 'All' or True or False 

    +

            :rtype: set() of classId 

    +

     

    +

            """ 

    +

            #print class_id 

    +

            return self.get_values(class_id=class_id) 

     

    -

        def add_value(self, value_id): 

    -

            """ 

    -

            Add a value to the node 

    -

     

    -

            :param value_id: The id of the value to add 

    -

            :type value_id: int 

    -

            :param command_class: The command_class of the value 

    -

            :type command_class: str 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            value = ZWaveValue(value_id, network=self.network, parent=self) 

    -

            self.values[value_id] = value 

    -

     

    -

        def change_value(self, value_id): 

    -

            """ 

    -

            Change a value of the node. 

    -

            Not implemented 

    -

     

    -

            :param value_id: The id of the value to change 

    -

            :type value_id: int 

    -

     

    -

            """ 

    -

            pass 

    -

     

    -

        def refresh_value(self, value_id): 

    -

            """ 

    -

            Refresh a value of the node. 

    -

            Not implemented 

    -

     

    -

            :param value_id: The id of the value to change 

    -

            :type value_id: int 

    -

     

    -

            """ 

    -

            return self._network.manager.refreshValue(value_id) 

    +

        def get_values(self, class_id='All', genre='All', \ 

    +

            type='All', readonly='All', writeonly='All'): 

    +

            """ 

    +

            Retrieve the set of values. You can optionnaly filter for a command class, 

    +

            a genre and/or a type. You can also filter readonly and writeonly params. 

    +

     

    +

            This method always filter the values. 

    +

            If you wan't to get all the node's values, use self.values instead. 

    +

     

    +

            :param class_id: the COMMAND_CLASS to get values 

    +

            :type class_id: hexadecimal code or string 

    +

            :param genre: the genre of value 

    +

            :type genre: 'All' or PyGenres 

    +

            :param type: the type of value 

    +

            :type type: 'All' or PyValueTypes 

    +

            :param readonly: Is this value readonly 

    +

            :type readonly: 'All' or True or False 

    +

            :param writeonly: Is this value writeonly 

    +

            :type writeonly: 'All' or True or False 

    +

            :rtype: set() of Values 

    +

     

    +

            """ 

    +

            ret = dict() 

    +

            for value in self.values: 

    +

                if (class_id == 'All' or self.values[value].command_class == class_id) and \ 

    +

                  (genre == 'All' or self.values[value].genre == genre) and \ 

    +

                  (type == 'All' or self.values[value].type == type) and \ 

    +

                  (readonly == 'All' or self.values[value].is_read_only == readonly) and \ 

    +

                  (writeonly == 'All' or self.values[value].is_write_only == writeonly): 

    +

                    ret[value] = self.values[value] 

    +

            return ret 

    +

     

    +

        def values_to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the values. 

     

    -

        def remove_value(self, value_id): 

    -

            """ 

    -

            Change a value of the node. Todo 

    -

     

    -

            :param value_id: The id of the value to change 

    -

            :type value_id: int 

    -

            :return: The result of the operation 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            if value_id in self.values: 

    -

                logger.debug("Remove value : %s" % self.values[value_id]) 

    -

                del self.values[value_id] 

    -

                return True 

    -

            return False 

    -

     

    -

        def set_field(self, field, value): 

    -

            """ 

    -

            A helper to set a writable field : name, location, product_name, ... 

    -

     

    -

            :param field: The field to set : name, location, product_name, manufacturer_name 

    -

            :type field: str 

    -

            :param value: The value to set 

    -

            :type value: str 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            if field == "name": 

    -

                self.name = value 

    -

            elif field == "location": 

    -

                self.location = value 

    -

            elif field == "product_name": 

    -

                self.product_name = value 

    -

            elif field == "manufacturer_name": 

    -

                self.manufacturer_name = value 

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret={} 

    +

            for vid in self.values.keys(): 

    +

                ret[vid] = self.values[vid].to_dict(extras=extras) 

    +

            return ret 

    +

     

    +

        def add_value(self, value_id): 

    +

            """ 

    +

            Add a value to the node 

    +

     

    +

            :param value_id: The id of the value to add 

    +

            :type value_id: int 

    +

            :param command_class: The command_class of the value 

    +

            :type command_class: str 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            value = ZWaveValue(value_id, network=self.network, parent=self) 

    +

            self.values[value_id] = value 

    +

     

    +

        def change_value(self, value_id): 

    +

            """ 

    +

            Change a value of the node. 

    +

            Not implemented 

    +

     

    +

            :param value_id: The id of the value to change 

    +

            :type value_id: int 

    +

     

    +

            """ 

    +

            pass 

     

    -

        def has_command_class(self, class_id): 

    +

        def refresh_value(self, value_id): 

            """ 

    -

            Check that this node use this commandClass. 

    -

     

    -

            :param classId: the COMMAND_CLASS to check 

    -

            :type classId: hexadecimal code 

    -

            :rtype: bool 

    +

            Refresh a value of the node. 

    +

            Not implemented 

    +

     

    +

            :param value_id: The id of the value to change 

    +

            :type value_id: int 

     

            """ 

    -

            return class_id in self.command_classes 

    +

            return self._network.manager.refreshValue(value_id) 

     

    -

        @property 

    -

        def manufacturer_id(self): 

    -

            """ 

    -

            The manufacturer id of the node. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeManufacturerId(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def manufacturer_name(self): 

    -

            """ 

    -

            The manufacturer name of the node. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeManufacturerName(self.home_id, self.object_id) 

    +

        def remove_value(self, value_id): 

    +

            """ 

    +

            Change a value of the node. Todo 

    +

     

    +

            :param value_id: The id of the value to change 

    +

            :type value_id: int 

    +

            :return: The result of the operation 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            if value_id in self.values: 

    +

                logger.debug("Remove value : %s" % self.values[value_id]) 

    +

                del self.values[value_id] 

    +

                return True 

    +

            return False 

    +

     

    +

        def set_field(self, field, value): 

    +

            """ 

    +

            A helper to set a writable field : name, location, product_name, ... 

     

    -

        @manufacturer_name.setter 

    -

        def manufacturer_name(self, value): 

    -

            """ 

    -

            Set the manufacturer name of the node. 

    -

     

    -

            :param value: The new manufacturer name of the node 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setNodeManufacturerName(self.home_id, self.object_id, value) 

    -

     

    -

        @property 

    -

        def generic(self): 

    -

            """ 

    -

            The generic type of the node. 

    +

            :param field: The field to set : name, location, product_name, manufacturer_name 

    +

            :type field: str 

    +

            :param value: The value to set 

    +

            :type value: str 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            if field == "name": 

    +

                self.name = value 

    +

            elif field == "location": 

    +

                self.location = value 

    +

            elif field == "product_name": 

    +

                self.product_name = value 

    +

            elif field == "manufacturer_name": 

    +

                self.manufacturer_name = value 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeGeneric(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def basic(self): 

    -

            """ 

    -

            The basic type of the node. 

    -

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeBasic(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def specific(self): 

    -

            """ 

    -

            The specific type of the node. 

    -

     

    -

            :return: The specific type of the node 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeSpecific(self.home_id, self.object_id) 

    +

        def has_command_class(self, class_id): 

    +

            """ 

    +

            Check that this node use this commandClass. 

    +

     

    +

            :param classId: the COMMAND_CLASS to check 

    +

            :type classId: hexadecimal code 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return class_id in self.command_classes 

    +

     

    +

        @property 

    +

        def manufacturer_id(self): 

    +

            """ 

    +

            The manufacturer id of the node. 

    +

     

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeManufacturerId(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def manufacturer_name(self): 

    +

            """ 

    +

            The manufacturer name of the node. 

     

    -

        @property 

    -

        def security(self): 

    -

            """ 

    -

            The security type of the node. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeManufacturerName(self.home_id, self.object_id) 

     

    -

            :return: The security type of the node 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeSecurity(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def version(self): 

    -

            """ 

    -

            The version of the node. 

    +

        @manufacturer_name.setter 

    +

        def manufacturer_name(self, value): 

    +

            """ 

    +

            Set the manufacturer name of the node. 

    +

     

    +

            :param value: The new manufacturer name of the node 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setNodeManufacturerName(self.home_id, self.object_id, value) 

     

    -

            :return: The version of the node 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeVersion(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def is_listening_device(self): 

    -

            """ 

    -

            Is this node a listening device. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isNodeListeningDevice(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def is_beaming_device(self): 

    -

            """ 

    -

            Is this node a beaming device. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isNodeBeamingDevice(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def is_frequent_listening_device(self): 

    -

            """ 

    -

            Is this node a frequent listening device. 

    +

        @property 

    +

        def generic(self): 

    +

            """ 

    +

            The generic type of the node. 

    +

     

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeGeneric(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def basic(self): 

    +

            """ 

    +

            The basic type of the node. 

    +

     

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeBasic(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def specific(self): 

    +

            """ 

    +

            The specific type of the node. 

    +

     

    +

            :return: The specific type of the node 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeSpecific(self.home_id, self.object_id) 

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isNodeFrequentListeningDevice(self.home_id, self.object_id) 

    +

        @property 

    +

        def security(self): 

    +

            """ 

    +

            The security type of the node. 

     

    -

        @property 

    -

        def is_security_device(self): 

    -

            """ 

    -

            Is this node a security device. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isNodeSecurityDevice(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def is_routing_device(self): 

    -

            """ 

    -

            Is this node a routing device. 

    -

     

    -

            :rtype: bool 

    +

            :return: The security type of the node 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeSecurity(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def version(self): 

    +

            """ 

    +

            The version of the node. 

    +

     

    +

            :return: The version of the node 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeVersion(self.home_id, self.object_id) 

     

    -

            """ 

    -

            return self._network.manager.isNodeRoutingDevice(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def is_locked(self): 

    -

            """ 

    -

            Is this node locked. 

    -

     

    -

            :rtype: bool 

    +

        @property 

    +

        def is_listening_device(self): 

    +

            """ 

    +

            Is this node a listening device. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeListeningDevice(self.home_id, self.object_id) 

     

    -

            """ 

    -

            return self._is_locked 

    -

     

    -

        @property 

    -

        def is_sleeping(self): 

    -

            """ 

    -

            Is this node sleeping. 

    -

     

    -

            :rtype: bool 

    +

        @property 

    +

        def is_beaming_device(self): 

    +

            """ 

    +

            Is this node a beaming device. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeBeamingDevice(self.home_id, self.object_id) 

     

    -

            """ 

    -

            return not self.isNodeAwake 

    -

     

    -

     

    -

    #    @property 

    -

    #    def level(self): 

    -

    #        """ 

    -

    #        The level of the node. 

    -

    #        Todo 

    -

    #        """ 

    -

    #        values = self._getValuesForCommandClass(0x26)  # COMMAND_CLASS_SWITCH_MULTILEVEL 

    -

    #        if values: 

    -

    #            for value in values: 

    -

    #                vdic = value.value_data 

    -

    #                if vdic and vdic.has_key('type') and vdic['type'] == 'Byte' and vdic.has_key('value'): 

    -

    #                    return int(vdic['value']) 

    -

    #        return 0 

    -

     

    -

    #    @property 

    -

    #    def is_on(self): 

    -

    #        """ 

    -

    #        Is this node On. 

    -

    #        Todo 

    -

    #        """ 

    -

    #        values = self._getValuesForCommandClass(0x25)  # COMMAND_CLASS_SWITCH_BINARY 

    -

    #        if values: 

    -

    #            for value in values: 

    -

    #                vdic = value.value_data 

    -

    #                if vdic and vdic.has_key('type') and vdic['type'] == 'Bool' and vdic.has_key('value'): 

    -

    #                    return vdic['value'] == 'True' 

    -

    #        return False 

    -

     

    -

    #    @property 

    -

    #    def signal_strength(self): 

    -

    #        """ 

    -

    #        The signal strenght of this node. 

    -

    #        Todo 

    -

    #        """ 

    -

    #        return 0 

    +

        @property 

    +

        def is_frequent_listening_device(self): 

    +

            """ 

    +

            Is this node a frequent listening device. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeFrequentListeningDevice(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def is_security_device(self): 

    +

            """ 

    +

            Is this node a security device. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeSecurityDevice(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def is_routing_device(self): 

    +

            """ 

    +

            Is this node a routing device. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeRoutingDevice(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def is_locked(self): 

    +

            """ 

    +

            Is this node locked. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._is_locked 

     

        @property 

    -

        def max_baud_rate(self): 

    +

        def is_sleeping(self): 

            """ 

    -

            Get the maximum baud rate of a node 

    +

            Is this node sleeping. 

     

    -

            """ 

    -

            return self._network.manager.getNodeMaxBaudRate(self.home_id, self.object_id) 

    -

     

    -

        def refresh_info(self): 

    -

            """ 

    -

            Trigger the fetching of fixed data about a node. 

    -

     

    -

            Causes the nodes data to be obtained from the Z-Wave network in the same way 

    -

            as if it had just been added.  This method would normally be called 

    -

            automatically by OpenZWave, but if you know that a node has been changed, 

    -

            calling this method will force a refresh of the data held by the library.  This 

    -

            can be especially useful for devices that were asleep when the application was 

    -

            first run. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.refreshNodeInfo(self.home_id, self.object_id)# 

    -

     

    -

        def request_all_config_params(self): 

    -

            """ 

    -

            Request the values of all known configurable parameters from a device. 

    -

     

    -

            """ 

    -

            logger.debug('Requesting config params for node [%s]' % (self.object_id,)) 

    -

            self._network.manager.requestAllConfigParams(self.home_id, self.object_id) 

    -

     

    -

        def request_config_param(self, param): 

    -

            """ 

    -

            Request the value of a configurable parameter from a device. 

    -

     

    -

            Some devices have various parameters that can be configured to control the 

    -

            device behaviour.  These are not reported by the device over the Z-Wave network 

    -

            but can usually be found in the devices user manual.  This method requests 

    -

            the value of a parameter from the device, and then returns immediately, 

    -

            without waiting for a response.  If the parameter index is valid for this 

    -

            device, and the device is awake, the value will eventually be reported via a 

    -

            ValueChanged notification callback.  The ValueID reported in the callback will 

    -

            have an index set the same as _param and a command class set to the same value 

    -

            as returned by a call to Configuration::StaticGetCommandClassId. 

    -

     

    -

            :param param: The param of the node. 

    -

            :type param: 

    -

     

    -

            """ 

    -

            logger.debug('Requesting config param %s for node [%s]' % (param, self.object_id)) 

    -

            self._network.manager.requestConfigParam(self.home_id, self.object_id, param) 

    -

     

    -

        def set_config_param(self, param, value, size=2): 

    -

            """ 

    -

            Set the value of a configurable parameter in a device. 

    -

     

    -

            Some devices have various parameters that can be configured to control the 

    -

            device behaviour.  These are not reported by the device over the Z-Wave network 

    -

            but can usually be found in the devices user manual.  This method returns 

    -

            immediately, without waiting for confirmation from the device that the change 

    -

            has been made. 

    -

     

    -

            :param param: The param of the node. 

    -

            :type param: 

    -

            :param value: The value of the param. 

    -

            :type value: 

    -

            :param size: Is an optional number of bytes to be sent for the parameter value. Defaults to 2. 

    -

            :type size: int 

    -

            :return: 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            logger.debug('Set config param %s for node [%s]' % (param, self.object_id,)) 

    -

            return self._network.manager.setConfigParam(self.home_id, self.object_id, param, value, size) 

    -

     

    -

    #    def setNodeOn(self, node): 

    -

    #        """ 

    -

    #        """ 

    -

    #        self._log.debug('Requesting setNodeOn for node {0}'.format(node.id)) 

    -

    #        self._manager.setNodeOn(node.home_id, node.id) 

    -

     

    -

    #    def setNodeOff(self, node): 

    -

    #        """ 

    -

    #        """ 

    -

    #        self._log.debug('Requesting setNodeOff for node {0}'.format(node.id)) 

    -

    #        self._manager.setNodeOff(node.home_id, node.id) 

    -

     

    -

    #    def setNodeLevel(self, node, level): 

    -

    #        """ 

    -

    #        """ 

    -

    #        self._log.debug('Requesting setNodeLevel for node {0} with new level {1}'.format(node.id, level)) 

    -

    #        self._manager.setNodeLevel(node.home_id, node.id, level) 

    -

     

    -

        def isNodeAwake(self): 

    -

            """ 

    -

            Is this node a awake. 

    -

     

    -

            :rtype: bool 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return not self.isNodeAwake 

    +

     

    +

     

    +

    #    @property 

    +

    #    def level(self): 

    +

    #        """ 

    +

    #        The level of the node. 

    +

    #        Todo 

    +

    #        """ 

    +

    #        values = self._getValuesForCommandClass(0x26)  # COMMAND_CLASS_SWITCH_MULTILEVEL 

    +

    #        if values: 

    +

    #            for value in values: 

    +

    #                vdic = value.value_data 

    +

    #                if vdic and vdic.has_key('type') and vdic['type'] == 'Byte' and vdic.has_key('value'): 

    +

    #                    return int(vdic['value']) 

    +

    #        return 0 

    +

     

    +

    #    @property 

    +

    #    def is_on(self): 

    +

    #        """ 

    +

    #        Is this node On. 

    +

    #        Todo 

    +

    #        """ 

    +

    #        values = self._getValuesForCommandClass(0x25)  # COMMAND_CLASS_SWITCH_BINARY 

    +

    #        if values: 

    +

    #            for value in values: 

    +

    #                vdic = value.value_data 

    +

    #                if vdic and vdic.has_key('type') and vdic['type'] == 'Bool' and vdic.has_key('value'): 

    +

    #                    return vdic['value'] == 'True' 

    +

    #        return False 

    +

     

    +

    #    @property 

    +

    #    def signal_strength(self): 

    +

    #        """ 

    +

    #        The signal strenght of this node. 

    +

    #        Todo 

    +

    #        """ 

    +

    #        return 0 

    +

     

    +

        @property 

    +

        def max_baud_rate(self): 

    +

            """ 

    +

            Get the maximum baud rate of a node 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeMaxBaudRate(self.home_id, self.object_id) 

    +

     

    +

        def refresh_info(self): 

    +

            """ 

    +

            Trigger the fetching of fixed data about a node. 

    +

     

    +

            Causes the nodes data to be obtained from the Z-Wave network in the same way 

    +

            as if it had just been added.  This method would normally be called 

    +

            automatically by OpenZWave, but if you know that a node has been changed, 

    +

            calling this method will force a refresh of the data held by the library.  This 

    +

            can be especially useful for devices that were asleep when the application was 

    +

            first run. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.refreshNodeInfo(self.home_id, self.object_id)# 

    +

     

    +

        def request_all_config_params(self): 

    +

            """ 

    +

            Request the values of all known configurable parameters from a device. 

    +

     

    +

            """ 

    +

            logger.debug('Requesting config params for node [%s]' % (self.object_id,)) 

    +

            self._network.manager.requestAllConfigParams(self.home_id, self.object_id) 

    +

     

    +

        def request_config_param(self, param): 

    +

            """ 

    +

            Request the value of a configurable parameter from a device. 

    +

     

    +

            Some devices have various parameters that can be configured to control the 

    +

            device behaviour.  These are not reported by the device over the Z-Wave network 

    +

            but can usually be found in the devices user manual.  This method requests 

    +

            the value of a parameter from the device, and then returns immediately, 

    +

            without waiting for a response.  If the parameter index is valid for this 

    +

            device, and the device is awake, the value will eventually be reported via a 

    +

            ValueChanged notification callback.  The ValueID reported in the callback will 

    +

            have an index set the same as _param and a command class set to the same value 

    +

            as returned by a call to Configuration::StaticGetCommandClassId. 

    +

     

    +

            :param param: The param of the node. 

    +

            :type param: 

    +

     

    +

            """ 

    +

            logger.debug('Requesting config param %s for node [%s]' % (param, self.object_id)) 

    +

            self._network.manager.requestConfigParam(self.home_id, self.object_id, param) 

     

    -

            """ 

    -

     

    -

            return self._network.manager.isNodeAwake(self.home_id, self.object_id) 

    +

        def set_config_param(self, param, value, size=2): 

    +

            """ 

    +

            Set the value of a configurable parameter in a device. 

     

    -

        @property 

    -

        def isNodeFailed(self): 

    -

            """ 

    -

            Is this node is presume failed. 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

     

    -

            return self._network.manager.isNodeFailed(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def getNodeQueryStage(self): 

    -

            """ 

    -

            Is this node a awake. 

    -

     

    -

            :rtype: string 

    -

     

    -

            """ 

    -

            return self._network.manager.getNodeQueryStage(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def isReady(self): 

    -

            """ 

    -

            Get whether the node is ready to operate (QueryStage Completed). 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._isReady 

    +

            Some devices have various parameters that can be configured to control the 

    +

            device behaviour.  These are not reported by the device over the Z-Wave network 

    +

            but can usually be found in the devices user manual.  This method returns 

    +

            immediately, without waiting for confirmation from the device that the change 

    +

            has been made. 

    +

     

    +

            :param param: The param of the node. 

    +

            :type param: 

    +

            :param value: The value of the param. 

    +

            :type value: 

    +

            :param size: Is an optional number of bytes to be sent for the parameter value. Defaults to 2. 

    +

            :type size: int 

    +

            :return: 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            logger.debug('Set config param %s for node [%s]' % (param, self.object_id,)) 

    +

            return self._network.manager.setConfigParam(self.home_id, self.object_id, param, value, size) 

    +

     

    +

    #    def setNodeOn(self, node): 

    +

    #        """ 

    +

    #        """ 

    +

    #        self._log.debug('Requesting setNodeOn for node {0}'.format(node.id)) 

    +

    #        self._manager.setNodeOn(node.home_id, node.id) 

    +

     

    +

    #    def setNodeOff(self, node): 

    +

    #        """ 

    +

    #        """ 

    +

    #        self._log.debug('Requesting setNodeOff for node {0}'.format(node.id)) 

    +

    #        self._manager.setNodeOff(node.home_id, node.id) 

     

    -

        @isReady.setter 

    -

        def isReady(self, value): 

    -

            """ 

    -

            Set whether the node is ready to operate. 

    -

            automatically set to True by notification SIGNAL_NODE_QUERIES_COMPLETE 

    +

    #    def setNodeLevel(self, node, level): 

    +

    #        """ 

    +

    #        """ 

    +

    #        self._log.debug('Requesting setNodeLevel for node {0} with new level {1}'.format(node.id, level)) 

    +

    #        self._manager.setNodeLevel(node.home_id, node.id, level) 

     

    -

            :param value: is node ready 

    -

            :type value: bool 

    -

     

    -

            """ 

    -

            self._isReady = value 

    +

        def isNodeAwake(self): 

    +

            """ 

    +

            Is this node a awake. 

    +

     

    +

            :rtype: bool 

     

    -

        @property 

    -

        def isNodeInfoReceived(self): 

    -

            """ 

    -

            Get whether the node information has been received. Returns True if the node information has been received yet 

    -

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isNodeInfoReceived(self.home_id, self.object_id) 

    -

     

    -

        @property 

    -

        def type(self): 

    -

            """ 

    -

            Get a human-readable label describing the node 

    -

            :rtype: str 

    -

            """ 

    -

            return self._network.manager.getNodeType(self.home_id, self.object_id) 

    +

            """ 

    +

     

    +

            return self._network.manager.isNodeAwake(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def isNodeFailed(self): 

    +

            """ 

    +

            Is this node is presume failed. 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

     

    +

            return self._network.manager.isNodeFailed(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def getNodeQueryStage(self): 

    +

            """ 

    +

            Is this node a awake. 

    +

     

    +

            :rtype: string 

    +

     

    +

            """ 

    +

            return self._network.manager.getNodeQueryStage(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def isReady(self): 

    +

            """ 

    +

            Get whether the node is ready to operate (QueryStage Completed). 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._isReady 

    +

     

    +

        @isReady.setter 

    +

        def isReady(self, value): 

    +

            """ 

    +

            Set whether the node is ready to operate. 

    +

            automatically set to True by notification SIGNAL_NODE_QUERIES_COMPLETE 

    +

     

    +

            :param value: is node ready 

    +

            :type value: bool 

    +

     

    +

            """ 

    +

            self._isReady = value 

    +

     

    +

        @property 

    +

        def isNodeInfoReceived(self): 

    +

            """ 

    +

            Get whether the node information has been received. Returns True if the node information has been received yet 

    +

     

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isNodeInfoReceived(self.home_id, self.object_id) 

    +

     

    +

        @property 

    +

        def type(self): 

    +

            """ 

    +

            Get a human-readable label describing the node 

    +

            :rtype: str 

    +

            """ 

    +

            return self._network.manager.getNodeType(self.home_id, self.object_id) 

    @@ -427,319 +432,324 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveException(Exception): 

    -

        """ 

    -

        Exception class for OpenZWave 

    -

        """ 

    -

        def __init__(self, value): 

    -

            Exception.__init__(self) 

    -

            self.msg = "Zwave Generic Exception" 

    -

            self.value = value 

    -

     

    -

        def __str__(self): 

    -

            return repr(self.msg+' : '+self.value) 

    -

     

    -

    class ZWaveCacheException(ZWaveException): 

    -

        """ 

    -

        Exception class for OpenZWave 

    -

        """ 

    -

        def __init__(self, value): 

    -

            ZWaveException.__init__(self) 

    -

            self.msg = "Zwave Cache Exception" 

    -

            self.value = value 

    -

     

    -

        def __str__(self): 

    -

            return repr(self.msg+' : '+self.value) 

    -

     

    -

    class ZWaveTypeException(ZWaveException): 

    -

        """ 

    -

        Exception class for OpenZWave 

    -

        """ 

    -

        def __init__(self, value): 

    -

            ZWaveException.__init__(self) 

    -

            self.msg = "Zwave Type Exception" 

    -

            self.value = value 

    -

     

    -

        def __str__(self): 

    -

            return repr(self.msg+' : '+self.value) 

    -

     

    -

    class ZWaveCommandClassException(ZWaveException): 

    -

        """ 

    -

        Exception class for OpenZWave 

    -

        """ 

    -

        def __init__(self, value): 

    -

            ZWaveException.__init__(self) 

    -

            self.msg = "Zwave Command Class Exception" 

    -

            self.value = value 

    -

     

    -

        def __str__(self): 

    -

            return repr(self.msg+' : '+self.value) 

    -

     

    -

    class ZWaveObject(object): 

    -

        """ 

    -

        Represents a Zwave object. Values, nodes, ... can be changer by 

    -

        other managers on the network. 

    -

        """ 

    -

     

    -

        def __init__(self, object_id, network=None, use_cache=True): 

    -

            """ 

    -

            Initialize a Zwave object 

    -

     

    -

            :param object_id: ID of the object 

    -

            :type object_id: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveException(Exception): 

    +

        """ 

    +

        Exception class for OpenZWave 

    +

        """ 

    +

        def __init__(self, value): 

    +

            Exception.__init__(self) 

    +

            self.msg = "Zwave Generic Exception" 

    +

            self.value = value 

    +

     

    +

        def __str__(self): 

    +

            return repr(self.msg+' : '+self.value) 

    +

     

    +

    class ZWaveCacheException(ZWaveException): 

    +

        """ 

    +

        Exception class for OpenZWave 

    +

        """ 

    +

        def __init__(self, value): 

    +

            ZWaveException.__init__(self) 

    +

            self.msg = "Zwave Cache Exception" 

    +

            self.value = value 

    +

     

    +

        def __str__(self): 

    +

            return repr(self.msg+' : '+self.value) 

    +

     

    +

    class ZWaveTypeException(ZWaveException): 

    +

        """ 

    +

        Exception class for OpenZWave 

    +

        """ 

    +

        def __init__(self, value): 

    +

            ZWaveException.__init__(self) 

    +

            self.msg = "Zwave Type Exception" 

    +

            self.value = value 

    +

     

    +

        def __str__(self): 

    +

            return repr(self.msg+' : '+self.value) 

    +

     

    +

    class ZWaveCommandClassException(ZWaveException): 

    +

        """ 

    +

        Exception class for OpenZWave 

    +

        """ 

    +

        def __init__(self, value): 

    +

            ZWaveException.__init__(self) 

    +

            self.msg = "Zwave Command Class Exception" 

    +

            self.value = value 

    +

     

    +

        def __str__(self): 

    +

            return repr(self.msg+' : '+self.value) 

    +

     

    +

    class ZWaveObject(object): 

    +

        """ 

    +

        Represents a Zwave object. Values, nodes, ... can be changer by 

    +

        other managers on the network. 

    +

        """ 

    +

     

    +

        def __init__(self, object_id, network=None, use_cache=True): 

    +

            """ 

    +

            Initialize a Zwave object 

     

    -

            """ 

    -

            self._network = network 

    -

            self._last_update = None 

    -

            self._outdated = True 

    -

            self._use_cache = use_cache 

    -

            self._object_id = object_id 

    -

            if self._use_cache: 

    -

                self._cached_properties = dict() 

    -

            else: 

    -

                self._cached_properties = None 

    -

     

    -

        @property 

    -

        def home_id(self): 

    -

            """ 

    -

            The home_id of the node. 

    +

            :param object_id: ID of the object 

    +

            :type object_id: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

    +

     

    +

            """ 

    +

            self._network = network 

    +

            self._last_update = None 

    +

            self._outdated = True 

    +

            self._use_cache = use_cache 

    +

            self._object_id = object_id 

    +

            if self._use_cache: 

    +

                self._cached_properties = dict() 

    +

            else: 

    +

                self._cached_properties = None 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.object_id if self._network != None else None 

    +

        @property 

    +

        def home_id(self): 

    +

            """ 

    +

            The home_id of the node. 

     

    -

        @property 

    -

        def network(self): 

    -

            """ 

    -

            The network of the node. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.object_id if self._network != None else None 

     

    -

            :rtype: ZWaveNetwork 

    -

     

    -

            """ 

    -

            return self._network 

    +

        @property 

    +

        def network(self): 

    +

            """ 

    +

            The network of the node. 

     

    -

        @property 

    -

        def use_cache(self): 

    -

            """ 

    -

            Should this object use cache from property 

    +

            :rtype: ZWaveNetwork 

    +

     

    +

            """ 

    +

            return self._network 

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._use_cache 

    +

        @property 

    +

        def use_cache(self): 

    +

            """ 

    +

            Should this object use cache from property 

     

    -

        @property 

    -

        def last_update(self): 

    -

            """ 

    -

            The last update date of the device. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._use_cache 

     

    -

            :rtype: time 

    -

     

    -

            """ 

    -

            return self._last_update 

    +

        @property 

    +

        def last_update(self): 

    +

            """ 

    +

            The last update date of the device. 

     

    -

        @last_update.setter 

    -

        def last_update(self, value): 

    -

            """ 

    -

            Set the last update date of the device. 

    +

            :rtype: time 

    +

     

    +

            """ 

    +

            return self._last_update 

     

    -

            :param value: The time of last update 

    -

            :type value: time 

    -

     

    -

            """ 

    -

            self._last_update = value 

    -

     

    -

        @property 

    -

        def outdated(self): 

    -

            """ 

    -

            Are the information of this object outdated. 

    +

        @last_update.setter 

    +

        def last_update(self, value): 

    +

            """ 

    +

            Set the last update date of the device. 

    +

     

    +

            :param value: The time of last update 

    +

            :type value: time 

    +

     

    +

            """ 

    +

            self._last_update = value 

     

    -

            How to manage the cache ? 

    -

     

    -

            2 ways of doing it : 

    -

            - refresh information when setting the property 

    -

            - refresh information when getting getting property. 

    -

            Maybe whe could implement the 2 methods. 

    +

        @property 

    +

        def outdated(self): 

    +

            """ 

    +

            Are the information of this object outdated. 

    +

     

    +

            How to manage the cache ? 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._outdated 

    +

            2 ways of doing it : 

    +

            - refresh information when setting the property 

    +

            - refresh information when getting getting property. 

    +

            Maybe whe could implement the 2 methods. 

     

    -

        @outdated.setter 

    -

        def outdated(self, value): 

    -

            """ 

    -

            Set that this object ist outdated. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._outdated 

     

    -

            :param value: True 

    -

            :type value: bool - True 

    -

     

    -

            """ 

    -

            if self._use_cache: 

    -

                if value: 

    -

                    for prop in self._cached_properties: 

    -

                        self._cached_properties[prop] = True 

    -

                    self._outdated = value 

    -

                else: 

    -

                    raise ZWaveCacheException("Can't set outdated to False manually. It is done automatically.") 

    -

            else: 

    -

                raise ZWaveCacheException("Cache not enabled") 

    -

     

    -

        def is_outdated(self, prop): 

    -

            """ 

    -

            Check if property information is outdated. 

    -

     

    -

            :param prop: The property to check 

    -

            :type prop: lambda 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            if self._use_cache: 

    -

                if str(prop) in self._cached_properties: 

    -

                    #print "property in cache %s" % self._cached_properties[str(prop)] 

    -

                    return self._cached_properties[str(prop)] 

    -

                else: 

    -

                    #This property is not cached so return true 

    -

                    return True 

    -

            else: 

    -

                raise ZWaveCacheException("Cache not enabled") 

    -

     

    -

        def outdate(self, prop): 

    -

            """ 

    -

            Says that the property information is outdated. 

    -

     

    -

            :param prop: The property to outdate 

    -

            :type prop: lambda 

    -

     

    -

            """ 

    -

            if self._use_cache: 

    -

                if str(prop) in self._cached_properties: 

    -

                    self._cached_properties[str(prop)] = True 

    -

                    self._outdated = True 

    -

            else: 

    -

                raise ZWaveCacheException("Cache not enabled") 

    -

     

    -

        def update(self, prop): 

    -

            """ 

    -

            Says that the property are updated. 

    -

     

    -

            :param prop: The property to update 

    -

            :type prop: lambda 

    -

     

    -

            """ 

    -

            if self._use_cache: 

    -

                if str(prop) in self._cached_properties: 

    -

                    self._cached_properties[str(prop)] = False 

    -

                    out_dated = False 

    -

                    for prop in self._cached_properties: 

    -

                        if self._cached_properties[prop]: 

    -

                            out_dated = True 

    -

                            break 

    -

                    self._outdated = out_dated 

    -

            else: 

    -

                raise ZWaveCacheException("Cache not enabled") 

    -

     

    -

        def cache_property(self, prop): 

    -

            """ 

    -

            Add this property to the cache manager. 

    -

     

    -

            :param prop: The property to cache 

    -

            :type prop: lambda 

    -

     

    -

            """ 

    -

            if self._use_cache: 

    -

                self._cached_properties[str(prop)] = True 

    -

            else: 

    -

                raise ZWaveCacheException("Cache not enabled") 

    -

     

    -

        @property 

    -

        def object_id(self): 

    -

            """ 

    -

            The id of the object. 

    -

            object_id could be None, when creating a scene for example. 

    -

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._object_id 

    +

        @outdated.setter 

    +

        def outdated(self, value): 

    +

            """ 

    +

            Set that this object ist outdated. 

    +

     

    +

            :param value: True 

    +

            :type value: bool - True 

    +

     

    +

            """ 

    +

            if self._use_cache: 

    +

                if value: 

    +

                    for prop in self._cached_properties: 

    +

                        self._cached_properties[prop] = True 

    +

                    self._outdated = value 

    +

                else: 

    +

                    raise ZWaveCacheException("Can't set outdated to False manually. It is done automatically.") 

    +

            else: 

    +

                raise ZWaveCacheException("Cache not enabled") 

    +

     

    +

        def is_outdated(self, prop): 

    +

            """ 

    +

            Check if property information is outdated. 

    +

     

    +

            :param prop: The property to check 

    +

            :type prop: lambda 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            if self._use_cache: 

    +

                if str(prop) in self._cached_properties: 

    +

                    #print "property in cache %s" % self._cached_properties[str(prop)] 

    +

                    return self._cached_properties[str(prop)] 

    +

                else: 

    +

                    #This property is not cached so return true 

    +

                    return True 

    +

            else: 

    +

                raise ZWaveCacheException("Cache not enabled") 

    +

     

    +

        def outdate(self, prop): 

    +

            """ 

    +

            Says that the property information is outdated. 

    +

     

    +

            :param prop: The property to outdate 

    +

            :type prop: lambda 

    +

     

    +

            """ 

    +

            if self._use_cache: 

    +

                if str(prop) in self._cached_properties: 

    +

                    self._cached_properties[str(prop)] = True 

    +

                    self._outdated = True 

    +

            else: 

    +

                raise ZWaveCacheException("Cache not enabled") 

    +

     

    +

        def update(self, prop): 

    +

            """ 

    +

            Says that the property are updated. 

    +

     

    +

            :param prop: The property to update 

    +

            :type prop: lambda 

    +

     

    +

            """ 

    +

            if self._use_cache: 

    +

                if str(prop) in self._cached_properties: 

    +

                    self._cached_properties[str(prop)] = False 

    +

                    out_dated = False 

    +

                    for prop in self._cached_properties: 

    +

                        if self._cached_properties[prop]: 

    +

                            out_dated = True 

    +

                            break 

    +

                    self._outdated = out_dated 

    +

            else: 

    +

                raise ZWaveCacheException("Cache not enabled") 

    +

     

    +

        def cache_property(self, prop): 

    +

            """ 

    +

            Add this property to the cache manager. 

    +

     

    +

            :param prop: The property to cache 

    +

            :type prop: lambda 

    +

     

    +

            """ 

    +

            if self._use_cache: 

    +

                self._cached_properties[str(prop)] = True 

    +

            else: 

    +

                raise ZWaveCacheException("Cache not enabled") 

    +

     

    +

        @property 

    +

        def object_id(self): 

    +

            """ 

    +

            The id of the object. 

    +

            object_id could be None, when creating a scene for example. 

     

    -

        @property 

    -

        def kvals(self): 

    -

            """ 

    -

            The keyvals store in db for this object. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._object_id 

     

    -

            :rtype: {} 

    -

     

    -

            """ 

    -

            if self.network.dbcon is None: 

    -

                return None 

    -

            res = {} 

    -

            cur = self.network.dbcon.cursor() 

    -

            cur.execute("SELECT key,value FROM %s WHERE object_id=%s"%(self.__class__.__name__, self.object_id)) 

    -

            while True: 

    -

                row = cur.fetchone() 

    -

                if row == None: 

    -

                    break 

    -

                res[row[0]] = row[1] 

    -

            return res 

    -

     

    -

        @kvals.setter 

    -

        def kvals(self, kvs): 

    -

            """ 

    -

            The keyvals store in db for this object. 

    +

        @property 

    +

        def kvals(self): 

    +

            """ 

    +

            The keyvals store in db for this object. 

    +

     

    +

            :rtype: {} 

    +

     

    +

            """ 

    +

            if self.network.dbcon is None: 

    +

                return None 

    +

            res = {} 

    +

            cur = self.network.dbcon.cursor() 

    +

            cur.execute("SELECT key,value FROM %s WHERE object_id=%s"%(self.__class__.__name__, self.object_id)) 

    +

            while True: 

    +

                row = cur.fetchone() 

    +

                if row == None: 

    +

                    break 

    +

                res[row[0]] = row[1] 

    +

            return res 

     

    -

            :param kvs: The key/valuse to store in db. Setting a value to None will remove it. 

    -

            :type kvs: {} 

    -

            :rtype: boolean 

    -

     

    -

            """ 

    -

            if self.network.dbcon is None: 

    -

                return False 

    -

            if len(kvs) == 0: 

    -

                return True 

    -

            cur = self.network.dbcon.cursor() 

    -

            for key in kvs.keys(): 

    -

                logger.debug("DELETE FROM %s WHERE object_id=%s and key='%s'", self.__class__.__name__, self.object_id, key) 

    -

                cur.execute("DELETE FROM %s WHERE object_id=%s and key='%s'"%(self.__class__.__name__, self.object_id, key)) 

    -

                if kvs[key] is not None: 

    -

                    logger.debug("INSERT INTO %s(object_id, 'key', 'value') VALUES (%s,'%s','%s');", self.__class__.__name__, self.object_id, key, kvs[key]) 

    -

                    cur.execute("INSERT INTO %s(object_id, 'key', 'value') VALUES (%s,'%s','%s');"%(self.__class__.__name__, self.object_id, key, kvs[key])) 

    -

            self.network.dbcon.commit() 

    -

            return True 

    -

     

    -

    class ZWaveNodeInterface(object): 

    -

        """ 

    -

        Represents an interface of a node. An interface can manage 

    -

        specific commandClasses (ie a switch, a dimmer, a thermostat, ...). 

    -

        Don't know what to do with it now but sure it must exist 

    -

        """ 

    -

     

    -

        def __init__(self): 

    -

            """ 

    -

            Initialize a Zwave Node Interface 

    -

     

    -

            :param object_id: ID of the object 

    -

            :type object_id: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    +

        @kvals.setter 

    +

        def kvals(self, kvs): 

    +

            """ 

    +

            The keyvals store in db for this object. 

    +

     

    +

            :param kvs: The key/valuse to store in db. Setting a value to None will remove it. 

    +

            :type kvs: {} 

    +

            :rtype: boolean 

    +

     

    +

            """ 

    +

            if self.network.dbcon is None: 

    +

                return False 

    +

            if len(kvs) == 0: 

    +

                return True 

    +

            cur = self.network.dbcon.cursor() 

    +

            for key in kvs.keys(): 

    +

                logger.debug("DELETE FROM %s WHERE object_id=%s and key='%s'", self.__class__.__name__, self.object_id, key) 

    +

                cur.execute("DELETE FROM %s WHERE object_id=%s and key='%s'"%(self.__class__.__name__, self.object_id, key)) 

    +

                if kvs[key] is not None: 

    +

                    logger.debug("INSERT INTO %s(object_id, 'key', 'value') VALUES (%s,'%s','%s');", self.__class__.__name__, self.object_id, key, kvs[key]) 

    +

                    cur.execute("INSERT INTO %s(object_id, 'key', 'value') VALUES (%s,'%s','%s');"%(self.__class__.__name__, self.object_id, key, kvs[key])) 

    +

            self.network.dbcon.commit() 

    +

            return True 

    +

     

    +

    class ZWaveNodeInterface(object): 

    +

        """ 

    +

        Represents an interface of a node. An interface can manage 

    +

        specific commandClasses (ie a switch, a dimmer, a thermostat, ...). 

    +

        Don't know what to do with it now but sure it must exist 

    +

        """ 

    +

     

    +

        def __init__(self): 

    +

            """ 

    +

            Initialize a Zwave Node Interface 

     

    -

            """ 

    -

            self._class = "unknown" 

    +

            :param object_id: ID of the object 

    +

            :type object_id: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

    +

     

    +

            """ 

    +

            self._class = "unknown" 

    @@ -412,304 +417,309 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    import os 

    -

    import libopenzwave 

    -

    from libopenzwave import PyLogLevels 

    -

    from openzwave.object import ZWaveException 

    -

    from openzwave.singleton import Singleton 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveOption(libopenzwave.PyOptions): 

    -

        """ 

    -

        Represents a Zwave option used to start the manager. 

    -

     

    -

        """ 

    -

        def __init__(self, device=None, config_path=None, user_path=".", cmd_line=""): 

    -

            """ 

    -

            Create an option object and check that parameters are valid. 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    import os 

    +

    import libopenzwave 

    +

    from libopenzwave import PyLogLevels 

    +

    from openzwave.object import ZWaveException 

    +

    from openzwave.singleton import Singleton 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    class ZWaveOption(libopenzwave.PyOptions): 

    +

        """ 

    +

        Represents a Zwave option used to start the manager. 

     

    -

            :param device: The device to use 

    -

            :type device: str 

    -

            :param config_path: The openzwave config directory. If None, try to configure automatically. 

    -

            :type config_path: str 

    -

            :param user_path: The user directory 

    -

            :type user_path: str 

    -

            :param cmd_line: The "command line" options of the openzwave library 

    -

            :type cmd_line: str 

    -

     

    -

            """ 

    -

            try: 

    -

                if os.path.exists(device): 

    -

                    if os.access(device, os.R_OK) and os.access(device, os.W_OK): 

    -

                        self._device = device 

    -

                    else: 

    -

                        import sys, traceback 

    -

                        raise ZWaveException("Can't write to device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    -

                else: 

    -

                    import sys, traceback 

    -

                    raise ZWaveException("Can't find device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    -

            except: 

    -

                import sys, traceback 

    -

                raise ZWaveException("Error when retrieving device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    -

            libopenzwave.PyOptions.__init__(self, config_path=config_path, user_path=user_path, cmd_line=cmd_line) 

    -

            self._user_path = user_path 

    -

            self._config_path = config_path 

    -

     

    -

        def set_log_file(self, logfile): 

    -

            """ 

    -

            Set the log file location. 

    -

     

    -

            :param logfile: The location of the log file 

    -

            :type logfile: str 

    -

     

    -

            """ 

    -

            return self.addOptionString("LogFileName", logfile, False) 

    -

     

    -

        def set_logging(self, status): 

    -

            """ 

    -

            Set the status of logging. 

    -

     

    -

            :param status: True to activate logs, False to disable 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("Logging", status) 

    -

     

    -

        def set_append_log_file(self, status): 

    -

            """ 

    -

            Append new session logs to existing log file (false = overwrite). 

    -

     

    -

            :param status: 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("AppendLogFile", status) 

    -

     

    -

        def set_console_output(self, status): 

    -

            """ 

    -

            Display log information on console (as well as save to disk). 

    -

     

    -

            :param status: 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("ConsoleOutput", status) 

    -

     

    -

        def set_save_log_level(self, level): 

    -

            """ 

    -

            Save (to file) log messages equal to or above LogLevel_Detail. 

    -

     

    -

            :param level: 

    -

            :type level: PyLogLevels 

    -

     

    -

                * 'None':"Disable all logging" 

    -

                * 'Always':"These messages should always be shown" 

    -

                * 'Fatal':"A likely fatal issue in the library" 

    -

                * 'Error':"A serious issue with the library or the network" 

    -

                * 'Warning':"A minor issue from which the library should be able to recover" 

    -

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    -

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    -

                * 'Detail':"Detailed information on the progress of each message" / 

    -

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    -

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    -

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    -

     

    -

            """ 

    -

            return self.addOptionInt("SaveLogLevel", PyLogLevels[level]['value']) 

    -

     

    -

        def set_queue_log_level(self, level): 

    -

            """ 

    -

            Save (in RAM) log messages equal to or above LogLevel_Debug. 

    -

     

    -

            :param level: 

    -

            :type level: PyLogLevels 

    -

     

    -

                * 'None':"Disable all logging" 

    -

                * 'Always':"These messages should always be shown" 

    -

                * 'Fatal':"A likely fatal issue in the library" 

    -

                * 'Error':"A serious issue with the library or the network" 

    -

                * 'Warning':"A minor issue from which the library should be able to recover" 

    -

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    -

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    -

                * 'Detail':"Detailed information on the progress of each message" / 

    -

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    -

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    -

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    -

     

    -

            """ 

    -

            return self.addOptionInt("QueueLogLevel", PyLogLevels[level]) 

    -

     

    -

        def set_dump_trigger_level(self, level): 

    -

            """ 

    -

            Default is to never dump RAM-stored log messages. 

    -

     

    -

            :param level: 

    -

            :type level: PyLogLevels 

    -

     

    -

                * 'None':"Disable all logging" 

    -

                * 'Always':"These messages should always be shown" 

    -

                * 'Fatal':"A likely fatal issue in the library" 

    -

                * 'Error':"A serious issue with the library or the network" 

    -

                * 'Warning':"A minor issue from which the library should be able to recover" 

    -

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    -

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    -

                * 'Detail':"Detailed information on the progress of each message" / 

    -

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    -

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    -

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    -

     

    -

            """ 

    -

            return self.addOptionInt("DumpTriggerLevel", PyLogLevels[level]) 

    -

     

    -

        def set_associate(self, status): 

    -

            """ 

    -

            Enable automatic association of the controller with group one of every device. 

    -

     

    -

            :param status: True to enable logs, False to disable 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("Associate", status) 

    -

     

    -

        def set_exclude(self, commandClass): 

    -

            """ 

    -

            Remove support for the seted command classes. 

    -

     

    -

            :param commandClass: The command class to exclude 

    -

            :type commandClass: str 

    -

     

    -

            """ 

    -

            return self.addOptionString("Exclude", commandClass, True) 

    -

     

    -

        def set_include(self, commandClass): 

    -

            """ 

    -

            Only handle the specified command classes.  The Exclude option is ignored if anything is seted here. 

    -

     

    -

            :param commandClass: The location of the log file 

    -

            :type commandClass: str 

    -

     

    -

            """ 

    -

            return self.addOptionString("Include", commandClass, True) 

    -

     

    -

        def set_notify_transactions(self, status): 

    -

            """ 

    -

            Notifications when transaction complete is reported. 

    -

     

    -

            :param status: True to enable, False to disable 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("NotifyTransactions", status) 

    -

     

    -

        def set_interface(self, port): 

    -

            """ 

    -

            Identify the serial port to be accessed (TODO: change the code so more than one serial port can be specified and HID). 

    -

     

    -

            :param port: The serial port 

    -

            :type port: str 

    -

     

    -

            """ 

    -

            return self.addOptionString("Interface", port, True) 

    -

     

    -

        def set_save_configuration(self, status): 

    -

            """ 

    -

            Save the XML configuration upon driver close. 

    -

     

    -

            :param status: True to enable, False to disable 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("SaveConfiguration", status) 

    -

     

    -

        def set_driver_max_attempts(self, attempts): 

    -

            """ 

    -

            Set the driver max attempts before raising an error. 

    -

     

    -

            :param attempts: Number of attempts 

    -

            :type attempts: int 

    -

     

    -

            """ 

    -

            return self.addOptionInt("DriverMaxAttempts", attempts) 

    -

     

    -

        def set_poll_interval(self, interval): 

    -

            """ 

    -

            30 seconds (can easily poll 30 values in this time; ~120 values is the effective limit for 30 seconds). 

    -

     

    -

            :param interval: interval in seconds 

    -

            :type interval: int 

    -

     

    -

            """ 

    -

            return self.addOptionInt("PollInterval", interval) 

    -

     

    -

        def set_interval_between_polls(self, status): 

    -

            """ 

    -

            Notifications when transaction complete is reported. 

    -

     

    -

            :param status: if false, try to execute the entire poll set within the PollInterval time frame. If true, wait for PollInterval milliseconds between polls 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("IntervalBetweenPolls", status) 

    -

     

    -

        def set_suppress_value_refresh(self, status): 

    -

            """ 

    -

            if true, notifications for refreshed (but unchanged) values will not be sent. 

    -

     

    -

            :param status: True to enable, False to disable 

    -

            :type status: bool 

    -

     

    -

            """ 

    -

            return self.addOptionBool("SuppressValueRefresh", status) 

    -

     

    -

        @property 

    -

        def device(self): 

    -

            """ 

    -

            The device used by the controller. 

    +

        """ 

    +

        def __init__(self, device=None, config_path=None, user_path=".", cmd_line=""): 

    +

            """ 

    +

            Create an option object and check that parameters are valid. 

    +

     

    +

            :param device: The device to use 

    +

            :type device: str 

    +

            :param config_path: The openzwave config directory. If None, try to configure automatically. 

    +

            :type config_path: str 

    +

            :param user_path: The user directory 

    +

            :type user_path: str 

    +

            :param cmd_line: The "command line" options of the openzwave library 

    +

            :type cmd_line: str 

    +

     

    +

            """ 

    +

            try: 

    +

                if os.path.exists(device): 

    +

                    if os.access(device, os.R_OK) and os.access(device, os.W_OK): 

    +

                        self._device = device 

    +

                    else: 

    +

                        import sys, traceback 

    +

                        raise ZWaveException("Can't write to device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    +

                else: 

    +

                    import sys, traceback 

    +

                    raise ZWaveException("Can't find device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    +

            except: 

    +

                import sys, traceback 

    +

                raise ZWaveException("Error when retrieving device %s : %s" % (device, traceback.format_exception(*sys.exc_info()))) 

    +

            libopenzwave.PyOptions.__init__(self, config_path=config_path, user_path=user_path, cmd_line=cmd_line) 

    +

            self._user_path = user_path 

    +

            self._config_path = config_path 

    +

     

    +

        def set_log_file(self, logfile): 

    +

            """ 

    +

            Set the log file location. 

    +

     

    +

            :param logfile: The location of the log file 

    +

            :type logfile: str 

    +

     

    +

            """ 

    +

            return self.addOptionString("LogFileName", logfile, False) 

    +

     

    +

        def set_logging(self, status): 

    +

            """ 

    +

            Set the status of logging. 

    +

     

    +

            :param status: True to activate logs, False to disable 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("Logging", status) 

    +

     

    +

        def set_append_log_file(self, status): 

    +

            """ 

    +

            Append new session logs to existing log file (false = overwrite). 

    +

     

    +

            :param status: 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("AppendLogFile", status) 

    +

     

    +

        def set_console_output(self, status): 

    +

            """ 

    +

            Display log information on console (as well as save to disk). 

    +

     

    +

            :param status: 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("ConsoleOutput", status) 

    +

     

    +

        def set_save_log_level(self, level): 

    +

            """ 

    +

            Save (to file) log messages equal to or above LogLevel_Detail. 

    +

     

    +

            :param level: 

    +

            :type level: PyLogLevels 

    +

     

    +

                * 'None':"Disable all logging" 

    +

                * 'Always':"These messages should always be shown" 

    +

                * 'Fatal':"A likely fatal issue in the library" 

    +

                * 'Error':"A serious issue with the library or the network" 

    +

                * 'Warning':"A minor issue from which the library should be able to recover" 

    +

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    +

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    +

                * 'Detail':"Detailed information on the progress of each message" / 

    +

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    +

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    +

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    +

     

    +

            """ 

    +

            return self.addOptionInt("SaveLogLevel", PyLogLevels[level]['value']) 

    +

     

    +

        def set_queue_log_level(self, level): 

    +

            """ 

    +

            Save (in RAM) log messages equal to or above LogLevel_Debug. 

    +

     

    +

            :param level: 

    +

            :type level: PyLogLevels 

    +

     

    +

                * 'None':"Disable all logging" 

    +

                * 'Always':"These messages should always be shown" 

    +

                * 'Fatal':"A likely fatal issue in the library" 

    +

                * 'Error':"A serious issue with the library or the network" 

    +

                * 'Warning':"A minor issue from which the library should be able to recover" 

    +

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    +

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    +

                * 'Detail':"Detailed information on the progress of each message" / 

    +

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    +

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    +

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    +

     

    +

            """ 

    +

            return self.addOptionInt("QueueLogLevel", PyLogLevels[level]) 

    +

     

    +

        def set_dump_trigger_level(self, level): 

    +

            """ 

    +

            Default is to never dump RAM-stored log messages. 

    +

     

    +

            :param level: 

    +

            :type level: PyLogLevels 

    +

     

    +

                * 'None':"Disable all logging" 

    +

                * 'Always':"These messages should always be shown" 

    +

                * 'Fatal':"A likely fatal issue in the library" 

    +

                * 'Error':"A serious issue with the library or the network" 

    +

                * 'Warning':"A minor issue from which the library should be able to recover" 

    +

                * 'Alert':"Something unexpected by the library about which the controlling application should be aware" 

    +

                * 'Info':"Everything Is working fine...these messages provide streamlined feedback on each message" 

    +

                * 'Detail':"Detailed information on the progress of each message" / 

    +

                * 'Debug':"Very detailed information on progress that will create a huge log file quickly" 

    +

                * 'StreamDetail':"Will include low-level byte transfers from controller to buffer to application and back" 

    +

                * 'Internal':"Used only within the log class (uses existing timestamp, etc.)" 

    +

     

    +

            """ 

    +

            return self.addOptionInt("DumpTriggerLevel", PyLogLevels[level]) 

    +

     

    +

        def set_associate(self, status): 

    +

            """ 

    +

            Enable automatic association of the controller with group one of every device. 

    +

     

    +

            :param status: True to enable logs, False to disable 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("Associate", status) 

    +

     

    +

        def set_exclude(self, commandClass): 

    +

            """ 

    +

            Remove support for the seted command classes. 

    +

     

    +

            :param commandClass: The command class to exclude 

    +

            :type commandClass: str 

    +

     

    +

            """ 

    +

            return self.addOptionString("Exclude", commandClass, True) 

    +

     

    +

        def set_include(self, commandClass): 

    +

            """ 

    +

            Only handle the specified command classes.  The Exclude option is ignored if anything is seted here. 

    +

     

    +

            :param commandClass: The location of the log file 

    +

            :type commandClass: str 

    +

     

    +

            """ 

    +

            return self.addOptionString("Include", commandClass, True) 

    +

     

    +

        def set_notify_transactions(self, status): 

    +

            """ 

    +

            Notifications when transaction complete is reported. 

    +

     

    +

            :param status: True to enable, False to disable 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("NotifyTransactions", status) 

    +

     

    +

        def set_interface(self, port): 

    +

            """ 

    +

            Identify the serial port to be accessed (TODO: change the code so more than one serial port can be specified and HID). 

    +

     

    +

            :param port: The serial port 

    +

            :type port: str 

    +

     

    +

            """ 

    +

            return self.addOptionString("Interface", port, True) 

    +

     

    +

        def set_save_configuration(self, status): 

    +

            """ 

    +

            Save the XML configuration upon driver close. 

    +

     

    +

            :param status: True to enable, False to disable 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("SaveConfiguration", status) 

    +

     

    +

        def set_driver_max_attempts(self, attempts): 

    +

            """ 

    +

            Set the driver max attempts before raising an error. 

    +

     

    +

            :param attempts: Number of attempts 

    +

            :type attempts: int 

    +

     

    +

            """ 

    +

            return self.addOptionInt("DriverMaxAttempts", attempts) 

    +

     

    +

        def set_poll_interval(self, interval): 

    +

            """ 

    +

            30 seconds (can easily poll 30 values in this time; ~120 values is the effective limit for 30 seconds). 

    +

     

    +

            :param interval: interval in seconds 

    +

            :type interval: int 

    +

     

    +

            """ 

    +

            return self.addOptionInt("PollInterval", interval) 

    +

     

    +

        def set_interval_between_polls(self, status): 

    +

            """ 

    +

            Notifications when transaction complete is reported. 

    +

     

    +

            :param status: if false, try to execute the entire poll set within the PollInterval time frame. If true, wait for PollInterval milliseconds between polls 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("IntervalBetweenPolls", status) 

    +

     

    +

        def set_suppress_value_refresh(self, status): 

    +

            """ 

    +

            if true, notifications for refreshed (but unchanged) values will not be sent. 

    +

     

    +

            :param status: True to enable, False to disable 

    +

            :type status: bool 

    +

     

    +

            """ 

    +

            return self.addOptionBool("SuppressValueRefresh", status) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._device 

    +

        @property 

    +

        def device(self): 

    +

            """ 

    +

            The device used by the controller. 

     

    -

        @property 

    -

        def config_path(self): 

    -

            """ 

    -

            The config path. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._device 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._config_path 

    +

        @property 

    +

        def config_path(self): 

    +

            """ 

    +

            The config path. 

     

    -

        @property 

    -

        def user_path(self): 

    -

            """ 

    -

            The config path. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._config_path 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._user_path 

    +

        @property 

    +

        def user_path(self): 

    +

            """ 

    +

            The config path. 

     

    -

     

    -

    class ZWaveOptionSingleton(ZWaveOption): 

    -

        """ 

    -

        Represents a singleton Zwave option used to start the manager. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._user_path 

     

    -

        """ 

    -

        __metaclass__ = Singleton 

    -

     

    +

     

    +

    class ZWaveOptionSingleton(ZWaveOption): 

    +

        """ 

    +

        Represents a singleton Zwave option used to start the manager. 

    +

     

    +

        """ 

    +

        __metaclass__ = Singleton 

    +

     

    @@ -309,201 +317,209 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    from openzwave.object import ZWaveObject 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    class ZWaveScene(ZWaveObject): 

    -

        """ 

    -

        Represents a single scene within the Z-Wave Network 

    -

        """ 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from openzwave.object import ZWaveObject 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

     

    -

        def __init__(self, scene_id, network=None): 

    -

            """ 

    -

            Initialize zwave scene 

    -

     

    -

            :param scene_id: ID of the scene 

    -

            :type scene_id: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    +

    class ZWaveScene(ZWaveObject): 

    +

        """ 

    +

        Represents a single scene within the Z-Wave Network 

    +

        """ 

    +

     

    +

        def __init__(self, scene_id, network=None): 

    +

            """ 

    +

            Initialize zwave scene 

     

    -

            """ 

    -

            ZWaveObject.__init__(self, scene_id, network) 

    -

            logger.debug("Create object scene (scene_id:%s)", scene_id) 

    -

            self.values = dict() 

    +

            :param scene_id: ID of the scene 

    +

            :type scene_id: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the scene. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'scene_id: [%s] label: [%s]' % (self.scene_id, self.label) 

    +

            """ 

    +

            ZWaveObject.__init__(self, scene_id, network) 

    +

            logger.debug("Create object scene (scene_id:%s)", scene_id) 

    +

            self.values = dict() 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the scene. 

     

    -

        @property 

    -

        def scene_id(self): 

    -

            """ 

    -

            The id of the scene. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'scene_id: [%s] label: [%s]' % (self.scene_id, self.label) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._object_id 

    +

        @property 

    +

        def scene_id(self): 

    +

            """ 

    +

            The id of the scene. 

     

    -

        @property 

    -

        def label(self): 

    -

            """ 

    -

            The label of the scene. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._object_id 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getSceneLabel(self.object_id) 

    +

        @property 

    +

        def label(self): 

    +

            """ 

    +

            The label of the scene. 

     

    -

        @label.setter 

    -

        def label(self, value): 

    -

            """ 

    -

            Set the label of the scene. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getSceneLabel(self.object_id) 

     

    -

            :param value: The new label of the scene 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setSceneLabel(self.object_id, value) 

    -

     

    -

        def create(self, label=None): 

    -

            """ 

    -

            Create a new zwave scene on the network and update the object_id field 

    -

            If label is set, also change the label of the scene 

    +

        @label.setter 

    +

        def label(self, value): 

    +

            """ 

    +

            Set the label of the scene. 

    +

     

    +

            :param value: The new label of the scene 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setSceneLabel(self.object_id, value) 

     

    -

            :param label: The new label 

    -

            :type label: str or None 

    -

            :returns: return the id of scene on the network. Return 0 if fails 

    -

            :rtype: int 

    +

        def create(self, label=None): 

    +

            """ 

    +

            Create a new zwave scene on the network and update the object_id field 

    +

            If label is set, also change the label of the scene 

     

    -

            """ 

    -

            scene_id = self._network.manager.createScene() 

    -

            if scene_id != 0: 

    -

                self._object_id = scene_id 

    -

                if label is not None: 

    -

                    self.label = label 

    -

            return scene_id 

    -

     

    -

        def add_value(self, value_id, value_data): 

    -

            """ 

    -

            Add a value with data value_data to the zwave scene. 

    -

     

    -

            :param value_id: The id of the value to add 

    -

            :type value_id: int 

    -

            :param value_data: The data of the value to add 

    -

            :type value_data: variable 

    +

            :param label: The new label 

    +

            :type label: str or None 

    +

            :returns: return the id of scene on the network. Return 0 if fails 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            scene_id = self._network.manager.createScene() 

    +

            if scene_id != 0: 

    +

                self._object_id = scene_id 

    +

                if label is not None: 

    +

                    self.label = label 

    +

            return scene_id 

    +

     

    +

        def add_value(self, value_id, value_data): 

    +

            """ 

    +

            Add a value with data value_data to the zwave scene. 

     

    -

            """ 

    -

            ret = self._network.manager.addSceneValue(self.scene_id, value_id, value_data) 

    -

            if ret == 1: 

    -

                return True 

    -

            return False 

    -

     

    -

        def set_value(self, value_id, value_data): 

    -

            """ 

    -

            Set a value data to value_data in the zwave scene. 

    -

     

    -

            :param value_id: The id of the value to add 

    -

            :type value_id: int 

    -

            :param value_data: The data of the value to add 

    -

            :type value_data: variable 

    +

            :param value_id: The id of the value to add 

    +

            :type value_id: int 

    +

            :param value_data: The data of the value to add 

    +

            :type value_data: variable 

    +

     

    +

            """ 

    +

            ret = self._network.manager.addSceneValue(self.scene_id, value_id, value_data) 

    +

            if ret == 1: 

    +

                return True 

    +

            return False 

    +

     

    +

        def set_value(self, value_id, value_data): 

    +

            """ 

    +

            Set a value data to value_data in the zwave scene. 

     

    -

            """ 

    -

            ret = self._network.manager.setSceneValue(self.scene_id, value_id, value_data) 

    -

            if ret == 1: 

    -

                return True 

    -

            return False 

    -

     

    -

        def get_values(self): 

    -

            """ 

    -

            Get all the values of the scene 

    -

     

    -

            :returns: A dict of values : {value_id={'value'=ZWaveValue, 'data'=data}, ...}. 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret = dict() 

    -

            values = self._network.manager.sceneGetValues(self.scene_id) 

    -

            if values is None: 

    -

                return ret 

    -

            for val in values: 

    -

                value = self._network.get_value(val) 

    -

                ret[val] = {'value':value, 'data':values[val]} 

    -

            return ret 

    -

     

    -

        def get_values_by_node(self): 

    -

            """ 

    -

            Get all the values of the scene grouped by nodes 

    -

     

    -

            :returns: A dict of values : {node_id={value_id={'value'=ZWaveValue, 'data'=data}, ...},...}. 

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret = dict() 

    -

            values = self._network.manager.sceneGetValues(self.scene_id) 

    -

            if values is None: 

    -

                return ret 

    -

            for val in values: 

    -

                value = self._network.get_value(val) 

    -

                if value is not None: 

    -

                    if value.node.node_id not in ret: 

    -

                        ret[value.node.node_id] = {} 

    -

                    ret[value.node.node_id][val] = {'value':value, 'data':values[val]} 

    -

            return ret 

    -

     

    -

        def remove_value(self, value_id): 

    -

            """ 

    -

            Remove a value from the scene. 

    -

     

    -

            :param value_id: The id of the value to change 

    -

            :type value_id: int 

    -

            :returns: True if the scene is removed. False otherwise. 

    -

            :rtype: bool 

    +

            :param value_id: The id of the value to add 

    +

            :type value_id: int 

    +

            :param value_data: The data of the value to add 

    +

            :type value_data: variable 

    +

     

    +

            """ 

    +

            ret = self._network.manager.setSceneValue(self.scene_id, value_id, value_data) 

    +

            if ret == 1: 

    +

                return True 

    +

            return False 

    +

     

    +

        def get_values(self): 

    +

            """ 

    +

            Get all the values of the scene 

    +

     

    +

            :returns: A dict of values : {value_id={'value'=ZWaveValue, 'data'=data}, ...}. 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret = dict() 

    +

            values = self._network.manager.sceneGetValues(self.scene_id) 

    +

            if values is None: 

    +

                return ret 

    +

            for val in values: 

    +

                value = self._network.get_value(val) 

    +

                ret[val] = {'value':value, 'data':values[val]} 

    +

            return ret 

    +

     

    +

        def get_values_by_node(self): 

    +

            """ 

    +

            Get all the values of the scene grouped by nodes 

    +

     

    +

            :returns: A dict of values : {node_id={value_id={'value'=ZWaveValue, 'data'=data}, ...},...}. 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret = dict() 

    +

            values = self._network.manager.sceneGetValues(self.scene_id) 

    +

            if values is None: 

    +

                return ret 

    +

            for val in values: 

    +

                value = self._network.get_value(val) 

    +

                if value is not None: 

    +

                    if value.node.node_id not in ret: 

    +

                        ret[value.node.node_id] = {} 

    +

                    ret[value.node.node_id][val] = {'value':value, 'data':values[val]} 

    +

            return ret 

    +

     

    +

        def remove_value(self, value_id): 

    +

            """ 

    +

            Remove a value from the scene. 

     

    -

            """ 

    -

            return self._network.manager.removeSceneValue(self.scene_id, value_id) 

    -

     

    -

        def activate(self): 

    -

            """ 

    -

            Activate the zwave scene. 

    -

     

    -

            :returns: True if the scene is activated. False otherwise. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.activateScene(self.object_id) 

    -

     

    -

        def to_dict(self, kvals=True): 

    -

            """ 

    -

            Return a dict representation of the node. 

    -

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            ret['label'] = self.label 

    -

            ret['scene_id'] = self.scene_id 

    -

            if kvals == True and self.network.dbcon is not None: 

    -

                vals = self.kvals 

    -

                for key in vals.keys(): 

    -

                    ret[key]=vals[key] 

    -

            return ret 

    +

            :param value_id: The id of the value to change 

    +

            :type value_id: int 

    +

            :returns: True if the scene is removed. False otherwise. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.removeSceneValue(self.scene_id, value_id) 

    +

     

    +

        def activate(self): 

    +

            """ 

    +

            Activate the zwave scene. 

    +

     

    +

            :returns: True if the scene is activated. False otherwise. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.activateScene(self.object_id) 

    +

     

    +

        def to_dict(self, extras=['kvals']): 

    +

            """ 

    +

            Return a dict representation of the node. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            ret={} 

    +

            ret['label'] = self.label 

    +

            ret['scene_id'] = self.scene_id 

    +

            if 'kvals' in extras and self.network.dbcon is not None: 

    +

                vals = self.kvals 

    +

                for key in vals.keys(): 

    +

                    ret[key]=vals[key] 

    +

            return ret 

    @@ -131,23 +136,28 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

     

    -

    class Singleton(type): 

    -

        """ Singleton metaclass 

    -

        """ 

    -

        def __init__(self, *args, **kwargs): 

    -

            """ Init the metaclass 

    -

            @ivar __instances: instance of the class 

    -

            @type __instance: object 

    -

            """ 

    -

            super(Singleton, self).__init__(*args, **kwargs) 

    -

     

    -

            self.__instance = None 

    -

     

    -

        def __call__(self, *args, **kwargs): 

    -

            if self.__instance is None: 

    -

                self.__instance = super(Singleton, self).__call__(*args, **kwargs) 

    -

            return self.__instance 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

     

    +

    class Singleton(type): 

    +

        """ Singleton metaclass 

    +

        """ 

    +

        def __init__(self, *args, **kwargs): 

    +

            """ Init the metaclass 

    +

            @ivar __instances: instance of the class 

    +

            @type __instance: object 

    +

            """ 

    +

            super(Singleton, self).__init__(*args, **kwargs) 

    +

     

    +

            self.__instance = None 

    +

     

    +

        def __call__(self, *args, **kwargs): 

    +

            if self.__instance is None: 

    +

                self.__instance = super(Singleton, self).__call__(*args, **kwargs) 

    +

            return self.__instance 

    @@ -641,533 +656,548 @@

    along with python-openzwave. If not, see http://www.gnu.org/licenses. 

     

    """ 

    -

    from openzwave.object import ZWaveObject 

    -

     

    -

    # Set default logging handler to avoid "No handler found" warnings. 

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logger = logging.getLogger('openzwave') 

    -

    logger.addHandler(NullHandler()) 

    -

     

    -

    # TODO: don't report controller node as sleeping 

    -

    # TODO: allow value identification by device/index/instance 

    -

    class ZWaveValue(ZWaveObject): 

    -

        """ 

    -

        Represents a single value. 

    -

        """ 

    -

        def __init__(self, value_id, network=None, parent=None): 

    -

            """ 

    -

            Initialize value 

    -

     

    -

            .. code-block:: python 

    -

     

    -

                    n['valueId'] = {'home_id' : v.GetHomeId(), 

    -

                        * 'parent_id' : v.GetNodeId(), 

    -

                        * 'commandClass' : PyManager.COMMAND_CLASS_DESC[v.GetCommandClassId()], 

    -

                        * 'instance' : v.GetInstance(), 

    -

                        * 'index' : v.GetIndex(), 

    -

                        * 'id' : v.GetId(), 

    -

                        * 'genre' : PyGenres[v.GetGenre()], 

    -

                        * 'type' : PyValueTypes[v.GetType()], 

    -

                        * #'value' : value.c_str(), 

    -

                        * 'value' : getValueFromType(manager,v.GetId()), 

    -

                        * 'label' : label.c_str(), 

    -

                        * 'units' : units.c_str(), 

    -

                        * 'readOnly': manager.IsValueReadOnly(v), 

    -

                        } 

    -

     

    -

            :param value_id: ID of the value 

    -

            :type value_id: int 

    -

            :param network: The network object to access the manager 

    -

            :type network: ZWaveNetwork 

    -

            """ 

    -

            ZWaveObject.__init__(self, value_id, network=network) 

    -

            logger.debug("Create object value (valueId:%s)", value_id) 

    -

            self._parent = parent 

    -

     

    -

        def __str__(self): 

    -

            """ 

    -

            The string representation of the value. 

    -

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return 'home_id: [%s] id: [%s] parent_id: [%s] label: [%s] data: [%s]' % \ 

    -

              (self._network.home_id_str, self._object_id, self.parent_id, self.label, self.data) 

    -

     

    -

        @property 

    -

        def parent_id(self): 

    -

            """ 

    -

            Get the parent_id of the value. 

    -

            """ 

    -

            return self._parent.object_id 

    -

     

    -

        @property 

    -

        def value_id(self): 

    -

            """ 

    -

            Get the value_id of the value. 

    -

            """ 

    -

            return self._object_id 

    -

     

    -

        @property 

    -

        def id_on_network(self): 

    -

            """ 

    -

            Get an unique id for this value. 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from openzwave.object import ZWaveObject 

    +

     

    +

    # Set default logging handler to avoid "No handler found" warnings. 

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logger = logging.getLogger('openzwave') 

    +

    logger.addHandler(NullHandler()) 

    +

     

    +

    # TODO: don't report controller node as sleeping 

    +

    # TODO: allow value identification by device/index/instance 

    +

    class ZWaveValue(ZWaveObject): 

    +

        """ 

    +

        Represents a single value. 

    +

        """ 

    +

        def __init__(self, value_id, network=None, parent=None): 

    +

            """ 

    +

            Initialize value 

    +

     

    +

            .. code-block:: python 

    +

     

    +

                    n['valueId'] = {'home_id' : v.GetHomeId(), 

    +

                        * 'parent_id' : v.GetNodeId(), 

    +

                        * 'commandClass' : PyManager.COMMAND_CLASS_DESC[v.GetCommandClassId()], 

    +

                        * 'instance' : v.GetInstance(), 

    +

                        * 'index' : v.GetIndex(), 

    +

                        * 'id' : v.GetId(), 

    +

                        * 'genre' : PyGenres[v.GetGenre()], 

    +

                        * 'type' : PyValueTypes[v.GetType()], 

    +

                        * #'value' : value.c_str(), 

    +

                        * 'value' : getValueFromType(manager,v.GetId()), 

    +

                        * 'label' : label.c_str(), 

    +

                        * 'units' : units.c_str(), 

    +

                        * 'readOnly': manager.IsValueReadOnly(v), 

    +

                        } 

    +

     

    +

            :param value_id: ID of the value 

    +

            :type value_id: int 

    +

            :param network: The network object to access the manager 

    +

            :type network: ZWaveNetwork 

    +

            """ 

    +

            ZWaveObject.__init__(self, value_id, network=network) 

    +

            logger.debug("Create object value (valueId:%s)", value_id) 

    +

            self._parent = parent 

    +

     

    +

        def __str__(self): 

    +

            """ 

    +

            The string representation of the value. 

    +

     

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return 'home_id: [%s] id: [%s] parent_id: [%s] label: [%s] data: [%s]' % \ 

    +

              (self._network.home_id_str, self._object_id, self.parent_id, self.label, self.data) 

    +

     

    +

        @property 

    +

        def parent_id(self): 

    +

            """ 

    +

            Get the parent_id of the value. 

    +

            """ 

    +

            return self._parent.object_id 

    +

     

    +

        @property 

    +

        def value_id(self): 

    +

            """ 

    +

            Get the value_id of the value. 

    +

            """ 

    +

            return self._object_id 

     

    -

            The scenes use this to retrieve values 

    -

     

    -

            .. code-block:: xml 

    -

     

    -

                    <Scene id="1" label="scene1"> 

    -

                            <Value homeId="0x014d0ef5" nodeId="2" genre="user" commandClassId="38" instance="1" index="0" type="byte">54</Value> 

    -

                    </Scene> 

    -

     

    -

            The format is : 

    -

     

    -

                home_id.node_id.command_class.instance.index 

    -

     

    -

            """ 

    -

            separator = self._network.id_separator 

    -

            return "%0.8x%s%s%s%0.2x%s%s%s%s" % (self._network.home_id, \ 

    -

              separator, self.parent_id, \ 

    -

              separator, self.command_class, \ 

    -

              separator, self.instance, \ 

    -

              separator, self.index) 

    -

     

    -

        @property 

    -

        def node(self): 

    -

            """ 

    -

            The value_id of the value. 

    -

            """ 

    -

            return self._parent 

    -

     

    -

        @property 

    -

        def label(self): 

    -

            """ 

    -

            Get the label of the value. 

    +

        @property 

    +

        def id_on_network(self): 

    +

            """ 

    +

            Get an unique id for this value. 

    +

     

    +

            The scenes use this to retrieve values 

    +

     

    +

            .. code-block:: xml 

    +

     

    +

                    <Scene id="1" label="scene1"> 

    +

                            <Value homeId="0x014d0ef5" nodeId="2" genre="user" commandClassId="38" instance="1" index="0" type="byte">54</Value> 

    +

                    </Scene> 

    +

     

    +

            The format is : 

    +

     

    +

                home_id.node_id.command_class.instance.index 

    +

     

    +

            """ 

    +

            separator = self._network.id_separator 

    +

            return "%0.8x%s%s%s%0.2x%s%s%s%s" % (self._network.home_id, \ 

    +

              separator, self.parent_id, \ 

    +

              separator, self.command_class, \ 

    +

              separator, self.instance, \ 

    +

              separator, self.index) 

    +

     

    +

        @property 

    +

        def node(self): 

    +

            """ 

    +

            The value_id of the value. 

    +

            """ 

    +

            return self._parent 

     

    -

            :rtype: str 

    -

            """ 

    -

            return self._network.manager.getValueLabel(self.value_id) 

    -

     

    -

        @label.setter 

    -

        def label(self, value): 

    -

            """ 

    -

            Set the label of the value. 

    +

        @property 

    +

        def label(self): 

    +

            """ 

    +

            Get the label of the value. 

    +

     

    +

            :rtype: str 

    +

            """ 

    +

            return self._network.manager.getValueLabel(self.value_id) 

     

    -

            :param value: The new label value 

    -

            :type value: str 

    -

            """ 

    -

            self._network.manager.setValueLabel(self.value_id, value) 

    +

        @label.setter 

    +

        def label(self, value): 

    +

            """ 

    +

            Set the label of the value. 

     

    -

        @property 

    -

        def help(self): 

    -

            """ 

    -

            Gets a help string describing the value's purpose and usage. 

    +

            :param value: The new label value 

    +

            :type value: str 

    +

            """ 

    +

            self._network.manager.setValueLabel(self.value_id, value) 

     

    -

            :rtype: str 

    -

            """ 

    -

            return self._network.manager.getValueHelp(self.value_id) 

    -

     

    -

        @help.setter 

    -

        def help(self, value): 

    -

            """ 

    -

            Sets a help string describing the value's purpose and usage.. 

    +

        @property 

    +

        def help(self): 

    +

            """ 

    +

            Gets a help string describing the value's purpose and usage. 

    +

     

    +

            :rtype: str 

    +

            """ 

    +

            return self._network.manager.getValueHelp(self.value_id) 

     

    -

            :param value: The new help value 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setValueHelp(self.value_id, value) 

    -

     

    -

        @property 

    -

        def units(self): 

    -

            """ 

    -

            Gets the units that the value is measured in. 

    +

        @help.setter 

    +

        def help(self, value): 

    +

            """ 

    +

            Sets a help string describing the value's purpose and usage.. 

    +

     

    +

            :param value: The new help value 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setValueHelp(self.value_id, value) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueUnits(self.value_id) 

    +

        @property 

    +

        def units(self): 

    +

            """ 

    +

            Gets the units that the value is measured in. 

     

    -

        @units.setter 

    -

        def units(self, value): 

    -

            """ 

    -

            Sets the units that the value is measured in. 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueUnits(self.value_id) 

     

    -

            :param value: The new units value 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setValueUnits(self.value_id, value) 

    -

     

    -

        @property 

    -

        def max(self): 

    -

            """ 

    -

            Gets the maximum that this value may contain. 

    +

        @units.setter 

    +

        def units(self, value): 

    +

            """ 

    +

            Sets the units that the value is measured in. 

    +

     

    +

            :param value: The new units value 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setValueUnits(self.value_id, value) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueMax(self.value_id) 

    +

        @property 

    +

        def max(self): 

    +

            """ 

    +

            Gets the maximum that this value may contain. 

     

    -

        @property 

    -

        def min(self): 

    -

            """ 

    -

            Gets the minimum that this value may contain. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueMax(self.value_id) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueMin(self.value_id) 

    +

        @property 

    +

        def min(self): 

    +

            """ 

    +

            Gets the minimum that this value may contain. 

     

    -

        @property 

    -

        def type(self): 

    -

            """ 

    -

            Get the type of the value.  The type describes the data held by the value 

    -

            and enables the user to select the correct value accessor method in the 

    -

            Manager class. 

    -

     

    -

            :return: type of the value 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueType(self.value_id) 

    -

     

    -

        @property 

    -

        def genre(self): 

    -

            """ 

    -

            Get the genre of the value.  The genre classifies a value to enable 

    -

            low-level system or configuration parameters to be filtered out 

    -

            by the application 

    -

     

    -

            :return: genre of the value (Basic, User, Config, System) 

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueGenre(self.value_id) 

    -

     

    -

        @property 

    -

        def index(self): 

    -

            """ 

    -

            Get the value index.  The index is used to identify one of multiple 

    -

            values created and managed by a command class.  In the case of configurable 

    -

            parameters (handled by the configuration command class), the index is the 

    -

            same as the parameter ID. 

    -

     

    -

            :return: index of the value 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueIndex(self.value_id) 

    -

     

    -

        @property 

    -

        def instance(self): 

    -

            """ 

    -

            Get the command class instance of this value.  It is possible for there to be 

    -

            multiple instances of a command class, although currently it appears that 

    -

            only the SensorMultilevel command class ever does this. 

    -

     

    -

            :return: instance of the value 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueInstance(self.value_id) 

    -

     

    -

        @property 

    -

        def data(self): 

    -

            """ 

    -

            Get the current data of the value. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueMin(self.value_id) 

    +

     

    +

        @property 

    +

        def type(self): 

    +

            """ 

    +

            Get the type of the value.  The type describes the data held by the value 

    +

            and enables the user to select the correct value accessor method in the 

    +

            Manager class. 

    +

     

    +

            :return: type of the value 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueType(self.value_id) 

    +

     

    +

        @property 

    +

        def genre(self): 

    +

            """ 

    +

            Get the genre of the value.  The genre classifies a value to enable 

    +

            low-level system or configuration parameters to be filtered out 

    +

            by the application 

    +

     

    +

            :return: genre of the value (Basic, User, Config, System) 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueGenre(self.value_id) 

    +

     

    +

        @property 

    +

        def index(self): 

    +

            """ 

    +

            Get the value index.  The index is used to identify one of multiple 

    +

            values created and managed by a command class.  In the case of configurable 

    +

            parameters (handled by the configuration command class), the index is the 

    +

            same as the parameter ID. 

    +

     

    +

            :return: index of the value 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueIndex(self.value_id) 

    +

     

    +

        @property 

    +

        def instance(self): 

    +

            """ 

    +

            Get the command class instance of this value.  It is possible for there to be 

    +

            multiple instances of a command class, although currently it appears that 

    +

            only the SensorMultilevel command class ever does this. 

    +

     

    +

            :return: instance of the value 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueInstance(self.value_id) 

     

    -

            :return: The data of the value 

    -

            :rtype: depending of the type of the value 

    -

     

    -

            """ 

    -

            return self._network.manager.getValue(self.value_id) 

    -

     

    -

        @data.setter 

    -

        def data(self, value): 

    -

            """ 

    -

            Set the data of the value. 

    +

        @property 

    +

        def data(self): 

    +

            """ 

    +

            Get the current data of the value. 

    +

     

    +

            :return: The data of the value 

    +

            :rtype: depending of the type of the value 

    +

     

    +

            """ 

    +

            return self._network.manager.getValue(self.value_id) 

     

    -

            Best practice: Use check_data before setting it: 

    -

     

    -

            new_val = value.check_data(some_data) 

    -

            if new_val != None: 

    -

                value.data = new_val 

    -

     

    -

            :param value: The new data value 

    -

            :type value: str 

    -

     

    -

            """ 

    -

            self._network.manager.setValue(self.value_id, value) 

    -

     

    -

        @property 

    -

        def data_as_string(self): 

    -

            """ 

    -

            Get the value data as String. 

    +

        @data.setter 

    +

        def data(self, value): 

    +

            """ 

    +

            Set the data of the value. 

    +

     

    +

            Best practice: Use check_data before setting it: 

    +

     

    +

            new_val = value.check_data(some_data) 

    +

            if new_val != None: 

    +

                value.data = new_val 

    +

     

    +

            :param value: The new data value 

    +

            :type value: str 

    +

     

    +

            """ 

    +

            self._network.manager.setValue(self.value_id, value) 

     

    -

            :rtype: str 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueAsString(self.value_id) 

    +

        @property 

    +

        def data_as_string(self): 

    +

            """ 

    +

            Get the value data as String. 

     

    -

        @property 

    -

        def data_items(self): 

    -

            """ 

    -

            When type of value is list, data_items contains a list of valid values 

    +

            :rtype: str 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueAsString(self.value_id) 

     

    -

            :return: The valid values or a help string 

    -

            :rtype: string or set 

    -

     

    -

            """ 

    -

            if self.is_read_only: 

    -

                return "Read only" 

    -

            if self.type == "Bool": 

    -

                return "True or False" 

    -

            elif self.type == "Byte": 

    -

                return "A byte between %s and %s" % (self.min, self.max) 

    -

            elif self.type == "Decimal": 

    -

                return "A decimal" 

    -

            elif self.type == "Int": 

    -

                return "An integer between %s and %s" % (self.min, self.max) 

    -

            elif self.type == "Short": 

    -

                return "A short between %s and %s" % (self.min, self.max) 

    -

            elif self.type == "String": 

    -

                return "A string" 

    -

            elif self.type == "Button": 

    -

                return "True or False" 

    -

            elif self.type == "List": 

    -

                return self._network.manager.getValueListItems(self.value_id) 

    -

            else: 

    -

                return "Unknown" 

    -

     

    -

        def check_data(self, data): 

    -

            """ 

    -

            Check that data is correct for this value. 

    -

            Return the data in a correct type. None is data is incorrect. 

    +

        @property 

    +

        def data_items(self): 

    +

            """ 

    +

            When type of value is list, data_items contains a list of valid values 

    +

     

    +

            :return: The valid values or a help string 

    +

            :rtype: string or set 

    +

     

    +

            """ 

    +

            if self.is_read_only: 

    +

                return "Read only" 

    +

            if self.type == "Bool": 

    +

                return "True or False" 

    +

            elif self.type == "Byte": 

    +

                return "A byte between %s and %s" % (self.min, self.max) 

    +

            elif self.type == "Decimal": 

    +

                return "A decimal" 

    +

            elif self.type == "Int": 

    +

                return "An integer between %s and %s" % (self.min, self.max) 

    +

            elif self.type == "Short": 

    +

                return "A short between %s and %s" % (self.min, self.max) 

    +

            elif self.type == "String": 

    +

                return "A string" 

    +

            elif self.type == "Button": 

    +

                return "True or False" 

    +

            elif self.type == "List": 

    +

                return self._network.manager.getValueListItems(self.value_id) 

    +

            else: 

    +

                return "Unknown" 

     

    -

            :param data:  The data value to check 

    -

            :type data: lambda 

    -

            :return: A variable of the good type if the data is correct. None otherwise. 

    -

            :rtype: variable 

    +

        def check_data(self, data): 

    +

            """ 

    +

            Check that data is correct for this value. 

    +

            Return the data in a correct type. None is data is incorrect. 

     

    -

            """ 

    -

            if self.is_read_only: 

    -

                return None 

    -

            new_data = None 

    -

            logger.debug("check_data type :%s", self.type) 

    -

            if self.type == "Bool": 

    -

                new_data = data 

    -

                if isinstance(data, basestring): 

    -

                    if data == "False" or data == "false" or data == "0": 

    -

                        new_data = False 

    -

                    else: 

    -

                        new_data = True 

    -

            elif self.type == "Byte": 

    -

                try: 

    -

                    new_data = int(data) 

    -

                except: 

    -

                    new_data = None 

    -

                if new_data is not None: 

    -

                    if new_data < 0: 

    -

                        new_data = 0 

    -

                    elif new_data > 255: 

    -

                        new_data = 255 

    -

            elif self.type == "Decimal": 

    -

                try: 

    -

                    new_data = float(data) 

    -

                except: 

    -

                    new_data = None 

    -

            elif self.type == "Int": 

    +

            :param data:  The data value to check 

    +

            :type data: lambda 

    +

            :return: A variable of the good type if the data is correct. None otherwise. 

    +

            :rtype: variable 

    +

     

    +

            """ 

    +

            if self.is_read_only: 

    +

                return None 

    +

            new_data = None 

    +

            logger.debug("check_data type :%s", self.type) 

    +

            if self.type == "Bool": 

    +

                new_data = data 

    +

                if isinstance(data, basestring): 

    +

                    if data == "False" or data == "false" or data == "0": 

    +

                        new_data = False 

    +

                    else: 

    +

                        new_data = True 

    +

            elif self.type == "Byte": 

    +

                try: 

    +

                    new_data = int(data) 

    +

                except: 

    +

                    new_data = None 

    +

                if new_data is not None: 

    +

                    if new_data < 0: 

    +

                        new_data = 0 

    +

                    elif new_data > 255: 

    +

                        new_data = 255 

    +

            elif self.type == "Decimal": 

                try: 

    -

                    new_data = int(data) 

    +

                    new_data = float(data) 

                except: 

                    new_data = None 

    -

                if new_data is not None: 

    -

                    if new_data < -2147483648: 

    -

                        new_data = -2147483648 

    -

                    elif new_data > 2147483647: 

    -

                        new_data = 2147483647 

    -

            elif self.type == "Short": 

    -

                try: 

    -

                    new_data = int(data) 

    -

                except: 

    -

                    new_data = None 

    -

                if new_data is not None: 

    -

                    if new_data < -32768: 

    -

                        new_data = -32768 

    -

                    elif new_data > 32767: 

    -

                        new_data = 32767 

    -

            elif self.type == "String": 

    -

                new_data = data 

    -

            elif self.type == "Button": 

    -

                new_data = data 

    -

                if isinstance(data, basestring): 

    -

                    if data == "False" or data == "false" or data == "0": 

    -

                        new_data = False 

    -

                    else: 

    -

                        new_data = True 

    -

            elif self.type == "List": 

    -

                if isinstance(data, basestring): 

    -

                    if data in self.data_items: 

    -

                        new_data = data 

    -

                    else: 

    -

                        new_data = None 

    -

            return new_data 

    -

     

    -

        @property 

    -

        def is_set(self): 

    -

            """ 

    -

            Test whether the value has been set. 

    +

            elif self.type == "Int": 

    +

                try: 

    +

                    new_data = int(data) 

    +

                except: 

    +

                    new_data = None 

    +

                if new_data is not None: 

    +

                    if new_data < -2147483648: 

    +

                        new_data = -2147483648 

    +

                    elif new_data > 2147483647: 

    +

                        new_data = 2147483647 

    +

            elif self.type == "Short": 

    +

                try: 

    +

                    new_data = int(data) 

    +

                except: 

    +

                    new_data = None 

    +

                if new_data is not None: 

    +

                    if new_data < -32768: 

    +

                        new_data = -32768 

    +

                    elif new_data > 32767: 

    +

                        new_data = 32767 

    +

            elif self.type == "String": 

    +

                new_data = data 

    +

            elif self.type == "Button": 

    +

                new_data = data 

    +

                if isinstance(data, basestring): 

    +

                    if data == "False" or data == "false" or data == "0": 

    +

                        new_data = False 

    +

                    else: 

    +

                        new_data = True 

    +

            elif self.type == "List": 

    +

                if isinstance(data, basestring): 

    +

                    if data in self.data_items: 

    +

                        new_data = data 

    +

                    else: 

    +

                        new_data = None 

    +

            return new_data 

     

    -

            :return: True if the value has actually been set by a status message 

    -

                     from the device, rather than simply being the default. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isValueSet(self.value_id) 

    -

     

    -

        @property 

    -

        def is_read_only(self): 

    -

            """ 

    -

            Test whether the value is read-only. 

    +

        @property 

    +

        def is_set(self): 

    +

            """ 

    +

            Test whether the value has been set. 

    +

     

    +

            :return: True if the value has actually been set by a status message 

    +

                     from the device, rather than simply being the default. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isValueSet(self.value_id) 

     

    -

            :return: True if the value cannot be changed by the user. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isValueReadOnly(self.value_id) 

    -

     

    -

        @property 

    -

        def is_write_only(self): 

    -

            """ 

    -

            Test whether the value is write-only. 

    +

        @property 

    +

        def is_read_only(self): 

    +

            """ 

    +

            Test whether the value is read-only. 

    +

     

    +

            :return: True if the value cannot be changed by the user. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isValueReadOnly(self.value_id) 

     

    -

            :return: True if the value can only be written to and not read. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isValueWriteOnly(self.value_id) 

    -

     

    -

        def enable_poll(self, intensity=1): 

    -

            """ 

    -

            Enable the polling of a device's state. 

    -

     

    -

            :param intensity: The intensity of the poll 

    -

            :type intensity: int 

    -

            :return: True if polling was enabled. 

    -

            :rtype: bool 

    +

        @property 

    +

        def is_write_only(self): 

    +

            """ 

    +

            Test whether the value is write-only. 

    +

     

    +

            :return: True if the value can only be written to and not read. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isValueWriteOnly(self.value_id) 

    +

     

    +

        def enable_poll(self, intensity=1): 

    +

            """ 

    +

            Enable the polling of a device's state. 

     

    -

            """ 

    -

            return self._network.manager.enablePoll(self.value_id, intensity) 

    -

     

    -

        def disable_poll(self): 

    -

            """ 

    -

            Disable poll off this value. 

    -

     

    -

            :return: True if polling was disabled. 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.disablePoll(self.value_id) 

    -

     

    -

        @property 

    -

        def poll_intensity(self): 

    -

            """ 

    -

            The poll intensity of the value. 

    +

            :param intensity: The intensity of the poll 

    +

            :type intensity: int 

    +

            :return: True if polling was enabled. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.enablePoll(self.value_id, intensity) 

    +

     

    +

        def disable_poll(self): 

    +

            """ 

    +

            Disable poll off this value. 

    +

     

    +

            :return: True if polling was disabled. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.disablePoll(self.value_id) 

     

    -

            :returns: 0=none, 1=every time through the list, 2-every other time, etc 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            #always ask to manager to get poll intensity 

    -

            return self._network.manager.getPollIntensity(self.value_id) 

    -

     

    -

        @property 

    -

        def is_polled(self): 

    -

            """ 

    -

            Verify that the value is polled. 

    +

        @property 

    +

        def poll_intensity(self): 

    +

            """ 

    +

            The poll intensity of the value. 

    +

     

    +

            :returns: 0=none, 1=every time through the list, 2-every other time, etc 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            #always ask to manager to get poll intensity 

    +

            return self._network.manager.getPollIntensity(self.value_id) 

     

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.isPolled(self.value_id) 

    +

        @property 

    +

        def is_polled(self): 

    +

            """ 

    +

            Verify that the value is polled. 

     

    -

        @property 

    -

        def command_class(self): 

    -

            """ 

    -

            The command class of the value. 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.isPolled(self.value_id) 

     

    -

            :returns: The command class of this value 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueCommandClass(self.value_id) 

    -

     

    -

        def refresh(self): 

    -

            """ 

    -

            Refresh the value. 

    -

     

    -

            :returns: True if the command was transmitted to controller 

    -

            :rtype: bool 

    -

     

    -

            """ 

    -

            return self._network.manager.refreshValue(self.value_id) 

    -

     

    -

        @property 

    -

        def precision(self): 

    -

            """ 

    -

            Gets a float value's precision. 

    +

        @property 

    +

        def command_class(self): 

    +

            """ 

    +

            The command class of the value. 

    +

     

    +

            :returns: The command class of this value 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueCommandClass(self.value_id) 

    +

     

    +

        def refresh(self): 

    +

            """ 

    +

            Refresh the value. 

    +

     

    +

            :returns: True if the command was transmitted to controller 

    +

            :rtype: bool 

    +

     

    +

            """ 

    +

            return self._network.manager.refreshValue(self.value_id) 

     

    -

            :returns: a float value's precision 

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._network.manager.getValueFloatPrecision(self.value_id) 

    -

     

    -

        def is_change_verified(self): 

    -

            """ 

    -

            determine if value changes upon a refresh should be verified. 

    -

            If so, the library will immediately refresh the value a second time whenever a change is observed. 

    -

            This helps to filter out spurious data reported occasionally by some devices. 

    -

            """ 

    -

            return self._network.manager.getChangeVerified(self.value_id) 

    -

     

    -

     

    -

        def set_change_verified(self, verify): 

    -

            """ 

    -

            Sets a flag indicating whether value changes noted upon a refresh should be verified. 

    +

        @property 

    +

        def precision(self): 

    +

            """ 

    +

            Gets a float value's precision. 

    +

     

    +

            :returns: a float value's precision 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._network.manager.getValueFloatPrecision(self.value_id) 

    +

     

    +

        def is_change_verified(self): 

    +

            """ 

    +

            determine if value changes upon a refresh should be verified. 

    +

            If so, the library will immediately refresh the value a second time whenever a change is observed. 

    +

            This helps to filter out spurious data reported occasionally by some devices. 

    +

            """ 

    +

            return self._network.manager.getChangeVerified(self.value_id) 

     

    -

            If so, the library will immediately refresh the value a second time whenever a change is observed. 

    -

            This helps to filter out spurious data reported occasionally by some devices. 

    -

     

    -

            :param verify: if true, verify changes; if false, don't verify changes. 

    -

            :type verify: bool 

    -

            """ 

    -

            logger.debug('Set change verified %s for valueId [%s]', verify, self.value_id) 

    -

            self._network.manager.setChangeVerified(self.value_id, verify) 

    -

     

    -

        def to_dict(self): 

    -

            """ 

    -

            Return a dict representation of the value. 

    -

     

    -

            :rtype: dict() 

    -

     

    -

            """ 

    -

            ret={} 

    -

            ret['label'] = self.label 

    -

            ret['value_id'] = self.value_id 

    -

            ret['node_id'] = self.node.node_id 

    -

            ret['units'] = self.units 

    -

            ret['data'] = self.data 

    -

            return ret 

    +

     

    +

        def set_change_verified(self, verify): 

    +

            """ 

    +

            Sets a flag indicating whether value changes noted upon a refresh should be verified. 

    +

     

    +

            If so, the library will immediately refresh the value a second time whenever a change is observed. 

    +

            This helps to filter out spurious data reported occasionally by some devices. 

    +

     

    +

            :param verify: if true, verify changes; if false, don't verify changes. 

    +

            :type verify: bool 

    +

            """ 

    +

            logger.debug('Set change verified %s for valueId [%s]', verify, self.value_id) 

    +

            self._network.manager.setChangeVerified(self.value_id, verify) 

    +

     

    +

        def to_dict(self, extras=['all']): 

    +

            """ 

    +

            Return a dict representation of the node. 

    +

     

    +

            :param extras: The extra inforamtions to add 

    +

            :type extras: [] 

    +

            :returns: A dict 

    +

            :rtype: dict() 

    +

     

    +

            """ 

    +

            if 'all' in extras: 

    +

                    extras = ['kvals'] 

    +

            ret={} 

    +

            ret['label'] = self.label 

    +

            ret['value_id'] = self.value_id 

    +

            ret['node_id'] = self.node.node_id 

    +

            ret['units'] = self.units 

    +

            ret['genre'] = self.genre 

    +

            ret['data'] = self.data 

    +

            if 'kvals' in extras and self.network.dbcon is not None: 

    +

                vals = self.kvals 

    +

                for key in vals.keys(): 

    +

                    ret[key]=vals[key] 

    +

            return ret 

    @@ -675,557 +680,562 @@

     

    __author__ = 'bibi21000' 

     

    -

    from select import select 

    -

    import sys 

    -

    import os 

    -

    import urwid 

    -

    from urwid.raw_display import Screen 

    -

    #import headerpanel 

    -

    #import dirpanel 

    -

    #import setuppanel 

    -

    from traceback import format_exc 

    -

    #from ucp import UrwidCmdProc, isUCP 

    -

    #from utils import utilInit, log 

    -

    from openzwave.node import ZWaveNode 

    -

    from openzwave.value import ZWaveValue 

    -

    from openzwave.scene import ZWaveScene 

    -

    from openzwave.controller import ZWaveController 

    -

    from openzwave.network import ZWaveNetwork 

    -

    from openzwave.option import ZWaveOption 

    -

    from pyozwman.ozwsh_widgets import OldestTree 

    -

    from pyozwman.ozwsh_widgets import RootTree, RootBox, RootItem, RootDir 

    -

    from pyozwman.ozwsh_widgets import ControllerTree, ControllerBox 

    -

    from pyozwman.ozwsh_widgets import NodeTree, NodeBox 

    -

    from pyozwman.ozwsh_widgets import NodesTree, NodesBox, NodesItem 

    -

    from pyozwman.ozwsh_widgets import SensorsTree, SensorsBox, SensorsItem 

    -

    from pyozwman.ozwsh_widgets import SwitchesTree, SwitchesBox, SwitchesItem 

    -

    from pyozwman.ozwsh_widgets import DimmersTree, DimmersBox 

    -

    from pyozwman.ozwsh_widgets import ValuesTree, ValuesBox, ValuesItem 

    -

    from pyozwman.ozwsh_widgets import GroupsTree, GroupsBox, AssociationItem 

    -

    from pyozwman.ozwsh_widgets import SceneTree, SceneBox, SceneItem 

    -

    from pyozwman.ozwsh_widgets import ScenesTree, ScenesBox, ScenesItem 

    -

    from pyozwman.ozwsh_widgets import StatTree, StatBox 

    -

     

    -

    from louie import dispatcher, All 

    -

    import logging 

    -

     

    -

    MAIN_TITLE = "openzwave Shell" 

    -

    """ 

    -

    /nodes 

    -

        node_id/ 

    -

            name 

    -

            ... 

    -

            commands/ 

    -

                command_id/ 

    -

                    name 

    -

                    value_1/ 

    -

                        min 

    -

                        max 

    -

                        items 

    -

                        ... 

    -

                    value_2/ 

    -

                    value_3/ 

    -

                    value_4/ 

    -

            switches/ 

    -

            sensors/ 

    -

     

    -

    /scenes 

    -

    /controller 

    -

     

    -

    """ 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    from select import select 

    +

    import sys 

    +

    import os 

    +

    import urwid 

    +

    from urwid.raw_display import Screen 

    +

    #import headerpanel 

    +

    #import dirpanel 

    +

    #import setuppanel 

    +

    from traceback import format_exc 

    +

    #from ucp import UrwidCmdProc, isUCP 

    +

    #from utils import utilInit, log 

    +

    from openzwave.node import ZWaveNode 

    +

    from openzwave.value import ZWaveValue 

    +

    from openzwave.scene import ZWaveScene 

    +

    from openzwave.controller import ZWaveController 

    +

    from openzwave.network import ZWaveNetwork 

    +

    from openzwave.option import ZWaveOption 

    +

    from pyozwman.ozwsh_widgets import OldestTree 

    +

    from pyozwman.ozwsh_widgets import RootTree, RootBox, RootItem, RootDir 

    +

    from pyozwman.ozwsh_widgets import ControllerTree, ControllerBox 

    +

    from pyozwman.ozwsh_widgets import NodeTree, NodeBox 

    +

    from pyozwman.ozwsh_widgets import NodesTree, NodesBox, NodesItem 

    +

    from pyozwman.ozwsh_widgets import SensorsTree, SensorsBox, SensorsItem 

    +

    from pyozwman.ozwsh_widgets import SwitchesTree, SwitchesBox, SwitchesItem 

    +

    from pyozwman.ozwsh_widgets import DimmersTree, DimmersBox 

    +

    from pyozwman.ozwsh_widgets import ValuesTree, ValuesBox, ValuesItem 

    +

    from pyozwman.ozwsh_widgets import GroupsTree, GroupsBox, AssociationItem 

    +

    from pyozwman.ozwsh_widgets import SceneTree, SceneBox, SceneItem 

    +

    from pyozwman.ozwsh_widgets import ScenesTree, ScenesBox, ScenesItem 

    +

    from pyozwman.ozwsh_widgets import StatTree, StatBox 

    +

     

    +

    from louie import dispatcher, All 

    +

    import logging 

    +

     

    +

    MAIN_TITLE = "openzwave Shell" 

    +

    """ 

    +

    /nodes 

    +

        node_id/ 

    +

            name 

    +

            ... 

    +

            commands/ 

    +

                command_id/ 

    +

                    name 

    +

                    value_1/ 

    +

                        min 

    +

                        max 

    +

                        items 

    +

                        ... 

    +

                    value_2/ 

    +

                    value_3/ 

    +

                    value_4/ 

    +

            switches/ 

    +

            sensors/ 

     

    -

    class StatusBar(urwid.WidgetWrap): 

    -

        def __init__(self, window): 

    -

            self.window = window 

    -

            self.statusbar = "%s" 

    -

            self.statusbar_urwid = urwid.Text(self.statusbar % "", wrap='clip') 

    -

            self.cmd = "$ %s" 

    -

            self.cmd_urwid = urwid.Edit(self.cmd % "") 

    -

            display_widget = urwid.Pile([ \ 

    -

                urwid.Divider("-"), 

    -

                self.statusbar_urwid, \ 

    -

                urwid.Divider("-"), 

    -

                self.cmd_urwid, \ 

    -

                ]) 

    -

            urwid.WidgetWrap.__init__(self, display_widget) 

    -

     

    -

        def update(self, status=None, cmd=None): 

    -

            if status != None: 

    -

                self.statusbar_urwid.set_text(self.statusbar % status) 

    -

            if cmd != None: 

    -

                self.set_command(cmd) 

    -

     

    -

        def get_command(self): 

    -

            return self.cmd_urwid.get_edit_text() 

    -

     

    -

        def set_command(self, cmd): 

    -

            self.cmd_urwid.set_edit_text(cmd) 

    -

     

    -

    class HeaderBar(urwid.WidgetWrap): 

    -

        def __init__(self, window): 

    -

            self.window = window 

    -

            self.cwd = "Path : %s" 

    -

            self.cwd_urwid = urwid.Text(self.cwd % "") 

    -

            display_widget = urwid.Pile([ \ 

    -

                urwid.AttrWrap(urwid.Text(MAIN_TITLE), 'header'),\ 

    -

                urwid.Divider("-"), \ 

    -

                self.cwd_urwid, \ 

    -

                urwid.Divider("-"), \ 

    -

                ]) 

    -

            urwid.WidgetWrap.__init__(self, display_widget) 

    -

     

    -

        def update(self, cwd=None): 

    -

            if cwd != None: 

    -

                self.cwd_urwid.set_text(self.cwd % cwd) 

    -

     

    -

    class MainWindow(Screen): 

    -

        def __init__(self, device=None, footer=True, loglevel="Info", user_path=".", config_path=None): 

    -

            Screen.__init__(self) 

    -

            self.device = device 

    -

            self.footer_display = footer 

    -

            self.loglevel = logging.INFO 

    -

            self.loglevel_ow = loglevel 

    -

            self.user_path = user_path 

    -

            self.config_path = config_path 

    -

            self._define_log() 

    -

            self._define_screen() 

    -

            self._connect_louie() 

    -

            self._start_network() 

    -

     

    -

        def _define_log(self): 

    -

            hdlr = logging.FileHandler('ozwsh.log') 

    -

            formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 

    -

            hdlr.setFormatter(formatter) 

    -

            if self.loglevel_ow == "Debug": 

    -

                self.loglevel = logging.DEBUG 

    -

            ozwlog = logging.getLogger('openzwave') 

    -

            ozwlog.setLevel(self.loglevel) 

    -

            ozwlog.addHandler(hdlr) 

    -

            lozwlog = logging.getLogger('libopenzwave') 

    -

            lozwlog.setLevel(self.loglevel) 

    -

            lozwlog.addHandler(hdlr) 

    -

            self.log = logging.getLogger('pyozwman') 

    -

            self.log.setLevel(self.loglevel) 

    -

            self.log.addHandler(hdlr) 

    -

            self.log.info("="*15 + " start " + "="*15) 

    -

     

    -

        def _define_screen(self): 

    -

            self._palette = [("title", "yellow", "dark cyan"), 

    -

            ("keys", "dark blue", "light gray"), 

    -

            ("message", "light cyan", "dark green"), 

    -

            ("linenr", "light blue", "dark cyan"), 

    -

            ("input", "light gray", "black"), 

    -

            ("input2", "dark red", "light gray"), 

    -

            ("focus", "black", "light gray", "bold"), 

    -

            ("dialog", "black", "light gray", "bold"), 

    -

            ("file", "light green", "dark blue"), 

    -

            ("errortxt", "dark red", "dark blue"), 

    -

            ("selectedfile", "yellow", "dark blue"), 

    -

            ("selectedfocus", "yellow", "light gray", "bold"), 

    -

            ("dir", "light gray", "dark blue"), 

    -

            ("fileedit", "light green", "dark red"), 

    -

            ('edit', 'yellow', 'dark blue'), 

    -

            ('body','default', 'default'), 

    -

            ('foot','dark cyan', 'dark blue', 'bold'), 

    -

            ('shadow','white','black'), 

    -

            ('border','black','dark blue'), 

    -

            ('error','black','dark red'), 

    -

            ('FxKey','light cyan', 'dark blue', 'underline')] 

    -

            self.network = None 

    -

            self.controller = None 

    -

            self.root_box = RootBox(self, None, "body") 

    -

            self.stat_box = StatBox(self, self.root_box, "body") 

    -

            self.controller_box = ControllerBox(self, self.root_box, "body") 

    -

            self.scenes_box = ScenesBox(self, self.root_box, "body") 

    -

            self.scene_box = SceneBox(self, self.scenes_box, "body") 

    -

            self.nodes_box = NodesBox(self, self.root_box, "body") 

    -

            self.switches_box = SwitchesBox(self, self.nodes_box, "body") 

    -

            self.dimmers_box = DimmersBox(self, self.nodes_box, "body") 

    -

            self.sensors_box = SensorsBox(self, self.nodes_box, "body") 

    -

            self.node_box = NodeBox(self, self.nodes_box, "body") 

    -

            self.values_box = ValuesBox(self, self.node_box, "body") 

    -

            self.groups_box = GroupsBox(self, self.node_box, "body") 

    -

     

    -

            self.status_bar = StatusBar(self) 

    -

            self.header_bar = HeaderBar(self) 

    -

     

    -

            self.framefocus = 'footer' 

    +

    /scenes 

    +

    /controller 

    +

     

    +

    """ 

    +

     

    +

    class StatusBar(urwid.WidgetWrap): 

    +

        def __init__(self, window): 

    +

            self.window = window 

    +

            self.statusbar = "%s" 

    +

            self.statusbar_urwid = urwid.Text(self.statusbar % "", wrap='clip') 

    +

            self.cmd = "$ %s" 

    +

            self.cmd_urwid = urwid.Edit(self.cmd % "") 

    +

            display_widget = urwid.Pile([ \ 

    +

                urwid.Divider("-"), 

    +

                self.statusbar_urwid, \ 

    +

                urwid.Divider("-"), 

    +

                self.cmd_urwid, \ 

    +

                ]) 

    +

            urwid.WidgetWrap.__init__(self, display_widget) 

    +

     

    +

        def update(self, status=None, cmd=None): 

    +

            if status != None: 

    +

                self.statusbar_urwid.set_text(self.statusbar % status) 

    +

            if cmd != None: 

    +

                self.set_command(cmd) 

    +

     

    +

        def get_command(self): 

    +

            return self.cmd_urwid.get_edit_text() 

    +

     

    +

        def set_command(self, cmd): 

    +

            self.cmd_urwid.set_edit_text(cmd) 

    +

     

    +

    class HeaderBar(urwid.WidgetWrap): 

    +

        def __init__(self, window): 

    +

            self.window = window 

    +

            self.cwd = "Path : %s" 

    +

            self.cwd_urwid = urwid.Text(self.cwd % "") 

    +

            display_widget = urwid.Pile([ \ 

    +

                urwid.AttrWrap(urwid.Text(MAIN_TITLE), 'header'),\ 

    +

                urwid.Divider("-"), \ 

    +

                self.cwd_urwid, \ 

    +

                urwid.Divider("-"), \ 

    +

                ]) 

    +

            urwid.WidgetWrap.__init__(self, display_widget) 

    +

     

    +

        def update(self, cwd=None): 

    +

            if cwd != None: 

    +

                self.cwd_urwid.set_text(self.cwd % cwd) 

    +

     

    +

    class MainWindow(Screen): 

    +

        def __init__(self, device=None, footer=True, loglevel="Info", user_path=".", config_path=None): 

    +

            Screen.__init__(self) 

    +

            self.device = device 

    +

            self.footer_display = footer 

    +

            self.loglevel = logging.INFO 

    +

            self.loglevel_ow = loglevel 

    +

            self.user_path = user_path 

    +

            self.config_path = config_path 

    +

            self._define_log() 

    +

            self._define_screen() 

    +

            self._connect_louie() 

    +

            self._start_network() 

    +

     

    +

        def _define_log(self): 

    +

            hdlr = logging.FileHandler('ozwsh.log') 

    +

            formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 

    +

            hdlr.setFormatter(formatter) 

    +

            if self.loglevel_ow == "Debug": 

    +

                self.loglevel = logging.DEBUG 

    +

            ozwlog = logging.getLogger('openzwave') 

    +

            ozwlog.setLevel(self.loglevel) 

    +

            ozwlog.addHandler(hdlr) 

    +

            lozwlog = logging.getLogger('libopenzwave') 

    +

            lozwlog.setLevel(self.loglevel) 

    +

            lozwlog.addHandler(hdlr) 

    +

            self.log = logging.getLogger('pyozwman') 

    +

            self.log.setLevel(self.loglevel) 

    +

            self.log.addHandler(hdlr) 

    +

            self.log.info("="*15 + " start " + "="*15) 

    +

     

    +

        def _define_screen(self): 

    +

            self._palette = [("title", "yellow", "dark cyan"), 

    +

            ("keys", "dark blue", "light gray"), 

    +

            ("message", "light cyan", "dark green"), 

    +

            ("linenr", "light blue", "dark cyan"), 

    +

            ("input", "light gray", "black"), 

    +

            ("input2", "dark red", "light gray"), 

    +

            ("focus", "black", "light gray", "bold"), 

    +

            ("dialog", "black", "light gray", "bold"), 

    +

            ("file", "light green", "dark blue"), 

    +

            ("errortxt", "dark red", "dark blue"), 

    +

            ("selectedfile", "yellow", "dark blue"), 

    +

            ("selectedfocus", "yellow", "light gray", "bold"), 

    +

            ("dir", "light gray", "dark blue"), 

    +

            ("fileedit", "light green", "dark red"), 

    +

            ('edit', 'yellow', 'dark blue'), 

    +

            ('body','default', 'default'), 

    +

            ('foot','dark cyan', 'dark blue', 'bold'), 

    +

            ('shadow','white','black'), 

    +

            ('border','black','dark blue'), 

    +

            ('error','black','dark red'), 

    +

            ('FxKey','light cyan', 'dark blue', 'underline')] 

    +

            self.network = None 

    +

            self.controller = None 

    +

            self.root_box = RootBox(self, None, "body") 

    +

            self.stat_box = StatBox(self, self.root_box, "body") 

    +

            self.controller_box = ControllerBox(self, self.root_box, "body") 

    +

            self.scenes_box = ScenesBox(self, self.root_box, "body") 

    +

            self.scene_box = SceneBox(self, self.scenes_box, "body") 

    +

            self.nodes_box = NodesBox(self, self.root_box, "body") 

    +

            self.switches_box = SwitchesBox(self, self.nodes_box, "body") 

    +

            self.dimmers_box = DimmersBox(self, self.nodes_box, "body") 

    +

            self.sensors_box = SensorsBox(self, self.nodes_box, "body") 

    +

            self.node_box = NodeBox(self, self.nodes_box, "body") 

    +

            self.values_box = ValuesBox(self, self.node_box, "body") 

    +

            self.groups_box = GroupsBox(self, self.node_box, "body") 

     

    -

            self._active_box = self.root_box 

    -

            self.frame = urwid.Frame(urwid.AttrWrap(self.active_box, 'body'), \ 

    -

                header=self.header_bar,\ 

    -

                footer=self.status_bar, \ 

    -

                focus_part=self.framefocus) 

    -

            self.active_box = self.root_box 

    -

     

    -

            self.loop = urwid.MainLoop(self.frame, \ 

    -

                self._palette, \ 

    -

                unhandled_input=self._unhandled_input) 

    -

     

    -

        @property 

    -

        def active_box(self): 

    -

            """ 

    -

            Gets the number of association groups reported by this node. 

    +

            self.status_bar = StatusBar(self) 

    +

            self.header_bar = HeaderBar(self) 

    +

     

    +

            self.framefocus = 'footer' 

    +

     

    +

            self._active_box = self.root_box 

    +

            self.frame = urwid.Frame(urwid.AttrWrap(self.active_box, 'body'), \ 

    +

                header=self.header_bar,\ 

    +

                footer=self.status_bar, \ 

    +

                focus_part=self.framefocus) 

    +

            self.active_box = self.root_box 

    +

     

    +

            self.loop = urwid.MainLoop(self.frame, \ 

    +

                self._palette, \ 

    +

                unhandled_input=self._unhandled_input) 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            return self._active_box 

    +

        @property 

    +

        def active_box(self): 

    +

            """ 

    +

            Gets the number of association groups reported by this node. 

     

    -

        @active_box.setter 

    -

        def active_box(self,value): 

    -

            """ 

    -

            Gets the number of association groups reported by this node. 

    +

            :rtype: int 

    +

     

    +

            """ 

    +

            return self._active_box 

     

    -

            :rtype: int 

    -

     

    -

            """ 

    -

            self._active_box = value 

    -

            self.frame.set_body(self._active_box) 

    -

            self.header_bar.update(self._active_box.walker.fullpath()) 

    +

        @active_box.setter 

    +

        def active_box(self,value): 

    +

            """ 

    +

            Gets the number of association groups reported by this node. 

    +

     

    +

            :rtype: int 

     

    -

        def exit(self): 

    -

            """ 

    -

            Quit the programm 

    -

            Clean network properly and exit 

    +

            """ 

    +

            self._active_box = value 

    +

            self.frame.set_body(self._active_box) 

    +

            self.header_bar.update(self._active_box.walker.fullpath()) 

     

    -

            """ 

    -

            self.network.write_config() 

    -

            self.network.stop() 

    -

            self.options.destroy() 

    -

            raise urwid.ExitMainLoop() 

    -

     

    -

        def execute(self, command): 

    -

            """ 

    -

            Parse an execute a commande 

    -

            """ 

    -

            #if wait_for_network == True: 

    -

            #    self.status_bar.set_command("Network is not ready. Please wait.") 

    -

            #    return True 

    -

            command = command.strip() 

    -

            if command.startswith('ls') : 

    -

                if ' ' in command : 

    -

                    cmd,options = command.split(' ') 

    -

                else: 

    -

                    options = "" 

    -

                options = options.strip() 

    -

                self.active_box.walker.ls(options) 

    -

                self.status_bar.set_command("") 

    -

                return True 

    -

            elif command.startswith('exit') : 

    -

                self.exit() 

    -

            elif command.startswith('cd') : 

    -

                if ' ' in command : 

    -

                    cmd,path = command.split(' ',1) 

    -

                else: 

    -

                    path = "/" 

    -

                path = path.strip() 

    -

                if self.active_box.walker.exist(path): 

    -

                    self.active_box = self.active_box.walker.cd(path) 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    self.log.info(" self.active_box %s" %  self.active_box.walker.path) 

    -

                    return True 

    -

                elif path == "/" : 

    -

                    self.active_box = self.root_box 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    self.log.info(" self.active_box %s" %  self.active_box.walker.path) 

    -

                    return True 

    -

                else: 

    -

                    self.status_bar.update(status='Unknown directory "%s"' % path) 

    -

                    return False 

    -

            elif command.startswith('send') : 

    -

                if ' ' in command : 

    -

                    cmd,value = command.split(' ',1) 

    -

                else: 

    -

                    self.status_bar.update(status='Usage : send <command>') 

    -

                    return False 

    -

                value = value.strip() 

    -

                if len(value) == 0 : 

    -

                    self.status_bar.update(status='Usage : send <command>') 

    -

                    return False 

    -

                if self.active_box.walker.send(value): 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    return True 

    -

                else : 

    -

                    return False 

    -

            elif command.startswith('create') : 

    -

                if ' ' in command : 

    -

                    cmd,value = command.split(' ',1) 

    -

                else: 

    -

                    self.status_bar.update(status='Usage : create <value>') 

    -

                    return False 

    -

                value = value.strip() 

    -

                if len(value) == 0 : 

    -

                    self.status_bar.update(status='Usage : create <value>') 

    -

                    return False 

    -

                if self.active_box.walker.create(value): 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    return True 

    -

                else : 

    -

                    return False 

    -

            elif command.startswith('delete') : 

    -

                if ' ' in command : 

    -

                    cmd,value = command.split(' ',1) 

    -

                else: 

    -

                    self.status_bar.update(status='Usage : delete <value>') 

    -

                    return False 

    -

                value = value.strip() 

    -

                if len(value) == 0 : 

    -

                    self.status_bar.update(status='Usage : delete <value>') 

    -

                    return False 

    -

                if self.active_box.walker.delete(value): 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    return True 

    -

                else : 

    -

                    return False 

    -

            elif command.startswith('activate') : 

    -

                if ' ' in command : 

    -

                    cmd,value = command.split(' ',1) 

    -

                else: 

    -

                    self.status_bar.update(status='Usage : activate <value>') 

    -

                    return False 

    -

                value = value.strip() 

    -

                if len(value) == 0 : 

    -

                    self.status_bar.update(status='Usage : activate <value>') 

    -

                    return False 

    -

                if self.active_box.walker.activate(value): 

    -

                    self.active_box.walker.ls("") 

    -

                    self.status_bar.set_command("") 

    -

                    return True 

    -

                else : 

    -

                    return False 

    -

            elif command.startswith('set') : 

    -

                if ' ' in command : 

    -

                    cmd,end = command.split(' ',1) 

    -

                    if len(end) == 0 or ' ' not in end : 

    -

                        self.status_bar.update(status='Usage : set <field> to <value>') 

    -

                        return False 

    -

                    end = end.strip() 

    -

                    field,end = end.split(' ',1) 

    +

        def exit(self): 

    +

            """ 

    +

            Quit the programm 

    +

            Clean network properly and exit 

    +

     

    +

            """ 

    +

            self.network.write_config() 

    +

            self.network.stop() 

    +

            self.options.destroy() 

    +

            raise urwid.ExitMainLoop() 

    +

     

    +

        def execute(self, command): 

    +

            """ 

    +

            Parse an execute a commande 

    +

            """ 

    +

            #if wait_for_network == True: 

    +

            #    self.status_bar.set_command("Network is not ready. Please wait.") 

    +

            #    return True 

    +

            command = command.strip() 

    +

            if command.startswith('ls') : 

    +

                if ' ' in command : 

    +

                    cmd,options = command.split(' ') 

    +

                else: 

    +

                    options = "" 

    +

                options = options.strip() 

    +

                self.active_box.walker.ls(options) 

    +

                self.status_bar.set_command("") 

    +

                return True 

    +

            elif command.startswith('exit') : 

    +

                self.exit() 

    +

            elif command.startswith('cd') : 

    +

                if ' ' in command : 

    +

                    cmd,path = command.split(' ',1) 

    +

                else: 

    +

                    path = "/" 

    +

                path = path.strip() 

    +

                if self.active_box.walker.exist(path): 

    +

                    self.active_box = self.active_box.walker.cd(path) 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    self.log.info(" self.active_box %s" %  self.active_box.walker.path) 

    +

                    return True 

    +

                elif path == "/" : 

    +

                    self.active_box = self.root_box 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    self.log.info(" self.active_box %s" %  self.active_box.walker.path) 

    +

                    return True 

    +

                else: 

    +

                    self.status_bar.update(status='Unknown directory "%s"' % path) 

    +

                    return False 

    +

            elif command.startswith('send') : 

    +

                if ' ' in command : 

    +

                    cmd,value = command.split(' ',1) 

    +

                else: 

    +

                    self.status_bar.update(status='Usage : send <command>') 

    +

                    return False 

    +

                value = value.strip() 

    +

                if len(value) == 0 : 

    +

                    self.status_bar.update(status='Usage : send <command>') 

    +

                    return False 

    +

                if self.active_box.walker.send(value): 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    return True 

    +

                else : 

    +

                    return False 

    +

            elif command.startswith('create') : 

    +

                if ' ' in command : 

    +

                    cmd,value = command.split(' ',1) 

    +

                else: 

    +

                    self.status_bar.update(status='Usage : create <value>') 

    +

                    return False 

    +

                value = value.strip() 

    +

                if len(value) == 0 : 

    +

                    self.status_bar.update(status='Usage : create <value>') 

    +

                    return False 

    +

                if self.active_box.walker.create(value): 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    return True 

    +

                else : 

    +

                    return False 

    +

            elif command.startswith('delete') : 

    +

                if ' ' in command : 

    +

                    cmd,value = command.split(' ',1) 

    +

                else: 

    +

                    self.status_bar.update(status='Usage : delete <value>') 

    +

                    return False 

    +

                value = value.strip() 

    +

                if len(value) == 0 : 

    +

                    self.status_bar.update(status='Usage : delete <value>') 

    +

                    return False 

    +

                if self.active_box.walker.delete(value): 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    return True 

    +

                else : 

    +

                    return False 

    +

            elif command.startswith('activate') : 

    +

                if ' ' in command : 

    +

                    cmd,value = command.split(' ',1) 

    +

                else: 

    +

                    self.status_bar.update(status='Usage : activate <value>') 

    +

                    return False 

    +

                value = value.strip() 

    +

                if len(value) == 0 : 

    +

                    self.status_bar.update(status='Usage : activate <value>') 

    +

                    return False 

    +

                if self.active_box.walker.activate(value): 

    +

                    self.active_box.walker.ls("") 

    +

                    self.status_bar.set_command("") 

    +

                    return True 

    +

                else : 

    +

                    return False 

    +

            elif command.startswith('set') : 

    +

                if ' ' in command : 

    +

                    cmd,end = command.split(' ',1) 

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : set <field> to <value>') 

                        return False 

                    end = end.strip() 

    -

                    to,value = end.split(' ',1) 

    -

                    if len(value) == 0 or to != "to"  : 

    +

                    field,end = end.split(' ',1) 

    +

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : set <field> to <value>') 

                        return False 

    -

                    value = value.strip() 

    -

                    if self.active_box.walker.set(field, value): 

    -

                        self.active_box.walker.ls("") 

    -

                        self.status_bar.set_command("") 

    -

                        return True 

    -

                    else : 

    -

                        return False 

    -

                else : 

    -

                    self.status_bar.update(status='Usage : set <field> to <value>') 

    -

                    return False 

    -

            elif command.startswith('poll') : 

    -

                if ' ' in command : 

    -

                    cmd,end = command.split(' ',1) 

    -

                    if len(end) == 0 or ' ' not in end : 

    -

                        self.status_bar.update(status='Usage : poll <value> to <intensity>') 

    -

                        return False 

    -

                    end = end.strip() 

    -

                    field,end = end.split(' ',1) 

    +

                    end = end.strip() 

    +

                    to,value = end.split(' ',1) 

    +

                    if len(value) == 0 or to != "to"  : 

    +

                        self.status_bar.update(status='Usage : set <field> to <value>') 

    +

                        return False 

    +

                    value = value.strip() 

    +

                    if self.active_box.walker.set(field, value): 

    +

                        self.active_box.walker.ls("") 

    +

                        self.status_bar.set_command("") 

    +

                        return True 

    +

                    else : 

    +

                        return False 

    +

                else : 

    +

                    self.status_bar.update(status='Usage : set <field> to <value>') 

    +

                    return False 

    +

            elif command.startswith('poll') : 

    +

                if ' ' in command : 

    +

                    cmd,end = command.split(' ',1) 

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : poll <value> to <intensity>') 

                        return False 

                    end = end.strip() 

    -

                    to,value = end.split(' ',1) 

    -

                    if len(value) == 0 or to != "to"  : 

    +

                    field,end = end.split(' ',1) 

    +

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : poll <value> to <intensity>') 

                        return False 

    -

                    value = value.strip() 

    -

                    if self.active_box.walker.poll(field, value): 

    -

                        self.active_box.walker.ls("") 

    -

                        self.status_bar.set_command("") 

    -

                        return True 

    -

                    else : 

    -

                        return False 

    -

                else : 

    -

                    self.status_bar.update(status='Usage : poll <value> to <intensity>') 

    -

                    return False 

    -

            elif command.startswith('add') : 

    -

                if ' ' in command : 

    -

                    cmd,end = command.split(' ',1) 

    -

                    if len(end) == 0 or ' ' not in end : 

    -

                        self.status_bar.update(status='Usage : add <value> to <list>') 

    -

                        return False 

    -

                    end = end.strip() 

    -

                    field,end = end.split(' ',1) 

    +

                    end = end.strip() 

    +

                    to,value = end.split(' ',1) 

    +

                    if len(value) == 0 or to != "to"  : 

    +

                        self.status_bar.update(status='Usage : poll <value> to <intensity>') 

    +

                        return False 

    +

                    value = value.strip() 

    +

                    if self.active_box.walker.poll(field, value): 

    +

                        self.active_box.walker.ls("") 

    +

                        self.status_bar.set_command("") 

    +

                        return True 

    +

                    else : 

    +

                        return False 

    +

                else : 

    +

                    self.status_bar.update(status='Usage : poll <value> to <intensity>') 

    +

                    return False 

    +

            elif command.startswith('add') : 

    +

                if ' ' in command : 

    +

                    cmd,end = command.split(' ',1) 

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : add <value> to <list>') 

                        return False 

                    end = end.strip() 

    -

                    to,value = end.split(' ',1) 

    -

                    if len(value) == 0 or to != "to"  : 

    +

                    field,end = end.split(' ',1) 

    +

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : add <value> to <list>') 

                        return False 

    -

                    value = value.strip() 

    -

                    if self.active_box.walker.add(value, field): 

    -

                        self.active_box.walker.ls("") 

    -

                        self.status_bar.set_command("") 

    -

                        return True 

    -

                    else : 

    -

                        return False 

    -

                else : 

    -

                    self.status_bar.update(status='Usage : add <value> to <list>') 

    -

                    return False 

    -

            elif command.startswith('remove') : 

    -

                if ' ' in command : 

    -

                    cmd,end = command.split(' ',1) 

    -

                    if len(end) == 0 or ' ' not in end : 

    -

                        self.status_bar.update(status='Usage : remove <value> from <list>') 

    -

                        return False 

    -

                    end = end.strip() 

    -

                    field,end = end.split(' ',1) 

    +

                    end = end.strip() 

    +

                    to,value = end.split(' ',1) 

    +

                    if len(value) == 0 or to != "to"  : 

    +

                        self.status_bar.update(status='Usage : add <value> to <list>') 

    +

                        return False 

    +

                    value = value.strip() 

    +

                    if self.active_box.walker.add(value, field): 

    +

                        self.active_box.walker.ls("") 

    +

                        self.status_bar.set_command("") 

    +

                        return True 

    +

                    else : 

    +

                        return False 

    +

                else : 

    +

                    self.status_bar.update(status='Usage : add <value> to <list>') 

    +

                    return False 

    +

            elif command.startswith('remove') : 

    +

                if ' ' in command : 

    +

                    cmd,end = command.split(' ',1) 

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : remove <value> from <list>') 

                        return False 

                    end = end.strip() 

    -

                    to,value = end.split(' ',1) 

    -

                    if len(value) == 0 or to != "from"  : 

    +

                    field,end = end.split(' ',1) 

    +

                    if len(end) == 0 or ' ' not in end : 

                        self.status_bar.update(status='Usage : remove <value> from <list>') 

                        return False 

    -

                    value = value.strip() 

    -

                    if self.active_box.walker.remove(value, field): 

    -

                        self.active_box.walker.ls("") 

    -

                        self.status_bar.set_command("") 

    -

                        return True 

    -

                    else : 

    -

                        return False 

    -

                else : 

    -

                    self.status_bar.update(status='Usage : remove <value> from <list>') 

    -

                    return False 

    -

            elif command.startswith('reset') : 

    -

                if ' ' in command : 

    -

                    cmd,state = command.split(' ',1) 

    -

                    state = state.strip() 

    -

                    if len(state) == 0 : 

    -

                        self.status_bar.update(status='Usage : reset soft|hard') 

    -

                        return False 

    -

                    if self.active_box.walker.reset(state): 

    -

                        self.active_box.walker.ls("") 

    -

                        self.status_bar.set_command("") 

    -

                        return True 

    -

                    else : 

    -

                        self.status_bar.update(status='Unknowm state "%s"' % state) 

    -

                        return False 

    -

            else: 

    -

                self.status_bar.update(status='Unknown command "%s"' % command) 

    -

                return False 

    -

     

    -

        def _unhandled_input(self, key): 

    -

            if key == 'esc': 

    -

                self.exit() 

    -

            elif key == 'tab' or key == 'shift tab': 

    -

                if self.framefocus == 'footer': 

    -

                    self.framefocus = 'body' 

    -

                else: 

    -

                    self.framefocus = 'footer' 

    -

                self.frame.set_focus(self.framefocus) 

    -

                return True 

    -

            elif key == 'enter': 

    -

                self.log.info('handled: %s' % repr(key)) 

    -

                cmd = self.status_bar.get_command() 

    -

                self.execute(cmd) 

    +

                    end = end.strip() 

    +

                    to,value = end.split(' ',1) 

    +

                    if len(value) == 0 or to != "from"  : 

    +

                        self.status_bar.update(status='Usage : remove <value> from <list>') 

    +

                        return False 

    +

                    value = value.strip() 

    +

                    if self.active_box.walker.remove(value, field): 

    +

                        self.active_box.walker.ls("") 

    +

                        self.status_bar.set_command("") 

    +

                        return True 

    +

                    else : 

    +

                        return False 

    +

                else : 

    +

                    self.status_bar.update(status='Usage : remove <value> from <list>') 

    +

                    return False 

    +

            elif command.startswith('reset') : 

    +

                if ' ' in command : 

    +

                    cmd,state = command.split(' ',1) 

    +

                    state = state.strip() 

    +

                    if len(state) == 0 : 

    +

                        self.status_bar.update(status='Usage : reset soft|hard') 

    +

                        return False 

    +

                    if self.active_box.walker.reset(state): 

    +

                        self.active_box.walker.ls("") 

    +

                        self.status_bar.set_command("") 

    +

                        return True 

    +

                    else : 

    +

                        self.status_bar.update(status='Unknowm state "%s"' % state) 

    +

                        return False 

    +

            else: 

    +

                self.status_bar.update(status='Unknown command "%s"' % command) 

    +

                return False 

    +

     

    +

        def _unhandled_input(self, key): 

    +

            if key == 'esc': 

    +

                self.exit() 

    +

            elif key == 'tab' or key == 'shift tab': 

    +

                if self.framefocus == 'footer': 

    +

                    self.framefocus = 'body' 

    +

                else: 

    +

                    self.framefocus = 'footer' 

    +

                self.frame.set_focus(self.framefocus) 

                return True 

    -

            elif key == 'f5': 

    -

                self.refresh_nodes() 

    -

                return True 

    -

            else: 

    -

                self.log.info('unhandled: %s' % repr(key)) 

    -

     

    -

        def _start_network(self): 

    -

            #Define some manager options 

    -

            self.options = ZWaveOption(self.device, \ 

    -

              config_path=self.config_path, \ 

    -

              user_path=self.user_path, cmd_line="", \ 

    -

              kvals = False) 

    -

            self.options.set_log_file("OZW_Log.log") 

    -

            self.options.set_append_log_file(False) 

    -

            self.options.set_console_output(False) 

    -

            self.options.set_save_log_level(self.loglevel_ow) 

    -

            self.options.set_logging(True) 

    -

            self.options.lock() 

    -

            self.network = ZWaveNetwork(self.options, self.log) 

    -

            self.status_bar.update(status='Start Network') 

    -

     

    -

        def _connect_louie(self): 

    -

            dispatcher.connect(self._louie_network_started, ZWaveNetwork.SIGNAL_NETWORK_STARTED) 

    -

            dispatcher.connect(self._louie_network_resetted, ZWaveNetwork.SIGNAL_NETWORK_RESETTED) 

    -

            dispatcher.connect(self._louie_network_awaked, ZWaveNetwork.SIGNAL_NETWORK_AWAKED) 

    -

            dispatcher.connect(self._louie_network_ready, ZWaveNetwork.SIGNAL_NETWORK_READY) 

    -

            dispatcher.connect(self._louie_network_stopped, ZWaveNetwork.SIGNAL_NETWORK_STOPPED) 

    -

     

    -

        def _louie_network_started(self, network): 

    -

            self.log.info('OpenZWave network is started : homeid %0.8x - %d nodes were found.' % \ 

    -

                (network.home_id, network.nodes_count)) 

    -

            self.network = network 

    -

            self.status_bar.update(status='OpenZWave network is started ... Waiting ...') 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_network_resetted(self, network): 

    -

            self.log.info('OpenZWave network is resetted.') 

    -

            self.network = None 

    -

            #self._disconnect_louie_node_and_value() 

    -

            self.status_bar.update(status='OpenZWave network was resetted ... Waiting ...') 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_network_stopped(self, network): 

    -

            self.log.info('OpenZWave network is stopped.') 

    -

            self.network = None 

    -

            self.status_bar.update(status='OpenZWave network was stopped ... please quit') 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_network_awaked(self, network): 

    -

            self.log.info('OpenZWave network is awaked.') 

    -

            self.network = network 

    -

            self.status_bar.update(status='OpenZWave network is awaked ... Waiting ...') 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_network_ready(self, network): 

    -

            self.log.info('ZWave network is ready : %d nodes were found.' % network.nodes_count) 

    -

            self.log.info('Controller name : %s' % network.controller.node.product_name) 

    -

            self.network = network 

    -

            wait_for_network = False 

    -

            self.status_bar.update(status='ZWave network is ready') 

    -

            self.loop.draw_screen() 

    -

            self._connect_louie_node_and_value() 

    -

     

    -

        def _disconnect_louie_node_and_value(self): 

    -

            #pass 

    -

            dispatcher.disconnect(self._louie_group, ZWaveNetwork.SIGNAL_GROUP) 

    -

            dispatcher.disconnect(self._louie_node_update, ZWaveNetwork.SIGNAL_NODE) 

    -

            dispatcher.disconnect(self._louie_value_update, ZWaveNetwork.SIGNAL_VALUE) 

    -

            dispatcher.disconnect(self._louie_ctrl_message, ZWaveController.SIGNAL_CONTROLLER) 

    -

     

    -

        def _connect_louie_node_and_value(self): 

    -

            #pass 

    -

            dispatcher.connect(self._louie_group, ZWaveNetwork.SIGNAL_GROUP) 

    -

            dispatcher.connect(self._louie_node_update, ZWaveNetwork.SIGNAL_NODE) 

    -

            dispatcher.connect(self._louie_value_update, ZWaveNetwork.SIGNAL_VALUE) 

    -

            dispatcher.connect(self._louie_ctrl_message, ZWaveController.SIGNAL_CONTROLLER) 

    -

     

    -

        def _louie_node_update(self, network, node): 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_value_update(self, network, node, value): 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_group(self, network, node): 

    -

            self.loop.draw_screen() 

    -

     

    -

        def _louie_ctrl_message(self, state, message, network, controller): 

    -

            #self.status_bar.update(status='Message from controller: %s : %s' % (state,message)) 

    -

            self.status_bar.update(status='Message from controller: %s' % (message)) 

    +

            elif key == 'enter': 

    +

                self.log.info('handled: %s' % repr(key)) 

    +

                cmd = self.status_bar.get_command() 

    +

                self.execute(cmd) 

    +

                return True 

    +

            elif key == 'f5': 

    +

                self.refresh_nodes() 

    +

                return True 

    +

            else: 

    +

                self.log.info('unhandled: %s' % repr(key)) 

    +

     

    +

        def _start_network(self): 

    +

            #Define some manager options 

    +

            self.options = ZWaveOption(self.device, \ 

    +

              config_path=self.config_path, \ 

    +

              user_path=self.user_path, cmd_line="", \ 

    +

              kvals = False) 

    +

            self.options.set_log_file("OZW_Log.log") 

    +

            self.options.set_append_log_file(False) 

    +

            self.options.set_console_output(False) 

    +

            self.options.set_save_log_level(self.loglevel_ow) 

    +

            self.options.set_logging(True) 

    +

            self.options.lock() 

    +

            self.network = ZWaveNetwork(self.options, self.log) 

    +

            self.status_bar.update(status='Start Network') 

    +

     

    +

        def _connect_louie(self): 

    +

            dispatcher.connect(self._louie_network_started, ZWaveNetwork.SIGNAL_NETWORK_STARTED) 

    +

            dispatcher.connect(self._louie_network_resetted, ZWaveNetwork.SIGNAL_NETWORK_RESETTED) 

    +

            dispatcher.connect(self._louie_network_awaked, ZWaveNetwork.SIGNAL_NETWORK_AWAKED) 

    +

            dispatcher.connect(self._louie_network_ready, ZWaveNetwork.SIGNAL_NETWORK_READY) 

    +

            dispatcher.connect(self._louie_network_stopped, ZWaveNetwork.SIGNAL_NETWORK_STOPPED) 

    +

     

    +

        def _louie_network_started(self, network): 

    +

            self.log.info('OpenZWave network is started : homeid %0.8x - %d nodes were found.' % \ 

    +

                (network.home_id, network.nodes_count)) 

    +

            self.network = network 

    +

            self.status_bar.update(status='OpenZWave network is started ... Waiting ...') 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_network_resetted(self, network): 

    +

            self.log.info('OpenZWave network is resetted.') 

    +

            self.network = None 

    +

            #self._disconnect_louie_node_and_value() 

    +

            self.status_bar.update(status='OpenZWave network was resetted ... Waiting ...') 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_network_stopped(self, network): 

    +

            self.log.info('OpenZWave network is stopped.') 

    +

            self.network = None 

    +

            self.status_bar.update(status='OpenZWave network was stopped ... please quit') 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_network_awaked(self, network): 

    +

            self.log.info('OpenZWave network is awaked.') 

    +

            self.network = network 

    +

            self.status_bar.update(status='OpenZWave network is awaked ... Waiting ...') 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_network_ready(self, network): 

    +

            self.log.info('ZWave network is ready : %d nodes were found.' % network.nodes_count) 

    +

            self.log.info('Controller name : %s' % network.controller.node.product_name) 

    +

            self.network = network 

    +

            wait_for_network = False 

    +

            self.status_bar.update(status='ZWave network is ready') 

    +

            self.loop.draw_screen() 

    +

            self._connect_louie_node_and_value() 

    +

     

    +

        def _disconnect_louie_node_and_value(self): 

    +

            #pass 

    +

            dispatcher.disconnect(self._louie_group, ZWaveNetwork.SIGNAL_GROUP) 

    +

            dispatcher.disconnect(self._louie_node_update, ZWaveNetwork.SIGNAL_NODE) 

    +

            dispatcher.disconnect(self._louie_value_update, ZWaveNetwork.SIGNAL_VALUE) 

    +

            dispatcher.disconnect(self._louie_ctrl_message, ZWaveController.SIGNAL_CONTROLLER) 

    +

     

    +

        def _connect_louie_node_and_value(self): 

    +

            #pass 

    +

            dispatcher.connect(self._louie_group, ZWaveNetwork.SIGNAL_GROUP) 

    +

            dispatcher.connect(self._louie_node_update, ZWaveNetwork.SIGNAL_NODE) 

    +

            dispatcher.connect(self._louie_value_update, ZWaveNetwork.SIGNAL_VALUE) 

    +

            dispatcher.connect(self._louie_ctrl_message, ZWaveController.SIGNAL_CONTROLLER) 

    +

     

    +

        def _louie_node_update(self, network, node): 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_value_update(self, network, node, value): 

    +

            self.loop.draw_screen() 

    +

     

    +

        def _louie_group(self, network, node): 

            self.loop.draw_screen() 

    +

     

    +

        def _louie_ctrl_message(self, state, message, network, controller): 

    +

            #self.status_bar.update(status='Message from controller: %s : %s' % (state,message)) 

    +

            self.status_bar.update(status='Message from controller: %s' % (message)) 

    +

            self.loop.draw_screen() 

    @@ -348,7 +371,7 @@

        app_.debug = app.config['DEBUG'] 

        app_.testing = app.config['TESTING'] 

        logging.debug("Flask url maps %s" % app.url_map) 

    -

        socketio.run(app, use_reloader=app.config['RELOADER']) 

    +

        socketio.run(app, use_reloader=app.config['RELOADER'],host=app.config['HOST'], port=app.config['PORT']) 

        #print "App has ran" 

        #stop_all() 

     

    @@ -365,89 +388,112 @@

        _app.config.from_object(config_object) 

        global app 

        app = _app 

    -

        import logging.config, yaml 

    -

        logging.config.dictConfig(yaml.load(open(app.config['LOGGING_CONF']))) 

    -

        logging.debug("Load config from %s"%config_object) 

    -

        global fanstatic 

    -

        fanstatic = Fanstatic(app) 

    -

        global socketio 

    -

        socketio = SocketIO(app) 

    -

        if not app.config['DEBUG']: 

    -

            install_secret_key(app) 

    -

        import views 

    -

        from socket import ozwave, chat 

    -

        if not hasattr(app, 'extensions'): 

    -

            app.extensions = {} 

    -

        if 'zwnetwork' not in app.extensions or app.extensions['zwnetwork'] is None: 

    -

            app.extensions['zwnetwork'] = start_zwnetwork(app) 

    -

        return app, socketio 

    -

     

    -

    def start_zwnetwork(app): 

    -

        options = ZWaveOption(device=app.config['ZWAVE_DEVICE'], config_path=app.config['ZWAVE_DIR'], user_path=app.config['USER_DIR']) 

    -

        options.set_log_file("OZW_Log.log") 

    -

        options.set_append_log_file(False) 

    -

        options.set_console_output(False) 

    -

        options.set_save_log_level(app.config['ZWAVE_DEBUG']) 

    -

        options.set_logging(app.config['ZWAVE_LOGGING']) 

    -

        options.lock() 

    -

        zwnetwork = ZWaveNetwork(options) 

    -

        return zwnetwork 

    -

     

    -

    def stop_zwnetwork(zwnetwork): 

    -

        if zwnetwork is not None: 

    -

            zwnetwork.stop() 

    -

            #time.sleep(1.5) 

    -

            zwnetwork = None 

    -

     

    -

    ######################## 

    -

    # Configure Secret Key # 

    -

    ######################## 

    -

    def install_secret_key(app, filename='secret_key'): 

    -

        """Configure the SECRET_KEY from a file 

    -

        in the instance directory. 

    -

     

    -

        If the file does not exist, print instructions 

    -

        to create it from a shell with a random key, 

    -

        then exit. 

    -

        """ 

    -

        filename = os.path.join(app.instance_path, filename) 

    -

     

    -

        try: 

    -

            app.config['SECRET_KEY'] = open(filename, 'rb').read() 

    -

        except IOError: 

    -

            print('Error: No secret key. Create it with:') 

    -

            full_path = os.path.dirname(filename) 

    -

            if not os.path.isdir(full_path): 

    -

                print('mkdir -p {filename}'.format(filename=full_path)) 

    -

            print('head -c 24 /dev/urandom > {filename}'.format(filename=filename)) 

    -

            sys.exit(1) 

    +

        #Logging configuration 

    +

        import logging.config, yaml 

    +

        logs = yaml.load(open(app.config['LOGGING_CONF'])) 

    +

        logging.config.dictConfig(logs) 

    +

        logging.debug("Load config from %s"%config_object) 

    +

        if logs['loggers']['libopenzwave']['level'] == 'DEBUG': 

    +

            ZWAVE_DEBUG = "Debug" 

    +

        elif logs['loggers']['libopenzwave']['level'] == 'ERROR': 

    +

            ZWAVE_DEBUG = "Error" 

    +

        elif logs['loggers']['libopenzwave']['level'] == 'WARNING': 

    +

            ZWAVE_DEBUG = "Warning" 

    +

        else: 

    +

            ZWAVE_DEBUG = "Info" 

    +

        #Application configuration 

    +

        from ConfigParser import SafeConfigParser 

    +

        settings = SafeConfigParser() 

    +

        settings.read(app.config['APP_CONF']) 

    +

        section = "zwave" 

    +

        if settings.has_option(section, 'device'): 

    +

            app.config['ZWAVE_DEVICE'] = settings.get(section, 'device') 

    +

        section = "server" 

    +

        if settings.has_option(section, 'host'): 

    +

            app.config['HOST'] = settings.get(section, 'host') 

    +

        if settings.has_option(section, 'port'): 

    +

            app.config['PORT'] = settings.getint(section, 'port') 

    +

        #Flask stuff 

    +

        global fanstatic 

    +

        fanstatic = Fanstatic(app) 

    +

        global socketio 

    +

        socketio = SocketIO(app) 

    +

        if not app.config['DEBUG']: 

    +

            install_secret_key(app) 

    +

        import views 

    +

        from socket import ozwave, chat 

    +

        if not hasattr(app, 'extensions'): 

    +

            app.extensions = {} 

    +

        if 'zwnetwork' not in app.extensions or app.extensions['zwnetwork'] is None: 

    +

            app.extensions['zwnetwork'] = start_zwnetwork(app) 

    +

        return app, socketio 

    +

     

    +

    def start_zwnetwork(app): 

    +

        options = ZWaveOption(device=app.config['ZWAVE_DEVICE'], config_path=app.config['ZWAVE_DIR'], user_path=app.config['USER_DIR']) 

    +

        options.set_log_file("OZW_Log.log") 

    +

        options.set_append_log_file(False) 

    +

        options.set_console_output(False) 

    +

        options.set_save_log_level(app.config['ZWAVE_DEBUG']) 

    +

        options.set_logging(app.config['ZWAVE_LOGGING']) 

    +

        options.lock() 

    +

        zwnetwork = ZWaveNetwork(options) 

    +

        return zwnetwork 

    +

     

    +

    def stop_zwnetwork(zwnetwork): 

    +

        if zwnetwork is not None: 

    +

            zwnetwork.stop() 

    +

            #time.sleep(1.5) 

    +

            zwnetwork = None 

     

    -

    #from app.users.views import mod as usersModule 

    -

    #app.register_blueprint(usersModule) 

    -

     

    -

    # Later on you'll import the other blueprints the same way: 

    -

    #from app.comments.views import mod as commentsModule 

    -

    #from app.posts.views import mod as postsModule 

    -

    #app.register_blueprint(commentsModule) 

    -

    #app.register_blueprint(postsModule) 

    -

     

    -

    #try: 

    -

    #    __import__('pkg_resources').declare_namespace(__name__) 

    -

    #except: 

    -

    #    # bootstrapping 

    -

    #    pass 

    -

    # 

    -

    #from flask import Flask 

    -

    #import zmq 

    -

    # 

    -

    #app = Flask(__name__) 

    -

    #context = zmq.Context() 

    -

    #endpoint_cmd = "tcp://*:14015" 

    -

    #socket = context.socket(zmq.REQ) 

    -

    #socket.setsockopt(zmq.LINGER, 0) 

    -

    #socket.connect(endpoint_cmd) 

    -

    # 

    -

    #import views 

    +

    ######################## 

    +

    # Configure Secret Key # 

    +

    ######################## 

    +

    def install_secret_key(app, filename='secret_key'): 

    +

        """Configure the SECRET_KEY from a file 

    +

        in the instance directory. 

    +

     

    +

        If the file does not exist, print instructions 

    +

        to create it from a shell with a random key, 

    +

        then exit. 

    +

        """ 

    +

        filename = os.path.join(app.instance_path, filename) 

    +

     

    +

        try: 

    +

            app.config['SECRET_KEY'] = open(filename, 'rb').read() 

    +

        except IOError: 

    +

            print('Error: No secret key. Create it with:') 

    +

            full_path = os.path.dirname(filename) 

    +

            if not os.path.isdir(full_path): 

    +

                print('mkdir -p {filename}'.format(filename=full_path)) 

    +

            print('head -c 24 /dev/urandom > {filename}'.format(filename=filename)) 

    +

            sys.exit(1) 

    +

     

    +

    #from app.users.views import mod as usersModule 

    +

    #app.register_blueprint(usersModule) 

    +

     

    +

    # Later on you'll import the other blueprints the same way: 

    +

    #from app.comments.views import mod as commentsModule 

    +

    #from app.posts.views import mod as postsModule 

    +

    #app.register_blueprint(commentsModule) 

    +

    #app.register_blueprint(postsModule) 

    +

     

    +

    #try: 

    +

    #    __import__('pkg_resources').declare_namespace(__name__) 

    +

    #except: 

    +

    #    # bootstrapping 

    +

    #    pass 

    +

    # 

    +

    #from flask import Flask 

    +

    #import zmq 

    +

    # 

    +

    #app = Flask(__name__) 

    +

    #context = zmq.Context() 

    +

    #endpoint_cmd = "tcp://*:14015" 

    +

    #socket = context.socket(zmq.REQ) 

    +

    #socket.setsockopt(zmq.LINGER, 0) 

    +

    #socket.connect(endpoint_cmd) 

    +

    # 

    +

    #import views 

    @@ -418,130 +420,132 @@

        def _louie_network(self, network): 

            """Louie dispatch for netowrk 

            """ 

    -

            if network is None: 

    -

                self.socketio.emit('my network response', 

    -

                    {'data': data_room_network(current_app.extensions['zwnetwork'])}, 

    -

                    namespace='/ozwave') 

    -

            else: 

    -

                self.socketio.emit('my network response', 

    -

                    {'data': data_room_network(current_app.extensions['zwnetwork'])}, 

    -

                    namespace='/ozwave') 

    -

                logging.debug('OpenZWave network notification : homeid %0.8x (state:%s) - %d nodes were found.' % (network.home_id, network.state, network.nodes_count)) 

    -

     

    -

        def join_room_node(self): 

    -

            """Join room nodes 

    -

            """ 

    -

            dispatcher.connect(self._louie_node, ZWaveNetwork.SIGNAL_NODE) 

    -

            return True 

    -

     

    -

        def leave_room_node(self): 

    -

            """Leave room nodes 

    -

            """ 

    -

            dispatcher.disconnect(self._louie_node, ZWaveNetwork.SIGNAL_NODE) 

    -

            return True 

    -

     

    -

        def _louie_node(self, network, node): 

    -

            """Louie dispatch for node 

    -

            """ 

    -

            data=node.to_dict() 

    -

            self.socketio.emit('my node response', 

    -

                {'data': data}, 

    -

                namespace='/ozwave') 

    -

            logging.debug('OpenZWave node notification : node %s.', data) 

    -

     

    -

        def join_room_values(self): 

    -

            """Join room values 

    -

            """ 

    -

            dispatcher.connect(self._louie_values, ZWaveNetwork.SIGNAL_VALUE) 

    -

            return True 

    -

     

    -

        def leave_room_values(self): 

    -

            """Leave room values 

    -

            """ 

    -

            dispatcher.disconnect(self._louie_values, ZWaveNetwork.SIGNAL_VALUE) 

    -

            return True 

    -

     

    -

        def _louie_values(self, network, node, value): 

    -

            """Louie dispatch for values 

    -

            """ 

    -

            with self.app.test_request_context(): 

    -

                from flask import request 

    -

                if network is None: 

    -

                    self.socketio.emit('my values response', 

    -

                                       {'data': {'node_id':None, 'homeid':None, 'value_id':None},}, 

    -

                                       namespace='/ozwave') 

    -

                    logging.debug('OpenZWave values notification : Network is None.') 

    -

                elif node is None: 

    -

                    logging.debug('OpenZWave values notification : Node is None.') 

    -

                    self.socketio.emit('my values response', 

    -

                                       {'data': {'node_id':None, 'homeid':network.home_id_str, 'value_id':None},}, 

    -

                                       namespace='/ozwave') 

    -

                elif value is None: 

    -

                    self.socketio.emit('my values response', 

    -

                                       {'data': {'node_id':node.node_id, 'homeid':network.home_id_str, 'value_id':None},}, 

    -

                                       namespace='/ozwave') 

    -

                    logging.debug('OpenZWave values notification : Value is None.') 

    -

                else: 

    -

                    self.socketio.emit('my values response', 

    -

                                       {'data': network.nodes[node.node_id].values[value.value_id].to_dict(),}, 

    -

                                       namespace='/ozwave') 

    -

                    logging.debug('OpenZWave values notification : homeid %0.8x - node %d - value %d.', network.home_id, node.node_id, value.value_id) 

    -

     

    -

        def join_room_controller(self): 

    -

            """Join room controller 

    -

            """ 

    -

            dispatcher.connect(self._louie_controller, ZWaveController.SIGNAL_CTRL_WAITING) 

    -

            dispatcher.connect(self._louie_controller, ZWaveController.SIGNAL_CONTROLLER) 

    -

            return True 

    -

     

    -

        def leave_room_controller(self): 

    -

            """Leave room controller 

    -

            """ 

    -

            dispatcher.disconnect(self._louie_controller, ZWaveController.SIGNAL_CTRL_WAITING) 

    -

            dispatcher.disconnect(self._louie_controller, ZWaveController.SIGNAL_CONTROLLER) 

    -

            return True 

    -

     

    -

        def _louie_controller(self, state, message, network, controller): 

    -

            """Louie dispatch for controller 

    -

            """ 

    -

            with self.app.test_request_context(): 

    -

                from flask import request 

    -

                if network is None or controller is None: 

    -

                    self.socketio.emit('my message response', 

    -

                                       {'data': {'state':None, 'message':None},}, 

    -

                                       namespace='/ozwave') 

    -

                    logging.debug('OpenZWave controller message : Nework or Controller is None.') 

    -

                else: 

    -

                    self.socketio.emit('my message response', 

    -

                                       {'data': {'state':state, 'message':message},}, 

    -

                                       namespace='/ozwave') 

    -

                    logging.debug('OpenZWave controller message : state %s - message %s.', state, message) 

    -

     

    -

        def stop(self): 

    -

            """Stop the tread 

    -

            """ 

    -

            self.leave_room_node() 

    -

            self.leave_room_values() 

    -

            self.leave_room_controller() 

    -

            self.leave_room_network() 

    -

            self._stopevent.set( ) 

    -

            logging.info("Stop listener") 

    -

     

    -

    def start_listener(app_, socketio_): 

    -

        """Start the listener 

    -

        """ 

    -

        global listener 

    -

        if listener is None: 

    -

            listener = ListenerThread(socketio_, app_) 

    -

            listener.start() 

    -

        return listener 

    -

     

    -

    def stop_listener(): 

    -

        """Stop the listener 

    -

        """ 

    -

        global listener 

    -

        listener.stop() 

    -

        listener = None 

    +

            with self.app.test_request_context(): 

    +

                from flask import request 

    +

                if network is None: 

    +

                    self.socketio.emit('my network response', 

    +

                        {'data': data_room_network(current_app.extensions['zwnetwork'])}, 

    +

                        namespace='/ozwave') 

    +

                else: 

    +

                    self.socketio.emit('my network response', 

    +

                        {'data': data_room_network(current_app.extensions['zwnetwork'])}, 

    +

                        namespace='/ozwave') 

    +

                    logging.debug('OpenZWave network notification : homeid %0.8x (state:%s) - %d nodes were found.' % (network.home_id, network.state, network.nodes_count)) 

    +

     

    +

        def join_room_node(self): 

    +

            """Join room nodes 

    +

            """ 

    +

            dispatcher.connect(self._louie_node, ZWaveNetwork.SIGNAL_NODE) 

    +

            return True 

    +

     

    +

        def leave_room_node(self): 

    +

            """Leave room nodes 

    +

            """ 

    +

            dispatcher.disconnect(self._louie_node, ZWaveNetwork.SIGNAL_NODE) 

    +

            return True 

    +

     

    +

        def _louie_node(self, network, node): 

    +

            """Louie dispatch for node 

    +

            """ 

    +

            data=node.to_dict() 

    +

            self.socketio.emit('my node response', 

    +

                {'data': data}, 

    +

                namespace='/ozwave') 

    +

            logging.debug('OpenZWave node notification : node %s.', data) 

    +

     

    +

        def join_room_values(self): 

    +

            """Join room values 

    +

            """ 

    +

            dispatcher.connect(self._louie_values, ZWaveNetwork.SIGNAL_VALUE) 

    +

            return True 

    +

     

    +

        def leave_room_values(self): 

    +

            """Leave room values 

    +

            """ 

    +

            dispatcher.disconnect(self._louie_values, ZWaveNetwork.SIGNAL_VALUE) 

    +

            return True 

    +

     

    +

        def _louie_values(self, network, node, value): 

    +

            """Louie dispatch for values 

    +

            """ 

    +

            with self.app.test_request_context(): 

    +

                from flask import request 

    +

                if network is None: 

    +

                    self.socketio.emit('my values response', 

    +

                                       {'data': {'node_id':None, 'homeid':None, 'value_id':None},}, 

    +

                                       namespace='/ozwave') 

    +

                    logging.debug('OpenZWave values notification : Network is None.') 

    +

                elif node is None: 

    +

                    logging.debug('OpenZWave values notification : Node is None.') 

    +

                    self.socketio.emit('my values response', 

    +

                                       {'data': {'node_id':None, 'homeid':network.home_id_str, 'value_id':None},}, 

    +

                                       namespace='/ozwave') 

    +

                elif value is None: 

    +

                    self.socketio.emit('my values response', 

    +

                                       {'data': {'node_id':node.node_id, 'homeid':network.home_id_str, 'value_id':None},}, 

    +

                                       namespace='/ozwave') 

    +

                    logging.debug('OpenZWave values notification : Value is None.') 

    +

                else: 

    +

                    self.socketio.emit('my values response', 

    +

                                       {'data': network.nodes[node.node_id].values[value.value_id].to_dict(),}, 

    +

                                       namespace='/ozwave') 

    +

                    logging.debug('OpenZWave values notification : homeid %0.8x - node %d - value %d.', network.home_id, node.node_id, value.value_id) 

    +

     

    +

        def join_room_controller(self): 

    +

            """Join room controller 

    +

            """ 

    +

            dispatcher.connect(self._louie_controller, ZWaveController.SIGNAL_CTRL_WAITING) 

    +

            dispatcher.connect(self._louie_controller, ZWaveController.SIGNAL_CONTROLLER) 

    +

            return True 

    +

     

    +

        def leave_room_controller(self): 

    +

            """Leave room controller 

    +

            """ 

    +

            dispatcher.disconnect(self._louie_controller, ZWaveController.SIGNAL_CTRL_WAITING) 

    +

            dispatcher.disconnect(self._louie_controller, ZWaveController.SIGNAL_CONTROLLER) 

    +

            return True 

    +

     

    +

        def _louie_controller(self, state, message, network, controller): 

    +

            """Louie dispatch for controller 

    +

            """ 

    +

            with self.app.test_request_context(): 

    +

                from flask import request 

    +

                if network is None or controller is None: 

    +

                    self.socketio.emit('my message response', 

    +

                                       {'data': {'state':None, 'message':None},}, 

    +

                                       namespace='/ozwave') 

    +

                    logging.debug('OpenZWave controller message : Nework or Controller is None.') 

    +

                else: 

    +

                    self.socketio.emit('my message response', 

    +

                                       {'data': {'state':state, 'message':message},}, 

    +

                                       namespace='/ozwave') 

    +

                    logging.debug('OpenZWave controller message : state %s - message %s.', state, message) 

    +

     

    +

        def stop(self): 

    +

            """Stop the tread 

    +

            """ 

    +

            self.leave_room_node() 

    +

            self.leave_room_values() 

    +

            self.leave_room_controller() 

    +

            self.leave_room_network() 

    +

            self._stopevent.set( ) 

    +

            logging.info("Stop listener") 

    +

     

    +

    def start_listener(app_, socketio_): 

    +

        """Start the listener 

    +

        """ 

    +

        global listener 

    +

        if listener is None: 

    +

            listener = ListenerThread(socketio_, app_) 

    +

            listener.start() 

    +

        return listener 

    +

     

    +

    def stop_listener(): 

    +

        """Stop the listener 

    +

        """ 

    +

        global listener 

    +

        listener.stop() 

    +

        listener = None 

    @@ -308,180 +313,185 @@

    __author__ = 'Sébastien GALLET aka bibi21000' 

    __email__ = 'bibi21000@gmail.com' 

     

    -

    import os, sys 

    -

    import time 

    -

    from threading import Thread 

    -

     

    -

    from flask import Flask, render_template, session, request, current_app 

    -

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    -

     

    -

    from pyozwweb.app import socketio, app 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    import os, sys 

    +

    import time 

    +

    from threading import Thread 

     

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    -

     

    -

    @socketio.on('my event', namespace='/test') 

    -

    def test_message(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s echo message : %s", request.remote_addr, message) 

    -

        print "Client %s echo message : %s" % (request.remote_addr, message) 

    -

        emit('my response', 

    -

             {'data': message['data'], 'count': session['receive_count']}) 

    -

     

    -

     

    -

    @socketio.on('my broadcast event', namespace='/test') 

    -

    def test_broadcast_message(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', 

    -

             {'data': message['data'], 'count': session['receive_count']}, 

    -

             broadcast=True) 

    -

     

    -

     

    -

    @socketio.on('join', namespace='/test') 

    -

    def join(message): 

    -

        join_room(message['room']) 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', 

    -

             {'data': 'In rooms: ' + ', '.join(request.namespace.rooms), 

    -

              'count': session['receive_count']}) 

    -

     

    -

     

    -

    @socketio.on('leave', namespace='/test') 

    -

    def leave(message): 

    -

        leave_room(message['room']) 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', 

    -

             {'data': 'In rooms: ' + ', '.join(request.namespace.rooms), 

    -

              'count': session['receive_count']}) 

    -

     

    -

     

    -

    @socketio.on('close room', namespace='/test') 

    -

    def close(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', {'data': 'Room ' + message['room'] + ' is closing.', 

    -

                             'count': session['receive_count']}, 

    -

             room=message['room']) 

    -

        close_room(message['room']) 

    -

     

    -

     

    -

    @socketio.on('my room event', namespace='/test') 

    -

    def send_room_message(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', 

    -

             {'data': message['data'], 'count': session['receive_count']}, 

    -

             room=message['room']) 

    -

     

    -

     

    -

    @socketio.on('disconnect request', namespace='/test') 

    -

    def disconnect_request(): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        emit('my response', 

    -

             {'data': 'Disconnected!', 'count': session['receive_count']}) 

    -

        disconnect() 

    -

     

    -

     

    -

    @socketio.on('connect', namespace='/test') 

    -

    def test_connect(): 

    -

        emit('my response', {'data': 'Connected', 'count': 0}) 

    +

    from flask import Flask, render_template, session, request, current_app 

    +

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    +

     

    +

    from pyozwweb.app import socketio, app 

    +

     

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    +

     

    +

    @socketio.on('my event', namespace='/test') 

    +

    def test_message(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s echo message : %s", request.remote_addr, message) 

    +

        print "Client %s echo message : %s" % (request.remote_addr, message) 

    +

        emit('my response', 

    +

             {'data': message['data'], 'count': session['receive_count']}) 

    +

     

    +

     

    +

    @socketio.on('my broadcast event', namespace='/test') 

    +

    def test_broadcast_message(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', 

    +

             {'data': message['data'], 'count': session['receive_count']}, 

    +

             broadcast=True) 

    +

     

    +

     

    +

    @socketio.on('join', namespace='/test') 

    +

    def join(message): 

    +

        join_room(message['room']) 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', 

    +

             {'data': 'In rooms: ' + ', '.join(request.namespace.rooms), 

    +

              'count': session['receive_count']}) 

    +

     

    +

     

    +

    @socketio.on('leave', namespace='/test') 

    +

    def leave(message): 

    +

        leave_room(message['room']) 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', 

    +

             {'data': 'In rooms: ' + ', '.join(request.namespace.rooms), 

    +

              'count': session['receive_count']}) 

    +

     

    +

     

    +

    @socketio.on('close room', namespace='/test') 

    +

    def close(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', {'data': 'Room ' + message['room'] + ' is closing.', 

    +

                             'count': session['receive_count']}, 

    +

             room=message['room']) 

    +

        close_room(message['room']) 

    +

     

    +

     

    +

    @socketio.on('my room event', namespace='/test') 

    +

    def send_room_message(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', 

    +

             {'data': message['data'], 'count': session['receive_count']}, 

    +

             room=message['room']) 

    +

     

    +

     

    +

    @socketio.on('disconnect request', namespace='/test') 

    +

    def disconnect_request(): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        emit('my response', 

    +

             {'data': 'Disconnected!', 'count': session['receive_count']}) 

    +

        disconnect() 

     

     

    -

    @socketio.on('disconnect', namespace='/test') 

    -

    def test_disconnect(): 

    -

        print('Client disconnected') 

    +

    @socketio.on('connect', namespace='/test') 

    +

    def test_connect(): 

    +

        emit('my response', {'data': 'Connected', 'count': 0}) 

     

     

    -

    #~ @socketio.on('my echo event', namespace='/socket') 

    -

    #~ def socket_echo(message): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s send echo" % (request.remote_addr)) 

    -

        #~ logging.debug('Echo event %s', message) 

    -

        #~ socketio.emit('my echo response', 

    -

             #~ {'data': message, 'count': session['receive_count']}) 

    -

    #~ 

    -

    #~ @socketio.on('test event', namespace='/socket') 

    -

    #~ def test_message(message): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ socketio.emit('test response', 

    -

             #~ {'data': message['data'], 'count': session['receive_count']}) 

    -

    #~ 

    -

    #~ @socketio.on('my broadcast event', namespace='/socket') 

    -

    #~ def test_broadcast_message(message): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s has broadcast message" % (request.remote_addr)) 

    -

        #~ socketio.emit('my response', 

    -

             #~ {'data': message['data'], 'count': session['receive_count']}, 

    -

              #~ broadcast=True) 

    -

    #~ 

    -

    #~ @socketio.on('join', namespace='/socket') 

    -

    #~ def join(message): 

    -

        #~ data = 'No data for room %s' % message['room'] 

    -

        #~ if message['room'] == 'network': 

    -

            #~ data = data_room_network(current_app.extensions['zwnetwork']) 

    -

        #~ logging.debug("Client %s has joined room %s" % (request.remote_addr, message['room'])) 

    -

        #~ join_room(message['room']) 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ socketio.emit('my %s response' % message['room'], 

    -

             #~ {'data' : data, 

    -

              #~ 'count': session['receive_count']}, 

    -

              #~ room=message['room'], 

    -

              #~ ) 

    -

    #~ 

    -

    #~ @socketio.on('refresh', namespace='/socket') 

    -

    #~ def refresh(message): 

    -

        #~ data = 'No data for room %s' % message['room'] 

    -

        #~ if message['room'] == 'network': 

    -

            #~ data = data_room_network(current_app.extensions['zwnetwork']) 

    -

        #~ logging.debug("Client %s refresh room %s" % (request.remote_addr, message['room'])) 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ socketio.emit('my %s response' % message['room'], 

    -

             #~ {'data' : data, 

    -

              #~ 'count': session['receive_count']}, 

    -

              #~ room=message['room'], 

    -

              #~ ) 

    -

    #~ 

    -

    #~ @socketio.on('leave', namespace='/socket') 

    -

    #~ def leave(message): 

    -

        #~ leave_room(message['room']) 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s has leaved room %s" % (request.remote_addr, message['room'])) 

    -

        #~ socketio.emit('my %s response' % message['room'], 

    -

             #~ {'data': None, 

    -

              #~ 'count': session['receive_count']}, 

    -

              #~ room=message['room'], 

    -

              #~ ) 

    -

    #~ 

    -

    #~ @socketio.on('close room', namespace='/socket') 

    -

    #~ def close(message): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s has closed the room %s" % (request.remote_addr, message['room'])) 

    -

        #~ socketio.emit('my echo response', {'data': 'Room ' + message['room'] + ' is closing.', 

    -

                             #~ 'count': session['receive_count']}, 

    -

             #~ room=message['room']) 

    -

        #~ close_room(message['room']) 

    -

    #~ 

    -

    #~ @socketio.on('my room event', namespace='/socket') 

    -

    #~ def send_room_message(message): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s has sent message to room %s" % (request.remote_addr, message['room'])) 

    -

        #~ socketio.emit('my echo response', 

    -

             #~ {'data': message['data'], 'count': session['receive_count']}, 

    -

             #~ room=message['room']) 

    -

    #~ 

    -

    #~ 

    -

    #~ @socketio.on('disconnect request', namespace='/socket') 

    -

    #~ def disconnect_request(): 

    -

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        #~ logging.debug("Client %s disconnects." % (request.remote_addr)) 

    -

        #~ socketio.emit('my echo response', 

    -

             #~ {'data': 'Disconnected!', 'count': session['receive_count']}) 

    -

        #~ disconnect() 

    +

    @socketio.on('disconnect', namespace='/test') 

    +

    def test_disconnect(): 

    +

        print('Client disconnected') 

    +

     

    +

     

    +

    #~ @socketio.on('my echo event', namespace='/socket') 

    +

    #~ def socket_echo(message): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s send echo" % (request.remote_addr)) 

    +

        #~ logging.debug('Echo event %s', message) 

    +

        #~ socketio.emit('my echo response', 

    +

             #~ {'data': message, 'count': session['receive_count']}) 

    +

    #~ 

    +

    #~ @socketio.on('test event', namespace='/socket') 

    +

    #~ def test_message(message): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ socketio.emit('test response', 

    +

             #~ {'data': message['data'], 'count': session['receive_count']}) 

    +

    #~ 

    +

    #~ @socketio.on('my broadcast event', namespace='/socket') 

    +

    #~ def test_broadcast_message(message): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s has broadcast message" % (request.remote_addr)) 

    +

        #~ socketio.emit('my response', 

    +

             #~ {'data': message['data'], 'count': session['receive_count']}, 

    +

              #~ broadcast=True) 

    +

    #~ 

    +

    #~ @socketio.on('join', namespace='/socket') 

    +

    #~ def join(message): 

    +

        #~ data = 'No data for room %s' % message['room'] 

    +

        #~ if message['room'] == 'network': 

    +

            #~ data = data_room_network(current_app.extensions['zwnetwork']) 

    +

        #~ logging.debug("Client %s has joined room %s" % (request.remote_addr, message['room'])) 

    +

        #~ join_room(message['room']) 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ socketio.emit('my %s response' % message['room'], 

    +

             #~ {'data' : data, 

    +

              #~ 'count': session['receive_count']}, 

    +

              #~ room=message['room'], 

    +

              #~ ) 

    +

    #~ 

    +

    #~ @socketio.on('refresh', namespace='/socket') 

    +

    #~ def refresh(message): 

    +

        #~ data = 'No data for room %s' % message['room'] 

    +

        #~ if message['room'] == 'network': 

    +

            #~ data = data_room_network(current_app.extensions['zwnetwork']) 

    +

        #~ logging.debug("Client %s refresh room %s" % (request.remote_addr, message['room'])) 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ socketio.emit('my %s response' % message['room'], 

    +

             #~ {'data' : data, 

    +

              #~ 'count': session['receive_count']}, 

    +

              #~ room=message['room'], 

    +

              #~ ) 

    +

    #~ 

    +

    #~ @socketio.on('leave', namespace='/socket') 

    +

    #~ def leave(message): 

    +

        #~ leave_room(message['room']) 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s has leaved room %s" % (request.remote_addr, message['room'])) 

    +

        #~ socketio.emit('my %s response' % message['room'], 

    +

             #~ {'data': None, 

    +

              #~ 'count': session['receive_count']}, 

    +

              #~ room=message['room'], 

    +

              #~ ) 

    +

    #~ 

    +

    #~ @socketio.on('close room', namespace='/socket') 

    +

    #~ def close(message): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s has closed the room %s" % (request.remote_addr, message['room'])) 

    +

        #~ socketio.emit('my echo response', {'data': 'Room ' + message['room'] + ' is closing.', 

    +

                             #~ 'count': session['receive_count']}, 

    +

             #~ room=message['room']) 

    +

        #~ close_room(message['room']) 

    +

    #~ 

    +

    #~ @socketio.on('my room event', namespace='/socket') 

    +

    #~ def send_room_message(message): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s has sent message to room %s" % (request.remote_addr, message['room'])) 

    +

        #~ socketio.emit('my echo response', 

    +

             #~ {'data': message['data'], 'count': session['receive_count']}, 

    +

             #~ room=message['room']) 

    +

    #~ 

    +

    #~ 

    +

    #~ @socketio.on('disconnect request', namespace='/socket') 

    +

    #~ def disconnect_request(): 

    +

        #~ session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        #~ logging.debug("Client %s disconnects." % (request.remote_addr)) 

    +

        #~ socketio.emit('my echo response', 

    +

             #~ {'data': 'Disconnected!', 'count': session['receive_count']}) 

    +

        #~ disconnect() 

    @@ -405,273 +409,277 @@

    """ 

    __author__ = 'Sébastien GALLET aka bibi21000' 

    __email__ = 'bibi21000@gmail.com' 

    -

     

    -

    import os, sys 

    -

    import time 

    -

    from threading import Thread 

    -

     

    -

    from flask import Flask, render_template, session, request, current_app 

    -

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    -

     

    -

    import libopenzwave 

    -

    import openzwave 

    -

    from openzwave.node import ZWaveNode 

    -

    from openzwave.value import ZWaveValue 

    -

    from openzwave.scene import ZWaveScene 

    -

    from openzwave.controller import ZWaveController 

    -

    from openzwave.network import ZWaveNetwork 

    -

    from openzwave.option import ZWaveOption 

    -

    from louie import dispatcher, All 

    -

    from pyozwweb.app import socketio, app 

    -

     

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    -

     

    -

    @socketio.on('my echo event', namespace='/ozwave') 

    -

    def echo_message(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s request echo message : %s", request.remote_addr, message) 

    -

        emit('my response', 

    -

             {'data': message['data'], 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('disconnect request', namespace='/ozwave') 

    -

    def disconnect_request(): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s disconnects", request.remote_addr) 

    -

        emit('my response', 

    -

             {'data': 'Disconnected!', 'count': session['receive_count']}) 

    -

        disconnect() 

    -

     

    -

    @socketio.on('connect', namespace='/ozwave') 

    -

    def echo_connect(): 

    -

        logging.debug("Client %s connects", request.remote_addr) 

    -

        emit('my response', {'data': 'Connected', 'count': 0}) 

    -

     

    -

    @socketio.on('my network event', namespace='/ozwave') 

    -

    def echo_network_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s network event : %s", request.remote_addr, message) 

    -

        done=False 

    -

        keys = ['zoomlevel','zoomx','zoomy','panx','pany'] 

    -

        kvals = {} 

    -

        for key in keys: 

    -

            if key in message: 

    -

                kvals[key]=message[key] 

    -

        logging.debug("kvals : %s", kvals) 

    -

        if len(kvals) > 0: 

    -

            current_app.extensions['zwnetwork'].kvals = kvals 

    -

            done = True 

    -

            #Should we emit an event ? Or the api should send a new python louie mesage ? Or nothing 

    -

        if done == False : 

    -

            emit('my network response', 

    -

                 {'data': current_app.extensions['zwnetwork'].to_dict(), 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my node event', namespace='/ozwave') 

    -

    def echo_node_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s node event : %s", request.remote_addr, message) 

    -

        try : 

    -

            node_id = int(message['node_id']) 

    -

        except ValueError: 

    -

            node_id = 0 

    -

        except KeyError: 

    -

            node_id = 0 

    -

        if node_id == 0 or node_id not in current_app.extensions['zwnetwork'].nodes: 

    -

            logging.warning('Received invalid node_id : %s', message) 

    -

            return 

    -

        done=False 

    -

        keys = ['posx','posy'] 

    -

        kvals = {} 

    -

        for key in keys: 

    -

            if key in message: 

    -

                kvals[key]=message[key] 

    -

        logging.debug("kvals : %s", kvals) 

    -

        if len(kvals) > 0: 

    -

            current_app.extensions['zwnetwork'].nodes[node_id].kvals = kvals 

    -

            done = True 

    -

            #Should we emit an event ? Or the api should send a new python louie mesage ? Or nothing 

    -

        if 'name' in message: 

    -

            current_app.extensions['zwnetwork'].nodes[node_id].name = message['name'] 

    +

    try: 

    +

        from gevent import monkey 

    +

        monkey.patch_all() 

    +

    except ImportError: 

    +

        pass 

    +

    import os, sys 

    +

    import time 

    +

    from threading import Thread 

    +

     

    +

    from flask import Flask, render_template, session, request, current_app 

    +

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    +

     

    +

    import libopenzwave 

    +

    import openzwave 

    +

    from openzwave.node import ZWaveNode 

    +

    from openzwave.value import ZWaveValue 

    +

    from openzwave.scene import ZWaveScene 

    +

    from openzwave.controller import ZWaveController 

    +

    from openzwave.network import ZWaveNetwork 

    +

    from openzwave.option import ZWaveOption 

    +

    from louie import dispatcher, All 

    +

    from pyozwweb.app import socketio, app 

    +

     

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    +

     

    +

    @socketio.on('my echo event', namespace='/ozwave') 

    +

    def echo_message(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s request echo message : %s", request.remote_addr, message) 

    +

        emit('my response', 

    +

             {'data': message['data'], 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('disconnect request', namespace='/ozwave') 

    +

    def disconnect_request(): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s disconnects", request.remote_addr) 

    +

        emit('my response', 

    +

             {'data': 'Disconnected!', 'count': session['receive_count']}) 

    +

        disconnect() 

    +

     

    +

    @socketio.on('connect', namespace='/ozwave') 

    +

    def echo_connect(): 

    +

        logging.debug("Client %s connects", request.remote_addr) 

    +

        emit('my response', {'data': 'Connected', 'count': 0}) 

    +

     

    +

    @socketio.on('my network event', namespace='/ozwave') 

    +

    def echo_network_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s network event : %s", request.remote_addr, message) 

    +

        done=False 

    +

        keys = ['zoomlevel','zoomx','zoomy','panx','pany'] 

    +

        kvals = {} 

    +

        for key in keys: 

    +

            if key in message: 

    +

                kvals[key]=message[key] 

    +

        logging.debug("kvals : %s", kvals) 

    +

        if len(kvals) > 0: 

    +

            current_app.extensions['zwnetwork'].kvals = kvals 

    +

            done = True 

    +

            #Should we emit an event ? Or the api should send a new python louie mesage ? Or nothing 

    +

        if done == False : 

    +

            emit('my network response', 

    +

                 {'data': current_app.extensions['zwnetwork'].to_dict(), 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my node event', namespace='/ozwave') 

    +

    def echo_node_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s node event : %s", request.remote_addr, message) 

    +

        try : 

    +

            node_id = int(message['node_id']) 

    +

        except ValueError: 

    +

            node_id = 0 

    +

        except KeyError: 

    +

            node_id = 0 

    +

        if node_id == 0 or node_id not in current_app.extensions['zwnetwork'].nodes: 

    +

            logging.warning('Received invalid node_id : %s', message) 

    +

            return 

    +

        done=False 

    +

        keys = ['posx','posy'] 

    +

        kvals = {} 

    +

        for key in keys: 

    +

            if key in message: 

    +

                kvals[key]=message[key] 

    +

        logging.debug("kvals : %s", kvals) 

    +

        if len(kvals) > 0: 

    +

            current_app.extensions['zwnetwork'].nodes[node_id].kvals = kvals 

            done = True 

    -

        if 'location' in message: 

    -

            current_app.extensions['zwnetwork'].nodes[node_id].location = message['location'] 

    -

            done = True 

    -

        if done == False : 

    -

            logging.debug("Client %s node event : emit my node response") 

    -

            emit('my node response', 

    -

                 {'data': current_app.extensions['zwnetwork'].nodes[node_id].to_dict(), 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my nodes event', namespace='/ozwave') 

    -

    def echo_nodes_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s nodes event : %s", request.remote_addr, message) 

    -

        print "%s"%current_app.extensions['zwnetwork'].nodes_to_dict() 

    -

        emit('my nodes response', 

    -

             {'data': current_app.extensions['zwnetwork'].nodes_to_dict(), 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my controller event', namespace='/ozwave') 

    -

    def echo_controller_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s controller event : %s", request.remote_addr, message) 

    -

        emit('my controller response', 

    -

             {'data': current_app.extensions['zwnetwork'].controller.to_dict(), 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my command event', namespace='/ozwave') 

    -

    def echo_command_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s controller command event : %s", request.remote_addr, message) 

    -

        data = {} 

    -

        data['result'] = False 

    -

        data['message'] = "Command fail to start" 

    -

        command = message['command'] 

    -

        init_data = {'result':False, 'message':'', 'state':'', 'command':command} 

    -

        #Emit a blank message to clean the old data in javascript 

    -

        emit('my command response', 

    -

            {'data': init_data, 

    -

            'count': session['receive_count']}) 

    -

        if command == 'no_command': 

    -

            #This is for first time launch. Return default values for javascript 

    -

            data = {} 

    -

            data['message'] = current_app.extensions['zwnetwork'].controller.ctrl_last_message 

    -

            data['state'] = current_app.extensions['zwnetwork'].controller.ctrl_last_state 

    -

            emit('my message response', 

    -

                {'data': data, 

    -

                'count': session['receive_count']}) 

    -

            emit('my command response', 

    -

                {'data': init_data, 

    -

                'count': session['receive_count']}) 

    -

            return 

    -

        elif command == 'send_node_information': 

    -

            node_id=-1 

    -

            try: 

    -

                node_id=int(message['node_id']) 

    -

            except ValueError: 

    -

                node_id = -1 

    -

            except KeyError: 

    -

                node_id = -1 

    -

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    -

                data['result'] = False 

    -

                data['message'] = "Bad node_id" 

    -

            else: 

    -

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_send_node_information(node_id) 

    -

                #data['result'] = True 

    -

        elif command == 'remove_failed_node': 

    -

            node_id=-1 

    -

            try: 

    -

                node_id=int(message['node_id']) 

    -

            except ValueError: 

    -

                node_id = -1 

    -

            except KeyError: 

    -

                node_id = -1 

    -

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    -

                data['result'] = False 

    -

                data['message'] = "Bad node_id" 

    -

            else: 

    -

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_remove_failed_node(node_id) 

    -

                #data['result'] = True 

    -

        elif command == 'has_node_failed': 

    -

            node_id=-1 

    -

            try: 

    -

                node_id=int(message['node_id']) 

    -

            except ValueError: 

    -

                node_id = -1 

    -

            except KeyError: 

    -

                node_id = -1 

    -

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    -

                data['result'] = False 

    -

                data['message'] = "Bad node_id" 

    -

            else: 

    -

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_has_node_failed(node_id) 

    -

                #data['result'] = True 

    -

        elif command == 'replace_failed_node': 

    -

            node_id=-1 

    -

            try: 

    -

                node_id=int(message['node_id']) 

    -

            except ValueError: 

    -

                node_id = -1 

    -

            except KeyError: 

    -

                node_id = -1 

    -

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    -

                data['result'] = False 

    -

                data['message'] = "Bad node_id" 

    -

            else: 

    -

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_replace_failed_node(node_id) 

    -

                #data['result'] = True 

    -

        elif command == 'request_node_neigbhor_update': 

    -

            node_id=-1 

    -

            try: 

    -

                node_id=int(message['node_id']) 

    -

            except ValueError: 

    -

                node_id = -1 

    -

            except KeyError: 

    -

                node_id = -1 

    -

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    -

                data['result'] = False 

    -

                data['message'] = "Bad node_id" 

    -

            else: 

    -

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_request_node_neigbhor_update(node_id) 

    -

                #data['result'] = True 

    -

        elif command == 'request_network_update': 

    -

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_request_network_update() 

    -

        elif command == 'replication_send': 

    -

            try: 

    -

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    -

            except ValueError: 

    -

                high_power = False 

    -

            except KeyError: 

    -

                high_power = False 

    -

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_replication_send(high_power) 

    -

            #data['result'] = True 

    -

        elif command == 'add_device': 

    -

            try: 

    -

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    -

            except ValueError: 

    -

                high_power = False 

    -

            except KeyError: 

    -

                high_power = False 

    -

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_add_device(high_power) 

    -

            #data['result'] = True 

    -

        elif command == 'remove_device': 

    -

            try: 

    -

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    -

            except ValueError: 

    -

                high_power = False 

    -

            except KeyError: 

    -

                high_power = False 

    -

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_remove_device(high_power) 

    -

            #data['result'] = True 

    -

        elif command == 'cancel_command': 

    -

            data['result'] = current_app.extensions['zwnetwork'].controller.cancel_command() 

    -

        if data['result'] == True : 

    -

            data['message'] = "Command started" 

    -

        logging.debug("Client %s controller command event, data returned : %s", request.remote_addr, data) 

    -

        emit('my command response', 

    -

             {'data': data, 

    -

              'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my value event', namespace='/ozwave') 

    -

    def echo_value_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        node_id = message['node_id'] 

    -

        value_id = message['value_id'] 

    -

        logging.debug("Client %s value event : %s", request.remote_addr, current_app.extensions['zwnetwork'].nodes[node_id].values[value_id].to_dict()) 

    -

        emit('my value response', 

    -

             {'data': current_app.extensions['zwnetwork'].nodes[node_id].values[value_id].to_dict(), 'count': session['receive_count']}) 

    -

     

    -

    @socketio.on('my scenes event', namespace='/ozwave') 

    -

    def echo_scenes_event(message): 

    -

        session['receive_count'] = session.get('receive_count', 0) + 1 

    -

        logging.debug("Client %s scenes event : %s", request.remote_addr, message) 

    -

        print "%s"%current_app.extensions['zwnetwork'].get_scenes() 

    -

        emit('my scenes response', 

    -

             {'data': current_app.extensions['zwnetwork'].get_scenes(), 'count': session['receive_count']}) 

    +

            #Should we emit an event ? Or the api should send a new python louie mesage ? Or nothing 

    +

        if 'name' in message: 

    +

            current_app.extensions['zwnetwork'].nodes[node_id].name = message['name'] 

    +

            done = True 

    +

        if 'location' in message: 

    +

            current_app.extensions['zwnetwork'].nodes[node_id].location = message['location'] 

    +

            done = True 

    +

        if done == False : 

    +

            logging.debug("Client %s node event : emit my node response") 

    +

            emit('my node response', 

    +

                 {'data': current_app.extensions['zwnetwork'].nodes[node_id].to_dict(), 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my nodes event', namespace='/ozwave') 

    +

    def echo_nodes_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s nodes event : %s", request.remote_addr, message) 

    +

        print "%s"%current_app.extensions['zwnetwork'].nodes_to_dict() 

    +

        emit('my nodes response', 

    +

             {'data': current_app.extensions['zwnetwork'].nodes_to_dict(), 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my controller event', namespace='/ozwave') 

    +

    def echo_controller_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s controller event : %s", request.remote_addr, message) 

    +

        emit('my controller response', 

    +

             {'data': current_app.extensions['zwnetwork'].controller.to_dict(), 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my command event', namespace='/ozwave') 

    +

    def echo_command_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s controller command event : %s", request.remote_addr, message) 

    +

        data = {} 

    +

        data['result'] = False 

    +

        data['message'] = "Command fail to start" 

    +

        command = message['command'] 

    +

        init_data = {'result':False, 'message':'', 'state':'', 'command':command} 

    +

        #Emit a blank message to clean the old data in javascript 

    +

        emit('my command response', 

    +

            {'data': init_data, 

    +

            'count': session['receive_count']}) 

    +

        if command == 'no_command': 

    +

            #This is for first time launch. Return default values for javascript 

    +

            data = {} 

    +

            data['message'] = current_app.extensions['zwnetwork'].controller.ctrl_last_message 

    +

            data['state'] = current_app.extensions['zwnetwork'].controller.ctrl_last_state 

    +

            emit('my message response', 

    +

                {'data': data, 

    +

                'count': session['receive_count']}) 

    +

            emit('my command response', 

    +

                {'data': init_data, 

    +

                'count': session['receive_count']}) 

    +

            return 

    +

        elif command == 'send_node_information': 

    +

            node_id=-1 

    +

            try: 

    +

                node_id=int(message['node_id']) 

    +

            except ValueError: 

    +

                node_id = -1 

    +

            except KeyError: 

    +

                node_id = -1 

    +

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    +

                data['result'] = False 

    +

                data['message'] = "Bad node_id" 

    +

            else: 

    +

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_send_node_information(node_id) 

    +

                #data['result'] = True 

    +

        elif command == 'remove_failed_node': 

    +

            node_id=-1 

    +

            try: 

    +

                node_id=int(message['node_id']) 

    +

            except ValueError: 

    +

                node_id = -1 

    +

            except KeyError: 

    +

                node_id = -1 

    +

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    +

                data['result'] = False 

    +

                data['message'] = "Bad node_id" 

    +

            else: 

    +

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_remove_failed_node(node_id) 

    +

                #data['result'] = True 

    +

        elif command == 'has_node_failed': 

    +

            node_id=-1 

    +

            try: 

    +

                node_id=int(message['node_id']) 

    +

            except ValueError: 

    +

                node_id = -1 

    +

            except KeyError: 

    +

                node_id = -1 

    +

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    +

                data['result'] = False 

    +

                data['message'] = "Bad node_id" 

    +

            else: 

    +

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_has_node_failed(node_id) 

    +

                #data['result'] = True 

    +

        elif command == 'replace_failed_node': 

    +

            node_id=-1 

    +

            try: 

    +

                node_id=int(message['node_id']) 

    +

            except ValueError: 

    +

                node_id = -1 

    +

            except KeyError: 

    +

                node_id = -1 

    +

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    +

                data['result'] = False 

    +

                data['message'] = "Bad node_id" 

    +

            else: 

    +

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_replace_failed_node(node_id) 

    +

                #data['result'] = True 

    +

        elif command == 'request_node_neigbhor_update': 

    +

            node_id=-1 

    +

            try: 

    +

                node_id=int(message['node_id']) 

    +

            except ValueError: 

    +

                node_id = -1 

    +

            except KeyError: 

    +

                node_id = -1 

    +

            if node_id not in current_app.extensions['zwnetwork'].nodes : 

    +

                data['result'] = False 

    +

                data['message'] = "Bad node_id" 

    +

            else: 

    +

                data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_request_node_neigbhor_update(node_id) 

    +

                #data['result'] = True 

    +

        elif command == 'request_network_update': 

    +

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_request_network_update() 

    +

        elif command == 'replication_send': 

    +

            try: 

    +

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    +

            except ValueError: 

    +

                high_power = False 

    +

            except KeyError: 

    +

                high_power = False 

    +

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_replication_send(high_power) 

    +

            #data['result'] = True 

    +

        elif command == 'add_device': 

    +

            try: 

    +

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    +

            except ValueError: 

    +

                high_power = False 

    +

            except KeyError: 

    +

                high_power = False 

    +

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_add_device(high_power) 

    +

            #data['result'] = True 

    +

        elif command == 'remove_device': 

    +

            try: 

    +

                high_power = bool(message['high_power']) if 'high_power' in message else False 

    +

            except ValueError: 

    +

                high_power = False 

    +

            except KeyError: 

    +

                high_power = False 

    +

            data['result'] = current_app.extensions['zwnetwork'].controller.begin_command_remove_device(high_power) 

    +

            #data['result'] = True 

    +

        elif command == 'cancel_command': 

    +

            data['result'] = current_app.extensions['zwnetwork'].controller.cancel_command() 

    +

        if data['result'] == True : 

    +

            data['message'] = "Command started" 

    +

        logging.debug("Client %s controller command event, data returned : %s", request.remote_addr, data) 

    +

        emit('my command response', 

    +

             {'data': data, 

    +

              'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my value event', namespace='/ozwave') 

    +

    def echo_value_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        node_id = message['node_id'] 

    +

        value_id = message['value_id'] 

    +

        logging.debug("Client %s value event : %s", request.remote_addr, current_app.extensions['zwnetwork'].nodes[node_id].values[value_id].to_dict()) 

    +

        emit('my value response', 

    +

             {'data': current_app.extensions['zwnetwork'].nodes[node_id].values[value_id].to_dict(), 'count': session['receive_count']}) 

    +

     

    +

    @socketio.on('my scenes event', namespace='/ozwave') 

    +

    def echo_scenes_event(message): 

    +

        session['receive_count'] = session.get('receive_count', 0) + 1 

    +

        logging.debug("Client %s scenes event : %s", request.remote_addr, message) 

    +

        print "%s"%current_app.extensions['zwnetwork'].get_scenes() 

    +

        emit('my scenes response', 

    +

             {'data': current_app.extensions['zwnetwork'].get_scenes(), 'count': session['receive_count']}) 

    @@ -204,72 +206,74 @@

    """ 

    __author__ = 'Sébastien GALLET aka bibi21000' 

    __email__ = 'bibi21000@gmail.com' 

    -

     

    -

    import os, sys 

    -

    import time 

    -

    from threading import Thread 

    -

     

    -

    from flask import Flask, render_template, session, request, current_app 

    -

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    -

     

    -

    import libopenzwave 

    -

    import openzwave 

    -

    from openzwave.node import ZWaveNode 

    -

    from openzwave.value import ZWaveValue 

    -

    from openzwave.scene import ZWaveScene 

    -

    from openzwave.controller import ZWaveController 

    -

    from openzwave.network import ZWaveNetwork 

    -

    from openzwave.option import ZWaveOption 

    -

    from louie import dispatcher, All 

    -

    from pyozwweb.app import socketio, app 

    -

    from listener import listener 

    -

     

    -

    import logging 

    -

    try:  # Python 2.7+ 

    -

        from logging import NullHandler 

    -

    except ImportError: 

    -

        class NullHandler(logging.Handler): 

    -

            """NullHandler logger for python 2.6""" 

    -

            def emit(self, record): 

    -

                pass 

    -

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    -

     

    -

    @app.errorhandler(404) 

    -

    def not_found(error): 

    -

        return render_template('404.html'), 404 

    -

     

    -

    @app.route('/') 

    -

    def home(): 

    -

        return render_template('home.html') 

    -

     

    -

    @app.route('/node') 

    -

    @app.route('/node/<int:node_id>') 

    -

    def node(node_id=1): 

    -

        return render_template('node.html', node_id=node_id) 

    -

     

    -

    @app.route('/values') 

    -

    def values(): 

    -

        return render_template('values.html') 

    -

     

    -

    @app.route('/controller') 

    -

    def controller(): 

    -

        return render_template('controller.html') 

    -

     

    -

    @app.route('/debug') 

    -

    def debug(): 

    -

        return render_template('debug.html') 

    -

     

    -

    @app.route('/map') 

    -

    def map(): 

    -

        return render_template('map.html') 

    -

     

    -

    @app.route('/scenes') 

    -

    def scenes(): 

    -

        return render_template('scenes.html') 

    -

     

    -

    @app.route('/chat') 

    -

    def chat(): 

    -

        return render_template('chat.html') 

    +

    from gevent import monkey 

    +

    monkey.patch_all() 

    +

     

    +

    import os, sys 

    +

    import time 

    +

    from threading import Thread 

    +

     

    +

    from flask import Flask, render_template, session, request, current_app 

    +

    from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect 

    +

     

    +

    import libopenzwave 

    +

    import openzwave 

    +

    from openzwave.node import ZWaveNode 

    +

    from openzwave.value import ZWaveValue 

    +

    from openzwave.scene import ZWaveScene 

    +

    from openzwave.controller import ZWaveController 

    +

    from openzwave.network import ZWaveNetwork 

    +

    from openzwave.option import ZWaveOption 

    +

    from louie import dispatcher, All 

    +

    from pyozwweb.app import socketio, app 

    +

    from listener import listener 

    +

     

    +

    import logging 

    +

    try:  # Python 2.7+ 

    +

        from logging import NullHandler 

    +

    except ImportError: 

    +

        class NullHandler(logging.Handler): 

    +

            """NullHandler logger for python 2.6""" 

    +

            def emit(self, record): 

    +

                pass 

    +

    logging.getLogger('pyozwweb').addHandler(NullHandler()) 

    +

     

    +

    @app.errorhandler(404) 

    +

    def not_found(error): 

    +

        return render_template('404.html'), 404 

    +

     

    +

    @app.route('/') 

    +

    def home(): 

    +

        return render_template('home.html') 

    +

     

    +

    @app.route('/node') 

    +

    @app.route('/node/<int:node_id>') 

    +

    def node(node_id=1): 

    +

        return render_template('node.html', node_id=node_id) 

    +

     

    +

    @app.route('/values') 

    +

    def values(): 

    +

        return render_template('values.html') 

    +

     

    +

    @app.route('/controller') 

    +

    def controller(): 

    +

        return render_template('controller.html') 

    +

     

    +

    @app.route('/debug') 

    +

    def debug(): 

    +

        return render_template('debug.html') 

    +

     

    +

    @app.route('/map') 

    +

    def map(): 

    +

        return render_template('map.html') 

    +

     

    +

    @app.route('/scenes') 

    +

    def scenes(): 

    +

        return render_template('scenes.html') 

    +

     

    +

    @app.route('/chat') 

    +

    def chat(): 

    +

        return render_template('chat.html') 

    @@ -200,46 +204,50 @@

        RELOADER = False 

        DATABASE_URI = 'sqlite://:memory:' 

     

    -

        LOGGING_CONF = 'logging.conf' 

    -

     

    -

        SECRET_KEY = 'This string will be replaced with a proper key in production.' 

    -

     

    -

        THREADS_PER_PAGE = 8 

    +

        HOST = "127.0.0.1" 

    +

        PORT = 5000 

    +

     

    +

        LOGGING_CONF = 'logging.conf' 

    +

        APP_CONF = 'app.conf' 

     

    -

        CSRF_ENABLED = True 

    -

        CSRF_SESSION_KEY = "somethingimpossibletoguess" 

    -

     

    -

        RECAPTCHA_USE_SSL = False 

    -

        RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' 

    -

        RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' 

    -

        RECAPTCHA_OPTIONS = {'theme': 'white'} 

    -

     

    -

        ZWAVE_DEVICE = "/dev/ttyUSB0" 

    -

        ZWAVE_DEBUG = "Debug" 

    -

        ZWAVE_LOGGING = True 

    -

        ZWAVE_DIR = None 

    -

        USER_DIR = "." 

    -

     

    -

    class ProductionConfig(Config): 

    -

        DATABASE_URI = 'mysql://user@localhost/foo' 

    -

        ZWAVE_DEBUG = "Warning" 

    +

        SECRET_KEY = 'This string will be replaced with a proper key in production.' 

    +

     

    +

        THREADS_PER_PAGE = 8 

    +

     

    +

        CSRF_ENABLED = True 

    +

        CSRF_SESSION_KEY = "somethingimpossibletoguess" 

    +

     

    +

        RECAPTCHA_USE_SSL = False 

    +

        RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' 

    +

        RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' 

    +

        RECAPTCHA_OPTIONS = {'theme': 'white'} 

    +

     

    +

        ZWAVE_DEVICE = "/dev/ttyUSB0" 

    +

        ZWAVE_DEBUG = "Debug" 

    +

        ZWAVE_LOGGING = True 

    +

        ZWAVE_DIR = None 

    +

        USER_DIR = "." 

     

    -

    class RunConfig(Config): 

    -

        TESTING = True 

    -

        DEBUG = True 

    -

        ZWAVE_DIR = "../../openzwave/config" 

    -

     

    -

    class ReloadConfig(Config): 

    -

        TESTING = True 

    -

        DEBUG = True 

    -

        RELOADER = True 

    -

        ZWAVE_DIR = "../../openzwave/config" 

    -

     

    -

    class TestingConfig(Config): 

    -

        TESTING = True 

    -

        LOGGING_CONF = 'tests/logging.conf' 

    -

        DEBUG = True 

    -

     

    +

    class ProductionConfig(Config): 

    +

        DATABASE_URI = 'mysql://user@localhost/foo' 

    +

        ZWAVE_DEBUG = "Warning" 

    +

     

    +

    class RunConfig(Config): 

    +

        TESTING = True 

    +

        DEBUG = True 

    +

        ZWAVE_DIR = "../../openzwave/config" 

    +

     

    +

    class ReloadConfig(Config): 

    +

        TESTING = True 

    +

        DEBUG = True 

    +

        RELOADER = True 

    +

        ZWAVE_DIR = "../../openzwave/config" 

    +

     

    +

    class TestingConfig(Config): 

    +

        TESTING = True 

    +

        LOGGING_CONF = 'tests/logging.conf' 

    +

        DEBUG = True 

    +

     

    +
    +
    +to_dict(extras=['all'])
    +

    Return a dict representation of the group.

    + +++ + + + + + + + +
    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    +
    + diff --git a/docs/joomla/network.html b/docs/joomla/network.html index 777e647f..0ee96a22 100644 --- a/docs/joomla/network.html +++ b/docs/joomla/network.html @@ -433,12 +433,16 @@

    Network documentation

    -nodes_to_dict(kvals=True)
    +nodes_to_dict(extras=['all'])

    Return a dict representation of the network.

    + + + + @@ -499,12 +503,16 @@

    Network documentation

    -scenes_to_dict(kvals=True)
    +scenes_to_dict(extras=['all'])

    Return a JSONifiable dict representation of the scenes.

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    + + + + @@ -653,12 +661,16 @@

    Network documentation

    -to_dict(kvals=True)
    +to_dict(extras=['kvals'])

    Return a dict representation of the network.

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    + + + + diff --git a/docs/joomla/node.html b/docs/joomla/node.html index 88d856ff..ff273ac0 100644 --- a/docs/joomla/node.html +++ b/docs/joomla/node.html @@ -276,6 +276,24 @@

    Node documentation

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    +
    +
    +groups_to_dict(extras=['all'])
    +

    Return a dict representation of the groups.

    + +++ + + + + + + + +
    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    +
    +
    has_command_class(class_id)
    @@ -792,12 +810,16 @@

    Node documentation

    -to_dict(kvals=True)
    +to_dict(extras=['all'])

    Return a dict representation of the node.

    + + + + @@ -811,6 +833,24 @@

    Node documentation

    :rtype: str

    +
    +
    +values_to_dict(extras=['all'])
    +

    Return a dict representation of the values.

    +
    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    +++ + + + + + + + +
    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    +
    +
    version
    diff --git a/docs/joomla/nosetests/nosetests.html b/docs/joomla/nosetests/nosetests.html index 26db614e..cd7dea41 100644 --- a/docs/joomla/nosetests/nosetests.html +++ b/docs/joomla/nosetests/nosetests.html @@ -145,9 +145,9 @@

    Unit Test Report

    -

    Start Time: 2015-05-03 01:04:37

    -

    Duration: 0:04:39.646530

    -

    Status: Pass 73

    +

    Start Time: 2015-05-03 16:11:55

    +

    Duration: 0:03:41.667291

    +

    Status: Pass 77

    @@ -179,177 +179,183 @@

    Unit Test Report

    View - - tests.api.test_dimmer:TestDimmer - 51.00 - 2 - 2 - 0 - 0 - Detail - - - -
    test_010_dimmer_level
    - 43.00 - pass - - - -
    test_110_dimmer_on_off
    - 8.00 - pass - - - - tests.api.test_switch:TestSwitch - 45.00 - 2 - 2 - 0 - 0 - Detail - - - -
    test_010_switch_state
    - 42.00 - pass - - - -
    test_110_switch_on_off
    - 3.00 - pass - - tests.api.test_controller:TestController - 10.00 - 19 - 19 + 40.00 + 21 + 21 0 0 - Detail + Detail - +
    test_010_controller
    - 5.00 + 0.00 pass - +
    test_020_controller_capabilities
    0.00 pass - +
    test_030_controller_send_queue
    0.00 pass - +
    test_040_controller_stats
    0.00 pass - +
    test_110_controller_soft_reset
    5.00 pass - +
    test_310_controller_node
    0.00 pass - +
    test_320_controller_node_capabilities
    0.00 pass - +
    test_330_controller_node_neighbors
    0.00 pass - +
    test_340_controller_node_baud_rate
    0.00 pass - +
    test_410_controller_node_product
    0.00 pass - +
    test_420_controller_node_name
    0.00 pass - +
    test_430_controller_node_product_location
    0.00 pass - +
    test_440_controller_node_product_name
    0.00 pass - +
    test_510_controller_node_group
    0.00 pass - +
    test_610_controller_node_command_class
    0.00 pass - +
    test_710_controller_node_manufacturer_name
    0.00 pass - +
    test_760_controller_stats_label
    0.00 pass - +
    test_810_controller_node_values
    0.00 pass - +
    test_820_controller_node_generic
    0.00 pass + +
    test_830_controller_node_refresh
    + 0.00 + pass + + + +
    test_910_controller_stats_poll
    + 35.00 + pass + + + + tests.api.test_dimmer:TestDimmer + 8.00 + 2 + 2 + 0 + 0 + Detail + + + +
    test_010_dimmer_level
    + 0.00 + pass + + + +
    test_110_dimmer_on_off
    + 8.00 + pass + + + + tests.api.test_network_start:TestNetworkStartStop + 5.00 + 1 + 1 + 0 + 0 + Detail + + + +
    test_000_network_start_stop
    + 5.00 + pass + + tests.api.test_controller_command:TestControllerCommand - 9.00 + 5.00 3 3 0 @@ -359,41 +365,53 @@

    Unit Test Report

    test_010_command_send_node_information_nodeid
    - 2.00 + 1.00 pass
    test_020_command_send_node_information_nodeid_controller
    - 5.00 + 3.00 pass
    test_210_command_request_node_neigbhor_update_node
    - 2.00 + 1.00 pass - tests.api.test_network_start:TestNetworkStartStop - 6.00 - 1 - 1 + tests.api.test_switch_all:TestSwitchAll + 4.00 + 3 + 3 0 0 - Detail + Detail -
    test_000_network_start_stop
    - 6.00 +
    test_010_switch_all_item
    + 0.00 + pass + + + +
    test_015_switch_all_set_item
    + 4.00 + pass + + + +
    test_020_switch_all_items
    + 0.00 pass tests.api.test_protection:TestProtection - 6.00 + 4.00 4 4 0 @@ -403,7 +421,7 @@

    Unit Test Report

    test_010_protection_item
    - 2.00 + 0.00 pass @@ -426,297 +444,291 @@

    Unit Test Report

    - tests.api.test_scene:TestScene - 5.00 - 3 - 3 + tests.api.test_switch:TestSwitch + 3.00 + 2 + 2 0 0 - Detail + Detail -
    test_005_scene_add_remove
    - 5.00 - pass - - - -
    test_010_scenes_to_dict
    +
    test_010_switch_state
    0.00 pass - -
    test_020_scene_to_dict
    - 0.00 + +
    test_110_switch_on_off
    + 3.00 pass - tests.api.test_sensor:TestSensor - 5.00 - 2 - 2 + tests.api.autobuild.test_api:TestNetworkApi + 2.04 + 3 + 3 0 0 - Detail + Detail -
    test_010_sensor_bool
    - 5.00 +
    test_000_api_network
    + 2.04 pass -
    test_410_sensor_decimal
    - 0.00 - pass - - - - tests.api.test_switch_all:TestSwitchAll - 4.00 - 3 - 3 - 0 - 0 - Detail - - - -
    test_010_switch_all_item
    +
    test_900_api_singleton
    0.00 pass - -
    test_015_switch_all_set_item
    - 4.00 - pass - - - -
    test_020_switch_all_items
    + +
    test_905_network_singleton
    0.00 pass tests.api.test_network:TestNetwork - 3.01 + 2.04 9 9 0 0 - Detail + Detail - +
    test_000_network_awake
    - 1.00 + 0.00 pass - +
    test_010_network_ready
    0.00 pass - +
    test_100_network_test
    0.00 pass - +
    test_110_network_heal
    0.00 pass - +
    test_120_network_poll
    0.00 pass - +
    test_200_network_to_dict
    0.00 pass - +
    test_220_network_nodes_to_dict
    0.00 pass - +
    test_300_network_kvals_nodes
    - 1.05 + 1.07 pass - +
    test_310_network_kvals_controller
    0.06 pass - tests.api.test_nodes:TestNodes - 1.00 - 4 - 4 + tests.manager.autobuild.test_manager:ManagerTest + 0.07 + 1 + 1 0 0 - Detail - - - -
    test_000_nodes_count
    - 1.00 - pass + Detail - -
    test_100_nodes_test
    - 0.00 - pass - - - -
    test_200_nodes_to_dict
    - 0.00 - pass - - - -
    test_210_controller_to_dict
    - 0.00 + +
    test_000_import
    + 0.07 pass tests.web.test_server:FlaskServerTest - 0.03 + 0.04 9 9 0 0 - Detail + Detail - +
    test_000_server_start
    - 0.01 + 0.02 pass - +
    test_001_error_404
    0.00 pass - +
    test_100_home_is_up
    0.00 pass - +
    test_200_controller_is_up
    0.00 pass - +
    test_300_values_is_up
    0.00 pass - +
    test_400_controller_is_up
    0.00 pass - +
    test_500_node_is_up
    0.00 pass - +
    test_600_map_is_up
    0.00 pass - +
    test_700_scenes_is_up
    0.00 pass - tests.manager.autobuild.test_manager:ManagerTest - 0.02 - 1 - 1 + tests.lib.autobuild.test_lib:TestInit + 0.00 + 4 + 4 0 0 - Detail + Detail - -
    test_000_import
    - 0.02 + +
    test_000_init
    + 0.00 + pass + + + +
    test_010_options_exceptions
    + 0.00 + pass + + + +
    test_020_options_without_command_line
    + 0.00 + pass + + + +
    test_030_options_with_command_line
    + 0.00 pass - tests.lib.autobuild.test_lib:TestInit + tests.api.test_nodes:TestNodes 0.00 - 4 - 4 + 5 + 5 0 0 - Detail + Detail - -
    test_000_init
    + +
    test_000_nodes_count
    0.00 pass - -
    test_010_options_exceptions
    + +
    test_100_nodes_test
    0.00 pass - -
    test_020_options_without_command_line
    + +
    test_200_nodes_to_dict
    0.00 pass - -
    test_030_options_with_command_line
    + +
    test_210_controller_to_dict
    + 0.00 + pass + + + +
    test_220_nodes_groups_to_dict
    0.00 pass - tests.api.autobuild.test_api:TestNetworkApi + tests.api.test_value:TestValue + 0.00 + 1 + 1 + 0 + 0 + Detail + + + +
    test_200_values_to_dict
    + 0.00 + pass + + + + tests.api.test_scene:TestScene 0.00 3 3 @@ -726,19 +738,19 @@

    Unit Test Report

    -
    test_000_api_network
    +
    test_005_scene_add_remove
    0.00 pass -
    test_900_api_singleton
    +
    test_010_scenes_to_dict
    0.00 pass -
    test_905_network_singleton
    +
    test_020_scene_to_dict
    0.00 pass @@ -777,11 +789,33 @@

    Unit Test Report

    pass + + tests.api.test_sensor:TestSensor + 0.00 + 2 + 2 + 0 + 0 + Detail + + + +
    test_010_sensor_bool
    + 0.00 + pass + + + +
    test_410_sensor_decimal
    + 0.00 + pass + + Total - 2:25.09 - 73 - 73 + 1:15.03 + 77 + 77 0 0   diff --git a/docs/joomla/objects.inv b/docs/joomla/objects.inv index 0fb48823749ccb778e193d84d20f05a2a9e671b4..762ff856ee6cbf358370308ef80b41e291f44f25 100644 GIT binary patch delta 4729 zcmV-<5{B)%CHy6joqs2jb*&S7qIp#9g$0q2#0f=m2{N|w>$mZuNCE`ALFN=i7C=1u z-CsA)RhE|-f4dQF_DjL`ytsMy^G$tucQ${xJ+tSk7hH|YcKQb|?8tv&Syt6;UX`M4^71$yRpk4s=6~h)SN4tTvH!ez_fszF zswjAd`EA;8)^d^Zl4E{;z~@JUepQiJ7f@ z;Is7bm+f z!h=elA5Z(LK{9}nGOus|97yd#xEmlC)*>kqNJdFM^?xw@joPaLUdvPLVQboC0!y9x zQG3qLAoWR45?!k9C!+~;G}}~%7HB{TT9Q0JSKsi8X3vj#d3{1!ozJYya1SbAH+%O#{z=~idWLQp=)c*aIt{~Jg z@wZ&Gf`7zRxNS(un5SKxfq*0{R&@qlnYR@2g}1^60zA8bEXElkDG+)yP^p3kac1a5;H{^kk@y=xuDu20U(Y$QLDS70bt(BnMnc z7a2HfN>FwERUaRUlWqeRf5xW-zTD#`FzN>D#4y^c?Xt01wO=M$cygiNFD&M60Kh46Vd`?hw|gkB=OOm zk4@FpBymr$P1NKR*-cQ&1CJFSc(i*ks!<&qW?WGnHNn#~q>K&We_iQ=va-rn5`c`# z(wu4=^(3D~4uV!%4#+EtQ&M{-a2g-v#J*6D337HYu&CDTksgS#hXuAvL-9&M+7R?V zMU82iiJ%n|?Zt}-ssoqhf_R5h-G$W^gFpwt(lAO~$}#MN^kIWEYa`h*N4urOe1f3G zR$`=>phg$$w$C|iE%p0&aJXQ-o!D+4~?f}K~FtcPY1st$;)W@Vm$@)8DGB| z7}xdXm$Obn{>$-_^&j3TMLC#pG{$|@VAS<5%Fq}MRNn+f*wD;yjQK7!N=lj05cneS zd+UOak3oGG7^Thr;TZLeGorp!-(O$({+8ACt=0sSBkzAPfB&#*|2Mc>qfz>+&=~Dv zkH)C40%J5C4Tq?277qLNzkk8U&+?OEB^b|IFmb@%=QlqOj(W-_u30vp2f$U`fMMr|5quE z#L#D=k1a8tf7S32zHry*u^&Lv{FS$-_f`5kXxUqkCFUb>shU%I8rUfjDUUGG(h@}3 zcwqz93KCN;zHpXZ!t@kzXbrE6T$`1Nj7l$_n!go_3m%nDR&tJ;P3Y z)MS!ena@r#kSOS_TIn}Dv4uTNPd(`k)+Fm0Y26LTe;KqRx3n59aMbWW)kj#5G|(qY z7|5jn1HwSLr{}|gMAJr2szp5O&oEO`R&9Q`ByGb=!F2R%H0@BlE{dwh@=$%T34O}q zyd)^OO&v*cXsUCPX9>{uP<_VGrHydmXmUbE+L>I>x_$~=lx{BT%% zJxP|I$p6_1J#;-38xG|L4q3&4pR^14r%AePq<@WLnrIg=Q3$a$;?`vCuJcKs5_4XG zH41Q~XvV!e~79m95^s_h7=VgX`QnTNL2p>%DYQY zM#KCasT29P43Doda-YAylDTANHXE@b=~?Z=Xg#Yxe}#K=?sn+wc$T2fLK?1WpcK?F zM*f3P#cJ$}hFGjQNj1+(cfn2*VS~?#0&p!8E3&>_?-(zx94?drqbTjCaCi?&%xx`< zf1`HhHb27riAL{)EZC57m}Scz z%bcvx!Dq>KKgKPV$Ru!!8C*icL5G!z3=2DsDCH)6HpOS1TVAEq>V~Jek9cuRrG3Z0 zOiFG83Q<62(EJ=p7<2x==>7k&_dnU!e@B_SiIC$vh0FUx;qu0A=N8nJvYPGlB5!lP zhN0n19!{)0a-g65kgriWMRnA1rQJ16u)+kF`pIT zwYUhP-~M=Dz(F70Qr?G6dHnt)l7PKXb9A26Q`h^MIR8#vgd1VWOKeaF_Fj0$da(G!-jEY2X-F zoehr#46ERFJZFkj1qxQLZJ`&9%2@3e{wl$pFGG8Aqo8qA5CV)DB~Mm5y}*rXnm?U| zAg0ksiTBb{gpr4?OpU(YjGLvKlevnV=rj8SA2Nec9ojDvp%iJ_b2$xN46O+++{p)%k24I0`pHKQmsd5Bl31FU!UeeD@^Y}s~VNXW1giXHvorp zc;x8cI^JBs4?M2JevGGjm|h9Zd{-s_(9LtX#_~4hrHQJSo9VW@KlixA|re`a$}YTiBdS!yt) zAf$w?3#_o1ax}Y7q7#m%F!N-`bSSJ&9zHe{I{w0?Oe7|(Z)kzFQ~Wtx!_P66fXNw3 zXxg(ZWseqmQq!3ge|^TOm;g;0{eUwg1E!bsy;bOHq8nl(-o5riL9hZ5=8fX!J-p%V zo^{!mRhUyV*KRnf)fK;~!LY{0d6}ZqODf5rKTcp!TnBG>f<}tF)q{+A`vB z4XCV-r>rzuSe6aavumNtPxh+TVwbgFjt%t&*Yril=flvB|WHGT_&Hi_eLb@G89xILFk z5oIS+6&6)4O|4H2c)?e@2nQ1K!S4i56rylR*`UO7)0MFa*JygMD7h$j+tAP*0FS(; zZpeAk(UuR zhuA}u0%E&rbaq62^jJrfR6DvVJz%?Rl(6fKhE*3m)T^}Xy%Xf*)f}LxuBE(_A+bYV z#FyDk@0ymg`Yd~ym?k&^p;R30u8n_}e|abB9i^Co%1S=bt|8?-bFwgvs6fww(_VKi z`d}A*CU7v*ChwUO?=^*LBef`xWX(`LA|b#r17Si|I6ORm`gHgCee&>hx7!gSK}3wA z$ArY<6E}d1?bHjZHh>zSGs3eeIdqo-6mfrlO~E$Wvxx^zbZk{{auP=k__&KKe+*Lb zI6WqM?Xd@LCSqMnTUi=WV~aL`RY$3V#JZadDg286n8GpDaLTCluEAN_%iiL;{F8at zPK1jwi-JsxF5@xLatUgU1?7420;90>I4HdsuX318hP&8I4i*UFw0e*3d zU{K1+L4Vhh)9C6xyCT->eYJXTg2+C+PgVI&pVy-Q=wW^I|gd`0=jO5ARLc< z=Z`g!d|#lBX44Ff##wrru{_3YE^#(Sv!=S!_1F(NFEYBTZsdaj4%5M?f1!p^>@7O9 zVgmazKtjjI`6S@9?Iu|c8lb(MYjsNoQhbCejl#kR!}UXoUUa*rD#lnz{!*FA#G9#j1!LNaWqGXY4MOUkAqv>Vs zD{701>{uCR*_ze=m!nk@2@-5=m?e z)iI48W8Qz@!2k7IS5`ayroS&0k>+y52w*%9^_z6^P-*lmx+pw7@$_qAyFe_Ll6n|< zwrdBvKfYSZj<*}up6K^Bo22(fwXM+>(0m(4ZPO9aCh5r4Cv-t_Vk<^;AcKryIHfY> zlF9_qVmg~D;U5W{f0>rRMRkmul)n@OT1JFdL$=!Hs@R)$RV#9RMXB48nNYe$X+$0< zc6>|Z8<>;ESD24(Xd&XdD$N-qESM>YGDKuMuNW6}+(VXx!VHt*$7?ip-J2*@tz?7_MPxuaGW9E37r9M# zN+bnPE7<1q+ceZq@I6l+LoWg;sgBI$K77lr8K5sIt@Jo(Mii?>%3+=Rrf&?BFK#}T zqh9jy&5ms=uO$a(U7^1b_FYNI&SYsbY9R2rLO8JH0aY#@4hyAoxz~7Tm-b- z-!^zQYC`E7EWBN(QB^@Y={k5n$#VVueE&BTDhFrK7fU?1Zgk*{`bDQq25n(c{UZMl Hbw=pr;;an3 delta 4662 zcmV-663OlSCAuY$oqr{hb**E2qRgafFD!_JBu*%jOOUaZU%!nP1(6`w4Kk-FvH;@I z mRastU{Ov}x*>45g@#5y)uQ&Di-O2pn_Sl|^f82bkvaaAa5Av&D4!raXvfr8! z`lo`kCOuyNP=9BBw$(p)VF&&T%d)C&^QshWlb46tBi}9r};ilF+;>_-lj)Z6xDu@`8~`I`#zgn#2wkL$+H8eotW9m zcisqi5ORd1lz+Tzc>~vq9dd4uRSAD?;8JN%(??fV@I=fA*6^ZAzu_pkXOvx4p|&FE zyBGS1kr$r}`QyCYR}D{j{vEduOOZV7n!G&|cts6sft?ADsT&YtXkz=71xgu4NPVJ(s(fn=2AQ-2S`->AJB;I%x(9=4`UCa~10 zAGPD`1X7>$B+;enelnUsN3%_}Z-EAspe4!kQ}rFMXmeXW{r*c*|%);~j^RMvpNXed`myzX<$39JZaLWbo;N$o#g=?X#} z6MxG^D}P8#h1-UdjCtDC83;(SVpV6*m3d1MUwA9b5#ZSwWHHVVNrBKCN2Lmim;^fk ztMCOcGgw~-$JXH#x7Cv+K{C)xgCl1JjR_rX*Pd%Ew?vsaU>#R!&d~OrxqdJy9dlPu zNb|^xnrQQs0%=`b>|MfjzA_ktW3T?JDXzSHKUTWX6MNgSE^F{ck2B&$Z(c9RR4S3w*kS|KuDwdBmNjh9f z7a2HfN>FwEMIY~rlWqeRf5N8(zTDv^FzN>D#4yLRx_AP=5T0BtE*+ zp{cr>B<=~eiJF`uy9r9!@mTS|quqm1jq2Div4%$SaCdQadJa8Xx4uu27B%a&|DVsMhR(4#e2Q0^6mbc%>k12>PF* z#x%`D(27BO@gjoiz-750-r-PpVReNAbPy~Jqr{~g!#+qKHb}EJk}Y$zTS|;42pYB$ zBgF(2U9j6eYLGs`ds~ZedW7bR@b*$6AX^L|Hbsff2!Tz;BH-w(qDzfXczlx zjQT1tM$?fyM13=J*th@v3Ll^3C&fxIp0!}&fW6Oeeszw2NJY0V=TEF;2Ou`%waZ6y zaN@F?NpsCVJ{R)&TN6`xucd$VY`}*fC2c+`Zi=2pOTqWr3!9(C$DI0XH<$mbkVazY zGttME7|+Ume}oV2x_ayfkThTO_V~U^zkrs#1zBP~5|^qurKf?d5|Q!<6D=)4lwB{( zVXYuB<>E7E**Q#45r@|By2!OznMhQ6_S{Ai$t=?Rr>&AKH|%Mrxe`+z$)RW1s*jpX zk_+?MNgRoS-l~;;?upIpX?W^MZ?Gm=&q&K|K+d2Yf4RBUXn~`K|D`^{dZd9qSb`&$ z0t^TP<({7RdlF3>IjI)$tUtp{Nm;e|{+zT8D+SZ&*VVMHc%2nh59Pl4YyuYlD;ACEVPtMa5ph$M-i+YkQ zKal^E6ME>{6&oYU4IHwbJx z_Q|=;hin0PNhbejXiO|)oGV(O@Qq`jxO5ODe;)<7mRLFHpFsI!2};#Z-;p|ze@jq% ziD~-$EWFFG+| z$w{ht78?0>nh48zQpkWqm{>vc{c^{6Av5Aa3G+nhER{XCQNn3$5gN5KFL%mlW-L$M zf4RW)3RYs)oocWV^8?JE=meRNkr=YSvTWWdm||>=?@Au|Ii9CX{sGUE6$SWHpm54W zBCjJ~Z`MqkQQJ>Ce7i^k)eTQ`AEn_qK)YvOP1I`z3Q@Vjpr$#JFs58=(Yx4T2Yaxu zk1{+GA#}GY_3clU`gZNvtwCKWtJy9ufATixf^6+;g?6e-MA-nzDgUUb^SVi)drnLYX9 zT8k^8vQfSXm?KIeEc8!-8`U&_jTVBKMyDdYmv$n?u!>+c>EvW%RZMhmeYgxVL{RP9 z&oTul(xmlXyivYlB+x1FyC)SO-4Q3GtWpe{P&;e6+_W zJ)=~a@)Bei+wzkV%6psU%t*I6jEi@t1f!jUmQTTX?TI}^1XU~o(+S?hK-gXkraJK? z&qk|5N;{)+?}}n$oHf@bwDBDHxLb=OFn@zh|!%3IWo176aX8mZGO$-jBVW@Kl zixA|rW^+&MdwlAX)L?2YNDUl@4`6HgwQ4u#dpf9_*L!0~4;B`+q> zHVbJeBYK&P9HlQrh1%6z#+=yL;NvRTEi3^XsP>ifGLZ?WQE4D{g)3)UDMVhDrbH%P z^&KOyc8WjTYWO+E5-{OCnfvuDYsI65p44<^MNc>t6QD_>A8=-5!1R*7w*sFAx`CM8 zGS+^m9H#(Ayb|)=e`g}R-Lo$HyeO&D%(Zn$GJ2vdFS9>n`T0hbpD(Z!;0A3K5HV9O z2uuGyMze?uvq~!(mzIdb1yEUzrz|vDSe7}#*`>L`kM^pTCI@T391GS4*YsJV>ai;t z0j~G5`^wtcyHcZImC0zndzl8PrrQBIg2k^x;(`>hwEI-0e|l>ryLntyf+O_QHzJCS zXvGGz>|x+jcTkZ3!wOlbCp|O8H=T5Flhn%T7#qU)JIFW&0>+hQUT^$G!MU2_?_Sxr z)gpeNiA-#dXiUsGcUdC1%tUOfCiVs-b#*5qJ|A#tdDCx4rF)dt8&zbq$e$ckaZFdg z5Ym6ZWHA{)SzPXd4eO1=>Uc^B)NV}6&w!~)ECBQz%S7-DeJXwD;YFyO2{0xU13X;0 zSNA#ke*yi1!uCfM93eD6BJj>_h@IMsM7TEMhYTKZ)MUZe4I~4Ie1?UC^qQe zPdZ21(+sdTRZ^$=B>?T>Ld9R+3tBqg&Z00sJeI!bP=6YgFH-Aq6&B&5YT zp|whkY!&G;z>HD>HsXh)skn+NAf{Gq27K6ye^rCa>ha~v37)7Fz&TZc5~@vC#zsiJ zIu8pnN9UutW~!4ZRClSgR?bgr@OhSc9tdT*bJd2Kb%hQP|cpfc9 zfA>&Z6ng)Zm(k$3bfwS$d5BU#Y*&pAXQ+=J+lCSwU!hKWtq5DM@)upSt5<2)dnd@z zrl|~|x|Z@z0$TgLh_8wp-Zd@A^d!4`n6@wip;SiNU7PM><{hYalwt-dEBQdXhLrQf z$-*?E0zC&Vcipwjk^Ca0VDCj5&3oJud%e}c)V z^{&BL+VkGxvgna{`%Hw3F`2fQ7G1_;ux^=!8kR5uq`+z!{P2(Dklk_xUd0aPs#Mv0ll5)(k$G*>bkyk^Ti{qCrku6tBd zAqKwjCLTp(_{_Hwqh$Mge<~j3OWI<2+2y@(YVWA<0ZmtP`Xb2xv#ch%TEzxUFJ@oO zSQPF$?qAMQS`!DJM zO^Y#I6l41Lk5cXRTSFGR=%&*xHT!GK5m(8)(`j{sMj0yTokiDNf2T*DeoJhVh51TN z4&zW{gH78b$;lp}lYlqOzls%D`7K?LUb|NPgBL-O}nVMw!Wft++>(g?nP;>9VifdOXQn?lg3xS zj_&&);+hXl85JxTf1ijlC}h{G7{~9rSt==WF-(ddFBs^uHzF)r$$G4{brP~yh8hta zjBqp{ExpCBis@gi5z*ADaN5zta+*9HjC9AnJcpdbjSRSocAV`@b}l3ZP^-SCqsp{g zo8bF~JO*1texf?EG56s+TTP_bl7cx8PS2iLEmFF*;j6y6e@ebU_)uOoT#xVSYdc=e zIa>2^;dp7Owinav}dsszMO;>{w%c~|*a;R@y z!M-JFVj5i>O@5WaNLy)8Xg0eylpt&mwl7AY`!g)d@b5C1OYzl#tVNbmR8P8*$LK{K z(bYgk^qVObRHV0zdnBU6X(LQ?QSTh5qd2|G*j3|wr-52TMz+5_?j(Fc>5nVC-IY

    Report

    -

    1527 statements analysed.

    +

    4107 statements analysed.

    Statistics by type

    @@ -15,52 +15,69 @@

    Statistics by type

    - - + + - + - - + + - + - - - - - + + + + + - - + + - - + +
    module11112525 =90.9188.00 0.00
    class29297777 =100.0061.04 0.00
    method305305=100.004.26531530+1.0083.433.01
    function003939 =007.690.00

    External dependencies

    -
    libopenzwave (openzwave.network,openzwave.controller,openzwave.option)
    -louie 
    -  \-dispatcher (openzwave.network,openzwave.controller)
    -openzwave (openzwave.network)
    +
    flask (pyozwweb.app.views,pyozwweb.app.socket.chat,pyozwweb.app.listener,pyozwweb.app,pyozwweb.app.socket.ozwave)
    +flask_fanstatic (pyozwweb.app)
    +gevent 
    +  \-monkey (openzwave.controller,pyozwman.ozwsh_main,pyozwweb.app.socket.ozwave,openzwave.command,openzwave.network,pyozwweb.app.socket.chat,pyozwweb.app.views,openzwave.node,pyozwweb.run,openzwave.group,openzwave.scene,pyozwweb.app.listener,openzwave.object,openzwave.option,openzwave.singleton,pyozwman.ozwsh_widgets,pyozwweb.app,openzwave.value)
    +libopenzwave (openzwave.network,openzwave.controller,openzwave.option,pyozwweb.app.socket.ozwave,pyozwweb.app.views)
    +louie (pyozwweb.app.socket.ozwave,pyozwweb.app.views,pyozwman.ozwsh_main,pyozwweb.app.listener,pyozwman.ozwsh_widgets,pyozwweb.app)
    +  \-dispatcher (openzwave.controller,pyozwweb.app.socket.ozwave,pyozwman.ozwsh_main,openzwave.network,pyozwweb.app.views,pyozwweb.app.listener,pyozwman.ozwsh_widgets,pyozwweb.app)
    +openzwave (openzwave.network,pyozwweb.app.views,pyozwweb.app.socket.ozwave)
       \-command (openzwave.node)
    -  \-controller (openzwave.network)
    +  \-controller (pyozwweb.app.socket.ozwave,openzwave.network,pyozwman.ozwsh_main,pyozwweb.app.listener,pyozwman.ozwsh_widgets,pyozwweb.app.views)
       \-group (openzwave.node)
    -  \-node (openzwave.network)
    +  \-network (pyozwweb.app.socket.ozwave,pyozwweb.app.views,pyozwman.ozwsh_main,pyozwweb.app.listener,pyozwman.ozwsh_widgets,pyozwweb.app)
    +  \-node (openzwave.network,pyozwman.ozwsh_main,pyozwman.ozwsh_widgets,pyozwweb.app.socket.ozwave,pyozwweb.app.views)
       \-object (openzwave.controller,openzwave.command,openzwave.network,openzwave.node,openzwave.group,openzwave.scene,openzwave.option,openzwave.value)
    -  \-scene (openzwave.network)
    -  \-singleton (openzwave.network,openzwave.option)
    -  \-value (openzwave.node)
    + \-option (pyozwweb.app.socket.ozwave,openzwave.network,pyozwman.ozwsh_main,pyozwweb.app.listener,pyozwman.ozwsh_widgets,pyozwweb.app,pyozwweb.app.views) + \-scene (openzwave.network,pyozwman.ozwsh_main,pyozwman.ozwsh_widgets,pyozwweb.app.socket.ozwave,pyozwweb.app.views) + \-singleton (openzwave.network,openzwave.option,pyozwweb.app.listener) + \-value (pyozwweb.app.views,pyozwman.ozwsh_main,pyozwman.ozwsh_widgets,pyozwweb.app.socket.ozwave,openzwave.node) +pyozwman + \-ozwsh_widgets (pyozwman.ozwsh_main) +pyozwweb + \-app (pyozwweb.run,pyozwweb.reload,pyozwweb.app.socket.chat,pyozwweb.app.socket.ozwave,pyozwweb.app.views) + \-listener (pyozwweb.app.views,pyozwweb.app) + \-socket + | \-ozwave (pyozwweb.app) + \-views (pyozwweb.app) +urwid (pyozwman.ozwsh_main,pyozwman.ozwsh_widgets) + \-raw_display (pyozwman.ozwsh_main,pyozwman.ozwsh_widgets) +yaml (pyozwweb.app)

    Raw metrics

    @@ -73,31 +90,31 @@

    Raw metrics

    - - - - + + + + - - - - + + + + - - - + + + - - - - + + + +
    code182132.941821=500851.444995+13.00
    docstring326259.003262=384239.473829+13.00
    comment821.48822752.82275 =
    empty3646.58364=6106.27609+1.00
    @@ -112,15 +129,15 @@

    Duplication

    nb duplicated lines -132 -132 -= +2136 +2131 ++5.00 percent duplicated lines -2.393 -2.393 -= +21.409 +21.417 +-0.01
    @@ -135,26 +152,26 @@

    Messages by category

    convention -67 -67 -= +891 +888 ++3.00 refactor -18 -18 +63 +63 = warning -87 -87 -= +505 +501 ++4.00 error -58 -58 +90 +90 = @@ -171,80 +188,178 @@

    % errors / warnings by module

    openzwave.command -55.17 -1.15 +35.56 +0.20 0.00 -1.49 +0.11 +pyozwman.ozwsh_widgets +23.33 +30.50 +30.16 +61.95 + + openzwave.option -34.48 +22.22 +0.00 0.00 -27.78 -5.97 +0.45 - + openzwave.network -6.90 -74.71 -33.33 -29.85 +4.44 +13.47 +9.52 +2.24 + + +pyozwman.ozwsh_main +4.44 +11.68 +6.35 +16.84 + + +pyozwweb.app.__init__ +2.22 +4.95 +0.00 +2.58 + + +pyozwweb.app.listener +2.22 +4.36 +0.00 +1.80 + + +pyozwweb.app.views +1.11 +5.74 +0.00 +1.01 + + +pyozwweb.app.socket.ozwave +1.11 +4.16 +3.17 +5.05 openzwave.node -1.72 -12.64 -5.56 -16.42 +1.11 +3.76 +1.59 +1.91 +pyozwweb.app.socket.chat +1.11 +1.78 +38.10 +1.12 + + openzwave.controller -1.72 -3.45 -11.11 -28.36 +1.11 +0.99 +4.76 +2.13 + + +pyozwweb.shell +0.00 +15.25 +0.00 +0.00 openzwave.value 0.00 -6.90 -22.22 -2.99 +1.58 +6.35 +0.34 -openzwave +openzwave.group 0.00 -1.15 +0.59 0.00 -1.49 +0.34 openzwave.scene 0.00 +0.20 +0.00 +0.34 + + +pyozwweb +0.00 +0.20 +0.00 +0.11 + + +pyozwman 0.00 +0.20 0.00 -4.48 +0.11 -openzwave.object +openzwave +0.00 +0.20 +0.00 +0.11 + + +pyozwweb.app.socket.__init__ 0.00 +0.20 0.00 0.00 -4.48 + + +pyozwweb.config +0.00 +0.00 +0.00 +0.67 +openzwave.object +0.00 +0.00 +0.00 +0.34 + + openzwave.singleton 0.00 0.00 0.00 -2.99 +0.22 + + +pyozwweb.run +0.00 +0.00 +0.00 +0.11 -openzwave.group +pyozwweb.reload 0.00 0.00 0.00 -1.49 +0.11 @@ -256,127 +371,183 @@

    Messages

    occurrences -no-member -56 +bad-whitespace +406 -star-args -42 +bad-continuation +204 + + +missing-docstring +157 + + +unused-import +116 invalid-name -36 +93 -line-too-long -16 +unused-argument +82 -bad-whitespace -11 +no-member +81 + + +unused-wildcard-import +72 + + +star-args +43 bare-except -9 +33 -unused-import -7 +super-init-not-called +25 -logging-not-lazy -6 +line-too-long +23 -too-many-public-methods -4 +redefined-builtin +22 -super-init-not-called -4 +duplicate-code +20 -reimported -4 +logging-not-lazy +17 + + +unused-variable +15 + + +attribute-defined-outside-init +13 redefined-outer-name -4 +12 -duplicate-code -4 +no-self-use +10 -too-many-branches -3 +dangerous-default-value +10 -redefined-builtin -3 +bad-indentation +10 + + +too-many-instance-attributes +8 + + +reimported +8 import-error -3 +8 + + +pointless-statement +7 + + +global-statement +7 too-many-statements -2 +6 -too-many-return-statements -2 +too-many-branches +6 no-name-in-module -2 +6 -fixme -2 +too-many-public-methods +5 -bad-mcs-method-argument +relative-import +5 + + +too-many-return-statements +4 + + +superfluous-parens +4 + + +cyclic-import +3 + + +wildcard-import 2 -attribute-defined-outside-init +undefined-variable 2 -unused-variable -1 +too-many-lines +2 -undefined-loop-variable -1 +fixme +2 -too-many-lines -1 +bad-mcs-method-argument +2 -too-many-instance-attributes +unexpected-keyword-arg 1 -pointless-string-statement +undefined-loop-variable 1 -parse-error +pointless-string-statement 1 -no-self-use +parse-error 1 -missing-docstring +interface-not-implemented 1 -interface-not-implemented +global-variable-not-assigned 1 @@ -387,7 +558,7 @@

    Messages

    Global evaluation

    -Your code has been rated at 6.97/10 (previous run: 6.97/10, +0.00)
    +Your code has been rated at 5.35/10 (previous run: 5.35/10, -0.00)

    Messages

    @@ -427,7 +598,7 @@

    Messages

    - + @@ -435,7 +606,7 @@

    Messages

    - + @@ -443,39 +614,23 @@

    Messages

    - + - + - + - - - - - - - - - - - - - - - - - + - + - + - + - + - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + @@ -519,7 +834,7 @@

    Messages

    - + @@ -527,7 +842,7 @@

    Messages

    - + @@ -535,7 +850,7 @@

    Messages

    - + @@ -543,15 +858,31 @@

    Messages

    - + + + + + + + + + + + + + + + + + - + @@ -559,7 +890,7 @@

    Messages

    - + @@ -567,7 +898,7 @@

    Messages

    - + @@ -575,131 +906,147 @@

    Messages

    - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + - + @@ -707,7 +1054,7 @@

    Messages

    - + @@ -715,7 +1062,7 @@

    Messages

    - + @@ -723,7 +1070,7 @@

    Messages

    - + @@ -731,7 +1078,7 @@

    Messages

    - + @@ -739,7 +1086,7 @@

    Messages

    - + @@ -747,7 +1094,7 @@

    Messages

    - + @@ -755,17 +1102,17 @@

    Messages

    - + - + @@ -773,7 +1120,7 @@

    Messages

    - + @@ -781,23 +1128,39 @@

    Messages

    - + + + + + + + + + - + + + + + + + + + - + @@ -805,7 +1168,7 @@

    Messages

    - + @@ -813,7 +1176,7 @@

    Messages

    - + @@ -821,7 +1184,7 @@

    Messages

    - + @@ -829,7 +1192,7 @@

    Messages

    - + @@ -837,7 +1200,7 @@

    Messages

    - + @@ -845,7 +1208,7 @@

    Messages

    - + @@ -853,7 +1216,7 @@

    Messages

    - + @@ -861,7 +1224,7 @@

    Messages

    - + @@ -869,7 +1232,7 @@

    Messages

    - + @@ -877,7 +1240,7 @@

    Messages

    - + @@ -885,7 +1248,7 @@

    Messages

    - + @@ -893,545 +1256,577 @@

    Messages

    - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + - + + + + + + + + + - + @@ -1439,15 +1834,15 @@

    Messages

    - + - + - + @@ -1455,7 +1850,7 @@

    Messages

    - + @@ -1463,15 +1858,15 @@

    Messages

    - + - + - + @@ -1479,7 +1874,7 @@

    Messages

    - + @@ -1487,7 +1882,7 @@

    Messages

    - + @@ -1495,7 +1890,7 @@

    Messages

    - + @@ -1503,15 +1898,15 @@

    Messages

    - + - + - + @@ -1519,7 +1914,7 @@

    Messages

    - + @@ -1527,7 +1922,7 @@

    Messages

    - + @@ -1535,7 +1930,7 @@

    Messages

    - + @@ -1543,7 +1938,7 @@

    Messages

    - + @@ -1551,7 +1946,7 @@

    Messages

    - + @@ -1559,15 +1954,15 @@

    Messages

    - + - + - + @@ -1575,7 +1970,7 @@

    Messages

    - + @@ -1583,7 +1978,7 @@

    Messages

    - + @@ -1591,7 +1986,7 @@

    Messages

    - + @@ -1599,7 +1994,7 @@

    Messages

    - + @@ -1607,7 +2002,7 @@

    Messages

    - + @@ -1615,7 +2010,7 @@

    Messages

    - + @@ -1623,7 +2018,7 @@

    Messages

    - + @@ -1631,7 +2026,7 @@

    Messages

    - + @@ -1639,7 +2034,7 @@

    Messages

    - + @@ -1647,7 +2042,7 @@

    Messages

    - + @@ -1655,7 +2050,7 @@

    Messages

    - + @@ -1663,7 +2058,7 @@

    Messages

    - + @@ -1671,7 +2066,7 @@

    Messages

    - + @@ -1679,7 +2074,7 @@

    Messages

    - + @@ -1687,7 +2082,7 @@

    Messages

    - + @@ -1695,7 +2090,7 @@

    Messages

    - + @@ -1703,7 +2098,7 @@

    Messages

    - + @@ -1711,7 +2106,7 @@

    Messages

    - + @@ -1719,7 +2114,7 @@

    Messages

    - + @@ -1727,15 +2122,15 @@

    Messages

    - + - + - + @@ -1743,7 +2138,7 @@

    Messages

    - + @@ -1751,7 +2146,7 @@

    Messages

    - + @@ -1759,15 +2154,15 @@

    Messages

    - + - + - + @@ -1775,7 +2170,7 @@

    Messages

    - + @@ -1783,7 +2178,7 @@

    Messages

    - + @@ -1791,7 +2186,7 @@

    Messages

    - + @@ -1799,7 +2194,7 @@

    Messages

    - + @@ -1807,7 +2202,7 @@

    Messages

    - + @@ -1815,7 +2210,7 @@

    Messages

    - + @@ -1823,7 +2218,7 @@

    Messages

    - + @@ -1831,7 +2226,7 @@

    Messages

    - + @@ -1839,7 +2234,7 @@

    Messages

    - + @@ -1847,7 +2242,7 @@

    Messages

    - + @@ -1855,7 +2250,7 @@

    Messages

    - + @@ -1863,7 +2258,7 @@

    Messages

    - + @@ -1871,7 +2266,7 @@

    Messages

    - + @@ -1879,7 +2274,7 @@

    Messages

    - + @@ -1887,7 +2282,7 @@

    Messages

    - + @@ -1895,7 +2290,7 @@

    Messages

    - + @@ -1903,7 +2298,7 @@

    Messages

    - + @@ -1911,7 +2306,7 @@

    Messages

    - + @@ -1919,7 +2314,7 @@

    Messages

    - + @@ -1927,7 +2322,7 @@

    Messages

    - + @@ -1935,7 +2330,7 @@

    Messages

    - + @@ -1943,7 +2338,7 @@

    Messages

    - + @@ -1951,7 +2346,7 @@

    Messages

    - + @@ -1959,7 +2354,7 @@

    Messages

    - + @@ -1967,7 +2362,7 @@

    Messages

    - + @@ -1975,25 +2370,43 @@

    Messages

    - + + + + + + + + + - + + + + + + + + + - + @@ -2001,7 +2414,7 @@

    Messages

    - + @@ -2009,7 +2422,7 @@

    Messages

    - + @@ -2017,7 +2430,7 @@

    Messages

    - + @@ -2025,7 +2438,7 @@

    Messages

    - + @@ -2033,7 +2446,7 @@

    Messages

    - + @@ -2041,7 +2454,7 @@

    Messages

    - + @@ -2049,302 +2462,12376 @@

    Messages

    - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + - - - - + + + + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    convention openzwave.object  316321 0 Line too long (152/140)
    convention openzwave.object  317322 0 Line too long (152/140)
    convention openzwave.object  3540 0 Invalid constant name "logger"
    conventionwarning openzwave.group  37171 0Invalid constant name "logger"
    conventionopenzwave.singletonSingleton.__init__304Metaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__394Metaclass method __call__ should have 'cls' as first argumentBad indentation. Found 16 spaces, expected 12
    conventionopenzwave.nodeopenzwave.group  181172 0 Exactly one space required around assignment ret={} @@ -483,35 +638,195 @@

    Messages

    conventionopenzwave.nodeopenzwave.group  192174 0Exactly one space required around assignment - ret[key]=vals[key] - ^No space allowed before : + if 'associations' in extras : + ^
    conventionopenzwave.nodewarningopenzwave.group  41175 0Invalid constant name "logger"Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.group 420Invalid constant name "logger"
    warningopenzwave.groupZWaveGroup.to_dict1604Dangerous default value [] as argument
    conventionopenzwave.singletonSingleton.__init__354Metaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__444Metaclass method __call__ should have 'cls' as first argument
    warningopenzwave.node 1900Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 1910Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.node 1970No space allowed before : + if 'values' in extras : + ^
    warningopenzwave.node 1980Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 1990No space allowed before : + if 'groups' in extras : + ^
    warningopenzwave.node 2000Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2010No space allowed before : + if 'neighbors' in extras : + ^
    warningopenzwave.node 2020Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2030No space allowed before : + if 'capabilities' in extras : + ^
    warningopenzwave.node 2040Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2080Exactly one space required around assignment + ret[key]=vals[key] + ^
    conventionopenzwave.node 2840Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.node 4540Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.node 460Invalid constant name "logger"
    convention openzwave.node ZWaveNode.__init__698Invalid attribute name "_isReady"
    warningopenzwave.nodeZWaveNode.__init__54748Invalid attribute name "_isReady"
    warningopenzwave.nodeZWaveNode.__init__59 4 __init__ method from base class 'ZWaveNodeSwitch' is not called
    warning openzwave.node ZWaveNode.__init__5459 4 __init__ method from base class 'ZWaveNodeBasic' is not called
    warning openzwave.node ZWaveNode.__init__5459 4 __init__ method from base class 'ZWaveNodeSensor' is not called
    warning openzwave.node ZWaveNode.__init__5459 4 __init__ method from base class 'ZWaveNodeSecurity' is not called
    warning openzwave.node ZWaveNode.__init__6469 8 Specify string format arguments as logging function parameters
    warningopenzwave.nodeZWaveNode.to_dict1794Dangerous default value [] as argument
    warningopenzwave.nodeZWaveNode.groups_to_dict2734Dangerous default value [] as argument
    convention openzwave.node ZWaveNode.heal257289 4 Invalid argument name "upNodeRoute"
    error openzwave.node ZWaveNode.heal271303 8 Instance of 'ZWaveNode' has no 'manager' member
    warning openzwave.node ZWaveNode.get_values_by_command_classes333365 8 Redefining built-in 'type'
    warning openzwave.node ZWaveNode.get_values381413 8 Redefining built-in 'type'
    warning openzwave.nodeZWaveNode.values_to_dict4444Dangerous default value [] as argument
    warningopenzwave.node ZWaveNode.remove_value459506 12 Specify string format arguments as logging function parameters
    warning openzwave.node ZWaveNode.request_all_config_params715762 8 Specify string format arguments as logging function parameters
    warning openzwave.node ZWaveNode.request_config_param736783 8 Specify string format arguments as logging function parameters
    warning openzwave.node ZWaveNode.set_config_param759806 8 Specify string format arguments as logging function parameters
    convention openzwave.node ZWaveNode.isNodeAwake780827 4 Invalid method name "isNodeAwake"
    convention openzwave.node ZWaveNode.isNodeFailed791838 4 Invalid attribute name "isNodeFailed"
    convention openzwave.node ZWaveNode.getNodeQueryStage802849 4 Invalid attribute name "getNodeQueryStage"
    convention openzwave.node ZWaveNode.isReady812859 4 Invalid attribute name "isReady"
    convention openzwave.node ZWaveNode.isReady822869 4 Invalid attribute name "isReady"
    convention openzwave.node ZWaveNode.isNodeInfoReceived834881 4 Invalid attribute name "isNodeInfoReceived"
    refactor openzwave.node ZWaveNode4449 0Too many public methods (51/20)Too many public methods (53/20)
    convention openzwave.scene  213221 0 Exactly one space required around assignment ret={} ^
    convention openzwave.scene  219227 0 Exactly one space required around assignment ret[key]=vals[key] ^
    convention openzwave.scene  3742 0 Invalid constant name "logger"
    warningopenzwave.sceneZWaveScene.to_dict2114Dangerous default value [] as argument
    convention openzwave.controller  6470 0 Line too long (186/140)
    convention openzwave.controller  7278 0 Line too long (179/140)
    convention openzwave.controller  8288 0 Line too long (147/140)
    convention openzwave.controller  8389 0 Line too long (158/140)
    convention openzwave.controller  8490 0 Line too long (156/140)
    convention openzwave.controller  8692 0 Line too long (161/140)
    convention openzwave.controller  154171 0 Line too long (141/140)
    convention openzwave.controller  703766 0 Exactly one space required around assignment - ret=self.node.to_dict() + ret=self.node.to_dict(extras=extras) ^
    fatal openzwave.controller  2934 4 Unable to import 'pydispatch'
    error openzwave.controller  3439 0 No name 'PyStatDriver' in module 'libopenzwave'
    convention openzwave.controller  4551 0 Invalid constant name "logger"
    refactor openzwave.controllerZWaveController540Too many instance attributes (9/7)
    refactoropenzwave.controller ZWaveController.get_stats_label342359 4 Method could be a function
    warningopenzwave.controllerZWaveController.do_poll_statistics3788Used * or ** magic
    warning openzwave.controller ZWaveController.hard_reset429489 8 Used * or ** magic
    convention openzwave.controller ZWaveController.begin_command_send_node_information442502 4 Invalid method name "begin_command_send_node_information"
    convention openzwave.controller ZWaveController.begin_command_request_network_update470530 4 Invalid method name "begin_command_request_network_update"
    convention openzwave.controller ZWaveController.begin_command_remove_failed_node513573 4 Invalid method name "begin_command_remove_failed_node"
    convention openzwave.controller ZWaveController.begin_command_replace_failed_node542602 4 Invalid method name "begin_command_replace_failed_node"
    convention openzwave.controller ZWaveController.begin_command_request_node_neigbhor_update556616 4 Invalid method name "begin_command_request_node_neigbhor_update"
    convention openzwave.controller ZWaveController.begin_command_create_new_primary570630 4 Invalid method name "begin_command_create_new_primary"
    convention openzwave.controller ZWaveController.begin_command_transfer_primary_role581641 4 Invalid method name "begin_command_transfer_primary_role"
    convention openzwave.controller ZWaveController.begin_command_receive_configuration598658 4 Invalid method name "begin_command_receive_configuration"
    convention openzwave.controller ZWaveController.begin_command_assign_return_route609669 4 Invalid method name "begin_command_assign_return_route"
    convention openzwave.controller ZWaveController.begin_command_delete_all_return_routes624684 4 Invalid method name "begin_command_delete_all_return_routes"
    warning openzwave.controller ZWaveController.zwcallback691751 12 Used * or ** magic
    warning openzwave.controller ZWaveController.zwcallback693753 8 Used * or ** magic
    warningopenzwave.controllerZWaveController.to_dict7564Dangerous default value [] as argument
    refactor openzwave.controller ZWaveController4854 0Too many public methods (40/20)Too many public methods (43/20)
    convention openzwave.command  3843 0 Invalid constant name "logger"
    error openzwave.command ZWaveNodeBasic.get_battery_level285290 23 Instance of 'ZWaveNodeBasic' has no 'values' member
    error openzwave.command ZWaveNodeBasic.get_battery_level287292 19 Instance of 'ZWaveNodeBasic' has no 'values' member
    error openzwave.command ZWaveNodeBasic.get_battery_levels305310 15 Instance of 'ZWaveNodeBasic' has no 'get_values' member
    error openzwave.command ZWaveNodeBasic.get_power_level320325 23 Instance of 'ZWaveNodeBasic' has no 'values' member
    error openzwave.command ZWaveNodeBasic.get_power_level322327 19 Instance of 'ZWaveNodeBasic' has no 'values' member
    error openzwave.command ZWaveNodeBasic.get_power_levels340345 15 Instance of 'ZWaveNodeBasic' has no 'get_values' member
    error openzwave.command ZWaveNodeBasic.can_wake_up354359 14 Instance of 'ZWaveNodeBasic' has no 'get_values' member
    error openzwave.command ZWaveNodeSwitch.get_switches_all382387 15 Instance of 'ZWaveNodeSwitch' has no 'get_values' member
    error openzwave.command ZWaveNodeSwitch.set_switch_all397402 12 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_state413418 23 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_state415420 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_state416421 27 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_state418423 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_state419424 23 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_item437442 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_all_items452457 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switches471476 15 Instance of 'ZWaveNodeSwitch' has no 'get_values' member
    error openzwave.command ZWaveNodeSwitch.set_switch486491 12 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_switch_state502507 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_dimmers521526 15 Instance of 'ZWaveNodeSwitch' has no 'get_values' member
    error openzwave.command ZWaveNodeSwitch.set_dimmer542547 12 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.set_dimmer546551 34 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.set_dimmer548553 34 Instance of 'ZWaveNodeSwitch' has no 'values' member
    error openzwave.command ZWaveNodeSwitch.get_dimmer_level565570 19 Instance of 'ZWaveNodeSwitch' has no 'values' member
    warning openzwave.command ZWaveNodeSensor.get_sensors574579 26 Redefining built-in 'type'
    error openzwave.command ZWaveNodeSensor.get_sensors594599 22 Instance of 'ZWaveNodeSensor' has no 'get_values' member
    error openzwave.command ZWaveNodeSensor.get_sensors596601 22 Instance of 'ZWaveNodeSensor' has no 'get_values' member
    error openzwave.command ZWaveNodeSensor.get_sensors598603 22 Instance of 'ZWaveNodeSensor' has no 'get_values' member
    error openzwave.command ZWaveNodeSensor.get_sensor_value615620 19 Instance of 'ZWaveNodeSensor' has no 'values' member
    error openzwave.command ZWaveNodeSecurity.get_protections639644 15 Instance of 'ZWaveNodeSecurity' has no 'get_values' member
    error openzwave.command ZWaveNodeSecurity.set_protection654659 12 Instance of 'ZWaveNodeSecurity' has no 'values' member
    error openzwave.command ZWaveNodeSecurity.get_protection_item670675 19 Instance of 'ZWaveNodeSecurity' has no 'values' member
    error openzwave.command ZWaveNodeSecurity.get_protection_items685690 19 Instance of 'ZWaveNodeSecurity' has no 'values' member
    convention openzwave.network  186191 0 Line too long (630/140)
    convention openzwave.network  219224 0 Line too long (211/140)
    convention openzwave.network  223228 0 Line too long (209/140)
    convention openzwave.network  226231 0 Line too long (213/140)
    convention openzwave.network  351356 0 Line too long (148/140)
    convention openzwave.network  587597 0 Exactly one space required around assignment ret={} ^
    convention openzwave.network  589599 0 Exactly one space required around assignment - ret[ndid]=self._nodes[ndid].to_dict(kvals=kvals) + ret[ndid]=self._nodes[ndid].to_dict(extras=extras) ^
    convention openzwave.network  599612 0 Exactly one space required around assignment ret={} ^
    convention openzwave.network  607620 0 Exactly one space required around assignment ret[key]=vals[key] ^
    convention openzwave.network  748764 0 Exactly one space required around assignment ret={} ^
    convention openzwave.network  871887 0 Line too long (286/140)
    convention openzwave.network   1 0Too many lines in module (1613/1000)Too many lines in module (1629/1000)
    fatal openzwave.network  3136 4 Unable to import 'pydispatch'
    fatal openzwave.network  3237 4 Unable to import '_thread'
    convention openzwave.network  5661 0 Invalid constant name "logger"
    refactor openzwave.network ZWaveNetwork6469 0 Too many instance attributes (13/7)
    convention openzwave.network ZWaveNetwork273278 4 Invalid class attribute name "SIGNAL_ESSENTIAL_NODE_QUERIES_COMPLETE"
    convention openzwave.network ZWaveNetwork277282 4 Invalid class attribute name "SIGNAL_ALL_NODES_QUERIED_SOME_DEAD"
    error openzwave.network ZWaveNetwork.__init__309314 24 Module 'libopenzwave' has no 'PyManager' member
    convention openzwave.network ZWaveNetwork.__init__324329 33 Invalid variable name "e"
    warning openzwave.network ZWaveNetwork.__init__322327 16 Unused variable 'data'
    warning openzwave.network ZWaveNetwork.stop429436 12Redefining name 'sys' from outer scope (line 29)Redefining name 'sys' from outer scope (line 34)
    warning openzwave.network ZWaveNetwork.stop400407 71 Using possibly undefined loop variable 'i'
    warning openzwave.network ZWaveNetwork.stop428435 8 No exception type(s) specified
    warning openzwave.network ZWaveNetwork.stop427434 16 Used * or ** magic
    warning openzwave.network ZWaveNetwork.stop429436 12Reimport 'sys' (imported line 29)Reimport 'sys' (imported line 34)
    refactor openzwave.network ZWaveNetwork.stop372377 4Too many branches (16/12)Too many branches (17/12)
    warning openzwave.network ZWaveNetwork.home_id450457 4 Arguments number differs from overridden method
    refactor openzwave.network ZWaveNetwork.state_str519526 4 Too many return statements (7/6)
    warningopenzwave.networkZWaveNetwork.nodes_to_dict5874Dangerous default value [] as argument
    warningopenzwave.networkZWaveNetwork.to_dict6024Dangerous default value [] as argument
    convention openzwave.network ZWaveNetwork.heal650663 4 Invalid argument name "upNodeRoute"
    warningopenzwave.networkZWaveNetwork.scenes_to_dict7544Dangerous default value [] as argument
    convention openzwave.network ZWaveNetwork.set_poll_interval856872 4 Invalid argument name "bIntervalBetweenPolls"
    warning openzwave.network ZWaveNetwork.zwcallback969985 12Redefining name 'sys' from outer scope (line 29)Redefining name 'sys' from outer scope (line 34)
    warning openzwave.network ZWaveNetwork.zwcallback968984 8 No exception type(s) specified
    error openzwave.network ZWaveNetwork.zwcallback923939 16 Instance of 'ZWaveNetwork' has no '_handleNodeReady' member
    warning openzwave.network ZWaveNetwork.zwcallback969985 12Reimport 'sys' (imported line 29)Reimport 'sys' (imported line 34)
    refactor openzwave.network ZWaveNetwork.zwcallback877893 4 Too many branches (32/12)
    refactor openzwave.network ZWaveNetwork.zwcallback877893 4 Too many statements (69/50)
    warning openzwave.network ZWaveNetwork._handle_driver_failed9871003 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_failed9881004 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_ready10231039 12Redefining name 'sys' from outer scope (line 29)Redefining name 'sys' from outer scope (line 34)
    warning openzwave.network ZWaveNetwork._handle_driver_ready10221038 8 No exception type(s) specified
    warning openzwave.network ZWaveNetwork._handle_driver_ready10131029 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_ready10161032 12 Used * or ** magic
    error openzwave.network ZWaveNetwork._handle_driver_ready10181034 25 Module 'libopenzwave' has no 'PyControllerState' member
    error openzwave.network ZWaveNetwork._handle_driver_ready10191035 27 Module 'libopenzwave' has no 'PyControllerState' member
    warning openzwave.network ZWaveNetwork._handle_driver_ready10201036 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_ready10231039 12Reimport 'sys' (imported line 29)Reimport 'sys' (imported line 34)
    warning openzwave.network ZWaveNetwork._handle_driver_reset10491065 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_reset10511067 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_driver_removed10711087 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_group10891105 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node11051121 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_added11261142 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_scene_event11431159 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_event11601176 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_naming11751191 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_new11881204 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_protocol_info12041220 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_removed12271243 16 Used * or ** magic
    convention openzwave.network ZWaveNetwork._handle_essential_node_queries_complete12331249 4 Invalid method name "_handle_essential_node_queries_complete"
    warning openzwave.network ZWaveNetwork._handle_essential_node_queries_complete12451261 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_node_queries_complete12641280 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_all_nodes_queried12821298 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_all_nodes_queried12831299 8 Used * or ** magic
    convention openzwave.network ZWaveNetwork._handle_all_nodes_queried_some_dead12851301 4 Invalid method name "_handle_all_nodes_queried_some_dead"
    warning openzwave.network ZWaveNetwork._handle_all_nodes_queried_some_dead12991315 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_all_nodes_queried_some_dead13001316 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_awake_nodes_queried13261342 12Redefining name 'sys' from outer scope (line 29)Redefining name 'sys' from outer scope (line 34)
    warning openzwave.network ZWaveNetwork._handle_awake_nodes_queried13251341 8 No exception type(s) specified
    warning openzwave.network ZWaveNetwork._handle_awake_nodes_queried13221338 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_awake_nodes_queried13231339 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_awake_nodes_queried13261342 12Reimport 'sys' (imported line 29)Reimport 'sys' (imported line 34)
    warning openzwave.network ZWaveNetwork._handle_polling_disabled13431359 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_polling_enabled13581374 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_create_button13721388 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_delete_button13861402 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_button_on14001416 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_button_off14141430 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_value14311447 8 Specify string format arguments as logging function parameters
    warning openzwave.network ZWaveNetwork._handle_value14321448 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_value_added14551471 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_value_changed14801496 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_value_refreshed15031519 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_value_removed15281544 12 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_notification15451561 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork._handle_msg_complete15591575 8 Used * or ** magic
    warning openzwave.network ZWaveNetwork.nodes620633 12 Attribute '_nodes' defined outside __init__
    warning openzwave.network ZWaveNetwork.nodes622635 12 Attribute '_nodes' defined outside __init__
    refactor openzwave.network ZWaveNetwork6469 0 Too many public methods (30/20)
    warning openzwave.network  16051621 -1 String statement has no effect
    warning openzwave.network  2833 0 Unused import time
    warning openzwave.network  3237 4 Unused _thread imported as thread
    warning openzwave.network  3540 4 Unused import thread
    warning openzwave.network  3843 0 Unused import openzwave
    warning openzwave.network  3944 0 Unused ZWaveTypeException imported from openzwave.object
    warning openzwave.network  4247 0 Unused ZWaveOption imported from openzwave.option
    warning openzwave.network  4550 0 Unused import json
    warning openzwave.value  4045 0 TODO: don't report controller node as sleeping
    warning openzwave.value  4146 0 TODO: allow value identification by device/index/instance
    warningopenzwave.value 5550Bad indentation. Found 16 spaces, expected 12
    convention openzwave.value  546556 0 Exactly one space required around assignment ret={} ^
    conventionopenzwave.value 5660Exactly one space required around assignment + ret[key]=vals[key] + ^
    convention openzwave.value  3742 0 Invalid constant name "logger"
    refactor openzwave.value ZWaveValue.data_items304309 4 Too many return statements (10/6)
    warning openzwave.value ZWaveValue.check_data358363 12 No exception type(s) specified
    warning openzwave.value ZWaveValue.check_data368373 12 No exception type(s) specified
    warning openzwave.value ZWaveValue.check_data373378 12 No exception type(s) specified
    warning openzwave.value ZWaveValue.check_data383388 12 No exception type(s) specified
    refactor openzwave.value ZWaveValue.check_data333338 4 Too many branches (31/12)
    refactor openzwave.value ZWaveValue.check_data333338 4 Too many statements (61/50)
    warningopenzwave.valueZWaveValue.to_dict5444Dangerous default value [] as argument
    refactor openzwave.value ZWaveValue4247 0 Too many public methods (30/20)
    convention openzwave.option  270275 0 Line too long (161/140)
    error openzwave.option  2833 0 No name 'PyLogLevels' in module 'libopenzwave'
    convention openzwave.option  4146 0 Invalid constant name "logger"
    error openzwave.option ZWaveOption4449 18 Module 'libopenzwave' has no 'PyOptions' member
    error openzwave.option ZWaveOption.__init__7681 8 Module 'libopenzwave' has no 'PyOptions' member
    error openzwave.option ZWaveOption.set_log_file8893 15 Instance of 'ZWaveOption' has no 'addOptionString' member
    error openzwave.option ZWaveOption.set_logging98103 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_append_log_file108113 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_console_output118123 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_save_log_level140145 15 Instance of 'ZWaveOption' has no 'addOptionInt' member
    error openzwave.option ZWaveOption.set_queue_log_level162167 15 Instance of 'ZWaveOption' has no 'addOptionInt' member
    error openzwave.option ZWaveOption.set_dump_trigger_level184189 15 Instance of 'ZWaveOption' has no 'addOptionInt' member
    error openzwave.option ZWaveOption.set_associate194199 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    convention openzwave.option ZWaveOption.set_exclude196201 4 Invalid argument name "commandClass"
    error openzwave.option ZWaveOption.set_exclude204209 15 Instance of 'ZWaveOption' has no 'addOptionString' member
    convention openzwave.option ZWaveOption.set_include206211 4 Invalid argument name "commandClass"
    error openzwave.option ZWaveOption.set_include214219 15 Instance of 'ZWaveOption' has no 'addOptionString' member
    error openzwave.option ZWaveOption.set_notify_transactions224229 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_interface234239 15 Instance of 'ZWaveOption' has no 'addOptionString' member
    error openzwave.option ZWaveOption.set_save_configuration244249 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_driver_max_attempts254259 15 Instance of 'ZWaveOption' has no 'addOptionInt' member
    error openzwave.option ZWaveOption.set_poll_interval264269 15 Instance of 'ZWaveOption' has no 'addOptionInt' member
    error openzwave.option ZWaveOption.set_interval_between_polls274279 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    error openzwave.option ZWaveOption.set_suppress_value_refresh284289 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    conventionpyozwman 10Missing module docstring
    refactoropenzwave.nodeZWaveNode44warningpyozwman 26 0Interface not implementedNo exception type(s) specified
    refactoropenzwave.optionconventionpyozwman.ozwsh_widgets  156 0Similar lines in 3 files -==openzwave.group:25 -==openzwave.scene:25 -==openzwave.value:25 -from openzwave.object import ZWaveObject - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - """NullHandler logger for python 2.6""" - def emit(self, record): - pass -logger = logging.getLogger('openzwave') -logger.addHandler(NullHandler()) -No space allowed before bracket + self.usage = ['ls : list directory', 'cd &lt;directory&gt; : change to directory &lt;directory&gt;', 'exit : quit the program' ] + ^
    refactoropenzwave.optionconventionpyozwman.ozwsh_widgets  171 0Similar lines in 9 files -==openzwave.command:29 -==openzwave.controller:36 -==openzwave.group:28 -==openzwave.network:47 -==openzwave.node:32 -==openzwave.object:26 -==openzwave.option:32 -==openzwave.scene:28 -==openzwave.value:28 -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - """NullHandler logger for python 2.6""" - def emit(self, record): - pass -logger = logging.getLogger('openzwave') -logger.addHandler(NullHandler()) -Exactly one space required around comparison + if pos &gt;= 0 and pos &lt; self.size and len(self.lines)&gt;0: + ^
    refactoropenzwave.optionconventionpyozwman.ozwsh_widgets  180 0Similar lines in 2 files -==openzwave.network:603 -==openzwave.node:188 - if kvals == True and self.network.dbcon is not None: - vals = self.kvals - for key in vals.keys(): - ret[key]=vals[key] - return ret -Exactly one space required after comma + line,pos = self._get_at_pos(self.focus) + ^
    refactoropenzwave.optionconventionpyozwman.ozwsh_widgets  1131 0Similar lines in 3 files -==openzwave.network:603 -==openzwave.node:188 -==openzwave.scene:215 - if kvals == True and self.network.dbcon is not None: - vals = self.kvals - for key in vals.keys(): - ret[key]=vals[key] - return retNo space allowed before comma + self.lines.append(urwid.Text("Help" , align='left')) + ^
    conventionpyozwman.ozwsh_widgets 1760No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 1790No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 2030Exactly one space required after comma + def path(self,value): + ^
    conventionpyozwman.ozwsh_widgets 2560Exactly one space required after assignment + self.walker =StatTree(window, parent.walker, self) + ^
    conventionpyozwman.ozwsh_widgets 2640No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 2650Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 2660Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 2670Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 2680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 2720Wrong continued indentation. + 'name':'stats', + ^ |
    conventionpyozwman.ozwsh_widgets 2730Wrong continued indentation. + 'help':'statistics', + ^ |
    conventionpyozwman.ozwsh_widgets 2740Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 2750No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 2760Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 2860No space allowed after bracket + self.lines.append(urwid.Text( " Statistics", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 2880No space allowed after bracket + self.lines.append(urwid.Text( " Frames processed: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2910No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully received: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2940No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully sent: . . . . . . . . . .%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2970No space allowed after bracket + self.lines.append(urwid.Text( " ACKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3000No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts read: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3030No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts sent: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3060No space allowed after bracket + self.lines.append(urwid.Text( " Queue:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3080No space allowed after bracket + self.lines.append(urwid.Text( " Messages in queue: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3110No space allowed after bracket + self.lines.append(urwid.Text( " Errors:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3130No space allowed after bracket + self.lines.append(urwid.Text( " Unsolicited messages received while waiting for ACK: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3160No space allowed after bracket + self.lines.append(urwid.Text( " Reads aborted due to timeouts: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3190No space allowed after bracket + self.lines.append(urwid.Text( " Bad checksum errors: . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3220No space allowed after bracket + self.lines.append(urwid.Text( " CANs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3250No space allowed after bracket + self.lines.append(urwid.Text( " NAKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3280No space allowed after bracket + self.lines.append(urwid.Text( " Out of frame data flow errors: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3310No space allowed after bracket + self.lines.append(urwid.Text( " Messages retransmitted: . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3340No space allowed after bracket + self.lines.append(urwid.Text( " Messages dropped and not delivered: . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3370No space allowed after bracket + self.lines.append(urwid.Text( " Number of unexpected callbacks: . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3400No space allowed after bracket + self.lines.append(urwid.Text( " Number of failed messages due to bad route response: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3430No space allowed after bracket + self.lines.append(urwid.Text( " Number of no ACK returned errors: . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3460No space allowed after bracket + self.lines.append(urwid.Text( " Number of network busy/failure messages: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3490No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages not delivered to network: . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3520No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages received with routed busy status: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3760No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 3770Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 3780Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 3790Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 3800Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3860Wrong continued indentation. + 'name':'groups', + | ^
    conventionpyozwman.ozwsh_widgets 3870Wrong continued indentation. + 'help':'Groups/Associations management', + | ^
    conventionpyozwman.ozwsh_widgets 3880Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 3890Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3900No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 4260No space allowed before : + for group in groups : + ^
    conventionpyozwman.ozwsh_widgets 4280No space allowed after bracket + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4280Exactly one space required after comma + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4330Wrong continued indentation. + )) + ^ |
    conventionpyozwman.ozwsh_widgets 4490No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 4690No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4810No space allowed before : + if value in self.window.network.nodes[self.node_id].groups : + ^
    conventionpyozwman.ozwsh_widgets 4850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4860Exactly one space required after comma + self.window.status_bar.update(status="Can't find node %s in group %s" % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 4880No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4920No space allowed before bracket +class AssociationItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 4940No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 5000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 5090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 5130No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5240No space allowed after bracket + self.childrens = { 'controller' : {'id':'ctl', + ^
    conventionpyozwman.ozwsh_widgets 5250Wrong continued indentation. + 'name':'Controller', + ^ |
    conventionpyozwman.ozwsh_widgets 5260Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 5270Wrong continued indentation. + 'widget_box' : None}, + ^ |
    conventionpyozwman.ozwsh_widgets 5280Wrong continued indentation. + 'scenes' : {'id':'scn', + ^ |
    conventionpyozwman.ozwsh_widgets 5320Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 5540No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5600No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5690No space allowed before bracket +class RootDir (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5710No space allowed before bracket + def __init__ (self, id=None, name=None, help=None): + ^
    conventionpyozwman.ozwsh_widgets 5760Wrong continued indentation. + urwid.Padding(urwid.AttrWrap(urwid.Text('%s' % id, wrap='clip'), 'body', 'focus'), left=2)), + | ^
    conventionpyozwman.ozwsh_widgets 5770Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5780Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5800No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5830No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5890No space allowed before bracket +class RootItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5910No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1): + ^
    conventionpyozwman.ozwsh_widgets 5970Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5980Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5990Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 6050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 6090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6160No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 6520No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 6530Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 6540Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 6550Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 6560Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6600Wrong continued indentation. + 'name':'nodes', + | ^
    conventionpyozwman.ozwsh_widgets 6610Wrong continued indentation. + 'help':'Nodes management', + | ^
    conventionpyozwman.ozwsh_widgets 6620Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 6630Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6640No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 7190No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7220No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7310No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 7370No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7400Exactly one space required around assignment + self.childrens['node']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 7420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7480No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7550Exactly one space required around assignment + val=True + ^
    conventionpyozwman.ozwsh_widgets 7570Exactly one space required around assignment + val=False + ^
    conventionpyozwman.ozwsh_widgets 7820No space allowed before bracket +class NodesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 7840No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1, awaked=False): + ^
    conventionpyozwman.ozwsh_widgets 7900Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7910Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7920Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7930Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7940Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % awaked, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7960No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 7990No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 8030Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8040Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8050Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8060Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8070Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Awaked", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8110No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 8330No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 8340Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 8350Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 8360Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 8370Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 8440Wrong continued indentation. + 'name':'node', + ^ |
    conventionpyozwman.ozwsh_widgets 8450Wrong continued indentation. + 'help':'Node management', + ^ |
    conventionpyozwman.ozwsh_widgets 8460Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 8500No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 8510Exactly one space required after comma + parent.add_child("node",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 8710No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 9150No space allowed after bracket + self.lines.append(urwid.Text( " Baud rate = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9180No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9210No space allowed after bracket + self.lines.append(urwid.Text( " Neighbors = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9240No space allowed after bracket + self.lines.append(urwid.Text( " Groups = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9270No space allowed before bracket + self.window.log.info("NodeTree num groups = %s" % self.window.network.nodes[self.key].num_groups ) + ^
    conventionpyozwman.ozwsh_widgets 9440No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 9500Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.key=directory + ^
    conventionpyozwman.ozwsh_widgets 9510Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.node_id=self.key + ^
    conventionpyozwman.ozwsh_widgets 9710No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 9720Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 9730Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 9740Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 9750Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 9820Wrong continued indentation. + 'name':'controller', + ^ |
    conventionpyozwman.ozwsh_widgets 9830Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 9840Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 9850No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 9860Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 10270No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 10510No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10590No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10710No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10730No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10790No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10850No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10870No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10930No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10990No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 11010No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 11520No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11570No space allowed after bracket + self.lines.append(urwid.Text( " Device=%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11820No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 11830Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 11840Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 11850Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 11860Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11950Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11970Wrong continued indentation. + 'name':'Basic', + ^|
    conventionpyozwman.ozwsh_widgets 11980Wrong continued indentation. + 'help':'Basic values management', + ^|
    conventionpyozwman.ozwsh_widgets 11990Wrong continued indentation. + 'widget_box': self.widget_box + ^|
    conventionpyozwman.ozwsh_widgets 12000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12020Wrong continued indentation. + 'name':'Config', + ^ |
    conventionpyozwman.ozwsh_widgets 12030Wrong continued indentation. + 'help':'Config values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12040Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12050Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12070Wrong continued indentation. + 'name':'System', + ^ |
    conventionpyozwman.ozwsh_widgets 12080Wrong continued indentation. + 'help':'System values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12090Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12100Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12120Wrong continued indentation. + 'name':'All', + |^
    conventionpyozwman.ozwsh_widgets 12130Wrong continued indentation. + 'help':'All values management', + |^
    conventionpyozwman.ozwsh_widgets 12140Wrong continued indentation. + 'widget_box': self.widget_box + |^
    conventionpyozwman.ozwsh_widgets 12150Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12160No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 12560No space allowed before : + for cmd in values : + ^
    conventionpyozwman.ozwsh_widgets 12570Line too long (148/140)
    conventionpyozwman.ozwsh_widgets 12570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % (self.window.network.nodes[self.node_id].get_command_class_as_string(cmd)), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 12840No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 13080No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13150No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 13160Exactly one space required after comma + self.window.status_bar.update(status='Value %s added to scene %s' % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 13180No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13330No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13440No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13450Exactly one space required around assignment + values[param].data=newval + ^
    conventionpyozwman.ozwsh_widgets 13480No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13510No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13660No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13700No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 13720No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 13740No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13750Exactly one space required after comma + self.window.log.info("poll %s to %s" %(param,newval)) + ^
    conventionpyozwman.ozwsh_widgets 13780No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13800Exactly one space required after comma + self.window.status_bar.update(status='Value %s polled to %s' % (param,value)) + ^
    conventionpyozwman.ozwsh_widgets 13820No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14000No space allowed before bracket +class ValuesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 14020No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False, polled=False): + ^
    conventionpyozwman.ozwsh_widgets 14050No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 14070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14150Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 14160Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14170Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14190No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 14220No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 14260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14280Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14290Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14300Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14310Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14350No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 14570No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 14580Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 14590Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 14600Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 14610Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14650Wrong continued indentation. + 'name':'switches', + | ^
    conventionpyozwman.ozwsh_widgets 14660Wrong continued indentation. + 'help':'All switches on the network', + | ^
    conventionpyozwman.ozwsh_widgets 14670Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 14680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14690No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 15010No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 15030No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 15040Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 15040No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15040Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15290No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15480Exactly one space required after comma + self.window.log.info("SwitchesTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 15530No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 15540Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15580No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 15610Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15630No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15660No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15860No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 15870Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 15880Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 15890Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 15900Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15940Wrong continued indentation. + 'name':'dimmers', + | ^
    conventionpyozwman.ozwsh_widgets 15950Wrong continued indentation. + 'help':'All dimmers on the network', + | ^
    conventionpyozwman.ozwsh_widgets 15960Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 15970Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15980No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 16310No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 16330No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 16340Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 16340No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16340Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16590No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16820No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 16830Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16870No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 16890No space allowed before : + if not values[switch].is_polled : + ^
    conventionpyozwman.ozwsh_widgets 16910Exactly one space required after comma + self.window.network.nodes[node].set_dimmer(switch,newval) + ^
    conventionpyozwman.ozwsh_widgets 16920Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16940No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 16970No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 17010No space allowed before bracket +class SwitchesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 17030No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All'): + ^
    conventionpyozwman.ozwsh_widgets 17100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17120Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 17130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 17190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 17230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17240Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17250Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17310No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 17530No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 17540Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 17550Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 17560Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 17570Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17610Wrong continued indentation. + 'name':'sensors', + | ^
    conventionpyozwman.ozwsh_widgets 17620Wrong continued indentation. + 'help':'All sensors on the network', + | ^
    conventionpyozwman.ozwsh_widgets 17630Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 17640Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17650No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 17980No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 18000No space allowed before : + if len(sensors) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 18010Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 18010No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18010Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18270No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 18350No space allowed before bracket +class SensorsItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 18370No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', units="", polled=0): + ^
    conventionpyozwman.ozwsh_widgets 18440Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18450Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18460Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18470Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 18480Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % units, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18510No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 18540No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 18580Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18590Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18600Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18610Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Units", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18670No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 18900No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 18910Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 18920Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 18930Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 18940Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 18990Wrong continued indentation. + 'name':'scene', + ^ |
    conventionpyozwman.ozwsh_widgets 19000Wrong continued indentation. + 'help':'Scene management', + ^ |
    conventionpyozwman.ozwsh_widgets 19010Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 19050No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 19060Exactly one space required after comma + parent.add_child("scene",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 19190No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 19460No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19710No space allowed before : + if not ok : + ^
    warningpyozwman.ozwsh_widgets 19750Bad indentation. Found 20 spaces, expected 16
    warningpyozwman.ozwsh_widgets 19760Bad indentation. Found 20 spaces, expected 16
    conventionpyozwman.ozwsh_widgets 19770No space allowed before : + if self.window.network.get_scenes()[self.key].remove_value(valueid) : + ^
    conventionpyozwman.ozwsh_widgets 19800No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19950Exactly one space required after comma + self.window.log.info("SceneTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 20000No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 20010Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 20040No space allowed before : + if switch in scene.get_values() : + ^
    conventionpyozwman.ozwsh_widgets 20130No space allowed before : + if new_val != None : + ^
    conventionpyozwman.ozwsh_widgets 20140No space allowed before : + if scene.set_value(switch, new_val) : + ^
    conventionpyozwman.ozwsh_widgets 20170No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20200No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20230No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20370No space allowed before bracket +class SceneItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 20390No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False): + ^
    conventionpyozwman.ozwsh_widgets 20420No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 20440No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20500Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20510Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 20520Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20530Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20550No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 20580No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 20620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20640Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20650Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20660Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20700No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 20960No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 20970Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 20980Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 20990Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 21000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21040Wrong continued indentation. + 'name':'scenes', + | ^
    conventionpyozwman.ozwsh_widgets 21050Wrong continued indentation. + 'help':'Scenes management', + | ^
    conventionpyozwman.ozwsh_widgets 21060Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 21070Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21080No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 21390No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21510No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 21570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21600Exactly one space required around assignment + self.childrens['scene']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 21620No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21670Exactly one space required around comparison + if self.window.network.create_scene(value)&gt;0: + ^
    conventionpyozwman.ozwsh_widgets 21700No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21750No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21820No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21900No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21970No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21990No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22020No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22060No space allowed before bracket +class ScenesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 22080No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 22140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 22160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 22190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 22230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'scene_header'), + | ^
    conventionpyozwman.ozwsh_widgets 22270No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 10Too many lines in module (2231/1000)
    conventionpyozwman.ozwsh_widgetsOldestTree500Missing class docstring
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many instance attributes (12/7)
    warningpyozwman.ozwsh_widgetsOldestTree.__init__6220Unused variable 'oldfocus'
    conventionpyozwman.ozwsh_widgetsOldestTree.add_child654Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree._get_at_pos704Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_nodeid764Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_id794Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.get_id8013Unused variable 'pos'
    conventionpyozwman.ozwsh_widgetsOldestTree.get_focus_entry864Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.set_focus894Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_first1014Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_last1044Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.read_lines1074Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_directories1184Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_help1284Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.refresh1394Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected1444Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected14612Invalid variable name "x"
    conventionpyozwman.ozwsh_widgetsOldestTree.ls1664Invalid method name "ls"
    warningpyozwman.ozwsh_widgetsOldestTree.ls16617Unused argument 'opts'
    conventionpyozwman.ozwsh_widgetsOldestTree.cd1724Invalid method name "cd"
    conventionpyozwman.ozwsh_widgetsOldestTree.set2124Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.set21218Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.set21225Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.poll2164Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.poll21619Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.poll21626Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.add2204Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.add22018Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.add22025Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.remove2244Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.remove22421Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.remove22428Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.reset2284Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.reset22820Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.create2324Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.create23221Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.delete2364Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.delete23621Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.activate2404Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.activate24023Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.send2444Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.send24419Unused argument 'value'
    warningpyozwman.ozwsh_widgetsOldestTree.path2108Attribute '_path' defined outside __init__
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many public methods (30/20)
    warningpyozwman.ozwsh_widgetsStatBox.__init__2524__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsStatBox.__init__2578Instance of 'StatBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsStatTree2600Missing class docstring
    refactorpyozwman.ozwsh_widgetsStatTree.read_lines2784Too many statements (54/50)
    warningpyozwman.ozwsh_widgetsGroupsBox.__init__3614__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsGroupsBox.__init__3668Instance of 'GroupsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsGroupsTree3680Missing class docstring
    refactorpyozwman.ozwsh_widgetsGroupsTree3680Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted3994Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted39938Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready4044Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready40435Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_node_update4104Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41042Unused argument 'node'
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41033Unused argument 'network'
    warningpyozwman.ozwsh_widgetsGroupsTree.add4628No exception type(s) specified
    warningpyozwman.ozwsh_widgetsGroupsTree.remove4778No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__4958Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsAssociationItem4920Missing class docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__49424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__4944__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__5028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsAssociationItem.__init__5038Instance of 'AssociationItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsAssociationItem.get_header5054Missing method docstring
    conventionpyozwman.ozwsh_widgetsAssociationItem.keypress5164Missing method docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.keypress51623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsAssociationItem.keypress5164Method could be a function
    conventionpyozwman.ozwsh_widgetsRootTree5190Missing class docstring
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_ready5394Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_ready53935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_resetted5444Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_resetted54438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5728Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootDir5690Missing class docstring
    warningpyozwman.ozwsh_widgetsRootDir.__init__57144Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsRootDir.__init__57124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootDir.__init__5714__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5808Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootDir.__init__5818Instance of 'RootDir' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootDir.keypress5864Missing method docstring
    warningpyozwman.ozwsh_widgetsRootDir.keypress58623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootDir.keypress5864Method could be a function
    conventionpyozwman.ozwsh_widgetsRootItem.__init__5928Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootItem5890Missing class docstring
    warningpyozwman.ozwsh_widgetsRootItem.__init__59124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootItem.__init__5914__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootItem.__init__6028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootItem.__init__6038Instance of 'RootItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootItem.get_header6054Missing method docstring
    conventionpyozwman.ozwsh_widgetsRootItem.keypress6194Missing method docstring
    warningpyozwman.ozwsh_widgetsRootItem.keypress61923Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootItem.keypress6194Method could be a function
    warningpyozwman.ozwsh_widgetsRootBox.__init__6264__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsRootBox.__init__6318Instance of 'RootBox' has no '__super' member
    warningpyozwman.ozwsh_widgetsNodesBox.__init__6374__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodesBox.__init__6428Instance of 'NodesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesTree6440Missing class docstring
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted6714Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted67138Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_ready6764Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_ready67635Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_node_update6884Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68842Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68833Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodesTree.exist7228No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.cd74212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.send74916Unused variable 'cmd'
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7858Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsNodesItem7820Missing class docstring
    warningpyozwman.ozwsh_widgetsNodesItem.__init__78424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsNodesItem.__init__7844__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7968Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsNodesItem.__init__7978Instance of 'NodesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesItem.get_header7994Missing method docstring
    conventionpyozwman.ozwsh_widgetsNodesItem.keypress8144Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesItem.keypress81423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsNodesItem.keypress8144Method could be a function
    warningpyozwman.ozwsh_widgetsNodeBox.__init__8214__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodeBox.__init__8268Instance of 'NodeBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodeTree8290Missing class docstring
    refactorpyozwman.ozwsh_widgetsNodeTree8290Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted8564Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted85638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_ready8614Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_ready86135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_node_update8674Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodeTree.read_lines8968Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsControllerBox.__init__9594__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsControllerBox.__init__9648Instance of 'ControllerBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsControllerTree9670Missing class docstring
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted10044Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted100438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_ready10094Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_ready100935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_node_update10174Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsControllerTree.send105912No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send107312No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send108712No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send110112No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send105216Unused variable 'cmd'
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many return statements (19/6)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many branches (22/12)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many statements (57/50)
    warningpyozwman.ozwsh_widgetsControllerTree.read_lines11318Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsValuesBox.__init__11664__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsValuesBox.__init__11718Instance of 'ValuesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesTree11740Missing class docstring
    refactorpyozwman.ozwsh_widgetsValuesTree11740Too many instance attributes (13/7)
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_ready12304Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_ready123035Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted12364Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted123638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_value_update12414Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124143Unused argument 'node'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124134Unused argument 'network'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124149Unused argument 'value'
    warningpyozwman.ozwsh_widgetsValuesTree.add12998No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.add13028Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.add130616Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.add130716Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.set13268No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.set132712Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.set133120Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.set133220Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll13598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136012Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136420Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.poll136520Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll137212No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14038Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsValuesItem14000Missing class docstring
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140241Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140261Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140224Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__14024__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14198Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsValuesItem.__init__14208Instance of 'ValuesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesItem.get_header14224Missing method docstring
    conventionpyozwman.ozwsh_widgetsValuesItem.keypress14384Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesItem.keypress143823Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsValuesItem.keypress14384Method could be a function
    warningpyozwman.ozwsh_widgetsSwitchesBox.__init__14454__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSwitchesBox.__init__14508Instance of 'SwitchesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesTree14520Missing class docstring
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted14774Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted147738Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready14824Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready148235Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update14864Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update14894Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree.set15428No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set15468Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set155116Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSwitchesTree.set155216Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsDimmersBox.__init__15744__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsDimmersBox.__init__15798Instance of 'DimmersBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsDimmersTree15810Missing class docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_resetted16064Missing method docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready16114Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready161135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_value_update16164Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_node_update16194Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree.set16728No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsDimmersTree.set16768Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsDimmersTree.set168016Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsDimmersTree.set168116Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17048Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSwitchesItem17010Missing class docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170341Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170361Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170324Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__17034__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSwitchesItem.__init__17178Instance of 'SwitchesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesItem.get_header17194Missing method docstring
    conventionpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.keypress173423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Method could be a function
    warningpyozwman.ozwsh_widgetsSensorsBox.__init__17414__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSensorsBox.__init__17468Instance of 'SensorsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsTree17480Missing class docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_resetted17734Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready17784Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready177835Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_value_update17834Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178343Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178334Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178349Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_node_update17864Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178642Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178633Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18388Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSensorsItem18350Missing class docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183741Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183761Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183724Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__18374__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18518Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSensorsItem.__init__18528Instance of 'SensorsItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsItem.get_header18544Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsItem.keypress18704Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.keypress187023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSensorsItem.keypress18704Method could be a function
    warningpyozwman.ozwsh_widgetsSceneBox.__init__18774__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSceneBox.__init__18828Instance of 'SceneBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneTree18850Missing class docstring
    refactorpyozwman.ozwsh_widgetsSceneTree18850Too many instance attributes (8/7)
    warningpyozwman.ozwsh_widgetsSceneTree.delete19598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196012Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197412No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196924Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197024Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsSceneTree.delete196321Unused variable 'switch'
    warningpyozwman.ozwsh_widgetsSceneTree.set19898No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.set19938Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSceneTree.set199816Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.set199916Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20408Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSceneItem20370Missing class docstring
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203941Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203961Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203924Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__20394__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20558Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSceneItem.__init__20568Instance of 'SceneItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneItem.get_header20584Missing method docstring
    conventionpyozwman.ozwsh_widgetsSceneItem.keypress20734Missing method docstring
    warningpyozwman.ozwsh_widgetsSceneItem.keypress207323Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSceneItem.keypress20734Method could be a function
    warningpyozwman.ozwsh_widgetsScenesBox.__init__20814__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsScenesBox.__init__20868Instance of 'ScenesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesTree20880Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesTree.exist21428No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.cd216212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.delete21778No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.activate21928No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22098Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsScenesItem22060Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesItem.__init__220824Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsScenesItem.__init__22084__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsScenesItem.__init__22178Instance of 'ScenesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesItem.get_header22194Missing method docstring
    conventionpyozwman.ozwsh_widgetsScenesItem.keypress22304Missing method docstring
    warningpyozwman.ozwsh_widgetsScenesItem.keypress223023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsScenesItem.keypress22304Method could be a function
    warningpyozwman.ozwsh_widgets 350Unused select imported from select
    warningpyozwman.ozwsh_widgets 360Unused import sys
    warningpyozwman.ozwsh_widgets 370Unused import os
    warningpyozwman.ozwsh_widgets 390Unused Screen imported from urwid.raw_display
    warningpyozwman.ozwsh_widgets 400Unused format_exc imported from traceback
    warningpyozwman.ozwsh_widgets 410Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_widgets 420Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_widgets 430Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_widgets 440Unused ZWaveController imported from openzwave.controller
    warningpyozwman.ozwsh_widgets 460Unused ZWaveOption imported from openzwave.option
    warningpyozwman.ozwsh_widgets 470Unused All imported from louie
    warningpyozwman.ozwsh_widgets 480Unused import logging
    conventionpyozwman.ozwsh_main 1720Wrong continued indentation. + ("keys", "dark blue", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1730Wrong continued indentation. + ("message", "light cyan", "dark green"), + ^ |
    conventionpyozwman.ozwsh_main 1740Wrong continued indentation. + ("linenr", "light blue", "dark cyan"), + ^ |
    conventionpyozwman.ozwsh_main 1750Wrong continued indentation. + ("input", "light gray", "black"), + ^ |
    conventionpyozwman.ozwsh_main 1760Wrong continued indentation. + ("input2", "dark red", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1770Wrong continued indentation. + ("focus", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1780Wrong continued indentation. + ("dialog", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1790Wrong continued indentation. + ("file", "light green", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1800Wrong continued indentation. + ("errortxt", "dark red", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1810Wrong continued indentation. + ("selectedfile", "yellow", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1820Wrong continued indentation. + ("selectedfocus", "yellow", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1830Wrong continued indentation. + ("dir", "light gray", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1840Wrong continued indentation. + ("fileedit", "light green", "dark red"), + ^ |
    conventionpyozwman.ozwsh_main 1850Wrong continued indentation. + ('edit', 'yellow', 'dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1860Wrong continued indentation. + ('body','default', 'default'), + ^ |
    conventionpyozwman.ozwsh_main 1860Exactly one space required after comma + ('body','default', 'default'), + ^
    conventionpyozwman.ozwsh_main 1870Wrong continued indentation. + ('foot','dark cyan', 'dark blue', 'bold'), + ^ |
    conventionpyozwman.ozwsh_main 1870Exactly one space required after comma + ('foot','dark cyan', 'dark blue', 'bold'), + ^
    conventionpyozwman.ozwsh_main 1880Wrong continued indentation. + ('shadow','white','black'), + ^ |
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1890Wrong continued indentation. + ('border','black','dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1900Wrong continued indentation. + ('error','black','dark red'), + ^ |
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1910Wrong continued indentation. + ('FxKey','light cyan', 'dark blue', 'underline')] + ^ |
    conventionpyozwman.ozwsh_main 1910Exactly one space required after comma + ('FxKey','light cyan', 'dark blue', 'underline')] + ^
    conventionpyozwman.ozwsh_main 2340Exactly one space required after comma + def active_box(self,value): + ^
    conventionpyozwman.ozwsh_main 2640No space allowed before : + if command.startswith('ls') : + ^
    conventionpyozwman.ozwsh_main 2650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2660Exactly one space required after comma + cmd,options = command.split(' ') + ^
    conventionpyozwman.ozwsh_main 2730No space allowed before : + elif command.startswith('exit') : + ^
    conventionpyozwman.ozwsh_main 2750No space allowed before : + elif command.startswith('cd') : + ^
    conventionpyozwman.ozwsh_main 2760No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2870No space allowed before : + elif path == "/" : + ^
    conventionpyozwman.ozwsh_main 2960No space allowed before : + elif command.startswith('send') : + ^
    conventionpyozwman.ozwsh_main 2970No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3030No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3100No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3120No space allowed before : + elif command.startswith('create') : + ^
    conventionpyozwman.ozwsh_main 3130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3190No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3260No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3280No space allowed before : + elif command.startswith('delete') : + ^
    conventionpyozwman.ozwsh_main 3290No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3350No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3420No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3440No space allowed before : + elif command.startswith('activate') : + ^
    conventionpyozwman.ozwsh_main 3450No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3510No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3580No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3600No space allowed before : + elif command.startswith('set') : + ^
    conventionpyozwman.ozwsh_main 3610No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3630No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3680No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3730No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 3810No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3830No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3860No space allowed before : + elif command.startswith('poll') : + ^
    conventionpyozwman.ozwsh_main 3870No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3890No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3940No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3990No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4090No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4120No space allowed before : + elif command.startswith('add') : + ^
    conventionpyozwman.ozwsh_main 4130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4150No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4200No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4250No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4330No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4350No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4380No space allowed before : + elif command.startswith('remove') : + ^
    conventionpyozwman.ozwsh_main 4390No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4410No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4460No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4510No space allowed before : + if len(value) == 0 or to != "from" : + ^
    conventionpyozwman.ozwsh_main 4590No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4610No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4640No space allowed before : + elif command.startswith('reset') : + ^
    conventionpyozwman.ozwsh_main 4650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4680No space allowed before : + if len(state) == 0 : + ^
    conventionpyozwman.ozwsh_main 4750No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 5080No space allowed around keyword argument assignment + kvals = False) + ^
    conventionpyozwman.ozwsh_mainStatusBar950Missing class docstring
    conventionpyozwman.ozwsh_mainStatusBar.update1104Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.get_command1164Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.set_command1194Missing method docstring
    conventionpyozwman.ozwsh_mainHeaderBar1220Missing class docstring
    conventionpyozwman.ozwsh_mainHeaderBar.update1354Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow1390Missing class docstring
    refactorpyozwman.ozwsh_mainMainWindow1390Too many instance attributes (30/7)
    conventionpyozwman.ozwsh_mainMainWindow._define_log1534Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._define_screen1704Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow.exit2538Instance of 'ZWaveOption' has no 'destroy' member
    warningpyozwman.ozwsh_mainMainWindow.execute28516Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow.execute29116Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow.execute37216Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute39816Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute42416Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute45016Invalid variable name "to"
    warningpyozwman.ozwsh_mainMainWindow.execute26616Unused variable 'cmd'
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many return statements (48/6)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many branches (72/12)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many statements (171/50)
    conventionpyozwman.ozwsh_mainMainWindow._unhandled_input4824Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input49312Specify string format arguments as logging function parameters
    errorpyozwman.ozwsh_mainMainWindow._unhandled_input49812Instance of 'MainWindow' has no 'refresh_nodes' member
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input50112Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._start_network5034Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow._start_network50523Unexpected keyword argument 'kvals' in constructor call
    errorpyozwman.ozwsh_mainMainWindow._start_network5148Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie5184Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_started5254Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5268Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_resetted5324Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted53238Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_stopped5394Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped53937Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_awaked5454Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_ready5514Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5528Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5538Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5558Unused variable 'wait_for_network'
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Invalid method name "_disconnect_louie_node_and_value"
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie_node_and_value5674Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_node_update5744Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57442Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57433Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_value_update5774Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57743Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57734Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57749Unused argument 'value'
    conventionpyozwman.ozwsh_mainMainWindow._louie_group5804Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_group58036Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_group58027Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_ctrl_message5834Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58350Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58359Unused argument 'controller'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58334Unused argument 'state'
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48716Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48916Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow.active_box2418Attribute '_active_box' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5288Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted5348Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped5418Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_awaked5478Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5548Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_main 360Unused select imported from select
    warningpyozwman.ozwsh_main 370Unused import sys
    warningpyozwman.ozwsh_main 380Unused import os
    warningpyozwman.ozwsh_main 440Unused format_exc imported from traceback
    warningpyozwman.ozwsh_main 470Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_main 480Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_main 490Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_main 530Unused OldestTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootDir imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 550Unused ControllerTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 560Unused NodeTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 600Unused DimmersTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused GroupsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused AssociationItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 650Unused StatTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 670Unused All imported from louie
    conventionpyozwweb 10Missing module docstring
    warningpyozwweb 260No exception type(s) specified
    warningpyozwweb.shell 360Wildcard import flask
    warningpyozwweb.shell 370Wildcard import app
    warningpyozwweb.shell 370Relative import 'app', should be 'pyozwweb.app'
    warningpyozwweb.shell 330Unused import readline
    warningpyozwweb.shell 340Unused pprint imported from pprint
    warningpyozwweb.shell 360Unused import render_template_string from wildcard import
    warningpyozwweb.shell 360Unused import Flask from wildcard import
    warningpyozwweb.shell 360Unused import request from wildcard import
    warningpyozwweb.shell 360Unused import get_flashed_messages from wildcard import
    warningpyozwweb.shell 360Unused import Blueprint from wildcard import
    warningpyozwweb.shell 360Unused import send_from_directory from wildcard import
    warningpyozwweb.shell 360Unused import session from wildcard import
    warningpyozwweb.shell 360Unused import Module from wildcard import
    warningpyozwweb.shell 360Unused import escape from wildcard import
    warningpyozwweb.shell 360Unused import Config from wildcard import
    warningpyozwweb.shell 360Unused import render_template from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_pushed from wildcard import
    warningpyozwweb.shell 360Unused import redirect from wildcard import
    warningpyozwweb.shell 360Unused import request_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import after_this_request from wildcard import
    warningpyozwweb.shell 360Unused import current_app from wildcard import
    warningpyozwweb.shell 360Unused import json from wildcard import
    warningpyozwweb.shell 360Unused import make_response from wildcard import
    warningpyozwweb.shell 360Unused import Response from wildcard import
    warningpyozwweb.shell 360Unused import request_started from wildcard import
    warningpyozwweb.shell 360Unused import has_app_context from wildcard import
    warningpyozwweb.shell 360Unused import send_file from wildcard import
    warningpyozwweb.shell 360Unused import get_template_attribute from wildcard import
    warningpyozwweb.shell 360Unused import Session from wildcard import
    warningpyozwweb.shell 360Unused import Markup from wildcard import
    warningpyozwweb.shell 360Unused import copy_current_request_context from wildcard import
    warningpyozwweb.shell 360Unused import Request from wildcard import
    warningpyozwweb.shell 360Unused import safe_join from wildcard import
    warningpyozwweb.shell 360Unused import flash from wildcard import
    warningpyozwweb.shell 360Unused import stream_with_context from wildcard import
    warningpyozwweb.shell 360Unused import template_rendered from wildcard import
    warningpyozwweb.shell 360Unused import got_request_exception from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import url_for from wildcard import
    warningpyozwweb.shell 360Unused import g from wildcard import
    warningpyozwweb.shell 360Unused import has_request_context from wildcard import
    warningpyozwweb.shell 360Unused import jsonify from wildcard import
    warningpyozwweb.shell 360Unused import json_available from wildcard import
    warningpyozwweb.shell 360Unused import message_flashed from wildcard import
    warningpyozwweb.shell 360Unused import abort from wildcard import
    warningpyozwweb.shell 360Unused import request_finished from wildcard import
    warningpyozwweb.shell 360Unused import signals_available from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_popped from wildcard import
    warningpyozwweb.shell 370Unused import leave_room from wildcard import
    warningpyozwweb.shell 370Unused import SocketIO from wildcard import
    warningpyozwweb.shell 370Unused import app from wildcard import
    warningpyozwweb.shell 370Unused import run_app from wildcard import
    warningpyozwweb.shell 370Unused import start_listener from wildcard import
    warningpyozwweb.shell 370Unused import create_app from wildcard import
    warningpyozwweb.shell 370Unused import NullHandler from wildcard import
    warningpyozwweb.shell 370Unused import disconnect from wildcard import
    warningpyozwweb.shell 370Unused import monkey from wildcard import
    warningpyozwweb.shell 370Unused import stop_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import stop_all from wildcard import
    warningpyozwweb.shell 370Unused import fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import time from wildcard import
    warningpyozwweb.shell 370Unused import close_room from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveNetwork from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveOption from wildcard import
    warningpyozwweb.shell 370Unused import sys from wildcard import
    warningpyozwweb.shell 370Unused import stop_listener from wildcard import
    warningpyozwweb.shell 370Unused import logging from wildcard import
    warningpyozwweb.shell 370Unused import install_secret_key from wildcard import
    warningpyozwweb.shell 370Unused import dispatcher from wildcard import
    warningpyozwweb.shell 370Unused import join_room from wildcard import
    warningpyozwweb.shell 370Unused import All from wildcard import
    warningpyozwweb.shell 370Unused import socketio from wildcard import
    warningpyozwweb.shell 370Unused import signal from wildcard import
    warningpyozwweb.shell 370Unused import Fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import threading from wildcard import
    warningpyozwweb.shell 370Unused import start_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import emit from wildcard import
    conventionpyozwweb.reloadmain330Missing function docstring
    conventionpyozwweb.runmain370Missing function docstring
    conventionpyozwweb.config 410Invalid constant name "_basedir"
    conventionpyozwweb.configConfig430Missing class docstring
    conventionpyozwweb.configProductionConfig730Missing class docstring
    conventionpyozwweb.configRunConfig770Missing class docstring
    conventionpyozwweb.configReloadConfig820Missing class docstring
    conventionpyozwweb.configTestingConfig880Missing class docstring
    conventionpyozwweb.app.listener 680No space allowed after bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 680No space allowed before bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 1200Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1210Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1240Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1250Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1260Line too long (168/140)
    conventionpyozwweb.app.listener 1430Exactly one space required around assignment + data=node.to_dict() + ^
    conventionpyozwweb.app.listener 1450Wrong continued indentation. + {'data': data}, + ^ |
    conventionpyozwweb.app.listener 1460Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1850Line too long (146/140)
    conventionpyozwweb.app.listener 2240No space allowed after bracket + self._stopevent.set( ) + ^
    conventionpyozwweb.app.listener 2240No space allowed before bracket + self._stopevent.set( ) + ^
    fatalpyozwweb.app.listener 344Unable to import 'pydispatch'
    conventionpyozwweb.app.listener 590Invalid constant name "listener"
    warningpyozwweb.app.listenerListenerThread._louie_network11712Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_network11712Reimport 'request' (imported line 47)
    errorpyozwweb.app.listenerListenerThread._louie_network12029Undefined variable 'data_room_network'
    errorpyozwweb.app.listenerListenerThread._louie_network12429Undefined variable 'data_room_network'
    warningpyozwweb.app.listenerListenerThread._louie_network12616Specify string format arguments as logging function parameters
    warningpyozwweb.app.listenerListenerThread._louie_network11712Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_node14026Unused argument 'network'
    warningpyozwweb.app.listenerListenerThread._louie_values16512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Unused variable 'request'
    warningpyozwweb.app.listenerstart_listener2304Using the global statement
    conventionpyozwweb.app.listenerstart_listener2304Invalid constant name "listener"
    warningpyozwweb.app.listenerstop_listener2394Using the global statement
    conventionpyozwweb.app.listenerstop_listener2394Invalid constant name "listener"
    warningpyozwweb.app.listener 310Unused import os
    warningpyozwweb.app.listener 370Unused import time
    warningpyozwweb.app.listener 410Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.listener 420Unused Singleton imported from openzwave.singleton
    warningpyozwweb.app.listener 450Unused All imported from louie
    warningpyozwweb.app.listener 470Unused Flask imported from flask
    warningpyozwweb.app.listener 470Unused request imported from flask
    warningpyozwweb.app.listener 470Unused session imported from flask
    warningpyozwweb.app.listener 470Unused render_template imported from flask
    warningpyozwweb.app.viewsmap960Redefining built-in 'map'
    errorpyozwweb.app.views 460No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.views 460Unable to import 'flask.ext.socketio'
    warningpyozwweb.app.views 580Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app.viewsnot_found710Missing function docstring
    warningpyozwweb.app.viewsnot_found7114Unused argument 'error'
    conventionpyozwweb.app.viewshome750Missing function docstring
    conventionpyozwweb.app.viewsnode800Missing function docstring
    conventionpyozwweb.app.viewsvalues840Missing function docstring
    conventionpyozwweb.app.viewscontroller880Missing function docstring
    conventionpyozwweb.app.viewsdebug920Missing function docstring
    conventionpyozwweb.app.viewsmap960Missing function docstring
    conventionpyozwweb.app.viewsscenes1000Missing function docstring
    conventionpyozwweb.app.viewschat1040Missing function docstring
    warningpyozwweb.app.views 410Unused import sys
    warningpyozwweb.app.views 410Unused import os
    warningpyozwweb.app.views 420Unused import time
    warningpyozwweb.app.views 430Unused Thread imported from threading
    warningpyozwweb.app.views 450Unused Flask imported from flask
    warningpyozwweb.app.views 450Unused session imported from flask
    warningpyozwweb.app.views 450Unused current_app imported from flask
    warningpyozwweb.app.views 450Unused request imported from flask
    warningpyozwweb.app.views 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused disconnect imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused emit imported from flask.ext.socketio
    warningpyozwweb.app.views 480Unused import libopenzwave
    warningpyozwweb.app.views 490Unused import openzwave
    warningpyozwweb.app.views 500Unused ZWaveNode imported from openzwave.node
    warningpyozwweb.app.views 510Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.views 520Unused ZWaveScene imported from openzwave.scene
    warningpyozwweb.app.views 530Unused ZWaveController imported from openzwave.controller
    warningpyozwweb.app.views 540Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.views 550Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.views 560Unused dispatcher imported from louie
    warningpyozwweb.app.views 560Unused All imported from louie
    warningpyozwweb.app.views 570Unused socketio imported from pyozwweb.app
    warningpyozwweb.app.views 580Unused listener imported from listener
    conventionpyozwweb.app.__init__ 930Exactly one space required after comma + socketio.run(app, use_reloader=app.config['RELOADER'],host=app.config['HOST'], port=app.config['PORT']) + ^
    conventionpyozwweb.app.__init__ 1830Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1860Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1870Unnecessary parens after u'print' keyword
    errorpyozwweb.app 430No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app 430Unable to import 'flask.ext.socketio'
    warningpyozwweb.app 670Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app 690Invalid constant name "fanstatic"
    conventionpyozwweb.app 700Invalid constant name "app"
    conventionpyozwweb.app 710Invalid constant name "socketio"
    conventionpyozwweb.apprun_app730Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Redefining name 'signal' from outer scope (line 65)
    conventionpyozwweb.apprun_app.signal_term_handler754Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Unused argument 'signal'
    warningpyozwweb.apprun_app.signal_term_handler7536Unused argument 'frame'
    warningpyozwweb.apprun_app834Using the global statement
    conventionpyozwweb.apprun_app834Invalid constant name "socketio"
    warningpyozwweb.apprun_app854Using the global statement
    conventionpyozwweb.apprun_app854Invalid constant name "app"
    warningpyozwweb.apprun_app874Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app924Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app7329Unused argument 'debug'
    conventionpyozwweb.appstop_all970Missing function docstring
    warningpyozwweb.appstop_all994Using global for 'app' but no assignment is done
    conventionpyozwweb.appstop_all994Invalid constant name "app"
    warningpyozwweb.appcreate_app1114Redefining name 'logging' from outer scope (line 55)
    warningpyozwweb.appcreate_app1034Redefining name 'monkey' from outer scope (line 35)
    conventionpyozwweb.appcreate_app1020Missing function docstring
    warningpyozwweb.appcreate_app1034Reimport 'monkey' (imported line 35)
    warningpyozwweb.appcreate_app1084Using the global statement
    conventionpyozwweb.appcreate_app1084Invalid constant name "app"
    warningpyozwweb.appcreate_app1144Specify string format arguments as logging function parameters
    conventionpyozwweb.appcreate_app1168Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1188Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1208Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1228Invalid variable name "ZWAVE_DEBUG"
    warningpyozwweb.appcreate_app1364Using the global statement
    conventionpyozwweb.appcreate_app1364Invalid constant name "fanstatic"
    warningpyozwweb.appcreate_app1384Using the global statement
    conventionpyozwweb.appcreate_app1384Invalid constant name "socketio"
    warningpyozwweb.appcreate_app1424Relative import 'views', should be 'pyozwweb.app.views'
    warningpyozwweb.appcreate_app1434Relative import 'socket', should be 'pyozwweb.app.socket'
    warningpyozwweb.appcreate_app1424Unused variable 'views'
    warningpyozwweb.appcreate_app1434Unused variable 'chat'
    warningpyozwweb.appcreate_app1434Unused variable 'ozwave'
    warningpyozwweb.appcreate_app1168Unused variable 'ZWAVE_DEBUG'
    warningpyozwweb.appstart_zwnetwork15020Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.appstart_zwnetwork1500Missing function docstring
    errorpyozwweb.appstart_zwnetwork1574Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwweb.appstop_zwnetwork1610Missing function docstring
    warningpyozwweb.appinstall_secret_key17023Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.app.socket.ozwave 950Exactly one space required around assignment + done=False + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 1000Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1060No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1140No space allowed before : + try : + ^
    conventionpyozwweb.app.socket.ozwave 1230Exactly one space required around assignment + done=False + ^
    conventionpyozwweb.app.socket.ozwave 1240Exactly one space required after comma + keys = ['posx','posy'] + ^
    conventionpyozwweb.app.socket.ozwave 1280Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1400No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1710Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1720Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1790Wrong continued indentation. + {'data': data, + ^|
    conventionpyozwweb.app.socket.ozwave 1800Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1820Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1830Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1860Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 1880Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 1930No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2000Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2020Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2070No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2140Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2160Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2210No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2280Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2300Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2350No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2420Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2440Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2490No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2860No space allowed before : + if data['result'] == True : + ^
    conventionpyozwweb.app.socket.ozwave 2980Line too long (147/140)
    errorpyozwweb.app.socket.ozwave 480No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.ozwave 480Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.ozwaveecho_message720Missing function docstring
    conventionpyozwweb.app.socket.ozwavedisconnect_request790Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_connect870Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_network_event920Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_node_event1110Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_nodes_event1460Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_controller_event1540Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_command_event1610Missing function docstring
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many branches (38/12)
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many statements (120/50)
    conventionpyozwweb.app.socket.ozwaveecho_value_event2940Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_scenes_event3030Missing function docstring
    warningpyozwweb.app.socket.ozwave 430Unused import os
    warningpyozwweb.app.socket.ozwave 430Unused import sys
    warningpyozwweb.app.socket.ozwave 440Unused import time
    warningpyozwweb.app.socket.ozwave 450Unused Thread imported from threading
    warningpyozwweb.app.socket.ozwave 470Unused Flask imported from flask
    warningpyozwweb.app.socket.ozwave 470Unused render_template imported from flask
    warningpyozwweb.app.socket.ozwave 480Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 500Unused import libopenzwave
    warningpyozwweb.app.socket.ozwave 510Unused import openzwave
    warningpyozwweb.app.socket.ozwave 520Unused ZWaveNode imported from openzwave.node
    warningpyozwweb.app.socket.ozwave 530Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.socket.ozwave 540Unused ZWaveScene imported from openzwave.scene
    warningpyozwweb.app.socket.ozwave 550Unused ZWaveController imported from openzwave.controller
    warningpyozwweb.app.socket.ozwave 560Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.socket.ozwave 570Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.socket.ozwave 580Unused All imported from louie
    warningpyozwweb.app.socket.ozwave 580Unused dispatcher imported from louie
    warningpyozwweb.app.socket.ozwave 590Unused app imported from pyozwweb.app
    warningpyozwweb.app.socket 900No exception type(s) specified
    conventionpyozwweb.app.socket.chat 1270Unnecessary parens after u'print' keyword
    errorpyozwweb.app.socket.chat 460No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.chat 460Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.chattest_message610Missing function docstring
    conventionpyozwweb.app.socket.chattest_broadcast_message700Missing function docstring
    conventionpyozwweb.app.socket.chatjoin780Missing function docstring
    conventionpyozwweb.app.socket.chatleave870Missing function docstring
    conventionpyozwweb.app.socket.chatclose960Missing function docstring
    conventionpyozwweb.app.socket.chatsend_room_message1050Missing function docstring
    conventionpyozwweb.app.socket.chatdisconnect_request1130Missing function docstring
    conventionpyozwweb.app.socket.chattest_connect1210Missing function docstring
    conventionpyozwweb.app.socket.chattest_disconnect1260Missing function docstring
    warningpyozwweb.app.socket.chat 410Unused import sys
    warningpyozwweb.app.socket.chat 410Unused import os
    warningpyozwweb.app.socket.chat 420Unused import time
    warningpyozwweb.app.socket.chat 430Unused Thread imported from threading
    warningpyozwweb.app.socket.chat 450Unused Flask imported from flask
    warningpyozwweb.app.socket.chat 450Unused current_app imported from flask
    warningpyozwweb.app.socket.chat 450Unused render_template imported from flask
    warningpyozwweb.app.socket.chat 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.chat 480Unused app imported from pyozwweb.app
    refactoropenzwave.nodeZWaveNode490Interface not implemented
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.ozwave)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.chat)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.views)
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.listener:6 +==pyozwweb.app.views:17 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +from gevent import monkey +monkey.patch_all() + +import os +import sys +if sys.hexversion &gt;= 0x3000000: + from pydispatch import dispatcher +else: + from louie import dispatcher +import time + +from openzwave.network import ZWaveNetwork +from openzwave.controller import ZWaveController +from openzwave.option import ZWaveOption +from openzwave.singleton import Singleton +import threading +from threading import Thread +from louie import dispatcher, All + +from flask import Flask, render_template, session, request, current_app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logging.getLogger('pyozwweb').addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} + + ZWAVE_DEVICE = "/dev/ttyUSB0"
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os, sys +import time +from threading import Thread + +from flask import Flask, render_template, session, request, current_app +from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect + +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from louie import dispatcher, All +from pyozwweb.app import socketio, app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler):
    refactorpyozwweb.app.socket.chat 10Similar lines in 5 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os, sys +import time +from threading import Thread + +from flask import Flask, render_template, session, request, current_app +from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect + +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from louie import dispatcher, All +from pyozwweb.app import socketio, app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError:
    refactorpyozwweb.app.socket.chat 10Similar lines in 6 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True
    refactorpyozwweb.app.socket.chat 10Similar lines in 7 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' +
    refactorpyozwweb.app.socket.chat 10Similar lines in 8 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000
    refactorpyozwweb.app.socket.chat 10Similar lines in 9 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:'
    refactorpyozwweb.app.socket.chat 10Similar lines in 10 files +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False
    refactorpyozwweb.app.socket.chat 10Similar lines in 13 files +==openzwave:1 +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.__init__:65 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +==pyozwweb:1 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False
    refactorpyozwweb.app.socket.chat 10Similar lines in 3 files +==openzwave.group:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject + +# Set default logging handler to avoid "No handler found" warnings. +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:28 +==pyozwman.ozwsh_widgets:27 +__author__ = 'bibi21000' + +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from select import select +import sys +import os +import urwid +from urwid.raw_display import Screen
    refactorpyozwweb.app.socket.chat 10Similar lines in 9 files +==openzwave.command:34 +==openzwave.controller:42 +==openzwave.group:33 +==openzwave.network:52 +==openzwave.node:37 +==openzwave.object:31 +==openzwave.option:37 +==openzwave.scene:33 +==openzwave.value:33 +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:46 +==pyozwman.ozwsh_widgets:40 +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==openzwave.network:25 +==openzwave.option:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==openzwave.network:616 +==openzwave.node:204 + if 'kvals' in extras and self.network.dbcon is not None: + vals = self.kvals + for key in vals.keys(): + ret[key]=vals[key] + return ret +
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==openzwave.group:25 +==openzwave.node:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==openzwave.object:25 +==openzwave.singleton:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==openzwave.network:616 +==openzwave.node:204 +==openzwave.scene:223 +==openzwave.value:562 + if 'kvals' in extras and self.network.dbcon is not None: + vals = self.kvals + for key in vals.keys(): + ret[key]=vals[key] + return ret
    refactorpyozwweb.app.socket.chat 10Similar lines in 12 files +==openzwave.command:25 +==openzwave.controller:26 +==openzwave.group:25 +==openzwave.network:25 +==openzwave.node:25 +==openzwave.object:25 +==openzwave.option:25 +==openzwave.scene:25 +==openzwave.singleton:25 +==openzwave.value:25 +==pyozwman.ozwsh_main:30 +==pyozwman.ozwsh_widgets:29 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass
    diff --git a/docs/joomla/pyozwweb.html b/docs/joomla/pyozwweb.html index 44efece8..99ece8d3 100644 --- a/docs/joomla/pyozwweb.html +++ b/docs/joomla/pyozwweb.html @@ -13,16 +13,23 @@

    Launching it

    Update the config :

    -
    vim config.py
    +
    vim app.conf
     
    -ZWAVE_DEVICE = "/dev/ttyUSB0"
    +[zwave]
    +device = /dev/ttyUSB0
     
    -

    You can fine tune logging in logging.conf. You can run the app :

    +

    You can fine tune logging in logging.conf and run the app :

    ./run.py
     

    And connect to http://127.0.0.1:5000 using your favorite browser.

    +

    You can also change the ip/port to allow remote connections :

    +
    [server]
    +host = 0.0.0.0
    +port = 8080
    +
    +

    Source

    diff --git a/docs/joomla/scene.html b/docs/joomla/scene.html index 840bf4c5..412715e8 100644 --- a/docs/joomla/scene.html +++ b/docs/joomla/scene.html @@ -187,12 +187,16 @@

    Scene documentation

    -to_dict(kvals=True)
    +to_dict(extras=['kvals'])

    Return a dict representation of the node.

    + + + + diff --git a/docs/joomla/searchindex.js b/docs/joomla/searchindex.js index 775fb723..9b79883c 100644 --- a/docs/joomla/searchindex.js +++ b/docs/joomla/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:42,terms:{zwavecontrol:[11,22,7],four:15,prefix:15,sleep:[14,11,25,7,15],ret:27,is_change_verifi:26,whose:15,sorri:10,"0x26":27,"0x27":27,"0x25":27,write_config:7,under:[14,15,6,7,0,19,2,26,9,22,27,25,16],command_class_climate_control_schedul:15,merchant:[14,15,6,7,0,19,2,26,22,27,25,16],digit:15,avril:9,everi:[15,7,18,26,3,27,16],controllercommand_requestnodeneighborupd:[14,15,22,7],nodefail:25,"_socketio":8,upload:15,ozw_library_vers:22,highpow:15,second:[15,7,26,16],command_class_alarm:15,even:[14,15,6,7,0,19,2,26,22,27,25,16],command_class_door_lock:15,"new":[5,15,16,18,2,22,27,10,25,7],ever:[15,26],told:[15,22],widget:3,never:[15,16],drwxrwsr:9,here:[28,11,15,16,9],getvaluefromtyp:7,path:[15,22,16,9],controllercommand_removedevic:[15,22],zwavescen:[11,2],library_descript:22,cdef:15,forum:10,anymor:[10,20,7,18],precis:[15,26],studi:27,basic_set:7,portabl:15,volunt:[4,17],pollingen:[25,7],unix:[14,15,6,16,19,2,26,22,27,25,7],controllercommand_deletebutton:[15,22],get_power_level:27,total:9,command_class_scene_controller_conf:15,unit:[15,27,7,26],describ:[14,15,7,26],would:[14,15,27],call:[14,15,7,20,9,27,11],recommend:[15,7],type:[14,15,19,6,7,1,2,21,22,3,27,26,16],tell:[15,22],notif:[25,23],notic:[15,22],warn:25,hold:[15,6,7],manufacturer_id:14,must:[15,7,19,20,9,28,22,27,10,11],join:8,room:8,work:[25,22,20,9],configpath:15,kwarg:25,root:9,signal_node_nam:7,getvaluecommandclass:15,give:15,controllercommand:[14,15,7],want:[27,20,9],unsign:15,recov:25,turn:[15,27,7],classifi:[15,26],verifi:[15,26],config:[15,16,8,26,9,22,3,11,25],updat:[18,9],actdiag:9,after:[15,7,18,20,9,11],pyvaluetyp:[14,27,25,7],controllercommand_requestnodeneighbor:22,befor:[15,16,9,27,10,11],averag:15,fedora:20,"0x014d0ef5":26,zwavevalu:[11,2,26,7],attempt:[15,7,16],command_class_multi_cmd:15,exclud:16,getcontrollerinterfacetyp:15,sinopsi:[14,15,6,16,19,2,26,22,27,25,7],lambda:[19,26],get_sensor_valu:27,origin:15,feedback:[15,25],softwar:[14,15,6,7,0,19,2,26,22,27,25,16],over:[14,15],becaus:[10,15,7],manufactu:15,callback_desc:15,broadcastreadcnt:15,vari:7,streamlin:25,getinst:7,fit:[14,15,6,7,0,19,2,26,22,27,25,16],fix:[14,15,18],better:15,change_valu:14,getdriverstatist:15,"_app":8,them:[15,7,18,9,22,3,27,28,11],woken:15,thei:[15,7,20,9,22,27,11],getozwlibraryvers:15,safe:7,use_cach:19,"break":11,command_class_simple_av_control:15,"0x31":27,"0x30":27,"0x32":27,isnoderoutingdevic:15,setvalu:15,set_driver_max_attempt:16,signal_driver_remov:7,remove_associ:6,s_cancnt:22,set_notify_transact:16,state_reset:7,getvalu:15,timeout:[15,22],each:[15,25,7],debug:[15,18,9,10,11,25],mean:[11,15,9],state_start:7,activatescen:15,is_outd:19,group:[10,25,21,9],get_values_by_nod:2,set_log_fil:[11,16],gassoci:3,extract:28,louie_value_upd:11,network:[5,15,6,18,21,22,23,10,11,25],goe:15,content:[10,5,12],rewrit:18,s_writecnt:22,signal_network_reset:[22,7],get_battery_level:27,free:[14,15,6,7,0,19,2,26,22,27,25,16],nodedata:15,ptyhon:18,zwavenodesensor:27,virtual_env:9,resetcontrol:15,commandclass:[14,15,19,7,16],ist:18,filter:[14,15,27,26],requestnodest:15,regress:20,louie:[11,3,22,7,23],controllercommand_createnewprimari:[15,22],rang:[11,15],alreadi:[28,20,18],wrapper:[10,27],signal_value_refresh:7,primari:[15,22],allnodesqueri:[15,25,7],sourc:[28,18,9],command_class_av_content_search_md:15,enumwithdoc:15,command_class_chimney_fan:15,sometim:20,scene1:26,getvalueasfloat_:15,master:[20,9],too:[15,22,9],zwave:[10,22,23,9],data_item:26,getnodemanufacturernam:15,noderemov:[25,7],consol:16,cancel_command:22,setuptool:[10,18],somewhat:7,nakcnt:15,driverawak:7,command_class_av_renderer_statu:15,signal_node_queries_complet:7,target:20,keyword:25,provid:[5,15,25,27],set_includ:16,tree:[10,18],zero:15,project:[14,15,6,7,0,19,2,26,22,27,25,16],averageresponsertt:15,minut:[11,15],ram:16,mind:20,raw:25,seem:18,python_exec:9,especi:[14,15],transmit:26,get_switch_st:27,getvalueasint:15,simplifi:15,sceneev:[25,7],usernam:9,object:[5,15,6,7,21,10,11,25],nodeid:[15,11,7,26],regular:[15,7],begin_command_assign_return_rout:22,command_class_zip_adv_cli:15,don:[15,19,26,9,27,10],signal_network_stop:7,doc:[25,18,20,9],doe:[15,7,18,26,22,10],bracket:7,networkfail:7,came:28,pfncontrollercallback_t:15,keyval:19,signal_button_off:7,get_scen:7,set_queue_log_level:16,identifi:[15,6,7,26,23,16],damen:0,zwavenodeinterfac:19,switch_al:[27,7],"_highpow":[15,22],"_groupidx":[14,15],configur:[14,15,7,26,9,22,27,16],busi:15,folder:15,command_class_meter_tbl_push:15,driverreadi:[15,25,7],softresetcontrol:15,stop:[15,11,18,7,8],setswitchpoint:15,report:[14,15,7,1,21,9,26,11,16],"public":[14,15,6,7,0,19,2,26,22,27,25,16],reload:18,bad:[15,22],releasebutton:15,respond:[15,22],getnodesecur:15,begin_command_transfer_primary_rol:22,id_on_network:[7,26],num:15,result:[14,15,1,7,21],respons:[14,15,7],command_class_mtp_window_cov:15,best:28,awar:25,ackcnt:15,valuetype_button:15,yet:[14,15,22],simplest:28,data_as_str:26,approach:15,attribut:[15,7],removescen:15,extens:3,setnodeon:15,groupidx:15,protect:15,easi:10,howev:15,enable_pol:26,getnodeproducttyp:15,logic:7,seri:15,com:[14,15,6,7,0,19,20,2,26,9,22,27,10,25,16],applianc:27,kwh:27,replacefailednod:[15,25,22],begin_command_has_node_fail:22,assum:[15,6],duplic:15,recur:15,set_config_param:14,getnodeproductid:15,setscenelabel:15,trigger:[14,15,7],interest:15,basic:[14,27,15,25,26],command_class_user_cod:15,nodenam:[15,25,7],driverreset:[25,7],retalloc:15,ani:[14,15,6,7,0,19,2,26,22,27,25,16],"catch":11,signal_driver_readi:7,gnu:[14,15,6,7,0,19,2,26,22,27,25,16],properti:[14,19,27],getallscen:15,command_class_displai:15,aid:15,join_room_valu:8,rediscov:[14,15,7],optionnali:14,conf:8,controllerstate_complet:[15,22],perform:[14,15,7],make:[15,20,9,28,22,10],driverfail:[25,7],complex:15,signal_scene_ev:7,complet:[14,15,6,7,22,25,16],rais:16,tune:8,max_associ:6,sentfail:15,deleteallreturnrout:25,thr:22,changer:19,client:[11,22,15],thi:[14,15,6,7,0,18,19,20,8,26,2,22,3,27,28,11,9,25,16],get_switch_all_item:27,everyth:[25,7],unchang:16,ttyusb0:[15,8,18],just:[14,15,7],receivedcnt:15,command_class_silence_alarm:15,human:[14,15],bit:15,previous:[15,20],nondeliveri:15,replicationsend:25,expos:15,had:[14,15],command_class_protect:15,els:11,save:[15,16],applic:[14,15,7,26,23,25],mayb:19,commmand:15,command_class:[14,27,26],background:15,valueid:[14,15,27,7],promari:15,isnodesecuritydevic:15,measur:[15,26],specif:[14,15,19],deprec:[14,7],manual:[14,11,15,24],louie_network_fail:11,enablepol:15,unstabl:20,www:[14,15,6,7,0,19,2,26,22,27,25,16],right:[28,8,9],old:[10,15,20,22,18],interv:[15,7,16],intern:25,sure:[28,19,9],heritag:27,successfulli:[15,22,7],txt:9,querystag:[14,15],command_class_remote_associ:15,getlibraryvers:15,plug:27,s_nakcnt:22,clearswitchpoint:15,soft_reset:22,set_save_configur:16,allnodesqueriedsomedead:25,command_class_thermostat_operating_st:15,joomla:9,sendnodeinform:25,commit:[20,9],thermostat:19,zwaveobject:[19,27],command_class_switch_toggle_multilevel:15,"float":[15,26],signal_button_on:7,down:3,create_scen:7,wan:14,accordingli:7,git:[10,28,20,9],wai:[14,15,19,9,27,28,11],support:9,networkstart:7,avail:[15,11,3,7],wordpress:15,setscenevalu:15,s_sofcnt:22,forc:[14,15],drwxr:9,taken:15,zwaveopt:[11,22,16],"true":[14,15,16,19,2,26,22,27,11,7],reset:[27,15,3,22,7],setdoc:15,maximum:[14,15,7,26],until:[15,7],pyozwman:18,classid:14,featur:[10,15],isnodeinforeceiv:[14,15],classic:27,getnodequerystagecod:15,zwavetypeexcept:19,exist:[15,7,19,22,25,16],check:[14,15,7,19,26,9,22,27],readonli:[14,27,7],api_sniff:23,state_stop:7,tip:9,signal_network_readi:[11,7],bibi21000:[14,15,6,7,0,19,20,2,26,9,22,27,28,25,16],role:[15,22],test:18,presum:14,"72057594109853720l":27,node:[5,15,6,7,18,20,21,22,27,23,11],relat:7,intend:7,command_class_network_stat:15,command_class_composit:15,intens:[15,26],consid:[27,7],occasion:[15,26],outdat:19,bitbucket:[10,18],receiv:[14,15,6,7,0,19,2,26,22,27,11,25,16],sendig:22,longer:15,command_class_screen_attribut:15,ignor:[27,16],time:[15,7,18,19,26,9,22,11,16],push:9,sniffer:11,backward:14,particular:[14,15,6,7,0,19,2,26,22,27,25,16],serialport:15,although:[15,7,26],signific:7,millisecond:[15,7,16],flask:[10,23,18],decim:[27,25],readabl:[14,15],pyozwweb:18,command_class_scene_activ:15,scenes_count:7,command_class_thermostat_fan_mod:15,valuerefresh:[25,7],begin_command_receive_configur:22,string:[14,15,7,26,9,27,25],set_console_output:[11,16],signal_driver_:7,zwcfg:7,word:11,brows:14,get_dimm:27,dim:[27,20],uwird:3,level:[5,15,16,18,19,26,22,27,25],signal_create_button:7,iter:25,item:[27,15,25],getsucnodeid:15,round:15,dir:20,max_baud_r:14,loglvel:16,getnumscen:15,isnodelisteningdevic:15,set_dump_trigger_level:16,sign:15,zwcfg_:15,port:[15,7,16],appear:[10,15,26],current:[15,27,26],getnodemaxbaudr:15,switchalloff:15,is_read_onli:26,gener:[14,15,6,7,0,19,2,26,9,22,27,11,25,16],getsendqueuecount:15,valueremov:[25,7],modif:11,along:[14,15,6,7,0,19,2,26,22,27,25,16],zwavecacheexcept:19,wait:[14,15,16,22,11,25],checksum:[15,22],command_class_sensor_binari:[15,27],queue:[15,22],environn:9,activ:[15,11,27,2,16],modul:[10,27],essentialnodequeriescomplet:[25,7],zwavegroup:6,instal:[18,23,9],command_class_batteri:[15,27],command_class_thermostat_setback:15,memori:[15,23],visit:3,live:7,handler:[15,22,7],utpdat:9,command_class_energy_product:15,command_class_associ:15,claus:11,pylint:[1,21,9],enhanc:15,signal_node_readi:7,signal_node_ad:7,lastrequestrtt:15,setvaluehelp:15,"72057594118242369l":27,maarten:0,uniqu:[15,26],can:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,10,11,9,25,16],memoryleaks3:15,purpos:[14,15,6,7,0,19,2,26,22,27,25,16],controllercommand_adddevic:[15,22],switchallon:15,nodereadi:7,abort:[15,22],add_associ:6,alwai:[14,15,25,7],multipl:[15,27,26],getoptionasstr:15,group_index:6,write:[11,27,15,26,9],setnodenam:15,"0x80":27,zwave_devic:8,map:[5,15,18,27,10,25],product:[14,15,7],command_class_application_statu:15,max:[27,16,26],clone:[20,9],id_separ:7,upnoderout:[14,15,7],"_getozwlibraryversionnumb":15,mai:[15,7,26,9],data:[22,1,27,21],setnodemanufacturernam:15,beam:[14,15],getvaluemax:15,getvalueasstr:15,secur:[14,15,22,7],favorit:8,requestnodeneighborupd:25,"switch":[15,7,18,19,20,3,27,23,11],still:15,pointer:15,interspers:[15,7],disconnect:22,sof:[15,22],platform:[14,15,6,16,19,2,26,22,27,25,7],main:[11,15],non:20,receiveconfigur:25,broadcastwritecnt:15,nov:9,now:[15,7,18,19,20,9,28,22,10,11],discuss:10,getgrouplabel:15,term:[14,15,6,7,0,19,2,26,22,27,25,16],louie_network_start:11,name:[14,15,7,20,22,3,27,10,11,25],drop:[15,22],revert:[15,6],getassoci:[14,15],separ:[15,7],getvalueasbool:15,compil:[10,28,20],replac:[15,22,7,18],individu:7,getscenelabel:15,continu:11,redistribut:[14,15,6,7,0,19,2,26,22,27,25,16],begin_command_request_node_neigbhor_upd:22,happen:27,is_security_devic:14,alpha2:18,alpha3:18,shown:25,alpha1:18,removescenevalu:15,alpha4:18,sensor:[11,3,27,7,23],correct:[15,26],getchangeverifi:15,get_value_from_id_on_network:7,leave_room_nod:8,loglevel_debug:16,org:[14,15,6,7,0,18,19,2,26,9,22,27,10,25,16],"byte":[14,15,7,26,22,27,25],care:27,signal_all_nodes_queri:7,frequenc:15,transferprimaryrol:25,motion:7,thing:[11,27],place:[15,9],frequent:[14,15],first:[14,11,27,7,15],oper:[14,15,22,7],hasnodefail:25,directli:[27,15,6,7,9],onc:[15,7],arrai:15,pynotif:25,command_class_configur:15,"long":7,open:[10,15,9],predefin:27,size:[14,15],getvalueasfloat:15,given:[15,7],convent:15,streamdetail:25,getcontrollerpath:15,has_command_class:14,frame:[15,22,16],to_node_id:22,hub:9,cope:[15,7],copi:[14,15,6,7,0,19,20,2,26,9,22,27,25,16],specifi:[15,22,7,16],broadcast:[15,7],github:[14,15,6,7,0,19,20,2,26,9,22,27,10,25,16],an158:27,"0x73":27,than:[15,7,26,16],sentt:15,param2:27,param1:27,were:[14,11,22,15],set_append_log_fil:[11,16],browser:8,sai:[15,19,27,7],controllercommand_sendnodeinform:15,argument:[11,25],deliv:[15,22],is_bridge_control:22,squar:7,"_network":22,destroi:15,object_id:[19,2],note:[10,26,24],take:[15,7],pycontrollerst:25,heal:[14,15,7,18],channel:11,receiveddup:15,normal:[14,15,25,22,18],buffer:25,pair:25,command_class_hail:15,getnodestatist:15,later:[14,15,6,7,0,19,2,26,22,27,11,25,16],order:7,writeconfig:15,bright:27,line:[10,15,27,9],xml:[15,7,16],is_lock:14,onli:[14,15,7,26,9,22,27,25,16],explicitli:15,libzwaveexcept:15,transact:16,naviso:15,written:[15,26],dict:[14,15,7,18,2,26,22,27,25],isnodefrequentlisteningdevic:15,command_class_meter_tbl_monitor:15,offici:20,state_fail:7,variou:[14,15],get:9,getid:7,secondari:[15,22],repo:[20,24],networkstop:7,cannot:[15,26],command_class_time_paramet:15,refreshnodeinfo:15,requir:[15,22],getozwlibraryversionnumb:15,createopt:15,leave_room_valu:8,to_dict:[14,22,2,26,7],where:[11,27],command_class_meter_puls:15,com3:15,lastreceivedmessag:15,asleep:[14,15,6],concern:[15,7],getnodeloc:15,disablepol:15,label:[14,15,6,7,2,26,22,27],behind:15,between:[14,15,7,3,27,16],dockerfil:[18,9],"import":[11,7,9],paramet:[14,15,6,7,18,19,2,26,22,3,27,11,16],getindex:7,request_all_config_param:14,parent:26,screen:[11,3],nodeev:[25,7],removeswitchpoint:15,compatibilti:9,readabort:15,tutori:[11,9],hard_reset:22,mani:[10,15,27],scene_exist:7,cancelcontrollercommand:15,period:[15,7],signal_valu:11,signal_nod:11,poll:[15,18,7,26,16],command_class_screen_md:15,bintervalbetweenpol:[15,7],rebuild:[15,22],signal_value_ad:7,getswitchpoint:15,repons:15,pyoption:[15,18],zwavecommandclassexcept:19,wake:[27,7],addassoci:[14,15],getvaluegenr:15,those:15,"case":[15,6,7,18,26,9,27,11],is_set:26,stdout:[11,15],begin_command_create_new_primari:22,eras:[15,22],"__init__":18,join_room_network:8,author:0,same:[14,15,7,26,27,11],removeallscen:15,binari:9,html:9,eventu:[14,15],finish:[15,22,18],"72057594118242352l":27,driver:[15,6,7,22,11,16],lastresponsertt:15,capabl:[14,15,22,7],command_class_languag:15,extern:7,appropri:[15,7],without:[14,15,6,7,0,19,2,26,9,22,27,25,16],join_room_control:8,setnodeloc:15,execut:[7,16,9],when:[14,15,7,19,20,26,9,22,27,10,11,16],loglevel_detail:16,rest:27,bitmap:15,venv:9,getconfigpath:15,targetnodeid:15,struct:15,except:[5,15,19,12,21],littl:7,command_class_geographic_loc:15,blog:15,"255l":27,homepro:27,is_primary_control:22,controllerstate_fail:[15,22],read:[15,22,7,26],addscenevalu:15,pollinterv:[15,7,16],dimmer:[18,19,3,27,23,11],temperatur:[15,27],traffic:[15,7],dispatch:[11,22,7],louie_network_readi:11,integ:15,command_class_proprietari:15,set_save_log_level:[11,16],either:[14,15,6,7,0,19,2,26,9,22,27,25,16],python_library_vers:22,manag:[26,15,6,7,19,8,21,9,22,3,27,23,10,11,16],createscen:15,autobuild:9,cancel:[15,25,22],get_values_by_command_class:14,is_write_onli:26,command_class_powerlevel:[15,27],confirm:[14,15],valuetype_schedul:15,definit:[5,12],protocol:[15,7],exit:15,command_class_grouping_nam:15,refer:[15,7],command_class_meter_tbl_config:15,isvaluewriteonli:15,power:[15,27,22],command_class_met:[15,27],fulli:[15,7],src:[10,18,8,9],patent:[15,7],central:7,ack:[15,22],degre:15,neighbor:[14,15,22,7],get_switches_al:27,effici:15,addoptionstr:15,urwid:3,your:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,23,10,11,9,25,16],zwaveexcept:19,log:[15,7,18,8,9,24,11,25,16],hex:15,overwrit:[15,16],start:[27,22,25,23,18],interfac:[15,19,27],low:[5,15,19,26,22,25],lot:22,reaload:18,set_suppress_value_refresh:16,inprogress:25,command_class_wake_up:[15,27],openzav:9,command_class_ind:15,set_switch:27,power_level:27,conclus:27,pull:10,zwavenodeswitch:27,begin_command_remove_devic:22,possibl:[27,15,6,7,26],"default":[14,15,7,26,22,16],assignreturnrout:25,set_exclud:16,connect:[11,23,7,8],controllercommand_createbutton:[15,22],creat:[15,7,19,20,2,26,9,22,28,11,25],certain:7,watcher:[15,7],file:[14,15,6,7,0,19,2,26,9,22,27,28,25,16],fill:15,incorrect:26,again:7,googl:10,allawakenodesqueri:15,event:[10,11,7,15,8],field:[14,2],valid:[14,15,26],zwavemanag:7,writabl:14,you:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,23,10,11,9,25,16],createnewprimari:25,get_values_for_command_class:14,request_config_param:14,get_dimmer_level:27,pygenr:[14,25,7],registri:9,sequenc:7,getnodegener:15,getpythonlibraryvers:15,removecontrol:[15,22],badchecksum:15,directori:[15,20,8,9,28,22,10,11],descript:[15,22,7],potenti:[15,7],cpp:22,represent:[14,22,2,26,7],all:[14,15,7,2,9,22,3,27,23,28,11,25],dist:[10,9],pth:10,get_sensor:27,follow:[7,20,9,3,27,28],disk:16,ozw_log:11,kval:[14,18,2,19,7],uint8_t:15,init:15,program:[27,7,9],"72057594101481476l":27,controllercommand_deleteallreturnrout:[15,22],fals:[14,15,16,2,26,22,27,11,7],controllercommand_addcontrol:22,mechan:[11,19,27],failur:15,veri:[25,7],manufacturer_nam:14,list:[14,15,26,28,22,27,23,10,25],helloworld:21,lisa:9,awakenodesqueri:[25,7],set_associ:16,valuechang:[14,15,25,7],delimit:15,isvaluereadonli:[15,7],rate:[14,15,7],pass:[11,15,9],further:11,what:[15,19,27,22],suc:[15,22],clock:15,abl:[15,25],delet:[15,3,22,7],version:[14,15,6,7,0,19,2,26,9,22,27,10,25,16],"_append":15,begin_command_create_button:22,method:[14,15,7,19,8,26,22,3,27],full:[10,20,18],command_class_thermostat_setpoint:15,get_poll_interv:7,behaviour:[14,15],shouldn:7,modifi:[14,15,6,7,0,19,2,26,22,27,11,25,16],valu:[14,5,15,7,18,25,19,8,21,2,22,3,27,23,11,12,16],signal_network_start:[11,7],sender:11,prior:7,base:15,state_readi:[11,7],nosetest:[18,9],action:[15,22,7],via:[14,15,7,9,10,25],setpollintens:15,vim:8,sucee:15,filenam:15,switchal:[15,7],getnodeclassinform:15,logdriverstatist:15,s_badchecksum:22,select:26,hexadecim:[14,15],regist:27,two:[15,25],coverag:[1,21,9],set_poll_interv:[7,16],minor:[10,25],more:[14,15,6,7,0,18,19,2,26,22,27,11,25,16],hundr:7,getvaluefloatprecis:15,flag:26,command_class_desc:[15,7],stick:9,command_class_zip_adv_servic:15,known:[14,15,27,7],set_valu:2,cach:19,none:[15,6,16,18,19,2,26,22,27,11,25,7],getcontrollernodeid:15,hour:15,socketio:8,dep:[28,20],dev:[15,18,8,22,3,23],learn:[15,22],def:[11,18],install_repo:10,accept:[15,22],minimum:[15,26],num_group:14,huge:25,cours:[7,9],nico0084:15,divid:[15,7],rather:[15,26],anoth:[15,27,22,9],manufacturer_specif:15,adddriv:15,simpl:11,badrout:15,get_command_class_as_str:14,command_class_no_oper:15,develop:18,setconfigparam:15,associ:[14,15,6,7,21,27,16],"short":25,product_typ:14,caus:[14,15],callback:[14,15,6,7,22,11],scenegetvalu:15,egg:[20,9],s_ackcnt:22,help:[15,3,27,26,9],isbridgecontrol:15,setback:15,held:[14,15,6,26],through:[15,6,26],s_readabort:22,get_valu:[14,2,7],get_command_class_genr:14,unwork:18,handheld:[15,22],late:[15,22],segfault:10,isreadi:14,addoptionbool:15,might:[15,20,7],signal_node_ev:7,zwavenod:[14,11,27,22],remove_valu:[14,2],good:[7,20,8,26,3,27],"return":[14,15,6,16,19,2,26,22,27,7],timestamp:25,framework:23,sleeping_nodes_count:7,productnam:15,sentcnt:15,controllercommand_receiveconfigur:[15,22],refresh:[14,15,19,16,26],easili:16,found:[14,11,7,15,9],send_queue_count:22,pyloglevel:[25,18],hard:[15,3,22],nodes_count:[11,7],expect:15,slave:15,energi:[15,27],todo:[14,16],controllerstate_wait:[15,22],ozwsh:[11,3,18],"72057594109853736l":27,command_class_zip_serv:15,unknown:15,publish:[14,15,6,7,0,19,2,26,22,27,25,16],command_class_switch_toggle_binari:15,getnodevers:15,print:11,check_data:26,reason:[15,22],healnetwork:15,ask:[10,7,9],command_class_av_content_directory_md:15,product_id:14,thread:15,launch:[10,18,20,9],script:[28,11,18],value_id:[14,27,2,26,7],assign:[15,22,7],logfil:16,singleton:[15,9],command_class_thermostat_mod:15,notifi:[11,15],"_param":[14,15],number:[14,15,6,7,22,16],placehold:7,install_arch:10,done:[15,17,20,3,27,4,11],"72057594093060096l":27,miss:[15,7],gpl:[14,15,6,7,0,19,2,26,22,27,25,16],differ:[15,22,18],s_retri:22,least:[7,9],getvaluelistselectionstr:15,setchangeverifi:15,store:[15,7,18,19,22,16],option:[14,5,15,6,7,0,18,25,19,21,28,22,27,10,11,12],controllercommand_replacefailednod:[15,22],command_class_garage_door:15,getter:27,reinstal:9,kind:27,whenev:[15,26],remov:[15,6,7,18,20,2,28,22,3,10,11,16],jqueri:[10,23,8,18],bridg:[15,22],controllercommand_removecontrol:22,str:[14,15,16,2,26,22,27,7],set_command_class_0xyz:27,comput:[20,9],add_valu:[14,2],sensormultilevel:[15,26],"72057594093273218l":27,packag:[10,28,20,9],homeid:[15,11,7,26],"null":[15,7],from_node_id:22,writeonli:[14,27],built:28,lib:18,trip:15,self:[14,7,18,22,27,11],msgcomplet:7,also:[14,15,6,7,20,2,9,22,27,10,11,8],getpollinterv:15,s_readcnt:22,distribut:[14,15,6,7,0,19,20,2,26,22,27,28,25,16],index:[14,5,15,6,7,26],isprimarycontrol:15,previou:[15,20],reach:7,most:[15,7],plai:20,node_id:[14,6,7,2,26,22],isvaluepol:15,begin_command_remove_failed_nod:22,clear:[15,7],driverremov:[25,7],part:[14,15,6,7,0,19,2,26,22,27,25,16],clean:[28,15,20],begin_command_replication_send:22,m_pollinterv:[15,7],rtt:15,session:[15,16,9],fine:[25,8],find:[15,27,7],copyright:24,command_class_switch_multilevel:[15,27],solut:8,nodess:15,queu:25,pythonfunc:15,setnodeoff:15,valuead:[25,7],hid:[15,27,7,16],fastest:28,getlibrarytypenam:15,sill:9,him:11,join_room_nod:8,user_path:[11,16,18],is_pol:[27,26],is_sleep:14,common:[5,12,7,25,9],set:[14,15,6,7,19,2,26,22,3,27,11,16],dump:16,see:[14,15,6,7,0,19,2,26,22,27,10,11,25,16],arg:[15,11,22,7],scene_id:[2,7],close:[15,22,16],command_class_thermostat_h:15,someth:[15,25,9],won:20,target_node_id:6,command_class_association_command_configur:15,signal_essential_node_queries_complet:7,altern:7,handle_command_class:27,unsolicit:[15,22],setnodelevel:15,signal_driver_fail:7,library_config_path:22,classnam:15,popul:[15,11,7],both:[15,6],last:[15,7,19,20,9,27],"72057594109853697l":27,command_class_av_tagging_md:15,context:15,load:11,readcnt:15,simpli:[11,15,26],point:[27,15,22,7],instanti:15,schedul:[15,25],consumm:27,removedriv:15,header:20,param:[14,15],shutdown:15,linux:[28,15],batteri:27,setvaluelabel:15,command_class_sensor_configur:15,buttonon:[25,7],devic:[14,15,6,7,18,19,26,22,3,23,11,16],due:[15,22,6,7],empti:[15,25,7],sinc:[15,22],begin_command_replace_failed_nod:22,fire:[22,7],getnodemanufacturerid:15,destroyopt:15,actdiag_sphinxhelp:9,refresh_valu:14,signal_node_remov:7,look:[15,17,20,9,28,4,10,11],oofcnt:15,batch:7,getpythonlibraryversionnumb:15,"while":[27,15,22,7],abov:[7,16],removefailednod:25,xvzf:28,averagerequestrtt:15,readi:[14,15,7,20,22,28,11],readm:[24,9],jpg:15,itself:7,sceneid:15,receivedunsolicit:15,nodead:[25,7],signal_error:7,shorter:[15,7],begin_command_send_node_inform:22,command_class_kick:15,signal_node_protocol_info:7,controllercommand_requestnetworkupd:[15,22],command_class_door_lock_log:15,setdoctyp:15,get_switch:27,alert:25,user:[14,15,7,18,26,9,22,27,25],typic:7,command_class_sensor_multilevel:[15,27],equival:15,toadddriv:15,older:15,entri:27,getvaluehelp:15,docker:[18,9],controllerstate_inprogress:[15,22],getvalueasshort:15,pollingdis:[25,7],build:9,format:26,"_getcontrollerinterfacetyp":15,biz:28,"72057594093273090l":27,nodequeriescomplet:[25,7],signal:[22,23],signal_polling_dis:7,command_class_vers:15,writecnt:15,api:[14,5,15,6,7,18,19,22,23,10,11],enumwithdoctyp:15,signal_awake_nodes_queri:7,jsonifi:7,signal_delete_button:7,some:[10,18,20,9],back:[11,25],command_class_0x80:27,ackwait:15,netbusi:15,per:[15,7],prop:19,retri:15,commandclassid:[15,26],nose:[1,21],run:[18,9],raspberri:28,step:27,command_class_multi_channel_v2:15,idx:15,class_id:[14,27],"72057594101662232l":27,pymanag:[15,7],primarili:7,within:[14,15,16,2,25,7],poll_intens:26,betwork:7,getvaluelabel:15,command_class_zip_cli:15,chang:[14,15,7,2,26,9,22,3,24,28,11,16],inclus:[15,22],submit:[10,9],includ:[27,18,25,7,9],suit:10,frost:15,getnumgroup:[14,15],link:9,newer:15,buttonoff:[25,7],info:[15,25,9],concaten:15,consist:15,lifespan:15,gethomeid:7,s_controllerreadcnt:22,command_class_manufacturer_proprietari:15,repres:[14,15,16,19,2,26,27,7],"char":7,config_path:[11,16,18],nak:[15,22],invalid:25,command_class_remote_association_activ:15,routedbusi:15,setvalueunit:15,sphinxdoc:15,high_pow:22,getmaxassoci:15,getnodetyp:15,getvaluemin:15,louie_node_upd:11,command_class_switch_binari:[15,27],data_str:27,code:[10,22,18,9],command_class_secur:15,queri:[15,11,7],library_user_path:22,last_upd:19,cython:[10,28,18,9],friendli:[15,27],send:[14,15,7,22,27,11],cmd_line:[11,16,18],autostart:[11,7],sens:7,fatal:25,healnetworknod:15,sent:[14,15,6,7,22,3,25,16],pycontrollercommand:25,objet:7,wave:[14,15,6,7,2,22],command_classes_as_str:14,set_dimm:27,tri:15,button:[27,15,25,22],signal_node_new:7,setnodeproductnam:15,"try":[23,16,9],signal_polling_en:7,begincontrollercommand:15,pleas:[10,18,9],impli:[14,15,6,7,0,19,2,26,22,27,25,16],smaller:[15,7],soltion:28,scenes_to_dict:7,command_class_clock:15,download:[28,20],zwavenetwork:[11,19,7],append:[15,16],compat:14,signal_network_awak:7,access:[15,27,16],testnetworknod:15,command_class_tim:15,state_str:7,isnodeawak:[14,15],becom:[15,22],can_wake_up:27,accessor:26,zwcallback:[22,7],larger:[15,7],genr:[14,15,27,7,26],implement:[14,15,18,19,22,27,10,11],command_class_scene_actuator_conf:15,s_oofcnt:22,getvaluelistselectionnum:15,appli:9,app:[8,18],disable_pol:26,foundat:[14,15,6,7,0,19,2,26,22,27,25,16],apt:20,isnodefail:[14,15],wit:18,cache_properti:19,command_class_node_nam:15,from:[23,9],usb:15,commun:[15,7],next:[15,22,8],implic:7,few:7,usr:[10,9],stage:15,command_class_mark:15,insensit:15,account:9,retriev:[14,15,6,7,20,26,22,27],s_drop:22,ccdata:15,getvalueunit:15,fetch:[14,15],control:[18,21,9],tar:28,process:18,lock:[14,11,15],celsiu:15,tab:3,serial:[15,7,16],command_class_thermostat_fan_st:15,signal_driver_reset:7,arelock:15,instead:[14,15,22,9],removewatch:15,physic:[15,22,7],alloc:15,essenti:15,seriou:25,getoptionasint:15,element:15,issu:[10,15,25,7,18],allow:[14,15,22,18],is_listening_devic:14,usermod:9,move:[15,22],meter:27,comma:15,addcontrol:[15,22],nodeprotocolinfo:[25,7],"0x84":27,getnodespecif:15,chosen:[15,22],command_class_bas:15,networkreadi:7,therefor:15,command_class_zip_adv_serv:15,signal_value_remov:7,set_interfac:16,command_class_ip_configur:15,handl:[15,16,26],auto:20,set_log:[11,16],createbutton:[25,7],anyth:16,edit:[15,3],mode:[10,15,18,9],requestallconfigparam:15,command_class_schedule_entry_lock:15,receivedt:15,getnodequerystag:[14,15],tenth:15,special:[15,9],variabl:[15,7,2,26,9,27],addwatch:15,categori:7,rel:7,hardwar:15,get_switch_all_st:27,getvaluetyp:15,basiccommand:27,controllercommand_assignreturnrout:[15,22],dictionari:25,releas:[10,11,20,8],afterward:[15,22],controllercommand_replicationsend:15,could:[11,19,15],s_ackwait:22,put:9,keep:[20,7,9],length:[15,7],command_class_controller_repl:15,transfer:[15,25,22],retain:15,leave_room_control:8,refreshvalu:15,requestnodedynam:15,qualiti:[15,9],scene:[5,15,7,18,19,20,21,3,11,12],get_stats_label:22,date:[19,7,9],facil:18,is_readi:7,library_type_nam:22,system:[27,15,25,26],messag:[14,15,6,7,26,22,25,16],home_id:[11,19,7,26],attach:[15,7],staticgetcommandclassid:[14,15],termin:18,"final":[15,18],getvaluelistitem:15,prone:15,command_class_firmware_update_md:15,shell:[3,23],travi:9,pressbutton:15,rst:9,lion:15,structur:[15,25],charact:15,yourzwavestick:[3,23],fail:[14,15,6,7,2,22,28,11,25],have:[14,15,6,7,0,19,20,2,26,9,28,22,27,10,11,25,16],need:[18,23,9],command_class_non_interoper:15,zwavenodebas:27,min:[27,26],rout:[14,15,22,7],isvalueset:15,which:[15,25,7],detector:7,singl:[14,15,2,26],pyx:[5,9],whe:19,unless:7,getnodeid:7,getvalueinst:15,set_change_verifi:26,set_switch_al:27,pyc:9,"class":[14,15,6,7,19,2,26,8,22,27,25,16],adaptat:22,request:[14,15,7,9],determin:[15,26],openzwav:[0,18],addoptionint:15,fact:7,spuriou:[15,26],command_class_multi_instance_associ:15,text:15,requestconfigparam:15,staff:9,locat:[14,11,3,15,16],ispol:15,removeassoci:[14,15],should:[14,15,6,7,0,19,2,26,9,22,27,25,16],manufactur:[14,15,7],suppos:27,nodenew:[25,7],local:[10,20,7,9],signal_network_fail:[11,7],hope:[14,15,6,7,0,19,2,26,22,27,25,16],pypa:[10,18],gettyp:[15,7],switches_al:27,command_class_lock:15,awak:[14,15,7],enabl:[15,27,7,26,16],setupttol:18,contain:[15,7,26,22,27,28],nodes_to_dict:7,removedevic:[15,25,22],view:3,controllercommand_removefailednod:[15,22],seten:15,testnetwork:15,adddevic:[15,25,22],knowledg:15,isstaticupdatecontrol:15,displai:[15,3,22,7,16],gmail:0,statu:[15,25,16,26],error:[15,11,25,7,16],state:[15,7,26,22,27,11],is_routing_devic:14,controllercommand_hasnodefail:[15,22],progress:[15,25,22],email:10,addopt:15,kei:[3,25],getcommandclassid:7,getvalueasstring_:15,job:7,entir:16,webapp:[10,8],addit:7,sniff:23,rtype:[14,15],refresh_info:14,equal:16,"_getcontrollerpath":15,etc:[15,25,7,26],instanc:[15,18,7,26,9],controllercommand_transferprimaryrol:[15,22],signal_msg_complet:7,command_class_basic_window_cov:15,chmod:9,respect:[10,18],signal_value_chang:7,command_class_actuator_multilevel:15,quit:7,tread:8,deletebutton:[25,7],set_interval_between_pol:16,cancnt:15,immedi:[14,15,26],stdouttologg:15,neighbour:[15,22],togeth:7,getnodebas:15,present:7,statist:[15,22],multi:15,defit:25,"72057594093273600l":27,defin:[11,27,15,18],getgenr:7,homei:15,observ:[15,26],helper:[14,15],almost:20,demo:[23,18],manufacturernam:15,begin_command_add_devic:22,archiv:18,product_nam:14,begin_command_delete_all_return_rout:22,set_field:14,member:[15,6],python:[0,18],is_switch:27,getpollintens:15,requestnetworkupd:25,getnodeproductnam:15,http:[14,15,6,7,0,18,19,20,8,26,9,28,22,27,10,2,25,16],listenerthread:8,upon:[16,26],effect:16,initi:[14,15,25,7],getnumswitchpoint:15,sete:16,off:[15,7,20,26,9,27],is_beaming_devic:14,well:[15,16],exampl:[14,15,7,18,19,21,3,27,23,24,10,11,25],command:[18,20,21,9,28,10],usual:[14,15,22],value_data:2,library_vers:22,less:15,"boolean":15,obtain:[14,15],getnodenam:15,command_class_sensor_alarm:15,driverdata:15,web:[23,8,18],makefil:[18,20,9],parent_id:26,add:[14,15,6,7,18,19,2,9,22,3,27],noack:15,logger:18,know:[14,15,19,27],burden:15,press:[15,22],password:9,python2:[10,9],like:[15,7,20,9,3,28,25],success:[15,6],is_frequent_listening_devic:14,necessari:[22,27],classvers:15,soft:[15,3,22],retransmit:[15,22],captur:15,setter:27,begin_command_delete_button:22,"export":27,flush:11,proper:7,home:15,sofcnt:15,librari:[14,15,6,7,18,1,20,26,9,22,23,10,25],is_static_update_control:22,outgo:[15,22],leav:8,setpollinterv:[15,7],"enum":[15,1,21],usag:[15,26,18],requestnodeneighbor:15,getnodeneighbor:15,leave_room_network:8,panel:[3,9],c_str:7,actual:[15,6,7,26,9,22],socket:[10,23,18],state_awak:7,s_controllerwritecnt:22,constructor:18,actuat:27,disabl:[15,7,26,22,25,16],own:9,remove_scen:7,automat:[14,15,7,9,27,16],warranti:[14,15,6,7,0,19,2,26,22,27,25,16],been:[14,15,7,26,9,22,11],merg:9,getvalueindex:15,getoptionasbool:15,much:[15,7],command_class_manufacturer_specif:15,"function":[11,27,15],receipt:7,nodeok:25,unexpect:[15,25],yeah:20,home_id_str:7,uninstal:[10,28,20],bug:[10,15,18],count:[14,15,22,7],succe:[15,6],made:[10,14,15],whether:[14,15,22,7,26],controller_id:22,record:[14,7],below:7,limit:16,otherwis:[14,15,7,2,26,9],problem:[10,7,18],quickli:[25,7],baud:[14,15,7],sceneexist:15,evalu:23,"int":[14,15,6,16,19,2,26,22,27,25,7],dure:[15,11,7],command_class_switch_al:[15,27],begin_command_request_network_upd:22,pip:[10,9],getvalueasbyt:15,detail:[14,15,6,7,0,19,2,26,22,27,25,16],virtual:[15,9],other:[15,7,19,26,9,22,28,25],bool:[14,15,16,19,2,26,22,27,25,7],futur:[15,6,7,8],branch:[18,9],varieti:7,getopt:15,isnodebeamingdevic:15,functionn:[11,7],stat:22,debian:[28,20,9],sphinx:9,reliabl:15,rule:27,command_class_zip_servic:15},objtypes:{"0":"py:module","1":"py:attribute","2":"py:method","3":"py:class","4":"py:data","5":"py:function","6":"py:exception"},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","class","Python class"],"4":["py","data","Python data"],"5":["py","function","Python function"],"6":["py","exception","Python exception"]},filenames:["COPYRIGHT","_index_lib","scene","pyozwman","INSTALL_WIN","index","group","network","pyozwweb","DEVEL","README","hello_world","openzwave","diagrams","node","libopenzwave","option","INSTALL_MAC","CHANGELOG","object","INSTALL_REPO","_index_api","controller","EXAMPLES","_index_txt","data","value","command","INSTALL_ARCH"],titles:["License","<no title>","Scene documentation","PyOzwMan documentation","Installing python-openzwave on Windows","Welcome to python-openzwave’s documentation!","Group documentation","Network documentation","PyOzwWeb documentation","Developpers information","python-openzwave","python-openzwave hello_world","API documentation","Notification’s diagrams","Node documentation","libopenzwave module","Option documentation","Installing python-openzwave on MacOs","Changelog","Object documentation","Installing python-openzwave from repository","<no title>","Controller documentation","python-openzwave","<no title>","Data documentation","Value documentation","Command documentation","Installing python-openzwave from archive"],objects:{"":{libopenzwave:[15,0,0,"-"]},"openzwave.controller":{ZWaveController:[22,3,1,""]},"openzwave.network.ZWaveNetwork":{nodes_count:[7,1,1,""],scenes_to_dict:[7,2,1,""],manager:[7,1,1,""],id_separator:[7,1,1,""],scene_exists:[7,2,1,""],get_value:[7,2,1,""],home_id:[7,1,1,""],start:[7,2,1,""],state:[7,1,1,""],is_ready:[7,1,1,""],write_config:[7,2,1,""],scenes_count:[7,1,1,""],test:[7,2,1,""],nodes:[7,1,1,""],get_scenes:[7,2,1,""],get_poll_interval:[7,2,1,""],get_value_from_id_on_network:[7,2,1,""],heal:[7,2,1,""],stop:[7,2,1,""],remove_scene:[7,2,1,""],home_id_str:[7,1,1,""],controller:[7,1,1,""],sleeping_nodes_count:[7,1,1,""],create_scene:[7,2,1,""],switch_all:[7,2,1,""],zwcallback:[7,2,1,""],state_str:[7,1,1,""],set_poll_interval:[7,2,1,""],to_dict:[7,2,1,""],nodes_to_dict:[7,2,1,""]},"openzwave.group.ZWaveGroup":{associations:[6,1,1,""],index:[6,1,1,""],max_associations:[6,1,1,""],add_association:[6,2,1,""],label:[6,1,1,""],remove_association:[6,2,1,""]},"openzwave.command.ZWaveNodeSwitch":{get_switch_state:[27,2,1,""],get_dimmer_level:[27,2,1,""],get_switch_all_state:[27,2,1,""],get_switches:[27,2,1,""],get_switch_all_items:[27,2,1,""],get_switches_all:[27,2,1,""],get_switch_all_item:[27,2,1,""],get_dimmers:[27,2,1,""],set_switch:[27,2,1,""],set_dimmer:[27,2,1,""],set_switch_all:[27,2,1,""]},"libopenzwave.PyOptions":{getOptionAsString:[15,2,1,""],getConfigPath:[15,2,1,""],addOption:[15,2,1,""],getOptionAsBool:[15,2,1,""],lock:[15,2,1,""],create:[15,2,1,""],getOptionAsInt:[15,2,1,""],areLocked:[15,2,1,""],addOptionInt:[15,2,1,""],destroy:[15,2,1,""],addOptionBool:[15,2,1,""],addOptionString:[15,2,1,""],getOption:[15,2,1,""]},"libopenzwave.EnumWithDocType":{setDocType:[15,2,1,""]},libopenzwave:{driverData:[15,5,1,""],PyLogLevels:[25,4,1,""],EnumWithDocType:[15,3,1,""],PyGenres:[25,4,1,""],PyManager:[15,3,1,""],EnumWithDoc:[15,3,1,""],RetAlloc:[15,3,1,""],configPath:[15,5,1,""],PyValueTypes:[25,4,1,""],PyNotifications:[25,4,1,""],LibZWaveException:[15,6,1,""],StdOutToLogger:[15,3,1,""],PyControllerState:[25,4,1,""],PyOptions:[15,3,1,""],PyControllerCommand:[25,4,1,""]},"openzwave.object.ZWaveObject":{use_cache:[19,1,1,""],is_outdated:[19,2,1,""],network:[19,1,1,""],update:[19,2,1,""],object_id:[19,1,1,""],last_update:[19,1,1,""],home_id:[19,1,1,""],kvals:[19,1,1,""],outdate:[19,2,1,""],cache_property:[19,2,1,""],outdated:[19,1,1,""]},"openzwave.command":{ZWaveNodeSwitch:[27,3,1,""],ZWaveNodeBasic:[27,3,1,""],ZWaveNodeSensor:[27,3,1,""]},"openzwave.scene":{ZWaveScene:[2,3,1,""]},"openzwave.scene.ZWaveScene":{activate:[2,2,1,""],add_value:[2,2,1,""],create:[2,2,1,""],label:[2,1,1,""],remove_value:[2,2,1,""],get_values_by_node:[2,2,1,""],to_dict:[2,2,1,""],scene_id:[2,1,1,""],set_value:[2,2,1,""],get_values:[2,2,1,""]},"openzwave.command.ZWaveNodeBasic":{can_wake_up:[27,2,1,""],get_power_level:[27,2,1,""],get_power_levels:[27,2,1,""],get_battery_level:[27,2,1,""],get_battery_levels:[27,2,1,""]},"libopenzwave.StdOutToLogger":{write:[15,2,1,""]},"openzwave.command.ZWaveNodeSensor":{get_sensor_value:[27,2,1,""],get_sensors:[27,2,1,""]},"openzwave.node":{ZWaveNode:[14,3,1,""]},"openzwave.group":{ZWaveGroup:[6,3,1,""]},"pyozwweb.app.listener.ListenerThread":{run:[8,2,1,""],leave_room_controller:[8,2,1,""],stop:[8,2,1,""],join_room_controller:[8,2,1,""],join_room_values:[8,2,1,""],join_room_node:[8,2,1,""],connect:[8,2,1,""],join_room_network:[8,2,1,""],leave_room_node:[8,2,1,""],leave_room_network:[8,2,1,""],leave_room_values:[8,2,1,""]},"libopenzwave.EnumWithDoc":{setDoc:[15,2,1,""]},"openzwave.object":{ZWaveCommandClassException:[19,6,1,""],ZWaveObject:[19,3,1,""],ZWaveCacheException:[19,6,1,""],ZWaveNodeInterface:[19,3,1,""],ZWaveTypeException:[19,6,1,""],ZWaveException:[19,6,1,""]},openzwave:{node:[14,0,0,"-"],group:[6,0,0,"-"],network:[7,0,0,"-"],object:[19,0,0,"-"],scene:[2,0,0,"-"],value:[26,0,0,"-"],controller:[22,0,0,"-"],command:[27,0,0,"-"],option:[16,0,0,"-"]},"pyozwweb.app":{listener:[8,0,0,"-"]},"openzwave.controller.ZWaveController":{begin_command_remove_failed_node:[22,2,1,""],is_bridge_controller:[22,1,1,""],begin_command_remove_device:[22,2,1,""],is_primary_controller:[22,1,1,""],library_user_path:[22,1,1,""],begin_command_has_node_failed:[22,2,1,""],begin_command_create_new_primary:[22,2,1,""],library_type_name:[22,1,1,""],library_config_path:[22,1,1,""],stats:[22,1,1,""],hard_reset:[22,2,1,""],begin_command_receive_configuration:[22,2,1,""],python_library_version:[22,1,1,""],capabilities:[22,1,1,""],begin_command_add_device:[22,2,1,""],begin_command_send_node_information:[22,2,1,""],begin_command_create_button:[22,2,1,""],library_version:[22,1,1,""],node:[22,1,1,""],begin_command_transfer_primary_role:[22,2,1,""],begin_command_delete_button:[22,2,1,""],begin_command_delete_all_return_routes:[22,2,1,""],begin_command_assign_return_route:[22,2,1,""],begin_command_request_network_update:[22,2,1,""],ozw_library_version:[22,1,1,""],cancel_command:[22,2,1,""],node_id:[22,1,1,""],is_static_update_controller:[22,1,1,""],device:[22,1,1,""],begin_command_request_node_neigbhor_update:[22,2,1,""],get_stats_label:[22,2,1,""],begin_command_replace_failed_node:[22,2,1,""],name:[22,1,1,""],zwcallback:[22,2,1,""],soft_reset:[22,2,1,""],library_description:[22,1,1,""],to_dict:[22,2,1,""],begin_command_replication_send:[22,2,1,""],send_queue_count:[22,1,1,""],options:[22,1,1,""]},"openzwave.option.ZWaveOption":{set_exclude:[16,2,1,""],set_associate:[16,2,1,""],set_interface:[16,2,1,""],config_path:[16,1,1,""],user_path:[16,1,1,""],set_console_output:[16,2,1,""],set_interval_between_polls:[16,2,1,""],set_dump_trigger_level:[16,2,1,""],set_include:[16,2,1,""],set_log_file:[16,2,1,""],set_poll_interval:[16,2,1,""],set_append_log_file:[16,2,1,""],set_queue_log_level:[16,2,1,""],set_save_log_level:[16,2,1,""],set_logging:[16,2,1,""],device:[16,1,1,""],set_notify_transactions:[16,2,1,""],set_driver_max_attempts:[16,2,1,""],set_save_configuration:[16,2,1,""],set_suppress_value_refresh:[16,2,1,""]},"libopenzwave.PyManager":{enablePoll:[15,2,1,""],getValueType:[15,2,1,""],isNodeAwake:[15,2,1,""],getValueAsInt:[15,2,1,""],getControllerPath:[15,2,1,""],getValueGenre:[15,2,1,""],removeDriver:[15,2,1,""],getSwitchPoint:[15,2,1,""],softResetController:[15,2,1,""],getNumScenes:[15,2,1,""],requestNodeState:[15,2,1,""],setPollInterval:[15,2,1,""],setNodeOff:[15,2,1,""],getNodeSecurity:[15,2,1,""],getValueUnits:[15,2,1,""],getValueMin:[15,2,1,""],disablePoll:[15,2,1,""],getNodeNeighbors:[15,2,1,""],setValueUnits:[15,2,1,""],setNodeLocation:[15,2,1,""],activateScene:[15,2,1,""],isPolled:[15,2,1,""],getValueAsShort:[15,2,1,""],isBridgeController:[15,2,1,""],getValueAsByte:[15,2,1,""],removeAllScenes:[15,2,1,""],isNodeRoutingDevice:[15,2,1,""],getChangeVerified:[15,2,1,""],addAssociation:[15,2,1,""],getGroupLabel:[15,2,1,""],refreshNodeInfo:[15,2,1,""],removeWatcher:[15,2,1,""],getNodeManufacturerId:[15,2,1,""],removeSceneValue:[15,2,1,""],isNodeFailed:[15,2,1,""],getNumGroups:[15,2,1,""],releaseButton:[15,2,1,""],getNodeSpecific:[15,2,1,""],requestAllConfigParams:[15,2,1,""],setValue:[15,2,1,""],clearSwitchPoints:[15,2,1,""],getValueListItems:[15,2,1,""],setNodeLevel:[15,2,1,""],getNodeProductType:[15,2,1,""],setNodeOn:[15,2,1,""],isStaticUpdateController:[15,2,1,""],isNodeBeamingDevice:[15,2,1,""],getValueMax:[15,2,1,""],getMaxAssociations:[15,2,1,""],resetController:[15,2,1,""],getNodeVersion:[15,2,1,""],isNodeInfoReceived:[15,2,1,""],setPollIntensity:[15,2,1,""],addSceneValue:[15,2,1,""],setNodeProductName:[15,2,1,""],requestConfigParam:[15,2,1,""],getPollIntensity:[15,2,1,""],healNetworkNode:[15,2,1,""],getNodeType:[15,2,1,""],getLibraryTypeName:[15,2,1,""],setSceneValue:[15,2,1,""],sceneExists:[15,2,1,""],getValueListSelectionNum:[15,2,1,""],cancelControllerCommand:[15,2,1,""],isNodeFrequentListeningDevice:[15,2,1,""],getSceneLabel:[15,2,1,""],getPythonLibraryVersion:[15,2,1,""],removeSwitchPoint:[15,2,1,""],getNodeStatistics:[15,2,1,""],COMMAND_CLASS_DESC:[15,1,1,""],getValueInstance:[15,2,1,""],isNodeListeningDevice:[15,2,1,""],getNodeGeneric:[15,2,1,""],getOzwLibraryVersionNumber:[15,2,1,""],getValueCommandClass:[15,2,1,""],getControllerInterfaceType:[15,2,1,""],getNodeManufacturerName:[15,2,1,""],create:[15,2,1,""],getPollInterval:[15,2,1,""],switchAllOn:[15,2,1,""],isValueSet:[15,2,1,""],getValueListSelectionStr:[15,2,1,""],setValueHelp:[15,2,1,""],isValuePolled:[15,2,1,""],beginControllerCommand:[15,2,1,""],getAssociations:[15,2,1,""],addDriver:[15,2,1,""],setNodeName:[15,2,1,""],removeAssociation:[15,2,1,""],getNodeClassInformation:[15,2,1,""],getNodeName:[15,2,1,""],getSUCNodeId:[15,2,1,""],getValueAsBool:[15,2,1,""],getValueFloatPrecision:[15,2,1,""],addWatcher:[15,2,1,""],getNumSwitchPoints:[15,2,1,""],switchAllOff:[15,2,1,""],getLibraryVersion:[15,2,1,""],writeConfig:[15,2,1,""],getValueIndex:[15,2,1,""],getValue:[15,2,1,""],getValueAsString:[15,2,1,""],getValueHelp:[15,2,1,""],setChangeVerified:[15,2,1,""],getNodeQueryStageCode:[15,2,1,""],isValueReadOnly:[15,2,1,""],getPythonLibraryVersionNumber:[15,2,1,""],requestNodeDynamic:[15,2,1,""],getSendQueueCount:[15,2,1,""],getValueAsFloat:[15,2,1,""],isPrimaryController:[15,2,1,""],getValueLabel:[15,2,1,""],logDriverStatistics:[15,2,1,""],removeScene:[15,2,1,""],setValueLabel:[15,2,1,""],getNodeQueryStage:[15,2,1,""],sceneGetValues:[15,2,1,""],setConfigParam:[15,2,1,""],getDriverStatistics:[15,2,1,""],getNodeBasic:[15,2,1,""],getNodeLocation:[15,2,1,""],setSceneLabel:[15,2,1,""],pressButton:[15,2,1,""],destroy:[15,2,1,""],getAllScenes:[15,2,1,""],isValueWriteOnly:[15,2,1,""],getNodeMaxBaudRate:[15,2,1,""],getOzwLibraryVersion:[15,2,1,""],getControllerNodeId:[15,2,1,""],isNodeSecurityDevice:[15,2,1,""],setNodeManufacturerName:[15,2,1,""],getNodeProductId:[15,2,1,""],testNetworkNode:[15,2,1,""],CALLBACK_DESC:[15,1,1,""],refreshValue:[15,2,1,""],testNetwork:[15,2,1,""],getNodeProductName:[15,2,1,""],createScene:[15,2,1,""],healNetwork:[15,2,1,""],setSwitchPoint:[15,2,1,""]},"openzwave.value":{ZWaveValue:[26,3,1,""]},"openzwave.value.ZWaveValue":{enable_poll:[26,2,1,""],help:[26,1,1,""],is_write_only:[26,1,1,""],id_on_network:[26,1,1,""],data_as_string:[26,1,1,""],index:[26,1,1,""],poll_intensity:[26,1,1,""],min:[26,1,1,""],label:[26,1,1,""],instance:[26,1,1,""],parent_id:[26,1,1,""],set_change_verified:[26,2,1,""],units:[26,1,1,""],type:[26,1,1,""],check_data:[26,2,1,""],value_id:[26,1,1,""],node:[26,1,1,""],max:[26,1,1,""],command_class:[26,1,1,""],precision:[26,1,1,""],is_read_only:[26,1,1,""],genre:[26,1,1,""],data:[26,1,1,""],disable_poll:[26,2,1,""],refresh:[26,2,1,""],data_items:[26,1,1,""],is_change_verified:[26,2,1,""],to_dict:[26,2,1,""],is_set:[26,1,1,""],is_polled:[26,1,1,""]},"openzwave.node.ZWaveNode":{neighbors:[14,1,1,""],get_values_by_command_classes:[14,2,1,""],isReady:[14,1,1,""],set_config_param:[14,2,1,""],change_value:[14,2,1,""],command_classes_as_string:[14,1,1,""],is_security_device:[14,1,1,""],command_classes:[14,1,1,""],is_beaming_device:[14,1,1,""],get_values_for_command_class:[14,2,1,""],num_groups:[14,1,1,""],isNodeAwake:[14,2,1,""],get_values:[14,2,1,""],manufacturer_name:[14,1,1,""],is_listening_device:[14,1,1,""],generic:[14,1,1,""],is_sleeping:[14,1,1,""],set_field:[14,2,1,""],capabilities:[14,1,1,""],isNodeFailed:[14,1,1,""],has_command_class:[14,2,1,""],version:[14,1,1,""],location:[14,1,1,""],basic:[14,1,1,""],test:[14,2,1,""],manufacturer_id:[14,1,1,""],getNodeQueryStage:[14,1,1,""],type:[14,1,1,""],product_name:[14,1,1,""],request_config_param:[14,2,1,""],add_value:[14,2,1,""],heal:[14,2,1,""],node_id:[14,1,1,""],groups:[14,1,1,""],request_all_config_params:[14,2,1,""],is_routing_device:[14,1,1,""],product_id:[14,1,1,""],is_frequent_listening_device:[14,1,1,""],isNodeInfoReceived:[14,1,1,""],product_type:[14,1,1,""],name:[14,1,1,""],is_locked:[14,1,1,""],refresh_value:[14,2,1,""],refresh_info:[14,2,1,""],get_command_class_as_string:[14,2,1,""],specific:[14,1,1,""],remove_value:[14,2,1,""],max_baud_rate:[14,1,1,""],to_dict:[14,2,1,""],security:[14,1,1,""],get_command_class_genres:[14,2,1,""]},"openzwave.network":{ZWaveNetwork:[7,3,1,""]},"pyozwweb.app.listener":{ListenerThread:[8,3,1,""]},"openzwave.option":{ZWaveOption:[16,3,1,""]}},titleterms:{control:22,repositroi:20,api_demo:23,code:11,from:[10,28,11,20],process:[28,20,13],modul:15,sudo:9,startup:13,scene:2,indic:5,pyozwman:[3,23],"static":9,tabl:5,need:[28,20],instal:[28,20,4,17],dynam:9,out:10,virtualenv:9,alpha3:10,some:11,group:6,welcom:5,lib:9,how:9,licens:0,support:10,archiv:28,pyozwweb:[8,23],launch:8,start:11,window:4,build:[28,20],memory_us:23,zwave:11,hello_world:11,document:[14,5,6,7,25,19,2,26,8,22,3,27,9,12,16],updat:20,node:14,test_lib:23,sourc:[20,8],run:20,option:16,get:[28,20],python:[5,17,20,9,28,4,10,11,23],share:9,tool:[28,20],notif:13,migrat:10,what:8,diagram:13,api_snif:23,test:[20,9],theori:11,repositori:20,maco:17,develop:9,data:25,valu:26,network:7,about:[20,9],full:13,developp:9,signal:11,changelog:18,object:19,inform:9,libopenzwav:[15,9],api:12,command:27,openzwav:[5,17,20,9,28,4,10,11,23],listen:11,python3:9,hello:11,depend:20}}) \ No newline at end of file +Search.setIndex({envversion:42,terms:{zwavecontrol:[11,22,7],four:15,prefix:15,sleep:[14,11,25,7,15],ret:27,is_change_verifi:26,whose:15,sorri:10,"0x26":27,"0x27":27,"0x25":27,write_config:7,under:[14,15,6,7,0,19,2,26,9,22,27,25,16],command_class_climate_control_schedul:15,merchant:[14,15,6,7,0,19,2,26,22,27,25,16],digit:15,avril:9,everi:[15,7,18,26,3,27,16],controllercommand_requestnodeneighborupd:[14,15,22,7],nodefail:25,"_socketio":8,upload:15,ozw_library_vers:22,highpow:15,second:[15,22,7,26,16],command_class_alarm:15,even:[14,15,6,7,0,19,2,26,22,27,25,16],command_class_door_lock:15,"new":[5,15,16,18,2,22,27,10,25,7],ever:[15,26],told:[15,22],widget:3,never:[15,16],drwxrwsr:9,here:[28,11,15,16,9],getvaluefromtyp:7,path:[15,22,16,9],controllercommand_removedevic:[15,22],zwavescen:[11,2],library_descript:22,cdef:15,forum:10,anymor:[10,20,7,18],precis:[15,26],studi:27,basic_set:7,portabl:15,volunt:[4,17],pollingen:[25,7],unix:[14,15,6,16,19,2,26,22,27,25,7],controllercommand_deletebutton:[15,22],get_power_level:27,total:9,command_class_scene_controller_conf:15,unit:[15,27,7,26],describ:[14,15,7,26],would:[14,15,27],call:[14,15,7,20,9,27,11],recommend:[15,7],type:[14,15,19,6,7,1,2,21,22,3,27,26,16],tell:[15,22],notif:[25,23],notic:[15,22],warn:25,hold:[15,6,7],manufacturer_id:14,must:[15,7,19,20,9,28,22,27,10,11],join:8,room:8,setup:18,work:[25,22,20,9],configpath:15,kwarg:25,root:9,signal_node_nam:7,getvaluecommandclass:15,give:15,controllercommand:[14,15,7],want:[27,20,9],unsign:15,recov:25,turn:[15,27,7],classifi:[15,26],verifi:[15,26],config:[15,16,18,8,26,9,22,3,11,25],updat:[18,9],actdiag:9,after:[15,7,18,20,9,11],pyvaluetyp:[14,27,25,7],controllercommand_requestnodeneighbor:22,befor:[15,16,9,27,10,11],averag:15,fedora:20,"0x014d0ef5":26,zwavevalu:[11,2,26,7],attempt:[15,7,16],command_class_multi_cmd:15,exclud:16,getcontrollerinterfacetyp:15,sinopsi:[14,15,6,16,19,2,26,22,27,25,7],lambda:[19,26],get_sensor_valu:27,origin:15,feedback:[15,25],softwar:[14,15,6,7,0,19,2,26,22,27,25,16],over:[14,15],becaus:[10,15,7],manufactu:15,callback_desc:15,broadcastreadcnt:15,vari:7,streamlin:25,getinst:7,fit:[14,15,6,7,0,19,2,26,22,27,25,16],fix:[14,15,18],better:15,change_valu:14,getdriverstatist:15,"_app":8,them:[15,7,18,9,22,3,27,28,11],woken:15,thei:[15,7,20,9,22,27,11],getozwlibraryvers:15,safe:7,use_cach:19,"break":11,command_class_simple_av_control:15,"0x31":27,"0x30":27,"0x32":27,isnoderoutingdevic:15,setvalu:15,set_driver_max_attempt:16,signal_driver_remov:7,remove_associ:6,s_cancnt:22,set_notify_transact:16,state_reset:7,getvalu:15,timeout:[15,22],each:[15,25,7],debug:[15,18,9,10,11,25],mean:[11,15,9],state_start:7,activatescen:15,is_outd:19,group:[10,25,21,9],get_values_by_nod:2,set_log_fil:[11,16],gassoci:3,extract:28,louie_value_upd:11,network:[5,15,6,18,21,22,23,10,11,25],goe:15,content:[10,5,12],rewrit:18,s_writecnt:22,signal_network_reset:[22,7],get_battery_level:27,free:[14,15,6,7,0,19,2,26,22,27,25,16],nodedata:15,ptyhon:18,zwavenodesensor:27,virtual_env:9,resetcontrol:15,commandclass:[14,15,19,7,16],ist:18,filter:[14,15,27,26],requestnodest:15,regress:20,louie:[11,3,22,7,23],controllercommand_createnewprimari:[15,22],rang:[11,15],alreadi:[28,20,18],wrapper:[10,27],signal_value_refresh:7,primari:[15,22],allnodesqueri:[15,25,7],sourc:[28,18,9],command_class_av_content_search_md:15,enumwithdoc:15,command_class_chimney_fan:15,sometim:20,scene1:26,getvalueasfloat_:15,master:[20,9],too:[15,22,9],zwave:[10,22,23,9],data_item:26,getnodemanufacturernam:15,noderemov:[25,7],consol:16,cancel_command:22,setuptool:[10,18],somewhat:7,nakcnt:15,driverawak:7,command_class_av_renderer_statu:15,signal_node_queries_complet:7,target:20,keyword:25,provid:[5,15,25,27],set_includ:16,tree:[10,18],zero:15,project:[14,15,6,7,0,19,2,26,22,27,25,16],averageresponsertt:15,minut:[11,15],ram:16,mind:20,raw:25,seem:18,python_exec:9,especi:[14,15],transmit:26,get_switch_st:27,getvalueasint:15,simplifi:15,sceneev:[25,7],usernam:9,object:[5,15,6,7,21,10,11,25],nodeid:[15,11,7,26],regular:[15,7],begin_command_assign_return_rout:22,command_class_zip_adv_cli:15,don:[15,19,26,9,27,10],signal_network_stop:7,doc:[25,18,20,9],doe:[15,7,18,26,22,10],bracket:7,networkfail:7,came:28,pfncontrollercallback_t:15,keyval:19,signal_button_off:7,get_scen:7,set_queue_log_level:16,identifi:[15,6,7,26,23,16],damen:0,zwavenodeinterfac:19,switch_al:[27,7],"_highpow":[15,22],"_groupidx":[14,15],configur:[14,15,7,26,9,22,27,16],busi:15,folder:15,command_class_meter_tbl_push:15,driverreadi:[15,25,7],softresetcontrol:15,stop:[15,7,18,8,22,11],setswitchpoint:15,report:[14,15,7,1,21,9,26,11,16],"public":[14,15,6,7,0,19,2,26,22,27,25,16],reload:18,bad:[15,22],releasebutton:15,respond:[15,22],getnodesecur:15,begin_command_transfer_primary_rol:22,id_on_network:[7,26],num:15,result:[14,15,1,7,21],respons:[14,15,7],command_class_mtp_window_cov:15,best:28,awar:25,ackcnt:15,valuetype_button:15,yet:[14,15,22],simplest:28,data_as_str:26,approach:15,attribut:[15,7],removescen:15,extens:3,setnodeon:15,groupidx:15,protect:15,easi:10,howev:15,enable_pol:26,getnodeproducttyp:15,logic:7,seri:15,com:[14,15,6,7,0,19,20,2,26,9,22,27,10,25,16],applianc:27,kwh:27,replacefailednod:[15,25,22],begin_command_has_node_fail:22,assum:[15,6],duplic:15,recur:15,set_config_param:14,getnodeproductid:15,setscenelabel:15,trigger:[14,15,7],interest:15,basic:[14,27,15,25,26],command_class_user_cod:15,nodenam:[15,25,7],driverreset:[25,7],retalloc:15,ani:[14,15,6,7,0,19,2,26,22,27,25,16],"catch":11,signal_driver_readi:7,gnu:[14,15,6,7,0,19,2,26,22,27,25,16],properti:[14,19,27],getallscen:15,command_class_displai:15,aid:15,join_room_valu:8,rediscov:[14,15,7],optionnali:14,conf:8,controllerstate_complet:[15,22],perform:[14,15,7],make:[15,20,9,28,22,10],driverfail:[25,7],complex:15,signal_scene_ev:7,complet:[14,15,6,7,22,25,16],rais:16,tune:8,max_associ:6,sentfail:15,deleteallreturnrout:25,thr:22,changer:19,client:[11,22,15],thi:[14,15,6,7,0,18,19,20,8,26,2,22,3,27,28,11,9,25,16],get_switch_all_item:27,everyth:[25,7],unchang:16,ttyusb0:[15,8,18],just:[14,15,7],receivedcnt:15,command_class_silence_alarm:15,human:[14,15],bit:15,previous:[15,20],nondeliveri:15,replicationsend:25,expos:15,had:[14,15],command_class_protect:15,els:11,save:[15,16],applic:[14,15,7,26,23,25],mayb:19,commmand:15,command_class:[14,27,26],background:15,valueid:[14,15,27,7],promari:15,isnodesecuritydevic:15,measur:[15,26],specif:[14,15,19],deprec:[14,7],manual:[14,11,15,24],louie_network_fail:11,enablepol:15,unstabl:20,www:[14,15,6,7,0,19,2,26,22,27,25,16],right:[28,8,9],old:[10,15,20,22,18],interv:[15,22,7,16],intern:25,sure:[28,19,9],heritag:27,successfulli:[15,22,7],txt:9,querystag:[14,15],command_class_remote_associ:15,getlibraryvers:15,plug:27,s_nakcnt:22,clearswitchpoint:15,soft_reset:22,set_save_configur:16,allnodesqueriedsomedead:25,command_class_thermostat_operating_st:15,joomla:9,sendnodeinform:25,commit:[20,9],thermostat:19,zwaveobject:[19,27],command_class_switch_toggle_multilevel:15,"float":[15,22,26],signal_button_on:7,down:3,create_scen:7,wan:14,accordingli:7,git:[10,28,20,9],wai:[14,15,19,9,27,28,11],support:9,networkstart:7,avail:[15,11,3,7],wordpress:15,setscenevalu:15,s_sofcnt:22,forc:[14,15],drwxr:9,taken:15,zwaveopt:[11,22,16],"true":[14,15,16,19,2,26,22,27,11,7],reset:[27,15,3,22,7],setdoc:15,maximum:[14,15,7,26],until:[15,7],pyozwman:18,classid:14,featur:[10,15],isnodeinforeceiv:[14,15],classic:27,getnodequerystagecod:15,zwavetypeexcept:19,exist:[15,7,19,22,25,16],check:[14,15,7,19,26,9,22,27],readonli:[14,27,7],api_sniff:23,state_stop:7,tip:9,signal_network_readi:[11,7],bibi21000:[14,15,6,7,0,19,20,2,26,9,22,27,28,25,16],role:[15,22],test:18,presum:14,"72057594109853720l":27,node:[5,15,6,7,18,20,21,22,27,23,11],relat:7,intend:7,command_class_network_stat:15,command_class_composit:15,intens:[15,26],consid:[27,7],occasion:[15,26],outdat:19,bitbucket:[10,18],receiv:[14,15,6,7,0,19,2,26,22,27,11,25,16],sendig:22,longer:15,command_class_screen_attribut:15,inforamt:[14,6,7,2,26,22],ignor:[27,16],time:[15,7,18,19,26,9,22,11,16],push:9,sniffer:11,backward:14,particular:[14,15,6,7,0,19,2,26,22,27,25,16],serialport:15,although:[15,7,26],signific:7,millisecond:[15,7,16],flask:[10,23,18],decim:[27,25],readabl:[14,15],pyozwweb:18,command_class_scene_activ:15,scenes_count:7,command_class_thermostat_fan_mod:15,valuerefresh:[25,7],begin_command_receive_configur:22,string:[14,15,7,26,9,27,25],set_console_output:[11,16],signal_driver_:7,zwcfg:7,word:11,brows:14,get_dimm:27,dim:[27,20],uwird:3,level:[5,15,16,18,19,26,22,27,25],signal_create_button:7,iter:25,item:[27,15,25],getsucnodeid:15,round:15,dir:20,max_baud_r:14,loglvel:16,getnumscen:15,isnodelisteningdevic:15,set_dump_trigger_level:16,sign:15,zwcfg_:15,port:[15,7,16,8],appear:[10,15,26],current:[15,27,26],getnodemaxbaudr:15,switchalloff:15,is_read_onli:26,gener:[14,15,6,7,0,19,2,26,9,22,27,11,25,16],learn:[15,22],getsendqueuecount:15,valueremov:[25,7],modif:11,along:[14,15,6,7,0,19,2,26,22,27,25,16],zwavecacheexcept:19,wait:[14,15,16,22,11,25],checksum:[15,22],command_class_sensor_binari:[15,27],queue:[15,22],environn:9,extra:[14,6,7,2,26,22],activ:[15,11,27,2,16],modul:[10,27],essentialnodequeriescomplet:[25,7],zwavegroup:6,instal:[18,23,9],command_class_batteri:[15,27],command_class_thermostat_setback:15,memori:[15,23],visit:3,live:7,handler:[15,22,7],utpdat:9,command_class_energy_product:15,command_class_associ:15,claus:11,pylint:[1,21,9],enhanc:15,signal_node_readi:7,signal_node_ad:7,lastrequestrtt:15,setvaluehelp:15,"72057594118242369l":27,maarten:0,uniqu:[15,26],can:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,10,11,9,25,16],memoryleaks3:15,purpos:[14,15,6,7,0,19,2,26,22,27,25,16],controllercommand_adddevic:[15,22],switchallon:15,nodereadi:7,abort:[15,22],add_associ:6,alwai:[14,15,25,7],multipl:[15,27,26],getoptionasstr:15,group_index:6,write:[11,27,15,26,9],setnodenam:15,"0x80":27,map:[5,15,18,27,10,25],product:[14,15,7],command_class_application_statu:15,max:[27,16,26],clone:[20,9],id_separ:7,upnoderout:[14,15,7],"_getozwlibraryversionnumb":15,mai:[15,7,26,9],data:[22,1,27,21],setnodemanufacturernam:15,beam:[14,15],getvaluemax:15,getvalueasstr:15,secur:[14,15,22,7],favorit:8,requestnodeneighborupd:25,"switch":[15,7,18,19,20,3,27,23,11],still:15,pointer:15,interspers:[15,7],disconnect:22,sof:[15,22],platform:[14,15,6,16,19,2,26,22,27,25,7],main:[11,15],non:20,receiveconfigur:25,broadcastwritecnt:15,nov:9,now:[15,7,18,19,20,9,28,22,10,11],discuss:10,getgrouplabel:15,term:[14,15,6,7,0,19,2,26,22,27,25,16],louie_network_start:11,name:[14,15,7,20,22,3,27,10,11,25],drop:[15,22],revert:[15,6],getassoci:[14,15],separ:[15,7],getvalueasbool:15,compil:[10,28,20],replac:[15,22,7,18],individu:7,getscenelabel:15,continu:11,redistribut:[14,15,6,7,0,19,2,26,22,27,25,16],begin_command_request_node_neigbhor_upd:22,happen:27,is_security_devic:14,alpha2:18,alpha3:18,shown:25,alpha1:18,removescenevalu:15,alpha4:18,sensor:[11,3,27,7,23],correct:[15,26],getchangeverifi:15,get_value_from_id_on_network:7,leave_room_nod:8,loglevel_debug:16,org:[14,15,6,7,0,18,19,2,26,9,22,27,10,25,16],"byte":[14,15,7,26,22,27,25],care:27,signal_all_nodes_queri:7,frequenc:15,transferprimaryrol:25,motion:7,thing:[11,27],place:[15,9],frequent:[14,15],first:[14,11,27,7,15],oper:[14,15,22,7],hasnodefail:25,directli:[27,15,6,7,9],onc:[15,7],arrai:15,pynotif:25,command_class_configur:15,"long":7,open:[10,15,9],predefin:27,size:[14,15],getvalueasfloat:15,given:[15,7],convent:15,streamdetail:25,getcontrollerpath:15,has_command_class:14,frame:[15,22,16],to_node_id:22,hub:9,cope:[15,7],copi:[14,15,6,7,0,19,20,2,26,9,22,27,25,16],specifi:[15,22,7,16],broadcast:[15,7],github:[14,15,6,7,0,19,20,2,26,9,22,27,10,25,16],an158:27,"0x73":27,than:[15,7,26,16],sentt:15,param2:27,param1:27,were:[14,11,22,15],set_append_log_fil:[11,16],browser:8,sai:[15,19,27,7],controllercommand_sendnodeinform:15,argument:[11,25],deliv:[15,22],is_bridge_control:22,squar:7,"_network":22,destroi:15,object_id:[19,2],note:[10,26,24],take:[15,7],pycontrollerst:25,heal:[14,15,7,18],channel:11,receiveddup:15,normal:[14,15,25,22,18],buffer:25,pair:25,command_class_hail:15,getnodestatist:15,later:[14,15,6,7,0,19,2,26,22,27,11,25,16],order:7,event:[10,11,7,15,8],writeconfig:15,bright:27,line:[10,15,27,9],xml:[15,7,16],is_lock:14,onli:[14,15,7,26,9,22,27,25,16],explicitli:15,libzwaveexcept:15,transact:16,naviso:15,written:[15,26],dict:[14,15,6,7,18,2,26,22,27,25],isnodefrequentlisteningdevic:15,command_class_meter_tbl_monitor:15,offici:20,state_fail:7,variou:[14,15],get:9,getid:7,secondari:[15,22],repo:[20,24],networkstop:7,cannot:[15,26],command_class_time_paramet:15,refreshnodeinfo:15,requir:[15,22],getozwlibraryversionnumb:15,createopt:15,leave_room_valu:8,to_dict:[14,6,7,2,26,22],where:[11,27],command_class_meter_puls:15,com3:15,lastreceivedmessag:15,asleep:[14,15,6],concern:[15,7],getnodeloc:15,disablepol:15,label:[14,15,6,7,2,26,22,27],behind:15,between:[14,15,7,3,27,16],dockerfil:[18,9],"import":[11,7,9],paramet:[14,15,6,7,18,19,2,26,22,3,27,11,16],getindex:7,request_all_config_param:14,parent:26,screen:[11,3],nodeev:[25,7],removeswitchpoint:15,compatibilti:9,readabort:15,tutori:[11,9],hard_reset:22,mani:[10,15,27],scene_exist:7,cancelcontrollercommand:15,period:[15,7],signal_valu:11,signal_nod:11,do_poll_statist:22,poll:[15,7,18,26,22,16],command_class_screen_md:15,bintervalbetweenpol:[15,7],rebuild:[15,22],signal_value_ad:7,getswitchpoint:15,repons:15,pyoption:[15,18],zwavecommandclassexcept:19,wake:[27,7],addassoci:[14,15],getvaluegenr:15,those:15,"case":[15,6,7,18,26,9,27,11],is_set:26,stdout:[11,15],begin_command_create_new_primari:22,eras:[15,22],"__init__":18,join_room_network:8,author:0,same:[14,15,7,26,27,11],removeallscen:15,binari:9,html:9,eventu:[14,15],finish:[15,22,18],"72057594118242352l":27,driver:[15,6,7,22,11,16],lastresponsertt:15,capabl:[14,15,22,7],command_class_languag:15,extern:7,appropri:[15,7],without:[14,15,6,7,0,19,2,26,9,22,27,25,16],join_room_control:8,setnodeloc:15,execut:[7,16,9],when:[14,15,7,18,19,20,26,9,22,27,10,11,16],loglevel_detail:16,rest:27,bitmap:15,venv:9,getconfigpath:15,targetnodeid:15,struct:15,except:[5,15,19,12,21],littl:7,command_class_geographic_loc:15,blog:15,"255l":27,homepro:27,is_primary_control:22,controllerstate_fail:[15,22],read:[15,22,7,26],addscenevalu:15,pollinterv:[15,7,16],dimmer:[18,19,3,27,23,11],temperatur:[15,27],traffic:[15,7],dispatch:[11,22,7],louie_network_readi:11,integ:15,server:8,command_class_proprietari:15,set_save_log_level:[11,16],either:[14,15,6,7,0,19,2,26,9,22,27,25,16],python_library_vers:22,manag:[26,15,6,7,19,8,21,9,22,3,27,23,10,11,16],createscen:15,autobuild:9,cancel:[15,25,22],get_values_by_command_class:14,is_write_onli:26,command_class_powerlevel:[15,27],confirm:[14,15],valuetype_schedul:15,definit:[5,12],protocol:[15,7],exit:15,command_class_grouping_nam:15,refer:[15,7],command_class_meter_tbl_config:15,isvaluewriteonli:15,power:[15,27,22],command_class_met:[15,27],fulli:[15,7],src:[10,18,8,9],patent:[15,7],central:7,ack:[15,22],degre:15,neighbor:[14,15,22,7],get_switches_al:27,effici:15,addoptionstr:15,urwid:3,your:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,23,10,11,9,25,16],zwaveexcept:19,log:[15,7,18,8,9,24,11,25,16],hex:15,overwrit:[15,16],start:[27,22,25,23,18],interfac:[15,19,27],low:[5,15,19,26,22,25],lot:22,reaload:18,set_suppress_value_refresh:16,inprogress:25,command_class_wake_up:[15,27],openzav:9,command_class_ind:15,set_switch:27,power_level:27,conclus:27,pull:10,zwavenodeswitch:27,begin_command_remove_devic:22,possibl:[27,15,6,7,26],"default":[14,15,7,26,22,16],assignreturnrout:25,set_exclud:16,connect:[11,23,7,8],controllercommand_createbutton:[15,22],creat:[15,7,19,20,2,26,9,22,28,11,25],certain:7,watcher:[15,7],file:[14,15,6,7,0,18,19,2,26,9,22,27,28,25,16],fill:15,incorrect:26,again:[7,18],googl:10,allawakenodesqueri:15,poll_stat:22,field:[14,2],valid:[14,15,26],zwavemanag:7,writabl:14,you:[14,15,6,7,0,18,19,20,8,26,2,28,22,3,27,23,10,11,9,25,16],createnewprimari:25,get_values_for_command_class:14,request_config_param:14,get_dimmer_level:27,pygenr:[14,25,7],registri:9,sequenc:7,getnodegener:15,getpythonlibraryvers:15,removecontrol:[15,22],badchecksum:15,directori:[15,20,8,9,28,22,10,11],descript:[15,22,7],potenti:[15,7],cpp:22,represent:[14,6,7,2,26,22],all:[14,15,6,7,2,26,9,22,3,27,23,28,11,25],dist:[10,9],pth:10,get_sensor:27,follow:[7,20,9,3,27,28],disk:16,ozw_log:11,kval:[18,2,19,7],uint8_t:15,init:15,program:[27,7,9],"72057594101481476l":27,controllercommand_deleteallreturnrout:[15,22],fals:[14,15,16,2,26,22,27,11,7],controllercommand_addcontrol:22,mechan:[11,19,27],failur:15,veri:[25,7],manufacturer_nam:14,list:[14,15,26,28,22,27,23,10,25],helloworld:21,lisa:9,awakenodesqueri:[25,7],set_associ:16,valuechang:[14,15,25,7],delimit:15,isvaluereadonli:[15,7],rate:[14,15,7],pass:[11,15,9],further:11,what:[15,19,27,22],suc:[15,22],clock:15,abl:[15,25],delet:[15,3,22,7],version:[14,15,6,7,0,19,2,26,9,22,27,10,25,16],"_append":15,begin_command_create_button:22,method:[14,15,7,19,8,26,22,3,27],full:[10,20,18],command_class_thermostat_setpoint:15,get_poll_interv:7,behaviour:[14,15],shouldn:7,modifi:[14,15,6,7,0,19,2,26,22,27,11,25,16],valu:[14,5,15,7,18,25,19,8,21,2,22,3,27,23,11,12,16],signal_network_start:[11,7],sender:11,prior:7,base:[15,22],state_readi:[11,7],nosetest:[18,9],action:[15,22,7],via:[14,15,7,9,10,25],setpollintens:15,vim:8,sucee:15,filenam:15,switchal:[15,7],getnodeclassinform:15,logdriverstatist:15,s_badchecksum:22,select:26,hexadecim:[14,15],regist:27,two:[15,25],coverag:[1,21,9],set_poll_interv:[7,16],minor:[10,25],more:[14,15,6,7,0,18,19,2,26,22,27,11,25,16],hundr:7,getvaluefloatprecis:15,flag:26,command_class_desc:[15,7],stick:9,command_class_zip_adv_servic:15,known:[14,15,27,7],set_valu:2,cach:19,none:[15,6,16,18,19,2,26,22,27,11,25,7],getcontrollernodeid:15,hour:15,socketio:8,dep:[28,20],dev:[15,18,8,22,3,23],values_to_dict:14,def:[11,18],install_repo:10,accept:[15,22],minimum:[15,26],num_group:14,huge:25,cours:[7,9],nico0084:15,divid:[15,7],rather:[15,26],anoth:[15,27,22,9],manufacturer_specif:15,adddriv:15,simpl:11,badrout:15,get_command_class_as_str:14,command_class_no_oper:15,develop:18,setconfigparam:15,associ:[14,15,6,7,21,27,16],"short":25,product_typ:14,caus:[14,15],callback:[14,15,6,7,22,11],scenegetvalu:15,egg:[20,9],s_ackcnt:22,help:[15,3,27,26,9],isbridgecontrol:15,setback:15,held:[14,15,6,26],through:[15,6,26],s_readabort:22,get_valu:[14,2,7],get_command_class_genr:14,unwork:18,handheld:[15,22],late:[15,22],segfault:10,isreadi:14,addoptionbool:15,might:[15,20,7],signal_node_ev:7,zwavenod:[14,11,27,22],remove_valu:[14,2],good:[7,20,8,26,3,27],"return":[14,15,6,16,19,2,26,22,27,7],timestamp:25,framework:23,sleeping_nodes_count:7,productnam:15,sentcnt:15,controllercommand_receiveconfigur:[15,22],refresh:[14,15,19,16,26],easili:16,found:[14,11,7,15,9],send_queue_count:22,pyloglevel:[25,18],hard:[15,3,22],nodes_count:[11,7],expect:15,slave:15,energi:[15,27],todo:[14,16],controllerstate_wait:[15,22],ozwsh:[11,3,18],"72057594109853736l":27,command_class_zip_serv:15,unknown:15,publish:[14,15,6,7,0,19,2,26,22,27,25,16],command_class_switch_toggle_binari:15,getnodevers:15,print:11,check_data:26,reason:[15,22],healnetwork:15,ask:[10,7,9],command_class_av_content_directory_md:15,product_id:14,thread:[15,22],launch:[10,18,20,9],script:[28,11,18],value_id:[14,27,2,26,7],assign:[15,22,7],logfil:16,singleton:[15,9],command_class_thermostat_mod:15,notifi:[11,15],"_param":[14,15],number:[14,15,6,7,22,16],placehold:7,install_arch:10,done:[15,17,20,3,27,4,11],"72057594093060096l":27,miss:[15,7],gpl:[14,15,6,7,0,19,2,26,22,27,25,16],differ:[15,22,18],s_retri:22,least:[7,9],getvaluelistselectionstr:15,setchangeverifi:15,store:[15,7,18,19,22,16],option:[14,5,15,6,7,0,18,25,19,21,28,22,27,10,11,12],controllercommand_replacefailednod:[15,22],command_class_garage_door:15,getter:27,reinstal:9,kind:27,whenev:[15,26],remot:8,remov:[15,6,7,18,20,2,28,22,3,10,11,16],jqueri:[10,23,8,18],bridg:[15,22],controllercommand_removecontrol:22,str:[14,15,16,2,26,22,27,7],set_command_class_0xyz:27,comput:[20,9],add_valu:[14,2],sensormultilevel:[15,26],"72057594093273218l":27,packag:[10,28,20,9],homeid:[15,11,7,26],"null":[15,7],from_node_id:22,writeonli:[14,27],built:28,lib:18,trip:15,self:[14,7,18,22,27,11],msgcomplet:7,also:[14,15,6,7,20,2,9,22,27,10,11,8],getpollinterv:15,s_readcnt:22,distribut:[14,15,6,7,0,19,20,2,26,22,27,28,25,16],index:[14,5,15,6,7,26],isprimarycontrol:15,previou:[15,20],reach:7,most:[15,7],plai:20,node_id:[14,6,7,2,26,22],isvaluepol:15,begin_command_remove_failed_nod:22,clear:[15,7],driverremov:[25,7],part:[14,15,6,7,0,19,2,26,22,27,25,16],clean:[28,15,20],begin_command_replication_send:22,m_pollinterv:[15,7],rtt:15,session:[15,16,9],fine:[25,8],find:[15,27,7],copyright:24,command_class_switch_multilevel:[15,27],solut:8,queu:25,pythonfunc:15,setnodeoff:15,valuead:[25,7],hid:[15,27,7,16],fastest:28,getlibrarytypenam:15,sill:9,him:11,join_room_nod:8,user_path:[11,16,18],is_pol:[27,26],is_sleep:14,common:[5,12,7,25,9],set:[14,15,6,7,19,2,26,22,3,27,11,16],dump:16,see:[14,15,6,7,0,19,2,26,22,27,10,11,25,16],arg:[15,11,22,7],scene_id:[2,7],close:[15,22,16],command_class_thermostat_h:15,someth:[15,25,9],won:20,target_node_id:6,command_class_association_command_configur:15,signal_essential_node_queries_complet:7,altern:7,handle_command_class:27,unsolicit:[15,22],setnodelevel:15,signal_driver_fail:7,library_config_path:22,classnam:15,popul:[15,11,7],both:[15,6],last:[15,7,19,20,9,27],"72057594109853697l":27,command_class_av_tagging_md:15,context:15,load:11,readcnt:15,simpli:[11,15,26],point:[27,15,22,7],instanti:15,schedul:[15,25],consumm:27,removedriv:15,header:20,param:[14,15],shutdown:15,linux:[28,15],batteri:27,setvaluelabel:15,command_class_sensor_configur:15,buttonon:[25,7],devic:[14,15,6,7,18,19,8,26,22,3,23,11,16],due:[15,22,6,7],empti:[15,25,7],sinc:[15,22],begin_command_replace_failed_nod:22,fire:[22,7],getnodemanufacturerid:15,destroyopt:15,actdiag_sphinxhelp:9,refresh_valu:14,signal_node_remov:7,look:[15,17,20,9,28,4,10,11],oofcnt:15,batch:7,getpythonlibraryversionnumb:15,"while":[27,15,22,7],abov:[7,16],removefailednod:25,xvzf:28,averagerequestrtt:15,readi:[14,15,7,20,22,28,11],readm:[24,9],jpg:15,itself:7,sceneid:15,receivedunsolicit:15,nodead:[25,7],signal_error:7,shorter:[15,7],begin_command_send_node_inform:22,command_class_kick:15,signal_node_protocol_info:7,controllercommand_requestnetworkupd:[15,22],command_class_door_lock_log:15,setdoctyp:15,get_switch:27,alert:25,user:[14,15,7,18,26,9,22,27,25],typic:7,command_class_sensor_multilevel:[15,27],equival:15,toadddriv:15,older:15,entri:27,getvaluehelp:15,docker:[18,9],controllerstate_inprogress:[15,22],getvalueasshort:15,pollingdis:[25,7],build:9,format:26,"_getcontrollerinterfacetyp":15,biz:28,"72057594093273090l":27,nodequeriescomplet:[25,7],signal:[22,23],signal_polling_dis:7,command_class_vers:15,writecnt:15,"boolean":15,enumwithdoctyp:15,signal_awake_nodes_queri:7,jsonifi:7,signal_delete_button:7,some:[10,18,20,9],back:[11,25],command_class_0x80:27,ackwait:15,netbusi:15,per:[15,7],prop:19,retri:15,commandclassid:[15,26],nose:[1,21],run:[18,9],raspberri:28,step:27,command_class_multi_channel_v2:15,idx:15,class_id:[14,27],"72057594101662232l":27,pymanag:[15,7],primarili:7,within:[14,15,16,2,25,7],poll_intens:26,betwork:7,getvaluelabel:15,command_class_zip_cli:15,chang:[14,15,2,7,18,8,26,9,22,3,24,28,11,16],inclus:[15,22],submit:[10,9],includ:[27,18,25,7,9],suit:10,frost:15,getnumgroup:[14,15],link:9,newer:15,buttonoff:[25,7],info:[15,25,9],concaten:15,consist:15,lifespan:15,gethomeid:7,s_controllerreadcnt:22,command_class_manufacturer_proprietari:15,repres:[14,15,16,19,2,26,27,7],"char":7,config_path:[11,16,18],nak:[15,22],invalid:25,command_class_remote_association_activ:15,routedbusi:15,setvalueunit:15,sphinxdoc:15,high_pow:22,getmaxassoci:15,getnodetyp:15,getvaluemin:15,louie_node_upd:11,command_class_switch_binari:[15,27],data_str:27,code:[10,22,18,9],command_class_secur:15,queri:[15,11,7],library_user_path:22,last_upd:19,cython:[10,28,18,9],friendli:[15,27],send:[14,15,7,22,27,11],cmd_line:[11,16,18],autostart:[11,7],sens:7,fatal:25,healnetworknod:15,sent:[14,15,6,7,22,3,25,16],pycontrollercommand:25,objet:7,wave:[14,15,6,7,2,22],command_classes_as_str:14,set_dimm:27,tri:15,button:[27,15,25,22],signal_node_new:7,setnodeproductnam:15,"try":[23,16,9],signal_polling_en:7,begincontrollercommand:15,pleas:[10,18,9],impli:[14,15,6,7,0,19,2,26,22,27,25,16],smaller:[15,7],soltion:28,scenes_to_dict:7,command_class_clock:15,download:[28,20],zwavenetwork:[11,19,7],append:[15,16],compat:14,signal_network_awak:7,access:[15,27,16],testnetworknod:15,command_class_tim:15,state_str:7,isnodeawak:[14,15],becom:[15,22],can_wake_up:27,accessor:26,zwcallback:[22,7],larger:[15,7],genr:[14,15,27,7,26],implement:[14,15,18,19,22,27,10,11],command_class_scene_actuator_conf:15,s_oofcnt:22,getvaluelistselectionnum:15,appli:9,app:[8,18],disable_pol:26,foundat:[14,15,6,7,0,19,2,26,22,27,25,16],apt:20,isnodefail:[14,15],wit:18,cache_properti:19,command_class_node_nam:15,from:[23,9],usb:15,commun:[15,7],next:[15,22,8],implic:7,few:7,usr:[10,9],stage:15,command_class_mark:15,insensit:15,account:9,retriev:[14,15,6,7,20,26,22,27],s_drop:22,ccdata:15,getvalueunit:15,fetch:[14,15],control:[18,21,9],tar:28,process:18,lock:[14,11,15],celsiu:15,tab:3,serial:[15,7,16],command_class_thermostat_fan_st:15,signal_driver_reset:7,arelock:15,instead:[14,15,22,9],removewatch:15,physic:[15,22,7],alloc:15,essenti:15,seriou:25,getoptionasint:15,element:15,issu:[10,15,25,7,18],allow:[14,15,22,8,18],is_listening_devic:14,usermod:9,move:[15,22],meter:27,comma:15,addcontrol:[15,22],nodeprotocolinfo:[25,7],"0x84":27,getnodespecif:15,chosen:[15,22],command_class_bas:15,networkreadi:7,therefor:15,command_class_zip_adv_serv:15,signal_value_remov:7,set_interfac:16,command_class_ip_configur:15,handl:[15,16,26],auto:20,set_log:[11,16],createbutton:[25,7],anyth:16,edit:[15,3],mode:[10,15,18,9],requestallconfigparam:15,command_class_schedule_entry_lock:15,receivedt:15,getnodequerystag:[14,15],tenth:15,special:[15,9],variabl:[15,7,2,26,9,27],addwatch:15,categori:7,rel:7,hardwar:15,get_switch_all_st:27,getvaluetyp:15,basiccommand:27,controllercommand_assignreturnrout:[15,22],dictionari:25,releas:[10,11,20,8],afterward:[15,22],controllercommand_replicationsend:15,could:[11,19,15],s_ackwait:22,put:9,timer:22,keep:[20,7,9],length:[15,7],command_class_controller_repl:15,transfer:[15,25,22],retain:15,leave_room_control:8,refreshvalu:15,requestnodedynam:15,qualiti:[15,9],scene:[5,15,7,18,19,20,21,3,11,12],get_stats_label:22,date:[19,7,9],facil:18,is_readi:7,library_type_nam:22,system:[27,15,25,22,26],messag:[14,15,6,7,26,22,25,16],home_id:[11,19,7,26],attach:[15,7],staticgetcommandclassid:[14,15],termin:18,"final":[15,18],getvaluelistitem:15,prone:15,command_class_firmware_update_md:15,shell:[3,23],travi:9,pressbutton:15,rst:9,lion:15,structur:[15,25],charact:15,yourzwavestick:[3,23],fail:[14,15,6,7,2,22,28,11,25],have:[14,15,6,7,0,19,20,2,26,9,28,22,27,10,11,25,16],need:[18,23,9],command_class_non_interoper:15,zwavenodebas:27,min:[27,26],rout:[14,15,22,7],isvalueset:15,which:[15,25,7],detector:7,singl:[14,15,2,26],pyx:[5,9],whe:19,unless:7,getnodeid:7,getvalueinst:15,set_change_verifi:26,set_switch_al:27,pyc:9,"class":[14,15,6,7,19,2,26,8,22,27,25,16],adaptat:22,request:[14,15,7,9],determin:[15,26],openzwav:[0,18],addoptionint:15,fact:7,spuriou:[15,26],command_class_multi_instance_associ:15,text:15,requestconfigparam:15,staff:9,locat:[14,11,3,15,16],ispol:15,removeassoci:[14,15],should:[14,15,6,7,0,19,2,26,9,22,27,25,16],manufactur:[14,15,7],groups_to_dict:14,suppos:27,nodenew:[25,7],local:[10,20,7,9],signal_network_fail:[11,7],hope:[14,15,6,7,0,19,2,26,22,27,25,16],pypa:[10,18],gettyp:[15,7],switches_al:27,command_class_lock:15,awak:[14,15,7],enabl:[15,27,7,26,16],setupttol:18,contain:[15,7,26,22,27,28],nodes_to_dict:7,removedevic:[15,25,22],view:3,controllercommand_removefailednod:[15,22],seten:15,testnetwork:15,adddevic:[15,25,22],knowledg:15,isstaticupdatecontrol:15,displai:[15,3,22,7,16],gmail:0,statu:[15,25,16,26],error:[15,11,25,7,16],state:[15,7,26,22,27,11],is_routing_devic:14,controllercommand_hasnodefail:[15,22],progress:[15,25,22],email:10,addopt:15,kei:[3,25],getcommandclassid:7,getvalueasstring_:15,job:7,entir:16,webapp:[10,8],addit:7,sniff:23,rtype:[14,15],refresh_info:14,equal:16,"_getcontrollerpath":15,etc:[15,25,7,26],instanc:[15,18,7,26,9],controllercommand_transferprimaryrol:[15,22],signal_msg_complet:7,command_class_basic_window_cov:15,chmod:9,respect:[10,18],signal_value_chang:7,command_class_actuator_multilevel:15,quit:7,tread:8,deletebutton:[25,7],set_interval_between_pol:16,cancnt:15,immedi:[14,15,26],stdouttologg:15,neighbour:[15,22],togeth:7,getnodebas:15,present:7,statist:[15,22],multi:15,defit:25,"72057594093273600l":27,defin:[11,27,15,18],getgenr:7,homei:15,observ:[15,26],helper:[14,15],almost:20,demo:[23,18],manufacturernam:15,begin_command_add_devic:22,archiv:18,product_nam:14,begin_command_delete_all_return_rout:22,set_field:14,member:[15,6],python:[0,18],is_switch:27,getpollintens:15,requestnetworkupd:25,getnodeproductnam:15,http:[14,15,6,7,0,18,19,20,8,26,9,28,22,27,10,2,25,16],listenerthread:8,api:[14,5,15,6,7,18,19,22,23,10,11],upon:[16,26],effect:16,initi:[14,15,25,7],getnumswitchpoint:15,sete:16,off:[15,7,20,26,9,27],is_beaming_devic:14,well:[15,16],exampl:[14,15,7,18,19,21,3,27,23,24,10,11,25],command:[18,20,21,9,28,10],usual:[14,15,22],value_data:2,library_vers:22,less:15,nodess:15,obtain:[14,15],getnodenam:15,command_class_sensor_alarm:15,driverdata:15,web:[23,8,18],makefil:[18,20,9],parent_id:26,add:[14,15,6,7,18,19,2,26,9,22,3,27],noack:15,logger:18,know:[14,15,19,27],burden:15,press:[15,22],password:9,python2:[10,9],like:[15,7,20,9,3,28,25],success:[15,6],is_frequent_listening_devic:14,necessari:[22,27],classvers:15,soft:[15,3,22],retransmit:[15,22],captur:15,setter:27,confiur:18,begin_command_delete_button:22,"export":27,flush:11,proper:7,home:15,sofcnt:15,librari:[14,15,6,7,18,1,20,26,9,22,23,10,25],is_static_update_control:22,outgo:[15,22],leav:8,setpollinterv:[15,7],"enum":[15,1,21],usag:[15,26,18],host:8,requestnodeneighbor:15,getnodeneighbor:15,leave_room_network:8,panel:[3,9],c_str:7,actual:[15,6,7,26,9,22],socket:[10,23,18],state_awak:7,s_controllerwritecnt:22,constructor:18,actuat:27,disabl:[15,7,26,22,25,16],own:9,remove_scen:7,automat:[14,15,7,9,27,16],warranti:[14,15,6,7,0,19,2,26,22,27,25,16],been:[14,15,7,26,9,22,11],merg:9,getvalueindex:15,getoptionasbool:15,much:[15,7],command_class_manufacturer_specif:15,"function":[11,27,15],receipt:7,nodeok:25,unexpect:[15,25],yeah:20,home_id_str:7,uninstal:[10,28,20],bug:[10,15,18],count:[14,15,22,7],succe:[15,6],made:[10,14,15],whether:[14,15,22,7,26],controller_id:22,record:[14,7],below:7,limit:16,otherwis:[14,15,7,2,26,9],problem:[10,7,18],quickli:[25,7],baud:[14,15,7],sceneexist:15,evalu:23,"int":[14,15,6,16,19,2,26,22,27,25,7],dure:[15,11,7],command_class_switch_al:[15,27],begin_command_request_network_upd:22,pip:[10,9],getvalueasbyt:15,detail:[14,15,6,7,0,19,2,26,22,27,25,16],virtual:[15,9],other:[15,7,19,26,9,22,28,25],bool:[14,15,16,19,2,26,22,27,25,7],futur:[15,6,7,8],branch:[18,9],varieti:7,getopt:15,isnodebeamingdevic:15,functionn:[11,7],stat:22,debian:[28,20,9],sphinx:9,reliabl:15,rule:27,command_class_zip_servic:15},objtypes:{"0":"py:module","1":"py:attribute","2":"py:method","3":"py:class","4":"py:data","5":"py:exception","6":"py:function"},objnames:{"0":["py","module","Python module"],"1":["py","attribute","Python attribute"],"2":["py","method","Python method"],"3":["py","class","Python class"],"4":["py","data","Python data"],"5":["py","exception","Python exception"],"6":["py","function","Python function"]},filenames:["COPYRIGHT","_index_lib","scene","pyozwman","INSTALL_WIN","index","group","network","pyozwweb","DEVEL","README","hello_world","openzwave","diagrams","node","libopenzwave","option","INSTALL_MAC","CHANGELOG","object","INSTALL_REPO","_index_api","controller","EXAMPLES","_index_txt","data","value","command","INSTALL_ARCH"],titles:["License","<no title>","Scene documentation","PyOzwMan documentation","Installing python-openzwave on Windows","Welcome to python-openzwave’s documentation!","Group documentation","Network documentation","PyOzwWeb documentation","Developpers information","python-openzwave","python-openzwave hello_world","API documentation","Notification’s diagrams","Node documentation","libopenzwave module","Option documentation","Installing python-openzwave on MacOs","Changelog","Object documentation","Installing python-openzwave from repository","<no title>","Controller documentation","python-openzwave","<no title>","Data documentation","Value documentation","Command documentation","Installing python-openzwave from archive"],objects:{"":{libopenzwave:[15,0,0,"-"]},"openzwave.controller":{ZWaveController:[22,3,1,""]},"openzwave.network.ZWaveNetwork":{nodes_count:[7,1,1,""],scenes_to_dict:[7,2,1,""],manager:[7,1,1,""],id_separator:[7,1,1,""],scene_exists:[7,2,1,""],get_value:[7,2,1,""],home_id:[7,1,1,""],start:[7,2,1,""],state:[7,1,1,""],is_ready:[7,1,1,""],write_config:[7,2,1,""],scenes_count:[7,1,1,""],test:[7,2,1,""],nodes:[7,1,1,""],get_scenes:[7,2,1,""],get_poll_interval:[7,2,1,""],get_value_from_id_on_network:[7,2,1,""],heal:[7,2,1,""],stop:[7,2,1,""],remove_scene:[7,2,1,""],home_id_str:[7,1,1,""],controller:[7,1,1,""],sleeping_nodes_count:[7,1,1,""],create_scene:[7,2,1,""],switch_all:[7,2,1,""],zwcallback:[7,2,1,""],state_str:[7,1,1,""],set_poll_interval:[7,2,1,""],to_dict:[7,2,1,""],nodes_to_dict:[7,2,1,""]},"openzwave.group.ZWaveGroup":{associations:[6,1,1,""],index:[6,1,1,""],max_associations:[6,1,1,""],add_association:[6,2,1,""],label:[6,1,1,""],to_dict:[6,2,1,""],remove_association:[6,2,1,""]},"openzwave.command.ZWaveNodeSwitch":{get_switch_state:[27,2,1,""],get_dimmer_level:[27,2,1,""],get_switch_all_state:[27,2,1,""],get_switches:[27,2,1,""],get_switch_all_items:[27,2,1,""],get_switches_all:[27,2,1,""],get_switch_all_item:[27,2,1,""],get_dimmers:[27,2,1,""],set_switch:[27,2,1,""],set_dimmer:[27,2,1,""],set_switch_all:[27,2,1,""]},"libopenzwave.PyOptions":{getOptionAsString:[15,2,1,""],getConfigPath:[15,2,1,""],addOption:[15,2,1,""],getOptionAsBool:[15,2,1,""],lock:[15,2,1,""],create:[15,2,1,""],getOptionAsInt:[15,2,1,""],areLocked:[15,2,1,""],addOptionInt:[15,2,1,""],destroy:[15,2,1,""],addOptionBool:[15,2,1,""],addOptionString:[15,2,1,""],getOption:[15,2,1,""]},"libopenzwave.EnumWithDocType":{setDocType:[15,2,1,""]},libopenzwave:{driverData:[15,6,1,""],PyLogLevels:[25,4,1,""],EnumWithDocType:[15,3,1,""],PyGenres:[25,4,1,""],PyManager:[15,3,1,""],EnumWithDoc:[15,3,1,""],RetAlloc:[15,3,1,""],configPath:[15,6,1,""],PyValueTypes:[25,4,1,""],PyNotifications:[25,4,1,""],LibZWaveException:[15,5,1,""],StdOutToLogger:[15,3,1,""],PyControllerState:[25,4,1,""],PyOptions:[15,3,1,""],PyControllerCommand:[25,4,1,""]},"openzwave.object.ZWaveObject":{use_cache:[19,1,1,""],is_outdated:[19,2,1,""],network:[19,1,1,""],update:[19,2,1,""],object_id:[19,1,1,""],last_update:[19,1,1,""],home_id:[19,1,1,""],kvals:[19,1,1,""],outdate:[19,2,1,""],cache_property:[19,2,1,""],outdated:[19,1,1,""]},"openzwave.command":{ZWaveNodeSwitch:[27,3,1,""],ZWaveNodeBasic:[27,3,1,""],ZWaveNodeSensor:[27,3,1,""]},"openzwave.scene":{ZWaveScene:[2,3,1,""]},"openzwave.scene.ZWaveScene":{activate:[2,2,1,""],add_value:[2,2,1,""],create:[2,2,1,""],label:[2,1,1,""],remove_value:[2,2,1,""],get_values_by_node:[2,2,1,""],to_dict:[2,2,1,""],scene_id:[2,1,1,""],set_value:[2,2,1,""],get_values:[2,2,1,""]},"openzwave.command.ZWaveNodeBasic":{can_wake_up:[27,2,1,""],get_power_level:[27,2,1,""],get_power_levels:[27,2,1,""],get_battery_level:[27,2,1,""],get_battery_levels:[27,2,1,""]},"libopenzwave.StdOutToLogger":{write:[15,2,1,""]},"openzwave.command.ZWaveNodeSensor":{get_sensor_value:[27,2,1,""],get_sensors:[27,2,1,""]},"openzwave.node":{ZWaveNode:[14,3,1,""]},"openzwave.group":{ZWaveGroup:[6,3,1,""]},"pyozwweb.app.listener.ListenerThread":{run:[8,2,1,""],leave_room_controller:[8,2,1,""],stop:[8,2,1,""],join_room_controller:[8,2,1,""],join_room_values:[8,2,1,""],join_room_node:[8,2,1,""],connect:[8,2,1,""],join_room_network:[8,2,1,""],leave_room_node:[8,2,1,""],leave_room_network:[8,2,1,""],leave_room_values:[8,2,1,""]},"libopenzwave.EnumWithDoc":{setDoc:[15,2,1,""]},"openzwave.object":{ZWaveCommandClassException:[19,5,1,""],ZWaveObject:[19,3,1,""],ZWaveCacheException:[19,5,1,""],ZWaveNodeInterface:[19,3,1,""],ZWaveTypeException:[19,5,1,""],ZWaveException:[19,5,1,""]},openzwave:{node:[14,0,0,"-"],group:[6,0,0,"-"],network:[7,0,0,"-"],object:[19,0,0,"-"],scene:[2,0,0,"-"],value:[26,0,0,"-"],controller:[22,0,0,"-"],command:[27,0,0,"-"],option:[16,0,0,"-"]},"pyozwweb.app":{listener:[8,0,0,"-"]},"openzwave.controller.ZWaveController":{begin_command_remove_failed_node:[22,2,1,""],is_bridge_controller:[22,1,1,""],begin_command_remove_device:[22,2,1,""],is_primary_controller:[22,1,1,""],ozw_library_version:[22,1,1,""],begin_command_has_node_failed:[22,2,1,""],begin_command_create_new_primary:[22,2,1,""],poll_stats:[22,1,1,""],library_config_path:[22,1,1,""],stats:[22,1,1,""],hard_reset:[22,2,1,""],begin_command_receive_configuration:[22,2,1,""],python_library_version:[22,1,1,""],capabilities:[22,1,1,""],begin_command_add_device:[22,2,1,""],begin_command_send_node_information:[22,2,1,""],do_poll_statistics:[22,2,1,""],library_type_name:[22,1,1,""],begin_command_create_button:[22,2,1,""],library_version:[22,1,1,""],node:[22,1,1,""],begin_command_transfer_primary_role:[22,2,1,""],begin_command_delete_button:[22,2,1,""],begin_command_delete_all_return_routes:[22,2,1,""],begin_command_assign_return_route:[22,2,1,""],begin_command_request_network_update:[22,2,1,""],library_user_path:[22,1,1,""],cancel_command:[22,2,1,""],stop:[22,2,1,""],node_id:[22,1,1,""],is_static_update_controller:[22,1,1,""],device:[22,1,1,""],begin_command_request_node_neigbhor_update:[22,2,1,""],get_stats_label:[22,2,1,""],begin_command_replace_failed_node:[22,2,1,""],name:[22,1,1,""],zwcallback:[22,2,1,""],soft_reset:[22,2,1,""],library_description:[22,1,1,""],to_dict:[22,2,1,""],begin_command_replication_send:[22,2,1,""],send_queue_count:[22,1,1,""],options:[22,1,1,""]},"openzwave.option.ZWaveOption":{set_exclude:[16,2,1,""],set_associate:[16,2,1,""],set_interface:[16,2,1,""],config_path:[16,1,1,""],user_path:[16,1,1,""],set_console_output:[16,2,1,""],set_interval_between_polls:[16,2,1,""],set_dump_trigger_level:[16,2,1,""],set_include:[16,2,1,""],set_log_file:[16,2,1,""],set_poll_interval:[16,2,1,""],set_append_log_file:[16,2,1,""],set_queue_log_level:[16,2,1,""],set_save_log_level:[16,2,1,""],set_logging:[16,2,1,""],device:[16,1,1,""],set_notify_transactions:[16,2,1,""],set_driver_max_attempts:[16,2,1,""],set_save_configuration:[16,2,1,""],set_suppress_value_refresh:[16,2,1,""]},"libopenzwave.PyManager":{enablePoll:[15,2,1,""],getValueType:[15,2,1,""],isNodeAwake:[15,2,1,""],getValueAsInt:[15,2,1,""],getControllerPath:[15,2,1,""],getValueGenre:[15,2,1,""],removeDriver:[15,2,1,""],getSwitchPoint:[15,2,1,""],softResetController:[15,2,1,""],getNumScenes:[15,2,1,""],requestNodeState:[15,2,1,""],setPollInterval:[15,2,1,""],setNodeOff:[15,2,1,""],getNodeSecurity:[15,2,1,""],getValueUnits:[15,2,1,""],getValueMin:[15,2,1,""],disablePoll:[15,2,1,""],getNodeNeighbors:[15,2,1,""],setValueUnits:[15,2,1,""],setNodeLocation:[15,2,1,""],activateScene:[15,2,1,""],isPolled:[15,2,1,""],getValueAsShort:[15,2,1,""],isBridgeController:[15,2,1,""],getValueAsByte:[15,2,1,""],removeAllScenes:[15,2,1,""],isNodeRoutingDevice:[15,2,1,""],getChangeVerified:[15,2,1,""],addAssociation:[15,2,1,""],getGroupLabel:[15,2,1,""],refreshNodeInfo:[15,2,1,""],removeWatcher:[15,2,1,""],getNodeManufacturerId:[15,2,1,""],removeSceneValue:[15,2,1,""],isNodeFailed:[15,2,1,""],getNumGroups:[15,2,1,""],releaseButton:[15,2,1,""],getNodeSpecific:[15,2,1,""],requestAllConfigParams:[15,2,1,""],setValue:[15,2,1,""],clearSwitchPoints:[15,2,1,""],getValueListItems:[15,2,1,""],setNodeLevel:[15,2,1,""],getNodeProductType:[15,2,1,""],setNodeOn:[15,2,1,""],isStaticUpdateController:[15,2,1,""],isNodeBeamingDevice:[15,2,1,""],getValueMax:[15,2,1,""],getMaxAssociations:[15,2,1,""],resetController:[15,2,1,""],getNodeVersion:[15,2,1,""],isNodeInfoReceived:[15,2,1,""],setPollIntensity:[15,2,1,""],addSceneValue:[15,2,1,""],setNodeProductName:[15,2,1,""],requestConfigParam:[15,2,1,""],getPollIntensity:[15,2,1,""],healNetworkNode:[15,2,1,""],getNodeType:[15,2,1,""],getLibraryTypeName:[15,2,1,""],setSceneValue:[15,2,1,""],sceneExists:[15,2,1,""],getValueListSelectionNum:[15,2,1,""],cancelControllerCommand:[15,2,1,""],isNodeFrequentListeningDevice:[15,2,1,""],getSceneLabel:[15,2,1,""],getPythonLibraryVersion:[15,2,1,""],removeSwitchPoint:[15,2,1,""],getNodeStatistics:[15,2,1,""],COMMAND_CLASS_DESC:[15,1,1,""],getValueInstance:[15,2,1,""],isNodeListeningDevice:[15,2,1,""],getNodeGeneric:[15,2,1,""],getOzwLibraryVersionNumber:[15,2,1,""],getValueCommandClass:[15,2,1,""],getControllerInterfaceType:[15,2,1,""],getNodeManufacturerName:[15,2,1,""],create:[15,2,1,""],getPollInterval:[15,2,1,""],switchAllOn:[15,2,1,""],isValueSet:[15,2,1,""],getValueListSelectionStr:[15,2,1,""],setValueHelp:[15,2,1,""],isValuePolled:[15,2,1,""],beginControllerCommand:[15,2,1,""],getAssociations:[15,2,1,""],addDriver:[15,2,1,""],setNodeName:[15,2,1,""],removeAssociation:[15,2,1,""],getNodeClassInformation:[15,2,1,""],getNodeName:[15,2,1,""],getSUCNodeId:[15,2,1,""],getValueAsBool:[15,2,1,""],getValueFloatPrecision:[15,2,1,""],addWatcher:[15,2,1,""],getNumSwitchPoints:[15,2,1,""],switchAllOff:[15,2,1,""],getLibraryVersion:[15,2,1,""],writeConfig:[15,2,1,""],getValueIndex:[15,2,1,""],getValue:[15,2,1,""],getValueAsString:[15,2,1,""],getValueHelp:[15,2,1,""],setChangeVerified:[15,2,1,""],getNodeQueryStageCode:[15,2,1,""],isValueReadOnly:[15,2,1,""],getPythonLibraryVersionNumber:[15,2,1,""],requestNodeDynamic:[15,2,1,""],getSendQueueCount:[15,2,1,""],getValueAsFloat:[15,2,1,""],isPrimaryController:[15,2,1,""],getValueLabel:[15,2,1,""],logDriverStatistics:[15,2,1,""],removeScene:[15,2,1,""],setValueLabel:[15,2,1,""],getNodeQueryStage:[15,2,1,""],sceneGetValues:[15,2,1,""],setConfigParam:[15,2,1,""],getDriverStatistics:[15,2,1,""],getNodeBasic:[15,2,1,""],getNodeLocation:[15,2,1,""],setSceneLabel:[15,2,1,""],pressButton:[15,2,1,""],destroy:[15,2,1,""],getAllScenes:[15,2,1,""],isValueWriteOnly:[15,2,1,""],getNodeMaxBaudRate:[15,2,1,""],getOzwLibraryVersion:[15,2,1,""],getControllerNodeId:[15,2,1,""],isNodeSecurityDevice:[15,2,1,""],setNodeManufacturerName:[15,2,1,""],getNodeProductId:[15,2,1,""],testNetworkNode:[15,2,1,""],CALLBACK_DESC:[15,1,1,""],refreshValue:[15,2,1,""],testNetwork:[15,2,1,""],getNodeProductName:[15,2,1,""],createScene:[15,2,1,""],healNetwork:[15,2,1,""],setSwitchPoint:[15,2,1,""]},"openzwave.value":{ZWaveValue:[26,3,1,""]},"openzwave.value.ZWaveValue":{enable_poll:[26,2,1,""],help:[26,1,1,""],is_write_only:[26,1,1,""],id_on_network:[26,1,1,""],data_as_string:[26,1,1,""],instance:[26,1,1,""],poll_intensity:[26,1,1,""],min:[26,1,1,""],label:[26,1,1,""],parent_id:[26,1,1,""],set_change_verified:[26,2,1,""],units:[26,1,1,""],type:[26,1,1,""],check_data:[26,2,1,""],value_id:[26,1,1,""],node:[26,1,1,""],index:[26,1,1,""],max:[26,1,1,""],command_class:[26,1,1,""],precision:[26,1,1,""],is_read_only:[26,1,1,""],genre:[26,1,1,""],data:[26,1,1,""],disable_poll:[26,2,1,""],refresh:[26,2,1,""],data_items:[26,1,1,""],is_change_verified:[26,2,1,""],to_dict:[26,2,1,""],is_set:[26,1,1,""],is_polled:[26,1,1,""]},"openzwave.node.ZWaveNode":{neighbors:[14,1,1,""],get_values_by_command_classes:[14,2,1,""],isReady:[14,1,1,""],set_config_param:[14,2,1,""],change_value:[14,2,1,""],command_classes_as_string:[14,1,1,""],is_security_device:[14,1,1,""],command_classes:[14,1,1,""],is_beaming_device:[14,1,1,""],get_values_for_command_class:[14,2,1,""],num_groups:[14,1,1,""],isNodeAwake:[14,2,1,""],get_values:[14,2,1,""],manufacturer_name:[14,1,1,""],is_listening_device:[14,1,1,""],generic:[14,1,1,""],is_sleeping:[14,1,1,""],set_field:[14,2,1,""],capabilities:[14,1,1,""],isNodeFailed:[14,1,1,""],groups_to_dict:[14,2,1,""],has_command_class:[14,2,1,""],version:[14,1,1,""],location:[14,1,1,""],basic:[14,1,1,""],test:[14,2,1,""],manufacturer_id:[14,1,1,""],getNodeQueryStage:[14,1,1,""],type:[14,1,1,""],product_name:[14,1,1,""],request_config_param:[14,2,1,""],add_value:[14,2,1,""],heal:[14,2,1,""],node_id:[14,1,1,""],groups:[14,1,1,""],request_all_config_params:[14,2,1,""],is_routing_device:[14,1,1,""],product_id:[14,1,1,""],is_frequent_listening_device:[14,1,1,""],isNodeInfoReceived:[14,1,1,""],product_type:[14,1,1,""],name:[14,1,1,""],is_locked:[14,1,1,""],refresh_value:[14,2,1,""],refresh_info:[14,2,1,""],get_command_class_as_string:[14,2,1,""],specific:[14,1,1,""],remove_value:[14,2,1,""],max_baud_rate:[14,1,1,""],to_dict:[14,2,1,""],values_to_dict:[14,2,1,""],security:[14,1,1,""],get_command_class_genres:[14,2,1,""]},"openzwave.network":{ZWaveNetwork:[7,3,1,""]},"pyozwweb.app.listener":{ListenerThread:[8,3,1,""]},"openzwave.option":{ZWaveOption:[16,3,1,""]}},titleterms:{control:22,repositroi:20,api_demo:23,code:11,from:[10,28,11,20],process:[28,20,13],modul:15,sudo:9,startup:13,scene:2,indic:5,pyozwman:[3,23],"static":9,tabl:5,need:[28,20],instal:[28,20,4,17],dynam:9,out:10,virtualenv:9,alpha3:10,some:11,group:6,welcom:5,lib:9,how:9,licens:0,support:10,archiv:28,pyozwweb:[8,23],launch:8,start:11,window:4,build:[28,20],memory_us:23,zwave:11,hello_world:11,document:[14,5,6,7,25,19,2,26,8,22,3,27,9,12,16],updat:20,node:14,test_lib:23,sourc:[20,8],run:20,option:16,get:[28,20],python:[5,17,20,9,28,4,10,11,23],share:9,tool:[28,20],notif:13,migrat:10,what:8,diagram:13,api_snif:23,test:[20,9],theori:11,repositori:20,maco:17,develop:9,data:25,valu:26,network:7,about:[20,9],full:13,developp:9,signal:11,changelog:18,object:19,inform:9,libopenzwav:[15,9],api:12,command:27,openzwav:[5,17,20,9,28,4,10,11,23],listen:11,python3:9,hello:11,depend:20}}) \ No newline at end of file diff --git a/docs/joomla/value.html b/docs/joomla/value.html index 17c6c24b..ec878623 100644 --- a/docs/joomla/value.html +++ b/docs/joomla/value.html @@ -426,12 +426,16 @@

    Value documentation

    -to_dict()
    -

    Return a dict representation of the value.

    +to_dict(extras=['all']) +

    Return a dict representation of the node.

    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    + + + + diff --git a/docs/pyozwweb.rst b/docs/pyozwweb.rst index f71f97dc..275a04d2 100755 --- a/docs/pyozwweb.rst +++ b/docs/pyozwweb.rst @@ -20,11 +20,12 @@ Update the config : .. code-block:: bash - vim config.py + vim app.conf - ZWAVE_DEVICE = "/dev/ttyUSB0" + [zwave] + device = /dev/ttyUSB0 -You can fine tune logging in logging.conf. You can run the app : +You can fine tune logging in logging.conf and run the app : .. code-block:: bash @@ -32,6 +33,14 @@ You can fine tune logging in logging.conf. You can run the app : And connect to http://127.0.0.1:5000 using your favorite browser. +You can also change the ip/port to allow remote connections : + +.. code-block:: bash + + [server] + host = 0.0.0.0 + port = 8080 + Source ------ diff --git a/src-api/openzwave/command.py b/src-api/openzwave/command.py index 57909a20..3bc6e2c8 100755 --- a/src-api/openzwave/command.py +++ b/src-api/openzwave/command.py @@ -23,6 +23,11 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass from openzwave.object import ZWaveNodeInterface from threading import Timer diff --git a/src-api/openzwave/controller.py b/src-api/openzwave/controller.py index 3f56488d..ebf27062 100755 --- a/src-api/openzwave/controller.py +++ b/src-api/openzwave/controller.py @@ -24,6 +24,11 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass import sys if sys.hexversion >= 0x3000000: from pydispatch import dispatcher @@ -32,6 +37,7 @@ import time from openzwave.object import ZWaveObject from libopenzwave import PyStatDriver +import threading # Set default logging handler to avoid "No handler found" warnings. import logging @@ -101,6 +107,7 @@ class ZWaveController(ZWaveObject): SIGNAL_CTRL_NODEFAILED = 'NodeFailed' SIGNAL_CONTROLLER = 'Message' + SIGNAL_CONTROLLER_STATS = 'ControllerStats' CMD_NONE = 0 CMD_ADDDEVICE = 1 @@ -142,6 +149,16 @@ def __init__(self, controller_id, network, options=None): self._python_library_version = None self.ctrl_last_state = self.SIGNAL_CTRL_NORMAL self.ctrl_last_message = "" + self._timer_statistics = None + self._interval_statistics = 0.0 + + def stop(self): + """ + Stop the controller and all this threads. + + """ + if self._timer_statistics is not None: + self._timer_statistics.cancel() def __str__(self): """ @@ -352,6 +369,49 @@ def get_stats_label(self, stat): #print "stat = %s" % stat return PyStatDriver[stat] + def do_poll_statistics(self): + """ + Timer based polling system for statistics + """ + self._timer_statistics = None + stats = self.stats + dispatcher.send(self.SIGNAL_CONTROLLER_STATS, \ + **{'controller':self, 'stats':stats}) + + self._timer_statistics = threading.Timer(self._interval_statistics, self.do_poll_statistics) + self._timer_statistics.start() + + @property + def poll_stats(self): + """ + The interval for polling statistics + + :return: The interval in seconds + :rtype: float + + """ + return self._interval_statistics + + @poll_stats.setter + def poll_stats(self, value): + """ + The interval for polling statistics + + :return: The interval in seconds + :rtype: ZWaveNode + + :param value: The interval in seconds + :type value: float + + """ + if value != self._interval_statistics: + if self._timer_statistics is not None: + self._timer_statistics.cancel() + if value != 0: + self._interval_statistics = value + self._timer_statistics = threading.Timer(self._interval_statistics, self.do_poll_statistics) + self._timer_statistics.start() + @property def capabilities(self): """ @@ -427,7 +487,7 @@ def hard_reset(self): """ self._network.state = self._network.STATE_RESETTED dispatcher.send(self._network.SIGNAL_NETWORK_RESETTED, \ - **{'network': self._network}) + **{'network':self._network}) self._network.manager.resetController(self._network.home_id) time.sleep(5) @@ -693,15 +753,21 @@ def zwcallback(self, args): dispatcher.send(self.SIGNAL_CONTROLLER, \ **{'state': state, 'message': message, 'network': self._network, 'controller': self}) - def to_dict(self): + def to_dict(self, extras=['all']): """ Return a dict representation of the controller. + :param extras: The extra inforamtions to add + :type extras: [] + :returns: A dict :rtype: dict() """ - ret=self.node.to_dict() - ret['capabilities'].update(dict.fromkeys(self.capabilities, 0)) + ret=self.node.to_dict(extras=extras) + if 'all' in extras: + extras = ['kvals', 'capabilities', 'neighbors'] + if 'capabilities' in extras: + ret['capabilities'].update(dict.fromkeys(self.capabilities, 0)) ret["zw_version"] = self.library_version ret["zw_description"] = self.library_description ret["oz_version"] = self.ozw_library_version diff --git a/src-api/openzwave/group.py b/src-api/openzwave/group.py index cbcf884e..8e9cc9d1 100755 --- a/src-api/openzwave/group.py +++ b/src-api/openzwave/group.py @@ -23,6 +23,11 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass from openzwave.object import ZWaveObject # Set default logging handler to avoid "No handler found" warnings. @@ -151,3 +156,21 @@ def remove_association(self, target_node_id): """ self._network.manager.removeAssociation(self._network.home_id, self._node_id, self.index, target_node_id) + + def to_dict(self, extras=['all']): + """ + Return a dict representation of the group. + + :param extras: The extra inforamtions to add + :type extras: [] + :returns: A dict + :rtype: dict() + + """ + if 'all' in extras: + extras = ['associations'] + ret={} + ret['label'] = self.label + if 'associations' in extras : + ret['associations'] = dict.fromkeys(self.associations, 0) + return ret diff --git a/src-api/openzwave/network.py b/src-api/openzwave/network.py index e8f64419..db0f1fd6 100755 --- a/src-api/openzwave/network.py +++ b/src-api/openzwave/network.py @@ -23,6 +23,11 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass import os #from collections import namedtuple import time @@ -384,6 +389,8 @@ def stop(self, fire=True): """ if self._started == False: return + if self.controller is not None: + self.controller.stop() self.write_config() if self.dbcon is not None: self.dbcon.close() @@ -577,22 +584,28 @@ def nodes(self): """ return self._nodes - def nodes_to_dict(self, kvals=True): + def nodes_to_dict(self, extras=['all']): """ Return a dict representation of the network. + :param extras: The extra inforamtions to add + :type extras: [] + :returns: A dict :rtype: dict() """ ret={} for ndid in self._nodes.keys(): - ret[ndid]=self._nodes[ndid].to_dict(kvals=kvals) + ret[ndid]=self._nodes[ndid].to_dict(extras=extras) return ret - def to_dict(self, kvals=True): + def to_dict(self, extras=['kvals']): """ Return a dict representation of the network. + :param extras: The extra inforamtions to add + :type extras: [] + :returns: A dict :rtype: dict() """ @@ -601,7 +614,7 @@ def to_dict(self, kvals=True): ret['state_str'] = self.state_str, ret['home_id'] = self.home_id_str, ret['nodes_count'] = self.nodes_count, - if kvals == True and self.network.dbcon is not None: + if 'kvals' in extras and self.network.dbcon is not None: vals = self.kvals for key in vals.keys(): ret[key]=vals[key] @@ -738,17 +751,20 @@ def get_scenes(self): else: return self._load_scenes() - def scenes_to_dict(self, kvals=True): + def scenes_to_dict(self, extras=['all']): """ Return a JSONifiable dict representation of the scenes. + :param extras: The extra inforamtions to add + :type extras: [] + :returns: A dict :rtype: dict() """ ret={} scenes = self.get_scenes() for scnid in scenes.keys(): - ret[scnid] = scenes[scnid].to_dict(kvals=kvals) + ret[scnid] = scenes[scnid].to_dict(extras=extras) return ret def _load_scenes(self): diff --git a/src-api/openzwave/node.py b/src-api/openzwave/node.py index 2b6fdf61..24a0aa2a 100755 --- a/src-api/openzwave/node.py +++ b/src-api/openzwave/node.py @@ -23,6 +23,11 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass from openzwave.object import ZWaveObject from openzwave.group import ZWaveGroup from openzwave.value import ZWaveValue @@ -171,22 +176,33 @@ def product_id(self): """ return self._network.manager.getNodeProductId(self.home_id, self.object_id) - def to_dict(self, kvals=True): + def to_dict(self, extras=['all']): """ Return a dict representation of the node. + :param extras: The extra inforamtions to add + :type extras: [] + :returns: A dict :rtype: dict() """ + if 'all' in extras: + extras = ['kvals', 'capabilities', 'neighbors', 'groups', 'values'] ret={} ret['name'] = self.name ret['location'] = self.location ret['product_type'] = self.product_type ret['product_name'] = self.product_name ret['node_id'] = self.node_id - ret['neighbors'] = dict.fromkeys(self.neighbors, 0) - ret['capabilities'] = dict.fromkeys(self.capabilities, 0) - if kvals == True and self.network.dbcon is not None: + if 'values' in extras : + ret['values'] = self.values_to_dict(extras=extras) + if 'groups' in extras : + ret['groups'] = self.groups_to_dict(extras=extras) + if 'neighbors' in extras : + ret['neighbors'] = dict.fromkeys(self.neighbors, 0) + if 'capabilities' in extras : + ret['capabilities'] = dict.fromkeys(self.capabilities, 0) + if 'kvals' in extras and self.network.dbcon is not None: vals = self.kvals for key in vals.keys(): ret[key]=vals[key] @@ -254,6 +270,22 @@ def groups(self): groups[i] = ZWaveGroup(i, network=self._network, node_id=self.node_id) return groups + def groups_to_dict(self, extras=['all']): + """ + Return a dict representation of the groups. + + :param extras: The extra inforamtions to add + :type extras: [] + :returns: A dict + :rtype: dict() + + """ + groups = self.groups + ret={} + for gid in groups.keys(): + ret[gid] = groups[gid].to_dict(extras=extras) + return ret + def heal(self, upNodeRoute=False): """ Heal network node by requesting the node rediscover their neighbors. @@ -409,6 +441,21 @@ def get_values(self, class_id='All', genre='All', \ ret[value] = self.values[value] return ret + def values_to_dict(self, extras=['all']): + """ + Return a dict representation of the values. + + :param extras: The extra inforamtions to add + :type extras: [] + :returns: A dict + :rtype: dict() + + """ + ret={} + for vid in self.values.keys(): + ret[vid] = self.values[vid].to_dict(extras=extras) + return ret + def add_value(self, value_id): """ Add a value to the node diff --git a/src-api/openzwave/object.py b/src-api/openzwave/object.py index 7bb1e87b..86e11620 100755 --- a/src-api/openzwave/object.py +++ b/src-api/openzwave/object.py @@ -23,6 +23,11 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass # Set default logging handler to avoid "No handler found" warnings. import logging try: # Python 2.7+ diff --git a/src-api/openzwave/option.py b/src-api/openzwave/option.py index 09dceaed..f3970788 100755 --- a/src-api/openzwave/option.py +++ b/src-api/openzwave/option.py @@ -23,6 +23,11 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass import os import libopenzwave from libopenzwave import PyLogLevels diff --git a/src-api/openzwave/scene.py b/src-api/openzwave/scene.py index 886f1f9f..4952df2b 100755 --- a/src-api/openzwave/scene.py +++ b/src-api/openzwave/scene.py @@ -23,6 +23,11 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass from openzwave.object import ZWaveObject # Set default logging handler to avoid "No handler found" warnings. @@ -203,17 +208,20 @@ def activate(self): """ return self._network.manager.activateScene(self.object_id) - def to_dict(self, kvals=True): + def to_dict(self, extras=['kvals']): """ Return a dict representation of the node. + :param extras: The extra inforamtions to add + :type extras: [] + :returns: A dict :rtype: dict() """ ret={} ret['label'] = self.label ret['scene_id'] = self.scene_id - if kvals == True and self.network.dbcon is not None: + if 'kvals' in extras and self.network.dbcon is not None: vals = self.kvals for key in vals.keys(): ret[key]=vals[key] diff --git a/src-api/openzwave/singleton.py b/src-api/openzwave/singleton.py index b1c64bdf..047b1c51 100755 --- a/src-api/openzwave/singleton.py +++ b/src-api/openzwave/singleton.py @@ -23,6 +23,11 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass class Singleton(type): """ Singleton metaclass diff --git a/src-api/openzwave/value.py b/src-api/openzwave/value.py index 4e1004ad..0e5ed54a 100755 --- a/src-api/openzwave/value.py +++ b/src-api/openzwave/value.py @@ -23,6 +23,11 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass from openzwave.object import ZWaveObject # Set default logging handler to avoid "No handler found" warnings. @@ -536,17 +541,27 @@ def set_change_verified(self, verify): logger.debug('Set change verified %s for valueId [%s]', verify, self.value_id) self._network.manager.setChangeVerified(self.value_id, verify) - def to_dict(self): + def to_dict(self, extras=['all']): """ - Return a dict representation of the value. + Return a dict representation of the node. + :param extras: The extra inforamtions to add + :type extras: [] + :returns: A dict :rtype: dict() """ + if 'all' in extras: + extras = ['kvals'] ret={} ret['label'] = self.label ret['value_id'] = self.value_id ret['node_id'] = self.node.node_id ret['units'] = self.units + ret['genre'] = self.genre ret['data'] = self.data + if 'kvals' in extras and self.network.dbcon is not None: + vals = self.kvals + for key in vals.keys(): + ret[key]=vals[key] return ret diff --git a/src-manager/pyozwman/ozwsh_main.py b/src-manager/pyozwman/ozwsh_main.py index dbdf4923..ed626b21 100755 --- a/src-manager/pyozwman/ozwsh_main.py +++ b/src-manager/pyozwman/ozwsh_main.py @@ -28,6 +28,11 @@ __author__ = 'bibi21000' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass from select import select import sys import os diff --git a/src-manager/pyozwman/ozwsh_widgets.py b/src-manager/pyozwman/ozwsh_widgets.py index 41fa703d..aa29878c 100755 --- a/src-manager/pyozwman/ozwsh_widgets.py +++ b/src-manager/pyozwman/ozwsh_widgets.py @@ -27,6 +27,11 @@ __author__ = 'bibi21000' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass from select import select import sys import os diff --git a/src-web/pyozwweb/app/__init__.py b/src-web/pyozwweb/app/__init__.py index 92d7b8d6..0cfababa 100755 --- a/src-web/pyozwweb/app/__init__.py +++ b/src-web/pyozwweb/app/__init__.py @@ -90,7 +90,7 @@ def signal_term_handler(signal, frame): app_.debug = app.config['DEBUG'] app_.testing = app.config['TESTING'] logging.debug("Flask url maps %s" % app.url_map) - socketio.run(app, use_reloader=app.config['RELOADER']) + socketio.run(app, use_reloader=app.config['RELOADER'],host=app.config['HOST'], port=app.config['PORT']) #print "App has ran" #stop_all() @@ -107,9 +107,32 @@ def create_app(config_object='pyozwweb.config.DevelopmentConfig'): _app.config.from_object(config_object) global app app = _app + #Logging configuration import logging.config, yaml - logging.config.dictConfig(yaml.load(open(app.config['LOGGING_CONF']))) + logs = yaml.load(open(app.config['LOGGING_CONF'])) + logging.config.dictConfig(logs) logging.debug("Load config from %s"%config_object) + if logs['loggers']['libopenzwave']['level'] == 'DEBUG': + ZWAVE_DEBUG = "Debug" + elif logs['loggers']['libopenzwave']['level'] == 'ERROR': + ZWAVE_DEBUG = "Error" + elif logs['loggers']['libopenzwave']['level'] == 'WARNING': + ZWAVE_DEBUG = "Warning" + else: + ZWAVE_DEBUG = "Info" + #Application configuration + from ConfigParser import SafeConfigParser + settings = SafeConfigParser() + settings.read(app.config['APP_CONF']) + section = "zwave" + if settings.has_option(section, 'device'): + app.config['ZWAVE_DEVICE'] = settings.get(section, 'device') + section = "server" + if settings.has_option(section, 'host'): + app.config['HOST'] = settings.get(section, 'host') + if settings.has_option(section, 'port'): + app.config['PORT'] = settings.getint(section, 'port') + #Flask stuff global fanstatic fanstatic = Fanstatic(app) global socketio diff --git a/src-web/pyozwweb/app/listener.py b/src-web/pyozwweb/app/listener.py index 4fe1034b..5bfb0ca9 100644 --- a/src-web/pyozwweb/app/listener.py +++ b/src-web/pyozwweb/app/listener.py @@ -113,15 +113,17 @@ def leave_room_network(self): def _louie_network(self, network): """Louie dispatch for netowrk """ - if network is None: - self.socketio.emit('my network response', - {'data': data_room_network(current_app.extensions['zwnetwork'])}, - namespace='/ozwave') - else: - self.socketio.emit('my network response', - {'data': data_room_network(current_app.extensions['zwnetwork'])}, - namespace='/ozwave') - logging.debug('OpenZWave network notification : homeid %0.8x (state:%s) - %d nodes were found.' % (network.home_id, network.state, network.nodes_count)) + with self.app.test_request_context(): + from flask import request + if network is None: + self.socketio.emit('my network response', + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + namespace='/ozwave') + else: + self.socketio.emit('my network response', + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + namespace='/ozwave') + logging.debug('OpenZWave network notification : homeid %0.8x (state:%s) - %d nodes were found.' % (network.home_id, network.state, network.nodes_count)) def join_room_node(self): """Join room nodes diff --git a/src-web/pyozwweb/app/socket/chat.py b/src-web/pyozwweb/app/socket/chat.py index cddcbfa8..edffe1fd 100755 --- a/src-web/pyozwweb/app/socket/chat.py +++ b/src-web/pyozwweb/app/socket/chat.py @@ -33,6 +33,11 @@ __author__ = 'Sébastien GALLET aka bibi21000' __email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass import os, sys import time from threading import Thread diff --git a/src-web/pyozwweb/app/socket/ozwave.py b/src-web/pyozwweb/app/socket/ozwave.py index 3a0183c2..da4b268c 100755 --- a/src-web/pyozwweb/app/socket/ozwave.py +++ b/src-web/pyozwweb/app/socket/ozwave.py @@ -35,7 +35,11 @@ """ __author__ = 'Sébastien GALLET aka bibi21000' __email__ = 'bibi21000@gmail.com' - +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass import os, sys import time from threading import Thread diff --git a/src-web/pyozwweb/app/templates/controller.html b/src-web/pyozwweb/app/templates/controller.html index 797113b4..d4560c88 100755 --- a/src-web/pyozwweb/app/templates/controller.html +++ b/src-web/pyozwweb/app/templates/controller.html @@ -1,5 +1,3 @@ -{{- g.fanstatic.needs('js.bootstrap:bootstrap') -}} -{{- g.fanstatic.needs('js.bootstrap:bootstrap_theme') -}} {{- g.fanstatic.needs('js.jquery:jquery') -}} {{- g.fanstatic.needs('js.jquery_datatables:jquery_datatables') -}} {{- g.fanstatic.needs('js.jquery_datatables:responsive') -}} diff --git a/src-web/pyozwweb/app/templates/debug.html b/src-web/pyozwweb/app/templates/debug.html index ce458c36..dee975b6 100644 --- a/src-web/pyozwweb/app/templates/debug.html +++ b/src-web/pyozwweb/app/templates/debug.html @@ -1,5 +1,3 @@ -{{- g.fanstatic.needs('js.bootstrap:bootstrap') -}} -{{- g.fanstatic.needs('js.bootstrap:bootstrap_theme') -}} {{- g.fanstatic.needs('js.jquery:jquery') -}} {{- g.fanstatic.needs('js.jquery_datatables:jquery_datatables') -}} {{- g.fanstatic.needs('js.jquery_datatables:responsive') -}} diff --git a/src-web/pyozwweb/app/templates/home.html b/src-web/pyozwweb/app/templates/home.html index acd65b90..a91a30b9 100755 --- a/src-web/pyozwweb/app/templates/home.html +++ b/src-web/pyozwweb/app/templates/home.html @@ -1,5 +1,3 @@ -{{- g.fanstatic.needs('js.bootstrap:bootstrap') -}} -{{- g.fanstatic.needs('js.bootstrap:bootstrap_theme') -}} {{- g.fanstatic.needs('js.jquery:jquery') -}} {{- g.fanstatic.needs('js.jquery_datatables:jquery_datatables') -}} {{- g.fanstatic.needs('js.jquery_datatables:responsive') -}} diff --git a/src-web/pyozwweb/app/templates/map.html b/src-web/pyozwweb/app/templates/map.html index 8e85216e..bde427aa 100755 --- a/src-web/pyozwweb/app/templates/map.html +++ b/src-web/pyozwweb/app/templates/map.html @@ -1,5 +1,3 @@ -{{- g.fanstatic.needs('js.bootstrap:bootstrap') -}} -{{- g.fanstatic.needs('js.bootstrap:bootstrap_theme') -}} {{- g.fanstatic.needs('js.jquery:jquery') -}} {{- g.fanstatic.needs('js.jquery_datatables:jquery_datatables') -}} {{- g.fanstatic.needs('js.jquery_datatables:responsive') -}} diff --git a/src-web/pyozwweb/app/templates/node.html b/src-web/pyozwweb/app/templates/node.html index d284d2fc..585ef862 100755 --- a/src-web/pyozwweb/app/templates/node.html +++ b/src-web/pyozwweb/app/templates/node.html @@ -1,5 +1,3 @@ -{{- g.fanstatic.needs('js.bootstrap:bootstrap') -}} -{{- g.fanstatic.needs('js.bootstrap:bootstrap_theme') -}} {{- g.fanstatic.needs('js.jquery:jquery') -}} {{- g.fanstatic.needs('js.jquery_datatables:jquery_datatables') -}} {{- g.fanstatic.needs('js.jquery_datatables:responsive') -}} diff --git a/src-web/pyozwweb/app/templates/scenes.html b/src-web/pyozwweb/app/templates/scenes.html index d378c16f..29fecb70 100755 --- a/src-web/pyozwweb/app/templates/scenes.html +++ b/src-web/pyozwweb/app/templates/scenes.html @@ -1,5 +1,3 @@ -{{- g.fanstatic.needs('js.bootstrap:bootstrap') -}} -{{- g.fanstatic.needs('js.bootstrap:bootstrap_theme') -}} {{- g.fanstatic.needs('js.jquery:jquery') -}} {{- g.fanstatic.needs('js.jquery_datatables:jquery_datatables') -}} {{- g.fanstatic.needs('js.jquery_datatables:responsive') -}} diff --git a/src-web/pyozwweb/app/templates/values.html b/src-web/pyozwweb/app/templates/values.html index 16146ae4..047b39c0 100755 --- a/src-web/pyozwweb/app/templates/values.html +++ b/src-web/pyozwweb/app/templates/values.html @@ -1,5 +1,3 @@ -{{- g.fanstatic.needs('js.bootstrap:bootstrap') -}} -{{- g.fanstatic.needs('js.bootstrap:bootstrap_theme') -}} {{- g.fanstatic.needs('js.jquery:jquery') -}} {{- g.fanstatic.needs('js.jquery_datatables:jquery_datatables') -}} {{- g.fanstatic.needs('js.jquery_datatables:responsive') -}} diff --git a/src-web/pyozwweb/app/views.py b/src-web/pyozwweb/app/views.py index 10ca125b..54d359e4 100755 --- a/src-web/pyozwweb/app/views.py +++ b/src-web/pyozwweb/app/views.py @@ -35,6 +35,8 @@ """ __author__ = 'Sébastien GALLET aka bibi21000' __email__ = 'bibi21000@gmail.com' +from gevent import monkey +monkey.patch_all() import os, sys import time diff --git a/src-web/pyozwweb/config.py b/src-web/pyozwweb/config.py index dea017a8..16110414 100644 --- a/src-web/pyozwweb/config.py +++ b/src-web/pyozwweb/config.py @@ -46,7 +46,11 @@ class Config(object): RELOADER = False DATABASE_URI = 'sqlite://:memory:' + HOST = "127.0.0.1" + PORT = 5000 + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' SECRET_KEY = 'This string will be replaced with a proper key in production.' diff --git a/src-web/pyozwweb/run.py b/src-web/pyozwweb/run.py index 84443004..5aa31850 100755 --- a/src-web/pyozwweb/run.py +++ b/src-web/pyozwweb/run.py @@ -27,7 +27,11 @@ """ __author__ = 'Sébastien GALLET aka bibi21000' __email__ = 'bibi21000@gmail.com' - +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass from pyozwweb.app import create_app, run_app def main(): From cab906787963e50ece72a69284f13b033fa3b3d0 Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Sun, 3 May 2015 16:27:44 +0200 Subject: [PATCH 05/14] Auto-merge from master --- CHANGELOG.txt | 5 +++++ Makefile | 3 ++- setup-web.py | 1 + tests/api/test_controller.py | 34 +++++++++++++++++++++++++++++++++- tests/api/test_nodes.py | 21 ++++++++++----------- 5 files changed, 51 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index bc1aefa8..228ea612 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -12,10 +12,15 @@ To do for python-openzwave 0.3.0-final : normally. But there seems to be 2 running instances of the network. + * When updating config.py for pyozwweb, need to python setup- + web.py install again ... need to change this. Add a config file. + python-openzwave 0.3.0-alpha4: * Add pyozwman script : after installing you can launch it wit : Usage: ozwsh [--device=/dev/ttyUSB0] [--log=Debug] ... + * Add pyozwweb confiuration file. + python-openzwave 0.3.0-alpha3: * Fix bug in start/stop in network. diff --git a/Makefile b/Makefile index d402a682..b10a8a3a 100644 --- a/Makefile +++ b/Makefile @@ -178,7 +178,7 @@ docs: clean-docs #$(NOSE) $(NOSEOPTS) tests/ -cp docs/html/nosetests/* docs/joomla/nosetests -cp docs/html/coverage/* docs/joomla/coverage - -$(PYLINT) --output-format=html $(PYLINTOPTS) src-lib/libopenzwave/ src-api/openzwave/ >docs/html/pylint/report.html + -$(PYLINT) --output-format=html $(PYLINTOPTS) src-lib/libopenzwave/ src-api/openzwave/ src-manager/pyozwman/ src-web/pyozwweb/>docs/html/pylint/report.html -cp docs/html/pylint/* docs/joomla/pylint/ cd docs && make docs cp docs/README.rst README.rst @@ -264,6 +264,7 @@ $(ARCHDIR): cp -Rf src-manager/pyozwman $(ARCHDIR)/src-manager cp -Rf src-manager/scripts $(ARCHDIR)/src-manager cp -Rf src-web/pyozwweb $(ARCHDIR)/src-web + cp -Rf examples $(ARCHDIR) -find $(ARCHDIR) -name \*.pyc -delete -find $(ARCHDIR) -name zwcfg_\*.xml -delete -find $(ARCHDIR) -name OZW_Log.log -delete diff --git a/setup-web.py b/setup-web.py index 8386f6ca..eb1ba8be 100644 --- a/setup-web.py +++ b/setup-web.py @@ -64,6 +64,7 @@ 'gevent-socketio >= 0.3.6', 'Flask-SocketIO >= 0.6.0', 'js.socketio < 1.0.0', + 'PyYAML >= 3.10', ], #include_package_data=True, package_data={ diff --git a/tests/api/test_controller.py b/tests/api/test_controller.py index 039f834d..02b59900 100644 --- a/tests/api/test_controller.py +++ b/tests/api/test_controller.py @@ -143,10 +143,42 @@ def test_820_controller_node_generic(self): self.assertEqual(type(self.network.controller.node.security), type(0)) self.assertTrue(self.network.controller.node.security >= 0) - def notest_910_controller_node_refresh(self): + def test_830_controller_node_refresh(self): #self.wait_for_queue() self.assertTrue(self.network.controller.node.refresh_info()) + def louie_controller_stats(self, controller, stats): + self.stats_received = stats + + def test_910_controller_stats_poll(self): + self.stats_received = None + dispatcher.connect(self.louie_controller_stats, ZWaveController.SIGNAL_CONTROLLER_STATS) + self.network.controller.poll_stats = 10 + for i in range(0,12): + #print("self.ctrl_command_result = %s" % self.ctrl_command_result) + if self.stats_received is not None: + break + else: + time.sleep(1.0) + self.assertEqual(type(self.stats_received), type({})) + self.stats_received = None + for i in range(0,12): + #print("self.ctrl_command_result = %s" % self.ctrl_command_result) + if self.stats_received is not None: + break + else: + time.sleep(1.0) + self.assertEqual(type(self.stats_received), type({})) + self.network.controller.poll_stats = 0 + self.stats_received = None + for i in range(0,15): + #print("self.ctrl_command_result = %s" % self.ctrl_command_result) + if self.stats_received is not None: + break + else: + time.sleep(1.0) + self.assertEqual(self.stats_received, None) + if __name__ == '__main__': sys.argv.append('-v') unittest.main() diff --git a/tests/api/test_nodes.py b/tests/api/test_nodes.py index ee070f68..bb851334 100644 --- a/tests/api/test_nodes.py +++ b/tests/api/test_nodes.py @@ -75,17 +75,6 @@ def test_200_nodes_to_dict(self): res = None self.assertNotEqual(res, None) - def test_200_nodes_to_dict(self): - for node in self.network.nodes: - try : - nodes = self.network.nodes[node].to_dict() - self.assertEqual(type(nodes), type({})) - res = json.dumps(nodes) - except TypeError: - res = None - self.assertNotEqual(res, None) - - def test_210_controller_to_dict(self): try : nodes = self.network.controller.to_dict() @@ -95,6 +84,16 @@ def test_210_controller_to_dict(self): res = None self.assertNotEqual(res, None) + def test_220_nodes_groups_to_dict(self): + for node in self.network.nodes: + try : + groups = self.network.nodes[node].groups_to_dict() + self.assertEqual(type(groups), type({})) + res = json.dumps(groups) + except TypeError: + res = None + self.assertNotEqual(res, None) + if __name__ == '__main__': sys.argv.append('-v') unittest.main() From 4b43097847581680c52c5991ed887cb9eee42967 Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Sun, 3 May 2015 16:36:06 +0200 Subject: [PATCH 06/14] Auto-merge from master --- .../html/coverage/pyozwman_ozwsh_widgets.html | 895 +- docs/html/nosetests/nosetests.html | 325 +- docs/html/pylint/report.html | 12436 +++++++++++++++- .../coverage/pyozwman_ozwsh_widgets.html | 895 +- docs/joomla/nosetests/nosetests.html | 325 +- docs/joomla/pylint/report.html | 12436 +++++++++++++++- 6 files changed, 27186 insertions(+), 126 deletions(-) diff --git a/docs/html/coverage/pyozwman_ozwsh_widgets.html b/docs/html/coverage/pyozwman_ozwsh_widgets.html index 2dec1f0b..cdc7b5a7 100644 --- a/docs/html/coverage/pyozwman_ozwsh_widgets.html +++ b/docs/html/coverage/pyozwman_ozwsh_widgets.html @@ -6,11 +6,15 @@ <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD Coverage for pyozwman.ozwsh_widgets: 16% ======= Coverage for pyozwman.ozwsh_widgets: 24% >>>>>>> master +======= + Coverage for pyozwman.ozwsh_widgets: 34% +>>>>>>> master ======= Coverage for pyozwman.ozwsh_widgets: 34% >>>>>>> master @@ -30,6 +34,7 @@

    Coverage for pyozwman.ozwsh_widgets : <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD 16%

    @@ -47,6 +52,15 @@

    336 run 1057 missing >>>>>>> master +======= + 34% +

    + +

    + 1398 statements   + 473 run + 925 missing +>>>>>>> master ======= 34%

    @@ -193,6 +207,7 @@

    66

    67

    <<<<<<< HEAD +<<<<<<< HEAD

    68

    >>>>>>> master

    69

    @@ -202,6 +217,11 @@

    69

    70

    >>>>>>> master +======= +

    68

    +

    69

    +

    70

    +>>>>>>> master

    71

    72

    <<<<<<< HEAD @@ -282,6 +302,7 @@

    108

    109

    <<<<<<< HEAD +<<<<<<< HEAD

    110

    >>>>>>> master

    111

    @@ -309,6 +330,8 @@

    115

    116

    ======= +======= +>>>>>>> master

    110

    111

    112

    @@ -316,6 +339,9 @@

    114

    115

    116

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    117

    118

    @@ -331,11 +357,15 @@

    128

    129

    <<<<<<< HEAD +<<<<<<< HEAD

    130

    >>>>>>> master =======

    130

    >>>>>>> master +======= +

    130

    +>>>>>>> master

    131

    132

    133

    @@ -349,6 +379,7 @@

    140

    141

    142

    +<<<<<<< HEAD

    143

    144

    145

    @@ -388,6 +419,8 @@

    140

    141

    142

    +======= +>>>>>>> master

    143

    144

    145

    @@ -421,16 +454,21 @@

    173

    174

    <<<<<<< HEAD +<<<<<<< HEAD

    175

    >>>>>>> master =======

    175

    >>>>>>> master +======= +

    175

    +>>>>>>> master

    176

    177

    178

    179

    <<<<<<< HEAD +<<<<<<< HEAD

    180

    181

    182

    @@ -453,10 +491,15 @@

    198

    ======= ======= +======= +>>>>>>> master

    180

    181

    182

    183

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    184

    185

    @@ -482,6 +525,7 @@

    204

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    205

    206

    207

    @@ -532,6 +576,9 @@

    =======

    205

    >>>>>>> master +======= +

    205

    +>>>>>>> master

    206

    207

    208

    @@ -569,6 +616,7 @@

    240

    241

    <<<<<<< HEAD +<<<<<<< HEAD

    242

    243

    244

    @@ -601,11 +649,44 @@

    269

    270

    271

    +======= +

    242

    +

    243

    +

    244

    +

    245

    +

    246

    +

    247

    +

    248

    +

    249

    +

    250

    +

    251

    +

    252

    +

    253

    +

    254

    +

    255

    +

    256

    +

    257

    +

    258

    +

    259

    +

    260

    +

    261

    +

    262

    +

    263

    +

    264

    +

    265

    +

    266

    +

    267

    +

    268

    +

    269

    +

    270

    +

    271

    +>>>>>>> master

    272

    273

    274

    275

    276

    +<<<<<<< HEAD

    277

    278

    279

    @@ -685,6 +766,23 @@

    289

    290

    291

    +======= +

    277

    +

    278

    +

    279

    +

    280

    +

    281

    +

    282

    +

    283

    +

    284

    +

    285

    +

    286

    +

    287

    +

    288

    +

    289

    +

    290

    +

    291

    +>>>>>>> master

    292

    293

    294

    @@ -695,11 +793,15 @@

    299

    300

    <<<<<<< HEAD +<<<<<<< HEAD

    301

    >>>>>>> master =======

    301

    >>>>>>> master +======= +

    301

    +>>>>>>> master

    302

    303

    304

    @@ -719,16 +821,21 @@

    310

    311

    <<<<<<< HEAD +<<<<<<< HEAD

    312

    >>>>>>> master =======

    312

    >>>>>>> master +======= +

    312

    +>>>>>>> master

    313

    314

    315

    316

    <<<<<<< HEAD +<<<<<<< HEAD

    317

    <<<<<<< HEAD

    318

    @@ -779,6 +886,10 @@

    317

    318

    >>>>>>> master +======= +

    317

    +

    318

    +>>>>>>> master

    319

    320

    321

    @@ -815,6 +926,7 @@

    352

    353

    <<<<<<< HEAD +<<<<<<< HEAD

    354

    355

    356

    @@ -852,6 +964,19 @@

    363

    364

    >>>>>>> master +======= +

    354

    +

    355

    +

    356

    +

    357

    +

    358

    +

    359

    +

    360

    +

    361

    +

    362

    +

    363

    +

    364

    +>>>>>>> master

    365

    366

    367

    @@ -863,6 +988,7 @@

    373

    374

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    375

    ======= @@ -875,11 +1001,18 @@

    <<<<<<< HEAD ======= >>>>>>> master +======= +

    375

    +

    376

    +

    377

    +

    378

    +>>>>>>> master

    379

    380

    381

    382

    <<<<<<< HEAD +<<<<<<< HEAD

    383

    384

    385

    @@ -918,6 +1051,17 @@

    399

    400

    ======= +======= +

    383

    +

    384

    +

    385

    +

    386

    +

    387

    +

    388

    +

    389

    +

    390

    +

    391

    +>>>>>>> master

    392

    393

    394

    @@ -928,11 +1072,15 @@

    399

    400

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    401

    =======

    401

    >>>>>>> master +======= +

    401

    +>>>>>>> master

    402

    403

    404

    @@ -949,6 +1097,7 @@

    411

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    412

    413

    414

    @@ -965,6 +1114,12 @@

    414

    415

    >>>>>>> master +======= +

    412

    +

    413

    +

    414

    +

    415

    +>>>>>>> master

    416

    417

    418

    @@ -981,6 +1136,7 @@

    428

    429

    430

    +<<<<<<< HEAD

    431

    432

    433

    @@ -999,9 +1155,30 @@

    446

    447

    448

    +======= +

    431

    +

    432

    +

    433

    +

    434

    +

    435

    +

    436

    +

    437

    +

    438

    +

    439

    +

    440

    +

    441

    +

    442

    +

    443

    +

    444

    +

    445

    +

    446

    +

    447

    +

    448

    +>>>>>>> master

    449

    450

    451

    +<<<<<<< HEAD

    452

    453

    454

    @@ -1038,6 +1215,8 @@

    449

    450

    451

    +======= +>>>>>>> master

    452

    453

    454

    @@ -1065,11 +1244,15 @@

    467

    468

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    469

    =======

    469

    >>>>>>> master +======= +

    469

    +>>>>>>> master

    470

    471

    472

    @@ -1123,6 +1306,7 @@

    495

    496

    <<<<<<< HEAD +<<<<<<< HEAD

    497

    >>>>>>> master

    498

    @@ -1207,6 +1391,25 @@

    512

    513

    >>>>>>> master +======= +

    497

    +

    498

    +

    499

    +

    500

    +

    501

    +

    502

    +

    503

    +

    504

    +

    505

    +

    506

    +

    507

    +

    508

    +

    509

    +

    510

    +

    511

    +

    512

    +

    513

    +>>>>>>> master

    514

    515

    516

    @@ -1257,6 +1460,7 @@

    560

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    561

    562

    563

    @@ -1297,6 +1501,9 @@

    =======

    561

    >>>>>>> master +======= +

    561

    +>>>>>>> master

    562

    563

    564

    @@ -1338,6 +1545,7 @@

    599

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    600

    601

    ======= @@ -1347,10 +1555,15 @@

    602

    603

    ======= +======= +>>>>>>> master

    600

    601

    602

    603

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    604

    605

    @@ -1361,16 +1574,21 @@

    =======

    608

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    609

    =======

    609

    >>>>>>> master +======= +

    609

    +>>>>>>> master

    610

    611

    612

    613

    <<<<<<< HEAD +<<<<<<< HEAD

    614

    615

    616

    @@ -1388,11 +1606,19 @@

    616

    617

    618

    +======= +

    614

    +

    615

    +

    616

    +

    617

    +

    618

    +>>>>>>> master

    619

    620

    621

    622

    <<<<<<< HEAD +<<<<<<< HEAD

    623

    624

    >>>>>>> master @@ -1400,11 +1626,16 @@

    626

    627

    ======= +======= +>>>>>>> master

    623

    624

    625

    626

    627

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    628

    629

    @@ -1419,6 +1650,7 @@

    638

    639

    <<<<<<< HEAD +<<<<<<< HEAD

    640

    <<<<<<< HEAD

    641

    @@ -1456,6 +1688,9 @@

    =======

    640

    >>>>>>> master +======= +

    640

    +>>>>>>> master

    641

    642

    643

    @@ -1492,6 +1727,7 @@

    673

    674

    <<<<<<< HEAD +<<<<<<< HEAD

    675

    676

    <<<<<<< HEAD @@ -1533,22 +1769,6 @@

    712

    713

    714

    -

    715

    -

    716

    -

    717

    -

    718

    -

    719

    -

    720

    -

    721

    -

    722

    -

    723

    -

    724

    -

    725

    -======= -

    677

    -

    678

    -

    679

    -

    680

    =======

    675

    676

    @@ -1556,7 +1776,6 @@

    678

    679

    680

    ->>>>>>> master

    681

    682

    683

    @@ -1591,15 +1810,78 @@

    712

    713

    714

    +>>>>>>> master

    715

    -

    716

    +

    716

    717

    +<<<<<<< HEAD +

    718

    +

    719

    +

    720

    +

    721

    +

    722

    +

    723

    +

    724

    +

    725

    +======= +

    677

    +

    678

    +

    679

    +

    680

    +======= +

    675

    +

    676

    +

    677

    +

    678

    +

    679

    +

    680

    +>>>>>>> master +

    681

    +

    682

    +

    683

    +

    684

    +

    685

    +

    686

    +

    687

    +

    688

    +

    689

    +

    690

    +

    691

    +

    692

    +

    693

    +

    694

    +

    695

    +

    696

    +

    697

    +

    698

    +

    699

    +

    700

    +

    701

    +

    702

    +

    703

    +

    704

    +

    705

    +

    706

    +

    707

    +

    708

    +

    709

    +

    710

    +

    711

    +

    712

    +

    713

    +

    714

    +

    715

    +

    716

    +

    717

    +======= +>>>>>>> master

    718

    719

    720

    721

    722

    <<<<<<< HEAD +<<<<<<< HEAD

    723

    724

    725

    @@ -1610,6 +1892,8 @@

    729

    730

    ======= +======= +>>>>>>> master

    723

    724

    725

    @@ -1618,6 +1902,9 @@

    728

    729

    730

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    731

    <<<<<<< HEAD @@ -1651,11 +1938,15 @@

    744

    745

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    746

    =======

    746

    >>>>>>> master +======= +

    746

    +>>>>>>> master

    747

    748

    749

    @@ -1667,12 +1958,16 @@

    755

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master

    756

    757

    758

    759

    760

    761

    +<<<<<<< HEAD

    762

    763

    764

    @@ -1690,6 +1985,8 @@

    759

    760

    761

    +======= +>>>>>>> master

    762

    763

    764

    @@ -1708,6 +2005,7 @@

    776

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    777

    778

    779

    @@ -1719,6 +2017,9 @@

    =======

    777

    >>>>>>> master +======= +

    777

    +>>>>>>> master

    778

    779

    780

    @@ -1730,6 +2031,7 @@

    785

    786

    <<<<<<< HEAD +<<<<<<< HEAD

    787

    <<<<<<< HEAD

    788

    @@ -1744,6 +2046,9 @@

    =======

    787

    >>>>>>> master +======= +

    787

    +>>>>>>> master

    788

    789

    790

    @@ -1751,22 +2056,29 @@

    792

    793

    <<<<<<< HEAD +<<<<<<< HEAD

    794

    795

    >>>>>>> master

    796

    797

    ======= +======= +>>>>>>> master

    794

    795

    796

    797

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    798

    799

    800

    801

    <<<<<<< HEAD +<<<<<<< HEAD

    802

    803

    804

    @@ -1839,6 +2151,24 @@

    815

    816

    817

    +======= +

    802

    +

    803

    +

    804

    +

    805

    +

    806

    +

    807

    +

    808

    +

    809

    +

    810

    +

    811

    +

    812

    +

    813

    +

    814

    +

    815

    +

    816

    +

    817

    +>>>>>>> master

    818

    819

    820

    @@ -1887,6 +2217,7 @@

    862

    863

    <<<<<<< HEAD +<<<<<<< HEAD

    864

    <<<<<<< HEAD

    865

    @@ -1910,6 +2241,15 @@

    869

    870

    >>>>>>> master +======= +

    864

    +

    865

    +

    866

    +

    867

    +

    868

    +

    869

    +

    870

    +>>>>>>> master

    871

    872

    873

    @@ -1917,12 +2257,15 @@

    <<<<<<< HEAD

    875

    876

    +<<<<<<< HEAD

    877

    878

    879

    =======

    875

    876

    +======= +>>>>>>> master

    877

    878

    879

    @@ -1935,6 +2278,7 @@

    885

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    886

    =======

    886

    @@ -1942,12 +2286,16 @@

    =======

    886

    >>>>>>> master +======= +

    886

    +>>>>>>> master

    887

    888

    889

    890

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    891

    892

    893

    @@ -2020,12 +2368,17 @@

    895

    896

    ======= +======= +>>>>>>> master

    891

    892

    893

    894

    895

    896

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    897

    898

    @@ -2082,6 +2435,7 @@

    949

    950

    <<<<<<< HEAD +<<<<<<< HEAD

    951

    952

    953

    @@ -2127,6 +2481,8 @@

    =======

    961

    ======= +======= +>>>>>>> master

    951

    952

    953

    @@ -2138,6 +2494,9 @@

    959

    960

    961

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    962

    963

    @@ -2178,6 +2537,7 @@

    997

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    998

    999

    1000

    @@ -2190,6 +2550,9 @@

    =======

    998

    >>>>>>> master +======= +

    998

    +>>>>>>> master

    999

    1000

    1001

    @@ -2201,6 +2564,7 @@

    1006

    1007

    <<<<<<< HEAD +<<<<<<< HEAD

    1008

    1009

    <<<<<<< HEAD @@ -2234,10 +2598,15 @@

    1010

    1011

    ======= +======= +>>>>>>> master

    1008

    1009

    1010

    1011

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1012

    1013

    @@ -2273,6 +2642,7 @@

    1042

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1043

    =======

    1043

    @@ -2284,6 +2654,11 @@

    1044

    1045

    >>>>>>> master +======= +

    1043

    +

    1044

    +

    1045

    +>>>>>>> master

    1046

    1047

    <<<<<<< HEAD @@ -2317,11 +2692,15 @@

    1060

    1061

    <<<<<<< HEAD +<<<<<<< HEAD

    1062

    >>>>>>> master =======

    1062

    >>>>>>> master +======= +

    1062

    +>>>>>>> master

    1063

    1064

    1065

    @@ -2342,11 +2721,15 @@

    1074

    1075

    <<<<<<< HEAD +<<<<<<< HEAD

    1076

    >>>>>>> master =======

    1076

    >>>>>>> master +======= +

    1076

    +>>>>>>> master

    1077

    1078

    1079

    @@ -2367,11 +2750,15 @@

    1088

    1089

    <<<<<<< HEAD +<<<<<<< HEAD

    1090

    >>>>>>> master =======

    1090

    >>>>>>> master +======= +

    1090

    +>>>>>>> master

    1091

    1092

    1093

    @@ -2404,6 +2791,7 @@

    1116

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1117

    1118

    1119

    @@ -2460,6 +2848,16 @@

    1122

    1123

    1124

    +======= +

    1117

    +

    1118

    +

    1119

    +

    1120

    +

    1121

    +

    1122

    +

    1123

    +

    1124

    +>>>>>>> master

    1125

    1126

    1127

    @@ -2467,6 +2865,9 @@

    1129

    1130

    1131

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1132

    1133

    @@ -2485,11 +2886,15 @@

    1146

    1147

    <<<<<<< HEAD +<<<<<<< HEAD

    1148

    >>>>>>> master =======

    1148

    >>>>>>> master +======= +

    1148

    +>>>>>>> master

    1149

    1150

    1151

    @@ -2499,6 +2904,7 @@

    1154

    1155

    1156

    +<<<<<<< HEAD

    1157

    1158

    1159

    @@ -2599,6 +3005,34 @@

    1180

    1181

    1182

    +======= +

    1157

    +

    1158

    +

    1159

    +

    1160

    +

    1161

    +

    1162

    +

    1163

    +

    1164

    +

    1165

    +

    1166

    +

    1167

    +

    1168

    +

    1169

    +

    1170

    +

    1171

    +

    1172

    +

    1173

    +

    1174

    +

    1175

    +

    1176

    +

    1177

    +

    1178

    +

    1179

    +

    1180

    +

    1181

    +

    1182

    +>>>>>>> master

    1183

    1184

    1185

    @@ -2647,6 +3081,7 @@

    1227

    1228

    <<<<<<< HEAD +<<<<<<< HEAD

    1229

    <<<<<<< HEAD

    1230

    @@ -2666,6 +3101,13 @@

    1232

    1233

    >>>>>>> master +======= +

    1229

    +

    1230

    +

    1231

    +

    1232

    +

    1233

    +>>>>>>> master

    1234

    1235

    1236

    @@ -2687,6 +3129,7 @@

    1243

    1244

    <<<<<<< HEAD +<<<<<<< HEAD

    1245

    1246

    >>>>>>> master @@ -2694,6 +3137,10 @@

    1245

    1246

    >>>>>>> master +======= +

    1245

    +

    1246

    +>>>>>>> master

    1247

    1248

    1249

    @@ -2708,6 +3155,7 @@

    1257

    1258

    1259

    +<<<<<<< HEAD

    1260

    1261

    1262

    @@ -2732,9 +3180,36 @@

    1281

    1282

    1283

    +======= +

    1260

    +

    1261

    +

    1262

    +

    1263

    +

    1264

    +

    1265

    +

    1266

    +

    1267

    +

    1268

    +

    1269

    +

    1270

    +

    1271

    +

    1272

    +

    1273

    +

    1274

    +

    1275

    +

    1276

    +

    1277

    +

    1278

    +

    1279

    +

    1280

    +

    1281

    +

    1282

    +

    1283

    +>>>>>>> master

    1284

    1285

    1286

    +<<<<<<< HEAD

    1287

    1288

    1289

    @@ -2790,6 +3265,10 @@

    1295

    1296

    ======= +======= +

    1287

    +

    1288

    +>>>>>>> master

    1289

    1290

    1291

    @@ -2798,6 +3277,9 @@

    1294

    1295

    1296

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1297

    <<<<<<< HEAD @@ -2821,11 +3303,15 @@

    1308

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master

    1309

    1310

    1311

    1312

    1313

    +<<<<<<< HEAD

    1314

    1315

    1316

    @@ -2835,6 +3321,17 @@

    1320

    1321

    1322

    +======= +

    1314

    +

    1315

    +

    1316

    +

    1317

    +

    1318

    +

    1319

    +

    1320

    +

    1321

    +

    1322

    +>>>>>>> master

    1323

    1324

    1325

    @@ -2871,6 +3368,9 @@

    1332

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    1333

    @@ -2879,6 +3379,7 @@

    1336

    1337

    <<<<<<< HEAD +<<<<<<< HEAD

    1338

    =======

    1333

    @@ -2914,10 +3415,16 @@

    ======= =======

    1338

    +======= +

    1338

    +>>>>>>> master

    1339

    1340

    1341

    1342

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1343

    1344

    @@ -2952,11 +3459,15 @@

    1372

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master

    1373

    1374

    1375

    1376

    1377

    +<<<<<<< HEAD

    1378

    1379

    1380

    @@ -3005,6 +3516,12 @@

    1379

    1380

    1381

    +======= +

    1378

    +

    1379

    +

    1380

    +

    1381

    +>>>>>>> master

    1382

    1383

    1384

    @@ -3043,6 +3560,7 @@

    1416

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1417

    1418

    ======= @@ -3052,10 +3570,15 @@

    1419

    1420

    ======= +======= +>>>>>>> master

    1417

    1418

    1419

    1420

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1421

    1422

    @@ -3100,6 +3623,7 @@

    1440

    1441

    <<<<<<< HEAD +<<<<<<< HEAD

    1442

    1443

    >>>>>>> master @@ -3137,6 +3661,15 @@

    1447

    1448

    >>>>>>> master +======= +

    1442

    +

    1443

    +

    1444

    +

    1445

    +

    1446

    +

    1447

    +

    1448

    +>>>>>>> master

    1449

    1450

    1451

    @@ -3154,6 +3687,7 @@

    1463

    1464

    <<<<<<< HEAD +<<<<<<< HEAD

    1465

    1466

    >>>>>>> master @@ -3161,11 +3695,16 @@

    1465

    1466

    >>>>>>> master +======= +

    1465

    +

    1466

    +>>>>>>> master

    1467

    1468

    1469

    1470

    <<<<<<< HEAD +<<<<<<< HEAD

    1471

    <<<<<<< HEAD

    1472

    @@ -3237,6 +3776,10 @@

    1471

    1472

    >>>>>>> master +======= +

    1471

    +

    1472

    +>>>>>>> master

    1473

    1474

    1475

    @@ -3326,11 +3869,15 @@

    1554

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master

    1555

    1556

    1557

    1558

    1559

    +<<<<<<< HEAD

    1560

    1561

    1562

    @@ -3356,11 +3903,17 @@

    1560

    1561

    1562

    +======= +

    1560

    +

    1561

    +

    1562

    +>>>>>>> master

    1563

    1564

    1565

    1566

    <<<<<<< HEAD +<<<<<<< HEAD

    1567

    1568

    1569

    @@ -3406,6 +3959,19 @@

    1576

    1577

    >>>>>>> master +======= +

    1567

    +

    1568

    +

    1569

    +

    1570

    +

    1571

    +

    1572

    +

    1573

    +

    1574

    +

    1575

    +

    1576

    +

    1577

    +>>>>>>> master

    1578

    1579

    1580

    @@ -3423,6 +3989,7 @@

    1592

    1593

    <<<<<<< HEAD +<<<<<<< HEAD

    1594

    1595

    >>>>>>> master @@ -3430,11 +3997,16 @@

    1594

    1595

    >>>>>>> master +======= +

    1594

    +

    1595

    +>>>>>>> master

    1596

    1597

    1598

    1599

    <<<<<<< HEAD +<<<<<<< HEAD

    1600

    <<<<<<< HEAD

    1601

    @@ -3456,10 +4028,15 @@

    1602

    1603

    ======= +======= +>>>>>>> master

    1600

    1601

    1602

    1603

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1604

    1605

    @@ -3473,6 +4050,7 @@

    1613

    1614

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1615

    1616

    @@ -3480,6 +4058,13 @@

    1618

    <<<<<<< HEAD

    1619

    +======= +

    1615

    +

    1616

    +

    1617

    +

    1618

    +

    1619

    +>>>>>>> master

    1620

    1621

    1622

    @@ -3497,6 +4082,7 @@

    1634

    1635

    1636

    +<<<<<<< HEAD

    1637

    1638

    1639

    @@ -3507,18 +4093,42 @@

    1644

    1645

    1646

    -

    1647

    +

    1647

    +

    1648

    +

    1649

    +

    1650

    +

    1651

    +

    1652

    +

    1653

    +

    1654

    +

    1655

    +

    1656

    +

    1657

    +

    1658

    +======= +

    1637

    +

    1638

    +

    1639

    +

    1640

    +

    1641

    +

    1642

    +

    1643

    +

    1644

    +

    1645

    +

    1646

    +

    1647

    1648

    1649

    -

    1650

    +

    1650

    1651

    -

    1652

    +

    1652

    1653

    1654

    -

    1655

    +

    1655

    1656

    -

    1657

    -

    1658

    +

    1657

    +

    1658

    +>>>>>>> master

    1659

    1660

    1661

    @@ -3604,6 +4214,7 @@

    1682

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1683

    =======

    1683

    @@ -3611,11 +4222,15 @@

    =======

    1683

    >>>>>>> master +======= +

    1683

    +>>>>>>> master

    1684

    1685

    1686

    1687

    <<<<<<< HEAD +<<<<<<< HEAD

    1688

    <<<<<<< HEAD

    1689

    @@ -3651,6 +4266,10 @@

    1688

    1689

    >>>>>>> master +======= +

    1688

    +

    1689

    +>>>>>>> master

    1690

    1691

    1692

    @@ -3676,16 +4295,22 @@

    1712

    1713

    <<<<<<< HEAD +<<<<<<< HEAD

    1714

    1715

    >>>>>>> master

    1716

    1717

    ======= +======= +>>>>>>> master

    1714

    1715

    1716

    1717

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1718

    1719

    @@ -3728,6 +4353,7 @@

    1736

    1737

    <<<<<<< HEAD +<<<<<<< HEAD

    1738

    1739

    >>>>>>> master @@ -3764,6 +4390,15 @@

    1743

    1744

    >>>>>>> master +======= +

    1738

    +

    1739

    +

    1740

    +

    1741

    +

    1742

    +

    1743

    +

    1744

    +>>>>>>> master

    1745

    1746

    1747

    @@ -3781,11 +4416,15 @@

    1759

    1760

    <<<<<<< HEAD +<<<<<<< HEAD

    1761

    >>>>>>> master =======

    1761

    >>>>>>> master +======= +

    1761

    +>>>>>>> master

    1762

    1763

    1764

    @@ -3794,6 +4433,7 @@

    1767

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1768

    1769

    1770

    @@ -3817,6 +4457,11 @@

    1769

    1770

    >>>>>>> master +======= +

    1768

    +

    1769

    +

    1770

    +>>>>>>> master

    1771

    1772

    1773

    @@ -3829,6 +4474,7 @@

    1780

    1781

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1782

    1783

    @@ -3903,6 +4549,13 @@

    1785

    1786

    >>>>>>> master +======= +

    1782

    +

    1783

    +

    1784

    +

    1785

    +

    1786

    +>>>>>>> master

    1787

    1788

    1789

    @@ -3968,6 +4621,7 @@

    1848

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1849

    1850

    ======= @@ -3977,10 +4631,15 @@

    1851

    1852

    ======= +======= +>>>>>>> master

    1849

    1850

    1851

    1852

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1853

    1854

    @@ -3990,6 +4649,7 @@

    1857

    1858

    1859

    +<<<<<<< HEAD

    1860

    1861

    1862

    @@ -4056,6 +4716,22 @@

    1871

    1872

    1873

    +======= +

    1860

    +

    1861

    +

    1862

    +

    1863

    +

    1864

    +

    1865

    +

    1866

    +

    1867

    +

    1868

    +

    1869

    +

    1870

    +

    1871

    +

    1872

    +

    1873

    +>>>>>>> master

    1874

    1875

    1876

    @@ -4090,6 +4766,7 @@

    1905

    1906

    <<<<<<< HEAD +<<<<<<< HEAD

    1907

    >>>>>>> master

    1908

    @@ -4097,6 +4774,10 @@

    1907

    1908

    >>>>>>> master +======= +

    1907

    +

    1908

    +>>>>>>> master

    1909

    1910

    1911

    @@ -4105,6 +4786,7 @@

    1913

    1914

    1915

    +<<<<<<< HEAD

    1916

    1917

    1918

    @@ -4135,9 +4817,42 @@

    1943

    1944

    1945

    +======= +

    1916

    +

    1917

    +

    1918

    +

    1919

    +

    1920

    +

    1921

    +

    1922

    +

    1923

    +

    1924

    +

    1925

    +

    1926

    +

    1927

    +

    1928

    +

    1929

    +

    1930

    +

    1931

    +

    1932

    +

    1933

    +

    1934

    +

    1935

    +

    1936

    +

    1937

    +

    1938

    +

    1939

    +

    1940

    +

    1941

    +

    1942

    +

    1943

    +

    1944

    +

    1945

    +>>>>>>> master

    1946

    1947

    1948

    +<<<<<<< HEAD

    1949

    1950

    1951

    @@ -4178,6 +4893,8 @@

    1946

    1947

    1948

    +======= +>>>>>>> master

    1949

    1950

    1951

    @@ -4211,6 +4928,7 @@

    1974

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1975

    1976

    1977

    @@ -4221,16 +4939,23 @@

    =======

    1975

    >>>>>>> master +======= +

    1975

    +>>>>>>> master

    1976

    1977

    1978

    1979

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1980

    =======

    1980

    >>>>>>> master +======= +

    1980

    +>>>>>>> master

    1981

    1982

    1983

    @@ -4271,11 +4996,15 @@

    2011

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master

    2012

    2013

    2014

    2015

    2016

    +<<<<<<< HEAD

    2017

    2018

    2019

    @@ -4326,6 +5055,11 @@

    2017

    2018

    2019

    +======= +

    2017

    +

    2018

    +

    2019

    +>>>>>>> master

    2020

    2021

    2022

    @@ -4360,22 +5094,29 @@

    2051

    2052

    <<<<<<< HEAD +<<<<<<< HEAD

    2053

    2054

    >>>>>>> master

    2055

    2056

    ======= +======= +>>>>>>> master

    2053

    2054

    2055

    2056

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    2057

    2058

    2059

    2060

    <<<<<<< HEAD +<<<<<<< HEAD

    2061

    2062

    2063

    @@ -4453,6 +5194,31 @@

    2081

    2082

    2083

    +======= +

    2061

    +

    2062

    +

    2063

    +

    2064

    +

    2065

    +

    2066

    +

    2067

    +

    2068

    +

    2069

    +

    2070

    +

    2071

    +

    2072

    +

    2073

    +

    2074

    +

    2075

    +

    2076

    +

    2077

    +

    2078

    +

    2079

    +

    2080

    +

    2081

    +

    2082

    +

    2083

    +>>>>>>> master

    2084

    2085

    2086

    @@ -4483,6 +5249,7 @@

    2111

    2112

    <<<<<<< HEAD +<<<<<<< HEAD

    2113

    >>>>>>> master

    2114

    @@ -4490,6 +5257,10 @@

    2113

    2114

    >>>>>>> master +======= +

    2113

    +

    2114

    +>>>>>>> master

    2115

    2116

    2117

    @@ -4498,6 +5269,7 @@

    2119

    2120

    2121

    +<<<<<<< HEAD

    2122

    2123

    2124

    @@ -4511,6 +5283,21 @@

    2132

    2133

    2134

    +======= +

    2122

    +

    2123

    +

    2124

    +

    2125

    +

    2126

    +

    2127

    +

    2128

    +

    2129

    +

    2130

    +

    2131

    +

    2132

    +

    2133

    +

    2134

    +>>>>>>> master

    2135

    2136

    2137

    @@ -4548,6 +5335,7 @@

    2141

    2142

    <<<<<<< HEAD +<<<<<<< HEAD

    2143

    2144

    2145

    @@ -4558,6 +5346,8 @@

    2149

    2150

    ======= +======= +>>>>>>> master

    2143

    2144

    2145

    @@ -4566,6 +5356,9 @@

    2148

    2149

    2150

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    2151

    <<<<<<< HEAD @@ -4636,11 +5429,15 @@

    2183

    2184

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    2185

    =======

    2185

    >>>>>>> master +======= +

    2185

    +>>>>>>> master

    2186

    2187

    2188

    @@ -4658,6 +5455,7 @@

    2196

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2197

    2198

    2199

    @@ -4679,6 +5477,10 @@

    2197

    >>>>>>> master

    2198

    +======= +

    2197

    +

    2198

    +>>>>>>> master

    2199

    2200

    2201

    @@ -4692,6 +5494,7 @@

    2209

    2210

    <<<<<<< HEAD +<<<<<<< HEAD

    2211

    >>>>>>> master

    2212

    @@ -4747,12 +5550,32 @@

    2223

    2224

    2225

    +======= +

    2211

    +

    2212

    +

    2213

    +

    2214

    +

    2215

    +

    2216

    +

    2217

    +

    2218

    +

    2219

    +

    2220

    +

    2221

    +

    2222

    +

    2223

    +

    2224

    +

    2225

    +>>>>>>> master

    2226

    2227

    2228

    2229

    2230

    2231

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master @@ -4787,6 +5610,7 @@

    __author__ = 'bibi21000' 

     

    <<<<<<< HEAD +<<<<<<< HEAD

    from select import select 

    import sys 

    import os 

    @@ -4800,6 +5624,8 @@

    #from ucp import UrwidCmdProc, isUCP 

    #from utils import utilInit, log 

    ======= +======= +>>>>>>> master

    try: 

        from gevent import monkey 

        monkey.patch_all() 

    @@ -4811,6 +5637,9 @@

    import urwid 

    from urwid.raw_display import Screen 

    from traceback import format_exc 

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    from openzwave.node import ZWaveNode 

    from openzwave.value import ZWaveValue 

    @@ -4820,6 +5649,7 @@

    from openzwave.option import ZWaveOption 

    from louie import dispatcher, All 

    <<<<<<< HEAD +<<<<<<< HEAD

    #import logging 

    #from frameapp import FrameApp, DIVIDER 

     

    @@ -5434,6 +6264,8 @@

            self.subdirs.append(child) 

            self.childrens[child] = definition 

    ======= +======= +>>>>>>> master

    import logging 

     

    class OldestTree(urwid.ListWalker): 

    @@ -5450,6 +6282,9 @@

            self.lines = [] 

            self.focus, oldfocus = (0, 0) 

            self.size = 0 

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

     

        def add_child(self, child, definition): 

    @@ -5974,6 +6809,7 @@

            return True 

     

    <<<<<<< HEAD +<<<<<<< HEAD

        def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1): 

            self.id = id 

            #self.content = 'item %s: %s - %s...' % (str(id), name[:20], product_name[:20] ) 

    @@ -7664,6 +8500,8 @@

            #dispatcher.disconnect(self._louie_node_update, ZWaveNetwork.SIGNAL_NODE) 

            self.window.log.info('NodesTree _louie_network_resetted.') 

    ======= +======= +>>>>>>> master

        def keypress(self, size, key): 

            return key 

     

    @@ -7748,6 +8586,9 @@

            dispatcher.connect(self._louie_network_ready, ZWaveNetwork.SIGNAL_NETWORK_AWAKED) 

            dispatcher.connect(self._louie_network_ready, ZWaveNetwork.SIGNAL_NETWORK_READY) 

            dispatcher.connect(self._louie_network_resetted, ZWaveNetwork.SIGNAL_NETWORK_RESETTED) 

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

     

        def _louie_network_resetted(self, network): 

    @@ -9114,6 +9955,7 @@

            :rtype: str 

     

    <<<<<<< HEAD +<<<<<<< HEAD

        def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False): 

            self.id = id 

            #self.content = 'item %s: %s - %s...' % (str(id), name[:20], product_name[:20] ) 

    @@ -9309,6 +10151,8 @@

            return key 

    >>>>>>> master ======= +======= +>>>>>>> master

            """ 

            return "%s" % self.key 

     

    @@ -9507,6 +10351,9 @@

     

        def keypress(self, size, key): 

            return key 

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master diff --git a/docs/html/nosetests/nosetests.html b/docs/html/nosetests/nosetests.html index cd7dea41..04a9211c 100644 --- a/docs/html/nosetests/nosetests.html +++ b/docs/html/nosetests/nosetests.html @@ -145,8 +145,13 @@

    Unit Test Report

    +<<<<<<< HEAD

    Start Time: 2015-05-03 16:11:55

    Duration: 0:03:41.667291

    +======= +

    Start Time: 2015-05-03 16:28:27

    +

    Duration: 0:03:38.181683

    +>>>>>>> master

    Status: Pass 77

    @@ -337,6 +342,7 @@

    Unit Test Report

    +<<<<<<< HEAD @@ -356,32 +362,38 @@

    Unit Test Report

    +======= + + + +>>>>>>> master - + - + - + - + +<<<<<<< HEAD @@ -406,6 +418,20 @@

    Unit Test Report

    +======= + + + + + + + + + + + + +>>>>>>> master @@ -416,34 +442,35 @@

    Unit Test Report

    - + - + - + - + - + +<<<<<<< HEAD @@ -462,10 +489,37 @@

    Unit Test Report

    +======= + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master +<<<<<<< HEAD @@ -483,68 +537,123 @@

    Unit Test Report

    +======= + + + + + + + + + + + +>>>>>>> master +<<<<<<< HEAD +======= + + + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + + + + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD @@ -552,12 +661,22 @@

    Unit Test Report

    +======= + + + + + + + +>>>>>>> master +<<<<<<< HEAD @@ -570,6 +689,32 @@

    Unit Test Report

    +======= + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master @@ -580,58 +725,97 @@

    Unit Test Report

    +<<<<<<< HEAD +======= + + + + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master @@ -644,6 +828,7 @@

    Unit Test Report

    +<<<<<<< HEAD @@ -668,6 +853,14 @@

    Unit Test Report

    +======= + + + + + + +>>>>>>> master @@ -678,34 +871,57 @@

    Unit Test Report

    +<<<<<<< HEAD +======= + + + + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master @@ -718,10 +934,17 @@

    Unit Test Report

    +<<<<<<< HEAD +======= + + + + +>>>>>>> master @@ -734,23 +957,91 @@

    Unit Test Report

    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master @@ -762,28 +1053,28 @@

    Unit Test Report

    - + - + - + - + - + @@ -813,7 +1104,11 @@

    Unit Test Report

    +<<<<<<< HEAD +======= + +>>>>>>> master diff --git a/docs/html/pylint/report.html b/docs/html/pylint/report.html index 60ccf156..5d19d24c 100644 --- a/docs/html/pylint/report.html +++ b/docs/html/pylint/report.html @@ -32,8 +32,13 @@

    Statistics by type

    +<<<<<<< HEAD +======= + + +>>>>>>> master @@ -92,15 +97,25 @@

    Raw metrics

    +<<<<<<< HEAD +======= + + +>>>>>>> master +<<<<<<< HEAD +======= + + +>>>>>>> master @@ -113,8 +128,13 @@

    Raw metrics

    +<<<<<<< HEAD +======= + + +>>>>>>> master
    Parameters:extras ([]) – The extra inforamtions to add
    Returns:A dict
    Return type:dict()
    pass
    tests.api.test_network_start:TestNetworkStartStop 5.00
    tests.api.test_controller_command:TestControllerCommand 5.00
    tests.api.test_controller_command:TestControllerCommand7.003 3 0 0DetailDetail
    test_010_command_send_node_information_nodeid
    1.00 pass
    test_020_command_send_node_information_nodeid_controller
    3.00 pass
    test_210_command_request_node_neigbhor_update_node
    1.00 pass
    tests.api.test_switch_all:TestSwitchAll 4.00 3
    test_020_switch_all_items
    0.00tests.api.test_network_start:TestNetworkStartStop5.001100Detail
    test_000_network_start_stop
    5.00pass
    4 0 0DetailDetail
    test_010_protection_item
    0.00 pass
    test_020_protection_set_item_no_operation
    2.00 pass
    test_030_protection_set_item_unprotected
    2.00 pass
    test_050_protection_items
    0.00 pass
    tests.api.test_switch:TestSwitch 3.00 2
    test_110_switch_on_off
    3.00tests.api.test_switch_all:TestSwitchAll4.003300Detail
    test_010_switch_all_item
    0.00pass
    test_015_switch_all_set_item
    4.00pass
    test_020_switch_all_items
    0.00pass
    tests.api.autobuild.test_api:TestNetworkApi 2.04 3
    test_900_api_singleton
    tests.api.test_switch:TestSwitch3.002200Detail
    test_010_switch_state
    0.00 pass
    test_905_network_singleton
    0.00
    test_110_switch_on_off
    3.00pass
    tests.api.test_network:TestNetwork2.042.059 9 0 0Detail
    Detail
    test_000_network_awake
    0.00 pass
    test_010_network_ready
    0.00 pass
    test_100_network_test
    0.00 pass
    test_110_network_heal
    0.00 pass
    test_120_network_poll
    0.00 pass
    test_200_network_to_dict
    0.00 pass
    test_220_network_nodes_to_dict
    0.00 pass
    test_300_network_kvals_nodes
    1.07
    test_300_network_kvals_nodes
    1.08pass
    test_310_network_kvals_controller
    0.06 pass
    tests.manager.autobuild.test_manager:ManagerTest 0.07 1
    test_000_import
    0.07tests.api.autobuild.test_api:TestNetworkApi1.003300Detail
    test_000_api_network
    1.00pass
    test_900_api_singleton
    0.00pass
    test_905_network_singleton
    0.00pass
    9 0 0Detail
    Detail
    test_000_server_start
    0.02 pass
    test_001_error_404
    0.00 pass
    test_100_home_is_up
    0.00 pass
    test_200_controller_is_up
    0.00 pass
    test_300_values_is_up
    0.00 pass
    test_400_controller_is_up
    0.00 pass
    test_500_node_is_up
    0.00 pass
    test_600_map_is_up
    0.00 pass
    test_700_scenes_is_up
    0.00 pass 4 0 0Detail
    test_030_options_with_command_line
    0.00Detail
    test_000_import
    0.02pass
    5 0 0Detail
    Detail
    test_000_nodes_count
    0.00 pass
    test_100_nodes_test
    0.00 pass
    test_200_nodes_to_dict
    0.00 pass
    test_210_controller_to_dict
    0.00 pass
    test_220_nodes_groups_to_dict
    0.00 pass 1 0 0Detail
    Detail
    test_200_values_to_dict
    0.00 pass 3 0 0DetailDetail
    test_005_scene_add_remove
    0.00pass
    test_010_scenes_to_dict
    0.00pass
    test_020_scene_to_dict
    0.00pass
    tests.lib.autobuild.test_lib:TestInit0.004400Detail
    test_005_scene_add_remove
    test_000_init
    0.00 pass
    test_010_scenes_to_dict
    test_010_options_exceptions
    0.00 pass
    test_020_scene_to_dict
    test_020_options_without_command_line
    0.00pass
    test_030_options_with_command_line
    0.00pass
    tests.api.test_sensor:TestSensor0.002200Detail
    test_010_sensor_bool
    0.00pass
    test_410_sensor_decimal
    0.00 pass
    4 0 0DetailDetail
    test_010_options_string
    0.00 pass
    test_020_options_bool
    0.00 pass
    test_030_options_int
    0.00 pass
    test_040_options_generic
    0.00 pass
    Total1:15.031:15.0277 77 0
    method 531530 +1.00531=83.43 3.01
    code 5008 51.444995 +13.005008=
    docstring 3842 39.473829 +13.003842=
    comment empty 610 6.27609 +1.00610=
    @@ -130,14 +150,24 @@

    Duplication

    nb duplicated lines 2136 +<<<<<<< HEAD 2131 +5.00 +======= +2136 += +>>>>>>> master percent duplicated lines 21.409 +<<<<<<< HEAD 21.417 -0.01 +======= +21.409 += +>>>>>>> master
    @@ -153,8 +183,13 @@

    Messages by category

    convention 891 +<<<<<<< HEAD 888 +3.00 +======= +891 += +>>>>>>> master refactor @@ -165,8 +200,13 @@

    Messages by category

    warning 505 +<<<<<<< HEAD 501 +4.00 +======= +505 += +>>>>>>> master error @@ -203,8 +243,13 @@

    % errors / warnings by module

    openzwave.option 22.22 +<<<<<<< HEAD 0.00 0.00 +======= +0.00 +0.00 +>>>>>>> master 0.45 @@ -321,16 +366,29 @@

    % errors / warnings by module

    pyozwweb.app.socket.__init__ +<<<<<<< HEAD +======= +0.00 +0.20 +0.00 +0.00 + + +pyozwweb.config +>>>>>>> master 0.00 0.20 0.00 0.00 +<<<<<<< HEAD pyozwweb.config 0.00 0.00 0.00 +======= +>>>>>>> master 0.67 @@ -558,7 +616,11 @@

    Messages

    Global evaluation

    +<<<<<<< HEAD Your code has been rated at 5.35/10 (previous run: 5.35/10, -0.00)
    +======= +Your code has been rated at 5.35/10 (previous run: 5.35/10, +0.00) +>>>>>>> master

    Messages

    @@ -620,6 +682,13 @@

    Messages

    +<<<<<<< HEAD + + + + + +======= @@ -685,6 +754,185 @@

    Messages

    +>>>>>>> master + + + + + + + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -828,7 +1076,7 @@

    Messages

    - + @@ -844,7 +1092,7 @@

    Messages

    - + @@ -2674,6 +2922,7 @@

    Messages

    +<<<<<<< HEAD @@ -2693,6 +2942,36 @@

    Messages

    +======= + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + +======= + + + + + + + + + + + + + @@ -14246,30 +14525,12109 @@

    Messages

    """ __author__ = 'Sébastien GALLET aka bibi21000' __email__ = 'bibi21000@gmail.com' -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -import os, sys -import time -from threading import Thread -from flask import Flask, render_template, session, request, current_app -from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect - -import libopenzwave -import openzwave -from openzwave.node import ZWaveNode -from openzwave.value import ZWaveValue -from openzwave.scene import ZWaveScene -from openzwave.controller import ZWaveController -from openzwave.network import ZWaveNetwork -from openzwave.option import ZWaveOption -from louie import dispatcher, All -from pyozwweb.app import socketio, app +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) -import logging +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + +<<<<<<< HEAD + + +======= + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + +<<<<<<< HEAD + + +======= + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + + + + + + + +======= +>>>>>>> master diff --git a/docs/joomla/coverage/pyozwman_ozwsh_widgets.html b/docs/joomla/coverage/pyozwman_ozwsh_widgets.html index 2dec1f0b..cdc7b5a7 100644 --- a/docs/joomla/coverage/pyozwman_ozwsh_widgets.html +++ b/docs/joomla/coverage/pyozwman_ozwsh_widgets.html @@ -6,11 +6,15 @@ <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD Coverage for pyozwman.ozwsh_widgets: 16% ======= Coverage for pyozwman.ozwsh_widgets: 24% >>>>>>> master +======= + Coverage for pyozwman.ozwsh_widgets: 34% +>>>>>>> master ======= Coverage for pyozwman.ozwsh_widgets: 34% >>>>>>> master @@ -30,6 +34,7 @@

    Coverage for pyozwman.ozwsh_widgets : <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD 16%

    @@ -47,6 +52,15 @@

    336 run 1057 missing >>>>>>> master +======= + 34% +

    + +

    + 1398 statements   + 473 run + 925 missing +>>>>>>> master ======= 34%

    @@ -193,6 +207,7 @@

    66

    67

    <<<<<<< HEAD +<<<<<<< HEAD

    68

    >>>>>>> master

    69

    @@ -202,6 +217,11 @@

    69

    70

    >>>>>>> master +======= +

    68

    +

    69

    +

    70

    +>>>>>>> master

    71

    72

    <<<<<<< HEAD @@ -282,6 +302,7 @@

    108

    109

    <<<<<<< HEAD +<<<<<<< HEAD

    110

    >>>>>>> master

    111

    @@ -309,6 +330,8 @@

    115

    116

    ======= +======= +>>>>>>> master

    110

    111

    112

    @@ -316,6 +339,9 @@

    114

    115

    116

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    117

    118

    @@ -331,11 +357,15 @@

    128

    129

    <<<<<<< HEAD +<<<<<<< HEAD

    130

    >>>>>>> master =======

    130

    >>>>>>> master +======= +

    130

    +>>>>>>> master

    131

    132

    133

    @@ -349,6 +379,7 @@

    140

    141

    142

    +<<<<<<< HEAD

    143

    144

    145

    @@ -388,6 +419,8 @@

    140

    141

    142

    +======= +>>>>>>> master

    143

    144

    145

    @@ -421,16 +454,21 @@

    173

    174

    <<<<<<< HEAD +<<<<<<< HEAD

    175

    >>>>>>> master =======

    175

    >>>>>>> master +======= +

    175

    +>>>>>>> master

    176

    177

    178

    179

    <<<<<<< HEAD +<<<<<<< HEAD

    180

    181

    182

    @@ -453,10 +491,15 @@

    198

    ======= ======= +======= +>>>>>>> master

    180

    181

    182

    183

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    184

    185

    @@ -482,6 +525,7 @@

    204

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    205

    206

    207

    @@ -532,6 +576,9 @@

    =======

    205

    >>>>>>> master +======= +

    205

    +>>>>>>> master

    206

    207

    208

    @@ -569,6 +616,7 @@

    240

    241

    <<<<<<< HEAD +<<<<<<< HEAD

    242

    243

    244

    @@ -601,11 +649,44 @@

    269

    270

    271

    +======= +

    242

    +

    243

    +

    244

    +

    245

    +

    246

    +

    247

    +

    248

    +

    249

    +

    250

    +

    251

    +

    252

    +

    253

    +

    254

    +

    255

    +

    256

    +

    257

    +

    258

    +

    259

    +

    260

    +

    261

    +

    262

    +

    263

    +

    264

    +

    265

    +

    266

    +

    267

    +

    268

    +

    269

    +

    270

    +

    271

    +>>>>>>> master

    272

    273

    274

    275

    276

    +<<<<<<< HEAD

    277

    278

    279

    @@ -685,6 +766,23 @@

    289

    290

    291

    +======= +

    277

    +

    278

    +

    279

    +

    280

    +

    281

    +

    282

    +

    283

    +

    284

    +

    285

    +

    286

    +

    287

    +

    288

    +

    289

    +

    290

    +

    291

    +>>>>>>> master

    292

    293

    294

    @@ -695,11 +793,15 @@

    299

    300

    <<<<<<< HEAD +<<<<<<< HEAD

    301

    >>>>>>> master =======

    301

    >>>>>>> master +======= +

    301

    +>>>>>>> master

    302

    303

    304

    @@ -719,16 +821,21 @@

    310

    311

    <<<<<<< HEAD +<<<<<<< HEAD

    312

    >>>>>>> master =======

    312

    >>>>>>> master +======= +

    312

    +>>>>>>> master

    313

    314

    315

    316

    <<<<<<< HEAD +<<<<<<< HEAD

    317

    <<<<<<< HEAD

    318

    @@ -779,6 +886,10 @@

    317

    318

    >>>>>>> master +======= +

    317

    +

    318

    +>>>>>>> master

    319

    320

    321

    @@ -815,6 +926,7 @@

    352

    353

    <<<<<<< HEAD +<<<<<<< HEAD

    354

    355

    356

    @@ -852,6 +964,19 @@

    363

    364

    >>>>>>> master +======= +

    354

    +

    355

    +

    356

    +

    357

    +

    358

    +

    359

    +

    360

    +

    361

    +

    362

    +

    363

    +

    364

    +>>>>>>> master

    365

    366

    367

    @@ -863,6 +988,7 @@

    373

    374

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    375

    ======= @@ -875,11 +1001,18 @@

    <<<<<<< HEAD ======= >>>>>>> master +======= +

    375

    +

    376

    +

    377

    +

    378

    +>>>>>>> master

    379

    380

    381

    382

    <<<<<<< HEAD +<<<<<<< HEAD

    383

    384

    385

    @@ -918,6 +1051,17 @@

    399

    400

    ======= +======= +

    383

    +

    384

    +

    385

    +

    386

    +

    387

    +

    388

    +

    389

    +

    390

    +

    391

    +>>>>>>> master

    392

    393

    394

    @@ -928,11 +1072,15 @@

    399

    400

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    401

    =======

    401

    >>>>>>> master +======= +

    401

    +>>>>>>> master

    402

    403

    404

    @@ -949,6 +1097,7 @@

    411

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    412

    413

    414

    @@ -965,6 +1114,12 @@

    414

    415

    >>>>>>> master +======= +

    412

    +

    413

    +

    414

    +

    415

    +>>>>>>> master

    416

    417

    418

    @@ -981,6 +1136,7 @@

    428

    429

    430

    +<<<<<<< HEAD

    431

    432

    433

    @@ -999,9 +1155,30 @@

    446

    447

    448

    +======= +

    431

    +

    432

    +

    433

    +

    434

    +

    435

    +

    436

    +

    437

    +

    438

    +

    439

    +

    440

    +

    441

    +

    442

    +

    443

    +

    444

    +

    445

    +

    446

    +

    447

    +

    448

    +>>>>>>> master

    449

    450

    451

    +<<<<<<< HEAD

    452

    453

    454

    @@ -1038,6 +1215,8 @@

    449

    450

    451

    +======= +>>>>>>> master

    452

    453

    454

    @@ -1065,11 +1244,15 @@

    467

    468

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    469

    =======

    469

    >>>>>>> master +======= +

    469

    +>>>>>>> master

    470

    471

    472

    @@ -1123,6 +1306,7 @@

    495

    496

    <<<<<<< HEAD +<<<<<<< HEAD

    497

    >>>>>>> master

    498

    @@ -1207,6 +1391,25 @@

    512

    513

    >>>>>>> master +======= +

    497

    +

    498

    +

    499

    +

    500

    +

    501

    +

    502

    +

    503

    +

    504

    +

    505

    +

    506

    +

    507

    +

    508

    +

    509

    +

    510

    +

    511

    +

    512

    +

    513

    +>>>>>>> master

    514

    515

    516

    @@ -1257,6 +1460,7 @@

    560

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    561

    562

    563

    @@ -1297,6 +1501,9 @@

    =======

    561

    >>>>>>> master +======= +

    561

    +>>>>>>> master

    562

    563

    564

    @@ -1338,6 +1545,7 @@

    599

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    600

    601

    ======= @@ -1347,10 +1555,15 @@

    602

    603

    ======= +======= +>>>>>>> master

    600

    601

    602

    603

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    604

    605

    @@ -1361,16 +1574,21 @@

    =======

    608

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    609

    =======

    609

    >>>>>>> master +======= +

    609

    +>>>>>>> master

    610

    611

    612

    613

    <<<<<<< HEAD +<<<<<<< HEAD

    614

    615

    616

    @@ -1388,11 +1606,19 @@

    616

    617

    618

    +======= +

    614

    +

    615

    +

    616

    +

    617

    +

    618

    +>>>>>>> master

    619

    620

    621

    622

    <<<<<<< HEAD +<<<<<<< HEAD

    623

    624

    >>>>>>> master @@ -1400,11 +1626,16 @@

    626

    627

    ======= +======= +>>>>>>> master

    623

    624

    625

    626

    627

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    628

    629

    @@ -1419,6 +1650,7 @@

    638

    639

    <<<<<<< HEAD +<<<<<<< HEAD

    640

    <<<<<<< HEAD

    641

    @@ -1456,6 +1688,9 @@

    =======

    640

    >>>>>>> master +======= +

    640

    +>>>>>>> master

    641

    642

    643

    @@ -1492,6 +1727,7 @@

    673

    674

    <<<<<<< HEAD +<<<<<<< HEAD

    675

    676

    <<<<<<< HEAD @@ -1533,22 +1769,6 @@

    712

    713

    714

    -

    715

    -

    716

    -

    717

    -

    718

    -

    719

    -

    720

    -

    721

    -

    722

    -

    723

    -

    724

    -

    725

    -======= -

    677

    -

    678

    -

    679

    -

    680

    =======

    675

    676

    @@ -1556,7 +1776,6 @@

    678

    679

    680

    ->>>>>>> master

    681

    682

    683

    @@ -1591,15 +1810,78 @@

    712

    713

    714

    +>>>>>>> master

    715

    -

    716

    +

    716

    717

    +<<<<<<< HEAD +

    718

    +

    719

    +

    720

    +

    721

    +

    722

    +

    723

    +

    724

    +

    725

    +======= +

    677

    +

    678

    +

    679

    +

    680

    +======= +

    675

    +

    676

    +

    677

    +

    678

    +

    679

    +

    680

    +>>>>>>> master +

    681

    +

    682

    +

    683

    +

    684

    +

    685

    +

    686

    +

    687

    +

    688

    +

    689

    +

    690

    +

    691

    +

    692

    +

    693

    +

    694

    +

    695

    +

    696

    +

    697

    +

    698

    +

    699

    +

    700

    +

    701

    +

    702

    +

    703

    +

    704

    +

    705

    +

    706

    +

    707

    +

    708

    +

    709

    +

    710

    +

    711

    +

    712

    +

    713

    +

    714

    +

    715

    +

    716

    +

    717

    +======= +>>>>>>> master

    718

    719

    720

    721

    722

    <<<<<<< HEAD +<<<<<<< HEAD

    723

    724

    725

    @@ -1610,6 +1892,8 @@

    729

    730

    ======= +======= +>>>>>>> master

    723

    724

    725

    @@ -1618,6 +1902,9 @@

    728

    729

    730

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    731

    <<<<<<< HEAD @@ -1651,11 +1938,15 @@

    744

    745

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    746

    =======

    746

    >>>>>>> master +======= +

    746

    +>>>>>>> master

    747

    748

    749

    @@ -1667,12 +1958,16 @@

    755

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master

    756

    757

    758

    759

    760

    761

    +<<<<<<< HEAD

    762

    763

    764

    @@ -1690,6 +1985,8 @@

    759

    760

    761

    +======= +>>>>>>> master

    762

    763

    764

    @@ -1708,6 +2005,7 @@

    776

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    777

    778

    779

    @@ -1719,6 +2017,9 @@

    =======

    777

    >>>>>>> master +======= +

    777

    +>>>>>>> master

    778

    779

    780

    @@ -1730,6 +2031,7 @@

    785

    786

    <<<<<<< HEAD +<<<<<<< HEAD

    787

    <<<<<<< HEAD

    788

    @@ -1744,6 +2046,9 @@

    =======

    787

    >>>>>>> master +======= +

    787

    +>>>>>>> master

    788

    789

    790

    @@ -1751,22 +2056,29 @@

    792

    793

    <<<<<<< HEAD +<<<<<<< HEAD

    794

    795

    >>>>>>> master

    796

    797

    ======= +======= +>>>>>>> master

    794

    795

    796

    797

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    798

    799

    800

    801

    <<<<<<< HEAD +<<<<<<< HEAD

    802

    803

    804

    @@ -1839,6 +2151,24 @@

    815

    816

    817

    +======= +

    802

    +

    803

    +

    804

    +

    805

    +

    806

    +

    807

    +

    808

    +

    809

    +

    810

    +

    811

    +

    812

    +

    813

    +

    814

    +

    815

    +

    816

    +

    817

    +>>>>>>> master

    818

    819

    820

    @@ -1887,6 +2217,7 @@

    862

    863

    <<<<<<< HEAD +<<<<<<< HEAD

    864

    <<<<<<< HEAD

    865

    @@ -1910,6 +2241,15 @@

    869

    870

    >>>>>>> master +======= +

    864

    +

    865

    +

    866

    +

    867

    +

    868

    +

    869

    +

    870

    +>>>>>>> master

    871

    872

    873

    @@ -1917,12 +2257,15 @@

    <<<<<<< HEAD

    875

    876

    +<<<<<<< HEAD

    877

    878

    879

    =======

    875

    876

    +======= +>>>>>>> master

    877

    878

    879

    @@ -1935,6 +2278,7 @@

    885

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    886

    =======

    886

    @@ -1942,12 +2286,16 @@

    =======

    886

    >>>>>>> master +======= +

    886

    +>>>>>>> master

    887

    888

    889

    890

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    891

    892

    893

    @@ -2020,12 +2368,17 @@

    895

    896

    ======= +======= +>>>>>>> master

    891

    892

    893

    894

    895

    896

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    897

    898

    @@ -2082,6 +2435,7 @@

    949

    950

    <<<<<<< HEAD +<<<<<<< HEAD

    951

    952

    953

    @@ -2127,6 +2481,8 @@

    =======

    961

    ======= +======= +>>>>>>> master

    951

    952

    953

    @@ -2138,6 +2494,9 @@

    959

    960

    961

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    962

    963

    @@ -2178,6 +2537,7 @@

    997

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    998

    999

    1000

    @@ -2190,6 +2550,9 @@

    =======

    998

    >>>>>>> master +======= +

    998

    +>>>>>>> master

    999

    1000

    1001

    @@ -2201,6 +2564,7 @@

    1006

    1007

    <<<<<<< HEAD +<<<<<<< HEAD

    1008

    1009

    <<<<<<< HEAD @@ -2234,10 +2598,15 @@

    1010

    1011

    ======= +======= +>>>>>>> master

    1008

    1009

    1010

    1011

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1012

    1013

    @@ -2273,6 +2642,7 @@

    1042

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1043

    =======

    1043

    @@ -2284,6 +2654,11 @@

    1044

    1045

    >>>>>>> master +======= +

    1043

    +

    1044

    +

    1045

    +>>>>>>> master

    1046

    1047

    <<<<<<< HEAD @@ -2317,11 +2692,15 @@

    1060

    1061

    <<<<<<< HEAD +<<<<<<< HEAD

    1062

    >>>>>>> master =======

    1062

    >>>>>>> master +======= +

    1062

    +>>>>>>> master

    1063

    1064

    1065

    @@ -2342,11 +2721,15 @@

    1074

    1075

    <<<<<<< HEAD +<<<<<<< HEAD

    1076

    >>>>>>> master =======

    1076

    >>>>>>> master +======= +

    1076

    +>>>>>>> master

    1077

    1078

    1079

    @@ -2367,11 +2750,15 @@

    1088

    1089

    <<<<<<< HEAD +<<<<<<< HEAD

    1090

    >>>>>>> master =======

    1090

    >>>>>>> master +======= +

    1090

    +>>>>>>> master

    1091

    1092

    1093

    @@ -2404,6 +2791,7 @@

    1116

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1117

    1118

    1119

    @@ -2460,6 +2848,16 @@

    1122

    1123

    1124

    +======= +

    1117

    +

    1118

    +

    1119

    +

    1120

    +

    1121

    +

    1122

    +

    1123

    +

    1124

    +>>>>>>> master

    1125

    1126

    1127

    @@ -2467,6 +2865,9 @@

    1129

    1130

    1131

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1132

    1133

    @@ -2485,11 +2886,15 @@

    1146

    1147

    <<<<<<< HEAD +<<<<<<< HEAD

    1148

    >>>>>>> master =======

    1148

    >>>>>>> master +======= +

    1148

    +>>>>>>> master

    1149

    1150

    1151

    @@ -2499,6 +2904,7 @@

    1154

    1155

    1156

    +<<<<<<< HEAD

    1157

    1158

    1159

    @@ -2599,6 +3005,34 @@

    1180

    1181

    1182

    +======= +

    1157

    +

    1158

    +

    1159

    +

    1160

    +

    1161

    +

    1162

    +

    1163

    +

    1164

    +

    1165

    +

    1166

    +

    1167

    +

    1168

    +

    1169

    +

    1170

    +

    1171

    +

    1172

    +

    1173

    +

    1174

    +

    1175

    +

    1176

    +

    1177

    +

    1178

    +

    1179

    +

    1180

    +

    1181

    +

    1182

    +>>>>>>> master

    1183

    1184

    1185

    @@ -2647,6 +3081,7 @@

    1227

    1228

    <<<<<<< HEAD +<<<<<<< HEAD

    1229

    <<<<<<< HEAD

    1230

    @@ -2666,6 +3101,13 @@

    1232

    1233

    >>>>>>> master +======= +

    1229

    +

    1230

    +

    1231

    +

    1232

    +

    1233

    +>>>>>>> master

    1234

    1235

    1236

    @@ -2687,6 +3129,7 @@

    1243

    1244

    <<<<<<< HEAD +<<<<<<< HEAD

    1245

    1246

    >>>>>>> master @@ -2694,6 +3137,10 @@

    1245

    1246

    >>>>>>> master +======= +

    1245

    +

    1246

    +>>>>>>> master

    1247

    1248

    1249

    @@ -2708,6 +3155,7 @@

    1257

    1258

    1259

    +<<<<<<< HEAD

    1260

    1261

    1262

    @@ -2732,9 +3180,36 @@

    1281

    1282

    1283

    +======= +

    1260

    +

    1261

    +

    1262

    +

    1263

    +

    1264

    +

    1265

    +

    1266

    +

    1267

    +

    1268

    +

    1269

    +

    1270

    +

    1271

    +

    1272

    +

    1273

    +

    1274

    +

    1275

    +

    1276

    +

    1277

    +

    1278

    +

    1279

    +

    1280

    +

    1281

    +

    1282

    +

    1283

    +>>>>>>> master

    1284

    1285

    1286

    +<<<<<<< HEAD

    1287

    1288

    1289

    @@ -2790,6 +3265,10 @@

    1295

    1296

    ======= +======= +

    1287

    +

    1288

    +>>>>>>> master

    1289

    1290

    1291

    @@ -2798,6 +3277,9 @@

    1294

    1295

    1296

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1297

    <<<<<<< HEAD @@ -2821,11 +3303,15 @@

    1308

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master

    1309

    1310

    1311

    1312

    1313

    +<<<<<<< HEAD

    1314

    1315

    1316

    @@ -2835,6 +3321,17 @@

    1320

    1321

    1322

    +======= +

    1314

    +

    1315

    +

    1316

    +

    1317

    +

    1318

    +

    1319

    +

    1320

    +

    1321

    +

    1322

    +>>>>>>> master

    1323

    1324

    1325

    @@ -2871,6 +3368,9 @@

    1332

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    1333

    @@ -2879,6 +3379,7 @@

    1336

    1337

    <<<<<<< HEAD +<<<<<<< HEAD

    1338

    =======

    1333

    @@ -2914,10 +3415,16 @@

    ======= =======

    1338

    +======= +

    1338

    +>>>>>>> master

    1339

    1340

    1341

    1342

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1343

    1344

    @@ -2952,11 +3459,15 @@

    1372

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master

    1373

    1374

    1375

    1376

    1377

    +<<<<<<< HEAD

    1378

    1379

    1380

    @@ -3005,6 +3516,12 @@

    1379

    1380

    1381

    +======= +

    1378

    +

    1379

    +

    1380

    +

    1381

    +>>>>>>> master

    1382

    1383

    1384

    @@ -3043,6 +3560,7 @@

    1416

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1417

    1418

    ======= @@ -3052,10 +3570,15 @@

    1419

    1420

    ======= +======= +>>>>>>> master

    1417

    1418

    1419

    1420

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1421

    1422

    @@ -3100,6 +3623,7 @@

    1440

    1441

    <<<<<<< HEAD +<<<<<<< HEAD

    1442

    1443

    >>>>>>> master @@ -3137,6 +3661,15 @@

    1447

    1448

    >>>>>>> master +======= +

    1442

    +

    1443

    +

    1444

    +

    1445

    +

    1446

    +

    1447

    +

    1448

    +>>>>>>> master

    1449

    1450

    1451

    @@ -3154,6 +3687,7 @@

    1463

    1464

    <<<<<<< HEAD +<<<<<<< HEAD

    1465

    1466

    >>>>>>> master @@ -3161,11 +3695,16 @@

    1465

    1466

    >>>>>>> master +======= +

    1465

    +

    1466

    +>>>>>>> master

    1467

    1468

    1469

    1470

    <<<<<<< HEAD +<<<<<<< HEAD

    1471

    <<<<<<< HEAD

    1472

    @@ -3237,6 +3776,10 @@

    1471

    1472

    >>>>>>> master +======= +

    1471

    +

    1472

    +>>>>>>> master

    1473

    1474

    1475

    @@ -3326,11 +3869,15 @@

    1554

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master

    1555

    1556

    1557

    1558

    1559

    +<<<<<<< HEAD

    1560

    1561

    1562

    @@ -3356,11 +3903,17 @@

    1560

    1561

    1562

    +======= +

    1560

    +

    1561

    +

    1562

    +>>>>>>> master

    1563

    1564

    1565

    1566

    <<<<<<< HEAD +<<<<<<< HEAD

    1567

    1568

    1569

    @@ -3406,6 +3959,19 @@

    1576

    1577

    >>>>>>> master +======= +

    1567

    +

    1568

    +

    1569

    +

    1570

    +

    1571

    +

    1572

    +

    1573

    +

    1574

    +

    1575

    +

    1576

    +

    1577

    +>>>>>>> master

    1578

    1579

    1580

    @@ -3423,6 +3989,7 @@

    1592

    1593

    <<<<<<< HEAD +<<<<<<< HEAD

    1594

    1595

    >>>>>>> master @@ -3430,11 +3997,16 @@

    1594

    1595

    >>>>>>> master +======= +

    1594

    +

    1595

    +>>>>>>> master

    1596

    1597

    1598

    1599

    <<<<<<< HEAD +<<<<<<< HEAD

    1600

    <<<<<<< HEAD

    1601

    @@ -3456,10 +4028,15 @@

    1602

    1603

    ======= +======= +>>>>>>> master

    1600

    1601

    1602

    1603

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1604

    1605

    @@ -3473,6 +4050,7 @@

    1613

    1614

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1615

    1616

    @@ -3480,6 +4058,13 @@

    1618

    <<<<<<< HEAD

    1619

    +======= +

    1615

    +

    1616

    +

    1617

    +

    1618

    +

    1619

    +>>>>>>> master

    1620

    1621

    1622

    @@ -3497,6 +4082,7 @@

    1634

    1635

    1636

    +<<<<<<< HEAD

    1637

    1638

    1639

    @@ -3507,18 +4093,42 @@

    1644

    1645

    1646

    -

    1647

    +

    1647

    +

    1648

    +

    1649

    +

    1650

    +

    1651

    +

    1652

    +

    1653

    +

    1654

    +

    1655

    +

    1656

    +

    1657

    +

    1658

    +======= +

    1637

    +

    1638

    +

    1639

    +

    1640

    +

    1641

    +

    1642

    +

    1643

    +

    1644

    +

    1645

    +

    1646

    +

    1647

    1648

    1649

    -

    1650

    +

    1650

    1651

    -

    1652

    +

    1652

    1653

    1654

    -

    1655

    +

    1655

    1656

    -

    1657

    -

    1658

    +

    1657

    +

    1658

    +>>>>>>> master

    1659

    1660

    1661

    @@ -3604,6 +4214,7 @@

    1682

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1683

    =======

    1683

    @@ -3611,11 +4222,15 @@

    =======

    1683

    >>>>>>> master +======= +

    1683

    +>>>>>>> master

    1684

    1685

    1686

    1687

    <<<<<<< HEAD +<<<<<<< HEAD

    1688

    <<<<<<< HEAD

    1689

    @@ -3651,6 +4266,10 @@

    1688

    1689

    >>>>>>> master +======= +

    1688

    +

    1689

    +>>>>>>> master

    1690

    1691

    1692

    @@ -3676,16 +4295,22 @@

    1712

    1713

    <<<<<<< HEAD +<<<<<<< HEAD

    1714

    1715

    >>>>>>> master

    1716

    1717

    ======= +======= +>>>>>>> master

    1714

    1715

    1716

    1717

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1718

    1719

    @@ -3728,6 +4353,7 @@

    1736

    1737

    <<<<<<< HEAD +<<<<<<< HEAD

    1738

    1739

    >>>>>>> master @@ -3764,6 +4390,15 @@

    1743

    1744

    >>>>>>> master +======= +

    1738

    +

    1739

    +

    1740

    +

    1741

    +

    1742

    +

    1743

    +

    1744

    +>>>>>>> master

    1745

    1746

    1747

    @@ -3781,11 +4416,15 @@

    1759

    1760

    <<<<<<< HEAD +<<<<<<< HEAD

    1761

    >>>>>>> master =======

    1761

    >>>>>>> master +======= +

    1761

    +>>>>>>> master

    1762

    1763

    1764

    @@ -3794,6 +4433,7 @@

    1767

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1768

    1769

    1770

    @@ -3817,6 +4457,11 @@

    1769

    1770

    >>>>>>> master +======= +

    1768

    +

    1769

    +

    1770

    +>>>>>>> master

    1771

    1772

    1773

    @@ -3829,6 +4474,7 @@

    1780

    1781

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1782

    1783

    @@ -3903,6 +4549,13 @@

    1785

    1786

    >>>>>>> master +======= +

    1782

    +

    1783

    +

    1784

    +

    1785

    +

    1786

    +>>>>>>> master

    1787

    1788

    1789

    @@ -3968,6 +4621,7 @@

    1848

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1849

    1850

    ======= @@ -3977,10 +4631,15 @@

    1851

    1852

    ======= +======= +>>>>>>> master

    1849

    1850

    1851

    1852

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1853

    1854

    @@ -3990,6 +4649,7 @@

    1857

    1858

    1859

    +<<<<<<< HEAD

    1860

    1861

    1862

    @@ -4056,6 +4716,22 @@

    1871

    1872

    1873

    +======= +

    1860

    +

    1861

    +

    1862

    +

    1863

    +

    1864

    +

    1865

    +

    1866

    +

    1867

    +

    1868

    +

    1869

    +

    1870

    +

    1871

    +

    1872

    +

    1873

    +>>>>>>> master

    1874

    1875

    1876

    @@ -4090,6 +4766,7 @@

    1905

    1906

    <<<<<<< HEAD +<<<<<<< HEAD

    1907

    >>>>>>> master

    1908

    @@ -4097,6 +4774,10 @@

    1907

    1908

    >>>>>>> master +======= +

    1907

    +

    1908

    +>>>>>>> master

    1909

    1910

    1911

    @@ -4105,6 +4786,7 @@

    1913

    1914

    1915

    +<<<<<<< HEAD

    1916

    1917

    1918

    @@ -4135,9 +4817,42 @@

    1943

    1944

    1945

    +======= +

    1916

    +

    1917

    +

    1918

    +

    1919

    +

    1920

    +

    1921

    +

    1922

    +

    1923

    +

    1924

    +

    1925

    +

    1926

    +

    1927

    +

    1928

    +

    1929

    +

    1930

    +

    1931

    +

    1932

    +

    1933

    +

    1934

    +

    1935

    +

    1936

    +

    1937

    +

    1938

    +

    1939

    +

    1940

    +

    1941

    +

    1942

    +

    1943

    +

    1944

    +

    1945

    +>>>>>>> master

    1946

    1947

    1948

    +<<<<<<< HEAD

    1949

    1950

    1951

    @@ -4178,6 +4893,8 @@

    1946

    1947

    1948

    +======= +>>>>>>> master

    1949

    1950

    1951

    @@ -4211,6 +4928,7 @@

    1974

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1975

    1976

    1977

    @@ -4221,16 +4939,23 @@

    =======

    1975

    >>>>>>> master +======= +

    1975

    +>>>>>>> master

    1976

    1977

    1978

    1979

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1980

    =======

    1980

    >>>>>>> master +======= +

    1980

    +>>>>>>> master

    1981

    1982

    1983

    @@ -4271,11 +4996,15 @@

    2011

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master

    2012

    2013

    2014

    2015

    2016

    +<<<<<<< HEAD

    2017

    2018

    2019

    @@ -4326,6 +5055,11 @@

    2017

    2018

    2019

    +======= +

    2017

    +

    2018

    +

    2019

    +>>>>>>> master

    2020

    2021

    2022

    @@ -4360,22 +5094,29 @@

    2051

    2052

    <<<<<<< HEAD +<<<<<<< HEAD

    2053

    2054

    >>>>>>> master

    2055

    2056

    ======= +======= +>>>>>>> master

    2053

    2054

    2055

    2056

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    2057

    2058

    2059

    2060

    <<<<<<< HEAD +<<<<<<< HEAD

    2061

    2062

    2063

    @@ -4453,6 +5194,31 @@

    2081

    2082

    2083

    +======= +

    2061

    +

    2062

    +

    2063

    +

    2064

    +

    2065

    +

    2066

    +

    2067

    +

    2068

    +

    2069

    +

    2070

    +

    2071

    +

    2072

    +

    2073

    +

    2074

    +

    2075

    +

    2076

    +

    2077

    +

    2078

    +

    2079

    +

    2080

    +

    2081

    +

    2082

    +

    2083

    +>>>>>>> master

    2084

    2085

    2086

    @@ -4483,6 +5249,7 @@

    2111

    2112

    <<<<<<< HEAD +<<<<<<< HEAD

    2113

    >>>>>>> master

    2114

    @@ -4490,6 +5257,10 @@

    2113

    2114

    >>>>>>> master +======= +

    2113

    +

    2114

    +>>>>>>> master

    2115

    2116

    2117

    @@ -4498,6 +5269,7 @@

    2119

    2120

    2121

    +<<<<<<< HEAD

    2122

    2123

    2124

    @@ -4511,6 +5283,21 @@

    2132

    2133

    2134

    +======= +

    2122

    +

    2123

    +

    2124

    +

    2125

    +

    2126

    +

    2127

    +

    2128

    +

    2129

    +

    2130

    +

    2131

    +

    2132

    +

    2133

    +

    2134

    +>>>>>>> master

    2135

    2136

    2137

    @@ -4548,6 +5335,7 @@

    2141

    2142

    <<<<<<< HEAD +<<<<<<< HEAD

    2143

    2144

    2145

    @@ -4558,6 +5346,8 @@

    2149

    2150

    ======= +======= +>>>>>>> master

    2143

    2144

    2145

    @@ -4566,6 +5356,9 @@

    2148

    2149

    2150

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    2151

    <<<<<<< HEAD @@ -4636,11 +5429,15 @@

    2183

    2184

    <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    2185

    =======

    2185

    >>>>>>> master +======= +

    2185

    +>>>>>>> master

    2186

    2187

    2188

    @@ -4658,6 +5455,7 @@

    2196

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2197

    2198

    2199

    @@ -4679,6 +5477,10 @@

    2197

    >>>>>>> master

    2198

    +======= +

    2197

    +

    2198

    +>>>>>>> master

    2199

    2200

    2201

    @@ -4692,6 +5494,7 @@

    2209

    2210

    <<<<<<< HEAD +<<<<<<< HEAD

    2211

    >>>>>>> master

    2212

    @@ -4747,12 +5550,32 @@

    2223

    2224

    2225

    +======= +

    2211

    +

    2212

    +

    2213

    +

    2214

    +

    2215

    +

    2216

    +

    2217

    +

    2218

    +

    2219

    +

    2220

    +

    2221

    +

    2222

    +

    2223

    +

    2224

    +

    2225

    +>>>>>>> master

    2226

    2227

    2228

    2229

    2230

    2231

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master @@ -4787,6 +5610,7 @@

    __author__ = 'bibi21000' 

     

    <<<<<<< HEAD +<<<<<<< HEAD

    from select import select 

    import sys 

    import os 

    @@ -4800,6 +5624,8 @@

    #from ucp import UrwidCmdProc, isUCP 

    #from utils import utilInit, log 

    ======= +======= +>>>>>>> master

    try: 

        from gevent import monkey 

        monkey.patch_all() 

    @@ -4811,6 +5637,9 @@

    import urwid 

    from urwid.raw_display import Screen 

    from traceback import format_exc 

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    from openzwave.node import ZWaveNode 

    from openzwave.value import ZWaveValue 

    @@ -4820,6 +5649,7 @@

    from openzwave.option import ZWaveOption 

    from louie import dispatcher, All 

    <<<<<<< HEAD +<<<<<<< HEAD

    #import logging 

    #from frameapp import FrameApp, DIVIDER 

     

    @@ -5434,6 +6264,8 @@

            self.subdirs.append(child) 

            self.childrens[child] = definition 

    ======= +======= +>>>>>>> master

    import logging 

     

    class OldestTree(urwid.ListWalker): 

    @@ -5450,6 +6282,9 @@

            self.lines = [] 

            self.focus, oldfocus = (0, 0) 

            self.size = 0 

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

     

        def add_child(self, child, definition): 

    @@ -5974,6 +6809,7 @@

            return True 

     

    <<<<<<< HEAD +<<<<<<< HEAD

        def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1): 

            self.id = id 

            #self.content = 'item %s: %s - %s...' % (str(id), name[:20], product_name[:20] ) 

    @@ -7664,6 +8500,8 @@

            #dispatcher.disconnect(self._louie_node_update, ZWaveNetwork.SIGNAL_NODE) 

            self.window.log.info('NodesTree _louie_network_resetted.') 

    ======= +======= +>>>>>>> master

        def keypress(self, size, key): 

            return key 

     

    @@ -7748,6 +8586,9 @@

            dispatcher.connect(self._louie_network_ready, ZWaveNetwork.SIGNAL_NETWORK_AWAKED) 

            dispatcher.connect(self._louie_network_ready, ZWaveNetwork.SIGNAL_NETWORK_READY) 

            dispatcher.connect(self._louie_network_resetted, ZWaveNetwork.SIGNAL_NETWORK_RESETTED) 

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

     

        def _louie_network_resetted(self, network): 

    @@ -9114,6 +9955,7 @@

            :rtype: str 

     

    <<<<<<< HEAD +<<<<<<< HEAD

        def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False): 

            self.id = id 

            #self.content = 'item %s: %s - %s...' % (str(id), name[:20], product_name[:20] ) 

    @@ -9309,6 +10151,8 @@

            return key 

    >>>>>>> master ======= +======= +>>>>>>> master

            """ 

            return "%s" % self.key 

     

    @@ -9507,6 +10351,9 @@

     

        def keypress(self, size, key): 

            return key 

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master diff --git a/docs/joomla/nosetests/nosetests.html b/docs/joomla/nosetests/nosetests.html index cd7dea41..04a9211c 100644 --- a/docs/joomla/nosetests/nosetests.html +++ b/docs/joomla/nosetests/nosetests.html @@ -145,8 +145,13 @@

    Unit Test Report

    +<<<<<<< HEAD

    Start Time: 2015-05-03 16:11:55

    Duration: 0:03:41.667291

    +======= +

    Start Time: 2015-05-03 16:28:27

    +

    Duration: 0:03:38.181683

    +>>>>>>> master

    Status: Pass 77

    @@ -337,6 +342,7 @@

    Unit Test Report

    +<<<<<<< HEAD @@ -356,32 +362,38 @@

    Unit Test Report

    +======= + + + +>>>>>>> master - + - + - + - + +<<<<<<< HEAD @@ -406,6 +418,20 @@

    Unit Test Report

    +======= + + + + + + + + + + + + +>>>>>>> master @@ -416,34 +442,35 @@

    Unit Test Report

    - + - + - + - + - + +<<<<<<< HEAD @@ -462,10 +489,37 @@

    Unit Test Report

    +======= + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master +<<<<<<< HEAD @@ -483,68 +537,123 @@

    Unit Test Report

    +======= + + + + + + + + + + + +>>>>>>> master +<<<<<<< HEAD +======= + + + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + + + + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD @@ -552,12 +661,22 @@

    Unit Test Report

    +======= + + + + + + + +>>>>>>> master +<<<<<<< HEAD @@ -570,6 +689,32 @@

    Unit Test Report

    +======= + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master @@ -580,58 +725,97 @@

    Unit Test Report

    +<<<<<<< HEAD +======= + + + + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master @@ -644,6 +828,7 @@

    Unit Test Report

    +<<<<<<< HEAD @@ -668,6 +853,14 @@

    Unit Test Report

    +======= + + + + + + +>>>>>>> master @@ -678,34 +871,57 @@

    Unit Test Report

    +<<<<<<< HEAD +======= + + + + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master @@ -718,10 +934,17 @@

    Unit Test Report

    +<<<<<<< HEAD +======= + + + + +>>>>>>> master @@ -734,23 +957,91 @@

    Unit Test Report

    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + +>>>>>>> master +<<<<<<< HEAD +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master @@ -762,28 +1053,28 @@

    Unit Test Report

    - + - + - + - + - + @@ -813,7 +1104,11 @@

    Unit Test Report

    +<<<<<<< HEAD +======= + +>>>>>>> master diff --git a/docs/joomla/pylint/report.html b/docs/joomla/pylint/report.html index 60ccf156..5d19d24c 100644 --- a/docs/joomla/pylint/report.html +++ b/docs/joomla/pylint/report.html @@ -32,8 +32,13 @@

    Statistics by type

    +<<<<<<< HEAD +======= + + +>>>>>>> master @@ -92,15 +97,25 @@

    Raw metrics

    +<<<<<<< HEAD +======= + + +>>>>>>> master +<<<<<<< HEAD +======= + + +>>>>>>> master @@ -113,8 +128,13 @@

    Raw metrics

    +<<<<<<< HEAD +======= + + +>>>>>>> master
    warningopenzwave.group 1710Bad indentation. Found 16 spaces, expected 12openzwave.group   171 44 4 Metaclass method __call__ should have 'cls' as first argument
    warningopenzwave.node 1900Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.group 1721910Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.group 1740No space allowed before : + if 'associations' in extras : + ^
    warningopenzwave.group 1751970No space allowed before : + if 'values' in extras : + ^
    warningopenzwave.node 1980Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 1990No space allowed before : + if 'groups' in extras : + ^
    warningopenzwave.node 2000Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2010No space allowed before : + if 'neighbors' in extras : + ^
    warningopenzwave.node 2020Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2030No space allowed before : + if 'capabilities' in extras : + ^
    warningopenzwave.node 2040Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2080Exactly one space required around assignment + ret[key]=vals[key] + ^
    conventionopenzwave.node 2840Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.node 4540Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.node 460Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.group 420Invalid constant name "logger"
    warningopenzwave.groupZWaveGroup.to_dict1604Dangerous default value [] as argument
    conventionopenzwave.singletonSingleton.__init__354Metaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__444Metaclass method __call__ should have 'cls' as first argument
    warning ZWaveNode.__init__ 59 4__init__ method from base class 'ZWaveNodeSwitch' is not called__init__ method from base class 'ZWaveNodeSensor' is not called
    warning ZWaveNode.__init__ 59 4__init__ method from base class 'ZWaveNodeSensor' is not called__init__ method from base class 'ZWaveNodeSwitch' is not called
    warning 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    convention pyozwman
    convention pyozwman.ozwsh_widgets
    conventionpyozwman 560No space allowed before bracket + self.usage = ['ls : list directory', 'cd &lt;directory&gt; : change to directory &lt;directory&gt;', 'exit : quit the program' ] + ^
    conventionpyozwman.ozwsh_widgetsMissing module docstring
    warningpyozwman 260No exception type(s) specified
    conventionpyozwman.ozwsh_widgets   56 0
    refactorpyozwweb.app.socket.chat 10Similar lines in 5 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'}
    refactorpyozwweb.app.socket.chat 10Similar lines in 6 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True
    refactorpyozwweb.app.socket.chat 10Similar lines in 7 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' +
    refactorpyozwweb.app.socket.chat 10Similar lines in 8 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000
    refactorpyozwweb.app.socket.chat 10Similar lines in 9 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:'
    refactorpyozwweb.app.socket.chat 10Similar lines in 10 files +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False
    refactorpyozwweb.app.socket.chat 10Similar lines in 13 files +==openzwave:1 +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.__init__:65 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +==pyozwweb:1 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False
    refactorpyozwweb.app.socket.chat 10Similar lines in 3 files +==openzwave.group:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject + +# Set default logging handler to avoid "No handler found" warnings. +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:28 +==pyozwman.ozwsh_widgets:27 +__author__ = 'bibi21000' + +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from select import select +import sys +import os +import urwid +from urwid.raw_display import Screen
    refactorpyozwweb.app.socket.chat 710Exactly one space required around comparison + if pos &gt;= 0 and pos &lt; self.size and len(self.lines)&gt;0: + ^Similar lines in 9 files +==openzwave.command:34 +==openzwave.controller:42 +==openzwave.group:33 +==openzwave.network:52 +==openzwave.node:37 +==openzwave.object:31 +==openzwave.option:37 +==openzwave.scene:33 +==openzwave.value:33 +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:46 +==pyozwman.ozwsh_widgets:40 +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption
    conventionpyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==openzwave.network:25 +==openzwave.option:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os
    refactorpyozwweb.app.socket.chat 800Exactly one space required after comma + line,pos = self._get_at_pos(self.focus) + ^Similar lines in 2 files +==openzwave.network:616 +==openzwave.node:204 + if 'kvals' in extras and self.network.dbcon is not None: + vals = self.kvals + for key in vals.keys(): + ret[key]=vals[key] + return ret +
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==openzwave.group:25 +==openzwave.node:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject
    conventionpyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat 1310No space allowed before comma + self.lines.append(urwid.Text("Help" , align='left')) + ^
    conventionpyozwman.ozwsh_widgets 1760No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 1790No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 2030Exactly one space required after comma + def path(self,value): + ^
    conventionpyozwman.ozwsh_widgets 2560Exactly one space required after assignment + self.walker =StatTree(window, parent.walker, self) + ^
    conventionpyozwman.ozwsh_widgets 2640No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 2650Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 2660Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 2670Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 2680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 2720Wrong continued indentation. + 'name':'stats', + ^ |
    conventionpyozwman.ozwsh_widgets 2730Wrong continued indentation. + 'help':'statistics', + ^ |
    conventionpyozwman.ozwsh_widgets 2740Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 2750No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 2760Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 2860No space allowed after bracket + self.lines.append(urwid.Text( " Statistics", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 2880No space allowed after bracket + self.lines.append(urwid.Text( " Frames processed: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2910No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully received: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2940No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully sent: . . . . . . . . . .%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2970No space allowed after bracket + self.lines.append(urwid.Text( " ACKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3000No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts read: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3030No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts sent: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3060No space allowed after bracket + self.lines.append(urwid.Text( " Queue:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3080No space allowed after bracket + self.lines.append(urwid.Text( " Messages in queue: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3110No space allowed after bracket + self.lines.append(urwid.Text( " Errors:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3130No space allowed after bracket + self.lines.append(urwid.Text( " Unsolicited messages received while waiting for ACK: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3160No space allowed after bracket + self.lines.append(urwid.Text( " Reads aborted due to timeouts: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3190No space allowed after bracket + self.lines.append(urwid.Text( " Bad checksum errors: . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3220No space allowed after bracket + self.lines.append(urwid.Text( " CANs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3250No space allowed after bracket + self.lines.append(urwid.Text( " NAKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3280No space allowed after bracket + self.lines.append(urwid.Text( " Out of frame data flow errors: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3310No space allowed after bracket + self.lines.append(urwid.Text( " Messages retransmitted: . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3340No space allowed after bracket + self.lines.append(urwid.Text( " Messages dropped and not delivered: . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3370No space allowed after bracket + self.lines.append(urwid.Text( " Number of unexpected callbacks: . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3400No space allowed after bracket + self.lines.append(urwid.Text( " Number of failed messages due to bad route response: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3430No space allowed after bracket + self.lines.append(urwid.Text( " Number of no ACK returned errors: . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3460No space allowed after bracket + self.lines.append(urwid.Text( " Number of network busy/failure messages: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3490No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages not delivered to network: . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3520No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages received with routed busy status: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3760No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 3770Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 3780Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 3790Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 3800Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3860Wrong continued indentation. + 'name':'groups', + | ^
    conventionpyozwman.ozwsh_widgets 3870Wrong continued indentation. + 'help':'Groups/Associations management', + | ^
    conventionpyozwman.ozwsh_widgets 3880Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 3890Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3900No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 4260No space allowed before : + for group in groups : + ^
    conventionpyozwman.ozwsh_widgets 4280No space allowed after bracket + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4280Exactly one space required after comma + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4330Wrong continued indentation. + )) + ^ |
    conventionpyozwman.ozwsh_widgets 4490No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 4690No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4810No space allowed before : + if value in self.window.network.nodes[self.node_id].groups : + ^
    conventionpyozwman.ozwsh_widgets 4850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4860Exactly one space required after comma + self.window.status_bar.update(status="Can't find node %s in group %s" % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 4880No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4920No space allowed before bracket +class AssociationItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 4940No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 5000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 5090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 5130No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5240No space allowed after bracket + self.childrens = { 'controller' : {'id':'ctl', + ^
    conventionpyozwman.ozwsh_widgets 5250Wrong continued indentation. + 'name':'Controller', + ^ |
    conventionpyozwman.ozwsh_widgets 5260Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 5270Wrong continued indentation. + 'widget_box' : None}, + ^ |
    conventionpyozwman.ozwsh_widgets 5280Wrong continued indentation. + 'scenes' : {'id':'scn', + ^ |
    conventionpyozwman.ozwsh_widgets 5320Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 5540No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5600No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5690No space allowed before bracket +class RootDir (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5710No space allowed before bracket + def __init__ (self, id=None, name=None, help=None): + ^
    conventionpyozwman.ozwsh_widgets 5760Wrong continued indentation. + urwid.Padding(urwid.AttrWrap(urwid.Text('%s' % id, wrap='clip'), 'body', 'focus'), left=2)), + | ^
    conventionpyozwman.ozwsh_widgets 5770Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5780Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5800No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5830No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5890No space allowed before bracket +class RootItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5910No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1): + ^
    conventionpyozwman.ozwsh_widgets 5970Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5980Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5990Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 6050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 6090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6160No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 6520No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 6530Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 6540Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 6550Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 6560Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6600Wrong continued indentation. + 'name':'nodes', + | ^
    conventionpyozwman.ozwsh_widgets 6610Wrong continued indentation. + 'help':'Nodes management', + | ^
    conventionpyozwman.ozwsh_widgets 6620Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 6630Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6640No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 7190No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7220No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7310No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 7370No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7400Exactly one space required around assignment + self.childrens['node']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 7420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7480No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7550Exactly one space required around assignment + val=True + ^
    conventionpyozwman.ozwsh_widgets 7570Exactly one space required around assignment + val=False + ^
    conventionpyozwman.ozwsh_widgets 7820No space allowed before bracket +class NodesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 7840No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1, awaked=False): + ^
    conventionpyozwman.ozwsh_widgets 7900Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7910Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7920Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7930Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7940Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % awaked, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7960No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 7990No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 8030Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8040Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8050Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8060Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8070Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Awaked", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8110No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 8330No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 8340Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 8350Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 8360Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 8370Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 8440Wrong continued indentation. + 'name':'node', + ^ |
    conventionpyozwman.ozwsh_widgets 8450Wrong continued indentation. + 'help':'Node management', + ^ |
    conventionpyozwman.ozwsh_widgets 8460Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 8500No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 8510Exactly one space required after comma + parent.add_child("node",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 8710No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 9150No space allowed after bracket + self.lines.append(urwid.Text( " Baud rate = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9180No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9210No space allowed after bracket + self.lines.append(urwid.Text( " Neighbors = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9240No space allowed after bracket + self.lines.append(urwid.Text( " Groups = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9270No space allowed before bracket + self.window.log.info("NodeTree num groups = %s" % self.window.network.nodes[self.key].num_groups ) + ^
    conventionpyozwman.ozwsh_widgets 9440No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 9500Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.key=directory + ^
    conventionpyozwman.ozwsh_widgets 9510Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.node_id=self.key + ^
    conventionpyozwman.ozwsh_widgets 9710No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 9720Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 9730Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 9740Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 9750Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 9820Wrong continued indentation. + 'name':'controller', + ^ |
    conventionpyozwman.ozwsh_widgets 9830Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 9840Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 9850No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 9860Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 10270No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 10510No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10590No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10710No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10730No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10790No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10850No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10870No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10930No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10990No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 11010No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 11520No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11570No space allowed after bracket + self.lines.append(urwid.Text( " Device=%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11820No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 11830Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 11840Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 11850Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 11860Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11950Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11970Wrong continued indentation. + 'name':'Basic', + ^|
    conventionpyozwman.ozwsh_widgets 11980Wrong continued indentation. + 'help':'Basic values management', + ^|
    conventionpyozwman.ozwsh_widgets 11990Wrong continued indentation. + 'widget_box': self.widget_box + ^|
    conventionpyozwman.ozwsh_widgets 12000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12020Wrong continued indentation. + 'name':'Config', + ^ |
    conventionpyozwman.ozwsh_widgets 12030Wrong continued indentation. + 'help':'Config values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12040Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12050Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12070Wrong continued indentation. + 'name':'System', + ^ |
    conventionpyozwman.ozwsh_widgets 12080Wrong continued indentation. + 'help':'System values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12090Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12100Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12120Wrong continued indentation. + 'name':'All', + |^
    conventionpyozwman.ozwsh_widgets 12130Wrong continued indentation. + 'help':'All values management', + |^
    conventionpyozwman.ozwsh_widgets 12140Wrong continued indentation. + 'widget_box': self.widget_box + |^
    conventionpyozwman.ozwsh_widgets 12150Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12160No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 12560No space allowed before : + for cmd in values : + ^
    conventionpyozwman.ozwsh_widgets 12570Line too long (148/140)
    conventionpyozwman.ozwsh_widgets 12570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % (self.window.network.nodes[self.node_id].get_command_class_as_string(cmd)), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 12840No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 13080No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13150No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 13160Exactly one space required after comma + self.window.status_bar.update(status='Value %s added to scene %s' % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 13180No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13330No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13440No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13450Exactly one space required around assignment + values[param].data=newval + ^
    conventionpyozwman.ozwsh_widgets 13480No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13510No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13660No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13700No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 13720No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 13740No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13750Exactly one space required after comma + self.window.log.info("poll %s to %s" %(param,newval)) + ^
    conventionpyozwman.ozwsh_widgets 13780No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13800Exactly one space required after comma + self.window.status_bar.update(status='Value %s polled to %s' % (param,value)) + ^
    conventionpyozwman.ozwsh_widgets 13820No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14000No space allowed before bracket +class ValuesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 14020No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False, polled=False): + ^
    conventionpyozwman.ozwsh_widgets 14050No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 14070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14150Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 14160Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14170Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14190No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 14220No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 14260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14280Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14290Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14300Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14310Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14350No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 14570No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 14580Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 14590Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 14600Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 14610Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14650Wrong continued indentation. + 'name':'switches', + | ^
    conventionpyozwman.ozwsh_widgets 14660Wrong continued indentation. + 'help':'All switches on the network', + | ^
    conventionpyozwman.ozwsh_widgets 14670Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 14680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14690No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 15010No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 15030No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 15040Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 15040No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15040Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15290No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15480Exactly one space required after comma + self.window.log.info("SwitchesTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 15530No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 15540Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15580No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 15610Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15630No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15660No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15860No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 15870Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 15880Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 15890Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 15900Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15940Wrong continued indentation. + 'name':'dimmers', + | ^
    conventionpyozwman.ozwsh_widgets 15950Wrong continued indentation. + 'help':'All dimmers on the network', + | ^
    conventionpyozwman.ozwsh_widgets 15960Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 15970Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15980No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 16310No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 16330No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 16340Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 16340No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16340Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16590No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16820No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 16830Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16870No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 16890No space allowed before : + if not values[switch].is_polled : + ^
    conventionpyozwman.ozwsh_widgets 16910Exactly one space required after comma + self.window.network.nodes[node].set_dimmer(switch,newval) + ^
    conventionpyozwman.ozwsh_widgets 16920Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16940No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 16970No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 17010No space allowed before bracket +class SwitchesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 17030No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All'): + ^
    conventionpyozwman.ozwsh_widgets 17100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17120Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 17130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 17190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 17230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17240Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17250Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17310No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 17530No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 17540Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 17550Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 17560Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 17570Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17610Wrong continued indentation. + 'name':'sensors', + | ^
    conventionpyozwman.ozwsh_widgets 17620Wrong continued indentation. + 'help':'All sensors on the network', + | ^
    conventionpyozwman.ozwsh_widgets 17630Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 17640Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17650No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 17980No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 18000No space allowed before : + if len(sensors) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 18010Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 18010No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18010Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18270No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 18350No space allowed before bracket +class SensorsItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 18370No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', units="", polled=0): + ^
    conventionpyozwman.ozwsh_widgets 18440Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18450Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18460Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18470Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 18480Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % units, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18510No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 18540No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 18580Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18590Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18600Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18610Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Units", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18670No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 18900No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 18910Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 18920Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 18930Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 18940Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 18990Wrong continued indentation. + 'name':'scene', + ^ |
    conventionpyozwman.ozwsh_widgets 19000Wrong continued indentation. + 'help':'Scene management', + ^ |
    conventionpyozwman.ozwsh_widgets 19010Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 19050No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 19060Exactly one space required after comma + parent.add_child("scene",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 19190No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 19460No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19710No space allowed before : + if not ok : + ^
    warningpyozwman.ozwsh_widgets 19750Bad indentation. Found 20 spaces, expected 16
    warningpyozwman.ozwsh_widgets 19760Bad indentation. Found 20 spaces, expected 16
    conventionpyozwman.ozwsh_widgets 19770No space allowed before : + if self.window.network.get_scenes()[self.key].remove_value(valueid) : + ^
    conventionpyozwman.ozwsh_widgets 19800No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19950Exactly one space required after comma + self.window.log.info("SceneTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 20000No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 20010Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 20040No space allowed before : + if switch in scene.get_values() : + ^
    conventionpyozwman.ozwsh_widgets 20130No space allowed before : + if new_val != None : + ^
    conventionpyozwman.ozwsh_widgets 20140No space allowed before : + if scene.set_value(switch, new_val) : + ^
    conventionpyozwman.ozwsh_widgets 20170No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20200No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20230No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20370No space allowed before bracket +class SceneItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 20390No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False): + ^
    conventionpyozwman.ozwsh_widgets 20420No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 20440No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20500Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20510Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 20520Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20530Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20550No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 20580No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 20620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20640Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20650Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20660Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20700No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 20960No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 20970Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 20980Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 20990Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 21000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21040Wrong continued indentation. + 'name':'scenes', + | ^
    conventionpyozwman.ozwsh_widgets 21050Wrong continued indentation. + 'help':'Scenes management', + | ^
    conventionpyozwman.ozwsh_widgets 21060Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 21070Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21080No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 21390No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21510No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 21570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21600Exactly one space required around assignment + self.childrens['scene']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 21620No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21670Exactly one space required around comparison + if self.window.network.create_scene(value)&gt;0: + ^
    conventionpyozwman.ozwsh_widgets 21700No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21750No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21820No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21900No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21970No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21990No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22020No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22060No space allowed before bracket +class ScenesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 22080No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 22140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 22160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 22190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 22230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'scene_header'), + | ^
    conventionpyozwman.ozwsh_widgets 22270No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 10Too many lines in module (2231/1000)
    conventionpyozwman.ozwsh_widgetsOldestTree500Missing class docstring
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many instance attributes (12/7)
    warningpyozwman.ozwsh_widgetsOldestTree.__init__6220Unused variable 'oldfocus'
    conventionpyozwman.ozwsh_widgetsOldestTree.add_child654Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree._get_at_pos704Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_nodeid764Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_id794Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.get_id8013Unused variable 'pos'
    conventionpyozwman.ozwsh_widgetsOldestTree.get_focus_entry864Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.set_focus894Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_first1014Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_last1044Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.read_lines1074Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_directories1184Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_help1284Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.refresh1394Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected1444Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected14612Invalid variable name "x"
    conventionpyozwman.ozwsh_widgetsOldestTree.ls1664Invalid method name "ls"
    warningpyozwman.ozwsh_widgetsOldestTree.ls16617Unused argument 'opts'
    conventionpyozwman.ozwsh_widgetsOldestTree.cd1724Invalid method name "cd"
    conventionpyozwman.ozwsh_widgetsOldestTree.set2124Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.set21218Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.set21225Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.poll2164Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.poll21619Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.poll21626Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.add2204Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.add22018Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.add22025Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.remove2244Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.remove22421Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.remove22428Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.reset2284Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.reset22820Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.create2324Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.create23221Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.delete2364Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.delete23621Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.activate2404Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.activate24023Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.send2444Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.send24419Unused argument 'value'
    warningpyozwman.ozwsh_widgetsOldestTree.path2108Attribute '_path' defined outside __init__
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many public methods (30/20)
    warningpyozwman.ozwsh_widgetsStatBox.__init__2524__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsStatBox.__init__2578Instance of 'StatBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsStatTree2600Missing class docstring
    refactorpyozwman.ozwsh_widgetsStatTree.read_lines2784Too many statements (54/50)
    warningpyozwman.ozwsh_widgetsGroupsBox.__init__3614__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsGroupsBox.__init__3668Instance of 'GroupsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsGroupsTree3680Missing class docstring
    refactorpyozwman.ozwsh_widgetsGroupsTree3680Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted3994Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted39938Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready4044Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready40435Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_node_update4104Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41042Unused argument 'node'
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41033Unused argument 'network'
    warningpyozwman.ozwsh_widgetsGroupsTree.add4628No exception type(s) specified
    warningpyozwman.ozwsh_widgetsGroupsTree.remove4778No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__4958Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsAssociationItem4920Missing class docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__49424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__4944__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__5028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsAssociationItem.__init__5038Instance of 'AssociationItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsAssociationItem.get_header5054Missing method docstring
    conventionpyozwman.ozwsh_widgetsAssociationItem.keypress5164Missing method docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.keypress51623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsAssociationItem.keypress5164Method could be a function
    conventionpyozwman.ozwsh_widgetsRootTree5190Missing class docstring
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_ready5394Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_ready53935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_resetted5444Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_resetted54438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5728Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootDir5690Missing class docstring
    warningpyozwman.ozwsh_widgetsRootDir.__init__57144Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsRootDir.__init__57124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootDir.__init__5714__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5808Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootDir.__init__5818Instance of 'RootDir' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootDir.keypress5864Missing method docstring
    warningpyozwman.ozwsh_widgetsRootDir.keypress58623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootDir.keypress5864Method could be a function
    conventionpyozwman.ozwsh_widgetsRootItem.__init__5928Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootItem5890Missing class docstring
    warningpyozwman.ozwsh_widgetsRootItem.__init__59124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootItem.__init__5914__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootItem.__init__6028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootItem.__init__6038Instance of 'RootItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootItem.get_header6054Missing method docstring
    conventionpyozwman.ozwsh_widgetsRootItem.keypress6194Missing method docstring
    warningpyozwman.ozwsh_widgetsRootItem.keypress61923Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootItem.keypress6194Method could be a function
    warningpyozwman.ozwsh_widgetsRootBox.__init__6264__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsRootBox.__init__6318Instance of 'RootBox' has no '__super' member
    warningpyozwman.ozwsh_widgetsNodesBox.__init__6374__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodesBox.__init__6428Instance of 'NodesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesTree6440Missing class docstring
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted6714Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted67138Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_ready6764Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_ready67635Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_node_update6884Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68842Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68833Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodesTree.exist7228No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.cd74212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.send74916Unused variable 'cmd'
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7858Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsNodesItem7820Missing class docstring
    warningpyozwman.ozwsh_widgetsNodesItem.__init__78424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsNodesItem.__init__7844__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7968Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsNodesItem.__init__7978Instance of 'NodesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesItem.get_header7994Missing method docstring
    conventionpyozwman.ozwsh_widgetsNodesItem.keypress8144Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesItem.keypress81423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsNodesItem.keypress8144Method could be a function
    warningpyozwman.ozwsh_widgetsNodeBox.__init__8214__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodeBox.__init__8268Instance of 'NodeBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodeTree8290Missing class docstring
    refactorpyozwman.ozwsh_widgetsNodeTree8290Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted8564Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted85638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_ready8614Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_ready86135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_node_update8674Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodeTree.read_lines8968Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsControllerBox.__init__9594__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsControllerBox.__init__9648Instance of 'ControllerBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsControllerTree9670Missing class docstring
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted10044Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted100438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_ready10094Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_ready100935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_node_update10174Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsControllerTree.send105912No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send107312No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send108712No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send110112No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send105216Unused variable 'cmd'
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many return statements (19/6)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many branches (22/12)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many statements (57/50)
    warningpyozwman.ozwsh_widgetsControllerTree.read_lines11318Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsValuesBox.__init__11664__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsValuesBox.__init__11718Instance of 'ValuesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesTree11740Missing class docstring
    refactorpyozwman.ozwsh_widgetsValuesTree11740Too many instance attributes (13/7)
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_ready12304Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_ready123035Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted12364Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted123638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_value_update12414Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124143Unused argument 'node'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124134Unused argument 'network'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124149Unused argument 'value'
    warningpyozwman.ozwsh_widgetsValuesTree.add12998No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.add13028Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.add130616Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.add130716Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.set13268No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.set132712Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.set133120Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.set133220Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll13598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136012Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136420Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.poll136520Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll137212No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14038Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsValuesItem14000Missing class docstring
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140241Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140261Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140224Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__14024__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14198Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsValuesItem.__init__14208Instance of 'ValuesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesItem.get_header14224Missing method docstring
    conventionpyozwman.ozwsh_widgetsValuesItem.keypress14384Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesItem.keypress143823Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsValuesItem.keypress14384Method could be a function
    warningpyozwman.ozwsh_widgetsSwitchesBox.__init__14454__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSwitchesBox.__init__14508Instance of 'SwitchesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesTree14520Missing class docstring
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted14774Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted147738Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready14824Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready148235Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update14864Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update14894Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree.set15428No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set15468Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set155116Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSwitchesTree.set155216Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsDimmersBox.__init__15744__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsDimmersBox.__init__15798Instance of 'DimmersBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsDimmersTree15810Missing class docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_resetted16064Missing method docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready16114Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready161135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_value_update16164Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_node_update16194Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree.set16728No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsDimmersTree.set16768Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsDimmersTree.set168016Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsDimmersTree.set168116Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17048Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSwitchesItem17010Missing class docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170341Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170361Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170324Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__17034__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSwitchesItem.__init__17178Instance of 'SwitchesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesItem.get_header17194Missing method docstring
    conventionpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.keypress173423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Method could be a function
    warningpyozwman.ozwsh_widgetsSensorsBox.__init__17414__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSensorsBox.__init__17468Instance of 'SensorsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsTree17480Missing class docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_resetted17734Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready17784Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready177835Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_value_update17834Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178343Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178334Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178349Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_node_update17864Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178642Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178633Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18388Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSensorsItem18350Missing class docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183741Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183761Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183724Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__18374__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18518Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSensorsItem.__init__18528Instance of 'SensorsItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsItem.get_header18544Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsItem.keypress18704Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.keypress187023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSensorsItem.keypress18704Method could be a function
    warningpyozwman.ozwsh_widgetsSceneBox.__init__18774__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSceneBox.__init__18828Instance of 'SceneBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneTree18850Missing class docstring
    refactorpyozwman.ozwsh_widgetsSceneTree18850Too many instance attributes (8/7)
    warningpyozwman.ozwsh_widgetsSceneTree.delete19598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196012Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197412No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196924Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197024Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsSceneTree.delete196321Unused variable 'switch'
    warningpyozwman.ozwsh_widgetsSceneTree.set19898No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.set19938Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSceneTree.set199816Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.set199916Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20408Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSceneItem20370Missing class docstring
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203941Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203961Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203924Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__20394__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20558Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSceneItem.__init__20568Instance of 'SceneItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneItem.get_header20584Missing method docstring
    conventionpyozwman.ozwsh_widgetsSceneItem.keypress20734Missing method docstring
    warningpyozwman.ozwsh_widgetsSceneItem.keypress207323Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSceneItem.keypress20734Method could be a function
    warningpyozwman.ozwsh_widgetsScenesBox.__init__20814__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsScenesBox.__init__20868Instance of 'ScenesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesTree20880Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesTree.exist21428No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.cd216212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.delete21778No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.activate21928No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22098Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsScenesItem22060Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesItem.__init__220824Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsScenesItem.__init__22084__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsScenesItem.__init__22178Instance of 'ScenesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesItem.get_header22194Missing method docstring
    conventionpyozwman.ozwsh_widgetsScenesItem.keypress22304Missing method docstring
    warningpyozwman.ozwsh_widgetsScenesItem.keypress223023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsScenesItem.keypress22304Method could be a function
    warningpyozwman.ozwsh_widgets 350Unused select imported from select
    warningpyozwman.ozwsh_widgets 360Unused import sys
    warningpyozwman.ozwsh_widgets 370Unused import os
    warningpyozwman.ozwsh_widgets 390Unused Screen imported from urwid.raw_display
    warningpyozwman.ozwsh_widgets 400Unused format_exc imported from traceback
    warningpyozwman.ozwsh_widgets 410Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_widgets 420Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_widgets 430Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_widgets 440Unused ZWaveController imported from openzwave.controller
    warningpyozwman.ozwsh_widgets 460Unused ZWaveOption imported from openzwave.option
    warningpyozwman.ozwsh_widgets 470Unused All imported from louie
    warningpyozwman.ozwsh_widgets 480Unused import logging
    conventionpyozwman.ozwsh_main 1720Wrong continued indentation. + ("keys", "dark blue", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1730Wrong continued indentation. + ("message", "light cyan", "dark green"), + ^ |
    conventionpyozwman.ozwsh_main 1740Wrong continued indentation. + ("linenr", "light blue", "dark cyan"), + ^ |
    conventionpyozwman.ozwsh_main 1750Wrong continued indentation. + ("input", "light gray", "black"), + ^ |
    conventionpyozwman.ozwsh_main 1760Wrong continued indentation. + ("input2", "dark red", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1770Wrong continued indentation. + ("focus", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1780Wrong continued indentation. + ("dialog", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1790Wrong continued indentation. + ("file", "light green", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1800Wrong continued indentation. + ("errortxt", "dark red", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1810Wrong continued indentation. + ("selectedfile", "yellow", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1820Wrong continued indentation. + ("selectedfocus", "yellow", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1830Wrong continued indentation. + ("dir", "light gray", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1840Wrong continued indentation. + ("fileedit", "light green", "dark red"), + ^ |
    conventionpyozwman.ozwsh_main 1850Wrong continued indentation. + ('edit', 'yellow', 'dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1860Wrong continued indentation. + ('body','default', 'default'), + ^ |
    conventionpyozwman.ozwsh_main 1860Exactly one space required after comma + ('body','default', 'default'), + ^
    conventionpyozwman.ozwsh_main 1870Wrong continued indentation. + ('foot','dark cyan', 'dark blue', 'bold'), + ^ |
    conventionpyozwman.ozwsh_main 1870Exactly one space required after comma + ('foot','dark cyan', 'dark blue', 'bold'), + ^
    conventionpyozwman.ozwsh_main 1880Wrong continued indentation. + ('shadow','white','black'), + ^ |
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1890Wrong continued indentation. + ('border','black','dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1900Wrong continued indentation. + ('error','black','dark red'), + ^ |
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1910Wrong continued indentation. + ('FxKey','light cyan', 'dark blue', 'underline')] + ^ |
    conventionpyozwman.ozwsh_main 1910Exactly one space required after comma + ('FxKey','light cyan', 'dark blue', 'underline')] + ^
    conventionpyozwman.ozwsh_main 2340Exactly one space required after comma + def active_box(self,value): + ^
    conventionpyozwman.ozwsh_main 2640No space allowed before : + if command.startswith('ls') : + ^
    conventionpyozwman.ozwsh_main 2650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2660Exactly one space required after comma + cmd,options = command.split(' ') + ^
    conventionpyozwman.ozwsh_main 2730No space allowed before : + elif command.startswith('exit') : + ^
    conventionpyozwman.ozwsh_main 2750No space allowed before : + elif command.startswith('cd') : + ^
    conventionpyozwman.ozwsh_main 2760No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2870No space allowed before : + elif path == "/" : + ^
    conventionpyozwman.ozwsh_main 2960No space allowed before : + elif command.startswith('send') : + ^
    conventionpyozwman.ozwsh_main 2970No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3030No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3100No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3120No space allowed before : + elif command.startswith('create') : + ^
    conventionpyozwman.ozwsh_main 3130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3190No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3260No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3280No space allowed before : + elif command.startswith('delete') : + ^
    conventionpyozwman.ozwsh_main 3290No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3350No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3420No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3440No space allowed before : + elif command.startswith('activate') : + ^
    conventionpyozwman.ozwsh_main 3450No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3510No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3580No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3600No space allowed before : + elif command.startswith('set') : + ^
    conventionpyozwman.ozwsh_main 3610No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3630No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3680No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3730No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 3810No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3830No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3860No space allowed before : + elif command.startswith('poll') : + ^
    conventionpyozwman.ozwsh_main 3870No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3890No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3940No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3990No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4090No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4120No space allowed before : + elif command.startswith('add') : + ^
    conventionpyozwman.ozwsh_main 4130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4150No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4200No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4250No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4330No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4350No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4380No space allowed before : + elif command.startswith('remove') : + ^
    conventionpyozwman.ozwsh_main 4390No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4410No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4460No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4510No space allowed before : + if len(value) == 0 or to != "from" : + ^
    conventionpyozwman.ozwsh_main 4590No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4610No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4640No space allowed before : + elif command.startswith('reset') : + ^
    conventionpyozwman.ozwsh_main 4650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4680No space allowed before : + if len(state) == 0 : + ^
    conventionpyozwman.ozwsh_main 4750No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 5080No space allowed around keyword argument assignment + kvals = False) + ^
    conventionpyozwman.ozwsh_mainStatusBar950Missing class docstring
    conventionpyozwman.ozwsh_mainStatusBar.update1104Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.get_command1164Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.set_command1194Missing method docstring
    conventionpyozwman.ozwsh_mainHeaderBar1220Missing class docstring
    conventionpyozwman.ozwsh_mainHeaderBar.update1354Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow1390Missing class docstring
    refactorpyozwman.ozwsh_mainMainWindow1390Too many instance attributes (30/7)
    conventionpyozwman.ozwsh_mainMainWindow._define_log1534Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._define_screen1704Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow.exit2538Instance of 'ZWaveOption' has no 'destroy' member
    warningpyozwman.ozwsh_mainMainWindow.execute28516Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow.execute29116Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow.execute37216Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute39816Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute42416Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute45016Invalid variable name "to"
    warningpyozwman.ozwsh_mainMainWindow.execute26616Unused variable 'cmd'
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many return statements (48/6)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many branches (72/12)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many statements (171/50)
    conventionpyozwman.ozwsh_mainMainWindow._unhandled_input4824Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input49312Specify string format arguments as logging function parameters
    errorpyozwman.ozwsh_mainMainWindow._unhandled_input49812Instance of 'MainWindow' has no 'refresh_nodes' member
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input50112Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._start_network5034Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow._start_network50523Unexpected keyword argument 'kvals' in constructor call
    errorpyozwman.ozwsh_mainMainWindow._start_network5148Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie5184Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_started5254Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5268Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_resetted5324Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted53238Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_stopped5394Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped53937Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_awaked5454Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_ready5514Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5528Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5538Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5558Unused variable 'wait_for_network'
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Invalid method name "_disconnect_louie_node_and_value"
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie_node_and_value5674Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_node_update5744Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57442Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57433Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_value_update5774Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57743Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57734Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57749Unused argument 'value'
    conventionpyozwman.ozwsh_mainMainWindow._louie_group5804Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_group58036Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_group58027Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_ctrl_message5834Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58350Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58359Unused argument 'controller'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58334Unused argument 'state'
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48716Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48916Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow.active_box2418Attribute '_active_box' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5288Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted5348Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped5418Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_awaked5478Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5548Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_main 360Unused select imported from select
    warningpyozwman.ozwsh_main 370Unused import sys
    warningpyozwman.ozwsh_main 380Unused import os
    warningpyozwman.ozwsh_main 440Unused format_exc imported from traceback
    warningpyozwman.ozwsh_main 470Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_main 480Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_main 490Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_main 530Unused OldestTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootDir imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 550Unused ControllerTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 560Unused NodeTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 600Unused DimmersTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused GroupsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused AssociationItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 650Unused StatTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 670Unused All imported from louie
    conventionpyozwweb 10Missing module docstring
    warningpyozwweb 260No exception type(s) specified
    warningpyozwweb.shell 360Wildcard import flask
    warningpyozwweb.shell 370Wildcard import app
    warningpyozwweb.shell 370Relative import 'app', should be 'pyozwweb.app'
    warningpyozwweb.shell 330Unused import readline
    warningpyozwweb.shell 340Unused pprint imported from pprint
    warningpyozwweb.shell 360Unused import render_template_string from wildcard import
    warningpyozwweb.shell 360Unused import Flask from wildcard import
    warningpyozwweb.shell 360Unused import request from wildcard import
    warningpyozwweb.shell 360Unused import get_flashed_messages from wildcard import
    warningpyozwweb.shell 360Unused import Blueprint from wildcard import
    warningpyozwweb.shell 360Unused import send_from_directory from wildcard import
    warningpyozwweb.shell 360Unused import session from wildcard import
    warningpyozwweb.shell 360Unused import Module from wildcard import
    warningpyozwweb.shell 360Unused import escape from wildcard import
    warningpyozwweb.shell 360Unused import Config from wildcard import
    warningpyozwweb.shell 360Unused import render_template from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_pushed from wildcard import
    warningpyozwweb.shell 360Unused import redirect from wildcard import
    warningpyozwweb.shell 360Unused import request_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import after_this_request from wildcard import
    warningpyozwweb.shell 360Unused import current_app from wildcard import
    warningpyozwweb.shell 360Unused import json from wildcard import
    warningpyozwweb.shell 360Unused import make_response from wildcard import
    warningpyozwweb.shell 360Unused import Response from wildcard import
    warningpyozwweb.shell 360Unused import request_started from wildcard import
    warningpyozwweb.shell 360Unused import has_app_context from wildcard import
    warningpyozwweb.shell 360Unused import send_file from wildcard import
    warningpyozwweb.shell 360Unused import get_template_attribute from wildcard import
    warningpyozwweb.shell 360Unused import Session from wildcard import
    warningpyozwweb.shell 360Unused import Markup from wildcard import
    warningpyozwweb.shell 360Unused import copy_current_request_context from wildcard import
    warningpyozwweb.shell 360Unused import Request from wildcard import
    warningpyozwweb.shell 360Unused import safe_join from wildcard import
    warningpyozwweb.shell 360Unused import flash from wildcard import
    warningpyozwweb.shell 360Unused import stream_with_context from wildcard import
    warningpyozwweb.shell 360Unused import template_rendered from wildcard import
    warningpyozwweb.shell 360Unused import got_request_exception from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import url_for from wildcard import
    warningpyozwweb.shell 360Unused import g from wildcard import
    warningpyozwweb.shell 360Unused import has_request_context from wildcard import
    warningpyozwweb.shell 360Unused import jsonify from wildcard import
    warningpyozwweb.shell 360Unused import json_available from wildcard import
    warningpyozwweb.shell 360Unused import message_flashed from wildcard import
    warningpyozwweb.shell 360Unused import abort from wildcard import
    warningpyozwweb.shell 360Unused import request_finished from wildcard import
    warningpyozwweb.shell 360Unused import signals_available from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_popped from wildcard import
    warningpyozwweb.shell 370Unused import leave_room from wildcard import
    warningpyozwweb.shell 370Unused import SocketIO from wildcard import
    warningpyozwweb.shell 370Unused import app from wildcard import
    warningpyozwweb.shell 370Unused import run_app from wildcard import
    warningpyozwweb.shell 370Unused import start_listener from wildcard import
    warningpyozwweb.shell 370Unused import create_app from wildcard import
    warningpyozwweb.shell 370Unused import NullHandler from wildcard import
    warningpyozwweb.shell 370Unused import disconnect from wildcard import
    warningpyozwweb.shell 370Unused import monkey from wildcard import
    warningpyozwweb.shell 370Unused import stop_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import stop_all from wildcard import
    warningpyozwweb.shell 370Unused import fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import time from wildcard import
    warningpyozwweb.shell 370Unused import close_room from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveNetwork from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveOption from wildcard import
    warningpyozwweb.shell 370Unused import sys from wildcard import
    warningpyozwweb.shell 370Unused import stop_listener from wildcard import
    warningpyozwweb.shell 370Unused import logging from wildcard import
    warningpyozwweb.shell 370Unused import install_secret_key from wildcard import
    warningpyozwweb.shell 370Unused import dispatcher from wildcard import
    warningpyozwweb.shell 370Unused import join_room from wildcard import
    warningpyozwweb.shell 370Unused import All from wildcard import
    warningpyozwweb.shell 370Unused import socketio from wildcard import
    warningpyozwweb.shell 370Unused import signal from wildcard import
    warningpyozwweb.shell 370Unused import Fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import threading from wildcard import
    warningpyozwweb.shell 370Unused import start_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import emit from wildcard import
    conventionpyozwweb.reloadmain330Missing function docstring
    conventionpyozwweb.runmain370Missing function docstring
    conventionpyozwweb.config 410Invalid constant name "_basedir"
    conventionpyozwweb.configConfig430Missing class docstring
    conventionpyozwweb.configProductionConfig730Missing class docstring
    conventionpyozwweb.configRunConfig770Missing class docstring
    conventionpyozwweb.configReloadConfig820Missing class docstring
    conventionpyozwweb.configTestingConfig880Missing class docstring
    conventionpyozwweb.app.listener 680No space allowed after bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 680No space allowed before bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 1200Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1210Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1240Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1250Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1260Line too long (168/140)
    conventionpyozwweb.app.listener 1430Exactly one space required around assignment + data=node.to_dict() + ^
    conventionpyozwweb.app.listener 1450Wrong continued indentation. + {'data': data}, + ^ |
    conventionpyozwweb.app.listener 1460Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1850Line too long (146/140)
    conventionpyozwweb.app.listener 2240No space allowed after bracket + self._stopevent.set( ) + ^
    conventionpyozwweb.app.listener 2240No space allowed before bracket + self._stopevent.set( ) + ^
    fatalpyozwweb.app.listener 344Unable to import 'pydispatch'
    conventionpyozwweb.app.listener 590Invalid constant name "listener"
    warningpyozwweb.app.listenerListenerThread._louie_network11712Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_network11712Reimport 'request' (imported line 47)
    errorpyozwweb.app.listenerListenerThread._louie_network12029Undefined variable 'data_room_network'
    errorpyozwweb.app.listenerListenerThread._louie_network12429Undefined variable 'data_room_network'
    warningpyozwweb.app.listenerListenerThread._louie_network12616Specify string format arguments as logging function parameters
    warningpyozwweb.app.listenerListenerThread._louie_network11712Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_node14026Unused argument 'network'
    warningpyozwweb.app.listenerListenerThread._louie_values16512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Unused variable 'request'
    warningpyozwweb.app.listenerstart_listener2304Using the global statement
    conventionpyozwweb.app.listenerstart_listener2304Invalid constant name "listener"
    warningpyozwweb.app.listenerstop_listener2394Using the global statement
    conventionpyozwweb.app.listenerstop_listener2394Invalid constant name "listener"
    warningpyozwweb.app.listener 310Unused import os
    warningpyozwweb.app.listener 370Unused import time
    warningpyozwweb.app.listener 410Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.listener 420Unused Singleton imported from openzwave.singleton
    warningpyozwweb.app.listener 450Unused All imported from louie
    warningpyozwweb.app.listener 470Unused Flask imported from flask
    warningpyozwweb.app.listener 470Unused request imported from flask
    warningpyozwweb.app.listener 470Unused session imported from flask
    warningpyozwweb.app.listener 470Unused render_template imported from flask
    warningpyozwweb.app.viewsmap960Redefining built-in 'map'
    errorpyozwweb.app.views 460No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.views 460Unable to import 'flask.ext.socketio'
    warningpyozwweb.app.views 580Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app.viewsnot_found710Missing function docstring
    warningpyozwweb.app.viewsnot_found7114Unused argument 'error'
    conventionpyozwweb.app.viewshome750Missing function docstring
    conventionpyozwweb.app.viewsnode800Missing function docstring
    conventionpyozwweb.app.viewsvalues840Missing function docstring
    conventionpyozwweb.app.viewscontroller880Missing function docstring
    conventionpyozwweb.app.viewsdebug920Missing function docstring
    conventionpyozwweb.app.viewsmap960Missing function docstring
    conventionpyozwweb.app.viewsscenes1000Missing function docstring
    conventionpyozwweb.app.viewschat1040Missing function docstring
    warningpyozwweb.app.views 410Unused import sys
    warningpyozwweb.app.views 410Unused import os
    warningpyozwweb.app.views 420Unused import time
    warningpyozwweb.app.views 430Unused Thread imported from threading
    warningpyozwweb.app.views 450Unused Flask imported from flask
    warningpyozwweb.app.views 450Unused session imported from flask
    warningpyozwweb.app.views 450Unused current_app imported from flask
    warningpyozwweb.app.views 450Unused request imported from flask
    warningpyozwweb.app.views 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused disconnect imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused emit imported from flask.ext.socketio
    warningpyozwweb.app.views 480Unused import libopenzwave
    warningpyozwweb.app.views 490Unused import openzwave
    warningpyozwweb.app.views 500Unused ZWaveNode imported from openzwave.node
    warningpyozwweb.app.views 510Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.views 520Unused ZWaveScene imported from openzwave.scene
    warningpyozwweb.app.views 530Unused ZWaveController imported from openzwave.controller
    warningpyozwweb.app.views 540Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.views 550Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.views 560Unused dispatcher imported from louie
    warningpyozwweb.app.views 560Unused All imported from louie
    warningpyozwweb.app.views 570Unused socketio imported from pyozwweb.app
    warningpyozwweb.app.views 580Unused listener imported from listener
    conventionpyozwweb.app.__init__ 930Exactly one space required after comma + socketio.run(app, use_reloader=app.config['RELOADER'],host=app.config['HOST'], port=app.config['PORT']) + ^
    conventionpyozwweb.app.__init__ 1830Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1860Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1870Unnecessary parens after u'print' keyword
    errorpyozwweb.app 430No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app 430Unable to import 'flask.ext.socketio'
    warningpyozwweb.app 670Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app 690Invalid constant name "fanstatic"
    conventionpyozwweb.app 700Invalid constant name "app"
    conventionpyozwweb.app 710Invalid constant name "socketio"
    conventionpyozwweb.apprun_app730Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Redefining name 'signal' from outer scope (line 65)
    conventionpyozwweb.apprun_app.signal_term_handler754Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Unused argument 'signal'
    warningpyozwweb.apprun_app.signal_term_handler7536Unused argument 'frame'
    warningpyozwweb.apprun_app834Using the global statement
    conventionpyozwweb.apprun_app834Invalid constant name "socketio"
    warningpyozwweb.apprun_app854Using the global statement
    conventionpyozwweb.apprun_app854Invalid constant name "app"
    warningpyozwweb.apprun_app874Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app924Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app7329Unused argument 'debug'
    conventionpyozwweb.appstop_all970Missing function docstring
    warningpyozwweb.appstop_all994Using global for 'app' but no assignment is done
    conventionpyozwweb.appstop_all994Invalid constant name "app"
    warningpyozwweb.appcreate_app1114Redefining name 'logging' from outer scope (line 55)
    warningpyozwweb.appcreate_app1034Redefining name 'monkey' from outer scope (line 35)
    conventionpyozwweb.appcreate_app1020Missing function docstring
    warningpyozwweb.appcreate_app1034Reimport 'monkey' (imported line 35)
    warningpyozwweb.appcreate_app1084Using the global statement
    conventionpyozwweb.appcreate_app1084Invalid constant name "app"
    warningpyozwweb.appcreate_app1144Specify string format arguments as logging function parameters
    conventionpyozwweb.appcreate_app1168Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1188Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1208Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1228Invalid variable name "ZWAVE_DEBUG"
    warningpyozwweb.appcreate_app1364Using the global statement
    conventionpyozwweb.appcreate_app1364Invalid constant name "fanstatic"
    warningpyozwweb.appcreate_app1384Using the global statement
    conventionpyozwweb.appcreate_app1384Invalid constant name "socketio"
    warningpyozwweb.appcreate_app1424Relative import 'views', should be 'pyozwweb.app.views'
    warningpyozwweb.appcreate_app1434Relative import 'socket', should be 'pyozwweb.app.socket'
    warningpyozwweb.appcreate_app1424Unused variable 'views'
    warningpyozwweb.appcreate_app1434Unused variable 'chat'
    warningpyozwweb.appcreate_app1434Unused variable 'ozwave'
    warningpyozwweb.appcreate_app1168Unused variable 'ZWAVE_DEBUG'
    warningpyozwweb.appstart_zwnetwork15020Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.appstart_zwnetwork1500Missing function docstring
    errorpyozwweb.appstart_zwnetwork1574Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwweb.appstop_zwnetwork1610Missing function docstring
    warningpyozwweb.appinstall_secret_key17023Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.app.socket.ozwave 950Exactly one space required around assignment + done=False + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 1000Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1060No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1140No space allowed before : + try : + ^
    conventionpyozwweb.app.socket.ozwave 1230Exactly one space required around assignment + done=False + ^
    conventionpyozwweb.app.socket.ozwave 1240Exactly one space required after comma + keys = ['posx','posy'] + ^
    conventionpyozwweb.app.socket.ozwave 1280Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1400No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1710Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1720Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1790Wrong continued indentation. + {'data': data, + ^|
    conventionpyozwweb.app.socket.ozwave 1800Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1820Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1830Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1860Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 1880Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 1930No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2000Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2020Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2070No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2140Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2160Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2210No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2280Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2300Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2350No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2420Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2440Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2490No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2860No space allowed before : + if data['result'] == True : + ^
    conventionpyozwweb.app.socket.ozwave 2980Line too long (147/140)
    errorpyozwweb.app.socket.ozwave 480No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.ozwave 480Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.ozwaveecho_message720Missing function docstring
    conventionpyozwweb.app.socket.ozwavedisconnect_request790Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_connect870Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_network_event920Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_node_event1110Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_nodes_event1460Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_controller_event1540Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_command_event1610Missing function docstring
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many branches (38/12)
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many statements (120/50)
    conventionpyozwweb.app.socket.ozwaveecho_value_event2940Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_scenes_event3030Missing function docstring
    warningpyozwweb.app.socket.ozwave 430Unused import os
    warningpyozwweb.app.socket.ozwave 430Unused import sys
    warningpyozwweb.app.socket.ozwave 440Unused import time
    warningpyozwweb.app.socket.ozwave 450Unused Thread imported from threading
    warningpyozwweb.app.socket.ozwave 470Unused Flask imported from flask
    warningpyozwweb.app.socket.ozwave 470Unused render_template imported from flask
    warningpyozwweb.app.socket.ozwave 480Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 500Unused import libopenzwave
    warningpyozwweb.app.socket.ozwave 510Unused import openzwave
    warningpyozwweb.app.socket.ozwave 520Unused ZWaveNode imported from openzwave.node
    warningpyozwweb.app.socket.ozwave 530Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.socket.ozwave 540Unused ZWaveScene imported from openzwave.scene
    warningpyozwweb.app.socket.ozwave 550Unused ZWaveController imported from openzwave.controller
    warningpyozwweb.app.socket.ozwave 560Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.socket.ozwave 570Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.socket.ozwave 580Unused All imported from louie
    warningpyozwweb.app.socket.ozwave 580Unused dispatcher imported from louie
    warningpyozwweb.app.socket.ozwave 590Unused app imported from pyozwweb.app
    warningpyozwweb.app.socket 900No exception type(s) specified
    conventionpyozwweb.app.socket.chat 1270Unnecessary parens after u'print' keyword
    errorpyozwweb.app.socket.chat 460No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.chat 460Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.chattest_message610Missing function docstring
    conventionpyozwweb.app.socket.chattest_broadcast_message700Missing function docstring
    conventionpyozwweb.app.socket.chatjoin780Missing function docstring
    conventionpyozwweb.app.socket.chatleave870Missing function docstring
    conventionpyozwweb.app.socket.chatclose960Missing function docstring
    conventionpyozwweb.app.socket.chatsend_room_message1050Missing function docstring
    conventionpyozwweb.app.socket.chatdisconnect_request1130Missing function docstring
    conventionpyozwweb.app.socket.chattest_connect1210Missing function docstring
    conventionpyozwweb.app.socket.chattest_disconnect1260Missing function docstring
    warningpyozwweb.app.socket.chat 410Unused import sys
    warningpyozwweb.app.socket.chat 410Unused import os
    warningpyozwweb.app.socket.chat 420Unused import time
    warningpyozwweb.app.socket.chat 430Unused Thread imported from threading
    warningpyozwweb.app.socket.chat 450Unused Flask imported from flask
    warningpyozwweb.app.socket.chat 450Unused current_app imported from flask
    warningpyozwweb.app.socket.chat 450Unused render_template imported from flask
    warningpyozwweb.app.socket.chat 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.chat 480Unused app imported from pyozwweb.app
    refactoropenzwave.nodeZWaveNode490Interface not implemented
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.ozwave)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.chat)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.views)
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.listener:6 +==pyozwweb.app.views:17 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +from gevent import monkey +monkey.patch_all() + +import os +import sys +if sys.hexversion &gt;= 0x3000000: + from pydispatch import dispatcher +else: + from louie import dispatcher +import time + +from openzwave.network import ZWaveNetwork +from openzwave.controller import ZWaveController +from openzwave.option import ZWaveOption +from openzwave.singleton import Singleton +import threading +from threading import Thread +from louie import dispatcher, All + +from flask import Flask, render_template, session, request, current_app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logging.getLogger('pyozwweb').addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} + + ZWAVE_DEVICE = "/dev/ttyUSB0"
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os, sys +import time +from threading import Thread + +from flask import Flask, render_template, session, request, current_app +from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect + +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from louie import dispatcher, All +from pyozwweb.app import socketio, app + +import logging try: # Python 2.7+ from logging import NullHandler except ImportError: @@ -14781,6 +27139,8 @@

    Messages

      1 0Similar lines in 2 files ==openzwave.object:25 ==openzwave.singleton:25 @@ -14807,6 +27167,34 @@

    Messages

    for key in vals.keys(): ret[key]=vals[key] return ret
    refactorpyozwweb.app.socket.chat 10Similar lines in 12 files +==openzwave.command:25 +==openzwave.controller:26 +==openzwave.group:25 +==openzwave.network:25 +==openzwave.node:25 +==openzwave.object:25 +==openzwave.option:25 +==openzwave.scene:25 +==openzwave.singleton:25 +==openzwave.value:25 +==pyozwman.ozwsh_main:30 +==pyozwman.ozwsh_widgets:29 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass
    refactorpass
    tests.api.test_network_start:TestNetworkStartStop 5.00
    tests.api.test_controller_command:TestControllerCommand 5.00
    tests.api.test_controller_command:TestControllerCommand7.003 3 0 0DetailDetail
    test_010_command_send_node_information_nodeid
    1.00 pass
    test_020_command_send_node_information_nodeid_controller
    3.00 pass
    test_210_command_request_node_neigbhor_update_node
    1.00 pass
    tests.api.test_switch_all:TestSwitchAll 4.00 3
    test_020_switch_all_items
    0.00tests.api.test_network_start:TestNetworkStartStop5.001100Detail
    test_000_network_start_stop
    5.00pass
    4 0 0DetailDetail
    test_010_protection_item
    0.00 pass
    test_020_protection_set_item_no_operation
    2.00 pass
    test_030_protection_set_item_unprotected
    2.00 pass
    test_050_protection_items
    0.00 pass
    tests.api.test_switch:TestSwitch 3.00 2
    test_110_switch_on_off
    3.00tests.api.test_switch_all:TestSwitchAll4.003300Detail
    test_010_switch_all_item
    0.00pass
    test_015_switch_all_set_item
    4.00pass
    test_020_switch_all_items
    0.00pass
    tests.api.autobuild.test_api:TestNetworkApi 2.04 3
    test_900_api_singleton
    tests.api.test_switch:TestSwitch3.002200Detail
    test_010_switch_state
    0.00 pass
    test_905_network_singleton
    0.00
    test_110_switch_on_off
    3.00pass
    tests.api.test_network:TestNetwork2.042.059 9 0 0Detail
    Detail
    test_000_network_awake
    0.00 pass
    test_010_network_ready
    0.00 pass
    test_100_network_test
    0.00 pass
    test_110_network_heal
    0.00 pass
    test_120_network_poll
    0.00 pass
    test_200_network_to_dict
    0.00 pass
    test_220_network_nodes_to_dict
    0.00 pass
    test_300_network_kvals_nodes
    1.07
    test_300_network_kvals_nodes
    1.08pass
    test_310_network_kvals_controller
    0.06 pass
    tests.manager.autobuild.test_manager:ManagerTest 0.07 1
    test_000_import
    0.07tests.api.autobuild.test_api:TestNetworkApi1.003300Detail
    test_000_api_network
    1.00pass
    test_900_api_singleton
    0.00pass
    test_905_network_singleton
    0.00pass
    9 0 0Detail
    Detail
    test_000_server_start
    0.02 pass
    test_001_error_404
    0.00 pass
    test_100_home_is_up
    0.00 pass
    test_200_controller_is_up
    0.00 pass
    test_300_values_is_up
    0.00 pass
    test_400_controller_is_up
    0.00 pass
    test_500_node_is_up
    0.00 pass
    test_600_map_is_up
    0.00 pass
    test_700_scenes_is_up
    0.00 pass 4 0 0Detail
    test_030_options_with_command_line
    0.00Detail
    test_000_import
    0.02pass
    5 0 0Detail
    Detail
    test_000_nodes_count
    0.00 pass
    test_100_nodes_test
    0.00 pass
    test_200_nodes_to_dict
    0.00 pass
    test_210_controller_to_dict
    0.00 pass
    test_220_nodes_groups_to_dict
    0.00 pass 1 0 0Detail
    Detail
    test_200_values_to_dict
    0.00 pass 3 0 0DetailDetail
    test_005_scene_add_remove
    0.00pass
    test_010_scenes_to_dict
    0.00pass
    test_020_scene_to_dict
    0.00pass
    tests.lib.autobuild.test_lib:TestInit0.004400Detail
    test_005_scene_add_remove
    test_000_init
    0.00 pass
    test_010_scenes_to_dict
    test_010_options_exceptions
    0.00 pass
    test_020_scene_to_dict
    test_020_options_without_command_line
    0.00pass
    test_030_options_with_command_line
    0.00pass
    tests.api.test_sensor:TestSensor0.002200Detail
    test_010_sensor_bool
    0.00pass
    test_410_sensor_decimal
    0.00 pass
    4 0 0DetailDetail
    test_010_options_string
    0.00 pass
    test_020_options_bool
    0.00 pass
    test_030_options_int
    0.00 pass
    test_040_options_generic
    0.00 pass
    Total1:15.031:15.0277 77 0
    method 531530 +1.00531=83.43 3.01
    code 5008 51.444995 +13.005008=
    docstring 3842 39.473829 +13.003842=
    comment empty 610 6.27609 +1.00610=
    @@ -130,14 +150,24 @@

    Duplication

    nb duplicated lines 2136 +<<<<<<< HEAD 2131 +5.00 +======= +2136 += +>>>>>>> master percent duplicated lines 21.409 +<<<<<<< HEAD 21.417 -0.01 +======= +21.409 += +>>>>>>> master @@ -153,8 +183,13 @@

    Messages by category

    convention 891 +<<<<<<< HEAD 888 +3.00 +======= +891 += +>>>>>>> master refactor @@ -165,8 +200,13 @@

    Messages by category

    warning 505 +<<<<<<< HEAD 501 +4.00 +======= +505 += +>>>>>>> master error @@ -203,8 +243,13 @@

    % errors / warnings by module

    openzwave.option 22.22 +<<<<<<< HEAD 0.00 0.00 +======= +0.00 +0.00 +>>>>>>> master 0.45 @@ -321,16 +366,29 @@

    % errors / warnings by module

    pyozwweb.app.socket.__init__ +<<<<<<< HEAD +======= +0.00 +0.20 +0.00 +0.00 + + +pyozwweb.config +>>>>>>> master 0.00 0.20 0.00 0.00 +<<<<<<< HEAD pyozwweb.config 0.00 0.00 0.00 +======= +>>>>>>> master 0.67 @@ -558,7 +616,11 @@

    Messages

    Global evaluation

    +<<<<<<< HEAD Your code has been rated at 5.35/10 (previous run: 5.35/10, -0.00)
    +======= +Your code has been rated at 5.35/10 (previous run: 5.35/10, +0.00) +>>>>>>> master

    Messages

    @@ -620,6 +682,13 @@

    Messages

    +<<<<<<< HEAD + + + + + +======= @@ -685,6 +754,185 @@

    Messages

    +>>>>>>> master + + + + + + + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -828,7 +1076,7 @@

    Messages

    - + @@ -844,7 +1092,7 @@

    Messages

    - + @@ -2674,6 +2922,7 @@

    Messages

    +<<<<<<< HEAD @@ -2693,6 +2942,36 @@

    Messages

    +======= + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + +======= + + + + + + + + + + + + + @@ -14246,30 +14525,12109 @@

    Messages

    """ __author__ = 'Sébastien GALLET aka bibi21000' __email__ = 'bibi21000@gmail.com' -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -import os, sys -import time -from threading import Thread -from flask import Flask, render_template, session, request, current_app -from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect - -import libopenzwave -import openzwave -from openzwave.node import ZWaveNode -from openzwave.value import ZWaveValue -from openzwave.scene import ZWaveScene -from openzwave.controller import ZWaveController -from openzwave.network import ZWaveNetwork -from openzwave.option import ZWaveOption -from louie import dispatcher, All -from pyozwweb.app import socketio, app +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) -import logging +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + +<<<<<<< HEAD + + +======= + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + +<<<<<<< HEAD + + +======= + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + + + + + + + +======= +>>>>>>> master From 4c2be7d6f8c3ea2f2098e6607b29184540d890b6 Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Sun, 3 May 2015 16:39:34 +0200 Subject: [PATCH 07/14] Auto-merge from master --- .../html/coverage/pyozwman_ozwsh_widgets.html | 776 + docs/html/nosetests/nosetests.html | 305 +- docs/html/pylint/report.html | 14444 +++++++++++++++- .../coverage/pyozwman_ozwsh_widgets.html | 776 + docs/joomla/nosetests/nosetests.html | 305 +- docs/joomla/pylint/report.html | 14444 +++++++++++++++- 6 files changed, 30310 insertions(+), 740 deletions(-) diff --git a/docs/html/coverage/pyozwman_ozwsh_widgets.html b/docs/html/coverage/pyozwman_ozwsh_widgets.html index cdc7b5a7..8af56022 100644 --- a/docs/html/coverage/pyozwman_ozwsh_widgets.html +++ b/docs/html/coverage/pyozwman_ozwsh_widgets.html @@ -7,6 +7,7 @@ <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD Coverage for pyozwman.ozwsh_widgets: 16% ======= @@ -15,6 +16,9 @@ ======= Coverage for pyozwman.ozwsh_widgets: 34% >>>>>>> master +======= + Coverage for pyozwman.ozwsh_widgets: 34% +>>>>>>> master ======= Coverage for pyozwman.ozwsh_widgets: 34% >>>>>>> master @@ -35,6 +39,7 @@

    Coverage for pyozwman.ozwsh_widgets : <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD 16%

    @@ -61,6 +66,15 @@

    473 run 925 missing >>>>>>> master +======= + 34% +

    + +

    + 1398 statements   + 473 run + 925 missing +>>>>>>> master ======= 34%

    @@ -208,6 +222,7 @@

    67

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    68

    >>>>>>> master

    69

    @@ -222,6 +237,11 @@

    69

    70

    >>>>>>> master +======= +

    68

    +

    69

    +

    70

    +>>>>>>> master

    71

    72

    <<<<<<< HEAD @@ -303,6 +323,7 @@

    109

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    110

    >>>>>>> master

    111

    @@ -332,6 +353,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    110

    111

    112

    @@ -340,6 +363,9 @@

    115

    116

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -358,6 +384,7 @@

    129

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    130

    >>>>>>> master ======= @@ -366,6 +393,9 @@

    =======

    130

    >>>>>>> master +======= +

    130

    +>>>>>>> master

    131

    132

    133

    @@ -380,6 +410,7 @@

    141

    142

    <<<<<<< HEAD +<<<<<<< HEAD

    143

    144

    145

    @@ -421,6 +452,8 @@

    142

    ======= >>>>>>> master +======= +>>>>>>> master

    143

    144

    145

    @@ -455,6 +488,7 @@

    174

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    175

    >>>>>>> master ======= @@ -463,12 +497,16 @@

    =======

    175

    >>>>>>> master +======= +

    175

    +>>>>>>> master

    176

    177

    178

    179

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    180

    181

    182

    @@ -493,11 +531,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    180

    181

    182

    183

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -526,6 +569,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    205

    206

    207

    @@ -579,6 +623,9 @@

    =======

    205

    >>>>>>> master +======= +

    205

    +>>>>>>> master

    206

    207

    208

    @@ -617,6 +664,7 @@

    241

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    242

    243

    244

    @@ -644,6 +692,33 @@

    264

    265

    266

    +======= +

    242

    +

    243

    +

    244

    +

    245

    +

    246

    +

    247

    +

    248

    +

    249

    +

    250

    +

    251

    +

    252

    +

    253

    +

    254

    +

    255

    +

    256

    +

    257

    +

    258

    +

    259

    +

    260

    +

    261

    +

    262

    +

    263

    +

    264

    +

    265

    +

    266

    +>>>>>>> master

    267

    268

    269

    @@ -680,6 +755,9 @@

    269

    270

    271

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    272

    273

    @@ -687,6 +765,7 @@

    275

    276

    <<<<<<< HEAD +<<<<<<< HEAD

    277

    278

    279

    @@ -783,6 +862,23 @@

    290

    291

    >>>>>>> master +======= +

    277

    +

    278

    +

    279

    +

    280

    +

    281

    +

    282

    +

    283

    +

    284

    +

    285

    +

    286

    +

    287

    +

    288

    +

    289

    +

    290

    +

    291

    +>>>>>>> master

    292

    293

    294

    @@ -794,6 +890,7 @@

    300

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    301

    >>>>>>> master ======= @@ -802,6 +899,9 @@

    =======

    301

    >>>>>>> master +======= +

    301

    +>>>>>>> master

    302

    303

    304

    @@ -822,6 +922,7 @@

    311

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    312

    >>>>>>> master ======= @@ -830,12 +931,16 @@

    =======

    312

    >>>>>>> master +======= +

    312

    +>>>>>>> master

    313

    314

    315

    316

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    317

    <<<<<<< HEAD

    318

    @@ -890,6 +995,10 @@

    317

    318

    >>>>>>> master +======= +

    317

    +

    318

    +>>>>>>> master

    319

    320

    321

    @@ -927,6 +1036,7 @@

    353

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    354

    355

    356

    @@ -977,6 +1087,19 @@

    363

    364

    >>>>>>> master +======= +

    354

    +

    355

    +

    356

    +

    357

    +

    358

    +

    359

    +

    360

    +

    361

    +

    362

    +

    363

    +

    364

    +>>>>>>> master

    365

    366

    367

    @@ -989,6 +1112,7 @@

    374

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    375

    ======= @@ -1002,10 +1126,15 @@

    ======= >>>>>>> master ======= +======= +>>>>>>> master

    375

    376

    377

    378

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    379

    380

    @@ -1013,6 +1142,7 @@

    382

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    383

    384

    385

    @@ -1062,6 +1192,17 @@

    390

    391

    >>>>>>> master +======= +

    383

    +

    384

    +

    385

    +

    386

    +

    387

    +

    388

    +

    389

    +

    390

    +

    391

    +>>>>>>> master

    392

    393

    394

    @@ -1073,6 +1214,7 @@

    400

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    401

    ======= @@ -1081,6 +1223,9 @@

    =======

    401

    >>>>>>> master +======= +

    401

    +>>>>>>> master

    402

    403

    404

    @@ -1098,6 +1243,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    412

    413

    414

    @@ -1120,6 +1266,12 @@

    414

    415

    >>>>>>> master +======= +

    412

    +

    413

    +

    414

    +

    415

    +>>>>>>> master

    416

    417

    418

    @@ -1137,6 +1289,7 @@

    429

    430

    <<<<<<< HEAD +<<<<<<< HEAD

    431

    432

    433

    @@ -1165,6 +1318,17 @@

    437

    438

    439

    +======= +

    431

    +

    432

    +

    433

    +

    434

    +

    435

    +

    436

    +

    437

    +

    438

    +

    439

    +>>>>>>> master

    440

    441

    442

    @@ -1174,11 +1338,15 @@

    446

    447

    448

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    449

    450

    451

    <<<<<<< HEAD +<<<<<<< HEAD

    452

    453

    454

    @@ -1217,6 +1385,8 @@

    451

    ======= >>>>>>> master +======= +>>>>>>> master

    452

    453

    454

    @@ -1245,6 +1415,7 @@

    468

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    469

    ======= @@ -1253,6 +1424,9 @@

    =======

    469

    >>>>>>> master +======= +

    469

    +>>>>>>> master

    470

    471

    472

    @@ -1307,6 +1481,7 @@

    496

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    497

    >>>>>>> master

    498

    @@ -1410,6 +1585,25 @@

    512

    513

    >>>>>>> master +======= +

    497

    +

    498

    +

    499

    +

    500

    +

    501

    +

    502

    +

    503

    +

    504

    +

    505

    +

    506

    +

    507

    +

    508

    +

    509

    +

    510

    +

    511

    +

    512

    +

    513

    +>>>>>>> master

    514

    515

    516

    @@ -1461,6 +1655,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    561

    562

    563

    @@ -1504,6 +1699,9 @@

    =======

    561

    >>>>>>> master +======= +

    561

    +>>>>>>> master

    562

    563

    564

    @@ -1546,6 +1744,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    600

    601

    ======= @@ -1557,11 +1756,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    600

    601

    602

    603

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -1575,6 +1779,7 @@

    608

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    609

    ======= @@ -1583,12 +1788,16 @@

    =======

    609

    >>>>>>> master +======= +

    609

    +>>>>>>> master

    610

    611

    612

    613

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    614

    615

    616

    @@ -1613,12 +1822,20 @@

    617

    618

    >>>>>>> master +======= +

    614

    +

    615

    +

    616

    +

    617

    +

    618

    +>>>>>>> master

    619

    620

    621

    622

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    623

    624

    >>>>>>> master @@ -1628,12 +1845,17 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    623

    624

    625

    626

    627

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -1651,6 +1873,7 @@

    639

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    640

    <<<<<<< HEAD

    641

    @@ -1691,6 +1914,9 @@

    =======

    640

    >>>>>>> master +======= +

    640

    +>>>>>>> master

    641

    642

    643

    @@ -1728,6 +1954,7 @@

    674

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    675

    676

    <<<<<<< HEAD @@ -1829,12 +2056,17 @@

    679

    680

    ======= +======= +>>>>>>> master

    675

    676

    677

    678

    679

    680

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    681

    682

    @@ -1882,6 +2114,7 @@

    722

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    723

    724

    725

    @@ -1894,6 +2127,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    723

    724

    725

    @@ -1903,6 +2138,9 @@

    729

    730

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -1939,6 +2177,7 @@

    745

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    746

    ======= @@ -1947,6 +2186,9 @@

    =======

    746

    >>>>>>> master +======= +

    746

    +>>>>>>> master

    747

    748

    749

    @@ -1959,6 +2201,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    756

    @@ -1968,6 +2213,7 @@

    760

    761

    <<<<<<< HEAD +<<<<<<< HEAD

    762

    763

    764

    @@ -1987,6 +2233,8 @@

    761

    ======= >>>>>>> master +======= +>>>>>>> master

    762

    763

    764

    @@ -2006,6 +2254,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    777

    778

    779

    @@ -2020,6 +2269,9 @@

    =======

    777

    >>>>>>> master +======= +

    777

    +>>>>>>> master

    778

    779

    780

    @@ -2032,6 +2284,7 @@

    786

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    787

    <<<<<<< HEAD

    788

    @@ -2049,6 +2302,9 @@

    =======

    787

    >>>>>>> master +======= +

    787

    +>>>>>>> master

    788

    789

    790

    @@ -2057,6 +2313,7 @@

    793

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    794

    795

    >>>>>>> master @@ -2065,11 +2322,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    794

    795

    796

    797

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -2079,6 +2341,7 @@

    801

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    802

    803

    804

    @@ -2169,6 +2432,24 @@

    816

    817

    >>>>>>> master +======= +

    802

    +

    803

    +

    804

    +

    805

    +

    806

    +

    807

    +

    808

    +

    809

    +

    810

    +

    811

    +

    812

    +

    813

    +

    814

    +

    815

    +

    816

    +

    817

    +>>>>>>> master

    818

    819

    820

    @@ -2218,6 +2499,7 @@

    863

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    864

    <<<<<<< HEAD

    865

    @@ -2250,6 +2532,15 @@

    869

    870

    >>>>>>> master +======= +

    864

    +

    865

    +

    866

    +

    867

    +

    868

    +

    869

    +

    870

    +>>>>>>> master

    871

    872

    873

    @@ -2258,6 +2549,7 @@

    875

    876

    <<<<<<< HEAD +<<<<<<< HEAD

    877

    878

    879

    @@ -2266,6 +2558,8 @@

    876

    ======= >>>>>>> master +======= +>>>>>>> master

    877

    878

    879

    @@ -2279,6 +2573,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    886

    =======

    886

    @@ -2289,6 +2584,9 @@

    =======

    886

    >>>>>>> master +======= +

    886

    +>>>>>>> master

    887

    888

    889

    @@ -2296,6 +2594,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    891

    892

    893

    @@ -2370,6 +2669,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    891

    892

    893

    @@ -2377,6 +2678,9 @@

    895

    896

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -2436,6 +2740,7 @@

    950

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    951

    952

    953

    @@ -2483,6 +2788,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    951

    952

    953

    @@ -2495,6 +2802,9 @@

    960

    961

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -2538,6 +2848,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    998

    999

    1000

    @@ -2553,6 +2864,9 @@

    =======

    998

    >>>>>>> master +======= +

    998

    +>>>>>>> master

    999

    1000

    1001

    @@ -2565,6 +2879,7 @@

    1007

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1008

    1009

    <<<<<<< HEAD @@ -2600,11 +2915,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    1008

    1009

    1010

    1011

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -2643,6 +2963,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1043

    =======

    1043

    @@ -2659,6 +2980,11 @@

    1044

    1045

    >>>>>>> master +======= +

    1043

    +

    1044

    +

    1045

    +>>>>>>> master

    1046

    1047

    <<<<<<< HEAD @@ -2693,6 +3019,7 @@

    1061

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1062

    >>>>>>> master ======= @@ -2701,6 +3028,9 @@

    =======

    1062

    >>>>>>> master +======= +

    1062

    +>>>>>>> master

    1063

    1064

    1065

    @@ -2722,6 +3052,7 @@

    1075

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1076

    >>>>>>> master ======= @@ -2730,6 +3061,9 @@

    =======

    1076

    >>>>>>> master +======= +

    1076

    +>>>>>>> master

    1077

    1078

    1079

    @@ -2751,6 +3085,7 @@

    1089

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1090

    >>>>>>> master ======= @@ -2759,6 +3094,9 @@

    =======

    1090

    >>>>>>> master +======= +

    1090

    +>>>>>>> master

    1091

    1092

    1093

    @@ -2792,6 +3130,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1117

    1118

    1119

    @@ -2858,6 +3197,16 @@

    1123

    1124

    >>>>>>> master +======= +

    1117

    +

    1118

    +

    1119

    +

    1120

    +

    1121

    +

    1122

    +

    1123

    +

    1124

    +>>>>>>> master

    1125

    1126

    1127

    @@ -2866,6 +3215,9 @@

    1130

    1131

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -2887,6 +3239,7 @@

    1147

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1148

    >>>>>>> master ======= @@ -2895,6 +3248,9 @@

    =======

    1148

    >>>>>>> master +======= +

    1148

    +>>>>>>> master

    1149

    1150

    1151

    @@ -2905,6 +3261,7 @@

    1155

    1156

    <<<<<<< HEAD +<<<<<<< HEAD

    1157

    1158

    1159

    @@ -3033,6 +3390,34 @@

    1181

    1182

    >>>>>>> master +======= +

    1157

    +

    1158

    +

    1159

    +

    1160

    +

    1161

    +

    1162

    +

    1163

    +

    1164

    +

    1165

    +

    1166

    +

    1167

    +

    1168

    +

    1169

    +

    1170

    +

    1171

    +

    1172

    +

    1173

    +

    1174

    +

    1175

    +

    1176

    +

    1177

    +

    1178

    +

    1179

    +

    1180

    +

    1181

    +

    1182

    +>>>>>>> master

    1183

    1184

    1185

    @@ -3082,6 +3467,7 @@

    1228

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1229

    <<<<<<< HEAD

    1230

    @@ -3108,6 +3494,13 @@

    1232

    1233

    >>>>>>> master +======= +

    1229

    +

    1230

    +

    1231

    +

    1232

    +

    1233

    +>>>>>>> master

    1234

    1235

    1236

    @@ -3130,6 +3523,7 @@

    1244

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1245

    1246

    >>>>>>> master @@ -3141,6 +3535,10 @@

    1245

    1246

    >>>>>>> master +======= +

    1245

    +

    1246

    +>>>>>>> master

    1247

    1248

    1249

    @@ -3156,6 +3554,7 @@

    1258

    1259

    <<<<<<< HEAD +<<<<<<< HEAD

    1260

    1261

    1262

    @@ -3196,6 +3595,23 @@

    1272

    1273

    1274

    +======= +

    1260

    +

    1261

    +

    1262

    +

    1263

    +

    1264

    +

    1265

    +

    1266

    +

    1267

    +

    1268

    +

    1269

    +

    1270

    +

    1271

    +

    1272

    +

    1273

    +

    1274

    +>>>>>>> master

    1275

    1276

    1277

    @@ -3205,11 +3621,15 @@

    1281

    1282

    1283

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1284

    1285

    1286

    <<<<<<< HEAD +<<<<<<< HEAD

    1287

    1288

    1289

    @@ -3269,6 +3689,10 @@

    1287

    1288

    >>>>>>> master +======= +

    1287

    +

    1288

    +>>>>>>> master

    1289

    1290

    1291

    @@ -3278,6 +3702,9 @@

    1295

    1296

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -3304,6 +3731,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    1309

    @@ -3312,6 +3742,7 @@

    1312

    1313

    <<<<<<< HEAD +<<<<<<< HEAD

    1314

    1315

    1316

    @@ -3352,6 +3783,14 @@

    1317

    1318

    1319

    +======= +

    1314

    +

    1315

    +

    1316

    +

    1317

    +

    1318

    +

    1319

    +>>>>>>> master

    1320

    1321

    1322

    @@ -3369,6 +3808,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master ======= @@ -3380,6 +3822,7 @@

    1337

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1338

    =======

    1333

    @@ -3418,11 +3861,17 @@

    =======

    1338

    >>>>>>> master +======= +

    1338

    +>>>>>>> master

    1339

    1340

    1341

    1342

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -3460,6 +3909,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    1373

    @@ -3468,6 +3920,7 @@

    1376

    1377

    <<<<<<< HEAD +<<<<<<< HEAD

    1378

    1379

    1380

    @@ -3522,6 +3975,12 @@

    1380

    1381

    >>>>>>> master +======= +

    1378

    +

    1379

    +

    1380

    +

    1381

    +>>>>>>> master

    1382

    1383

    1384

    @@ -3561,6 +4020,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1417

    1418

    ======= @@ -3572,11 +4032,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    1417

    1418

    1419

    1420

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -3624,6 +4089,7 @@

    1441

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1442

    1443

    >>>>>>> master @@ -3670,6 +4136,15 @@

    1447

    1448

    >>>>>>> master +======= +

    1442

    +

    1443

    +

    1444

    +

    1445

    +

    1446

    +

    1447

    +

    1448

    +>>>>>>> master

    1449

    1450

    1451

    @@ -3688,6 +4163,7 @@

    1464

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1465

    1466

    >>>>>>> master @@ -3699,12 +4175,17 @@

    1465

    1466

    >>>>>>> master +======= +

    1465

    +

    1466

    +>>>>>>> master

    1467

    1468

    1469

    1470

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1471

    <<<<<<< HEAD

    1472

    @@ -3780,6 +4261,10 @@

    1471

    1472

    >>>>>>> master +======= +

    1471

    +

    1472

    +>>>>>>> master

    1473

    1474

    1475

    @@ -3870,6 +4355,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    1555

    @@ -3878,6 +4366,7 @@

    1558

    1559

    <<<<<<< HEAD +<<<<<<< HEAD

    1560

    1561

    1562

    @@ -3908,12 +4397,18 @@

    1561

    1562

    >>>>>>> master +======= +

    1560

    +

    1561

    +

    1562

    +>>>>>>> master

    1563

    1564

    1565

    1566

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1567

    1568

    1569

    @@ -3972,6 +4467,19 @@

    1576

    1577

    >>>>>>> master +======= +

    1567

    +

    1568

    +

    1569

    +

    1570

    +

    1571

    +

    1572

    +

    1573

    +

    1574

    +

    1575

    +

    1576

    +

    1577

    +>>>>>>> master

    1578

    1579

    1580

    @@ -3990,6 +4498,7 @@

    1593

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1594

    1595

    >>>>>>> master @@ -4001,12 +4510,17 @@

    1594

    1595

    >>>>>>> master +======= +

    1594

    +

    1595

    +>>>>>>> master

    1596

    1597

    1598

    1599

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1600

    <<<<<<< HEAD

    1601

    @@ -4030,11 +4544,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    1600

    1601

    1602

    1603

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -4051,6 +4570,7 @@

    1614

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1615

    1616

    @@ -4065,6 +4585,13 @@

    1618

    1619

    >>>>>>> master +======= +

    1615

    +

    1616

    +

    1617

    +

    1618

    +

    1619

    +>>>>>>> master

    1620

    1621

    1622

    @@ -4083,6 +4610,7 @@

    1635

    1636

    <<<<<<< HEAD +<<<<<<< HEAD

    1637

    1638

    1639

    @@ -4174,6 +4702,21 @@

    1647

    1648

    1649

    +======= +

    1637

    +

    1638

    +

    1639

    +

    1640

    +

    1641

    +

    1642

    +

    1643

    +

    1644

    +

    1645

    +

    1646

    +

    1647

    +

    1648

    +

    1649

    +>>>>>>> master

    1650

    1651

    1652

    @@ -4215,6 +4758,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1683

    =======

    1683

    @@ -4225,12 +4769,16 @@

    =======

    1683

    >>>>>>> master +======= +

    1683

    +>>>>>>> master

    1684

    1685

    1686

    1687

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1688

    <<<<<<< HEAD

    1689

    @@ -4270,6 +4818,10 @@

    1688

    1689

    >>>>>>> master +======= +

    1688

    +

    1689

    +>>>>>>> master

    1690

    1691

    1692

    @@ -4296,6 +4848,7 @@

    1713

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1714

    1715

    >>>>>>> master @@ -4304,11 +4857,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    1714

    1715

    1716

    1717

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -4354,6 +4912,7 @@

    1737

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1738

    1739

    >>>>>>> master @@ -4399,6 +4958,15 @@

    1743

    1744

    >>>>>>> master +======= +

    1738

    +

    1739

    +

    1740

    +

    1741

    +

    1742

    +

    1743

    +

    1744

    +>>>>>>> master

    1745

    1746

    1747

    @@ -4417,6 +4985,7 @@

    1760

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1761

    >>>>>>> master ======= @@ -4425,6 +4994,9 @@

    =======

    1761

    >>>>>>> master +======= +

    1761

    +>>>>>>> master

    1762

    1763

    1764

    @@ -4434,6 +5006,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1768

    1769

    1770

    @@ -4462,6 +5035,11 @@

    1769

    1770

    >>>>>>> master +======= +

    1768

    +

    1769

    +

    1770

    +>>>>>>> master

    1771

    1772

    1773

    @@ -4475,6 +5053,7 @@

    1781

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1782

    1783

    @@ -4482,6 +5061,13 @@

    1785

    <<<<<<< HEAD

    1786

    +======= +

    1782

    +

    1783

    +

    1784

    +

    1785

    +

    1786

    +>>>>>>> master

    1787

    1788

    1789

    @@ -4499,6 +5085,7 @@

    1801

    1802

    1803

    +<<<<<<< HEAD

    1804

    1805

    1806

    @@ -4522,6 +5109,31 @@

    1824

    1825

    1826

    +======= +

    1804

    +

    1805

    +

    1806

    +

    1807

    +

    1808

    +

    1809

    +

    1810

    +

    1811

    +

    1812

    +

    1813

    +

    1814

    +

    1815

    +

    1816

    +

    1817

    +

    1818

    +

    1819

    +

    1820

    +

    1821

    +

    1822

    +

    1823

    +

    1824

    +

    1825

    +

    1826

    +>>>>>>> master

    1827

    1828

    1829

    @@ -4622,6 +5234,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1849

    1850

    ======= @@ -4633,11 +5246,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    1849

    1850

    1851

    1852

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -4716,6 +5334,7 @@

    1871

    1872

    1873

    +<<<<<<< HEAD =======

    1860

    1861

    @@ -4732,6 +5351,8 @@

    1872

    1873

    >>>>>>> master +======= +>>>>>>> master

    1874

    1875

    1876

    @@ -4767,6 +5388,7 @@

    1906

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1907

    >>>>>>> master

    1908

    @@ -4778,6 +5400,10 @@

    1907

    1908

    >>>>>>> master +======= +

    1907

    +

    1908

    +>>>>>>> master

    1909

    1910

    1911

    @@ -4787,6 +5413,7 @@

    1914

    1915

    <<<<<<< HEAD +<<<<<<< HEAD

    1916

    1917

    1918

    @@ -4839,6 +5466,29 @@

    1934

    1935

    1936

    +======= +

    1916

    +

    1917

    +

    1918

    +

    1919

    +

    1920

    +

    1921

    +

    1922

    +

    1923

    +

    1924

    +

    1925

    +

    1926

    +

    1927

    +

    1928

    +

    1929

    +

    1930

    +

    1931

    +

    1932

    +

    1933

    +

    1934

    +

    1935

    +

    1936

    +>>>>>>> master

    1937

    1938

    1939

    @@ -4848,11 +5498,15 @@

    1943

    1944

    1945

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1946

    1947

    1948

    <<<<<<< HEAD +<<<<<<< HEAD

    1949

    1950

    1951

    @@ -4895,6 +5549,8 @@

    1948

    ======= >>>>>>> master +======= +>>>>>>> master

    1949

    1950

    1951

    @@ -4929,6 +5585,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1975

    1976

    1977

    @@ -4942,12 +5599,16 @@

    =======

    1975

    >>>>>>> master +======= +

    1975

    +>>>>>>> master

    1976

    1977

    1978

    1979

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1980

    ======= @@ -4956,6 +5617,9 @@

    =======

    1980

    >>>>>>> master +======= +

    1980

    +>>>>>>> master

    1981

    1982

    1983

    @@ -4997,6 +5661,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    2012

    @@ -5005,6 +5672,7 @@

    2015

    2016

    <<<<<<< HEAD +<<<<<<< HEAD

    2017

    2018

    2019

    @@ -5060,6 +5728,11 @@

    2018

    2019

    >>>>>>> master +======= +

    2017

    +

    2018

    +

    2019

    +>>>>>>> master

    2020

    2021

    2022

    @@ -5095,6 +5768,7 @@

    2052

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2053

    2054

    >>>>>>> master @@ -5103,11 +5777,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    2053

    2054

    2055

    2056

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -5117,6 +5796,7 @@

    2060

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2061

    2062

    2063

    @@ -5219,6 +5899,31 @@

    2082

    2083

    >>>>>>> master +======= +

    2061

    +

    2062

    +

    2063

    +

    2064

    +

    2065

    +

    2066

    +

    2067

    +

    2068

    +

    2069

    +

    2070

    +

    2071

    +

    2072

    +

    2073

    +

    2074

    +

    2075

    +

    2076

    +

    2077

    +

    2078

    +

    2079

    +

    2080

    +

    2081

    +

    2082

    +

    2083

    +>>>>>>> master

    2084

    2085

    2086

    @@ -5250,6 +5955,7 @@

    2112

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2113

    >>>>>>> master

    2114

    @@ -5261,6 +5967,10 @@

    2113

    2114

    >>>>>>> master +======= +

    2113

    +

    2114

    +>>>>>>> master

    2115

    2116

    2117

    @@ -5270,6 +5980,7 @@

    2120

    2121

    <<<<<<< HEAD +<<<<<<< HEAD

    2122

    2123

    2124

    @@ -5316,6 +6027,11 @@

    2122

    2123

    2124

    +======= +

    2122

    +

    2123

    +

    2124

    +>>>>>>> master

    2125

    2126

    2127

    @@ -5336,6 +6052,7 @@

    2142

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2143

    2144

    2145

    @@ -5348,6 +6065,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    2143

    2144

    2145

    @@ -5357,6 +6076,9 @@

    2149

    2150

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -5430,6 +6152,7 @@

    2184

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    2185

    ======= @@ -5438,6 +6161,9 @@

    =======

    2185

    >>>>>>> master +======= +

    2185

    +>>>>>>> master

    2186

    2187

    2188

    @@ -5456,6 +6182,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2197

    2198

    2199

    @@ -5481,6 +6208,10 @@

    2197

    2198

    >>>>>>> master +======= +

    2197

    +

    2198

    +>>>>>>> master

    2199

    2200

    2201

    @@ -5495,6 +6226,7 @@

    2210

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2211

    >>>>>>> master

    2212

    @@ -5567,6 +6299,23 @@

    2224

    2225

    >>>>>>> master +======= +

    2211

    +

    2212

    +

    2213

    +

    2214

    +

    2215

    +

    2216

    +

    2217

    +

    2218

    +

    2219

    +

    2220

    +

    2221

    +

    2222

    +

    2223

    +

    2224

    +

    2225

    +>>>>>>> master

    2226

    2227

    2228

    @@ -5574,6 +6323,9 @@

    2230

    2231

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -5611,6 +6363,7 @@

     

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    from select import select 

    import sys 

    import os 

    @@ -5626,6 +6379,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    try: 

        from gevent import monkey 

        monkey.patch_all() 

    @@ -5638,6 +6393,9 @@

    from urwid.raw_display import Screen 

    from traceback import format_exc 

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -5650,6 +6408,7 @@

    from louie import dispatcher, All 

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    #import logging 

    #from frameapp import FrameApp, DIVIDER 

     

    @@ -6266,6 +7025,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    import logging 

     

    class OldestTree(urwid.ListWalker): 

    @@ -6283,6 +7044,9 @@

            self.focus, oldfocus = (0, 0) 

            self.size = 0 

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -6810,6 +7574,7 @@

     

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

        def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1): 

            self.id = id 

            #self.content = 'item %s: %s - %s...' % (str(id), name[:20], product_name[:20] ) 

    @@ -8502,6 +9267,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

        def keypress(self, size, key): 

            return key 

     

    @@ -8587,6 +9354,9 @@

            dispatcher.connect(self._louie_network_ready, ZWaveNetwork.SIGNAL_NETWORK_READY) 

            dispatcher.connect(self._louie_network_resetted, ZWaveNetwork.SIGNAL_NETWORK_RESETTED) 

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -9956,6 +10726,7 @@

     

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

        def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False): 

            self.id = id 

            #self.content = 'item %s: %s - %s...' % (str(id), name[:20], product_name[:20] ) 

    @@ -10153,6 +10924,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

            """ 

            return "%s" % self.key 

     

    @@ -10352,6 +11125,9 @@

        def keypress(self, size, key): 

            return key 

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master diff --git a/docs/html/nosetests/nosetests.html b/docs/html/nosetests/nosetests.html index 04a9211c..14f89a43 100644 --- a/docs/html/nosetests/nosetests.html +++ b/docs/html/nosetests/nosetests.html @@ -146,12 +146,17 @@

    Unit Test Report

    <<<<<<< HEAD +<<<<<<< HEAD

    Start Time: 2015-05-03 16:11:55

    Duration: 0:03:41.667291

    =======

    Start Time: 2015-05-03 16:28:27

    Duration: 0:03:38.181683

    >>>>>>> master +======= +

    Start Time: 2015-05-03 16:28:27

    +

    Duration: 0:03:38.181683

    +>>>>>>> master

    Status: Pass 77

    @@ -342,6 +347,7 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD @@ -363,6 +369,11 @@

    Unit Test Report

    ======= + + + +>>>>>>> master +======= @@ -431,6 +442,9 @@

    Unit Test Report

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master @@ -470,6 +484,7 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD @@ -482,10 +497,24 @@

    Unit Test Report

    +======= + + + + + + + + + + + +>>>>>>> master +<<<<<<< HEAD @@ -501,10 +530,21 @@

    Unit Test Report

    +======= + + + + + + + + +>>>>>>> master +<<<<<<< HEAD @@ -559,6 +599,27 @@

    Unit Test Report

    ======= + + + +>>>>>>> master +======= + + + + + + + + + + + + + + + + @@ -568,8 +629,12 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD +======= + +>>>>>>> master ======= >>>>>>> master @@ -577,6 +642,7 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD @@ -586,6 +652,12 @@

    Unit Test Report

    + +>>>>>>> master +======= + + + >>>>>>> master @@ -593,66 +665,91 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD @@ -668,6 +765,15 @@

    Unit Test Report

    + +>>>>>>> master +======= + + + + + + >>>>>>> master @@ -676,6 +782,7 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD @@ -691,6 +798,19 @@

    Unit Test Report

    ======= +======= + + + + + + + + + + + +>>>>>>> master @@ -699,12 +819,15 @@

    Unit Test Report

    +<<<<<<< HEAD +======= +>>>>>>> master @@ -725,6 +848,7 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD @@ -734,6 +858,12 @@

    Unit Test Report

    + +>>>>>>> master +======= + + + >>>>>>> master @@ -741,80 +871,112 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master @@ -934,6 +1096,7 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD @@ -975,16 +1138,25 @@

    Unit Test Report

    +======= + + + + + + +>>>>>>> master - + - - + + +<<<<<<< HEAD @@ -993,26 +1165,149 @@

    Unit Test Report

    ======= +>>>>>>> master +======= + + + + + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + + >>>>>>> master +<<<<<<< HEAD <<<<<<< HEAD ======= +======= + + +>>>>>>> master + + + + +<<<<<<< HEAD + + +======= + + + + + + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + +======= + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + +<<<<<<< HEAD + + +>>>>>>> master +======= + + @@ -1104,8 +1399,12 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD +======= + +>>>>>>> master ======= >>>>>>> master diff --git a/docs/html/pylint/report.html b/docs/html/pylint/report.html index 5d19d24c..851508a5 100644 --- a/docs/html/pylint/report.html +++ b/docs/html/pylint/report.html @@ -33,12 +33,17 @@

    Statistics by type

    <<<<<<< HEAD +<<<<<<< HEAD ======= >>>>>>> master +======= + + +>>>>>>> master @@ -98,9 +103,12 @@

    Raw metrics

    <<<<<<< HEAD +<<<<<<< HEAD ======= +======= +>>>>>>> master >>>>>>> master @@ -110,9 +118,12 @@

    Raw metrics

    <<<<<<< HEAD +<<<<<<< HEAD ======= +======= +>>>>>>> master >>>>>>> master @@ -129,9 +140,12 @@

    Raw metrics

    <<<<<<< HEAD +<<<<<<< HEAD ======= +======= +>>>>>>> master >>>>>>> master @@ -151,9 +165,12 @@

    Duplication

    <<<<<<< HEAD +<<<<<<< HEAD ======= +======= +>>>>>>> master >>>>>>> master @@ -162,9 +179,12 @@

    Duplication

    <<<<<<< HEAD +<<<<<<< HEAD ======= +======= +>>>>>>> master >>>>>>> master @@ -184,9 +204,12 @@

    Messages by category

    <<<<<<< HEAD +<<<<<<< HEAD ======= +======= +>>>>>>> master >>>>>>> master @@ -201,9 +224,12 @@

    Messages by category

    <<<<<<< HEAD +<<<<<<< HEAD ======= +======= +>>>>>>> master >>>>>>> master @@ -244,8 +270,13 @@

    % errors / warnings by module

    <<<<<<< HEAD +<<<<<<< HEAD + + +======= +>>>>>>> master ======= @@ -367,7 +398,10 @@

    % errors / warnings by module

    <<<<<<< HEAD +<<<<<<< HEAD ======= +======= +>>>>>>> master @@ -375,6 +409,7 @@

    % errors / warnings by module

    +<<<<<<< HEAD >>>>>>> master @@ -389,6 +424,11 @@

    % errors / warnings by module

    ======= >>>>>>> master +======= + + + +>>>>>>> master @@ -617,10 +657,14 @@

    Messages

    Global evaluation

    <<<<<<< HEAD +<<<<<<< HEAD Your code has been rated at 5.35/10 (previous run: 5.35/10, -0.00)
    ======= Your code has been rated at 5.35/10 (previous run: 5.35/10, +0.00) >>>>>>> master +======= +Your code has been rated at 5.35/10 (previous run: 5.35/10, +0.00) +>>>>>>> master

    Messages

    warningopenzwave.group 1710Bad indentation. Found 16 spaces, expected 12openzwave.group   171 44 4 Metaclass method __call__ should have 'cls' as first argument
    warningopenzwave.node 1900Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.group 1721910Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.group 1740No space allowed before : + if 'associations' in extras : + ^
    warningopenzwave.group 1751970No space allowed before : + if 'values' in extras : + ^
    warningopenzwave.node 1980Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 1990No space allowed before : + if 'groups' in extras : + ^
    warningopenzwave.node 2000Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2010No space allowed before : + if 'neighbors' in extras : + ^
    warningopenzwave.node 2020Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2030No space allowed before : + if 'capabilities' in extras : + ^
    warningopenzwave.node 2040Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2080Exactly one space required around assignment + ret[key]=vals[key] + ^
    conventionopenzwave.node 2840Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.node 4540Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.node 460Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.group 420Invalid constant name "logger"
    warningopenzwave.groupZWaveGroup.to_dict1604Dangerous default value [] as argument
    conventionopenzwave.singletonSingleton.__init__354Metaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__444Metaclass method __call__ should have 'cls' as first argument
    warning ZWaveNode.__init__ 59 4__init__ method from base class 'ZWaveNodeSwitch' is not called__init__ method from base class 'ZWaveNodeSensor' is not called
    warning ZWaveNode.__init__ 59 4__init__ method from base class 'ZWaveNodeSensor' is not called__init__ method from base class 'ZWaveNodeSwitch' is not called
    warning 15 Instance of 'ZWaveOption' has no 'addOptionBool' member
    convention pyozwman
    convention pyozwman.ozwsh_widgets
    conventionpyozwman 560No space allowed before bracket + self.usage = ['ls : list directory', 'cd &lt;directory&gt; : change to directory &lt;directory&gt;', 'exit : quit the program' ] + ^
    conventionpyozwman.ozwsh_widgetsMissing module docstring
    warningpyozwman 260No exception type(s) specified
    conventionpyozwman.ozwsh_widgets   56 0
    refactorpyozwweb.app.socket.chat 10Similar lines in 5 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'}
    refactorpyozwweb.app.socket.chat 10Similar lines in 6 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True
    refactorpyozwweb.app.socket.chat 10Similar lines in 7 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' +
    refactorpyozwweb.app.socket.chat 10Similar lines in 8 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000
    refactorpyozwweb.app.socket.chat 10Similar lines in 9 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:'
    refactorpyozwweb.app.socket.chat 10Similar lines in 10 files +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False
    refactorpyozwweb.app.socket.chat 10Similar lines in 13 files +==openzwave:1 +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.__init__:65 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +==pyozwweb:1 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False
    refactorpyozwweb.app.socket.chat 10Similar lines in 3 files +==openzwave.group:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject + +# Set default logging handler to avoid "No handler found" warnings. +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:28 +==pyozwman.ozwsh_widgets:27 +__author__ = 'bibi21000' + +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from select import select +import sys +import os +import urwid +from urwid.raw_display import Screen
    refactorpyozwweb.app.socket.chat 710Exactly one space required around comparison + if pos &gt;= 0 and pos &lt; self.size and len(self.lines)&gt;0: + ^Similar lines in 9 files +==openzwave.command:34 +==openzwave.controller:42 +==openzwave.group:33 +==openzwave.network:52 +==openzwave.node:37 +==openzwave.object:31 +==openzwave.option:37 +==openzwave.scene:33 +==openzwave.value:33 +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:46 +==pyozwman.ozwsh_widgets:40 +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption
    conventionpyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==openzwave.network:25 +==openzwave.option:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os
    refactorpyozwweb.app.socket.chat 800Exactly one space required after comma + line,pos = self._get_at_pos(self.focus) + ^Similar lines in 2 files +==openzwave.network:616 +==openzwave.node:204 + if 'kvals' in extras and self.network.dbcon is not None: + vals = self.kvals + for key in vals.keys(): + ret[key]=vals[key] + return ret +
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==openzwave.group:25 +==openzwave.node:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject
    conventionpyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat 1310No space allowed before comma + self.lines.append(urwid.Text("Help" , align='left')) + ^
    conventionpyozwman.ozwsh_widgets 1760No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 1790No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 2030Exactly one space required after comma + def path(self,value): + ^
    conventionpyozwman.ozwsh_widgets 2560Exactly one space required after assignment + self.walker =StatTree(window, parent.walker, self) + ^
    conventionpyozwman.ozwsh_widgets 2640No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 2650Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 2660Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 2670Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 2680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 2720Wrong continued indentation. + 'name':'stats', + ^ |
    conventionpyozwman.ozwsh_widgets 2730Wrong continued indentation. + 'help':'statistics', + ^ |
    conventionpyozwman.ozwsh_widgets 2740Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 2750No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 2760Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 2860No space allowed after bracket + self.lines.append(urwid.Text( " Statistics", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 2880No space allowed after bracket + self.lines.append(urwid.Text( " Frames processed: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2910No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully received: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2940No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully sent: . . . . . . . . . .%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2970No space allowed after bracket + self.lines.append(urwid.Text( " ACKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3000No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts read: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3030No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts sent: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3060No space allowed after bracket + self.lines.append(urwid.Text( " Queue:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3080No space allowed after bracket + self.lines.append(urwid.Text( " Messages in queue: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3110No space allowed after bracket + self.lines.append(urwid.Text( " Errors:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3130No space allowed after bracket + self.lines.append(urwid.Text( " Unsolicited messages received while waiting for ACK: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3160No space allowed after bracket + self.lines.append(urwid.Text( " Reads aborted due to timeouts: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3190No space allowed after bracket + self.lines.append(urwid.Text( " Bad checksum errors: . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3220No space allowed after bracket + self.lines.append(urwid.Text( " CANs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3250No space allowed after bracket + self.lines.append(urwid.Text( " NAKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3280No space allowed after bracket + self.lines.append(urwid.Text( " Out of frame data flow errors: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3310No space allowed after bracket + self.lines.append(urwid.Text( " Messages retransmitted: . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3340No space allowed after bracket + self.lines.append(urwid.Text( " Messages dropped and not delivered: . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3370No space allowed after bracket + self.lines.append(urwid.Text( " Number of unexpected callbacks: . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3400No space allowed after bracket + self.lines.append(urwid.Text( " Number of failed messages due to bad route response: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3430No space allowed after bracket + self.lines.append(urwid.Text( " Number of no ACK returned errors: . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3460No space allowed after bracket + self.lines.append(urwid.Text( " Number of network busy/failure messages: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3490No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages not delivered to network: . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3520No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages received with routed busy status: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3760No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 3770Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 3780Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 3790Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 3800Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3860Wrong continued indentation. + 'name':'groups', + | ^
    conventionpyozwman.ozwsh_widgets 3870Wrong continued indentation. + 'help':'Groups/Associations management', + | ^
    conventionpyozwman.ozwsh_widgets 3880Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 3890Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3900No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 4260No space allowed before : + for group in groups : + ^
    conventionpyozwman.ozwsh_widgets 4280No space allowed after bracket + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4280Exactly one space required after comma + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4330Wrong continued indentation. + )) + ^ |
    conventionpyozwman.ozwsh_widgets 4490No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 4690No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4810No space allowed before : + if value in self.window.network.nodes[self.node_id].groups : + ^
    conventionpyozwman.ozwsh_widgets 4850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4860Exactly one space required after comma + self.window.status_bar.update(status="Can't find node %s in group %s" % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 4880No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4920No space allowed before bracket +class AssociationItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 4940No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 5000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 5090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 5130No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5240No space allowed after bracket + self.childrens = { 'controller' : {'id':'ctl', + ^
    conventionpyozwman.ozwsh_widgets 5250Wrong continued indentation. + 'name':'Controller', + ^ |
    conventionpyozwman.ozwsh_widgets 5260Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 5270Wrong continued indentation. + 'widget_box' : None}, + ^ |
    conventionpyozwman.ozwsh_widgets 5280Wrong continued indentation. + 'scenes' : {'id':'scn', + ^ |
    conventionpyozwman.ozwsh_widgets 5320Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 5540No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5600No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5690No space allowed before bracket +class RootDir (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5710No space allowed before bracket + def __init__ (self, id=None, name=None, help=None): + ^
    conventionpyozwman.ozwsh_widgets 5760Wrong continued indentation. + urwid.Padding(urwid.AttrWrap(urwid.Text('%s' % id, wrap='clip'), 'body', 'focus'), left=2)), + | ^
    conventionpyozwman.ozwsh_widgets 5770Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5780Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5800No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5830No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5890No space allowed before bracket +class RootItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5910No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1): + ^
    conventionpyozwman.ozwsh_widgets 5970Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5980Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5990Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 6050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 6090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6160No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 6520No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 6530Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 6540Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 6550Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 6560Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6600Wrong continued indentation. + 'name':'nodes', + | ^
    conventionpyozwman.ozwsh_widgets 6610Wrong continued indentation. + 'help':'Nodes management', + | ^
    conventionpyozwman.ozwsh_widgets 6620Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 6630Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6640No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 7190No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7220No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7310No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 7370No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7400Exactly one space required around assignment + self.childrens['node']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 7420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7480No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7550Exactly one space required around assignment + val=True + ^
    conventionpyozwman.ozwsh_widgets 7570Exactly one space required around assignment + val=False + ^
    conventionpyozwman.ozwsh_widgets 7820No space allowed before bracket +class NodesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 7840No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1, awaked=False): + ^
    conventionpyozwman.ozwsh_widgets 7900Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7910Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7920Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7930Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7940Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % awaked, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7960No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 7990No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 8030Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8040Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8050Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8060Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8070Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Awaked", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8110No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 8330No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 8340Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 8350Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 8360Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 8370Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 8440Wrong continued indentation. + 'name':'node', + ^ |
    conventionpyozwman.ozwsh_widgets 8450Wrong continued indentation. + 'help':'Node management', + ^ |
    conventionpyozwman.ozwsh_widgets 8460Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 8500No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 8510Exactly one space required after comma + parent.add_child("node",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 8710No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 9150No space allowed after bracket + self.lines.append(urwid.Text( " Baud rate = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9180No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9210No space allowed after bracket + self.lines.append(urwid.Text( " Neighbors = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9240No space allowed after bracket + self.lines.append(urwid.Text( " Groups = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9270No space allowed before bracket + self.window.log.info("NodeTree num groups = %s" % self.window.network.nodes[self.key].num_groups ) + ^
    conventionpyozwman.ozwsh_widgets 9440No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 9500Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.key=directory + ^
    conventionpyozwman.ozwsh_widgets 9510Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.node_id=self.key + ^
    conventionpyozwman.ozwsh_widgets 9710No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 9720Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 9730Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 9740Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 9750Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 9820Wrong continued indentation. + 'name':'controller', + ^ |
    conventionpyozwman.ozwsh_widgets 9830Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 9840Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 9850No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 9860Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 10270No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 10510No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10590No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10710No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10730No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10790No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10850No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10870No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10930No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10990No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 11010No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 11520No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11570No space allowed after bracket + self.lines.append(urwid.Text( " Device=%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11820No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 11830Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 11840Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 11850Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 11860Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11950Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11970Wrong continued indentation. + 'name':'Basic', + ^|
    conventionpyozwman.ozwsh_widgets 11980Wrong continued indentation. + 'help':'Basic values management', + ^|
    conventionpyozwman.ozwsh_widgets 11990Wrong continued indentation. + 'widget_box': self.widget_box + ^|
    conventionpyozwman.ozwsh_widgets 12000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12020Wrong continued indentation. + 'name':'Config', + ^ |
    conventionpyozwman.ozwsh_widgets 12030Wrong continued indentation. + 'help':'Config values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12040Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12050Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12070Wrong continued indentation. + 'name':'System', + ^ |
    conventionpyozwman.ozwsh_widgets 12080Wrong continued indentation. + 'help':'System values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12090Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12100Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12120Wrong continued indentation. + 'name':'All', + |^
    conventionpyozwman.ozwsh_widgets 12130Wrong continued indentation. + 'help':'All values management', + |^
    conventionpyozwman.ozwsh_widgets 12140Wrong continued indentation. + 'widget_box': self.widget_box + |^
    conventionpyozwman.ozwsh_widgets 12150Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12160No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 12560No space allowed before : + for cmd in values : + ^
    conventionpyozwman.ozwsh_widgets 12570Line too long (148/140)
    conventionpyozwman.ozwsh_widgets 12570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % (self.window.network.nodes[self.node_id].get_command_class_as_string(cmd)), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 12840No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 13080No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13150No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 13160Exactly one space required after comma + self.window.status_bar.update(status='Value %s added to scene %s' % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 13180No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13330No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13440No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13450Exactly one space required around assignment + values[param].data=newval + ^
    conventionpyozwman.ozwsh_widgets 13480No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13510No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13660No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13700No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 13720No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 13740No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13750Exactly one space required after comma + self.window.log.info("poll %s to %s" %(param,newval)) + ^
    conventionpyozwman.ozwsh_widgets 13780No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13800Exactly one space required after comma + self.window.status_bar.update(status='Value %s polled to %s' % (param,value)) + ^
    conventionpyozwman.ozwsh_widgets 13820No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14000No space allowed before bracket +class ValuesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 14020No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False, polled=False): + ^
    conventionpyozwman.ozwsh_widgets 14050No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 14070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14150Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 14160Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14170Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14190No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 14220No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 14260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14280Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14290Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14300Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14310Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14350No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 14570No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 14580Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 14590Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 14600Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 14610Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14650Wrong continued indentation. + 'name':'switches', + | ^
    conventionpyozwman.ozwsh_widgets 14660Wrong continued indentation. + 'help':'All switches on the network', + | ^
    conventionpyozwman.ozwsh_widgets 14670Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 14680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14690No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 15010No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 15030No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 15040Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 15040No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15040Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15290No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15480Exactly one space required after comma + self.window.log.info("SwitchesTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 15530No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 15540Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15580No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 15610Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15630No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15660No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15860No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 15870Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 15880Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 15890Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 15900Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15940Wrong continued indentation. + 'name':'dimmers', + | ^
    conventionpyozwman.ozwsh_widgets 15950Wrong continued indentation. + 'help':'All dimmers on the network', + | ^
    conventionpyozwman.ozwsh_widgets 15960Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 15970Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15980No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 16310No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 16330No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 16340Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 16340No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16340Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16590No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16820No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 16830Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16870No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 16890No space allowed before : + if not values[switch].is_polled : + ^
    conventionpyozwman.ozwsh_widgets 16910Exactly one space required after comma + self.window.network.nodes[node].set_dimmer(switch,newval) + ^
    conventionpyozwman.ozwsh_widgets 16920Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16940No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 16970No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 17010No space allowed before bracket +class SwitchesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 17030No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All'): + ^
    conventionpyozwman.ozwsh_widgets 17100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17120Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 17130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 17190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 17230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17240Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17250Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17310No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 17530No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 17540Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 17550Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 17560Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 17570Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17610Wrong continued indentation. + 'name':'sensors', + | ^
    conventionpyozwman.ozwsh_widgets 17620Wrong continued indentation. + 'help':'All sensors on the network', + | ^
    conventionpyozwman.ozwsh_widgets 17630Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 17640Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17650No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 17980No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 18000No space allowed before : + if len(sensors) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 18010Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 18010No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18010Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18270No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 18350No space allowed before bracket +class SensorsItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 18370No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', units="", polled=0): + ^
    conventionpyozwman.ozwsh_widgets 18440Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18450Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18460Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18470Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 18480Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % units, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18510No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 18540No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 18580Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18590Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18600Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18610Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Units", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18670No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 18900No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 18910Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 18920Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 18930Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 18940Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 18990Wrong continued indentation. + 'name':'scene', + ^ |
    conventionpyozwman.ozwsh_widgets 19000Wrong continued indentation. + 'help':'Scene management', + ^ |
    conventionpyozwman.ozwsh_widgets 19010Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 19050No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 19060Exactly one space required after comma + parent.add_child("scene",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 19190No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 19460No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19710No space allowed before : + if not ok : + ^
    warningpyozwman.ozwsh_widgets 19750Bad indentation. Found 20 spaces, expected 16
    warningpyozwman.ozwsh_widgets 19760Bad indentation. Found 20 spaces, expected 16
    conventionpyozwman.ozwsh_widgets 19770No space allowed before : + if self.window.network.get_scenes()[self.key].remove_value(valueid) : + ^
    conventionpyozwman.ozwsh_widgets 19800No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19950Exactly one space required after comma + self.window.log.info("SceneTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 20000No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 20010Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 20040No space allowed before : + if switch in scene.get_values() : + ^
    conventionpyozwman.ozwsh_widgets 20130No space allowed before : + if new_val != None : + ^
    conventionpyozwman.ozwsh_widgets 20140No space allowed before : + if scene.set_value(switch, new_val) : + ^
    conventionpyozwman.ozwsh_widgets 20170No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20200No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20230No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20370No space allowed before bracket +class SceneItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 20390No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False): + ^
    conventionpyozwman.ozwsh_widgets 20420No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 20440No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20500Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20510Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 20520Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20530Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20550No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 20580No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 20620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20640Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20650Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20660Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20700No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 20960No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 20970Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 20980Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 20990Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 21000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21040Wrong continued indentation. + 'name':'scenes', + | ^
    conventionpyozwman.ozwsh_widgets 21050Wrong continued indentation. + 'help':'Scenes management', + | ^
    conventionpyozwman.ozwsh_widgets 21060Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 21070Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21080No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 21390No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21510No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 21570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21600Exactly one space required around assignment + self.childrens['scene']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 21620No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21670Exactly one space required around comparison + if self.window.network.create_scene(value)&gt;0: + ^
    conventionpyozwman.ozwsh_widgets 21700No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21750No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21820No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21900No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21970No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21990No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22020No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22060No space allowed before bracket +class ScenesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 22080No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 22140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 22160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 22190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 22230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'scene_header'), + | ^
    conventionpyozwman.ozwsh_widgets 22270No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 10Too many lines in module (2231/1000)
    conventionpyozwman.ozwsh_widgetsOldestTree500Missing class docstring
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many instance attributes (12/7)
    warningpyozwman.ozwsh_widgetsOldestTree.__init__6220Unused variable 'oldfocus'
    conventionpyozwman.ozwsh_widgetsOldestTree.add_child654Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree._get_at_pos704Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_nodeid764Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_id794Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.get_id8013Unused variable 'pos'
    conventionpyozwman.ozwsh_widgetsOldestTree.get_focus_entry864Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.set_focus894Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_first1014Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_last1044Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.read_lines1074Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_directories1184Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_help1284Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.refresh1394Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected1444Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected14612Invalid variable name "x"
    conventionpyozwman.ozwsh_widgetsOldestTree.ls1664Invalid method name "ls"
    warningpyozwman.ozwsh_widgetsOldestTree.ls16617Unused argument 'opts'
    conventionpyozwman.ozwsh_widgetsOldestTree.cd1724Invalid method name "cd"
    conventionpyozwman.ozwsh_widgetsOldestTree.set2124Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.set21218Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.set21225Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.poll2164Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.poll21619Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.poll21626Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.add2204Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.add22018Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.add22025Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.remove2244Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.remove22421Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.remove22428Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.reset2284Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.reset22820Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.create2324Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.create23221Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.delete2364Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.delete23621Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.activate2404Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.activate24023Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.send2444Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.send24419Unused argument 'value'
    warningpyozwman.ozwsh_widgetsOldestTree.path2108Attribute '_path' defined outside __init__
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many public methods (30/20)
    warningpyozwman.ozwsh_widgetsStatBox.__init__2524__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsStatBox.__init__2578Instance of 'StatBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsStatTree2600Missing class docstring
    refactorpyozwman.ozwsh_widgetsStatTree.read_lines2784Too many statements (54/50)
    warningpyozwman.ozwsh_widgetsGroupsBox.__init__3614__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsGroupsBox.__init__3668Instance of 'GroupsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsGroupsTree3680Missing class docstring
    refactorpyozwman.ozwsh_widgetsGroupsTree3680Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted3994Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted39938Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready4044Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready40435Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_node_update4104Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41042Unused argument 'node'
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41033Unused argument 'network'
    warningpyozwman.ozwsh_widgetsGroupsTree.add4628No exception type(s) specified
    warningpyozwman.ozwsh_widgetsGroupsTree.remove4778No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__4958Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsAssociationItem4920Missing class docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__49424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__4944__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__5028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsAssociationItem.__init__5038Instance of 'AssociationItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsAssociationItem.get_header5054Missing method docstring
    conventionpyozwman.ozwsh_widgetsAssociationItem.keypress5164Missing method docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.keypress51623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsAssociationItem.keypress5164Method could be a function
    conventionpyozwman.ozwsh_widgetsRootTree5190Missing class docstring
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_ready5394Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_ready53935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_resetted5444Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_resetted54438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5728Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootDir5690Missing class docstring
    warningpyozwman.ozwsh_widgetsRootDir.__init__57144Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsRootDir.__init__57124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootDir.__init__5714__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5808Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootDir.__init__5818Instance of 'RootDir' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootDir.keypress5864Missing method docstring
    warningpyozwman.ozwsh_widgetsRootDir.keypress58623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootDir.keypress5864Method could be a function
    conventionpyozwman.ozwsh_widgetsRootItem.__init__5928Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootItem5890Missing class docstring
    warningpyozwman.ozwsh_widgetsRootItem.__init__59124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootItem.__init__5914__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootItem.__init__6028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootItem.__init__6038Instance of 'RootItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootItem.get_header6054Missing method docstring
    conventionpyozwman.ozwsh_widgetsRootItem.keypress6194Missing method docstring
    warningpyozwman.ozwsh_widgetsRootItem.keypress61923Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootItem.keypress6194Method could be a function
    warningpyozwman.ozwsh_widgetsRootBox.__init__6264__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsRootBox.__init__6318Instance of 'RootBox' has no '__super' member
    warningpyozwman.ozwsh_widgetsNodesBox.__init__6374__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodesBox.__init__6428Instance of 'NodesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesTree6440Missing class docstring
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted6714Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted67138Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_ready6764Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_ready67635Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_node_update6884Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68842Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68833Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodesTree.exist7228No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.cd74212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.send74916Unused variable 'cmd'
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7858Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsNodesItem7820Missing class docstring
    warningpyozwman.ozwsh_widgetsNodesItem.__init__78424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsNodesItem.__init__7844__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7968Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsNodesItem.__init__7978Instance of 'NodesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesItem.get_header7994Missing method docstring
    conventionpyozwman.ozwsh_widgetsNodesItem.keypress8144Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesItem.keypress81423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsNodesItem.keypress8144Method could be a function
    warningpyozwman.ozwsh_widgetsNodeBox.__init__8214__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodeBox.__init__8268Instance of 'NodeBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodeTree8290Missing class docstring
    refactorpyozwman.ozwsh_widgetsNodeTree8290Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted8564Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted85638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_ready8614Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_ready86135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_node_update8674Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodeTree.read_lines8968Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsControllerBox.__init__9594__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsControllerBox.__init__9648Instance of 'ControllerBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsControllerTree9670Missing class docstring
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted10044Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted100438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_ready10094Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_ready100935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_node_update10174Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsControllerTree.send105912No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send107312No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send108712No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send110112No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send105216Unused variable 'cmd'
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many return statements (19/6)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many branches (22/12)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many statements (57/50)
    warningpyozwman.ozwsh_widgetsControllerTree.read_lines11318Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsValuesBox.__init__11664__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsValuesBox.__init__11718Instance of 'ValuesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesTree11740Missing class docstring
    refactorpyozwman.ozwsh_widgetsValuesTree11740Too many instance attributes (13/7)
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_ready12304Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_ready123035Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted12364Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted123638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_value_update12414Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124143Unused argument 'node'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124134Unused argument 'network'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124149Unused argument 'value'
    warningpyozwman.ozwsh_widgetsValuesTree.add12998No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.add13028Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.add130616Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.add130716Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.set13268No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.set132712Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.set133120Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.set133220Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll13598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136012Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136420Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.poll136520Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll137212No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14038Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsValuesItem14000Missing class docstring
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140241Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140261Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140224Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__14024__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14198Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsValuesItem.__init__14208Instance of 'ValuesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesItem.get_header14224Missing method docstring
    conventionpyozwman.ozwsh_widgetsValuesItem.keypress14384Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesItem.keypress143823Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsValuesItem.keypress14384Method could be a function
    warningpyozwman.ozwsh_widgetsSwitchesBox.__init__14454__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSwitchesBox.__init__14508Instance of 'SwitchesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesTree14520Missing class docstring
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted14774Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted147738Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready14824Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready148235Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update14864Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update14894Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree.set15428No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set15468Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set155116Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSwitchesTree.set155216Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsDimmersBox.__init__15744__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsDimmersBox.__init__15798Instance of 'DimmersBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsDimmersTree15810Missing class docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_resetted16064Missing method docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready16114Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready161135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_value_update16164Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_node_update16194Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree.set16728No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsDimmersTree.set16768Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsDimmersTree.set168016Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsDimmersTree.set168116Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17048Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSwitchesItem17010Missing class docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170341Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170361Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170324Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__17034__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSwitchesItem.__init__17178Instance of 'SwitchesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesItem.get_header17194Missing method docstring
    conventionpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.keypress173423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Method could be a function
    warningpyozwman.ozwsh_widgetsSensorsBox.__init__17414__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSensorsBox.__init__17468Instance of 'SensorsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsTree17480Missing class docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_resetted17734Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready17784Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready177835Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_value_update17834Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178343Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178334Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178349Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_node_update17864Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178642Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178633Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18388Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSensorsItem18350Missing class docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183741Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183761Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183724Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__18374__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18518Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSensorsItem.__init__18528Instance of 'SensorsItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsItem.get_header18544Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsItem.keypress18704Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.keypress187023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSensorsItem.keypress18704Method could be a function
    warningpyozwman.ozwsh_widgetsSceneBox.__init__18774__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSceneBox.__init__18828Instance of 'SceneBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneTree18850Missing class docstring
    refactorpyozwman.ozwsh_widgetsSceneTree18850Too many instance attributes (8/7)
    warningpyozwman.ozwsh_widgetsSceneTree.delete19598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196012Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197412No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196924Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197024Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsSceneTree.delete196321Unused variable 'switch'
    warningpyozwman.ozwsh_widgetsSceneTree.set19898No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.set19938Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSceneTree.set199816Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.set199916Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20408Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSceneItem20370Missing class docstring
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203941Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203961Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203924Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__20394__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20558Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSceneItem.__init__20568Instance of 'SceneItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneItem.get_header20584Missing method docstring
    conventionpyozwman.ozwsh_widgetsSceneItem.keypress20734Missing method docstring
    warningpyozwman.ozwsh_widgetsSceneItem.keypress207323Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSceneItem.keypress20734Method could be a function
    warningpyozwman.ozwsh_widgetsScenesBox.__init__20814__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsScenesBox.__init__20868Instance of 'ScenesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesTree20880Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesTree.exist21428No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.cd216212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.delete21778No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.activate21928No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22098Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsScenesItem22060Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesItem.__init__220824Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsScenesItem.__init__22084__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsScenesItem.__init__22178Instance of 'ScenesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesItem.get_header22194Missing method docstring
    conventionpyozwman.ozwsh_widgetsScenesItem.keypress22304Missing method docstring
    warningpyozwman.ozwsh_widgetsScenesItem.keypress223023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsScenesItem.keypress22304Method could be a function
    warningpyozwman.ozwsh_widgets 350Unused select imported from select
    warningpyozwman.ozwsh_widgets 360Unused import sys
    warningpyozwman.ozwsh_widgets 370Unused import os
    warningpyozwman.ozwsh_widgets 390Unused Screen imported from urwid.raw_display
    warningpyozwman.ozwsh_widgets 400Unused format_exc imported from traceback
    warningpyozwman.ozwsh_widgets 410Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_widgets 420Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_widgets 430Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_widgets 440Unused ZWaveController imported from openzwave.controller
    warningpyozwman.ozwsh_widgets 460Unused ZWaveOption imported from openzwave.option
    warningpyozwman.ozwsh_widgets 470Unused All imported from louie
    warningpyozwman.ozwsh_widgets 480Unused import logging
    conventionpyozwman.ozwsh_main 1720Wrong continued indentation. + ("keys", "dark blue", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1730Wrong continued indentation. + ("message", "light cyan", "dark green"), + ^ |
    conventionpyozwman.ozwsh_main 1740Wrong continued indentation. + ("linenr", "light blue", "dark cyan"), + ^ |
    conventionpyozwman.ozwsh_main 1750Wrong continued indentation. + ("input", "light gray", "black"), + ^ |
    conventionpyozwman.ozwsh_main 1760Wrong continued indentation. + ("input2", "dark red", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1770Wrong continued indentation. + ("focus", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1780Wrong continued indentation. + ("dialog", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1790Wrong continued indentation. + ("file", "light green", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1800Wrong continued indentation. + ("errortxt", "dark red", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1810Wrong continued indentation. + ("selectedfile", "yellow", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1820Wrong continued indentation. + ("selectedfocus", "yellow", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1830Wrong continued indentation. + ("dir", "light gray", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1840Wrong continued indentation. + ("fileedit", "light green", "dark red"), + ^ |
    conventionpyozwman.ozwsh_main 1850Wrong continued indentation. + ('edit', 'yellow', 'dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1860Wrong continued indentation. + ('body','default', 'default'), + ^ |
    conventionpyozwman.ozwsh_main 1860Exactly one space required after comma + ('body','default', 'default'), + ^
    conventionpyozwman.ozwsh_main 1870Wrong continued indentation. + ('foot','dark cyan', 'dark blue', 'bold'), + ^ |
    conventionpyozwman.ozwsh_main 1870Exactly one space required after comma + ('foot','dark cyan', 'dark blue', 'bold'), + ^
    conventionpyozwman.ozwsh_main 1880Wrong continued indentation. + ('shadow','white','black'), + ^ |
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1890Wrong continued indentation. + ('border','black','dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1900Wrong continued indentation. + ('error','black','dark red'), + ^ |
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1910Wrong continued indentation. + ('FxKey','light cyan', 'dark blue', 'underline')] + ^ |
    conventionpyozwman.ozwsh_main 1910Exactly one space required after comma + ('FxKey','light cyan', 'dark blue', 'underline')] + ^
    conventionpyozwman.ozwsh_main 2340Exactly one space required after comma + def active_box(self,value): + ^
    conventionpyozwman.ozwsh_main 2640No space allowed before : + if command.startswith('ls') : + ^
    conventionpyozwman.ozwsh_main 2650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2660Exactly one space required after comma + cmd,options = command.split(' ') + ^
    conventionpyozwman.ozwsh_main 2730No space allowed before : + elif command.startswith('exit') : + ^
    conventionpyozwman.ozwsh_main 2750No space allowed before : + elif command.startswith('cd') : + ^
    conventionpyozwman.ozwsh_main 2760No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2870No space allowed before : + elif path == "/" : + ^
    conventionpyozwman.ozwsh_main 2960No space allowed before : + elif command.startswith('send') : + ^
    conventionpyozwman.ozwsh_main 2970No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3030No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3100No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3120No space allowed before : + elif command.startswith('create') : + ^
    conventionpyozwman.ozwsh_main 3130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3190No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3260No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3280No space allowed before : + elif command.startswith('delete') : + ^
    conventionpyozwman.ozwsh_main 3290No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3350No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3420No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3440No space allowed before : + elif command.startswith('activate') : + ^
    conventionpyozwman.ozwsh_main 3450No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3510No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3580No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3600No space allowed before : + elif command.startswith('set') : + ^
    conventionpyozwman.ozwsh_main 3610No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3630No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3680No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3730No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 3810No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3830No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3860No space allowed before : + elif command.startswith('poll') : + ^
    conventionpyozwman.ozwsh_main 3870No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3890No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3940No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3990No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4090No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4120No space allowed before : + elif command.startswith('add') : + ^
    conventionpyozwman.ozwsh_main 4130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4150No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4200No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4250No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4330No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4350No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4380No space allowed before : + elif command.startswith('remove') : + ^
    conventionpyozwman.ozwsh_main 4390No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4410No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4460No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4510No space allowed before : + if len(value) == 0 or to != "from" : + ^
    conventionpyozwman.ozwsh_main 4590No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4610No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4640No space allowed before : + elif command.startswith('reset') : + ^
    conventionpyozwman.ozwsh_main 4650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4680No space allowed before : + if len(state) == 0 : + ^
    conventionpyozwman.ozwsh_main 4750No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 5080No space allowed around keyword argument assignment + kvals = False) + ^
    conventionpyozwman.ozwsh_mainStatusBar950Missing class docstring
    conventionpyozwman.ozwsh_mainStatusBar.update1104Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.get_command1164Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.set_command1194Missing method docstring
    conventionpyozwman.ozwsh_mainHeaderBar1220Missing class docstring
    conventionpyozwman.ozwsh_mainHeaderBar.update1354Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow1390Missing class docstring
    refactorpyozwman.ozwsh_mainMainWindow1390Too many instance attributes (30/7)
    conventionpyozwman.ozwsh_mainMainWindow._define_log1534Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._define_screen1704Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow.exit2538Instance of 'ZWaveOption' has no 'destroy' member
    warningpyozwman.ozwsh_mainMainWindow.execute28516Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow.execute29116Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow.execute37216Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute39816Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute42416Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute45016Invalid variable name "to"
    warningpyozwman.ozwsh_mainMainWindow.execute26616Unused variable 'cmd'
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many return statements (48/6)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many branches (72/12)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many statements (171/50)
    conventionpyozwman.ozwsh_mainMainWindow._unhandled_input4824Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input49312Specify string format arguments as logging function parameters
    errorpyozwman.ozwsh_mainMainWindow._unhandled_input49812Instance of 'MainWindow' has no 'refresh_nodes' member
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input50112Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._start_network5034Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow._start_network50523Unexpected keyword argument 'kvals' in constructor call
    errorpyozwman.ozwsh_mainMainWindow._start_network5148Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie5184Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_started5254Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5268Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_resetted5324Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted53238Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_stopped5394Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped53937Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_awaked5454Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_ready5514Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5528Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5538Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5558Unused variable 'wait_for_network'
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Invalid method name "_disconnect_louie_node_and_value"
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie_node_and_value5674Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_node_update5744Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57442Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57433Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_value_update5774Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57743Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57734Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57749Unused argument 'value'
    conventionpyozwman.ozwsh_mainMainWindow._louie_group5804Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_group58036Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_group58027Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_ctrl_message5834Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58350Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58359Unused argument 'controller'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58334Unused argument 'state'
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48716Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48916Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow.active_box2418Attribute '_active_box' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5288Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted5348Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped5418Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_awaked5478Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5548Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_main 360Unused select imported from select
    warningpyozwman.ozwsh_main 370Unused import sys
    warningpyozwman.ozwsh_main 380Unused import os
    warningpyozwman.ozwsh_main 440Unused format_exc imported from traceback
    warningpyozwman.ozwsh_main 470Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_main 480Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_main 490Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_main 530Unused OldestTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootDir imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 550Unused ControllerTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 560Unused NodeTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 600Unused DimmersTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused GroupsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused AssociationItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 650Unused StatTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 670Unused All imported from louie
    conventionpyozwweb 10Missing module docstring
    warningpyozwweb 260No exception type(s) specified
    warningpyozwweb.shell 360Wildcard import flask
    warningpyozwweb.shell 370Wildcard import app
    warningpyozwweb.shell 370Relative import 'app', should be 'pyozwweb.app'
    warningpyozwweb.shell 330Unused import readline
    warningpyozwweb.shell 340Unused pprint imported from pprint
    warningpyozwweb.shell 360Unused import render_template_string from wildcard import
    warningpyozwweb.shell 360Unused import Flask from wildcard import
    warningpyozwweb.shell 360Unused import request from wildcard import
    warningpyozwweb.shell 360Unused import get_flashed_messages from wildcard import
    warningpyozwweb.shell 360Unused import Blueprint from wildcard import
    warningpyozwweb.shell 360Unused import send_from_directory from wildcard import
    warningpyozwweb.shell 360Unused import session from wildcard import
    warningpyozwweb.shell 360Unused import Module from wildcard import
    warningpyozwweb.shell 360Unused import escape from wildcard import
    warningpyozwweb.shell 360Unused import Config from wildcard import
    warningpyozwweb.shell 360Unused import render_template from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_pushed from wildcard import
    warningpyozwweb.shell 360Unused import redirect from wildcard import
    warningpyozwweb.shell 360Unused import request_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import after_this_request from wildcard import
    warningpyozwweb.shell 360Unused import current_app from wildcard import
    warningpyozwweb.shell 360Unused import json from wildcard import
    warningpyozwweb.shell 360Unused import make_response from wildcard import
    warningpyozwweb.shell 360Unused import Response from wildcard import
    warningpyozwweb.shell 360Unused import request_started from wildcard import
    warningpyozwweb.shell 360Unused import has_app_context from wildcard import
    warningpyozwweb.shell 360Unused import send_file from wildcard import
    warningpyozwweb.shell 360Unused import get_template_attribute from wildcard import
    warningpyozwweb.shell 360Unused import Session from wildcard import
    warningpyozwweb.shell 360Unused import Markup from wildcard import
    warningpyozwweb.shell 360Unused import copy_current_request_context from wildcard import
    warningpyozwweb.shell 360Unused import Request from wildcard import
    warningpyozwweb.shell 360Unused import safe_join from wildcard import
    warningpyozwweb.shell 360Unused import flash from wildcard import
    warningpyozwweb.shell 360Unused import stream_with_context from wildcard import
    warningpyozwweb.shell 360Unused import template_rendered from wildcard import
    warningpyozwweb.shell 360Unused import got_request_exception from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import url_for from wildcard import
    warningpyozwweb.shell 360Unused import g from wildcard import
    warningpyozwweb.shell 360Unused import has_request_context from wildcard import
    warningpyozwweb.shell 360Unused import jsonify from wildcard import
    warningpyozwweb.shell 360Unused import json_available from wildcard import
    warningpyozwweb.shell 360Unused import message_flashed from wildcard import
    warningpyozwweb.shell 360Unused import abort from wildcard import
    warningpyozwweb.shell 360Unused import request_finished from wildcard import
    warningpyozwweb.shell 360Unused import signals_available from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_popped from wildcard import
    warningpyozwweb.shell 370Unused import leave_room from wildcard import
    warningpyozwweb.shell 370Unused import SocketIO from wildcard import
    warningpyozwweb.shell 370Unused import app from wildcard import
    warningpyozwweb.shell 370Unused import run_app from wildcard import
    warningpyozwweb.shell 370Unused import start_listener from wildcard import
    warningpyozwweb.shell 370Unused import create_app from wildcard import
    warningpyozwweb.shell 370Unused import NullHandler from wildcard import
    warningpyozwweb.shell 370Unused import disconnect from wildcard import
    warningpyozwweb.shell 370Unused import monkey from wildcard import
    warningpyozwweb.shell 370Unused import stop_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import stop_all from wildcard import
    warningpyozwweb.shell 370Unused import fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import time from wildcard import
    warningpyozwweb.shell 370Unused import close_room from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveNetwork from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveOption from wildcard import
    warningpyozwweb.shell 370Unused import sys from wildcard import
    warningpyozwweb.shell 370Unused import stop_listener from wildcard import
    warningpyozwweb.shell 370Unused import logging from wildcard import
    warningpyozwweb.shell 370Unused import install_secret_key from wildcard import
    warningpyozwweb.shell 370Unused import dispatcher from wildcard import
    warningpyozwweb.shell 370Unused import join_room from wildcard import
    warningpyozwweb.shell 370Unused import All from wildcard import
    warningpyozwweb.shell 370Unused import socketio from wildcard import
    warningpyozwweb.shell 370Unused import signal from wildcard import
    warningpyozwweb.shell 370Unused import Fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import threading from wildcard import
    warningpyozwweb.shell 370Unused import start_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import emit from wildcard import
    conventionpyozwweb.reloadmain330Missing function docstring
    conventionpyozwweb.runmain370Missing function docstring
    conventionpyozwweb.config 410Invalid constant name "_basedir"
    conventionpyozwweb.configConfig430Missing class docstring
    conventionpyozwweb.configProductionConfig730Missing class docstring
    conventionpyozwweb.configRunConfig770Missing class docstring
    conventionpyozwweb.configReloadConfig820Missing class docstring
    conventionpyozwweb.configTestingConfig880Missing class docstring
    conventionpyozwweb.app.listener 680No space allowed after bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 680No space allowed before bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 1200Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1210Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1240Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1250Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1260Line too long (168/140)
    conventionpyozwweb.app.listener 1430Exactly one space required around assignment + data=node.to_dict() + ^
    conventionpyozwweb.app.listener 1450Wrong continued indentation. + {'data': data}, + ^ |
    conventionpyozwweb.app.listener 1460Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1850Line too long (146/140)
    conventionpyozwweb.app.listener 2240No space allowed after bracket + self._stopevent.set( ) + ^
    conventionpyozwweb.app.listener 2240No space allowed before bracket + self._stopevent.set( ) + ^
    fatalpyozwweb.app.listener 344Unable to import 'pydispatch'
    conventionpyozwweb.app.listener 590Invalid constant name "listener"
    warningpyozwweb.app.listenerListenerThread._louie_network11712Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_network11712Reimport 'request' (imported line 47)
    errorpyozwweb.app.listenerListenerThread._louie_network12029Undefined variable 'data_room_network'
    errorpyozwweb.app.listenerListenerThread._louie_network12429Undefined variable 'data_room_network'
    warningpyozwweb.app.listenerListenerThread._louie_network12616Specify string format arguments as logging function parameters
    warningpyozwweb.app.listenerListenerThread._louie_network11712Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_node14026Unused argument 'network'
    warningpyozwweb.app.listenerListenerThread._louie_values16512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Unused variable 'request'
    warningpyozwweb.app.listenerstart_listener2304Using the global statement
    conventionpyozwweb.app.listenerstart_listener2304Invalid constant name "listener"
    warningpyozwweb.app.listenerstop_listener2394Using the global statement
    conventionpyozwweb.app.listenerstop_listener2394Invalid constant name "listener"
    warningpyozwweb.app.listener 310Unused import os
    warningpyozwweb.app.listener 370Unused import time
    warningpyozwweb.app.listener 410Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.listener 420Unused Singleton imported from openzwave.singleton
    warningpyozwweb.app.listener 450Unused All imported from louie
    warningpyozwweb.app.listener 470Unused Flask imported from flask
    warningpyozwweb.app.listener 470Unused request imported from flask
    warningpyozwweb.app.listener 470Unused session imported from flask
    warningpyozwweb.app.listener 470Unused render_template imported from flask
    warningpyozwweb.app.viewsmap960Redefining built-in 'map'
    errorpyozwweb.app.views 460No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.views 460Unable to import 'flask.ext.socketio'
    warningpyozwweb.app.views 580Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app.viewsnot_found710Missing function docstring
    warningpyozwweb.app.viewsnot_found7114Unused argument 'error'
    conventionpyozwweb.app.viewshome750Missing function docstring
    conventionpyozwweb.app.viewsnode800Missing function docstring
    conventionpyozwweb.app.viewsvalues840Missing function docstring
    conventionpyozwweb.app.viewscontroller880Missing function docstring
    conventionpyozwweb.app.viewsdebug920Missing function docstring
    conventionpyozwweb.app.viewsmap960Missing function docstring
    conventionpyozwweb.app.viewsscenes1000Missing function docstring
    conventionpyozwweb.app.viewschat1040Missing function docstring
    warningpyozwweb.app.views 410Unused import sys
    warningpyozwweb.app.views 410Unused import os
    warningpyozwweb.app.views 420Unused import time
    warningpyozwweb.app.views 430Unused Thread imported from threading
    warningpyozwweb.app.views 450Unused Flask imported from flask
    warningpyozwweb.app.views 450Unused session imported from flask
    warningpyozwweb.app.views 450Unused current_app imported from flask
    warningpyozwweb.app.views 450Unused request imported from flask
    warningpyozwweb.app.views 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused disconnect imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused emit imported from flask.ext.socketio
    warningpyozwweb.app.views 480Unused import libopenzwave
    warningpyozwweb.app.views 490Unused import openzwave
    warningpyozwweb.app.views 500Unused ZWaveNode imported from openzwave.node
    warningpyozwweb.app.views 510Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.views 520Unused ZWaveScene imported from openzwave.scene
    warningpyozwweb.app.views 530Unused ZWaveController imported from openzwave.controller
    warningpyozwweb.app.views 540Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.views 550Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.views 560Unused dispatcher imported from louie
    warningpyozwweb.app.views 560Unused All imported from louie
    warningpyozwweb.app.views 570Unused socketio imported from pyozwweb.app
    warningpyozwweb.app.views 580Unused listener imported from listener
    conventionpyozwweb.app.__init__ 930Exactly one space required after comma + socketio.run(app, use_reloader=app.config['RELOADER'],host=app.config['HOST'], port=app.config['PORT']) + ^
    conventionpyozwweb.app.__init__ 1830Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1860Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1870Unnecessary parens after u'print' keyword
    errorpyozwweb.app 430No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app 430Unable to import 'flask.ext.socketio'
    warningpyozwweb.app 670Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app 690Invalid constant name "fanstatic"
    conventionpyozwweb.app 700Invalid constant name "app"
    conventionpyozwweb.app 710Invalid constant name "socketio"
    conventionpyozwweb.apprun_app730Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Redefining name 'signal' from outer scope (line 65)
    conventionpyozwweb.apprun_app.signal_term_handler754Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Unused argument 'signal'
    warningpyozwweb.apprun_app.signal_term_handler7536Unused argument 'frame'
    warningpyozwweb.apprun_app834Using the global statement
    conventionpyozwweb.apprun_app834Invalid constant name "socketio"
    warningpyozwweb.apprun_app854Using the global statement
    conventionpyozwweb.apprun_app854Invalid constant name "app"
    warningpyozwweb.apprun_app874Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app924Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app7329Unused argument 'debug'
    conventionpyozwweb.appstop_all970Missing function docstring
    warningpyozwweb.appstop_all994Using global for 'app' but no assignment is done
    conventionpyozwweb.appstop_all994Invalid constant name "app"
    warningpyozwweb.appcreate_app1114Redefining name 'logging' from outer scope (line 55)
    warningpyozwweb.appcreate_app1034Redefining name 'monkey' from outer scope (line 35)
    conventionpyozwweb.appcreate_app1020Missing function docstring
    warningpyozwweb.appcreate_app1034Reimport 'monkey' (imported line 35)
    warningpyozwweb.appcreate_app1084Using the global statement
    conventionpyozwweb.appcreate_app1084Invalid constant name "app"
    warningpyozwweb.appcreate_app1144Specify string format arguments as logging function parameters
    conventionpyozwweb.appcreate_app1168Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1188Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1208Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1228Invalid variable name "ZWAVE_DEBUG"
    warningpyozwweb.appcreate_app1364Using the global statement
    conventionpyozwweb.appcreate_app1364Invalid constant name "fanstatic"
    warningpyozwweb.appcreate_app1384Using the global statement
    conventionpyozwweb.appcreate_app1384Invalid constant name "socketio"
    warningpyozwweb.appcreate_app1424Relative import 'views', should be 'pyozwweb.app.views'
    warningpyozwweb.appcreate_app1434Relative import 'socket', should be 'pyozwweb.app.socket'
    warningpyozwweb.appcreate_app1424Unused variable 'views'
    warningpyozwweb.appcreate_app1434Unused variable 'chat'
    warningpyozwweb.appcreate_app1434Unused variable 'ozwave'
    warningpyozwweb.appcreate_app1168Unused variable 'ZWAVE_DEBUG'
    warningpyozwweb.appstart_zwnetwork15020Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.appstart_zwnetwork1500Missing function docstring
    errorpyozwweb.appstart_zwnetwork1574Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwweb.appstop_zwnetwork1610Missing function docstring
    warningpyozwweb.appinstall_secret_key17023Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.app.socket.ozwave 950Exactly one space required around assignment + done=False + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 1000Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1060No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1140No space allowed before : + try : + ^
    conventionpyozwweb.app.socket.ozwave 1230Exactly one space required around assignment + done=False + ^
    conventionpyozwweb.app.socket.ozwave 1240Exactly one space required after comma + keys = ['posx','posy'] + ^
    conventionpyozwweb.app.socket.ozwave 1280Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1400No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1710Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1720Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1790Wrong continued indentation. + {'data': data, + ^|
    conventionpyozwweb.app.socket.ozwave 1800Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1820Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1830Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1860Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 1880Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 1930No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2000Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2020Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2070No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2140Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2160Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2210No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2280Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2300Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2350No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2420Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2440Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2490No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2860No space allowed before : + if data['result'] == True : + ^
    conventionpyozwweb.app.socket.ozwave 2980Line too long (147/140)
    errorpyozwweb.app.socket.ozwave 480No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.ozwave 480Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.ozwaveecho_message720Missing function docstring
    conventionpyozwweb.app.socket.ozwavedisconnect_request790Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_connect870Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_network_event920Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_node_event1110Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_nodes_event1460Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_controller_event1540Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_command_event1610Missing function docstring
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many branches (38/12)
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many statements (120/50)
    conventionpyozwweb.app.socket.ozwaveecho_value_event2940Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_scenes_event3030Missing function docstring
    warningpyozwweb.app.socket.ozwave 430Unused import os
    warningpyozwweb.app.socket.ozwave 430Unused import sys
    warningpyozwweb.app.socket.ozwave 440Unused import time
    warningpyozwweb.app.socket.ozwave 450Unused Thread imported from threading
    warningpyozwweb.app.socket.ozwave 470Unused Flask imported from flask
    warningpyozwweb.app.socket.ozwave 470Unused render_template imported from flask
    warningpyozwweb.app.socket.ozwave 480Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 500Unused import libopenzwave
    warningpyozwweb.app.socket.ozwave 510Unused import openzwave
    warningpyozwweb.app.socket.ozwave 520Unused ZWaveNode imported from openzwave.node
    warningpyozwweb.app.socket.ozwave 530Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.socket.ozwave 540Unused ZWaveScene imported from openzwave.scene
    warningpyozwweb.app.socket.ozwave 550Unused ZWaveController imported from openzwave.controller
    warningpyozwweb.app.socket.ozwave 560Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.socket.ozwave 570Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.socket.ozwave 580Unused All imported from louie
    warningpyozwweb.app.socket.ozwave 580Unused dispatcher imported from louie
    warningpyozwweb.app.socket.ozwave 590Unused app imported from pyozwweb.app
    warningpyozwweb.app.socket 900No exception type(s) specified
    conventionpyozwweb.app.socket.chat 1270Unnecessary parens after u'print' keyword
    errorpyozwweb.app.socket.chat 460No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.chat 460Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.chattest_message610Missing function docstring
    conventionpyozwweb.app.socket.chattest_broadcast_message700Missing function docstring
    conventionpyozwweb.app.socket.chatjoin780Missing function docstring
    conventionpyozwweb.app.socket.chatleave870Missing function docstring
    conventionpyozwweb.app.socket.chatclose960Missing function docstring
    conventionpyozwweb.app.socket.chatsend_room_message1050Missing function docstring
    conventionpyozwweb.app.socket.chatdisconnect_request1130Missing function docstring
    conventionpyozwweb.app.socket.chattest_connect1210Missing function docstring
    conventionpyozwweb.app.socket.chattest_disconnect1260Missing function docstring
    warningpyozwweb.app.socket.chat 410Unused import sys
    warningpyozwweb.app.socket.chat 410Unused import os
    warningpyozwweb.app.socket.chat 420Unused import time
    warningpyozwweb.app.socket.chat 430Unused Thread imported from threading
    warningpyozwweb.app.socket.chat 450Unused Flask imported from flask
    warningpyozwweb.app.socket.chat 450Unused current_app imported from flask
    warningpyozwweb.app.socket.chat 450Unused render_template imported from flask
    warningpyozwweb.app.socket.chat 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.chat 480Unused app imported from pyozwweb.app
    refactoropenzwave.nodeZWaveNode490Interface not implemented
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.ozwave)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.chat)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.views)
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.listener:6 +==pyozwweb.app.views:17 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +from gevent import monkey +monkey.patch_all() + +import os +import sys +if sys.hexversion &gt;= 0x3000000: + from pydispatch import dispatcher +else: + from louie import dispatcher +import time + +from openzwave.network import ZWaveNetwork +from openzwave.controller import ZWaveController +from openzwave.option import ZWaveOption +from openzwave.singleton import Singleton +import threading +from threading import Thread +from louie import dispatcher, All + +from flask import Flask, render_template, session, request, current_app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logging.getLogger('pyozwweb').addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} + + ZWAVE_DEVICE = "/dev/ttyUSB0"
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os, sys +import time +from threading import Thread + +from flask import Flask, render_template, session, request, current_app +from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect + +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from louie import dispatcher, All +from pyozwweb.app import socketio, app + +import logging try: # Python 2.7+ from logging import NullHandler except ImportError: @@ -14781,6 +27139,8 @@

    Messages

      1 0Similar lines in 2 files ==openzwave.object:25 ==openzwave.singleton:25 @@ -14807,6 +27167,34 @@

    Messages

    for key in vals.keys(): ret[key]=vals[key] return ret
    refactorpyozwweb.app.socket.chat 10Similar lines in 12 files +==openzwave.command:25 +==openzwave.controller:26 +==openzwave.group:25 +==openzwave.network:25 +==openzwave.node:25 +==openzwave.object:25 +==openzwave.option:25 +==openzwave.scene:25 +==openzwave.singleton:25 +==openzwave.value:25 +==pyozwman.ozwsh_main:30 +==pyozwman.ozwsh_widgets:29 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass
    refactorpass
    tests.api.test_network_start:TestNetworkStartStop tests.api.test_controller_command:TestControllerCommand 5.00
    tests.api.test_controller_command:TestControllerCommand7.00
    tests.api.test_controller_command:TestControllerCommand 7.00
    test_000_network_start_stop
    5.00pass
    tests.api.test_switch:TestSwitch 3.00
    test_010_switch_state
    tests.api.test_switch_all:TestSwitchAll4.003300Detail
    test_010_switch_all_item
    0.00 pass
    test_110_switch_on_off
    3.00
    test_010_switch_all_item
    test_015_switch_all_set_item
    4.00pass
    test_020_switch_all_items
    0.00 pass
    test_015_switch_all_set_item
    4.00
    test_905_network_singleton
    0.00
    test_110_switch_on_off
    3.00
    tests.api.test_switch:TestSwitch3.002200Detail
    test_010_switch_state
    0.00pass
    test_110_switch_on_off
    3.00
    tests.api.test_network:TestNetwork2.042.052.05 9 0 0Detail
    Detail
    Detail
    test_000_network_awake
    pass
    test_010_network_ready
    0.00 pass
    test_100_network_test
    0.00 pass
    test_110_network_heal
    0.00 pass
    test_120_network_poll
    0.00 pass
    test_200_network_to_dict
    0.00 pass
    test_220_network_nodes_to_dict
    0.00 pass
    test_300_network_kvals_nodes
    pass
    test_300_network_kvals_nodes
    1.08pass
    test_310_network_kvals_controller
    tests.manager.autobuild.test_manager:ManagerTest 0.07 0.07tests.api.autobuild.test_api:TestNetworkApitests.api.autobuild.test_api:TestNetworkApi1.003300Detail
    test_000_api_network
    1.00 3 3 Detail
    test_000_api_network
    1.00 pass
    test_900_api_singleton
    0.00 9 0 0Detail
    Detail
    Detail
    test_000_server_start
    pass
    test_001_error_404
    0.00 pass
    test_100_home_is_up
    0.00 pass
    test_200_controller_is_up
    0.00 pass
    test_300_values_is_up
    0.00 pass
    test_400_controller_is_up
    0.00 pass
    test_500_node_is_up
    0.00 pass
    test_600_map_is_up
    0.00 pass
    test_700_scenes_is_up
    0.00 1 0 0Detail
    test_020_scene_to_dict
    0.00Detail
    test_000_import
    0.02pass
    tests.lib.autobuild.test_lib:TestInittests.api.test_nodes:TestNodes 0.004455 0 0Detail
    test_005_scene_add_remove
    test_000_init
    Detail
    test_000_nodes_count
    0.00 pass
    test_010_scenes_to_dict
    test_010_options_exceptions
    test_100_nodes_test
    0.00 pass
    test_020_scene_to_dict
    test_020_options_without_command_line
    test_200_nodes_to_dict
    0.00pass
    test_030_options_with_command_line
    test_210_controller_to_dict
    0.00pass
    test_220_nodes_groups_to_dict
    0.00pass
    tests.api.test_sensor:TestSensortests.api.test_value:TestValue0.001100Detail
    test_200_values_to_dict
    0.00pass
    tests.api.test_scene:TestScene0.002200Detail
    test_010_sensor_bool
    Detail
    test_005_scene_add_remove
    0.00pass
    test_010_scenes_to_dict
    0.00pass
    test_020_scene_to_dict
    0.00pass
    tests.lib.autobuild.test_lib:TestInit0.004400Detail
    test_000_init
    0.00pass
    test_010_options_exceptions
    0.00pass
    test_410_sensor_decimal
    test_020_options_without_command_line
    0.00 pass
    Total1:15.031:15.021:15.02 method 531530 +1.00531 =531=83.43 3.01
    5008 51.444995 +13.005008 = 3842 39.473829 +13.003842 = 610 6.27609 +1.00610 = nb duplicated lines 21362131 +5.002136 = percent duplicated lines 21.40921.417 -0.0121.409 = convention 891888 +3.00891 = warning 505501 +4.00505 = openzwave.option 22.220.000.000.00 0.000.00 0.00
    pyozwweb.app.socket.__init__0.00 0.20 0.00
    pyozwweb.config0.00 0.20 0.000.000.000.000.67
    @@ -683,6 +727,13 @@

    Messages

    <<<<<<< HEAD +<<<<<<< HEAD + + + + + +======= @@ -904,6 +955,7 @@

    Messages

    +<<<<<<< HEAD @@ -923,147 +975,7 @@

    Messages

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +======= @@ -1083,20 +995,51 @@

    Messages

    +>>>>>>> master - + +<<<<<<< HEAD + + + + + + +>>>>>>> master +======= +>>>>>>> master +<<<<<<< HEAD + + + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + +======= @@ -1109,6 +1052,7 @@

    Messages

    +>>>>>>> master @@ -1128,39 +1072,93 @@

    Messages

    +<<<<<<< HEAD + + +<<<<<<< HEAD + + + +======= +>>>>>>> master - + + + + +======= + + + + + + +<<<<<<< HEAD + + + + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + + + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + + +======= @@ -1173,10 +1171,27 @@

    Messages

    +>>>>>>> master +<<<<<<< HEAD + + + + + + + + + + + + +======= @@ -1189,63 +1204,141 @@

    Messages

    +>>>>>>> master +<<<<<<< HEAD + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + +>>>>>>> master + + + + + + + + + + + + + + + + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + + + + + +======= @@ -1253,12 +1346,17 @@

    Messages

    +>>>>>>> master - + +<<<<<<< HEAD + +======= +>>>>>>> master - + +<<<<<<< HEAD + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + + + +======= +>>>>>>> master - + @@ -1292,82 +1402,581 @@

    Messages

    - + +<<<<<<< HEAD + +======= +>>>>>>> master - + - - + + +<<<<<<< HEAD + +======= +>>>>>>> master - + - + +<<<<<<< HEAD + +======= +>>>>>>> master - + - - + + +<<<<<<< HEAD + +======= +>>>>>>> master - + - + +<<<<<<< HEAD + +======= +>>>>>>> master - + - - + + +<<<<<<< HEAD + +======= +>>>>>>> master - + - + +<<<<<<< HEAD + +======= +>>>>>>> master - + - + +<<<<<<< HEAD + + + - - + + +<<<<<<< HEAD + + + +======= +>>>>>>> master - - - + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + +======= + + + + + + + + + + + +>>>>>>> master + + + + +<<<<<<< HEAD + + + + +======= + + + + +>>>>>>> master + + + + +<<<<<<< HEAD + + + + + + + + + + + + +======= + + + + +>>>>>>> master + + + + + + + + + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1580,6 +2189,60 @@

    Messages

    +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master @@ -1771,6 +2434,7 @@

    Messages

    +<<<<<<< HEAD @@ -14911,179 +15575,13197 @@

    Messages

    - - - - + + + + + + + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + +<<<<<<< HEAD + + +======= + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + +<<<<<<< HEAD + + +======= + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + +======= + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + +======= + + + + + + + + + + + + + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + +======= + + + + + + + +>>>>>>> master + + + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + +======= + + + + + +>>>>>>> master + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + +======= + + + + + +>>>>>>> master + + + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + +======= + + + +>>>>>>> master + + + + + + + + + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + +======= + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + +======= + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + +======= + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + +======= + + + + + + + + + + + + + +>>>>>>> master + + + + + + + + + + + + + + + + + + + +<<<<<<< HEAD + + + + + +======= + + + + + +>>>>>>> master + + + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + +======= + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + + + - - - - - - + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + >>>>>>> master - + -<<<<<<< HEAD - -======= - ->>>>>>> master + - - + + - + - + -<<<<<<< HEAD -======= - - - + - + - - ->>>>>>> master + + - + -<<<<<<< HEAD - -======= - ->>>>>>> master + - - + + - + - + -<<<<<<< HEAD -======= - - ->>>>>>> master -<<<<<<< HEAD @@ -26604,34 +40286,34 @@

    Messages

    """ __author__ = 'Sébastien GALLET aka bibi21000' __email__ = 'bibi21000@gmail.com' -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -import os, sys -import time -from threading import Thread -from flask import Flask, render_template, session, request, current_app -from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) -import libopenzwave -import openzwave -from openzwave.node import ZWaveNode -from openzwave.value import ZWaveValue -from openzwave.scene import ZWaveScene -from openzwave.controller import ZWaveController -from openzwave.network import ZWaveNetwork -from openzwave.option import ZWaveOption -from louie import dispatcher, All -from pyozwweb.app import socketio, app +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} + @@ -26665,33 +40347,33 @@

    Messages

    """ __author__ = 'Sébastien GALLET aka bibi21000' __email__ = 'bibi21000@gmail.com' -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -import os, sys -import time -from threading import Thread -from flask import Flask, render_template, session, request, current_app -from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) -import libopenzwave -import openzwave -from openzwave.node import ZWaveNode -from openzwave.value import ZWaveValue -from openzwave.scene import ZWaveScene -from openzwave.controller import ZWaveController -from openzwave.network import ZWaveNetwork -from openzwave.option import ZWaveOption -from louie import dispatcher, All -from pyozwweb.app import socketio, app +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} @@ -27139,6 +40821,9 @@

    Messages

    +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master + + + + + + + +
    warningopenzwave.group 1710Bad indentation. Found 16 spaces, expected 12openzwave.group   171
    conventionopenzwave.group   42 openzwave.singleton Singleton.__init__ 354Metaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__444Metaclass method __call__ should have 'cls' as first argument
    warningopenzwave.node 1900Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 1910Exactly one space required around assignment - ret={} - ^
    conventionopenzwave.node 1970No space allowed before : - if 'values' in extras : - ^
    warningopenzwave.node 1980Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 1990No space allowed before : - if 'groups' in extras : - ^
    warningopenzwave.node 2000Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2010No space allowed before : - if 'neighbors' in extras : - ^
    warningopenzwave.node 2020Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2030No space allowed before : - if 'capabilities' in extras : - ^
    warningopenzwave.node 2040Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2080Exactly one space required around assignment - ret[key]=vals[key] - ^
    conventionopenzwave.node 2840Exactly one space required around assignment - ret={} - ^
    conventionopenzwave.node 4540Exactly one space required around assignment - ret={} - ^
    conventionopenzwave.node 460Invalid constant name "logger"
    conventionopenzwave.node ZWaveNode.__init__ 74 openzwave.node ZWaveNode.__init__ 594__init__ method from base class 'ZWaveNodeBasic' is not calledMetaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__444Metaclass method __call__ should have 'cls' as first argumentwarning openzwave.node ZWaveNode.__init__ 59 4 __init__ method from base class 'ZWaveNodeSwitch' is not called
    warning openzwave.node 1900Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.group 1721910Exactly one space required around assignment + ret={} + ^ZWaveNode.__init__ 59 4 69 8 Specify string format arguments as logging function parameters
    warning
    conventionopenzwave.group 1740No space allowed before : + if 'associations' in extras : + ^openzwave.node ZWaveNode.heal 289 4 Invalid argument name "upNodeRoute"
    errorwarningopenzwave.group 1751970No space allowed before : + if 'values' in extras : + ^
    warning openzwave.node 1980Bad indentation. Found 16 spaces, expected 12ZWaveNode.heal 303 8 Instance of 'ZWaveNode' has no 'manager' member
    warningconvention openzwave.node 1990No space allowed before : + if 'groups' in extras : + ^ZWaveNode.get_values_by_command_classes 365 8 Redefining built-in 'type'
    warning openzwave.node 2000Bad indentation. Found 16 spaces, expected 12ZWaveNode.get_values 413 8 Redefining built-in 'type'
    warningconvention openzwave.node 2010No space allowed before : + if 'neighbors' in extras : + ^ZWaveNode.values_to_dict 444 4 506 12 Specify string format arguments as logging function parameters
    warning openzwave.node 2020Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2030No space allowed before : + if 'capabilities' in extras : + ^ZWaveNode.request_all_config_params 762 8 783 8 Specify string format arguments as logging function parameters
    warning openzwave.node 2040Bad indentation. Found 16 spaces, expected 12ZWaveNode.set_config_param 806 8 Specify string format arguments as logging function parameters
    convention openzwave.node 2080Exactly one space required around assignment + ret[key]=vals[key] + ^ZWaveNode.isNodeAwake 827 4 Invalid method name "isNodeAwake"
    convention openzwave.node 2840Exactly one space required around assignment + ret={} + ^ZWaveNode.isNodeFailed 838 4 Invalid attribute name "isNodeFailed"
    convention openzwave.node 4540Exactly one space required around assignment + ret={} + ^ZWaveNode.getNodeQueryStage 849 4 Invalid attribute name "getNodeQueryStage"
    convention openzwave.node 460Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.group 420Invalid constant name "logger"
    warningopenzwave.groupZWaveGroup.to_dict160ZWaveNode.isReady 8594Invalid attribute name "isReady"Dangerous default value [] as argument
    conventionopenzwave.singletonSingleton.__init__35openzwave.node ZWaveNode.isReady 8694Invalid attribute name "isReady"Metaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__44openzwave.node ZWaveNode.isNodeInfoReceived 8814Invalid attribute name "isNodeInfoReceived"Metaclass method __call__ should have 'cls' as first argument
    warningopenzwave.node 1900Bad indentation. Found 16 spaces, expected 12
    refactor openzwave.node 49 0 Too many public methods (53/20)
    conventionopenzwave.sceneopenzwave.node  1912210 Exactly one space required around assignment ret={} @@ -1266,21 +1364,33 @@

    Messages

    conventionopenzwave.sceneopenzwave.node  1972270Exactly one space required around assignment - ret[key]=vals[key] - ^No space allowed before : + if 'values' in extras : + ^
    warningopenzwave.node 198
    convention openzwave.scene   420Invalid constant name "logger"Bad indentation. Found 16 spaces, expected 12
    warning
    conventionopenzwave.controlleropenzwave.node  199700Line too long (186/140)No space allowed before : + if 'groups' in extras : + ^
    conventionopenzwave.controllerwarningopenzwave.node  200780Line too long (179/140)Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.controlleropenzwave.node  201880Line too long (147/140)No space allowed before : + if 'neighbors' in extras : + ^
    conventionopenzwave.controllerwarningopenzwave.node  202890Line too long (158/140)Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.controlleropenzwave.node  203900Line too long (156/140)No space allowed before : + if 'capabilities' in extras : + ^
    conventionopenzwave.controllerwarningopenzwave.node  204920Line too long (161/140)Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.controlleropenzwave.node  2081710Line too long (141/140)Exactly one space required around assignment + ret[key]=vals[key] + ^
    conventionopenzwave.controlleropenzwave.node  2840Exactly one space required around assignment + ret={} +======= 766 0 Exactly one space required around assignment ret=self.node.to_dict(extras=extras) +>>>>>>> master ^
    fatalopenzwave.controllerconventionopenzwave.node  4540Exactly one space required around assignment + ret={} + ^34 4 Unable to import 'pydispatch'
    erroropenzwave.controller conventionopenzwave.node 46390Invalid constant name "logger"
    conventionopenzwave.nodeZWaveNode.__init__748Invalid attribute name "_isReady"
    warningopenzwave.nodeZWaveNode.__init__59openzwave.controller 510Invalid constant name "logger"
    refactoropenzwave.controllerZWaveController540Too many instance attributes (9/7)
    refactoropenzwave.controllerZWaveController.get_stats_label3594__init__ method from base class 'ZWaveNodeSensor' is not called
    warningopenzwave.controllerZWaveController.do_poll_statistics3788Used * or ** magic
    warningopenzwave.nodeZWaveNode.__init__594__init__ method from base class 'ZWaveNodeBasic' is not called
    warningopenzwave.nodeZWaveNode.__init__59openzwave.controllerZWaveController.hard_reset4898Used * or ** magic
    conventionopenzwave.controllerZWaveController.begin_command_send_node_information5024__init__ method from base class 'ZWaveNodeSwitch' is not called
    warningopenzwave.nodeZWaveNode.__init__59conventionopenzwave.controllerZWaveController.begin_command_request_network_update5304__init__ method from base class 'ZWaveNodeSecurity' is not called
    warningopenzwave.nodeZWaveNode.__init__698Specify string format arguments as logging function parameters
    warningopenzwave.nodeZWaveNode.to_dict179conventionopenzwave.controllerZWaveController.begin_command_remove_failed_node5734Dangerous default value [] as argument
    warningopenzwave.nodeZWaveNode.groups_to_dict2734Dangerous default value [] as argument
    conventionopenzwave.nodeZWaveNode.heal289openzwave.controllerZWaveController.begin_command_replace_failed_node6024Invalid argument name "upNodeRoute"
    erroropenzwave.nodeZWaveNode.heal3038Instance of 'ZWaveNode' has no 'manager' member
    warningopenzwave.nodeZWaveNode.get_values_by_command_classes3658Redefining built-in 'type'
    warningopenzwave.nodeZWaveNode.get_values4138Redefining built-in 'type'
    warningopenzwave.nodeZWaveNode.values_to_dict4444Dangerous default value [] as argument
    warningopenzwave.nodeZWaveNode.remove_value50612Specify string format arguments as logging function parameters
    warningopenzwave.nodeZWaveNode.request_all_config_params7628Specify string format arguments as logging function parameters
    warningopenzwave.nodeZWaveNode.request_config_param7838Specify string format arguments as logging function parameters
    warningopenzwave.nodeZWaveNode.set_config_param8068Specify string format arguments as logging function parameters
    conventionopenzwave.nodeZWaveNode.isNodeAwake827openzwave.controllerZWaveController.begin_command_request_node_neigbhor_update6164Invalid method name "isNodeAwake"
    conventionopenzwave.nodeZWaveNode.isNodeFailed838openzwave.controllerZWaveController.begin_command_create_new_primary6304Invalid attribute name "isNodeFailed"
    conventionopenzwave.nodeZWaveNode.getNodeQueryStage849openzwave.controllerZWaveController.begin_command_transfer_primary_role6414Invalid attribute name "getNodeQueryStage"
    conventionopenzwave.nodeZWaveNode.isReady859openzwave.controllerZWaveController.begin_command_receive_configuration6584Invalid attribute name "isReady"
    conventionopenzwave.nodeZWaveNode.isReady869openzwave.controllerZWaveController.begin_command_assign_return_route6694Invalid attribute name "isReady"
    conventionopenzwave.nodeZWaveNode.isNodeInfoReceived881openzwave.controllerZWaveController.begin_command_delete_all_return_routes6844Invalid attribute name "isNodeInfoReceived"
    refactoropenzwave.nodeZWaveNode490Too many public methods (53/20)
    conventionopenzwave.scene 2210Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.scene 2270Exactly one space required around assignment + ret[key]=vals[key] + ^warningopenzwave.controllerZWaveController.zwcallback75112Used * or ** magic
    warningopenzwave.controllerZWaveController.zwcallback7538Used * or ** magic
    warningopenzwave.controllerZWaveController.to_dict7564Dangerous default value [] as argument
    refactoropenzwave.controllerZWaveController540Too many public methods (43/20)
    conventionopenzwave.scene 420Invalid constant name "logger"
    warningopenzwave.sceneZWaveScene.to_dict2114Dangerous default value [] as argument
    conventionopenzwave.controller 700Line too long (186/140)
    conventionopenzwave.controller 780Line too long (179/140)
    conventionopenzwave.controller 880Line too long (147/140)
    conventionopenzwave.controller 890Line too long (158/140)
    conventionopenzwave.controller 900Line too long (156/140)
    conventionopenzwave.controller 920Line too long (161/140)
    conventionopenzwave.controller 1710Line too long (141/140)
    conventionopenzwave.controller 7660Exactly one space required around assignment + ret=self.node.to_dict(extras=extras) + ^
    fatalopenzwave.controller 344Unable to import 'pydispatch'
    erroropenzwave.controller  39 0 No name 'PyStatDriver' in module 'libopenzwave' 15 Instance of 'ZWaveNodeBasic' has no 'get_values' member
    430Invalid constant name "logger"
    erroropenzwave.commandZWaveNodeBasic.get_battery_level29023Instance of 'ZWaveNodeBasic' has no 'values' member
    erroropenzwave.commandZWaveNodeBasic.get_battery_level29219Instance of 'ZWaveNodeBasic' has no 'values' member
    erroropenzwave.commandZWaveNodeBasic.get_battery_levels31015Instance of 'ZWaveNodeBasic' has no 'get_values' member
    erroropenzwave.commandZWaveNodeBasic.get_power_level32523Instance of 'ZWaveNodeBasic' has no 'values' member
    erroropenzwave.commandZWaveNodeBasic.get_power_level32719Instance of 'ZWaveNodeBasic' has no 'values' member
    erroropenzwave.commandZWaveNodeBasic.get_power_levels34515Instance of 'ZWaveNodeBasic' has no 'get_values' member
    error openzwave.command 644 15 Instance of 'ZWaveNodeSecurity' has no 'get_values' member
    error
    refactor pyozwweb.app.socket.chat 10Similar lines in 3 files -==openzwave.group:25 -==openzwave.scene:25 -==openzwave.value:25 -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -from openzwave.object import ZWaveObject - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - """NullHandler logger for python 2.6""" - def emit(self, record): - pass -logger = logging.getLogger('openzwave') -logger.addHandler(NullHandler()) - 10Similar lines in 3 files +==openzwave.group:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject + +# Set default logging handler to avoid "No handler found" warnings. +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:28 +==pyozwman.ozwsh_widgets:27 +__author__ = 'bibi21000' + +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from select import select +import sys +import os +import urwid +from urwid.raw_display import Screen
    refactorpyozwweb.app.socket.chat 710Exactly one space required around comparison + if pos &gt;= 0 and pos &lt; self.size and len(self.lines)&gt;0: + ^Similar lines in 9 files +==openzwave.command:34 +==openzwave.controller:42 +==openzwave.group:33 +==openzwave.network:52 +==openzwave.node:37 +==openzwave.object:31 +==openzwave.option:37 +==openzwave.scene:33 +==openzwave.value:33 +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:46 +==pyozwman.ozwsh_widgets:40 +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption
    conventionpyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==openzwave.network:25 +==openzwave.option:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os
    refactorpyozwweb.app.socket.chat 800Exactly one space required after comma + line,pos = self._get_at_pos(self.focus) + ^Similar lines in 2 files +==openzwave.network:616 +==openzwave.node:204 + if 'kvals' in extras and self.network.dbcon is not None: + vals = self.kvals + for key in vals.keys(): + ret[key]=vals[key] + return ret +
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==openzwave.group:25 +==openzwave.node:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject
    conventionpyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat 1310No space allowed before comma + self.lines.append(urwid.Text("Help" , align='left')) + ^
    conventionpyozwman.ozwsh_widgets 1760No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 1790No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 2030Exactly one space required after comma + def path(self,value): + ^
    conventionpyozwman.ozwsh_widgets 2560Exactly one space required after assignment + self.walker =StatTree(window, parent.walker, self) + ^
    conventionpyozwman.ozwsh_widgets 2640No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 2650Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 2660Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 2670Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 2680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 2720Wrong continued indentation. + 'name':'stats', + ^ |
    conventionpyozwman.ozwsh_widgets 2730Wrong continued indentation. + 'help':'statistics', + ^ |
    conventionpyozwman.ozwsh_widgets 2740Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 2750No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 2760Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 2860No space allowed after bracket + self.lines.append(urwid.Text( " Statistics", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 2880No space allowed after bracket + self.lines.append(urwid.Text( " Frames processed: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2910No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully received: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2940No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully sent: . . . . . . . . . .%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2970No space allowed after bracket + self.lines.append(urwid.Text( " ACKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3000No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts read: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3030No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts sent: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3060No space allowed after bracket + self.lines.append(urwid.Text( " Queue:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3080No space allowed after bracket + self.lines.append(urwid.Text( " Messages in queue: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3110No space allowed after bracket + self.lines.append(urwid.Text( " Errors:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3130No space allowed after bracket + self.lines.append(urwid.Text( " Unsolicited messages received while waiting for ACK: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3160No space allowed after bracket + self.lines.append(urwid.Text( " Reads aborted due to timeouts: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3190No space allowed after bracket + self.lines.append(urwid.Text( " Bad checksum errors: . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3220No space allowed after bracket + self.lines.append(urwid.Text( " CANs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3250No space allowed after bracket + self.lines.append(urwid.Text( " NAKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3280No space allowed after bracket + self.lines.append(urwid.Text( " Out of frame data flow errors: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3310No space allowed after bracket + self.lines.append(urwid.Text( " Messages retransmitted: . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3340No space allowed after bracket + self.lines.append(urwid.Text( " Messages dropped and not delivered: . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3370No space allowed after bracket + self.lines.append(urwid.Text( " Number of unexpected callbacks: . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3400No space allowed after bracket + self.lines.append(urwid.Text( " Number of failed messages due to bad route response: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3430No space allowed after bracket + self.lines.append(urwid.Text( " Number of no ACK returned errors: . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3460No space allowed after bracket + self.lines.append(urwid.Text( " Number of network busy/failure messages: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3490No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages not delivered to network: . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3520No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages received with routed busy status: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3760No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 3770Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 3780Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 3790Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 3800Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3860Wrong continued indentation. + 'name':'groups', + | ^
    conventionpyozwman.ozwsh_widgets 3870Wrong continued indentation. + 'help':'Groups/Associations management', + | ^
    conventionpyozwman.ozwsh_widgets 3880Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 3890Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3900No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 4260No space allowed before : + for group in groups : + ^
    conventionpyozwman.ozwsh_widgets 4280No space allowed after bracket + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4280Exactly one space required after comma + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4330Wrong continued indentation. + )) + ^ |
    conventionpyozwman.ozwsh_widgets 4490No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 4690No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4810No space allowed before : + if value in self.window.network.nodes[self.node_id].groups : + ^
    conventionpyozwman.ozwsh_widgets 4850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4860Exactly one space required after comma + self.window.status_bar.update(status="Can't find node %s in group %s" % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 4880No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4920No space allowed before bracket +class AssociationItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 4940No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 5000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 5090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 5130No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5240No space allowed after bracket + self.childrens = { 'controller' : {'id':'ctl', + ^
    conventionpyozwman.ozwsh_widgets 5250Wrong continued indentation. + 'name':'Controller', + ^ |
    conventionpyozwman.ozwsh_widgets 5260Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 5270Wrong continued indentation. + 'widget_box' : None}, + ^ |
    conventionpyozwman.ozwsh_widgets 5280Wrong continued indentation. + 'scenes' : {'id':'scn', + ^ |
    conventionpyozwman.ozwsh_widgets 5320Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 5540No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5600No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5690No space allowed before bracket +class RootDir (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5710No space allowed before bracket + def __init__ (self, id=None, name=None, help=None): + ^
    conventionpyozwman.ozwsh_widgets 5760Wrong continued indentation. + urwid.Padding(urwid.AttrWrap(urwid.Text('%s' % id, wrap='clip'), 'body', 'focus'), left=2)), + | ^
    conventionpyozwman.ozwsh_widgets 5770Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5780Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5800No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5830No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5890No space allowed before bracket +class RootItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5910No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1): + ^
    conventionpyozwman.ozwsh_widgets 5970Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5980Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5990Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 6050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 6090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6160No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 6520No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 6530Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 6540Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 6550Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 6560Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6600Wrong continued indentation. + 'name':'nodes', + | ^
    conventionpyozwman.ozwsh_widgets 6610Wrong continued indentation. + 'help':'Nodes management', + | ^
    conventionpyozwman.ozwsh_widgets 6620Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 6630Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6640No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 7190No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7220No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7310No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 7370No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7400Exactly one space required around assignment + self.childrens['node']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 7420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7480No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7550Exactly one space required around assignment + val=True + ^
    conventionpyozwman.ozwsh_widgets 7570Exactly one space required around assignment + val=False + ^
    conventionpyozwman.ozwsh_widgets 7820No space allowed before bracket +class NodesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 7840No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1, awaked=False): + ^
    conventionpyozwman.ozwsh_widgets 7900Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7910Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7920Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7930Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7940Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % awaked, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7960No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 7990No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 8030Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8040Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8050Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8060Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8070Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Awaked", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8110No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 8330No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 8340Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 8350Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 8360Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 8370Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 8440Wrong continued indentation. + 'name':'node', + ^ |
    conventionpyozwman.ozwsh_widgets 8450Wrong continued indentation. + 'help':'Node management', + ^ |
    conventionpyozwman.ozwsh_widgets 8460Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 8500No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 8510Exactly one space required after comma + parent.add_child("node",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 8710No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 9150No space allowed after bracket + self.lines.append(urwid.Text( " Baud rate = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9180No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9210No space allowed after bracket + self.lines.append(urwid.Text( " Neighbors = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9240No space allowed after bracket + self.lines.append(urwid.Text( " Groups = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9270No space allowed before bracket + self.window.log.info("NodeTree num groups = %s" % self.window.network.nodes[self.key].num_groups ) + ^
    conventionpyozwman.ozwsh_widgets 9440No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 9500Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.key=directory + ^
    conventionpyozwman.ozwsh_widgets 9510Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.node_id=self.key + ^
    conventionpyozwman.ozwsh_widgets 9710No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 9720Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 9730Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 9740Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 9750Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 9820Wrong continued indentation. + 'name':'controller', + ^ |
    conventionpyozwman.ozwsh_widgets 9830Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 9840Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 9850No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 9860Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 10270No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 10510No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10590No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10710No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10730No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10790No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10850No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10870No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10930No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10990No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 11010No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 11520No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11570No space allowed after bracket + self.lines.append(urwid.Text( " Device=%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11820No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 11830Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 11840Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 11850Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 11860Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11950Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11970Wrong continued indentation. + 'name':'Basic', + ^|
    conventionpyozwman.ozwsh_widgets 11980Wrong continued indentation. + 'help':'Basic values management', + ^|
    conventionpyozwman.ozwsh_widgets 11990Wrong continued indentation. + 'widget_box': self.widget_box + ^|
    conventionpyozwman.ozwsh_widgets 12000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12020Wrong continued indentation. + 'name':'Config', + ^ |
    conventionpyozwman.ozwsh_widgets 12030Wrong continued indentation. + 'help':'Config values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12040Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12050Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12070Wrong continued indentation. + 'name':'System', + ^ |
    conventionpyozwman.ozwsh_widgets 12080Wrong continued indentation. + 'help':'System values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12090Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12100Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12120Wrong continued indentation. + 'name':'All', + |^
    conventionpyozwman.ozwsh_widgets 12130Wrong continued indentation. + 'help':'All values management', + |^
    conventionpyozwman.ozwsh_widgets 12140Wrong continued indentation. + 'widget_box': self.widget_box + |^
    conventionpyozwman.ozwsh_widgets 12150Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12160No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 12560No space allowed before : + for cmd in values : + ^
    conventionpyozwman.ozwsh_widgets 12570Line too long (148/140)
    conventionpyozwman.ozwsh_widgets 12570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % (self.window.network.nodes[self.node_id].get_command_class_as_string(cmd)), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 12840No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 13080No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13150No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 13160Exactly one space required after comma + self.window.status_bar.update(status='Value %s added to scene %s' % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 13180No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13330No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13440No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13450Exactly one space required around assignment + values[param].data=newval + ^
    conventionpyozwman.ozwsh_widgets 13480No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13510No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13660No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13700No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 13720No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 13740No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13750Exactly one space required after comma + self.window.log.info("poll %s to %s" %(param,newval)) + ^
    conventionpyozwman.ozwsh_widgets 13780No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13800Exactly one space required after comma + self.window.status_bar.update(status='Value %s polled to %s' % (param,value)) + ^
    conventionpyozwman.ozwsh_widgets 13820No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14000No space allowed before bracket +class ValuesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 14020No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False, polled=False): + ^
    conventionpyozwman.ozwsh_widgets 14050No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 14070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14150Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 14160Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14170Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14190No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 14220No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 14260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14280Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14290Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14300Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14310Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14350No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 14570No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 14580Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 14590Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 14600Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 14610Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14650Wrong continued indentation. + 'name':'switches', + | ^
    conventionpyozwman.ozwsh_widgets 14660Wrong continued indentation. + 'help':'All switches on the network', + | ^
    conventionpyozwman.ozwsh_widgets 14670Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 14680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14690No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 15010No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 15030No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 15040Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 15040No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15040Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15290No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15480Exactly one space required after comma + self.window.log.info("SwitchesTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 15530No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 15540Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15580No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 15610Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15630No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15660No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15860No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 15870Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 15880Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 15890Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 15900Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15940Wrong continued indentation. + 'name':'dimmers', + | ^
    conventionpyozwman.ozwsh_widgets 15950Wrong continued indentation. + 'help':'All dimmers on the network', + | ^
    conventionpyozwman.ozwsh_widgets 15960Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 15970Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15980No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 16310No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 16330No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 16340Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 16340No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16340Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16590No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16820No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 16830Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16870No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 16890No space allowed before : + if not values[switch].is_polled : + ^
    conventionpyozwman.ozwsh_widgets 16910Exactly one space required after comma + self.window.network.nodes[node].set_dimmer(switch,newval) + ^
    conventionpyozwman.ozwsh_widgets 16920Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16940No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 16970No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 17010No space allowed before bracket +class SwitchesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 17030No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All'): + ^
    conventionpyozwman.ozwsh_widgets 17100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17120Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 17130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 17190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 17230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17240Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17250Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17310No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 17530No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 17540Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 17550Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 17560Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 17570Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17610Wrong continued indentation. + 'name':'sensors', + | ^
    conventionpyozwman.ozwsh_widgets 17620Wrong continued indentation. + 'help':'All sensors on the network', + | ^
    conventionpyozwman.ozwsh_widgets 17630Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 17640Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17650No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 17980No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 18000No space allowed before : + if len(sensors) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 18010Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 18010No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18010Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18270No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 18350No space allowed before bracket +class SensorsItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 18370No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', units="", polled=0): + ^
    conventionpyozwman.ozwsh_widgets 18440Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18450Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18460Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18470Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 18480Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % units, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18510No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 18540No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 18580Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18590Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18600Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18610Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Units", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18670No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 18900No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 18910Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 18920Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 18930Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 18940Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 18990Wrong continued indentation. + 'name':'scene', + ^ |
    conventionpyozwman.ozwsh_widgets 19000Wrong continued indentation. + 'help':'Scene management', + ^ |
    conventionpyozwman.ozwsh_widgets 19010Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 19050No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 19060Exactly one space required after comma + parent.add_child("scene",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 19190No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 19460No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19710No space allowed before : + if not ok : + ^
    warningpyozwman.ozwsh_widgets 19750Bad indentation. Found 20 spaces, expected 16
    warningpyozwman.ozwsh_widgets 19760Bad indentation. Found 20 spaces, expected 16
    conventionpyozwman.ozwsh_widgets 19770No space allowed before : + if self.window.network.get_scenes()[self.key].remove_value(valueid) : + ^
    conventionpyozwman.ozwsh_widgets 19800No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19950Exactly one space required after comma + self.window.log.info("SceneTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 20000No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 20010Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 20040No space allowed before : + if switch in scene.get_values() : + ^
    conventionpyozwman.ozwsh_widgets 20130No space allowed before : + if new_val != None : + ^
    conventionpyozwman.ozwsh_widgets 20140No space allowed before : + if scene.set_value(switch, new_val) : + ^
    conventionpyozwman.ozwsh_widgets 20170No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20200No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20230No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20370No space allowed before bracket +class SceneItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 20390No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False): + ^
    conventionpyozwman.ozwsh_widgets 20420No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 20440No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20500Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20510Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 20520Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20530Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20550No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 20580No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 20620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20640Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20650Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20660Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20700No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 20960No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 20970Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 20980Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 20990Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 21000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21040Wrong continued indentation. + 'name':'scenes', + | ^
    conventionpyozwman.ozwsh_widgets 21050Wrong continued indentation. + 'help':'Scenes management', + | ^
    conventionpyozwman.ozwsh_widgets 21060Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 21070Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21080No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 21390No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21510No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 21570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21600Exactly one space required around assignment + self.childrens['scene']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 21620No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21670Exactly one space required around comparison + if self.window.network.create_scene(value)&gt;0: + ^
    conventionpyozwman.ozwsh_widgets 21700No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21750No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21820No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21900No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21970No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21990No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22020No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22060No space allowed before bracket +class ScenesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 22080No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 22140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 22160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 22190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 22230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'scene_header'), + | ^
    conventionpyozwman.ozwsh_widgets 22270No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 10Too many lines in module (2231/1000)
    conventionpyozwman.ozwsh_widgetsOldestTree500Missing class docstring
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many instance attributes (12/7)
    warningpyozwman.ozwsh_widgetsOldestTree.__init__6220Unused variable 'oldfocus'
    conventionpyozwman.ozwsh_widgetsOldestTree.add_child654Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree._get_at_pos704Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_nodeid764Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_id794Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.get_id8013Unused variable 'pos'
    conventionpyozwman.ozwsh_widgetsOldestTree.get_focus_entry864Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.set_focus894Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_first1014Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_last1044Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.read_lines1074Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_directories1184Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_help1284Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.refresh1394Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected1444Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected14612Invalid variable name "x"
    conventionpyozwman.ozwsh_widgetsOldestTree.ls1664Invalid method name "ls"
    warningpyozwman.ozwsh_widgetsOldestTree.ls16617Unused argument 'opts'
    conventionpyozwman.ozwsh_widgetsOldestTree.cd1724Invalid method name "cd"
    conventionpyozwman.ozwsh_widgetsOldestTree.set2124Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.set21218Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.set21225Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.poll2164Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.poll21619Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.poll21626Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.add2204Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.add22018Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.add22025Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.remove2244Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.remove22421Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.remove22428Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.reset2284Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.reset22820Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.create2324Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.create23221Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.delete2364Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.delete23621Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.activate2404Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.activate24023Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.send2444Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.send24419Unused argument 'value'
    warningpyozwman.ozwsh_widgetsOldestTree.path2108Attribute '_path' defined outside __init__
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many public methods (30/20)
    warningpyozwman.ozwsh_widgetsStatBox.__init__2524__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsStatBox.__init__2578Instance of 'StatBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsStatTree2600Missing class docstring
    refactorpyozwman.ozwsh_widgetsStatTree.read_lines2784Too many statements (54/50)
    warningpyozwman.ozwsh_widgetsGroupsBox.__init__3614__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsGroupsBox.__init__3668Instance of 'GroupsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsGroupsTree3680Missing class docstring
    refactorpyozwman.ozwsh_widgetsGroupsTree3680Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted3994Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted39938Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready4044Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready40435Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_node_update4104Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41042Unused argument 'node'
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41033Unused argument 'network'
    warningpyozwman.ozwsh_widgetsGroupsTree.add4628No exception type(s) specified
    warningpyozwman.ozwsh_widgetsGroupsTree.remove4778No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__4958Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsAssociationItem4920Missing class docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__49424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__4944__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__5028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsAssociationItem.__init__5038Instance of 'AssociationItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsAssociationItem.get_header5054Missing method docstring
    conventionpyozwman.ozwsh_widgetsAssociationItem.keypress5164Missing method docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.keypress51623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsAssociationItem.keypress5164Method could be a function
    conventionpyozwman.ozwsh_widgetsRootTree5190Missing class docstring
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_ready5394Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_ready53935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_resetted5444Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_resetted54438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5728Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootDir5690Missing class docstring
    warningpyozwman.ozwsh_widgetsRootDir.__init__57144Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsRootDir.__init__57124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootDir.__init__5714__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5808Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootDir.__init__5818Instance of 'RootDir' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootDir.keypress5864Missing method docstring
    warningpyozwman.ozwsh_widgetsRootDir.keypress58623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootDir.keypress5864Method could be a function
    conventionpyozwman.ozwsh_widgetsRootItem.__init__5928Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootItem5890Missing class docstring
    warningpyozwman.ozwsh_widgetsRootItem.__init__59124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootItem.__init__5914__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootItem.__init__6028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootItem.__init__6038Instance of 'RootItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootItem.get_header6054Missing method docstring
    conventionpyozwman.ozwsh_widgetsRootItem.keypress6194Missing method docstring
    warningpyozwman.ozwsh_widgetsRootItem.keypress61923Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootItem.keypress6194Method could be a function
    warningpyozwman.ozwsh_widgetsRootBox.__init__6264__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsRootBox.__init__6318Instance of 'RootBox' has no '__super' member
    warningpyozwman.ozwsh_widgetsNodesBox.__init__6374__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodesBox.__init__6428Instance of 'NodesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesTree6440Missing class docstring
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted6714Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted67138Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_ready6764Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_ready67635Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_node_update6884Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68842Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68833Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodesTree.exist7228No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.cd74212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.send74916Unused variable 'cmd'
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7858Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsNodesItem7820Missing class docstring
    warningpyozwman.ozwsh_widgetsNodesItem.__init__78424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsNodesItem.__init__7844__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7968Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsNodesItem.__init__7978Instance of 'NodesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesItem.get_header7994Missing method docstring
    conventionpyozwman.ozwsh_widgetsNodesItem.keypress8144Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesItem.keypress81423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsNodesItem.keypress8144Method could be a function
    warningpyozwman.ozwsh_widgetsNodeBox.__init__8214__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodeBox.__init__8268Instance of 'NodeBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodeTree8290Missing class docstring
    refactorpyozwman.ozwsh_widgetsNodeTree8290Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted8564Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted85638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_ready8614Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_ready86135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_node_update8674Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodeTree.read_lines8968Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsControllerBox.__init__9594__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsControllerBox.__init__9648Instance of 'ControllerBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsControllerTree9670Missing class docstring
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted10044Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted100438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_ready10094Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_ready100935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_node_update10174Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsControllerTree.send105912No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send107312No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send108712No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send110112No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send105216Unused variable 'cmd'
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many return statements (19/6)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many branches (22/12)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many statements (57/50)
    warningpyozwman.ozwsh_widgetsControllerTree.read_lines11318Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsValuesBox.__init__11664__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsValuesBox.__init__11718Instance of 'ValuesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesTree11740Missing class docstring
    refactorpyozwman.ozwsh_widgetsValuesTree11740Too many instance attributes (13/7)
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_ready12304Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_ready123035Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted12364Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted123638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_value_update12414Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124143Unused argument 'node'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124134Unused argument 'network'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124149Unused argument 'value'
    warningpyozwman.ozwsh_widgetsValuesTree.add12998No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.add13028Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.add130616Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.add130716Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.set13268No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.set132712Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.set133120Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.set133220Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll13598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136012Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136420Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.poll136520Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll137212No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14038Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsValuesItem14000Missing class docstring
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140241Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140261Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140224Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__14024__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14198Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsValuesItem.__init__14208Instance of 'ValuesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesItem.get_header14224Missing method docstring
    conventionpyozwman.ozwsh_widgetsValuesItem.keypress14384Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesItem.keypress143823Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsValuesItem.keypress14384Method could be a function
    warningpyozwman.ozwsh_widgetsSwitchesBox.__init__14454__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSwitchesBox.__init__14508Instance of 'SwitchesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesTree14520Missing class docstring
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted14774Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted147738Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready14824Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready148235Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update14864Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update14894Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree.set15428No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set15468Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set155116Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSwitchesTree.set155216Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsDimmersBox.__init__15744__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsDimmersBox.__init__15798Instance of 'DimmersBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsDimmersTree15810Missing class docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_resetted16064Missing method docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready16114Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready161135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_value_update16164Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_node_update16194Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree.set16728No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsDimmersTree.set16768Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsDimmersTree.set168016Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsDimmersTree.set168116Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17048Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSwitchesItem17010Missing class docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170341Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170361Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170324Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__17034__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSwitchesItem.__init__17178Instance of 'SwitchesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesItem.get_header17194Missing method docstring
    conventionpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.keypress173423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Method could be a function
    warningpyozwman.ozwsh_widgetsSensorsBox.__init__17414__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSensorsBox.__init__17468Instance of 'SensorsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsTree17480Missing class docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_resetted17734Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready17784Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready177835Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_value_update17834Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178343Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178334Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178349Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_node_update17864Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178642Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178633Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18388Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSensorsItem18350Missing class docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183741Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183761Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183724Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__18374__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18518Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSensorsItem.__init__18528Instance of 'SensorsItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsItem.get_header18544Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsItem.keypress18704Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.keypress187023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSensorsItem.keypress18704Method could be a function
    warningpyozwman.ozwsh_widgetsSceneBox.__init__18774__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSceneBox.__init__18828Instance of 'SceneBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneTree18850Missing class docstring
    refactorpyozwman.ozwsh_widgetsSceneTree18850Too many instance attributes (8/7)
    warningpyozwman.ozwsh_widgetsSceneTree.delete19598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196012Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197412No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196924Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197024Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsSceneTree.delete196321Unused variable 'switch'
    warningpyozwman.ozwsh_widgetsSceneTree.set19898No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.set19938Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSceneTree.set199816Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.set199916Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20408Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSceneItem20370Missing class docstring
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203941Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203961Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203924Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__20394__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20558Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSceneItem.__init__20568Instance of 'SceneItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneItem.get_header20584Missing method docstring
    conventionpyozwman.ozwsh_widgetsSceneItem.keypress20734Missing method docstring
    warningpyozwman.ozwsh_widgetsSceneItem.keypress207323Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSceneItem.keypress20734Method could be a function
    warningpyozwman.ozwsh_widgetsScenesBox.__init__20814__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsScenesBox.__init__20868Instance of 'ScenesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesTree20880Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesTree.exist21428No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.cd216212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.delete21778No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.activate21928No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22098Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsScenesItem22060Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesItem.__init__220824Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsScenesItem.__init__22084__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsScenesItem.__init__22178Instance of 'ScenesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesItem.get_header22194Missing method docstring
    conventionpyozwman.ozwsh_widgetsScenesItem.keypress22304Missing method docstring
    warningpyozwman.ozwsh_widgetsScenesItem.keypress223023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsScenesItem.keypress22304Method could be a function
    warningpyozwman.ozwsh_widgets 350Unused select imported from select
    warningpyozwman.ozwsh_widgets 360Unused import sys
    warningpyozwman.ozwsh_widgets 370Unused import os
    warningpyozwman.ozwsh_widgets 390Unused Screen imported from urwid.raw_display
    warningpyozwman.ozwsh_widgets 400Unused format_exc imported from traceback
    warningpyozwman.ozwsh_widgets 410Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_widgets 420Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_widgets 430Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_widgets 440Unused ZWaveController imported from openzwave.controller
    warningpyozwman.ozwsh_widgets 460Unused ZWaveOption imported from openzwave.option
    warningpyozwman.ozwsh_widgets 470Unused All imported from louie
    warningpyozwman.ozwsh_widgets 480Unused import logging
    conventionpyozwman.ozwsh_main 1720Wrong continued indentation. + ("keys", "dark blue", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1730Wrong continued indentation. + ("message", "light cyan", "dark green"), + ^ |
    conventionpyozwman.ozwsh_main 1740Wrong continued indentation. + ("linenr", "light blue", "dark cyan"), + ^ |
    conventionpyozwman.ozwsh_main 1750Wrong continued indentation. + ("input", "light gray", "black"), + ^ |
    conventionpyozwman.ozwsh_main 1760Wrong continued indentation. + ("input2", "dark red", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1770Wrong continued indentation. + ("focus", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1780Wrong continued indentation. + ("dialog", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1790Wrong continued indentation. + ("file", "light green", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1800Wrong continued indentation. + ("errortxt", "dark red", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1810Wrong continued indentation. + ("selectedfile", "yellow", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1820Wrong continued indentation. + ("selectedfocus", "yellow", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1830Wrong continued indentation. + ("dir", "light gray", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1840Wrong continued indentation. + ("fileedit", "light green", "dark red"), + ^ |
    conventionpyozwman.ozwsh_main 1850Wrong continued indentation. + ('edit', 'yellow', 'dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1860Wrong continued indentation. + ('body','default', 'default'), + ^ |
    conventionpyozwman.ozwsh_main 1860Exactly one space required after comma + ('body','default', 'default'), + ^
    conventionpyozwman.ozwsh_main 1870Wrong continued indentation. + ('foot','dark cyan', 'dark blue', 'bold'), + ^ |
    conventionpyozwman.ozwsh_main 1870Exactly one space required after comma + ('foot','dark cyan', 'dark blue', 'bold'), + ^
    conventionpyozwman.ozwsh_main 1880Wrong continued indentation. + ('shadow','white','black'), + ^ |
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1890Wrong continued indentation. + ('border','black','dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1900Wrong continued indentation. + ('error','black','dark red'), + ^ |
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1910Wrong continued indentation. + ('FxKey','light cyan', 'dark blue', 'underline')] + ^ |
    conventionpyozwman.ozwsh_main 1910Exactly one space required after comma + ('FxKey','light cyan', 'dark blue', 'underline')] + ^
    conventionpyozwman.ozwsh_main 2340Exactly one space required after comma + def active_box(self,value): + ^
    conventionpyozwman.ozwsh_main 2640No space allowed before : + if command.startswith('ls') : + ^
    conventionpyozwman.ozwsh_main 2650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2660Exactly one space required after comma + cmd,options = command.split(' ') + ^
    conventionpyozwman.ozwsh_main 2730No space allowed before : + elif command.startswith('exit') : + ^
    conventionpyozwman.ozwsh_main 2750No space allowed before : + elif command.startswith('cd') : + ^
    conventionpyozwman.ozwsh_main 2760No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2870No space allowed before : + elif path == "/" : + ^
    conventionpyozwman.ozwsh_main 2960No space allowed before : + elif command.startswith('send') : + ^
    conventionpyozwman.ozwsh_main 2970No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3030No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3100No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3120No space allowed before : + elif command.startswith('create') : + ^
    conventionpyozwman.ozwsh_main 3130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3190No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3260No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3280No space allowed before : + elif command.startswith('delete') : + ^
    conventionpyozwman.ozwsh_main 3290No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3350No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3420No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3440No space allowed before : + elif command.startswith('activate') : + ^
    conventionpyozwman.ozwsh_main 3450No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3510No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3580No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3600No space allowed before : + elif command.startswith('set') : + ^
    conventionpyozwman.ozwsh_main 3610No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3630No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3680No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3730No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 3810No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3830No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3860No space allowed before : + elif command.startswith('poll') : + ^
    conventionpyozwman.ozwsh_main 3870No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3890No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3940No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3990No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4090No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4120No space allowed before : + elif command.startswith('add') : + ^
    conventionpyozwman.ozwsh_main 4130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4150No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4200No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4250No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4330No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4350No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4380No space allowed before : + elif command.startswith('remove') : + ^
    conventionpyozwman.ozwsh_main 4390No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4410No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4460No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4510No space allowed before : + if len(value) == 0 or to != "from" : + ^
    conventionpyozwman.ozwsh_main 4590No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4610No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4640No space allowed before : + elif command.startswith('reset') : + ^
    conventionpyozwman.ozwsh_main 4650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4680No space allowed before : + if len(state) == 0 : + ^
    conventionpyozwman.ozwsh_main 4750No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 5080No space allowed around keyword argument assignment + kvals = False) + ^
    conventionpyozwman.ozwsh_mainStatusBar950Missing class docstring
    conventionpyozwman.ozwsh_mainStatusBar.update1104Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.get_command1164Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.set_command1194Missing method docstring
    conventionpyozwman.ozwsh_mainHeaderBar1220Missing class docstring
    conventionpyozwman.ozwsh_mainHeaderBar.update1354Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow1390Missing class docstring
    refactorpyozwman.ozwsh_mainMainWindow1390Too many instance attributes (30/7)
    conventionpyozwman.ozwsh_mainMainWindow._define_log1534Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._define_screen1704Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow.exit2538Instance of 'ZWaveOption' has no 'destroy' member
    warningpyozwman.ozwsh_mainMainWindow.execute28516Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow.execute29116Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow.execute37216Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute39816Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute42416Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute45016Invalid variable name "to"
    warningpyozwman.ozwsh_mainMainWindow.execute26616Unused variable 'cmd'
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many return statements (48/6)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many branches (72/12)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many statements (171/50)
    conventionpyozwman.ozwsh_mainMainWindow._unhandled_input4824Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input49312Specify string format arguments as logging function parameters
    errorpyozwman.ozwsh_mainMainWindow._unhandled_input49812Instance of 'MainWindow' has no 'refresh_nodes' member
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input50112Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._start_network5034Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow._start_network50523Unexpected keyword argument 'kvals' in constructor call
    errorpyozwman.ozwsh_mainMainWindow._start_network5148Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie5184Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_started5254Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5268Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_resetted5324Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted53238Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_stopped5394Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped53937Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_awaked5454Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_ready5514Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5528Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5538Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5558Unused variable 'wait_for_network'
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Invalid method name "_disconnect_louie_node_and_value"
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie_node_and_value5674Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_node_update5744Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57442Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57433Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_value_update5774Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57743Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57734Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57749Unused argument 'value'
    conventionpyozwman.ozwsh_mainMainWindow._louie_group5804Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_group58036Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_group58027Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_ctrl_message5834Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58350Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58359Unused argument 'controller'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58334Unused argument 'state'
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48716Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48916Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow.active_box2418Attribute '_active_box' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5288Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted5348Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped5418Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_awaked5478Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5548Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_main 360Unused select imported from select
    warningpyozwman.ozwsh_main 370Unused import sys
    warningpyozwman.ozwsh_main 380Unused import os
    warningpyozwman.ozwsh_main 440Unused format_exc imported from traceback
    warningpyozwman.ozwsh_main 470Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_main 480Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_main 490Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_main 530Unused OldestTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootDir imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 550Unused ControllerTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 560Unused NodeTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 600Unused DimmersTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused GroupsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused AssociationItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 650Unused StatTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 670Unused All imported from louie
    conventionpyozwweb 10Missing module docstring
    warningpyozwweb 260No exception type(s) specified
    warningpyozwweb.shell 360Wildcard import flask
    warningpyozwweb.shell 370Wildcard import app
    warningpyozwweb.shell 370Relative import 'app', should be 'pyozwweb.app'
    warningpyozwweb.shell 330Unused import readline
    warningpyozwweb.shell 340Unused pprint imported from pprint
    warningpyozwweb.shell 360Unused import render_template_string from wildcard import
    warningpyozwweb.shell 360Unused import Flask from wildcard import
    warningpyozwweb.shell 360Unused import request from wildcard import
    warningpyozwweb.shell 360Unused import get_flashed_messages from wildcard import
    warningpyozwweb.shell 360Unused import Blueprint from wildcard import
    warningpyozwweb.shell 360Unused import send_from_directory from wildcard import
    warningpyozwweb.shell 360Unused import session from wildcard import
    warningpyozwweb.shell 360Unused import Module from wildcard import
    warningpyozwweb.shell 360Unused import escape from wildcard import
    warningpyozwweb.shell 360Unused import Config from wildcard import
    warningpyozwweb.shell 360Unused import render_template from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_pushed from wildcard import
    warningpyozwweb.shell 360Unused import redirect from wildcard import
    warningpyozwweb.shell 360Unused import request_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import after_this_request from wildcard import
    warningpyozwweb.shell 360Unused import current_app from wildcard import
    warningpyozwweb.shell 360Unused import json from wildcard import
    warningpyozwweb.shell 360Unused import make_response from wildcard import
    warningpyozwweb.shell 360Unused import Response from wildcard import
    warningpyozwweb.shell 360Unused import request_started from wildcard import
    warningpyozwweb.shell 360Unused import has_app_context from wildcard import
    warningpyozwweb.shell 360Unused import send_file from wildcard import
    warningpyozwweb.shell 360Unused import get_template_attribute from wildcard import
    warningpyozwweb.shell 360Unused import Session from wildcard import
    warningpyozwweb.shell 360Unused import Markup from wildcard import
    warningpyozwweb.shell 360Unused import copy_current_request_context from wildcard import
    warningpyozwweb.shell 360Unused import Request from wildcard import
    warningpyozwweb.shell 360Unused import safe_join from wildcard import
    warningpyozwweb.shell 360Unused import flash from wildcard import
    warningpyozwweb.shell 360Unused import stream_with_context from wildcard import
    warningpyozwweb.shell 360Unused import template_rendered from wildcard import
    warningpyozwweb.shell 360Unused import got_request_exception from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import url_for from wildcard import
    warningpyozwweb.shell 360Unused import g from wildcard import
    warningpyozwweb.shell 360Unused import has_request_context from wildcard import
    warningpyozwweb.shell 360Unused import jsonify from wildcard import
    warningpyozwweb.shell 360Unused import json_available from wildcard import
    warningpyozwweb.shell 360Unused import message_flashed from wildcard import
    warningpyozwweb.shell 360Unused import abort from wildcard import
    warningpyozwweb.shell 360Unused import request_finished from wildcard import
    warningpyozwweb.shell 360Unused import signals_available from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_popped from wildcard import
    warningpyozwweb.shell 370Unused import leave_room from wildcard import
    warningpyozwweb.shell 370Unused import SocketIO from wildcard import
    warningpyozwweb.shell 370Unused import app from wildcard import
    warningpyozwweb.shell 370Unused import run_app from wildcard import
    warningpyozwweb.shell 370Unused import start_listener from wildcard import
    warningpyozwweb.shell 370Unused import create_app from wildcard import
    warningpyozwweb.shell 370Unused import NullHandler from wildcard import
    warningpyozwweb.shell 370Unused import disconnect from wildcard import
    warningpyozwweb.shell 370Unused import monkey from wildcard import
    warningpyozwweb.shell 370Unused import stop_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import stop_all from wildcard import
    warningpyozwweb.shell 370Unused import fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import time from wildcard import
    warningpyozwweb.shell 370Unused import close_room from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveNetwork from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveOption from wildcard import
    warningpyozwweb.shell 370Unused import sys from wildcard import
    warningpyozwweb.shell 370Unused import stop_listener from wildcard import
    warningpyozwweb.shell 370Unused import logging from wildcard import
    warningpyozwweb.shell 370Unused import install_secret_key from wildcard import
    warningpyozwweb.shell 370Unused import dispatcher from wildcard import
    warningpyozwweb.shell 370Unused import join_room from wildcard import
    warningpyozwweb.shell 370Unused import All from wildcard import
    warningpyozwweb.shell 370Unused import socketio from wildcard import
    warningpyozwweb.shell 370Unused import signal from wildcard import
    warningpyozwweb.shell 370Unused import Fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import threading from wildcard import
    warningpyozwweb.shell 370Unused import start_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import emit from wildcard import
    conventionpyozwweb.reloadmain330Missing function docstring
    conventionpyozwweb.runmain370Missing function docstring
    conventionpyozwweb.config 410Invalid constant name "_basedir"
    conventionpyozwweb.configConfig430Missing class docstring
    conventionpyozwweb.configProductionConfig730Missing class docstring
    conventionpyozwweb.configRunConfig770Missing class docstring
    conventionpyozwweb.configReloadConfig820Missing class docstring
    conventionpyozwweb.configTestingConfig880Missing class docstring
    conventionpyozwweb.app.listener 680No space allowed after bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 680No space allowed before bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 1200Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1210Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1240Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1250Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1260Line too long (168/140)
    conventionpyozwweb.app.listener 1430Exactly one space required around assignment + data=node.to_dict() + ^
    conventionpyozwweb.app.listener 1450Wrong continued indentation. + {'data': data}, + ^ |
    conventionpyozwweb.app.listener 1460Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1850Line too long (146/140)
    conventionpyozwweb.app.listener 2240No space allowed after bracket + self._stopevent.set( ) + ^
    conventionpyozwweb.app.listener 2240No space allowed before bracket + self._stopevent.set( ) + ^
    fatalpyozwweb.app.listener 344Unable to import 'pydispatch'
    conventionpyozwweb.app.listener 590Invalid constant name "listener"
    warningpyozwweb.app.listenerListenerThread._louie_network11712Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_network11712Reimport 'request' (imported line 47)
    errorpyozwweb.app.listenerListenerThread._louie_network12029Undefined variable 'data_room_network'
    errorpyozwweb.app.listenerListenerThread._louie_network12429Undefined variable 'data_room_network'
    warningpyozwweb.app.listenerListenerThread._louie_network12616Specify string format arguments as logging function parameters
    warningpyozwweb.app.listenerListenerThread._louie_network11712Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_node14026Unused argument 'network'
    warningpyozwweb.app.listenerListenerThread._louie_values16512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Unused variable 'request'
    warningpyozwweb.app.listenerstart_listener2304Using the global statement
    conventionpyozwweb.app.listenerstart_listener2304Invalid constant name "listener"
    warningpyozwweb.app.listenerstop_listener2394Using the global statement
    conventionpyozwweb.app.listenerstop_listener2394Invalid constant name "listener"
    warningpyozwweb.app.listener 310Unused import os
    warningpyozwweb.app.listener 370Unused import time
    warningpyozwweb.app.listener 410Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.listener 420Unused Singleton imported from openzwave.singleton
    warningpyozwweb.app.listener 450Unused All imported from louie
    warningpyozwweb.app.listener 470Unused Flask imported from flask
    warningpyozwweb.app.listener 470Unused request imported from flask
    warningpyozwweb.app.listener 470Unused session imported from flask
    warningpyozwweb.app.listener 470Unused render_template imported from flask
    warningpyozwweb.app.viewsmap960Redefining built-in 'map'
    errorpyozwweb.app.views 460No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.views 460Unable to import 'flask.ext.socketio'
    warningpyozwweb.app.views 580Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app.viewsnot_found710Missing function docstring
    warningpyozwweb.app.viewsnot_found7114Unused argument 'error'
    conventionpyozwweb.app.viewshome750Missing function docstring
    conventionpyozwweb.app.viewsnode800Missing function docstring
    conventionpyozwweb.app.viewsvalues840Missing function docstring
    conventionpyozwweb.app.viewscontroller880Missing function docstring
    conventionpyozwweb.app.viewsdebug920Missing function docstring
    conventionpyozwweb.app.viewsmap960Missing function docstring
    conventionpyozwweb.app.viewsscenes1000Missing function docstring
    conventionpyozwweb.app.viewschat1040Missing function docstring
    warningpyozwweb.app.views 410Unused import sys
    warningpyozwweb.app.views 410Unused import os
    warningpyozwweb.app.views 420Unused import time
    warningpyozwweb.app.views 430Unused Thread imported from threading
    warningpyozwweb.app.views 450Unused Flask imported from flask
    warningpyozwweb.app.views 450Unused session imported from flask
    warningpyozwweb.app.views 450Unused current_app imported from flask
    warningpyozwweb.app.views 450Unused request imported from flask
    warningpyozwweb.app.views 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused disconnect imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused emit imported from flask.ext.socketio
    warningpyozwweb.app.views 480Unused import libopenzwave
    warningpyozwweb.app.views 490Unused import openzwave
    warningpyozwweb.app.views 500Unused ZWaveNode imported from openzwave.node
    warningpyozwweb.app.views 510Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.views 520Unused ZWaveScene imported from openzwave.scene
    warningpyozwweb.app.views 530Unused ZWaveController imported from openzwave.controller
    warningpyozwweb.app.views 540Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.views 550Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.views 560Unused dispatcher imported from louie
    warningpyozwweb.app.views 560Unused All imported from louie
    warningpyozwweb.app.views 570Unused socketio imported from pyozwweb.app
    warningpyozwweb.app.views 58
    erroropenzwave.commandZWaveNodeSecurity.set_protection65912Instance of 'ZWaveNodeSecurity' has no 'values' member
    erroropenzwave.commandZWaveNodeSecurity.get_protection_item67519Instance of 'ZWaveNodeSecurity' has no 'values' member
    erroropenzwave.commandZWaveNodeSecurity.get_protection_items69019Instance of 'ZWaveNodeSecurity' has no 'values' member
    conventionopenzwave.network 1910Unused listener imported from listener
    conventionpyozwweb.app.__init__ 932240Exactly one space required after comma + socketio.run(app, use_reloader=app.config['RELOADER'],host=app.config['HOST'], port=app.config['PORT']) + ^
    conventionpyozwweb.app.__init__ 1832280Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1862310Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1873560Unnecessary parens after u'print' keyword
    errorpyozwweb.app 43
    conventionopenzwave.network 5970No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app 430Unable to import 'flask.ext.socketio'
    warningpyozwweb.app 67
    conventionopenzwave.network 5990Exactly one space required around assignment + ret[ndid]=self._nodes[ndid].to_dict(extras=extras) + ^
    conventionopenzwave.network 6120Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app 696200Invalid constant name "fanstatic"
    conventionpyozwweb.app 707640Invalid constant name "app"
    conventionpyozwweb.app 718870Invalid constant name "socketio"
    conventionpyozwweb.apprun_app730Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Redefining name 'signal' from outer scope (line 65)
    conventionpyozwweb.apprun_app.signal_term_handler75Too many lines in module (1629/1000)
    fatalopenzwave.network 364Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Unused argument 'signal'
    warningpyozwweb.apprun_app.signal_term_handler7536Unused argument 'frame'
    warningpyozwweb.apprun_app83
    fatalopenzwave.network 374Using the global statement
    conventionpyozwweb.apprun_app834Invalid constant name "socketio"
    warningpyozwweb.apprun_app854Using the global statement
    conventionpyozwweb.apprun_app854Invalid constant name "app"
    warningpyozwweb.apprun_app874Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app924Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app7329Unused argument 'debug'
    conventionpyozwweb.appstop_all97
    conventionopenzwave.network 610Missing function docstring
    warningpyozwweb.appstop_all994Using global for 'app' but no assignment is done
    conventionpyozwweb.appstop_all994Invalid constant name "app"
    warningpyozwweb.appcreate_app1114Redefining name 'logging' from outer scope (line 55)
    warningpyozwweb.appcreate_app1034Redefining name 'monkey' from outer scope (line 35)
    refactoropenzwave.networkZWaveNetwork690Too many instance attributes (13/7)
    conventionpyozwweb.appcreate_app1020Missing function docstring
    warningpyozwweb.appcreate_app103openzwave.networkZWaveNetwork2784Reimport 'monkey' (imported line 35)
    warningpyozwweb.appcreate_app1084Using the global statement
    conventionpyozwweb.appcreate_app108openzwave.networkZWaveNetwork2824Invalid constant name "app"
    warningpyozwweb.appcreate_app1144Specify string format arguments as logging function parameters
    erroropenzwave.networkZWaveNetwork.__init__31424Module 'libopenzwave' has no 'PyManager' member
    conventionpyozwweb.appcreate_app1168Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1188Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1208Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1228Invalid variable name "ZWAVE_DEBUG"
    warningpyozwweb.appcreate_app1364Using the global statement
    conventionpyozwweb.appcreate_app1364Invalid constant name "fanstatic"openzwave.networkZWaveNetwork.__init__32933Invalid variable name "e"
    warningopenzwave.networkZWaveNetwork.__init__32716Unused variable 'data'
    warningpyozwweb.appcreate_app1384Using the global statement
    conventionpyozwweb.appcreate_app1384Invalid constant name "socketio"
    warningpyozwweb.appcreate_app1424Relative import 'views', should be 'pyozwweb.app.views'
    warningpyozwweb.appcreate_app1434Relative import 'socket', should be 'pyozwweb.app.socket'openzwave.networkZWaveNetwork.stop43612Redefining name 'sys' from outer scope (line 34)
    warningopenzwave.networkZWaveNetwork.stop40771Using possibly undefined loop variable 'i'
    warningpyozwweb.appcreate_app1424Unused variable 'views'
    warningpyozwweb.appcreate_app1434Unused variable 'chat'
    warningpyozwweb.appcreate_app1434Unused variable 'ozwave'openzwave.networkZWaveNetwork.stop4358No exception type(s) specified
    warningpyozwweb.appcreate_app1168Unused variable 'ZWAVE_DEBUG'openzwave.networkZWaveNetwork.stop43416Used * or ** magic
    warningpyozwweb.appstart_zwnetwork15020Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.appstart_zwnetwork1500Missing function docstring
    errorpyozwweb.appstart_zwnetwork1574Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwweb.appstop_zwnetwork1610Missing function docstringopenzwave.networkZWaveNetwork.stop43612Reimport 'sys' (imported line 34)
    refactoropenzwave.networkZWaveNetwork.stop3774Too many branches (17/12)
    warningpyozwweb.appinstall_secret_key17023Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.app.socket.ozwave 950Exactly one space required around assignment + done=False + ^openzwave.networkZWaveNetwork.home_id4574Arguments number differs from overridden method
    refactoropenzwave.networkZWaveNetwork.state_str5264Too many return statements (7/6)
    warningopenzwave.networkZWaveNetwork.nodes_to_dict5874Dangerous default value [] as argument
    warningopenzwave.networkZWaveNetwork.to_dict6024Dangerous default value [] as argument
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^openzwave.networkZWaveNetwork.heal6634Invalid argument name "upNodeRoute"
    warningopenzwave.networkZWaveNetwork.scenes_to_dict7544Dangerous default value [] as argument
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 1000Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1060No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1140No space allowed before : + try : + ^
    conventionpyozwweb.app.socket.ozwave 1230Exactly one space required around assignment + done=False + ^
    conventionpyozwweb.app.socket.ozwave 1240Exactly one space required after comma + keys = ['posx','posy'] + ^
    conventionpyozwweb.app.socket.ozwave 1280Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1400No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1710Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1720Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1790Wrong continued indentation. + {'data': data, + ^|
    conventionpyozwweb.app.socket.ozwave 1800Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1820Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1830Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1860Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 1880Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 1930No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2000Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2020Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2070No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2140Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2160Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2210No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2280Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2300Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2350No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2420Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2440Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2490No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2860No space allowed before : + if data['result'] == True : + ^
    conventionpyozwweb.app.socket.ozwave 2980Line too long (147/140)
    errorpyozwweb.app.socket.ozwave 480No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.ozwave 480Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.ozwaveecho_message720Missing function docstring
    conventionpyozwweb.app.socket.ozwavedisconnect_request790Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_connect870Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_network_event920Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_node_event1110Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_nodes_event1460Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_controller_event1540Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_command_event1610Missing function docstring
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many branches (38/12)
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many statements (120/50)
    conventionpyozwweb.app.socket.ozwaveecho_value_event2940Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_scenes_event3030Missing function docstring
    warningpyozwweb.app.socket.ozwave 430Unused import os
    warningpyozwweb.app.socket.ozwave 430Unused import sys
    warningpyozwweb.app.socket.ozwave 440Unused import time
    warningpyozwweb.app.socket.ozwave 450Unused Thread imported from threading
    warningpyozwweb.app.socket.ozwave 470Unused Flask imported from flask
    warningpyozwweb.app.socket.ozwave 470Unused render_template imported from flask
    warningpyozwweb.app.socket.ozwave 480Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 500Unused import libopenzwave
    warningpyozwweb.app.socket.ozwave 51openzwave.networkZWaveNetwork.set_poll_interval8724Invalid argument name "bIntervalBetweenPolls"
    warningopenzwave.networkZWaveNetwork.zwcallback98512Redefining name 'sys' from outer scope (line 34)
    warningopenzwave.networkZWaveNetwork.zwcallback9848No exception type(s) specified
    erroropenzwave.networkZWaveNetwork.zwcallback93916Instance of 'ZWaveNetwork' has no '_handleNodeReady' member
    warningopenzwave.networkZWaveNetwork.zwcallback98512Reimport 'sys' (imported line 34)
    refactoropenzwave.networkZWaveNetwork.zwcallback8934Too many branches (32/12)
    refactoropenzwave.networkZWaveNetwork.zwcallback8934Too many statements (69/50)
    warningopenzwave.networkZWaveNetwork._handle_driver_failed10038Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_failed10048Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_ready103912Redefining name 'sys' from outer scope (line 34)
    warningopenzwave.networkZWaveNetwork._handle_driver_ready10388No exception type(s) specified
    warningopenzwave.networkZWaveNetwork._handle_driver_ready102912Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_ready103212Used * or ** magic
    erroropenzwave.networkZWaveNetwork._handle_driver_ready103425Module 'libopenzwave' has no 'PyControllerState' member
    erroropenzwave.networkZWaveNetwork._handle_driver_ready103527Module 'libopenzwave' has no 'PyControllerState' member
    warningopenzwave.networkZWaveNetwork._handle_driver_ready103612Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_ready103912Reimport 'sys' (imported line 34)
    warningopenzwave.networkZWaveNetwork._handle_driver_reset106512Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_reset106712Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_removed108712Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_group11058Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node11218Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_added114212Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_scene_event11598Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_event11768Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_naming11918Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_new12048Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_protocol_info12208Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_removed124316Used * or ** magic
    conventionopenzwave.networkZWaveNetwork._handle_essential_node_queries_complete12494Invalid method name "_handle_essential_node_queries_complete"
    warningopenzwave.networkZWaveNetwork._handle_essential_node_queries_complete12618Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_queries_complete12808Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_all_nodes_queried12988Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_all_nodes_queried12998Used * or ** magic
    conventionopenzwave.networkZWaveNetwork._handle_all_nodes_queried_some_dead13014Invalid method name "_handle_all_nodes_queried_some_dead"
    warningopenzwave.networkZWaveNetwork._handle_all_nodes_queried_some_dead13158Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_all_nodes_queried_some_dead13168Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_awake_nodes_queried134212Redefining name 'sys' from outer scope (line 34)
    warningopenzwave.networkZWaveNetwork._handle_awake_nodes_queried13418No exception type(s) specified
    warningopenzwave.networkZWaveNetwork._handle_awake_nodes_queried133812Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_awake_nodes_queried133912Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_awake_nodes_queried134212Reimport 'sys' (imported line 34)
    warningopenzwave.networkZWaveNetwork._handle_polling_disabled13598Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_polling_enabled13748Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_create_button13888Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_delete_button14028Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_button_on14168Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_button_off14308Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_value14478Specify string format arguments as logging function parameters
    warningopenzwave.networkZWaveNetwork._handle_value14488Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_value_added14718Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_value_changed14968Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_value_refreshed15198Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_value_removed154412Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_notification15618Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_msg_complete15758Used * or ** magic
    warningopenzwave.networkZWaveNetwork.nodes63312Attribute '_nodes' defined outside __init__
    warningopenzwave.networkZWaveNetwork.nodes63512Attribute '_nodes' defined outside __init__
    refactoropenzwave.networkZWaveNetwork690Unused import openzwave
    warningpyozwweb.app.socket.ozwave 520Unused ZWaveNode imported from openzwave.node1621-1String statement has no effect
    warningpyozwweb.app.socket.ozwave 53330Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.socket.ozwave 540Unused ZWaveScene imported from openzwave.scene374Unused _thread imported as thread
    warningpyozwweb.app.socket.ozwave 550Unused ZWaveController imported from openzwave.controller404Unused import thread
    warningpyozwweb.app.socket.ozwave 56430Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.socket.ozwave 57440Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.socket.ozwave 58470Unused All imported from louie
    warningpyozwweb.app.socket.ozwave 58500Unused dispatcher imported from louie
    warningpyozwweb.app.socket.ozwave 59450Unused app imported from pyozwweb.app
    warningpyozwweb.app.socket 90460No exception type(s) specified
    warningopenzwave.value 5550Bad indentation. Found 16 spaces, expected 12
    conventionpyozwweb.app.socket.chat 1275560Unnecessary parens after u'print' keyword
    conventionopenzwave.value 5660Exactly one space required around assignment + ret[key]=vals[key] + ^
    errorpyozwweb.app.socket.chat 46420No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.chat 460Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.chattest_message610Missing function docstring
    conventionpyozwweb.app.socket.chattest_broadcast_message700Missing function docstring
    conventionpyozwweb.app.socket.chatjoin780Missing function docstring
    conventionpyozwweb.app.socket.chatleave870Missing function docstring
    conventionpyozwweb.app.socket.chatclose960Missing function docstring
    conventionpyozwweb.app.socket.chatsend_room_message1050Missing function docstring
    conventionpyozwweb.app.socket.chatdisconnect_request113refactoropenzwave.valueZWaveValue.data_items3094Too many return statements (10/6)
    warningopenzwave.valueZWaveValue.check_data36312No exception type(s) specified
    warningopenzwave.valueZWaveValue.check_data37312No exception type(s) specified
    warningopenzwave.valueZWaveValue.check_data37812No exception type(s) specified
    warningopenzwave.valueZWaveValue.check_data38812No exception type(s) specified
    refactoropenzwave.valueZWaveValue.check_data3384Too many branches (31/12)
    refactoropenzwave.valueZWaveValue.check_data3384Too many statements (61/50)
    warningopenzwave.valueZWaveValue.to_dict5444Dangerous default value [] as argument
    refactoropenzwave.valueZWaveValue470Missing function docstring
    conventionpyozwweb.app.socket.chattest_connect121openzwave.option 2750Missing function docstring
    conventionpyozwweb.app.socket.chattest_disconnect126
    erroropenzwave.option 330Missing function docstring
    warningpyozwweb.app.socket.chat
    conventionopenzwave.option 460Unused import sys
    warningpyozwweb.app.socket.chat 410Unused import os
    warningpyozwweb.app.socket.chat 420Unused import time
    warningpyozwweb.app.socket.chat 430Unused Thread imported from threading
    warningpyozwweb.app.socket.chat 450Unused Flask imported from flask
    warningpyozwweb.app.socket.chat 450Unused current_app imported from flask
    warningpyozwweb.app.socket.chat 450Unused render_template imported from flask
    warningpyozwweb.app.socket.chat 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.chat 480Unused app imported from pyozwweb.app
    refactoropenzwave.nodeZWaveNode490Interface not implemented
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.ozwave)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.chat)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.views)
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.listener:6 +==pyozwweb.app.views:17 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +from gevent import monkey +monkey.patch_all() + +import os +import sys +if sys.hexversion &gt;= 0x3000000: + from pydispatch import dispatcher +else: + from louie import dispatcher +import time + +from openzwave.network import ZWaveNetwork +from openzwave.controller import ZWaveController +from openzwave.option import ZWaveOption +from openzwave.singleton import Singleton +import threading +from threading import Thread +from louie import dispatcher, All + +from flask import Flask, render_template, session, request, current_app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logging.getLogger('pyozwweb').addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} + + ZWAVE_DEVICE = "/dev/ttyUSB0"
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os, sys +import time +from threading import Thread + +from flask import Flask, render_template, session, request, current_app +from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect + +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from louie import dispatcher, All +from pyozwweb.app import socketio, app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler):
    refactorpyozwweb.app.socket.chat 10Similar lines in 5 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os, sys +import time +from threading import Thread + +from flask import Flask, render_template, session, request, current_app +from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect + +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from louie import dispatcher, All +from pyozwweb.app import socketio, app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError:
    refactorpyozwweb.app.socket.chat 10Similar lines in 6 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True
    refactorpyozwweb.app.socket.chat 10Similar lines in 7 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' +
    refactorpyozwweb.app.socket.chat 10Similar lines in 8 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000
    refactorpyozwweb.app.socket.chat 10Similar lines in 9 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:'
    refactorpyozwweb.app.socket.chat 10Similar lines in 10 files +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False
    refactorpyozwweb.app.socket.chat 10Similar lines in 13 files +==openzwave:1 +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.__init__:65 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +==pyozwweb:1 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False
    refactorpyozwweb.app.socket.chat
    erroropenzwave.optionZWaveOption4918Module 'libopenzwave' has no 'PyOptions' member
    erroropenzwave.optionZWaveOption.__init__818Module 'libopenzwave' has no 'PyOptions' member
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files -==pyozwman.ozwsh_main:28 -==pyozwman.ozwsh_widgets:27 -__author__ = 'bibi21000' - -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -from select import select -import sys -import os -import urwid -from urwid.raw_display import Screenerroropenzwave.optionZWaveOption.set_log_file9315Instance of 'ZWaveOption' has no 'addOptionString' member
    refactorpyozwweb.app.socket.chaterroropenzwave.optionZWaveOption.set_logging10315Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_append_log_file11315Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_console_output12315Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_save_log_level14515Instance of 'ZWaveOption' has no 'addOptionInt' member
    erroropenzwave.optionZWaveOption.set_queue_log_level16715Instance of 'ZWaveOption' has no 'addOptionInt' member
    erroropenzwave.optionZWaveOption.set_dump_trigger_level18915Instance of 'ZWaveOption' has no 'addOptionInt' member
    erroropenzwave.optionZWaveOption.set_associate19915Instance of 'ZWaveOption' has no 'addOptionBool' member
    conventionopenzwave.optionZWaveOption.set_exclude2014Invalid argument name "commandClass"
    erroropenzwave.optionZWaveOption.set_exclude20915Instance of 'ZWaveOption' has no 'addOptionString' member
    conventionopenzwave.optionZWaveOption.set_include2114Invalid argument name "commandClass"
    erroropenzwave.optionZWaveOption.set_include21915Instance of 'ZWaveOption' has no 'addOptionString' member
    erroropenzwave.optionZWaveOption.set_notify_transactions22915Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_interface23915Instance of 'ZWaveOption' has no 'addOptionString' member
    erroropenzwave.optionZWaveOption.set_save_configuration24915Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_driver_max_attempts25915Instance of 'ZWaveOption' has no 'addOptionInt' member
    erroropenzwave.optionZWaveOption.set_poll_interval26915Instance of 'ZWaveOption' has no 'addOptionInt' member
    erroropenzwave.optionZWaveOption.set_interval_between_polls27915Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_suppress_value_refresh28915Instance of 'ZWaveOption' has no 'addOptionBool' member
    conventionpyozwman 711 0Exactly one space required around comparison - if pos &gt;= 0 and pos &lt; self.size and len(self.lines)&gt;0: - ^Similar lines in 9 files -==openzwave.command:34 -==openzwave.controller:42 -==openzwave.group:33 -==openzwave.network:52 -==openzwave.node:37 -==openzwave.object:31 -==openzwave.option:37 -==openzwave.scene:33 -==openzwave.value:33 -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - """NullHandler logger for python 2.6""" - def emit(self, record): - pass -logger = logging.getLogger('openzwave') -logger.addHandler(NullHandler()) -Missing module docstring
    refactorpyozwweb.app.socket.chatwarningpyozwman  126 0Similar lines in 2 files -==pyozwman.ozwsh_main:46 -==pyozwman.ozwsh_widgets:40 -from openzwave.node import ZWaveNode -from openzwave.value import ZWaveValue -from openzwave.scene import ZWaveScene -from openzwave.controller import ZWaveController -from openzwave.network import ZWaveNetwork -from openzwave.option import ZWaveOptionNo exception type(s) specified
    convention pyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat  156 0Similar lines in 2 files -==openzwave.network:25 -==openzwave.option:25 -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -import osNo space allowed before bracket + self.usage = ['ls : list directory', 'cd &lt;directory&gt; : change to directory &lt;directory&gt;', 'exit : quit the program' ] + ^
    refactorpyozwweb.app.socket.chatconventionpyozwman.ozwsh_widgets  8071 0Exactly one space required after comma - line,pos = self._get_at_pos(self.focus) - ^Similar lines in 2 files -==openzwave.network:616 -==openzwave.node:204 - if 'kvals' in extras and self.network.dbcon is not None: - vals = self.kvals - for key in vals.keys(): - ret[key]=vals[key] - return ret -Exactly one space required around comparison + if pos &gt;= 0 and pos &lt; self.size and len(self.lines)&gt;0: + ^
    refactorpyozwweb.app.socket.chatconventionpyozwman.ozwsh_widgets  180 0Similar lines in 4 files -==openzwave.group:25 -==openzwave.node:25 -==openzwave.scene:25 -==openzwave.value:25 -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -from openzwave.object import ZWaveObjectExactly one space required after comma + line,pos = self._get_at_pos(self.focus) + ^
    convention pyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat  131 0No space allowed before comma self.lines.append(urwid.Text("Help" , align='left')) ^
    refactor
    refactor   1 0Similar lines in 2 files @@ -27221,6 +40906,31 @@

    Messages

    except ImportError: pass
    refactorpyozwweb.app.socket.chat 10Similar lines in 12 files +==openzwave.command:25 +==openzwave.controller:26 +==openzwave.group:25 +==openzwave.network:25 +==openzwave.node:25 +==openzwave.object:25 +==openzwave.option:25 +==openzwave.scene:25 +==openzwave.singleton:25 +==openzwave.value:25 +==pyozwman.ozwsh_main:30 +==pyozwman.ozwsh_widgets:29 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass
    diff --git a/docs/joomla/coverage/pyozwman_ozwsh_widgets.html b/docs/joomla/coverage/pyozwman_ozwsh_widgets.html index cdc7b5a7..8af56022 100644 --- a/docs/joomla/coverage/pyozwman_ozwsh_widgets.html +++ b/docs/joomla/coverage/pyozwman_ozwsh_widgets.html @@ -7,6 +7,7 @@ <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD Coverage for pyozwman.ozwsh_widgets: 16% ======= @@ -15,6 +16,9 @@ ======= Coverage for pyozwman.ozwsh_widgets: 34% >>>>>>> master +======= + Coverage for pyozwman.ozwsh_widgets: 34% +>>>>>>> master ======= Coverage for pyozwman.ozwsh_widgets: 34% >>>>>>> master @@ -35,6 +39,7 @@

    Coverage for pyozwman.ozwsh_widgets : <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD 16%

    @@ -61,6 +66,15 @@

    473 run 925 missing >>>>>>> master +======= + 34% +

    + +

    + 1398 statements   + 473 run + 925 missing +>>>>>>> master ======= 34%

    @@ -208,6 +222,7 @@

    67

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    68

    >>>>>>> master

    69

    @@ -222,6 +237,11 @@

    69

    70

    >>>>>>> master +======= +

    68

    +

    69

    +

    70

    +>>>>>>> master

    71

    72

    <<<<<<< HEAD @@ -303,6 +323,7 @@

    109

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    110

    >>>>>>> master

    111

    @@ -332,6 +353,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    110

    111

    112

    @@ -340,6 +363,9 @@

    115

    116

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -358,6 +384,7 @@

    129

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    130

    >>>>>>> master ======= @@ -366,6 +393,9 @@

    =======

    130

    >>>>>>> master +======= +

    130

    +>>>>>>> master

    131

    132

    133

    @@ -380,6 +410,7 @@

    141

    142

    <<<<<<< HEAD +<<<<<<< HEAD

    143

    144

    145

    @@ -421,6 +452,8 @@

    142

    ======= >>>>>>> master +======= +>>>>>>> master

    143

    144

    145

    @@ -455,6 +488,7 @@

    174

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    175

    >>>>>>> master ======= @@ -463,12 +497,16 @@

    =======

    175

    >>>>>>> master +======= +

    175

    +>>>>>>> master

    176

    177

    178

    179

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    180

    181

    182

    @@ -493,11 +531,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    180

    181

    182

    183

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -526,6 +569,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    205

    206

    207

    @@ -579,6 +623,9 @@

    =======

    205

    >>>>>>> master +======= +

    205

    +>>>>>>> master

    206

    207

    208

    @@ -617,6 +664,7 @@

    241

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    242

    243

    244

    @@ -644,6 +692,33 @@

    264

    265

    266

    +======= +

    242

    +

    243

    +

    244

    +

    245

    +

    246

    +

    247

    +

    248

    +

    249

    +

    250

    +

    251

    +

    252

    +

    253

    +

    254

    +

    255

    +

    256

    +

    257

    +

    258

    +

    259

    +

    260

    +

    261

    +

    262

    +

    263

    +

    264

    +

    265

    +

    266

    +>>>>>>> master

    267

    268

    269

    @@ -680,6 +755,9 @@

    269

    270

    271

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    272

    273

    @@ -687,6 +765,7 @@

    275

    276

    <<<<<<< HEAD +<<<<<<< HEAD

    277

    278

    279

    @@ -783,6 +862,23 @@

    290

    291

    >>>>>>> master +======= +

    277

    +

    278

    +

    279

    +

    280

    +

    281

    +

    282

    +

    283

    +

    284

    +

    285

    +

    286

    +

    287

    +

    288

    +

    289

    +

    290

    +

    291

    +>>>>>>> master

    292

    293

    294

    @@ -794,6 +890,7 @@

    300

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    301

    >>>>>>> master ======= @@ -802,6 +899,9 @@

    =======

    301

    >>>>>>> master +======= +

    301

    +>>>>>>> master

    302

    303

    304

    @@ -822,6 +922,7 @@

    311

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    312

    >>>>>>> master ======= @@ -830,12 +931,16 @@

    =======

    312

    >>>>>>> master +======= +

    312

    +>>>>>>> master

    313

    314

    315

    316

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    317

    <<<<<<< HEAD

    318

    @@ -890,6 +995,10 @@

    317

    318

    >>>>>>> master +======= +

    317

    +

    318

    +>>>>>>> master

    319

    320

    321

    @@ -927,6 +1036,7 @@

    353

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    354

    355

    356

    @@ -977,6 +1087,19 @@

    363

    364

    >>>>>>> master +======= +

    354

    +

    355

    +

    356

    +

    357

    +

    358

    +

    359

    +

    360

    +

    361

    +

    362

    +

    363

    +

    364

    +>>>>>>> master

    365

    366

    367

    @@ -989,6 +1112,7 @@

    374

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    375

    ======= @@ -1002,10 +1126,15 @@

    ======= >>>>>>> master ======= +======= +>>>>>>> master

    375

    376

    377

    378

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    379

    380

    @@ -1013,6 +1142,7 @@

    382

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    383

    384

    385

    @@ -1062,6 +1192,17 @@

    390

    391

    >>>>>>> master +======= +

    383

    +

    384

    +

    385

    +

    386

    +

    387

    +

    388

    +

    389

    +

    390

    +

    391

    +>>>>>>> master

    392

    393

    394

    @@ -1073,6 +1214,7 @@

    400

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    401

    ======= @@ -1081,6 +1223,9 @@

    =======

    401

    >>>>>>> master +======= +

    401

    +>>>>>>> master

    402

    403

    404

    @@ -1098,6 +1243,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    412

    413

    414

    @@ -1120,6 +1266,12 @@

    414

    415

    >>>>>>> master +======= +

    412

    +

    413

    +

    414

    +

    415

    +>>>>>>> master

    416

    417

    418

    @@ -1137,6 +1289,7 @@

    429

    430

    <<<<<<< HEAD +<<<<<<< HEAD

    431

    432

    433

    @@ -1165,6 +1318,17 @@

    437

    438

    439

    +======= +

    431

    +

    432

    +

    433

    +

    434

    +

    435

    +

    436

    +

    437

    +

    438

    +

    439

    +>>>>>>> master

    440

    441

    442

    @@ -1174,11 +1338,15 @@

    446

    447

    448

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    449

    450

    451

    <<<<<<< HEAD +<<<<<<< HEAD

    452

    453

    454

    @@ -1217,6 +1385,8 @@

    451

    ======= >>>>>>> master +======= +>>>>>>> master

    452

    453

    454

    @@ -1245,6 +1415,7 @@

    468

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    469

    ======= @@ -1253,6 +1424,9 @@

    =======

    469

    >>>>>>> master +======= +

    469

    +>>>>>>> master

    470

    471

    472

    @@ -1307,6 +1481,7 @@

    496

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    497

    >>>>>>> master

    498

    @@ -1410,6 +1585,25 @@

    512

    513

    >>>>>>> master +======= +

    497

    +

    498

    +

    499

    +

    500

    +

    501

    +

    502

    +

    503

    +

    504

    +

    505

    +

    506

    +

    507

    +

    508

    +

    509

    +

    510

    +

    511

    +

    512

    +

    513

    +>>>>>>> master

    514

    515

    516

    @@ -1461,6 +1655,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    561

    562

    563

    @@ -1504,6 +1699,9 @@

    =======

    561

    >>>>>>> master +======= +

    561

    +>>>>>>> master

    562

    563

    564

    @@ -1546,6 +1744,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    600

    601

    ======= @@ -1557,11 +1756,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    600

    601

    602

    603

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -1575,6 +1779,7 @@

    608

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    609

    ======= @@ -1583,12 +1788,16 @@

    =======

    609

    >>>>>>> master +======= +

    609

    +>>>>>>> master

    610

    611

    612

    613

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    614

    615

    616

    @@ -1613,12 +1822,20 @@

    617

    618

    >>>>>>> master +======= +

    614

    +

    615

    +

    616

    +

    617

    +

    618

    +>>>>>>> master

    619

    620

    621

    622

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    623

    624

    >>>>>>> master @@ -1628,12 +1845,17 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    623

    624

    625

    626

    627

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -1651,6 +1873,7 @@

    639

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    640

    <<<<<<< HEAD

    641

    @@ -1691,6 +1914,9 @@

    =======

    640

    >>>>>>> master +======= +

    640

    +>>>>>>> master

    641

    642

    643

    @@ -1728,6 +1954,7 @@

    674

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    675

    676

    <<<<<<< HEAD @@ -1829,12 +2056,17 @@

    679

    680

    ======= +======= +>>>>>>> master

    675

    676

    677

    678

    679

    680

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    681

    682

    @@ -1882,6 +2114,7 @@

    722

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    723

    724

    725

    @@ -1894,6 +2127,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    723

    724

    725

    @@ -1903,6 +2138,9 @@

    729

    730

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -1939,6 +2177,7 @@

    745

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    746

    ======= @@ -1947,6 +2186,9 @@

    =======

    746

    >>>>>>> master +======= +

    746

    +>>>>>>> master

    747

    748

    749

    @@ -1959,6 +2201,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    756

    @@ -1968,6 +2213,7 @@

    760

    761

    <<<<<<< HEAD +<<<<<<< HEAD

    762

    763

    764

    @@ -1987,6 +2233,8 @@

    761

    ======= >>>>>>> master +======= +>>>>>>> master

    762

    763

    764

    @@ -2006,6 +2254,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    777

    778

    779

    @@ -2020,6 +2269,9 @@

    =======

    777

    >>>>>>> master +======= +

    777

    +>>>>>>> master

    778

    779

    780

    @@ -2032,6 +2284,7 @@

    786

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    787

    <<<<<<< HEAD

    788

    @@ -2049,6 +2302,9 @@

    =======

    787

    >>>>>>> master +======= +

    787

    +>>>>>>> master

    788

    789

    790

    @@ -2057,6 +2313,7 @@

    793

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    794

    795

    >>>>>>> master @@ -2065,11 +2322,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    794

    795

    796

    797

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -2079,6 +2341,7 @@

    801

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    802

    803

    804

    @@ -2169,6 +2432,24 @@

    816

    817

    >>>>>>> master +======= +

    802

    +

    803

    +

    804

    +

    805

    +

    806

    +

    807

    +

    808

    +

    809

    +

    810

    +

    811

    +

    812

    +

    813

    +

    814

    +

    815

    +

    816

    +

    817

    +>>>>>>> master

    818

    819

    820

    @@ -2218,6 +2499,7 @@

    863

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    864

    <<<<<<< HEAD

    865

    @@ -2250,6 +2532,15 @@

    869

    870

    >>>>>>> master +======= +

    864

    +

    865

    +

    866

    +

    867

    +

    868

    +

    869

    +

    870

    +>>>>>>> master

    871

    872

    873

    @@ -2258,6 +2549,7 @@

    875

    876

    <<<<<<< HEAD +<<<<<<< HEAD

    877

    878

    879

    @@ -2266,6 +2558,8 @@

    876

    ======= >>>>>>> master +======= +>>>>>>> master

    877

    878

    879

    @@ -2279,6 +2573,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    886

    =======

    886

    @@ -2289,6 +2584,9 @@

    =======

    886

    >>>>>>> master +======= +

    886

    +>>>>>>> master

    887

    888

    889

    @@ -2296,6 +2594,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    891

    892

    893

    @@ -2370,6 +2669,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    891

    892

    893

    @@ -2377,6 +2678,9 @@

    895

    896

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -2436,6 +2740,7 @@

    950

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    951

    952

    953

    @@ -2483,6 +2788,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    951

    952

    953

    @@ -2495,6 +2802,9 @@

    960

    961

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -2538,6 +2848,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    998

    999

    1000

    @@ -2553,6 +2864,9 @@

    =======

    998

    >>>>>>> master +======= +

    998

    +>>>>>>> master

    999

    1000

    1001

    @@ -2565,6 +2879,7 @@

    1007

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1008

    1009

    <<<<<<< HEAD @@ -2600,11 +2915,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    1008

    1009

    1010

    1011

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -2643,6 +2963,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1043

    =======

    1043

    @@ -2659,6 +2980,11 @@

    1044

    1045

    >>>>>>> master +======= +

    1043

    +

    1044

    +

    1045

    +>>>>>>> master

    1046

    1047

    <<<<<<< HEAD @@ -2693,6 +3019,7 @@

    1061

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1062

    >>>>>>> master ======= @@ -2701,6 +3028,9 @@

    =======

    1062

    >>>>>>> master +======= +

    1062

    +>>>>>>> master

    1063

    1064

    1065

    @@ -2722,6 +3052,7 @@

    1075

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1076

    >>>>>>> master ======= @@ -2730,6 +3061,9 @@

    =======

    1076

    >>>>>>> master +======= +

    1076

    +>>>>>>> master

    1077

    1078

    1079

    @@ -2751,6 +3085,7 @@

    1089

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1090

    >>>>>>> master ======= @@ -2759,6 +3094,9 @@

    =======

    1090

    >>>>>>> master +======= +

    1090

    +>>>>>>> master

    1091

    1092

    1093

    @@ -2792,6 +3130,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1117

    1118

    1119

    @@ -2858,6 +3197,16 @@

    1123

    1124

    >>>>>>> master +======= +

    1117

    +

    1118

    +

    1119

    +

    1120

    +

    1121

    +

    1122

    +

    1123

    +

    1124

    +>>>>>>> master

    1125

    1126

    1127

    @@ -2866,6 +3215,9 @@

    1130

    1131

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -2887,6 +3239,7 @@

    1147

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1148

    >>>>>>> master ======= @@ -2895,6 +3248,9 @@

    =======

    1148

    >>>>>>> master +======= +

    1148

    +>>>>>>> master

    1149

    1150

    1151

    @@ -2905,6 +3261,7 @@

    1155

    1156

    <<<<<<< HEAD +<<<<<<< HEAD

    1157

    1158

    1159

    @@ -3033,6 +3390,34 @@

    1181

    1182

    >>>>>>> master +======= +

    1157

    +

    1158

    +

    1159

    +

    1160

    +

    1161

    +

    1162

    +

    1163

    +

    1164

    +

    1165

    +

    1166

    +

    1167

    +

    1168

    +

    1169

    +

    1170

    +

    1171

    +

    1172

    +

    1173

    +

    1174

    +

    1175

    +

    1176

    +

    1177

    +

    1178

    +

    1179

    +

    1180

    +

    1181

    +

    1182

    +>>>>>>> master

    1183

    1184

    1185

    @@ -3082,6 +3467,7 @@

    1228

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1229

    <<<<<<< HEAD

    1230

    @@ -3108,6 +3494,13 @@

    1232

    1233

    >>>>>>> master +======= +

    1229

    +

    1230

    +

    1231

    +

    1232

    +

    1233

    +>>>>>>> master

    1234

    1235

    1236

    @@ -3130,6 +3523,7 @@

    1244

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1245

    1246

    >>>>>>> master @@ -3141,6 +3535,10 @@

    1245

    1246

    >>>>>>> master +======= +

    1245

    +

    1246

    +>>>>>>> master

    1247

    1248

    1249

    @@ -3156,6 +3554,7 @@

    1258

    1259

    <<<<<<< HEAD +<<<<<<< HEAD

    1260

    1261

    1262

    @@ -3196,6 +3595,23 @@

    1272

    1273

    1274

    +======= +

    1260

    +

    1261

    +

    1262

    +

    1263

    +

    1264

    +

    1265

    +

    1266

    +

    1267

    +

    1268

    +

    1269

    +

    1270

    +

    1271

    +

    1272

    +

    1273

    +

    1274

    +>>>>>>> master

    1275

    1276

    1277

    @@ -3205,11 +3621,15 @@

    1281

    1282

    1283

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1284

    1285

    1286

    <<<<<<< HEAD +<<<<<<< HEAD

    1287

    1288

    1289

    @@ -3269,6 +3689,10 @@

    1287

    1288

    >>>>>>> master +======= +

    1287

    +

    1288

    +>>>>>>> master

    1289

    1290

    1291

    @@ -3278,6 +3702,9 @@

    1295

    1296

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -3304,6 +3731,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    1309

    @@ -3312,6 +3742,7 @@

    1312

    1313

    <<<<<<< HEAD +<<<<<<< HEAD

    1314

    1315

    1316

    @@ -3352,6 +3783,14 @@

    1317

    1318

    1319

    +======= +

    1314

    +

    1315

    +

    1316

    +

    1317

    +

    1318

    +

    1319

    +>>>>>>> master

    1320

    1321

    1322

    @@ -3369,6 +3808,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master ======= @@ -3380,6 +3822,7 @@

    1337

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1338

    =======

    1333

    @@ -3418,11 +3861,17 @@

    =======

    1338

    >>>>>>> master +======= +

    1338

    +>>>>>>> master

    1339

    1340

    1341

    1342

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -3460,6 +3909,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    1373

    @@ -3468,6 +3920,7 @@

    1376

    1377

    <<<<<<< HEAD +<<<<<<< HEAD

    1378

    1379

    1380

    @@ -3522,6 +3975,12 @@

    1380

    1381

    >>>>>>> master +======= +

    1378

    +

    1379

    +

    1380

    +

    1381

    +>>>>>>> master

    1382

    1383

    1384

    @@ -3561,6 +4020,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1417

    1418

    ======= @@ -3572,11 +4032,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    1417

    1418

    1419

    1420

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -3624,6 +4089,7 @@

    1441

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1442

    1443

    >>>>>>> master @@ -3670,6 +4136,15 @@

    1447

    1448

    >>>>>>> master +======= +

    1442

    +

    1443

    +

    1444

    +

    1445

    +

    1446

    +

    1447

    +

    1448

    +>>>>>>> master

    1449

    1450

    1451

    @@ -3688,6 +4163,7 @@

    1464

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1465

    1466

    >>>>>>> master @@ -3699,12 +4175,17 @@

    1465

    1466

    >>>>>>> master +======= +

    1465

    +

    1466

    +>>>>>>> master

    1467

    1468

    1469

    1470

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1471

    <<<<<<< HEAD

    1472

    @@ -3780,6 +4261,10 @@

    1471

    1472

    >>>>>>> master +======= +

    1471

    +

    1472

    +>>>>>>> master

    1473

    1474

    1475

    @@ -3870,6 +4355,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    1555

    @@ -3878,6 +4366,7 @@

    1558

    1559

    <<<<<<< HEAD +<<<<<<< HEAD

    1560

    1561

    1562

    @@ -3908,12 +4397,18 @@

    1561

    1562

    >>>>>>> master +======= +

    1560

    +

    1561

    +

    1562

    +>>>>>>> master

    1563

    1564

    1565

    1566

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1567

    1568

    1569

    @@ -3972,6 +4467,19 @@

    1576

    1577

    >>>>>>> master +======= +

    1567

    +

    1568

    +

    1569

    +

    1570

    +

    1571

    +

    1572

    +

    1573

    +

    1574

    +

    1575

    +

    1576

    +

    1577

    +>>>>>>> master

    1578

    1579

    1580

    @@ -3990,6 +4498,7 @@

    1593

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1594

    1595

    >>>>>>> master @@ -4001,12 +4510,17 @@

    1594

    1595

    >>>>>>> master +======= +

    1594

    +

    1595

    +>>>>>>> master

    1596

    1597

    1598

    1599

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1600

    <<<<<<< HEAD

    1601

    @@ -4030,11 +4544,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    1600

    1601

    1602

    1603

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -4051,6 +4570,7 @@

    1614

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1615

    1616

    @@ -4065,6 +4585,13 @@

    1618

    1619

    >>>>>>> master +======= +

    1615

    +

    1616

    +

    1617

    +

    1618

    +

    1619

    +>>>>>>> master

    1620

    1621

    1622

    @@ -4083,6 +4610,7 @@

    1635

    1636

    <<<<<<< HEAD +<<<<<<< HEAD

    1637

    1638

    1639

    @@ -4174,6 +4702,21 @@

    1647

    1648

    1649

    +======= +

    1637

    +

    1638

    +

    1639

    +

    1640

    +

    1641

    +

    1642

    +

    1643

    +

    1644

    +

    1645

    +

    1646

    +

    1647

    +

    1648

    +

    1649

    +>>>>>>> master

    1650

    1651

    1652

    @@ -4215,6 +4758,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1683

    =======

    1683

    @@ -4225,12 +4769,16 @@

    =======

    1683

    >>>>>>> master +======= +

    1683

    +>>>>>>> master

    1684

    1685

    1686

    1687

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1688

    <<<<<<< HEAD

    1689

    @@ -4270,6 +4818,10 @@

    1688

    1689

    >>>>>>> master +======= +

    1688

    +

    1689

    +>>>>>>> master

    1690

    1691

    1692

    @@ -4296,6 +4848,7 @@

    1713

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1714

    1715

    >>>>>>> master @@ -4304,11 +4857,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    1714

    1715

    1716

    1717

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -4354,6 +4912,7 @@

    1737

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1738

    1739

    >>>>>>> master @@ -4399,6 +4958,15 @@

    1743

    1744

    >>>>>>> master +======= +

    1738

    +

    1739

    +

    1740

    +

    1741

    +

    1742

    +

    1743

    +

    1744

    +>>>>>>> master

    1745

    1746

    1747

    @@ -4417,6 +4985,7 @@

    1760

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1761

    >>>>>>> master ======= @@ -4425,6 +4994,9 @@

    =======

    1761

    >>>>>>> master +======= +

    1761

    +>>>>>>> master

    1762

    1763

    1764

    @@ -4434,6 +5006,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1768

    1769

    1770

    @@ -4462,6 +5035,11 @@

    1769

    1770

    >>>>>>> master +======= +

    1768

    +

    1769

    +

    1770

    +>>>>>>> master

    1771

    1772

    1773

    @@ -4475,6 +5053,7 @@

    1781

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1782

    1783

    @@ -4482,6 +5061,13 @@

    1785

    <<<<<<< HEAD

    1786

    +======= +

    1782

    +

    1783

    +

    1784

    +

    1785

    +

    1786

    +>>>>>>> master

    1787

    1788

    1789

    @@ -4499,6 +5085,7 @@

    1801

    1802

    1803

    +<<<<<<< HEAD

    1804

    1805

    1806

    @@ -4522,6 +5109,31 @@

    1824

    1825

    1826

    +======= +

    1804

    +

    1805

    +

    1806

    +

    1807

    +

    1808

    +

    1809

    +

    1810

    +

    1811

    +

    1812

    +

    1813

    +

    1814

    +

    1815

    +

    1816

    +

    1817

    +

    1818

    +

    1819

    +

    1820

    +

    1821

    +

    1822

    +

    1823

    +

    1824

    +

    1825

    +

    1826

    +>>>>>>> master

    1827

    1828

    1829

    @@ -4622,6 +5234,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1849

    1850

    ======= @@ -4633,11 +5246,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    1849

    1850

    1851

    1852

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -4716,6 +5334,7 @@

    1871

    1872

    1873

    +<<<<<<< HEAD =======

    1860

    1861

    @@ -4732,6 +5351,8 @@

    1872

    1873

    >>>>>>> master +======= +>>>>>>> master

    1874

    1875

    1876

    @@ -4767,6 +5388,7 @@

    1906

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1907

    >>>>>>> master

    1908

    @@ -4778,6 +5400,10 @@

    1907

    1908

    >>>>>>> master +======= +

    1907

    +

    1908

    +>>>>>>> master

    1909

    1910

    1911

    @@ -4787,6 +5413,7 @@

    1914

    1915

    <<<<<<< HEAD +<<<<<<< HEAD

    1916

    1917

    1918

    @@ -4839,6 +5466,29 @@

    1934

    1935

    1936

    +======= +

    1916

    +

    1917

    +

    1918

    +

    1919

    +

    1920

    +

    1921

    +

    1922

    +

    1923

    +

    1924

    +

    1925

    +

    1926

    +

    1927

    +

    1928

    +

    1929

    +

    1930

    +

    1931

    +

    1932

    +

    1933

    +

    1934

    +

    1935

    +

    1936

    +>>>>>>> master

    1937

    1938

    1939

    @@ -4848,11 +5498,15 @@

    1943

    1944

    1945

    +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master

    1946

    1947

    1948

    <<<<<<< HEAD +<<<<<<< HEAD

    1949

    1950

    1951

    @@ -4895,6 +5549,8 @@

    1948

    ======= >>>>>>> master +======= +>>>>>>> master

    1949

    1950

    1951

    @@ -4929,6 +5585,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    1975

    1976

    1977

    @@ -4942,12 +5599,16 @@

    =======

    1975

    >>>>>>> master +======= +

    1975

    +>>>>>>> master

    1976

    1977

    1978

    1979

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    1980

    ======= @@ -4956,6 +5617,9 @@

    =======

    1980

    >>>>>>> master +======= +

    1980

    +>>>>>>> master

    1981

    1982

    1983

    @@ -4997,6 +5661,9 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master

    2012

    @@ -5005,6 +5672,7 @@

    2015

    2016

    <<<<<<< HEAD +<<<<<<< HEAD

    2017

    2018

    2019

    @@ -5060,6 +5728,11 @@

    2018

    2019

    >>>>>>> master +======= +

    2017

    +

    2018

    +

    2019

    +>>>>>>> master

    2020

    2021

    2022

    @@ -5095,6 +5768,7 @@

    2052

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2053

    2054

    >>>>>>> master @@ -5103,11 +5777,16 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    2053

    2054

    2055

    2056

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -5117,6 +5796,7 @@

    2060

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2061

    2062

    2063

    @@ -5219,6 +5899,31 @@

    2082

    2083

    >>>>>>> master +======= +

    2061

    +

    2062

    +

    2063

    +

    2064

    +

    2065

    +

    2066

    +

    2067

    +

    2068

    +

    2069

    +

    2070

    +

    2071

    +

    2072

    +

    2073

    +

    2074

    +

    2075

    +

    2076

    +

    2077

    +

    2078

    +

    2079

    +

    2080

    +

    2081

    +

    2082

    +

    2083

    +>>>>>>> master

    2084

    2085

    2086

    @@ -5250,6 +5955,7 @@

    2112

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2113

    >>>>>>> master

    2114

    @@ -5261,6 +5967,10 @@

    2113

    2114

    >>>>>>> master +======= +

    2113

    +

    2114

    +>>>>>>> master

    2115

    2116

    2117

    @@ -5270,6 +5980,7 @@

    2120

    2121

    <<<<<<< HEAD +<<<<<<< HEAD

    2122

    2123

    2124

    @@ -5316,6 +6027,11 @@

    2122

    2123

    2124

    +======= +

    2122

    +

    2123

    +

    2124

    +>>>>>>> master

    2125

    2126

    2127

    @@ -5336,6 +6052,7 @@

    2142

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2143

    2144

    2145

    @@ -5348,6 +6065,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    2143

    2144

    2145

    @@ -5357,6 +6076,9 @@

    2149

    2150

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -5430,6 +6152,7 @@

    2184

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD >>>>>>> master

    2185

    ======= @@ -5438,6 +6161,9 @@

    =======

    2185

    >>>>>>> master +======= +

    2185

    +>>>>>>> master

    2186

    2187

    2188

    @@ -5456,6 +6182,7 @@

    <<<<<<< HEAD <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2197

    2198

    2199

    @@ -5481,6 +6208,10 @@

    2197

    2198

    >>>>>>> master +======= +

    2197

    +

    2198

    +>>>>>>> master

    2199

    2200

    2201

    @@ -5495,6 +6226,7 @@

    2210

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    2211

    >>>>>>> master

    2212

    @@ -5567,6 +6299,23 @@

    2224

    2225

    >>>>>>> master +======= +

    2211

    +

    2212

    +

    2213

    +

    2214

    +

    2215

    +

    2216

    +

    2217

    +

    2218

    +

    2219

    +

    2220

    +

    2221

    +

    2222

    +

    2223

    +

    2224

    +

    2225

    +>>>>>>> master

    2226

    2227

    2228

    @@ -5574,6 +6323,9 @@

    2230

    2231

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -5611,6 +6363,7 @@

     

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    from select import select 

    import sys 

    import os 

    @@ -5626,6 +6379,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    try: 

        from gevent import monkey 

        monkey.patch_all() 

    @@ -5638,6 +6393,9 @@

    from urwid.raw_display import Screen 

    from traceback import format_exc 

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -5650,6 +6408,7 @@

    from louie import dispatcher, All 

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

    #import logging 

    #from frameapp import FrameApp, DIVIDER 

     

    @@ -6266,6 +7025,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

    import logging 

     

    class OldestTree(urwid.ListWalker): 

    @@ -6283,6 +7044,9 @@

            self.focus, oldfocus = (0, 0) 

            self.size = 0 

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -6810,6 +7574,7 @@

     

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

        def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1): 

            self.id = id 

            #self.content = 'item %s: %s - %s...' % (str(id), name[:20], product_name[:20] ) 

    @@ -8502,6 +9267,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

        def keypress(self, size, key): 

            return key 

     

    @@ -8587,6 +9354,9 @@

            dispatcher.connect(self._louie_network_ready, ZWaveNetwork.SIGNAL_NETWORK_READY) 

            dispatcher.connect(self._louie_network_resetted, ZWaveNetwork.SIGNAL_NETWORK_RESETTED) 

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master @@ -9956,6 +10726,7 @@

     

    <<<<<<< HEAD <<<<<<< HEAD +<<<<<<< HEAD

        def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False): 

            self.id = id 

            #self.content = 'item %s: %s - %s...' % (str(id), name[:20], product_name[:20] ) 

    @@ -10153,6 +10924,8 @@

    ======= ======= >>>>>>> master +======= +>>>>>>> master

            """ 

            return "%s" % self.key 

     

    @@ -10352,6 +11125,9 @@

        def keypress(self, size, key): 

            return key 

    <<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master ======= >>>>>>> master diff --git a/docs/joomla/nosetests/nosetests.html b/docs/joomla/nosetests/nosetests.html index 04a9211c..14f89a43 100644 --- a/docs/joomla/nosetests/nosetests.html +++ b/docs/joomla/nosetests/nosetests.html @@ -146,12 +146,17 @@

    Unit Test Report

    <<<<<<< HEAD +<<<<<<< HEAD

    Start Time: 2015-05-03 16:11:55

    Duration: 0:03:41.667291

    =======

    Start Time: 2015-05-03 16:28:27

    Duration: 0:03:38.181683

    >>>>>>> master +======= +

    Start Time: 2015-05-03 16:28:27

    +

    Duration: 0:03:38.181683

    +>>>>>>> master

    Status: Pass 77

    @@ -342,6 +347,7 @@

    Unit Test Report

    pass +<<<<<<< HEAD <<<<<<< HEAD tests.api.test_network_start:TestNetworkStartStop @@ -363,6 +369,11 @@

    Unit Test Report

    tests.api.test_controller_command:TestControllerCommand 5.00 ======= + + tests.api.test_controller_command:TestControllerCommand + 7.00 +>>>>>>> master +======= tests.api.test_controller_command:TestControllerCommand 7.00 @@ -431,6 +442,9 @@

    Unit Test Report

    test_000_network_start_stop
    5.00 +<<<<<<< HEAD +>>>>>>> master +======= >>>>>>> master pass @@ -470,6 +484,7 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD tests.api.test_switch:TestSwitch 3.00 @@ -482,10 +497,24 @@

    Unit Test Report

    test_010_switch_state
    +======= + tests.api.test_switch_all:TestSwitchAll + 4.00 + 3 + 3 + 0 + 0 + Detail + + + +
    test_010_switch_all_item
    +>>>>>>> master 0.00 pass +<<<<<<< HEAD
    test_110_switch_on_off
    3.00 @@ -501,10 +530,21 @@

    Unit Test Report

    test_010_switch_all_item
    +======= + +
    test_015_switch_all_set_item
    + 4.00 + pass + + + +
    test_020_switch_all_items
    +>>>>>>> master 0.00 pass +<<<<<<< HEAD
    test_015_switch_all_set_item
    4.00 @@ -559,6 +599,27 @@

    Unit Test Report

    test_905_network_singleton
    0.00 ======= + +
    test_110_switch_on_off
    + 3.00 +>>>>>>> master +======= + + tests.api.test_switch:TestSwitch + 3.00 + 2 + 2 + 0 + 0 + Detail + + + +
    test_010_switch_state
    + 0.00 + pass + +
    test_110_switch_on_off
    3.00 @@ -568,8 +629,12 @@

    Unit Test Report

    tests.api.test_network:TestNetwork +<<<<<<< HEAD <<<<<<< HEAD 2.04 +======= + 2.05 +>>>>>>> master ======= 2.05 >>>>>>> master @@ -577,6 +642,7 @@

    Unit Test Report

    9 0 0 +<<<<<<< HEAD <<<<<<< HEAD Detail @@ -586,6 +652,12 @@

    Unit Test Report

    Detail + +>>>>>>> master +======= + Detail + + >>>>>>> master
    test_000_network_awake
    @@ -593,66 +665,91 @@

    Unit Test Report

    pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_010_network_ready
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_100_network_test
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_110_network_heal
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_120_network_poll
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_200_network_to_dict
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_220_network_nodes_to_dict
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD
    test_300_network_kvals_nodes
    @@ -668,6 +765,15 @@

    Unit Test Report

    pass + +>>>>>>> master +======= + +
    test_300_network_kvals_nodes
    + 1.08 + pass + + >>>>>>> master
    test_310_network_kvals_controller
    @@ -676,6 +782,7 @@

    Unit Test Report

    +<<<<<<< HEAD <<<<<<< HEAD tests.manager.autobuild.test_manager:ManagerTest 0.07 @@ -691,6 +798,19 @@

    Unit Test Report

    0.07 ======= tests.api.autobuild.test_api:TestNetworkApi +======= + tests.api.autobuild.test_api:TestNetworkApi + 1.00 + 3 + 3 + 0 + 0 + Detail + + + +
    test_000_api_network
    +>>>>>>> master 1.00 3 3 @@ -699,12 +819,15 @@

    Unit Test Report

    Detail +<<<<<<< HEAD
    test_000_api_network
    1.00 pass +======= +>>>>>>> master
    test_900_api_singleton
    0.00 @@ -725,6 +848,7 @@

    Unit Test Report

    9 0 0 +<<<<<<< HEAD <<<<<<< HEAD Detail @@ -734,6 +858,12 @@

    Unit Test Report

    Detail + +>>>>>>> master +======= + Detail + + >>>>>>> master
    test_000_server_start
    @@ -741,80 +871,112 @@

    Unit Test Report

    pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_001_error_404
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_100_home_is_up
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_200_controller_is_up
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_300_values_is_up
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_400_controller_is_up
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_500_node_is_up
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_600_map_is_up
    0.00 pass +<<<<<<< HEAD <<<<<<< HEAD ======= +>>>>>>> master +======= + >>>>>>> master
    test_700_scenes_is_up
    0.00 @@ -934,6 +1096,7 @@

    Unit Test Report

    1 0 0 +<<<<<<< HEAD <<<<<<< HEAD Detail @@ -975,16 +1138,25 @@

    Unit Test Report

    test_020_scene_to_dict
    0.00 +======= + Detail + + + +
    test_000_import
    + 0.02 +>>>>>>> master pass - tests.lib.autobuild.test_lib:TestInit + tests.api.test_nodes:TestNodes 0.00 - 4 - 4 + 5 + 5 0 0 +<<<<<<< HEAD Detail @@ -993,26 +1165,149 @@

    Unit Test Report

    test_005_scene_add_remove
    =======
    test_000_init
    +>>>>>>> master +======= + Detail + + + +
    test_000_nodes_count
    >>>>>>> master 0.00 pass +<<<<<<< HEAD <<<<<<< HEAD
    test_010_scenes_to_dict
    =======
    test_010_options_exceptions
    +>>>>>>> master +======= + +
    test_100_nodes_test
    >>>>>>> master 0.00 pass +<<<<<<< HEAD <<<<<<< HEAD
    test_020_scene_to_dict
    =======
    test_020_options_without_command_line
    +======= + +
    test_200_nodes_to_dict
    +>>>>>>> master + 0.00 + pass + + +<<<<<<< HEAD + +
    test_030_options_with_command_line
    +======= + +
    test_210_controller_to_dict
    + 0.00 + pass + + + +
    test_220_nodes_groups_to_dict
    +>>>>>>> master + 0.00 + pass + + + +<<<<<<< HEAD + tests.api.test_sensor:TestSensor +======= + tests.api.test_value:TestValue + 0.00 + 1 + 1 + 0 + 0 + Detail + + + +
    test_200_values_to_dict
    + 0.00 + pass + + + + tests.api.test_scene:TestScene +>>>>>>> master + 0.00 + 2 + 2 + 0 + 0 +<<<<<<< HEAD + Detail + + + +
    test_010_sensor_bool
    +======= + Detail + + + +
    test_005_scene_add_remove
    + 0.00 + pass + + + +
    test_010_scenes_to_dict
    + 0.00 + pass + + + +
    test_020_scene_to_dict
    + 0.00 + pass + + + + tests.lib.autobuild.test_lib:TestInit + 0.00 + 4 + 4 + 0 + 0 + Detail + + + +
    test_000_init
    + 0.00 + pass + + + +
    test_010_options_exceptions
    +>>>>>>> master + 0.00 + pass + + +<<<<<<< HEAD + +
    test_410_sensor_decimal
    +>>>>>>> master +======= + +
    test_020_options_without_command_line
    0.00 pass @@ -1104,8 +1399,12 @@

    Unit Test Report

    Total +<<<<<<< HEAD <<<<<<< HEAD 1:15.03 +======= + 1:15.02 +>>>>>>> master ======= 1:15.02 >>>>>>> master diff --git a/docs/joomla/pylint/report.html b/docs/joomla/pylint/report.html index 5d19d24c..851508a5 100644 --- a/docs/joomla/pylint/report.html +++ b/docs/joomla/pylint/report.html @@ -33,12 +33,17 @@

    Statistics by type

    method 531 <<<<<<< HEAD +<<<<<<< HEAD 530 +1.00 ======= 531 = >>>>>>> master +======= +531 += +>>>>>>> master 83.43 3.01 @@ -98,9 +103,12 @@

    Raw metrics

    5008 51.44 <<<<<<< HEAD +<<<<<<< HEAD 4995 +13.00 ======= +======= +>>>>>>> master 5008 = >>>>>>> master @@ -110,9 +118,12 @@

    Raw metrics

    3842 39.47 <<<<<<< HEAD +<<<<<<< HEAD 3829 +13.00 ======= +======= +>>>>>>> master 3842 = >>>>>>> master @@ -129,9 +140,12 @@

    Raw metrics

    610 6.27 <<<<<<< HEAD +<<<<<<< HEAD 609 +1.00 ======= +======= +>>>>>>> master 610 = >>>>>>> master @@ -151,9 +165,12 @@

    Duplication

    nb duplicated lines 2136 <<<<<<< HEAD +<<<<<<< HEAD 2131 +5.00 ======= +======= +>>>>>>> master 2136 = >>>>>>> master @@ -162,9 +179,12 @@

    Duplication

    percent duplicated lines 21.409 <<<<<<< HEAD +<<<<<<< HEAD 21.417 -0.01 ======= +======= +>>>>>>> master 21.409 = >>>>>>> master @@ -184,9 +204,12 @@

    Messages by category

    convention 891 <<<<<<< HEAD +<<<<<<< HEAD 888 +3.00 ======= +======= +>>>>>>> master 891 = >>>>>>> master @@ -201,9 +224,12 @@

    Messages by category

    warning 505 <<<<<<< HEAD +<<<<<<< HEAD 501 +4.00 ======= +======= +>>>>>>> master 505 = >>>>>>> master @@ -244,8 +270,13 @@

    % errors / warnings by module

    openzwave.option 22.22 <<<<<<< HEAD +<<<<<<< HEAD +0.00 +0.00 +======= 0.00 0.00 +>>>>>>> master ======= 0.00 0.00 @@ -367,7 +398,10 @@

    % errors / warnings by module

    pyozwweb.app.socket.__init__ <<<<<<< HEAD +<<<<<<< HEAD ======= +======= +>>>>>>> master 0.00 0.20 0.00 @@ -375,6 +409,7 @@

    % errors / warnings by module

    pyozwweb.config +<<<<<<< HEAD >>>>>>> master 0.00 0.20 @@ -389,6 +424,11 @@

    % errors / warnings by module

    0.00 ======= >>>>>>> master +======= +0.00 +0.00 +0.00 +>>>>>>> master 0.67 @@ -617,10 +657,14 @@

    Messages

    Global evaluation

    <<<<<<< HEAD +<<<<<<< HEAD Your code has been rated at 5.35/10 (previous run: 5.35/10, -0.00)
    ======= Your code has been rated at 5.35/10 (previous run: 5.35/10, +0.00)
    >>>>>>> master +======= +Your code has been rated at 5.35/10 (previous run: 5.35/10, +0.00) +>>>>>>> master

    Messages

    @@ -683,6 +727,13 @@

    Messages

    <<<<<<< HEAD +<<<<<<< HEAD + + + + + +======= @@ -904,6 +955,7 @@

    Messages

    +<<<<<<< HEAD @@ -923,147 +975,7 @@

    Messages

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +======= @@ -1083,20 +995,51 @@

    Messages

    +>>>>>>> master - + +<<<<<<< HEAD + + + + + + +>>>>>>> master +======= +>>>>>>> master +<<<<<<< HEAD + + + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + +======= @@ -1109,6 +1052,7 @@

    Messages

    +>>>>>>> master @@ -1128,39 +1072,93 @@

    Messages

    +<<<<<<< HEAD + + +<<<<<<< HEAD + + + +======= +>>>>>>> master - + + + + +======= + + + + + + +<<<<<<< HEAD + + + + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + + + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + + +======= @@ -1173,10 +1171,27 @@

    Messages

    +>>>>>>> master +<<<<<<< HEAD + + + + + + + + + + + + +======= @@ -1189,63 +1204,141 @@

    Messages

    +>>>>>>> master +<<<<<<< HEAD + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + + + +======= +>>>>>>> master +<<<<<<< HEAD + + +>>>>>>> master + + + + + + + + + + + + + + + + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + + + + + +======= @@ -1253,12 +1346,17 @@

    Messages

    +>>>>>>> master - + +<<<<<<< HEAD + +======= +>>>>>>> master - + +<<<<<<< HEAD + +======= +>>>>>>> master - + +<<<<<<< HEAD + + + + + +======= +>>>>>>> master - + @@ -1292,82 +1402,581 @@

    Messages

    - + +<<<<<<< HEAD + +======= +>>>>>>> master - + - - + + +<<<<<<< HEAD + +======= +>>>>>>> master - + - + +<<<<<<< HEAD + +======= +>>>>>>> master - + - - + + +<<<<<<< HEAD + +======= +>>>>>>> master - + - + +<<<<<<< HEAD + +======= +>>>>>>> master - + - - + + +<<<<<<< HEAD + +======= +>>>>>>> master - + - + +<<<<<<< HEAD + +======= +>>>>>>> master - + - + +<<<<<<< HEAD + + + - - + + +<<<<<<< HEAD + + + +======= +>>>>>>> master - - - + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + +======= + + + + + + + + + + + +>>>>>>> master + + + + +<<<<<<< HEAD + + + + +======= + + + + +>>>>>>> master + + + + +<<<<<<< HEAD + + + + + + + + + + + + +======= + + + + +>>>>>>> master + + + + + + + + + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1580,6 +2189,60 @@

    Messages

    +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master @@ -1771,6 +2434,7 @@

    Messages

    +<<<<<<< HEAD @@ -14911,179 +15575,13197 @@

    Messages

    - - - - + + + + + + + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + +<<<<<<< HEAD + + +======= + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + +<<<<<<< HEAD + + +======= + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + +======= + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + +======= + + + + + + + + + + + + + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + +======= + + + + + + + +>>>>>>> master + + + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + +======= + + + + + +>>>>>>> master + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + +======= + + + + + +>>>>>>> master + + + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + +======= + + + +>>>>>>> master + + + + + + + + + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + +======= + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + +======= + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + +======= + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + + + + + + + + + +======= + + + + + + + + + + + + + +>>>>>>> master + + + + + + + + + + + + + + + + + + + +<<<<<<< HEAD + + + + + +======= + + + + + +>>>>>>> master + + + + + + + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + + + + + + + + + + + + +<<<<<<< HEAD + +======= + +>>>>>>> master + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + + + +======= + + + + + +>>>>>>> master + + + +<<<<<<< HEAD + + + +======= + + + +>>>>>>> master + + + + + +<<<<<<< HEAD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +======= + + + + + + + + + + + + + + + - - - - - - + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + >>>>>>> master - + -<<<<<<< HEAD - -======= - ->>>>>>> master + - - + + - + - + -<<<<<<< HEAD -======= - - - + - + - - ->>>>>>> master + + - + -<<<<<<< HEAD - -======= - ->>>>>>> master + - - + + - + - + -<<<<<<< HEAD -======= - - ->>>>>>> master -<<<<<<< HEAD @@ -26604,34 +40286,34 @@

    Messages

    """ __author__ = 'Sébastien GALLET aka bibi21000' __email__ = 'bibi21000@gmail.com' -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -import os, sys -import time -from threading import Thread -from flask import Flask, render_template, session, request, current_app -from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) -import libopenzwave -import openzwave -from openzwave.node import ZWaveNode -from openzwave.value import ZWaveValue -from openzwave.scene import ZWaveScene -from openzwave.controller import ZWaveController -from openzwave.network import ZWaveNetwork -from openzwave.option import ZWaveOption -from louie import dispatcher, All -from pyozwweb.app import socketio, app +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} + @@ -26665,33 +40347,33 @@

    Messages

    """ __author__ = 'Sébastien GALLET aka bibi21000' __email__ = 'bibi21000@gmail.com' -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -import os, sys -import time -from threading import Thread -from flask import Flask, render_template, session, request, current_app -from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) -import libopenzwave -import openzwave -from openzwave.node import ZWaveNode -from openzwave.value import ZWaveValue -from openzwave.scene import ZWaveScene -from openzwave.controller import ZWaveController -from openzwave.network import ZWaveNetwork -from openzwave.option import ZWaveOption -from louie import dispatcher, All -from pyozwweb.app import socketio, app +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} @@ -27139,6 +40821,9 @@

    Messages

    +<<<<<<< HEAD +======= +>>>>>>> master ======= >>>>>>> master + + + + + + + +
    warningopenzwave.group 1710Bad indentation. Found 16 spaces, expected 12openzwave.group   171
    conventionopenzwave.group   42 openzwave.singleton Singleton.__init__ 354Metaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__444Metaclass method __call__ should have 'cls' as first argument
    warningopenzwave.node 1900Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 1910Exactly one space required around assignment - ret={} - ^
    conventionopenzwave.node 1970No space allowed before : - if 'values' in extras : - ^
    warningopenzwave.node 1980Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 1990No space allowed before : - if 'groups' in extras : - ^
    warningopenzwave.node 2000Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2010No space allowed before : - if 'neighbors' in extras : - ^
    warningopenzwave.node 2020Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2030No space allowed before : - if 'capabilities' in extras : - ^
    warningopenzwave.node 2040Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2080Exactly one space required around assignment - ret[key]=vals[key] - ^
    conventionopenzwave.node 2840Exactly one space required around assignment - ret={} - ^
    conventionopenzwave.node 4540Exactly one space required around assignment - ret={} - ^
    conventionopenzwave.node 460Invalid constant name "logger"
    conventionopenzwave.node ZWaveNode.__init__ 74 openzwave.node ZWaveNode.__init__ 594__init__ method from base class 'ZWaveNodeBasic' is not calledMetaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__444Metaclass method __call__ should have 'cls' as first argumentwarning openzwave.node ZWaveNode.__init__ 59 4 __init__ method from base class 'ZWaveNodeSwitch' is not called
    warning openzwave.node 1900Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.group 1721910Exactly one space required around assignment + ret={} + ^ZWaveNode.__init__ 59 4 69 8 Specify string format arguments as logging function parameters
    warning
    conventionopenzwave.group 1740No space allowed before : + if 'associations' in extras : + ^openzwave.node ZWaveNode.heal 289 4 Invalid argument name "upNodeRoute"
    errorwarningopenzwave.group 1751970No space allowed before : + if 'values' in extras : + ^
    warning openzwave.node 1980Bad indentation. Found 16 spaces, expected 12ZWaveNode.heal 303 8 Instance of 'ZWaveNode' has no 'manager' member
    warningconvention openzwave.node 1990No space allowed before : + if 'groups' in extras : + ^ZWaveNode.get_values_by_command_classes 365 8 Redefining built-in 'type'
    warning openzwave.node 2000Bad indentation. Found 16 spaces, expected 12ZWaveNode.get_values 413 8 Redefining built-in 'type'
    warningconvention openzwave.node 2010No space allowed before : + if 'neighbors' in extras : + ^ZWaveNode.values_to_dict 444 4 506 12 Specify string format arguments as logging function parameters
    warning openzwave.node 2020Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.node 2030No space allowed before : + if 'capabilities' in extras : + ^ZWaveNode.request_all_config_params 762 8 783 8 Specify string format arguments as logging function parameters
    warning openzwave.node 2040Bad indentation. Found 16 spaces, expected 12ZWaveNode.set_config_param 806 8 Specify string format arguments as logging function parameters
    convention openzwave.node 2080Exactly one space required around assignment + ret[key]=vals[key] + ^ZWaveNode.isNodeAwake 827 4 Invalid method name "isNodeAwake"
    convention openzwave.node 2840Exactly one space required around assignment + ret={} + ^ZWaveNode.isNodeFailed 838 4 Invalid attribute name "isNodeFailed"
    convention openzwave.node 4540Exactly one space required around assignment + ret={} + ^ZWaveNode.getNodeQueryStage 849 4 Invalid attribute name "getNodeQueryStage"
    convention openzwave.node 460Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.group 420Invalid constant name "logger"
    warningopenzwave.groupZWaveGroup.to_dict160ZWaveNode.isReady 8594Invalid attribute name "isReady"Dangerous default value [] as argument
    conventionopenzwave.singletonSingleton.__init__35openzwave.node ZWaveNode.isReady 8694Invalid attribute name "isReady"Metaclass method __init__ should have 'cls' as first argument
    conventionopenzwave.singletonSingleton.__call__44openzwave.node ZWaveNode.isNodeInfoReceived 8814Invalid attribute name "isNodeInfoReceived"Metaclass method __call__ should have 'cls' as first argument
    warningopenzwave.node 1900Bad indentation. Found 16 spaces, expected 12
    refactor openzwave.node 49 0 Too many public methods (53/20)
    conventionopenzwave.sceneopenzwave.node  1912210 Exactly one space required around assignment ret={} @@ -1266,21 +1364,33 @@

    Messages

    conventionopenzwave.sceneopenzwave.node  1972270Exactly one space required around assignment - ret[key]=vals[key] - ^No space allowed before : + if 'values' in extras : + ^
    warningopenzwave.node 198
    convention openzwave.scene   420Invalid constant name "logger"Bad indentation. Found 16 spaces, expected 12
    warning
    conventionopenzwave.controlleropenzwave.node  199700Line too long (186/140)No space allowed before : + if 'groups' in extras : + ^
    conventionopenzwave.controllerwarningopenzwave.node  200780Line too long (179/140)Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.controlleropenzwave.node  201880Line too long (147/140)No space allowed before : + if 'neighbors' in extras : + ^
    conventionopenzwave.controllerwarningopenzwave.node  202890Line too long (158/140)Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.controlleropenzwave.node  203900Line too long (156/140)No space allowed before : + if 'capabilities' in extras : + ^
    conventionopenzwave.controllerwarningopenzwave.node  204920Line too long (161/140)Bad indentation. Found 16 spaces, expected 12
    conventionopenzwave.controlleropenzwave.node  2081710Line too long (141/140)Exactly one space required around assignment + ret[key]=vals[key] + ^
    conventionopenzwave.controlleropenzwave.node  2840Exactly one space required around assignment + ret={} +======= 766 0 Exactly one space required around assignment ret=self.node.to_dict(extras=extras) +>>>>>>> master ^
    fatalopenzwave.controllerconventionopenzwave.node  4540Exactly one space required around assignment + ret={} + ^34 4 Unable to import 'pydispatch'
    erroropenzwave.controller conventionopenzwave.node 46390Invalid constant name "logger"
    conventionopenzwave.nodeZWaveNode.__init__748Invalid attribute name "_isReady"
    warningopenzwave.nodeZWaveNode.__init__59openzwave.controller 510Invalid constant name "logger"
    refactoropenzwave.controllerZWaveController540Too many instance attributes (9/7)
    refactoropenzwave.controllerZWaveController.get_stats_label3594__init__ method from base class 'ZWaveNodeSensor' is not called
    warningopenzwave.controllerZWaveController.do_poll_statistics3788Used * or ** magic
    warningopenzwave.nodeZWaveNode.__init__594__init__ method from base class 'ZWaveNodeBasic' is not called
    warningopenzwave.nodeZWaveNode.__init__59openzwave.controllerZWaveController.hard_reset4898Used * or ** magic
    conventionopenzwave.controllerZWaveController.begin_command_send_node_information5024__init__ method from base class 'ZWaveNodeSwitch' is not called
    warningopenzwave.nodeZWaveNode.__init__59conventionopenzwave.controllerZWaveController.begin_command_request_network_update5304__init__ method from base class 'ZWaveNodeSecurity' is not called
    warningopenzwave.nodeZWaveNode.__init__698Specify string format arguments as logging function parameters
    warningopenzwave.nodeZWaveNode.to_dict179conventionopenzwave.controllerZWaveController.begin_command_remove_failed_node5734Dangerous default value [] as argument
    warningopenzwave.nodeZWaveNode.groups_to_dict2734Dangerous default value [] as argument
    conventionopenzwave.nodeZWaveNode.heal289openzwave.controllerZWaveController.begin_command_replace_failed_node6024Invalid argument name "upNodeRoute"
    erroropenzwave.nodeZWaveNode.heal3038Instance of 'ZWaveNode' has no 'manager' member
    warningopenzwave.nodeZWaveNode.get_values_by_command_classes3658Redefining built-in 'type'
    warningopenzwave.nodeZWaveNode.get_values4138Redefining built-in 'type'
    warningopenzwave.nodeZWaveNode.values_to_dict4444Dangerous default value [] as argument
    warningopenzwave.nodeZWaveNode.remove_value50612Specify string format arguments as logging function parameters
    warningopenzwave.nodeZWaveNode.request_all_config_params7628Specify string format arguments as logging function parameters
    warningopenzwave.nodeZWaveNode.request_config_param7838Specify string format arguments as logging function parameters
    warningopenzwave.nodeZWaveNode.set_config_param8068Specify string format arguments as logging function parameters
    conventionopenzwave.nodeZWaveNode.isNodeAwake827openzwave.controllerZWaveController.begin_command_request_node_neigbhor_update6164Invalid method name "isNodeAwake"
    conventionopenzwave.nodeZWaveNode.isNodeFailed838openzwave.controllerZWaveController.begin_command_create_new_primary6304Invalid attribute name "isNodeFailed"
    conventionopenzwave.nodeZWaveNode.getNodeQueryStage849openzwave.controllerZWaveController.begin_command_transfer_primary_role6414Invalid attribute name "getNodeQueryStage"
    conventionopenzwave.nodeZWaveNode.isReady859openzwave.controllerZWaveController.begin_command_receive_configuration6584Invalid attribute name "isReady"
    conventionopenzwave.nodeZWaveNode.isReady869openzwave.controllerZWaveController.begin_command_assign_return_route6694Invalid attribute name "isReady"
    conventionopenzwave.nodeZWaveNode.isNodeInfoReceived881openzwave.controllerZWaveController.begin_command_delete_all_return_routes6844Invalid attribute name "isNodeInfoReceived"
    refactoropenzwave.nodeZWaveNode490Too many public methods (53/20)
    conventionopenzwave.scene 2210Exactly one space required around assignment + ret={} + ^
    conventionopenzwave.scene 2270Exactly one space required around assignment + ret[key]=vals[key] + ^warningopenzwave.controllerZWaveController.zwcallback75112Used * or ** magic
    warningopenzwave.controllerZWaveController.zwcallback7538Used * or ** magic
    warningopenzwave.controllerZWaveController.to_dict7564Dangerous default value [] as argument
    refactoropenzwave.controllerZWaveController540Too many public methods (43/20)
    conventionopenzwave.scene 420Invalid constant name "logger"
    warningopenzwave.sceneZWaveScene.to_dict2114Dangerous default value [] as argument
    conventionopenzwave.controller 700Line too long (186/140)
    conventionopenzwave.controller 780Line too long (179/140)
    conventionopenzwave.controller 880Line too long (147/140)
    conventionopenzwave.controller 890Line too long (158/140)
    conventionopenzwave.controller 900Line too long (156/140)
    conventionopenzwave.controller 920Line too long (161/140)
    conventionopenzwave.controller 1710Line too long (141/140)
    conventionopenzwave.controller 7660Exactly one space required around assignment + ret=self.node.to_dict(extras=extras) + ^
    fatalopenzwave.controller 344Unable to import 'pydispatch'
    erroropenzwave.controller  39 0 No name 'PyStatDriver' in module 'libopenzwave' 15 Instance of 'ZWaveNodeBasic' has no 'get_values' member
    430Invalid constant name "logger"
    erroropenzwave.commandZWaveNodeBasic.get_battery_level29023Instance of 'ZWaveNodeBasic' has no 'values' member
    erroropenzwave.commandZWaveNodeBasic.get_battery_level29219Instance of 'ZWaveNodeBasic' has no 'values' member
    erroropenzwave.commandZWaveNodeBasic.get_battery_levels31015Instance of 'ZWaveNodeBasic' has no 'get_values' member
    erroropenzwave.commandZWaveNodeBasic.get_power_level32523Instance of 'ZWaveNodeBasic' has no 'values' member
    erroropenzwave.commandZWaveNodeBasic.get_power_level32719Instance of 'ZWaveNodeBasic' has no 'values' member
    erroropenzwave.commandZWaveNodeBasic.get_power_levels34515Instance of 'ZWaveNodeBasic' has no 'get_values' member
    error openzwave.command 644 15 Instance of 'ZWaveNodeSecurity' has no 'get_values' member
    error
    refactor pyozwweb.app.socket.chat 10Similar lines in 3 files -==openzwave.group:25 -==openzwave.scene:25 -==openzwave.value:25 -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -from openzwave.object import ZWaveObject - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - """NullHandler logger for python 2.6""" - def emit(self, record): - pass -logger = logging.getLogger('openzwave') -logger.addHandler(NullHandler()) - 10Similar lines in 3 files +==openzwave.group:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject + +# Set default logging handler to avoid "No handler found" warnings. +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:28 +==pyozwman.ozwsh_widgets:27 +__author__ = 'bibi21000' + +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from select import select +import sys +import os +import urwid +from urwid.raw_display import Screen
    refactorpyozwweb.app.socket.chat 710Exactly one space required around comparison + if pos &gt;= 0 and pos &lt; self.size and len(self.lines)&gt;0: + ^Similar lines in 9 files +==openzwave.command:34 +==openzwave.controller:42 +==openzwave.group:33 +==openzwave.network:52 +==openzwave.node:37 +==openzwave.object:31 +==openzwave.option:37 +==openzwave.scene:33 +==openzwave.value:33 +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logger = logging.getLogger('openzwave') +logger.addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwman.ozwsh_main:46 +==pyozwman.ozwsh_widgets:40 +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption
    conventionpyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==openzwave.network:25 +==openzwave.option:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os
    refactorpyozwweb.app.socket.chat 800Exactly one space required after comma + line,pos = self._get_at_pos(self.focus) + ^Similar lines in 2 files +==openzwave.network:616 +==openzwave.node:204 + if 'kvals' in extras and self.network.dbcon is not None: + vals = self.kvals + for key in vals.keys(): + ret[key]=vals[key] + return ret +
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==openzwave.group:25 +==openzwave.node:25 +==openzwave.scene:25 +==openzwave.value:25 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +from openzwave.object import ZWaveObject
    conventionpyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat 1310No space allowed before comma + self.lines.append(urwid.Text("Help" , align='left')) + ^
    conventionpyozwman.ozwsh_widgets 1760No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 1790No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 2030Exactly one space required after comma + def path(self,value): + ^
    conventionpyozwman.ozwsh_widgets 2560Exactly one space required after assignment + self.walker =StatTree(window, parent.walker, self) + ^
    conventionpyozwman.ozwsh_widgets 2640No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 2650Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 2660Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 2670Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 2680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 2720Wrong continued indentation. + 'name':'stats', + ^ |
    conventionpyozwman.ozwsh_widgets 2730Wrong continued indentation. + 'help':'statistics', + ^ |
    conventionpyozwman.ozwsh_widgets 2740Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 2750No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 2760Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 2860No space allowed after bracket + self.lines.append(urwid.Text( " Statistics", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 2880No space allowed after bracket + self.lines.append(urwid.Text( " Frames processed: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2910No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully received: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2940No space allowed after bracket + self.lines.append(urwid.Text( " [Device] Messages successfully sent: . . . . . . . . . .%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 2970No space allowed after bracket + self.lines.append(urwid.Text( " ACKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3000No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts read: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3030No space allowed after bracket + self.lines.append(urwid.Text( " Number of broadcasts sent: . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3060No space allowed after bracket + self.lines.append(urwid.Text( " Queue:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3080No space allowed after bracket + self.lines.append(urwid.Text( " Messages in queue: . . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3110No space allowed after bracket + self.lines.append(urwid.Text( " Errors:", align='left')) + ^
    conventionpyozwman.ozwsh_widgets 3130No space allowed after bracket + self.lines.append(urwid.Text( " Unsolicited messages received while waiting for ACK: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3160No space allowed after bracket + self.lines.append(urwid.Text( " Reads aborted due to timeouts: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3190No space allowed after bracket + self.lines.append(urwid.Text( " Bad checksum errors: . . . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3220No space allowed after bracket + self.lines.append(urwid.Text( " CANs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3250No space allowed after bracket + self.lines.append(urwid.Text( " NAKs received from controller: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3280No space allowed after bracket + self.lines.append(urwid.Text( " Out of frame data flow errors: . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3310No space allowed after bracket + self.lines.append(urwid.Text( " Messages retransmitted: . . . . . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3340No space allowed after bracket + self.lines.append(urwid.Text( " Messages dropped and not delivered: . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3370No space allowed after bracket + self.lines.append(urwid.Text( " Number of unexpected callbacks: . . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3400No space allowed after bracket + self.lines.append(urwid.Text( " Number of failed messages due to bad route response: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3430No space allowed after bracket + self.lines.append(urwid.Text( " Number of no ACK returned errors: . . . . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3460No space allowed after bracket + self.lines.append(urwid.Text( " Number of network busy/failure messages: . . . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3490No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages not delivered to network: . . . . . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3520No space allowed after bracket + self.lines.append(urwid.Text( " Number of messages received with routed busy status: . . %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 3760No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 3770Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 3780Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 3790Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 3800Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3860Wrong continued indentation. + 'name':'groups', + | ^
    conventionpyozwman.ozwsh_widgets 3870Wrong continued indentation. + 'help':'Groups/Associations management', + | ^
    conventionpyozwman.ozwsh_widgets 3880Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 3890Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 3900No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 4260No space allowed before : + for group in groups : + ^
    conventionpyozwman.ozwsh_widgets 4280No space allowed after bracket + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4280Exactly one space required after comma + self.lines.append(urwid.Text( " %s:%s" % (groups[group].index,groups[group].label), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 4330Wrong continued indentation. + )) + ^ |
    conventionpyozwman.ozwsh_widgets 4490No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 4690No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4810No space allowed before : + if value in self.window.network.nodes[self.node_id].groups : + ^
    conventionpyozwman.ozwsh_widgets 4850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4860Exactly one space required after comma + self.window.status_bar.update(status="Can't find node %s in group %s" % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 4880No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 4920No space allowed before bracket +class AssociationItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 4940No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 5000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 5090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 5130No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5240No space allowed after bracket + self.childrens = { 'controller' : {'id':'ctl', + ^
    conventionpyozwman.ozwsh_widgets 5250Wrong continued indentation. + 'name':'Controller', + ^ |
    conventionpyozwman.ozwsh_widgets 5260Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 5270Wrong continued indentation. + 'widget_box' : None}, + ^ |
    conventionpyozwman.ozwsh_widgets 5280Wrong continued indentation. + 'scenes' : {'id':'scn', + ^ |
    conventionpyozwman.ozwsh_widgets 5320Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 5540No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5600No space allowed after bracket + self.lines.append(urwid.Text( " %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 5690No space allowed before bracket +class RootDir (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5710No space allowed before bracket + def __init__ (self, id=None, name=None, help=None): + ^
    conventionpyozwman.ozwsh_widgets 5760Wrong continued indentation. + urwid.Padding(urwid.AttrWrap(urwid.Text('%s' % id, wrap='clip'), 'body', 'focus'), left=2)), + | ^
    conventionpyozwman.ozwsh_widgets 5770Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5780Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5800No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 5830No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 5890No space allowed before bracket +class RootItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 5910No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1): + ^
    conventionpyozwman.ozwsh_widgets 5970Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5980Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 5990Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6000Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 6020No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 6050No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 6090Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 6160No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 6520No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 6530Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 6540Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 6550Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 6560Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6600Wrong continued indentation. + 'name':'nodes', + | ^
    conventionpyozwman.ozwsh_widgets 6610Wrong continued indentation. + 'help':'Nodes management', + | ^
    conventionpyozwman.ozwsh_widgets 6620Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 6630Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 6640No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 7190No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7220No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7310No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 7370No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 7400Exactly one space required around assignment + self.childrens['node']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 7420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 7480No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7490Exactly one space required after comma + cmd,val = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 7550Exactly one space required around assignment + val=True + ^
    conventionpyozwman.ozwsh_widgets 7570Exactly one space required around assignment + val=False + ^
    conventionpyozwman.ozwsh_widgets 7820No space allowed before bracket +class NodesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 7840No space allowed before bracket + def __init__ (self, id=0, name=None, location=None, signal=0, battery_level=-1, awaked=False): + ^
    conventionpyozwman.ozwsh_widgets 7900Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7910Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % location, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7920Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % signal, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7930Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % battery_level, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7940Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % awaked, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 7960No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 7990No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 8030Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8040Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Location", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8050Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Baud", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8060Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Battery", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8070Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Awaked", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 8110No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 8330No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 8340Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 8350Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 8360Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 8370Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 8440Wrong continued indentation. + 'name':'node', + ^ |
    conventionpyozwman.ozwsh_widgets 8450Wrong continued indentation. + 'help':'Node management', + ^ |
    conventionpyozwman.ozwsh_widgets 8460Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 8500No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 8510Exactly one space required after comma + parent.add_child("node",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 8710No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 9150No space allowed after bracket + self.lines.append(urwid.Text( " Baud rate = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9180No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9210No space allowed after bracket + self.lines.append(urwid.Text( " Neighbors = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9240No space allowed after bracket + self.lines.append(urwid.Text( " Groups = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 9270No space allowed before bracket + self.window.log.info("NodeTree num groups = %s" % self.window.network.nodes[self.key].num_groups ) + ^
    conventionpyozwman.ozwsh_widgets 9440No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 9500Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.key=directory + ^
    conventionpyozwman.ozwsh_widgets 9510Exactly one space required around assignment + self.childrens[directory]['widget_box'].walker.node_id=self.key + ^
    conventionpyozwman.ozwsh_widgets 9710No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 9720Wrong continued indentation. + 'name':'..', + ^ |
    conventionpyozwman.ozwsh_widgets 9730Wrong continued indentation. + 'help':'Go to previous directory', + ^ |
    conventionpyozwman.ozwsh_widgets 9740Wrong continued indentation. + 'widget_box' : None} + ^ |
    conventionpyozwman.ozwsh_widgets 9750Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 9820Wrong continued indentation. + 'name':'controller', + ^ |
    conventionpyozwman.ozwsh_widgets 9830Wrong continued indentation. + 'help':'Controller management', + ^ |
    conventionpyozwman.ozwsh_widgets 9840Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 9850No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 9860Exactly one space required after comma + parent.add_child(self._path,self.definition) + ^
    conventionpyozwman.ozwsh_widgets 10270No space allowed before bracket + if param in ['name', 'location', 'product_name', 'manufacturer_name' ]: + ^
    conventionpyozwman.ozwsh_widgets 10510No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10520Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10590No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10660Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10710No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10730No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10790No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10800Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10850No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 10870No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 10930No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10940Exactly one space required after comma + cmd,node = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_widgets 10990No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 11010No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 11520No space allowed after bracket + self.lines.append(urwid.Text( " Capabilities = %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11570No space allowed after bracket + self.lines.append(urwid.Text( " Device=%s" % \ + ^
    conventionpyozwman.ozwsh_widgets 11820No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 11830Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 11840Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 11850Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 11860Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11950Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 11970Wrong continued indentation. + 'name':'Basic', + ^|
    conventionpyozwman.ozwsh_widgets 11980Wrong continued indentation. + 'help':'Basic values management', + ^|
    conventionpyozwman.ozwsh_widgets 11990Wrong continued indentation. + 'widget_box': self.widget_box + ^|
    conventionpyozwman.ozwsh_widgets 12000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12020Wrong continued indentation. + 'name':'Config', + ^ |
    conventionpyozwman.ozwsh_widgets 12030Wrong continued indentation. + 'help':'Config values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12040Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12050Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12070Wrong continued indentation. + 'name':'System', + ^ |
    conventionpyozwman.ozwsh_widgets 12080Wrong continued indentation. + 'help':'System values management', + ^ |
    conventionpyozwman.ozwsh_widgets 12090Wrong continued indentation. + 'widget_box': self.widget_box + ^ |
    conventionpyozwman.ozwsh_widgets 12100Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12120Wrong continued indentation. + 'name':'All', + |^
    conventionpyozwman.ozwsh_widgets 12130Wrong continued indentation. + 'help':'All values management', + |^
    conventionpyozwman.ozwsh_widgets 12140Wrong continued indentation. + 'widget_box': self.widget_box + |^
    conventionpyozwman.ozwsh_widgets 12150Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 12160No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 12560No space allowed before : + for cmd in values : + ^
    conventionpyozwman.ozwsh_widgets 12570Line too long (148/140)
    conventionpyozwman.ozwsh_widgets 12570No space allowed after bracket + self.lines.append(urwid.Text( " %s" % (self.window.network.nodes[self.node_id].get_command_class_as_string(cmd)), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 12840No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 13080No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13150No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 13160Exactly one space required after comma + self.window.status_bar.update(status='Value %s added to scene %s' % (value,param)) + ^
    conventionpyozwman.ozwsh_widgets 13180No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13330No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13440No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13450Exactly one space required around assignment + values[param].data=newval + ^
    conventionpyozwman.ozwsh_widgets 13480No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13510No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13660No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 13700No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 13720No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 13740No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 13750Exactly one space required after comma + self.window.log.info("poll %s to %s" %(param,newval)) + ^
    conventionpyozwman.ozwsh_widgets 13780No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13800Exactly one space required after comma + self.window.status_bar.update(status='Value %s polled to %s' % (param,value)) + ^
    conventionpyozwman.ozwsh_widgets 13820No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 13850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14000No space allowed before bracket +class ValuesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 14020No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False, polled=False): + ^
    conventionpyozwman.ozwsh_widgets 14050No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 14070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 14120Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14150Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 14160Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14170Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 14190No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 14220No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 14260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14280Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14290Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14300Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14310Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 14350No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 14570No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 14580Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 14590Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 14600Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 14610Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14650Wrong continued indentation. + 'name':'switches', + | ^
    conventionpyozwman.ozwsh_widgets 14660Wrong continued indentation. + 'help':'All switches on the network', + | ^
    conventionpyozwman.ozwsh_widgets 14670Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 14680Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 14690No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 15010No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 15030No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 15040Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 15040No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15040Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 15290No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15400Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 15480Exactly one space required after comma + self.window.log.info("SwitchesTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 15530No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 15540Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15580No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 15610Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 15630No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15660No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 15860No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 15870Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 15880Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 15890Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 15900Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15940Wrong continued indentation. + 'name':'dimmers', + | ^
    conventionpyozwman.ozwsh_widgets 15950Wrong continued indentation. + 'help':'All dimmers on the network', + | ^
    conventionpyozwman.ozwsh_widgets 15960Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 15970Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 15980No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 16310No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 16330No space allowed before : + if len(switches) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 16340Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 16340No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16340Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 16590No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16700Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 16820No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 16830Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16870No space allowed before : + if newval != None : + ^
    conventionpyozwman.ozwsh_widgets 16890No space allowed before : + if not values[switch].is_polled : + ^
    conventionpyozwman.ozwsh_widgets 16910Exactly one space required after comma + self.window.network.nodes[node].set_dimmer(switch,newval) + ^
    conventionpyozwman.ozwsh_widgets 16920Exactly one space required after comma + self.window.status_bar.update(status='Value %s on node %s updated' % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 16940No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 16970No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 17010No space allowed before bracket +class SwitchesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 17030No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All'): + ^
    conventionpyozwman.ozwsh_widgets 17100Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17110Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17120Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 17130Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 17160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 17190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 17230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17240Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17250Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17260Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17270Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 17310No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 17530No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 17540Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 17550Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 17560Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 17570Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17610Wrong continued indentation. + 'name':'sensors', + | ^
    conventionpyozwman.ozwsh_widgets 17620Wrong continued indentation. + 'help':'All sensors on the network', + | ^
    conventionpyozwman.ozwsh_widgets 17630Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 17640Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 17650No space allowed before : + if parent != None : + ^
    conventionpyozwman.ozwsh_widgets 17980No space allowed before : + for node in self.window.network.nodes : + ^
    conventionpyozwman.ozwsh_widgets 18000No space allowed before : + if len(sensors) != 0 : + ^
    conventionpyozwman.ozwsh_widgets 18010Line too long (161/140)
    conventionpyozwman.ozwsh_widgets 18010No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18010Exactly one space required after comma + self.lines.append(urwid.Text( " %s - %s" % (self.window.network.nodes[node].node_id,self.window.network.nodes[node].name), align='left')) + ^
    conventionpyozwman.ozwsh_widgets 18270No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 18350No space allowed before bracket +class SensorsItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 18370No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', units="", polled=0): + ^
    conventionpyozwman.ozwsh_widgets 18440Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18450Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18460Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18470Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 18480Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % units, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % polled, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 18510No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 18540No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 18580Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18590Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18600Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18610Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Units", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Polled", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 18670No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 18900No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 18910Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 18920Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 18930Wrong continued indentation. + 'widget_box' : None}, + |^
    conventionpyozwman.ozwsh_widgets 18940Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 18990Wrong continued indentation. + 'name':'scene', + ^ |
    conventionpyozwman.ozwsh_widgets 19000Wrong continued indentation. + 'help':'Scene management', + ^ |
    conventionpyozwman.ozwsh_widgets 19010Wrong continued indentation. + 'widget_box': self.widget_box} + ^ |
    conventionpyozwman.ozwsh_widgets 19050No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 19060Exactly one space required after comma + parent.add_child("scene",self.definition) + ^
    conventionpyozwman.ozwsh_widgets 19190No space allowed after bracket + self.lines.append(urwid.Text( " %s - %s" % \ + ^
    conventionpyozwman.ozwsh_widgets 19460No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19630Exactly one space required after comma + node,switch = value.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19710No space allowed before : + if not ok : + ^
    warningpyozwman.ozwsh_widgets 19750Bad indentation. Found 20 spaces, expected 16
    warningpyozwman.ozwsh_widgets 19760Bad indentation. Found 20 spaces, expected 16
    conventionpyozwman.ozwsh_widgets 19770No space allowed before : + if self.window.network.get_scenes()[self.key].remove_value(valueid) : + ^
    conventionpyozwman.ozwsh_widgets 19800No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19870Exactly one space required after comma + node,switch = param.split(':',1) + ^
    conventionpyozwman.ozwsh_widgets 19950Exactly one space required after comma + self.window.log.info("SceneTree set %s val %s" % (node,val)) + ^
    conventionpyozwman.ozwsh_widgets 20000No space allowed before : + if not ok : + ^
    conventionpyozwman.ozwsh_widgets 20010Exactly one space required after comma + self.window.status_bar.update(status="Invalid label %s on node %s" % (switch,node)) + ^
    conventionpyozwman.ozwsh_widgets 20040No space allowed before : + if switch in scene.get_values() : + ^
    conventionpyozwman.ozwsh_widgets 20130No space allowed before : + if new_val != None : + ^
    conventionpyozwman.ozwsh_widgets 20140No space allowed before : + if scene.set_value(switch, new_val) : + ^
    conventionpyozwman.ozwsh_widgets 20170No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20200No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20230No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20370No space allowed before bracket +class SceneItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 20390No space allowed before bracket + def __init__ (self, id=0, name=None, help=None, value=0, type='All', selection='All', read_only=False): + ^
    conventionpyozwman.ozwsh_widgets 20420No space allowed before : + if read_only : + ^
    conventionpyozwman.ozwsh_widgets 20440No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 20490Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20500Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % help, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20510Wrong hanging indentation. + value_widget, + | ^
    conventionpyozwman.ozwsh_widgets 20520Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % type, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20530Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % selection, wrap='space'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 20550No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 20580No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 20620Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Label", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20630Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Help", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20640Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Value", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20650Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Type", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20660Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Items", wrap='clip'), 'node_header'), + | ^
    conventionpyozwman.ozwsh_widgets 20700No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 20960No space allowed after bracket + self.childrens = { '..' : {'id':'..', + ^
    conventionpyozwman.ozwsh_widgets 20970Wrong continued indentation. + 'name':'..', + |^
    conventionpyozwman.ozwsh_widgets 20980Wrong continued indentation. + 'help':'Go to previous directory', + |^
    conventionpyozwman.ozwsh_widgets 20990Wrong continued indentation. + 'widget_box' : None} + |^
    conventionpyozwman.ozwsh_widgets 21000Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21040Wrong continued indentation. + 'name':'scenes', + | ^
    conventionpyozwman.ozwsh_widgets 21050Wrong continued indentation. + 'help':'Scenes management', + | ^
    conventionpyozwman.ozwsh_widgets 21060Wrong continued indentation. + 'widget_box': self.widget_box + | ^
    conventionpyozwman.ozwsh_widgets 21070Wrong continued indentation. + } + ^ |
    conventionpyozwman.ozwsh_widgets 21080No space allowed before : + if parent != None and self.definition != None : + ^
    conventionpyozwman.ozwsh_widgets 21390No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21420No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21510No space allowed before : + if self.exist(directory) : + ^
    conventionpyozwman.ozwsh_widgets 21570No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21600Exactly one space required around assignment + self.childrens['scene']['widget_box'].walker.key=int(directory) + ^
    conventionpyozwman.ozwsh_widgets 21620No space allowed before : + except : + ^
    conventionpyozwman.ozwsh_widgets 21670Exactly one space required around comparison + if self.window.network.create_scene(value)&gt;0: + ^
    conventionpyozwman.ozwsh_widgets 21700No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21750No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21820No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21850No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 21900No space allowed before : + try : + ^
    conventionpyozwman.ozwsh_widgets 21970No space allowed before : + if ret : + ^
    conventionpyozwman.ozwsh_widgets 21990No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22020No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_widgets 22060No space allowed before bracket +class ScenesItem (urwid.WidgetWrap): + ^
    conventionpyozwman.ozwsh_widgets 22080No space allowed before bracket + def __init__ (self, id=0, name=None): + ^
    conventionpyozwman.ozwsh_widgets 22140Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % name, wrap='clip'), 'body'), + | ^
    conventionpyozwman.ozwsh_widgets 22160No space allowed before bracket + w = urwid.Columns(self.item, dividechars=1 ) + ^
    conventionpyozwman.ozwsh_widgets 22190No space allowed before bracket + def get_header (self): + ^
    conventionpyozwman.ozwsh_widgets 22230Wrong hanging indentation. + urwid.AttrWrap(urwid.Text('%s' % "Name", wrap='clip'), 'scene_header'), + | ^
    conventionpyozwman.ozwsh_widgets 22270No space allowed before bracket + def selectable (self): + ^
    conventionpyozwman.ozwsh_widgets 10Too many lines in module (2231/1000)
    conventionpyozwman.ozwsh_widgetsOldestTree500Missing class docstring
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many instance attributes (12/7)
    warningpyozwman.ozwsh_widgetsOldestTree.__init__6220Unused variable 'oldfocus'
    conventionpyozwman.ozwsh_widgetsOldestTree.add_child654Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree._get_at_pos704Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_nodeid764Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_id794Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.get_id8013Unused variable 'pos'
    conventionpyozwman.ozwsh_widgetsOldestTree.get_focus_entry864Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.set_focus894Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_first1014Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.go_last1044Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.read_lines1074Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_directories1184Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.show_help1284Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.refresh1394Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected1444Missing method docstring
    conventionpyozwman.ozwsh_widgetsOldestTree.get_selected14612Invalid variable name "x"
    conventionpyozwman.ozwsh_widgetsOldestTree.ls1664Invalid method name "ls"
    warningpyozwman.ozwsh_widgetsOldestTree.ls16617Unused argument 'opts'
    conventionpyozwman.ozwsh_widgetsOldestTree.cd1724Invalid method name "cd"
    conventionpyozwman.ozwsh_widgetsOldestTree.set2124Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.set21218Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.set21225Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.poll2164Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.poll21619Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.poll21626Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.add2204Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.add22018Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.add22025Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.remove2244Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.remove22421Unused argument 'param'
    warningpyozwman.ozwsh_widgetsOldestTree.remove22428Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.reset2284Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.reset22820Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.create2324Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.create23221Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.delete2364Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.delete23621Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.activate2404Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.activate24023Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsOldestTree.send2444Missing method docstring
    warningpyozwman.ozwsh_widgetsOldestTree.send24419Unused argument 'value'
    warningpyozwman.ozwsh_widgetsOldestTree.path2108Attribute '_path' defined outside __init__
    refactorpyozwman.ozwsh_widgetsOldestTree500Too many public methods (30/20)
    warningpyozwman.ozwsh_widgetsStatBox.__init__2524__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsStatBox.__init__2578Instance of 'StatBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsStatTree2600Missing class docstring
    refactorpyozwman.ozwsh_widgetsStatTree.read_lines2784Too many statements (54/50)
    warningpyozwman.ozwsh_widgetsGroupsBox.__init__3614__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsGroupsBox.__init__3668Instance of 'GroupsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsGroupsTree3680Missing class docstring
    refactorpyozwman.ozwsh_widgetsGroupsTree3680Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted3994Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_resetted39938Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready4044Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_network_ready40435Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsGroupsTree._louie_node_update4104Missing method docstring
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41042Unused argument 'node'
    warningpyozwman.ozwsh_widgetsGroupsTree._louie_node_update41033Unused argument 'network'
    warningpyozwman.ozwsh_widgetsGroupsTree.add4628No exception type(s) specified
    warningpyozwman.ozwsh_widgetsGroupsTree.remove4778No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__4958Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsAssociationItem4920Missing class docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__49424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsAssociationItem.__init__4944__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsAssociationItem.__init__5028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsAssociationItem.__init__5038Instance of 'AssociationItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsAssociationItem.get_header5054Missing method docstring
    conventionpyozwman.ozwsh_widgetsAssociationItem.keypress5164Missing method docstring
    warningpyozwman.ozwsh_widgetsAssociationItem.keypress51623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsAssociationItem.keypress5164Method could be a function
    conventionpyozwman.ozwsh_widgetsRootTree5190Missing class docstring
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_ready5394Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_ready53935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootTree._louie_network_resetted5444Missing method docstring
    warningpyozwman.ozwsh_widgetsRootTree._louie_network_resetted54438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5728Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootDir5690Missing class docstring
    warningpyozwman.ozwsh_widgetsRootDir.__init__57144Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsRootDir.__init__57124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootDir.__init__5714__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootDir.__init__5808Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootDir.__init__5818Instance of 'RootDir' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootDir.keypress5864Missing method docstring
    warningpyozwman.ozwsh_widgetsRootDir.keypress58623Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootDir.keypress5864Method could be a function
    conventionpyozwman.ozwsh_widgetsRootItem.__init__5928Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsRootItem5890Missing class docstring
    warningpyozwman.ozwsh_widgetsRootItem.__init__59124Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsRootItem.__init__5914__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsRootItem.__init__6028Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsRootItem.__init__6038Instance of 'RootItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsRootItem.get_header6054Missing method docstring
    conventionpyozwman.ozwsh_widgetsRootItem.keypress6194Missing method docstring
    warningpyozwman.ozwsh_widgetsRootItem.keypress61923Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsRootItem.keypress6194Method could be a function
    warningpyozwman.ozwsh_widgetsRootBox.__init__6264__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsRootBox.__init__6318Instance of 'RootBox' has no '__super' member
    warningpyozwman.ozwsh_widgetsNodesBox.__init__6374__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodesBox.__init__6428Instance of 'NodesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesTree6440Missing class docstring
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted6714Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_resetted67138Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_network_ready6764Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_network_ready67635Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodesTree._louie_node_update6884Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68842Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodesTree._louie_node_update68833Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodesTree.exist7228No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.cd74212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsNodesTree.send74916Unused variable 'cmd'
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7858Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsNodesItem7820Missing class docstring
    warningpyozwman.ozwsh_widgetsNodesItem.__init__78424Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsNodesItem.__init__7844__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsNodesItem.__init__7968Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsNodesItem.__init__7978Instance of 'NodesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodesItem.get_header7994Missing method docstring
    conventionpyozwman.ozwsh_widgetsNodesItem.keypress8144Missing method docstring
    warningpyozwman.ozwsh_widgetsNodesItem.keypress81423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsNodesItem.keypress8144Method could be a function
    warningpyozwman.ozwsh_widgetsNodeBox.__init__8214__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsNodeBox.__init__8268Instance of 'NodeBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsNodeTree8290Missing class docstring
    refactorpyozwman.ozwsh_widgetsNodeTree8290Too many instance attributes (8/7)
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted8564Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_resetted85638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_network_ready8614Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_network_ready86135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsNodeTree._louie_node_update8674Missing method docstring
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsNodeTree._louie_node_update86733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsNodeTree.read_lines8968Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsControllerBox.__init__9594__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsControllerBox.__init__9648Instance of 'ControllerBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsControllerTree9670Missing class docstring
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted10044Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_resetted100438Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_network_ready10094Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_network_ready100935Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsControllerTree._louie_node_update10174Missing method docstring
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101742Unused argument 'node'
    warningpyozwman.ozwsh_widgetsControllerTree._louie_node_update101733Unused argument 'network'
    warningpyozwman.ozwsh_widgetsControllerTree.send105912No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send107312No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send108712No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send110112No exception type(s) specified
    warningpyozwman.ozwsh_widgetsControllerTree.send105216Unused variable 'cmd'
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many return statements (19/6)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many branches (22/12)
    refactorpyozwman.ozwsh_widgetsControllerTree.send10454Too many statements (57/50)
    warningpyozwman.ozwsh_widgetsControllerTree.read_lines11318Attribute 'edit_fields' defined outside __init__
    warningpyozwman.ozwsh_widgetsValuesBox.__init__11664__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsValuesBox.__init__11718Instance of 'ValuesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesTree11740Missing class docstring
    refactorpyozwman.ozwsh_widgetsValuesTree11740Too many instance attributes (13/7)
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_ready12304Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_ready123035Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted12364Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_network_resetted123638Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsValuesTree._louie_value_update12414Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124143Unused argument 'node'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124134Unused argument 'network'
    warningpyozwman.ozwsh_widgetsValuesTree._louie_value_update124149Unused argument 'value'
    warningpyozwman.ozwsh_widgetsValuesTree.add12998No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.add13028Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.add130616Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.add130716Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.set13268No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.set132712Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.set133120Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.set133220Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll13598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136012Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsValuesTree.poll136420Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsValuesTree.poll136520Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsValuesTree.poll137212No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14038Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsValuesItem14000Missing class docstring
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140241Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140261Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__140224Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsValuesItem.__init__14024__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsValuesItem.__init__14198Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsValuesItem.__init__14208Instance of 'ValuesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsValuesItem.get_header14224Missing method docstring
    conventionpyozwman.ozwsh_widgetsValuesItem.keypress14384Missing method docstring
    warningpyozwman.ozwsh_widgetsValuesItem.keypress143823Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsValuesItem.keypress14384Method could be a function
    warningpyozwman.ozwsh_widgetsSwitchesBox.__init__14454__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSwitchesBox.__init__14508Instance of 'SwitchesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesTree14520Missing class docstring
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted14774Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_resetted147738Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready14824Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_network_ready148235Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update14864Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_value_update148649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update14894Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSwitchesTree._louie_node_update148933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSwitchesTree.set15428No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set15468Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSwitchesTree.set155116Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSwitchesTree.set155216Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsDimmersBox.__init__15744__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsDimmersBox.__init__15798Instance of 'DimmersBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsDimmersTree15810Missing class docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_resetted16064Missing method docstring
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready16114Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_network_ready161135Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_value_update16164Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161643Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161634Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_value_update161649Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsDimmersTree._louie_node_update16194Missing method docstring
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161942Unused argument 'node'
    warningpyozwman.ozwsh_widgetsDimmersTree._louie_node_update161933Unused argument 'network'
    warningpyozwman.ozwsh_widgetsDimmersTree.set16728No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsDimmersTree.set16768Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsDimmersTree.set168016Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsDimmersTree.set168116Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17048Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSwitchesItem17010Missing class docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170341Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170361Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__170324Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSwitchesItem.__init__17034__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSwitchesItem.__init__17168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSwitchesItem.__init__17178Instance of 'SwitchesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSwitchesItem.get_header17194Missing method docstring
    conventionpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Missing method docstring
    warningpyozwman.ozwsh_widgetsSwitchesItem.keypress173423Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSwitchesItem.keypress17344Method could be a function
    warningpyozwman.ozwsh_widgetsSensorsBox.__init__17414__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSensorsBox.__init__17468Instance of 'SensorsBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsTree17480Missing class docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_resetted17734Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready17784Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_network_ready177835Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_value_update17834Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178343Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178334Unused argument 'network'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_value_update178349Unused argument 'value'
    conventionpyozwman.ozwsh_widgetsSensorsTree._louie_node_update17864Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178642Unused argument 'node'
    warningpyozwman.ozwsh_widgetsSensorsTree._louie_node_update178633Unused argument 'network'
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18388Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSensorsItem18350Missing class docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183741Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183761Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__183724Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSensorsItem.__init__18374__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSensorsItem.__init__18518Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSensorsItem.__init__18528Instance of 'SensorsItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSensorsItem.get_header18544Missing method docstring
    conventionpyozwman.ozwsh_widgetsSensorsItem.keypress18704Missing method docstring
    warningpyozwman.ozwsh_widgetsSensorsItem.keypress187023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSensorsItem.keypress18704Method could be a function
    warningpyozwman.ozwsh_widgetsSceneBox.__init__18774__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsSceneBox.__init__18828Instance of 'SceneBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneTree18850Missing class docstring
    refactorpyozwman.ozwsh_widgetsSceneTree18850Too many instance attributes (8/7)
    warningpyozwman.ozwsh_widgetsSceneTree.delete19598No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196012Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197412No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.delete196924Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.delete197024Statement seems to have no effect
    warningpyozwman.ozwsh_widgetsSceneTree.delete196321Unused variable 'switch'
    warningpyozwman.ozwsh_widgetsSceneTree.set19898No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsSceneTree.set19938Invalid variable name "ok"
    conventionpyozwman.ozwsh_widgetsSceneTree.set199816Invalid variable name "ok"
    warningpyozwman.ozwsh_widgetsSceneTree.set199916Statement seems to have no effect
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20408Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsSceneItem20370Missing class docstring
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203941Redefining built-in 'help'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203961Redefining built-in 'type'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__203924Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsSceneItem.__init__20394__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsSceneItem.__init__20558Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsSceneItem.__init__20568Instance of 'SceneItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsSceneItem.get_header20584Missing method docstring
    conventionpyozwman.ozwsh_widgetsSceneItem.keypress20734Missing method docstring
    warningpyozwman.ozwsh_widgetsSceneItem.keypress207323Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsSceneItem.keypress20734Method could be a function
    warningpyozwman.ozwsh_widgetsScenesBox.__init__20814__init__ method from base class 'ListBox' is not called
    errorpyozwman.ozwsh_widgetsScenesBox.__init__20868Instance of 'ScenesBox' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesTree20880Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesTree.exist21428No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.cd216212No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.delete21778No exception type(s) specified
    warningpyozwman.ozwsh_widgetsScenesTree.activate21928No exception type(s) specified
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22098Invalid attribute name "id"
    conventionpyozwman.ozwsh_widgetsScenesItem22060Missing class docstring
    warningpyozwman.ozwsh_widgetsScenesItem.__init__220824Redefining built-in 'id'
    warningpyozwman.ozwsh_widgetsScenesItem.__init__22084__init__ method from base class 'WidgetWrap' is not called
    conventionpyozwman.ozwsh_widgetsScenesItem.__init__22168Invalid variable name "w"
    errorpyozwman.ozwsh_widgetsScenesItem.__init__22178Instance of 'ScenesItem' has no '__super' member
    conventionpyozwman.ozwsh_widgetsScenesItem.get_header22194Missing method docstring
    conventionpyozwman.ozwsh_widgetsScenesItem.keypress22304Missing method docstring
    warningpyozwman.ozwsh_widgetsScenesItem.keypress223023Unused argument 'size'
    refactorpyozwman.ozwsh_widgetsScenesItem.keypress22304Method could be a function
    warningpyozwman.ozwsh_widgets 350Unused select imported from select
    warningpyozwman.ozwsh_widgets 360Unused import sys
    warningpyozwman.ozwsh_widgets 370Unused import os
    warningpyozwman.ozwsh_widgets 390Unused Screen imported from urwid.raw_display
    warningpyozwman.ozwsh_widgets 400Unused format_exc imported from traceback
    warningpyozwman.ozwsh_widgets 410Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_widgets 420Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_widgets 430Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_widgets 440Unused ZWaveController imported from openzwave.controller
    warningpyozwman.ozwsh_widgets 460Unused ZWaveOption imported from openzwave.option
    warningpyozwman.ozwsh_widgets 470Unused All imported from louie
    warningpyozwman.ozwsh_widgets 480Unused import logging
    conventionpyozwman.ozwsh_main 1720Wrong continued indentation. + ("keys", "dark blue", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1730Wrong continued indentation. + ("message", "light cyan", "dark green"), + ^ |
    conventionpyozwman.ozwsh_main 1740Wrong continued indentation. + ("linenr", "light blue", "dark cyan"), + ^ |
    conventionpyozwman.ozwsh_main 1750Wrong continued indentation. + ("input", "light gray", "black"), + ^ |
    conventionpyozwman.ozwsh_main 1760Wrong continued indentation. + ("input2", "dark red", "light gray"), + ^ |
    conventionpyozwman.ozwsh_main 1770Wrong continued indentation. + ("focus", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1780Wrong continued indentation. + ("dialog", "black", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1790Wrong continued indentation. + ("file", "light green", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1800Wrong continued indentation. + ("errortxt", "dark red", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1810Wrong continued indentation. + ("selectedfile", "yellow", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1820Wrong continued indentation. + ("selectedfocus", "yellow", "light gray", "bold"), + ^ |
    conventionpyozwman.ozwsh_main 1830Wrong continued indentation. + ("dir", "light gray", "dark blue"), + ^ |
    conventionpyozwman.ozwsh_main 1840Wrong continued indentation. + ("fileedit", "light green", "dark red"), + ^ |
    conventionpyozwman.ozwsh_main 1850Wrong continued indentation. + ('edit', 'yellow', 'dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1860Wrong continued indentation. + ('body','default', 'default'), + ^ |
    conventionpyozwman.ozwsh_main 1860Exactly one space required after comma + ('body','default', 'default'), + ^
    conventionpyozwman.ozwsh_main 1870Wrong continued indentation. + ('foot','dark cyan', 'dark blue', 'bold'), + ^ |
    conventionpyozwman.ozwsh_main 1870Exactly one space required after comma + ('foot','dark cyan', 'dark blue', 'bold'), + ^
    conventionpyozwman.ozwsh_main 1880Wrong continued indentation. + ('shadow','white','black'), + ^ |
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1880Exactly one space required after comma + ('shadow','white','black'), + ^
    conventionpyozwman.ozwsh_main 1890Wrong continued indentation. + ('border','black','dark blue'), + ^ |
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1890Exactly one space required after comma + ('border','black','dark blue'), + ^
    conventionpyozwman.ozwsh_main 1900Wrong continued indentation. + ('error','black','dark red'), + ^ |
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1900Exactly one space required after comma + ('error','black','dark red'), + ^
    conventionpyozwman.ozwsh_main 1910Wrong continued indentation. + ('FxKey','light cyan', 'dark blue', 'underline')] + ^ |
    conventionpyozwman.ozwsh_main 1910Exactly one space required after comma + ('FxKey','light cyan', 'dark blue', 'underline')] + ^
    conventionpyozwman.ozwsh_main 2340Exactly one space required after comma + def active_box(self,value): + ^
    conventionpyozwman.ozwsh_main 2640No space allowed before : + if command.startswith('ls') : + ^
    conventionpyozwman.ozwsh_main 2650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2660Exactly one space required after comma + cmd,options = command.split(' ') + ^
    conventionpyozwman.ozwsh_main 2730No space allowed before : + elif command.startswith('exit') : + ^
    conventionpyozwman.ozwsh_main 2750No space allowed before : + elif command.startswith('cd') : + ^
    conventionpyozwman.ozwsh_main 2760No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2770Exactly one space required after comma + cmd,path = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2870No space allowed before : + elif path == "/" : + ^
    conventionpyozwman.ozwsh_main 2960No space allowed before : + elif command.startswith('send') : + ^
    conventionpyozwman.ozwsh_main 2970No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 2980Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3030No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3100No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3120No space allowed before : + elif command.startswith('create') : + ^
    conventionpyozwman.ozwsh_main 3130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3140Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3190No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3260No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3280No space allowed before : + elif command.startswith('delete') : + ^
    conventionpyozwman.ozwsh_main 3290No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3300Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3350No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3420No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3440No space allowed before : + elif command.startswith('activate') : + ^
    conventionpyozwman.ozwsh_main 3450No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3460Exactly one space required after comma + cmd,value = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3510No space allowed before : + if len(value) == 0 : + ^
    conventionpyozwman.ozwsh_main 3580No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3600No space allowed before : + elif command.startswith('set') : + ^
    conventionpyozwman.ozwsh_main 3610No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3620Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3630No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3670Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3680No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3720Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3730No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 3810No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3830No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 3860No space allowed before : + elif command.startswith('poll') : + ^
    conventionpyozwman.ozwsh_main 3870No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3880Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3890No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3930Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3940No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3980Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 3990No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4070No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4090No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4120No space allowed before : + elif command.startswith('add') : + ^
    conventionpyozwman.ozwsh_main 4130No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4140Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4150No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4190Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4200No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4240Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4250No space allowed before : + if len(value) == 0 or to != "to" : + ^
    conventionpyozwman.ozwsh_main 4330No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4350No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4380No space allowed before : + elif command.startswith('remove') : + ^
    conventionpyozwman.ozwsh_main 4390No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4400Exactly one space required after comma + cmd,end = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4410No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4450Exactly one space required after comma + field,end = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4460No space allowed before : + if len(end) == 0 or ' ' not in end : + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4500Exactly one space required after comma + to,value = end.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4510No space allowed before : + if len(value) == 0 or to != "from" : + ^
    conventionpyozwman.ozwsh_main 4590No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4610No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 4640No space allowed before : + elif command.startswith('reset') : + ^
    conventionpyozwman.ozwsh_main 4650No space allowed before : + if ' ' in command : + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4660Exactly one space required after comma + cmd,state = command.split(' ',1) + ^
    conventionpyozwman.ozwsh_main 4680No space allowed before : + if len(state) == 0 : + ^
    conventionpyozwman.ozwsh_main 4750No space allowed before : + else : + ^
    conventionpyozwman.ozwsh_main 5080No space allowed around keyword argument assignment + kvals = False) + ^
    conventionpyozwman.ozwsh_mainStatusBar950Missing class docstring
    conventionpyozwman.ozwsh_mainStatusBar.update1104Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.get_command1164Missing method docstring
    conventionpyozwman.ozwsh_mainStatusBar.set_command1194Missing method docstring
    conventionpyozwman.ozwsh_mainHeaderBar1220Missing class docstring
    conventionpyozwman.ozwsh_mainHeaderBar.update1354Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow1390Missing class docstring
    refactorpyozwman.ozwsh_mainMainWindow1390Too many instance attributes (30/7)
    conventionpyozwman.ozwsh_mainMainWindow._define_log1534Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._define_screen1704Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow.exit2538Instance of 'ZWaveOption' has no 'destroy' member
    warningpyozwman.ozwsh_mainMainWindow.execute28516Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow.execute29116Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow.execute37216Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute39816Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute42416Invalid variable name "to"
    conventionpyozwman.ozwsh_mainMainWindow.execute45016Invalid variable name "to"
    warningpyozwman.ozwsh_mainMainWindow.execute26616Unused variable 'cmd'
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many return statements (48/6)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many branches (72/12)
    refactorpyozwman.ozwsh_mainMainWindow.execute2564Too many statements (171/50)
    conventionpyozwman.ozwsh_mainMainWindow._unhandled_input4824Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input49312Specify string format arguments as logging function parameters
    errorpyozwman.ozwsh_mainMainWindow._unhandled_input49812Instance of 'MainWindow' has no 'refresh_nodes' member
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input50112Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._start_network5034Missing method docstring
    errorpyozwman.ozwsh_mainMainWindow._start_network50523Unexpected keyword argument 'kvals' in constructor call
    errorpyozwman.ozwsh_mainMainWindow._start_network5148Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie5184Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_started5254Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5268Specify string format arguments as logging function parameters
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_resetted5324Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted53238Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_stopped5394Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped53937Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_awaked5454Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_network_ready5514Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5528Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5538Specify string format arguments as logging function parameters
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5558Unused variable 'wait_for_network'
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Invalid method name "_disconnect_louie_node_and_value"
    conventionpyozwman.ozwsh_mainMainWindow._disconnect_louie_node_and_value5604Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._connect_louie_node_and_value5674Missing method docstring
    conventionpyozwman.ozwsh_mainMainWindow._louie_node_update5744Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57442Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_node_update57433Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_value_update5774Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57743Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57734Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_value_update57749Unused argument 'value'
    conventionpyozwman.ozwsh_mainMainWindow._louie_group5804Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_group58036Unused argument 'node'
    warningpyozwman.ozwsh_mainMainWindow._louie_group58027Unused argument 'network'
    conventionpyozwman.ozwsh_mainMainWindow._louie_ctrl_message5834Missing method docstring
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58350Unused argument 'network'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58359Unused argument 'controller'
    warningpyozwman.ozwsh_mainMainWindow._louie_ctrl_message58334Unused argument 'state'
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48716Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._unhandled_input48916Attribute 'framefocus' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow.active_box2418Attribute '_active_box' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_started5288Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_resetted5348Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_stopped5418Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_awaked5478Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_mainMainWindow._louie_network_ready5548Attribute 'network' defined outside __init__
    warningpyozwman.ozwsh_main 360Unused select imported from select
    warningpyozwman.ozwsh_main 370Unused import sys
    warningpyozwman.ozwsh_main 380Unused import os
    warningpyozwman.ozwsh_main 440Unused format_exc imported from traceback
    warningpyozwman.ozwsh_main 470Unused ZWaveNode imported from openzwave.node
    warningpyozwman.ozwsh_main 480Unused ZWaveValue imported from openzwave.value
    warningpyozwman.ozwsh_main 490Unused ZWaveScene imported from openzwave.scene
    warningpyozwman.ozwsh_main 530Unused OldestTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootDir imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 540Unused RootTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 550Unused ControllerTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 560Unused NodeTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 570Unused NodesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 580Unused SensorsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 590Unused SwitchesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 600Unused DimmersTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 610Unused ValuesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused GroupsTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 620Unused AssociationItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 630Unused SceneTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 640Unused ScenesItem imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 650Unused StatTree imported from pyozwman.ozwsh_widgets
    warningpyozwman.ozwsh_main 670Unused All imported from louie
    conventionpyozwweb 10Missing module docstring
    warningpyozwweb 260No exception type(s) specified
    warningpyozwweb.shell 360Wildcard import flask
    warningpyozwweb.shell 370Wildcard import app
    warningpyozwweb.shell 370Relative import 'app', should be 'pyozwweb.app'
    warningpyozwweb.shell 330Unused import readline
    warningpyozwweb.shell 340Unused pprint imported from pprint
    warningpyozwweb.shell 360Unused import render_template_string from wildcard import
    warningpyozwweb.shell 360Unused import Flask from wildcard import
    warningpyozwweb.shell 360Unused import request from wildcard import
    warningpyozwweb.shell 360Unused import get_flashed_messages from wildcard import
    warningpyozwweb.shell 360Unused import Blueprint from wildcard import
    warningpyozwweb.shell 360Unused import send_from_directory from wildcard import
    warningpyozwweb.shell 360Unused import session from wildcard import
    warningpyozwweb.shell 360Unused import Module from wildcard import
    warningpyozwweb.shell 360Unused import escape from wildcard import
    warningpyozwweb.shell 360Unused import Config from wildcard import
    warningpyozwweb.shell 360Unused import render_template from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_pushed from wildcard import
    warningpyozwweb.shell 360Unused import redirect from wildcard import
    warningpyozwweb.shell 360Unused import request_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import after_this_request from wildcard import
    warningpyozwweb.shell 360Unused import current_app from wildcard import
    warningpyozwweb.shell 360Unused import json from wildcard import
    warningpyozwweb.shell 360Unused import make_response from wildcard import
    warningpyozwweb.shell 360Unused import Response from wildcard import
    warningpyozwweb.shell 360Unused import request_started from wildcard import
    warningpyozwweb.shell 360Unused import has_app_context from wildcard import
    warningpyozwweb.shell 360Unused import send_file from wildcard import
    warningpyozwweb.shell 360Unused import get_template_attribute from wildcard import
    warningpyozwweb.shell 360Unused import Session from wildcard import
    warningpyozwweb.shell 360Unused import Markup from wildcard import
    warningpyozwweb.shell 360Unused import copy_current_request_context from wildcard import
    warningpyozwweb.shell 360Unused import Request from wildcard import
    warningpyozwweb.shell 360Unused import safe_join from wildcard import
    warningpyozwweb.shell 360Unused import flash from wildcard import
    warningpyozwweb.shell 360Unused import stream_with_context from wildcard import
    warningpyozwweb.shell 360Unused import template_rendered from wildcard import
    warningpyozwweb.shell 360Unused import got_request_exception from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_tearing_down from wildcard import
    warningpyozwweb.shell 360Unused import url_for from wildcard import
    warningpyozwweb.shell 360Unused import g from wildcard import
    warningpyozwweb.shell 360Unused import has_request_context from wildcard import
    warningpyozwweb.shell 360Unused import jsonify from wildcard import
    warningpyozwweb.shell 360Unused import json_available from wildcard import
    warningpyozwweb.shell 360Unused import message_flashed from wildcard import
    warningpyozwweb.shell 360Unused import abort from wildcard import
    warningpyozwweb.shell 360Unused import request_finished from wildcard import
    warningpyozwweb.shell 360Unused import signals_available from wildcard import
    warningpyozwweb.shell 360Unused import appcontext_popped from wildcard import
    warningpyozwweb.shell 370Unused import leave_room from wildcard import
    warningpyozwweb.shell 370Unused import SocketIO from wildcard import
    warningpyozwweb.shell 370Unused import app from wildcard import
    warningpyozwweb.shell 370Unused import run_app from wildcard import
    warningpyozwweb.shell 370Unused import start_listener from wildcard import
    warningpyozwweb.shell 370Unused import create_app from wildcard import
    warningpyozwweb.shell 370Unused import NullHandler from wildcard import
    warningpyozwweb.shell 370Unused import disconnect from wildcard import
    warningpyozwweb.shell 370Unused import monkey from wildcard import
    warningpyozwweb.shell 370Unused import stop_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import stop_all from wildcard import
    warningpyozwweb.shell 370Unused import fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import time from wildcard import
    warningpyozwweb.shell 370Unused import close_room from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveNetwork from wildcard import
    warningpyozwweb.shell 370Unused import ZWaveOption from wildcard import
    warningpyozwweb.shell 370Unused import sys from wildcard import
    warningpyozwweb.shell 370Unused import stop_listener from wildcard import
    warningpyozwweb.shell 370Unused import logging from wildcard import
    warningpyozwweb.shell 370Unused import install_secret_key from wildcard import
    warningpyozwweb.shell 370Unused import dispatcher from wildcard import
    warningpyozwweb.shell 370Unused import join_room from wildcard import
    warningpyozwweb.shell 370Unused import All from wildcard import
    warningpyozwweb.shell 370Unused import socketio from wildcard import
    warningpyozwweb.shell 370Unused import signal from wildcard import
    warningpyozwweb.shell 370Unused import Fanstatic from wildcard import
    warningpyozwweb.shell 370Unused import threading from wildcard import
    warningpyozwweb.shell 370Unused import start_zwnetwork from wildcard import
    warningpyozwweb.shell 370Unused import emit from wildcard import
    conventionpyozwweb.reloadmain330Missing function docstring
    conventionpyozwweb.runmain370Missing function docstring
    conventionpyozwweb.config 410Invalid constant name "_basedir"
    conventionpyozwweb.configConfig430Missing class docstring
    conventionpyozwweb.configProductionConfig730Missing class docstring
    conventionpyozwweb.configRunConfig770Missing class docstring
    conventionpyozwweb.configReloadConfig820Missing class docstring
    conventionpyozwweb.configTestingConfig880Missing class docstring
    conventionpyozwweb.app.listener 680No space allowed after bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 680No space allowed before bracket + self._stopevent = threading.Event( ) + ^
    conventionpyozwweb.app.listener 1200Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1210Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1240Wrong continued indentation. + {'data': data_room_network(current_app.extensions['zwnetwork'])}, + ^ |
    conventionpyozwweb.app.listener 1250Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1260Line too long (168/140)
    conventionpyozwweb.app.listener 1430Exactly one space required around assignment + data=node.to_dict() + ^
    conventionpyozwweb.app.listener 1450Wrong continued indentation. + {'data': data}, + ^ |
    conventionpyozwweb.app.listener 1460Wrong continued indentation. + namespace='/ozwave') + ^ |
    conventionpyozwweb.app.listener 1850Line too long (146/140)
    conventionpyozwweb.app.listener 2240No space allowed after bracket + self._stopevent.set( ) + ^
    conventionpyozwweb.app.listener 2240No space allowed before bracket + self._stopevent.set( ) + ^
    fatalpyozwweb.app.listener 344Unable to import 'pydispatch'
    conventionpyozwweb.app.listener 590Invalid constant name "listener"
    warningpyozwweb.app.listenerListenerThread._louie_network11712Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_network11712Reimport 'request' (imported line 47)
    errorpyozwweb.app.listenerListenerThread._louie_network12029Undefined variable 'data_room_network'
    errorpyozwweb.app.listenerListenerThread._louie_network12429Undefined variable 'data_room_network'
    warningpyozwweb.app.listenerListenerThread._louie_network12616Specify string format arguments as logging function parameters
    warningpyozwweb.app.listenerListenerThread._louie_network11712Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_node14026Unused argument 'network'
    warningpyozwweb.app.listenerListenerThread._louie_values16512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_values16512Unused variable 'request'
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Redefining name 'request' from outer scope (line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Reimport 'request' (imported line 47)
    warningpyozwweb.app.listenerListenerThread._louie_controller20512Unused variable 'request'
    warningpyozwweb.app.listenerstart_listener2304Using the global statement
    conventionpyozwweb.app.listenerstart_listener2304Invalid constant name "listener"
    warningpyozwweb.app.listenerstop_listener2394Using the global statement
    conventionpyozwweb.app.listenerstop_listener2394Invalid constant name "listener"
    warningpyozwweb.app.listener 310Unused import os
    warningpyozwweb.app.listener 370Unused import time
    warningpyozwweb.app.listener 410Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.listener 420Unused Singleton imported from openzwave.singleton
    warningpyozwweb.app.listener 450Unused All imported from louie
    warningpyozwweb.app.listener 470Unused Flask imported from flask
    warningpyozwweb.app.listener 470Unused request imported from flask
    warningpyozwweb.app.listener 470Unused session imported from flask
    warningpyozwweb.app.listener 470Unused render_template imported from flask
    warningpyozwweb.app.viewsmap960Redefining built-in 'map'
    errorpyozwweb.app.views 460No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.views 460Unable to import 'flask.ext.socketio'
    warningpyozwweb.app.views 580Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app.viewsnot_found710Missing function docstring
    warningpyozwweb.app.viewsnot_found7114Unused argument 'error'
    conventionpyozwweb.app.viewshome750Missing function docstring
    conventionpyozwweb.app.viewsnode800Missing function docstring
    conventionpyozwweb.app.viewsvalues840Missing function docstring
    conventionpyozwweb.app.viewscontroller880Missing function docstring
    conventionpyozwweb.app.viewsdebug920Missing function docstring
    conventionpyozwweb.app.viewsmap960Missing function docstring
    conventionpyozwweb.app.viewsscenes1000Missing function docstring
    conventionpyozwweb.app.viewschat1040Missing function docstring
    warningpyozwweb.app.views 410Unused import sys
    warningpyozwweb.app.views 410Unused import os
    warningpyozwweb.app.views 420Unused import time
    warningpyozwweb.app.views 430Unused Thread imported from threading
    warningpyozwweb.app.views 450Unused Flask imported from flask
    warningpyozwweb.app.views 450Unused session imported from flask
    warningpyozwweb.app.views 450Unused current_app imported from flask
    warningpyozwweb.app.views 450Unused request imported from flask
    warningpyozwweb.app.views 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused disconnect imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.views 460Unused emit imported from flask.ext.socketio
    warningpyozwweb.app.views 480Unused import libopenzwave
    warningpyozwweb.app.views 490Unused import openzwave
    warningpyozwweb.app.views 500Unused ZWaveNode imported from openzwave.node
    warningpyozwweb.app.views 510Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.views 520Unused ZWaveScene imported from openzwave.scene
    warningpyozwweb.app.views 530Unused ZWaveController imported from openzwave.controller
    warningpyozwweb.app.views 540Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.views 550Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.views 560Unused dispatcher imported from louie
    warningpyozwweb.app.views 560Unused All imported from louie
    warningpyozwweb.app.views 570Unused socketio imported from pyozwweb.app
    warningpyozwweb.app.views 58
    erroropenzwave.commandZWaveNodeSecurity.set_protection65912Instance of 'ZWaveNodeSecurity' has no 'values' member
    erroropenzwave.commandZWaveNodeSecurity.get_protection_item67519Instance of 'ZWaveNodeSecurity' has no 'values' member
    erroropenzwave.commandZWaveNodeSecurity.get_protection_items69019Instance of 'ZWaveNodeSecurity' has no 'values' member
    conventionopenzwave.network 1910Unused listener imported from listener
    conventionpyozwweb.app.__init__ 932240Exactly one space required after comma + socketio.run(app, use_reloader=app.config['RELOADER'],host=app.config['HOST'], port=app.config['PORT']) + ^
    conventionpyozwweb.app.__init__ 1832280Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1862310Unnecessary parens after u'print' keyword
    conventionpyozwweb.app.__init__ 1873560Unnecessary parens after u'print' keyword
    errorpyozwweb.app 43
    conventionopenzwave.network 5970No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app 430Unable to import 'flask.ext.socketio'
    warningpyozwweb.app 67
    conventionopenzwave.network 5990Exactly one space required around assignment + ret[ndid]=self._nodes[ndid].to_dict(extras=extras) + ^
    conventionopenzwave.network 6120Relative import 'listener', should be 'pyozwweb.app.listener'
    conventionpyozwweb.app 696200Invalid constant name "fanstatic"
    conventionpyozwweb.app 707640Invalid constant name "app"
    conventionpyozwweb.app 718870Invalid constant name "socketio"
    conventionpyozwweb.apprun_app730Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Redefining name 'signal' from outer scope (line 65)
    conventionpyozwweb.apprun_app.signal_term_handler75Too many lines in module (1629/1000)
    fatalopenzwave.network 364Missing function docstring
    warningpyozwweb.apprun_app.signal_term_handler7528Unused argument 'signal'
    warningpyozwweb.apprun_app.signal_term_handler7536Unused argument 'frame'
    warningpyozwweb.apprun_app83
    fatalopenzwave.network 374Using the global statement
    conventionpyozwweb.apprun_app834Invalid constant name "socketio"
    warningpyozwweb.apprun_app854Using the global statement
    conventionpyozwweb.apprun_app854Invalid constant name "app"
    warningpyozwweb.apprun_app874Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app924Specify string format arguments as logging function parameters
    warningpyozwweb.apprun_app7329Unused argument 'debug'
    conventionpyozwweb.appstop_all97
    conventionopenzwave.network 610Missing function docstring
    warningpyozwweb.appstop_all994Using global for 'app' but no assignment is done
    conventionpyozwweb.appstop_all994Invalid constant name "app"
    warningpyozwweb.appcreate_app1114Redefining name 'logging' from outer scope (line 55)
    warningpyozwweb.appcreate_app1034Redefining name 'monkey' from outer scope (line 35)
    refactoropenzwave.networkZWaveNetwork690Too many instance attributes (13/7)
    conventionpyozwweb.appcreate_app1020Missing function docstring
    warningpyozwweb.appcreate_app103openzwave.networkZWaveNetwork2784Reimport 'monkey' (imported line 35)
    warningpyozwweb.appcreate_app1084Using the global statement
    conventionpyozwweb.appcreate_app108openzwave.networkZWaveNetwork2824Invalid constant name "app"
    warningpyozwweb.appcreate_app1144Specify string format arguments as logging function parameters
    erroropenzwave.networkZWaveNetwork.__init__31424Module 'libopenzwave' has no 'PyManager' member
    conventionpyozwweb.appcreate_app1168Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1188Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1208Invalid variable name "ZWAVE_DEBUG"
    conventionpyozwweb.appcreate_app1228Invalid variable name "ZWAVE_DEBUG"
    warningpyozwweb.appcreate_app1364Using the global statement
    conventionpyozwweb.appcreate_app1364Invalid constant name "fanstatic"openzwave.networkZWaveNetwork.__init__32933Invalid variable name "e"
    warningopenzwave.networkZWaveNetwork.__init__32716Unused variable 'data'
    warningpyozwweb.appcreate_app1384Using the global statement
    conventionpyozwweb.appcreate_app1384Invalid constant name "socketio"
    warningpyozwweb.appcreate_app1424Relative import 'views', should be 'pyozwweb.app.views'
    warningpyozwweb.appcreate_app1434Relative import 'socket', should be 'pyozwweb.app.socket'openzwave.networkZWaveNetwork.stop43612Redefining name 'sys' from outer scope (line 34)
    warningopenzwave.networkZWaveNetwork.stop40771Using possibly undefined loop variable 'i'
    warningpyozwweb.appcreate_app1424Unused variable 'views'
    warningpyozwweb.appcreate_app1434Unused variable 'chat'
    warningpyozwweb.appcreate_app1434Unused variable 'ozwave'openzwave.networkZWaveNetwork.stop4358No exception type(s) specified
    warningpyozwweb.appcreate_app1168Unused variable 'ZWAVE_DEBUG'openzwave.networkZWaveNetwork.stop43416Used * or ** magic
    warningpyozwweb.appstart_zwnetwork15020Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.appstart_zwnetwork1500Missing function docstring
    errorpyozwweb.appstart_zwnetwork1574Instance of 'ZWaveOption' has no 'lock' member
    conventionpyozwweb.appstop_zwnetwork1610Missing function docstringopenzwave.networkZWaveNetwork.stop43612Reimport 'sys' (imported line 34)
    refactoropenzwave.networkZWaveNetwork.stop3774Too many branches (17/12)
    warningpyozwweb.appinstall_secret_key17023Redefining name 'app' from outer scope (line 70)
    conventionpyozwweb.app.socket.ozwave 950Exactly one space required around assignment + done=False + ^openzwave.networkZWaveNetwork.home_id4574Arguments number differs from overridden method
    refactoropenzwave.networkZWaveNetwork.state_str5264Too many return statements (7/6)
    warningopenzwave.networkZWaveNetwork.nodes_to_dict5874Dangerous default value [] as argument
    warningopenzwave.networkZWaveNetwork.to_dict6024Dangerous default value [] as argument
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^openzwave.networkZWaveNetwork.heal6634Invalid argument name "upNodeRoute"
    warningopenzwave.networkZWaveNetwork.scenes_to_dict7544Dangerous default value [] as argument
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 960Exactly one space required after comma + keys = ['zoomlevel','zoomx','zoomy','panx','pany'] + ^
    conventionpyozwweb.app.socket.ozwave 1000Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1060No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1140No space allowed before : + try : + ^
    conventionpyozwweb.app.socket.ozwave 1230Exactly one space required around assignment + done=False + ^
    conventionpyozwweb.app.socket.ozwave 1240Exactly one space required after comma + keys = ['posx','posy'] + ^
    conventionpyozwweb.app.socket.ozwave 1280Exactly one space required around assignment + kvals[key]=message[key] + ^
    conventionpyozwweb.app.socket.ozwave 1400No space allowed before : + if done == False : + ^
    conventionpyozwweb.app.socket.ozwave 1710Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1720Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1790Wrong continued indentation. + {'data': data, + ^|
    conventionpyozwweb.app.socket.ozwave 1800Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1820Wrong continued indentation. + {'data': init_data, + ^|
    conventionpyozwweb.app.socket.ozwave 1830Wrong continued indentation. + 'count': session['receive_count']}) + ^|
    conventionpyozwweb.app.socket.ozwave 1860Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 1880Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 1930No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2000Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2020Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2070No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2140Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2160Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2210No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2280Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2300Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2350No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2420Exactly one space required around assignment + node_id=-1 + ^
    conventionpyozwweb.app.socket.ozwave 2440Exactly one space required around assignment + node_id=int(message['node_id']) + ^
    conventionpyozwweb.app.socket.ozwave 2490No space allowed before : + if node_id not in current_app.extensions['zwnetwork'].nodes : + ^
    conventionpyozwweb.app.socket.ozwave 2860No space allowed before : + if data['result'] == True : + ^
    conventionpyozwweb.app.socket.ozwave 2980Line too long (147/140)
    errorpyozwweb.app.socket.ozwave 480No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.ozwave 480Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.ozwaveecho_message720Missing function docstring
    conventionpyozwweb.app.socket.ozwavedisconnect_request790Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_connect870Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_network_event920Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_node_event1110Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_nodes_event1460Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_controller_event1540Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_command_event1610Missing function docstring
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many branches (38/12)
    refactorpyozwweb.app.socket.ozwaveecho_command_event1610Too many statements (120/50)
    conventionpyozwweb.app.socket.ozwaveecho_value_event2940Missing function docstring
    conventionpyozwweb.app.socket.ozwaveecho_scenes_event3030Missing function docstring
    warningpyozwweb.app.socket.ozwave 430Unused import os
    warningpyozwweb.app.socket.ozwave 430Unused import sys
    warningpyozwweb.app.socket.ozwave 440Unused import time
    warningpyozwweb.app.socket.ozwave 450Unused Thread imported from threading
    warningpyozwweb.app.socket.ozwave 470Unused Flask imported from flask
    warningpyozwweb.app.socket.ozwave 470Unused render_template imported from flask
    warningpyozwweb.app.socket.ozwave 480Unused close_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused leave_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 480Unused join_room imported from flask.ext.socketio
    warningpyozwweb.app.socket.ozwave 500Unused import libopenzwave
    warningpyozwweb.app.socket.ozwave 51openzwave.networkZWaveNetwork.set_poll_interval8724Invalid argument name "bIntervalBetweenPolls"
    warningopenzwave.networkZWaveNetwork.zwcallback98512Redefining name 'sys' from outer scope (line 34)
    warningopenzwave.networkZWaveNetwork.zwcallback9848No exception type(s) specified
    erroropenzwave.networkZWaveNetwork.zwcallback93916Instance of 'ZWaveNetwork' has no '_handleNodeReady' member
    warningopenzwave.networkZWaveNetwork.zwcallback98512Reimport 'sys' (imported line 34)
    refactoropenzwave.networkZWaveNetwork.zwcallback8934Too many branches (32/12)
    refactoropenzwave.networkZWaveNetwork.zwcallback8934Too many statements (69/50)
    warningopenzwave.networkZWaveNetwork._handle_driver_failed10038Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_failed10048Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_ready103912Redefining name 'sys' from outer scope (line 34)
    warningopenzwave.networkZWaveNetwork._handle_driver_ready10388No exception type(s) specified
    warningopenzwave.networkZWaveNetwork._handle_driver_ready102912Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_ready103212Used * or ** magic
    erroropenzwave.networkZWaveNetwork._handle_driver_ready103425Module 'libopenzwave' has no 'PyControllerState' member
    erroropenzwave.networkZWaveNetwork._handle_driver_ready103527Module 'libopenzwave' has no 'PyControllerState' member
    warningopenzwave.networkZWaveNetwork._handle_driver_ready103612Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_ready103912Reimport 'sys' (imported line 34)
    warningopenzwave.networkZWaveNetwork._handle_driver_reset106512Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_reset106712Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_driver_removed108712Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_group11058Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node11218Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_added114212Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_scene_event11598Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_event11768Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_naming11918Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_new12048Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_protocol_info12208Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_removed124316Used * or ** magic
    conventionopenzwave.networkZWaveNetwork._handle_essential_node_queries_complete12494Invalid method name "_handle_essential_node_queries_complete"
    warningopenzwave.networkZWaveNetwork._handle_essential_node_queries_complete12618Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_node_queries_complete12808Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_all_nodes_queried12988Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_all_nodes_queried12998Used * or ** magic
    conventionopenzwave.networkZWaveNetwork._handle_all_nodes_queried_some_dead13014Invalid method name "_handle_all_nodes_queried_some_dead"
    warningopenzwave.networkZWaveNetwork._handle_all_nodes_queried_some_dead13158Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_all_nodes_queried_some_dead13168Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_awake_nodes_queried134212Redefining name 'sys' from outer scope (line 34)
    warningopenzwave.networkZWaveNetwork._handle_awake_nodes_queried13418No exception type(s) specified
    warningopenzwave.networkZWaveNetwork._handle_awake_nodes_queried133812Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_awake_nodes_queried133912Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_awake_nodes_queried134212Reimport 'sys' (imported line 34)
    warningopenzwave.networkZWaveNetwork._handle_polling_disabled13598Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_polling_enabled13748Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_create_button13888Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_delete_button14028Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_button_on14168Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_button_off14308Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_value14478Specify string format arguments as logging function parameters
    warningopenzwave.networkZWaveNetwork._handle_value14488Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_value_added14718Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_value_changed14968Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_value_refreshed15198Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_value_removed154412Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_notification15618Used * or ** magic
    warningopenzwave.networkZWaveNetwork._handle_msg_complete15758Used * or ** magic
    warningopenzwave.networkZWaveNetwork.nodes63312Attribute '_nodes' defined outside __init__
    warningopenzwave.networkZWaveNetwork.nodes63512Attribute '_nodes' defined outside __init__
    refactoropenzwave.networkZWaveNetwork690Unused import openzwave
    warningpyozwweb.app.socket.ozwave 520Unused ZWaveNode imported from openzwave.node1621-1String statement has no effect
    warningpyozwweb.app.socket.ozwave 53330Unused ZWaveValue imported from openzwave.value
    warningpyozwweb.app.socket.ozwave 540Unused ZWaveScene imported from openzwave.scene374Unused _thread imported as thread
    warningpyozwweb.app.socket.ozwave 550Unused ZWaveController imported from openzwave.controller404Unused import thread
    warningpyozwweb.app.socket.ozwave 56430Unused ZWaveNetwork imported from openzwave.network
    warningpyozwweb.app.socket.ozwave 57440Unused ZWaveOption imported from openzwave.option
    warningpyozwweb.app.socket.ozwave 58470Unused All imported from louie
    warningpyozwweb.app.socket.ozwave 58500Unused dispatcher imported from louie
    warningpyozwweb.app.socket.ozwave 59450Unused app imported from pyozwweb.app
    warningpyozwweb.app.socket 90460No exception type(s) specified
    warningopenzwave.value 5550Bad indentation. Found 16 spaces, expected 12
    conventionpyozwweb.app.socket.chat 1275560Unnecessary parens after u'print' keyword
    conventionopenzwave.value 5660Exactly one space required around assignment + ret[key]=vals[key] + ^
    errorpyozwweb.app.socket.chat 46420No name 'socketio' in module 'flask.ext'
    fatalpyozwweb.app.socket.chat 460Unable to import 'flask.ext.socketio'
    conventionpyozwweb.app.socket.chattest_message610Missing function docstring
    conventionpyozwweb.app.socket.chattest_broadcast_message700Missing function docstring
    conventionpyozwweb.app.socket.chatjoin780Missing function docstring
    conventionpyozwweb.app.socket.chatleave870Missing function docstring
    conventionpyozwweb.app.socket.chatclose960Missing function docstring
    conventionpyozwweb.app.socket.chatsend_room_message1050Missing function docstring
    conventionpyozwweb.app.socket.chatdisconnect_request113refactoropenzwave.valueZWaveValue.data_items3094Too many return statements (10/6)
    warningopenzwave.valueZWaveValue.check_data36312No exception type(s) specified
    warningopenzwave.valueZWaveValue.check_data37312No exception type(s) specified
    warningopenzwave.valueZWaveValue.check_data37812No exception type(s) specified
    warningopenzwave.valueZWaveValue.check_data38812No exception type(s) specified
    refactoropenzwave.valueZWaveValue.check_data3384Too many branches (31/12)
    refactoropenzwave.valueZWaveValue.check_data3384Too many statements (61/50)
    warningopenzwave.valueZWaveValue.to_dict5444Dangerous default value [] as argument
    refactoropenzwave.valueZWaveValue470Missing function docstring
    conventionpyozwweb.app.socket.chattest_connect121openzwave.option 2750Missing function docstring
    conventionpyozwweb.app.socket.chattest_disconnect126
    erroropenzwave.option 330Missing function docstring
    warningpyozwweb.app.socket.chat
    conventionopenzwave.option 460Unused import sys
    warningpyozwweb.app.socket.chat 410Unused import os
    warningpyozwweb.app.socket.chat 420Unused import time
    warningpyozwweb.app.socket.chat 430Unused Thread imported from threading
    warningpyozwweb.app.socket.chat 450Unused Flask imported from flask
    warningpyozwweb.app.socket.chat 450Unused current_app imported from flask
    warningpyozwweb.app.socket.chat 450Unused render_template imported from flask
    warningpyozwweb.app.socket.chat 460Unused SocketIO imported from flask.ext.socketio
    warningpyozwweb.app.socket.chat 480Unused app imported from pyozwweb.app
    refactoropenzwave.nodeZWaveNode490Interface not implemented
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.ozwave)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.socket.chat)
    refactorpyozwweb.app.socket.chat 10Cyclic import (pyozwweb.app -&gt; pyozwweb.app.views)
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.listener:6 +==pyozwweb.app.views:17 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +from gevent import monkey +monkey.patch_all() + +import os +import sys +if sys.hexversion &gt;= 0x3000000: + from pydispatch import dispatcher +else: + from louie import dispatcher +import time + +from openzwave.network import ZWaveNetwork +from openzwave.controller import ZWaveController +from openzwave.option import ZWaveOption +from openzwave.singleton import Singleton +import threading +from threading import Thread +from louie import dispatcher, All + +from flask import Flask, render_template, session, request, current_app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler): + """NullHandler logger for python 2.6""" + def emit(self, record): + pass +logging.getLogger('pyozwweb').addHandler(NullHandler()) +
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True + CSRF_SESSION_KEY = "somethingimpossibletoguess" + + RECAPTCHA_USE_SSL = False + RECAPTCHA_PUBLIC_KEY = '6LeYIbsSAAAAACRPIllxA7wvXjIE411PfdB2gt2J' + RECAPTCHA_PRIVATE_KEY = '6LeYIbsSAAAAAJezaIq3Ft_hSTo0YtyeFG-JgRtu' + RECAPTCHA_OPTIONS = {'theme': 'white'} + + ZWAVE_DEVICE = "/dev/ttyUSB0"
    refactorpyozwweb.app.socket.chat 10Similar lines in 4 files +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os, sys +import time +from threading import Thread + +from flask import Flask, render_template, session, request, current_app +from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect + +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from louie import dispatcher, All +from pyozwweb.app import socketio, app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError: + class NullHandler(logging.Handler):
    refactorpyozwweb.app.socket.chat 10Similar lines in 5 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass +import os, sys +import time +from threading import Thread + +from flask import Flask, render_template, session, request, current_app +from flask.ext.socketio import SocketIO, emit, join_room, leave_room, close_room, disconnect + +import libopenzwave +import openzwave +from openzwave.node import ZWaveNode +from openzwave.value import ZWaveValue +from openzwave.scene import ZWaveScene +from openzwave.controller import ZWaveController +from openzwave.network import ZWaveNetwork +from openzwave.option import ZWaveOption +from louie import dispatcher, All +from pyozwweb.app import socketio, app + +import logging +try: # Python 2.7+ + from logging import NullHandler +except ImportError:
    refactorpyozwweb.app.socket.chat 10Similar lines in 6 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' + + SECRET_KEY = 'This string will be replaced with a proper key in production.' + + THREADS_PER_PAGE = 8 + + CSRF_ENABLED = True
    refactorpyozwweb.app.socket.chat 10Similar lines in 7 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000 + + LOGGING_CONF = 'logging.conf' + APP_CONF = 'app.conf' +
    refactorpyozwweb.app.socket.chat 10Similar lines in 8 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:' + + HOST = "127.0.0.1" + PORT = 5000
    refactorpyozwweb.app.socket.chat 10Similar lines in 9 files +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False + DATABASE_URI = 'sqlite://:memory:'
    refactorpyozwweb.app.socket.chat 10Similar lines in 10 files +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False + RELOADER = False
    refactorpyozwweb.app.socket.chat 10Similar lines in 13 files +==openzwave:1 +==pyozwman:1 +==pyozwweb.app.__init__:13 +==pyozwweb.app.listener:6 +==pyozwweb.app.socket.__init__:65 +==pyozwweb.app.socket.chat:14 +==pyozwweb.app.socket.ozwave:17 +==pyozwweb.app.views:17 +==pyozwweb.config:18 +==pyozwweb.reload:9 +==pyozwweb.run:9 +==pyozwweb.shell:10 +==pyozwweb:1 +__license__ = """ + +This file is part of **python-openzwave** project https://github.com/bibi21000/python-openzwave. + +License : GPL(v3) + +**python-openzwave** is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +**python-openzwave** is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +You should have received a copy of the GNU General Public License +along with python-openzwave. If not, see http://www.gnu.org/licenses. +""" +__author__ = 'Sébastien GALLET aka bibi21000' +__email__ = 'bibi21000@gmail.com' + +import os +_basedir = os.path.abspath(os.path.dirname(__file__)) + +class Config(object): + DEBUG = False + TESTING = False
    refactorpyozwweb.app.socket.chat
    erroropenzwave.optionZWaveOption4918Module 'libopenzwave' has no 'PyOptions' member
    erroropenzwave.optionZWaveOption.__init__818Module 'libopenzwave' has no 'PyOptions' member
    refactorpyozwweb.app.socket.chat 10Similar lines in 2 files -==pyozwman.ozwsh_main:28 -==pyozwman.ozwsh_widgets:27 -__author__ = 'bibi21000' - -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -from select import select -import sys -import os -import urwid -from urwid.raw_display import Screenerroropenzwave.optionZWaveOption.set_log_file9315Instance of 'ZWaveOption' has no 'addOptionString' member
    refactorpyozwweb.app.socket.chaterroropenzwave.optionZWaveOption.set_logging10315Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_append_log_file11315Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_console_output12315Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_save_log_level14515Instance of 'ZWaveOption' has no 'addOptionInt' member
    erroropenzwave.optionZWaveOption.set_queue_log_level16715Instance of 'ZWaveOption' has no 'addOptionInt' member
    erroropenzwave.optionZWaveOption.set_dump_trigger_level18915Instance of 'ZWaveOption' has no 'addOptionInt' member
    erroropenzwave.optionZWaveOption.set_associate19915Instance of 'ZWaveOption' has no 'addOptionBool' member
    conventionopenzwave.optionZWaveOption.set_exclude2014Invalid argument name "commandClass"
    erroropenzwave.optionZWaveOption.set_exclude20915Instance of 'ZWaveOption' has no 'addOptionString' member
    conventionopenzwave.optionZWaveOption.set_include2114Invalid argument name "commandClass"
    erroropenzwave.optionZWaveOption.set_include21915Instance of 'ZWaveOption' has no 'addOptionString' member
    erroropenzwave.optionZWaveOption.set_notify_transactions22915Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_interface23915Instance of 'ZWaveOption' has no 'addOptionString' member
    erroropenzwave.optionZWaveOption.set_save_configuration24915Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_driver_max_attempts25915Instance of 'ZWaveOption' has no 'addOptionInt' member
    erroropenzwave.optionZWaveOption.set_poll_interval26915Instance of 'ZWaveOption' has no 'addOptionInt' member
    erroropenzwave.optionZWaveOption.set_interval_between_polls27915Instance of 'ZWaveOption' has no 'addOptionBool' member
    erroropenzwave.optionZWaveOption.set_suppress_value_refresh28915Instance of 'ZWaveOption' has no 'addOptionBool' member
    conventionpyozwman 711 0Exactly one space required around comparison - if pos &gt;= 0 and pos &lt; self.size and len(self.lines)&gt;0: - ^Similar lines in 9 files -==openzwave.command:34 -==openzwave.controller:42 -==openzwave.group:33 -==openzwave.network:52 -==openzwave.node:37 -==openzwave.object:31 -==openzwave.option:37 -==openzwave.scene:33 -==openzwave.value:33 -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - """NullHandler logger for python 2.6""" - def emit(self, record): - pass -logger = logging.getLogger('openzwave') -logger.addHandler(NullHandler()) -Missing module docstring
    refactorpyozwweb.app.socket.chatwarningpyozwman  126 0Similar lines in 2 files -==pyozwman.ozwsh_main:46 -==pyozwman.ozwsh_widgets:40 -from openzwave.node import ZWaveNode -from openzwave.value import ZWaveValue -from openzwave.scene import ZWaveScene -from openzwave.controller import ZWaveController -from openzwave.network import ZWaveNetwork -from openzwave.option import ZWaveOptionNo exception type(s) specified
    convention pyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat  156 0Similar lines in 2 files -==openzwave.network:25 -==openzwave.option:25 -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -import osNo space allowed before bracket + self.usage = ['ls : list directory', 'cd &lt;directory&gt; : change to directory &lt;directory&gt;', 'exit : quit the program' ] + ^
    refactorpyozwweb.app.socket.chatconventionpyozwman.ozwsh_widgets  8071 0Exactly one space required after comma - line,pos = self._get_at_pos(self.focus) - ^Similar lines in 2 files -==openzwave.network:616 -==openzwave.node:204 - if 'kvals' in extras and self.network.dbcon is not None: - vals = self.kvals - for key in vals.keys(): - ret[key]=vals[key] - return ret -Exactly one space required around comparison + if pos &gt;= 0 and pos &lt; self.size and len(self.lines)&gt;0: + ^
    refactorpyozwweb.app.socket.chatconventionpyozwman.ozwsh_widgets  180 0Similar lines in 4 files -==openzwave.group:25 -==openzwave.node:25 -==openzwave.scene:25 -==openzwave.value:25 -try: - from gevent import monkey - monkey.patch_all() -except ImportError: - pass -from openzwave.object import ZWaveObjectExactly one space required after comma + line,pos = self._get_at_pos(self.focus) + ^
    convention pyozwman.ozwsh_widgetsrefactorpyozwweb.app.socket.chat  131 0No space allowed before comma self.lines.append(urwid.Text("Help" , align='left')) ^
    refactor
    refactor   1 0Similar lines in 2 files @@ -27221,6 +40906,31 @@

    Messages

    except ImportError: pass
    refactorpyozwweb.app.socket.chat 10Similar lines in 12 files +==openzwave.command:25 +==openzwave.controller:26 +==openzwave.group:25 +==openzwave.network:25 +==openzwave.node:25 +==openzwave.object:25 +==openzwave.option:25 +==openzwave.scene:25 +==openzwave.singleton:25 +==openzwave.value:25 +==pyozwman.ozwsh_main:30 +==pyozwman.ozwsh_widgets:29 +try: + from gevent import monkey + monkey.patch_all() +except ImportError: + pass
    From b355871bf827a7e6869cfd27d4013a9d6200fd83 Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Thu, 7 Jan 2016 22:30:42 +0100 Subject: [PATCH 08/14] Add circle --- circle.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 circle.yml diff --git a/circle.yml b/circle.yml new file mode 100644 index 00000000..214c3d5b --- /dev/null +++ b/circle.yml @@ -0,0 +1,20 @@ +##### +# Circle CI +# +# For running docker images on circle ci, see: https://circleci.com/docs/docker +# For circle.yml explanation, see: https://circleci.com/docs/manually +# Python specific configuration, see: https://circleci.com/docs/language-python +##### + +dependencies: + pre: + - make PYTHON_EXEC=python3 python-deps + - make PYTHON_EXEC=python3 autobuild-deps + - make PYTHON_EXEC=python3 update + - make PYTHON_EXEC=python3 build + - make PYTHON_EXEC=python3 install + - make PYTHON_EXEC=python3 update + +test: + override: + - make PYTHON_EXEC=python3 autobuild-tests From f429e3a3d104e2343e959fed46f6c640974f1520 Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Thu, 7 Jan 2016 22:58:40 +0100 Subject: [PATCH 09/14] Update Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b2d99484..b32258dd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM debian:jessie MAINTAINER bibi21000 ADD . /home/docker-py3 WORKDIR /home/docker-py3 -RUN apt-get update && apt-get install -y make python3 +RUN apt-get update && apt-get install -y make python3 sudo RUN make PYTHON_EXEC=python3 python-deps RUN make PYTHON_EXEC=python3 autobuild-deps RUN env From 888d745ec3036c357309ee6db40a2bc866688410 Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Thu, 7 Jan 2016 23:07:06 +0100 Subject: [PATCH 10/14] Commit --- circle.yml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/circle.yml b/circle.yml index 4da955bd..214c3d5b 100644 --- a/circle.yml +++ b/circle.yml @@ -8,7 +8,6 @@ dependencies: pre: -<<<<<<< HEAD - make PYTHON_EXEC=python3 python-deps - make PYTHON_EXEC=python3 autobuild-deps - make PYTHON_EXEC=python3 update @@ -19,15 +18,3 @@ dependencies: test: override: - make PYTHON_EXEC=python3 autobuild-tests -======= - - make python-deps - - make autobuild-deps - - make update - - make build - - make install - - make update - -test: - override: - - make autobuild-tests ->>>>>>> master From 492718dbf3d83a39420f6180bbccda9a95721676 Mon Sep 17 00:00:00 2001 From: ntouran Date: Sun, 17 Jan 2016 00:40:55 -0800 Subject: [PATCH 11/14] Fixed issue where in Python3, all strings were bytes, not strings. Also added a unit test to ensure that sensor labels are string types. --- src-lib/libopenzwave/libopenzwave.pyx | 5 ++++- tests/api/test_sensor.py | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src-lib/libopenzwave/libopenzwave.pyx b/src-lib/libopenzwave/libopenzwave.pyx index 7b090a14..f7e9f2c8 100644 --- a/src-lib/libopenzwave/libopenzwave.pyx +++ b/src-lib/libopenzwave/libopenzwave.pyx @@ -94,7 +94,10 @@ cdef string str_to_cppstr(str s): cdef cstr_to_str(s): if six.PY3 and not isinstance(s, str): return s.decode('utf-8') - return s.encode('utf-8') + elif six.PY3: + return s + else: + return s.encode('utf-8') class LibZWaveException(Exception): """ diff --git a/tests/api/test_sensor.py b/tests/api/test_sensor.py index 07a510b1..658c2560 100644 --- a/tests/api/test_sensor.py +++ b/tests/api/test_sensor.py @@ -121,6 +121,16 @@ def test_410_sensor_decimal(self): self.assertTrue(good) if not ran : self.skipTest("No Decimal sensor found") + + def test_510_sensor_label(self): + ran = False + for node in self.network.nodes: + for sensorid, sensor in self.network.nodes[node].get_sensors().items(): + ran = True + label = sensor.label + self.assertTrue(isinstance(label, str)) + if not ran : + self.skipTest("No sensor found") if __name__ == '__main__': sys.argv.append('-v') From ae3897513d3a11196e05d7df5ee7a96adab62ced Mon Sep 17 00:00:00 2001 From: Davide Cavalca Date: Sun, 13 Mar 2016 17:27:50 -0700 Subject: [PATCH 12/14] fix python3 issue in pyozwweb --- src-web/pyozwweb/app/socket/chat.py | 2 +- src-web/pyozwweb/app/socket/ozwave.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-web/pyozwweb/app/socket/chat.py b/src-web/pyozwweb/app/socket/chat.py index 105c4f53..4ec5d8fa 100755 --- a/src-web/pyozwweb/app/socket/chat.py +++ b/src-web/pyozwweb/app/socket/chat.py @@ -61,7 +61,7 @@ def emit(self, record): def test_message(message): session['receive_count'] = session.get('receive_count', 0) + 1 logging.debug("Client %s echo message : %s", request.remote_addr, message) - print "Client %s echo message : %s" % (request.remote_addr, message) + print("Client %s echo message : %s" % (request.remote_addr, message)) emit('my response', {'data': message['data'], 'count': session['receive_count']}) diff --git a/src-web/pyozwweb/app/socket/ozwave.py b/src-web/pyozwweb/app/socket/ozwave.py index dffe44d7..c82f39b7 100755 --- a/src-web/pyozwweb/app/socket/ozwave.py +++ b/src-web/pyozwweb/app/socket/ozwave.py @@ -146,7 +146,7 @@ def echo_node_event(message): def echo_nodes_event(message): session['receive_count'] = session.get('receive_count', 0) + 1 logging.debug("Client %s nodes event : %s", request.remote_addr, message) - print "%s"%current_app.extensions['zwnetwork'].nodes_to_dict() + print("%s"%current_app.extensions['zwnetwork'].nodes_to_dict()) emit('my nodes response', {'data': current_app.extensions['zwnetwork'].nodes_to_dict(), 'count': session['receive_count']}) @@ -303,6 +303,6 @@ def echo_value_event(message): def echo_scenes_event(message): session['receive_count'] = session.get('receive_count', 0) + 1 logging.debug("Client %s scenes event : %s", request.remote_addr, message) - print "%s"%current_app.extensions['zwnetwork'].get_scenes() + print("%s"%current_app.extensions['zwnetwork'].get_scenes()) emit('my scenes response', {'data': current_app.extensions['zwnetwork'].get_scenes(), 'count': session['receive_count']}) From 295504f9933793d980b9a9f3a34a11761fe1e9dd Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Mon, 18 Apr 2016 00:58:58 +0200 Subject: [PATCH 13/14] Revert changes in python3 --- src-lib/libopenzwave/libopenzwave.pyx | 5 +---- src-web/pyozwweb/app/socket/chat.py | 2 +- src-web/pyozwweb/app/socket/ozwave.py | 4 ++-- tests/api/test_sensor.py | 10 ---------- 4 files changed, 4 insertions(+), 17 deletions(-) diff --git a/src-lib/libopenzwave/libopenzwave.pyx b/src-lib/libopenzwave/libopenzwave.pyx index f7e9f2c8..7b090a14 100644 --- a/src-lib/libopenzwave/libopenzwave.pyx +++ b/src-lib/libopenzwave/libopenzwave.pyx @@ -94,10 +94,7 @@ cdef string str_to_cppstr(str s): cdef cstr_to_str(s): if six.PY3 and not isinstance(s, str): return s.decode('utf-8') - elif six.PY3: - return s - else: - return s.encode('utf-8') + return s.encode('utf-8') class LibZWaveException(Exception): """ diff --git a/src-web/pyozwweb/app/socket/chat.py b/src-web/pyozwweb/app/socket/chat.py index 4ec5d8fa..105c4f53 100755 --- a/src-web/pyozwweb/app/socket/chat.py +++ b/src-web/pyozwweb/app/socket/chat.py @@ -61,7 +61,7 @@ def emit(self, record): def test_message(message): session['receive_count'] = session.get('receive_count', 0) + 1 logging.debug("Client %s echo message : %s", request.remote_addr, message) - print("Client %s echo message : %s" % (request.remote_addr, message)) + print "Client %s echo message : %s" % (request.remote_addr, message) emit('my response', {'data': message['data'], 'count': session['receive_count']}) diff --git a/src-web/pyozwweb/app/socket/ozwave.py b/src-web/pyozwweb/app/socket/ozwave.py index c82f39b7..dffe44d7 100755 --- a/src-web/pyozwweb/app/socket/ozwave.py +++ b/src-web/pyozwweb/app/socket/ozwave.py @@ -146,7 +146,7 @@ def echo_node_event(message): def echo_nodes_event(message): session['receive_count'] = session.get('receive_count', 0) + 1 logging.debug("Client %s nodes event : %s", request.remote_addr, message) - print("%s"%current_app.extensions['zwnetwork'].nodes_to_dict()) + print "%s"%current_app.extensions['zwnetwork'].nodes_to_dict() emit('my nodes response', {'data': current_app.extensions['zwnetwork'].nodes_to_dict(), 'count': session['receive_count']}) @@ -303,6 +303,6 @@ def echo_value_event(message): def echo_scenes_event(message): session['receive_count'] = session.get('receive_count', 0) + 1 logging.debug("Client %s scenes event : %s", request.remote_addr, message) - print("%s"%current_app.extensions['zwnetwork'].get_scenes()) + print "%s"%current_app.extensions['zwnetwork'].get_scenes() emit('my scenes response', {'data': current_app.extensions['zwnetwork'].get_scenes(), 'count': session['receive_count']}) diff --git a/tests/api/test_sensor.py b/tests/api/test_sensor.py index 658c2560..07a510b1 100644 --- a/tests/api/test_sensor.py +++ b/tests/api/test_sensor.py @@ -121,16 +121,6 @@ def test_410_sensor_decimal(self): self.assertTrue(good) if not ran : self.skipTest("No Decimal sensor found") - - def test_510_sensor_label(self): - ran = False - for node in self.network.nodes: - for sensorid, sensor in self.network.nodes[node].get_sensors().items(): - ran = True - label = sensor.label - self.assertTrue(isinstance(label, str)) - if not ran : - self.skipTest("No sensor found") if __name__ == '__main__': sys.argv.append('-v') From f60be5ff3907d34e41e25063455dd552e200352d Mon Sep 17 00:00:00 2001 From: bibi21000 Date: Sat, 30 Apr 2016 20:25:59 +0200 Subject: [PATCH 14/14] merge --- Makefile | 6 +++--- pyozw_version.py | 2 +- tests/api/common.py | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 416e9c5b..18852b70 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ ARCHIVES = archives BUILDDIR = build DISTDIR = dists NOSE = $(shell which nosetests) -NOSEOPTS = --verbosity=2 +NOSEOPTS = --verbosity=2 --with-id NOSECOVER = --cover-package=openzwave,pyozwman,pyozwweb --with-coverage --cover-inclusive --cover-tests --cover-html --cover-html-dir=docs/html/coverage --with-html --html-file=docs/html/nosetests/nosetests.html PYLINT = $(shell which pylint) PYLINTOPTS = --max-line-length=140 --max-args=9 --extension-pkg-whitelist=zmq --ignored-classes=zmq --min-public-methods=0 @@ -157,7 +157,6 @@ endif tests-deps: ${PIP_EXEC} install nose-html - ${PIP_EXEC} install nose-progressive ${PIP_EXEC} install coverage ${PIP_EXEC} install nose ${PIP_EXEC} install pylint @@ -243,7 +242,8 @@ develop: @echo "Installation for developpers of python-openzwave finished." tests: - #export NOSESKIP=False && $(NOSE) $(NOSEOPTS) tests/ --with-progressive; unset NOSESKIP + @echo "Tests for ZWave network start." + @echo "Python-openzwave version :" ${python_openzwave_version} export NOSESKIP=False && $(NOSE) $(NOSEOPTS) tests/lib tests/api tests/manager ; unset NOSESKIP @echo @echo "Tests for ZWave network finished." diff --git a/pyozw_version.py b/pyozw_version.py index eb4131bc..fb476921 100644 --- a/pyozw_version.py +++ b/pyozw_version.py @@ -21,7 +21,7 @@ along with python-openzwave. If not, see http://www.gnu.org/licenses. """ -pyozw_version = '0.3.0b9' +pyozw_version = '0.3.0' if "-" in pyozw_version: pyozw_version_short = pyozw_version.split("-") else: diff --git a/tests/api/common.py b/tests/api/common.py index 7ef48a57..49b37685 100644 --- a/tests/api/common.py +++ b/tests/api/common.py @@ -87,6 +87,7 @@ def tearDownClass(self): def setUp(self): self.wait_for_network_state(self.network.STATE_AWAKED, 1) + self.wait_for_queue() def wait_for_queue(self): for i in range(0,60):