GithubHelp home page GithubHelp logo

unipitechnology / evok Goto Github PK

View Code? Open in Web Editor NEW
101.0 27.0 39.0 2.76 MB

API of Unipi controllers

Home Page: http://www.unipi.technology

License: Apache License 2.0

Python 100.00%
modbus plc rest-api unipi websocket bulk embedded python rpc webhook

evok's Introduction

Evok - the Unipi API

Evok is the primary API for accessing I/Os of NEURON, PATRON, GATE and Unipi 1.1 devices including Extension modules by Unipi technology.

It provides multiple ways to easily access the I/Os of the devices, including:

  • RESTful WebForms API
  • RESTful JSON API
  • Bulk request JSON API
  • WebSocket API
  • JSON-RPC API

Besides that, Evok also supports sending notifications via webhook.

evok-web is a simple demo web application using Evok demonstrating its usage and allowing easy control of the devices configured in Evok.

Documentation

Installation, basic usage examples, configuration and further information can be found on https://evok.readthedocs.io/

Complete API documentation (REST and JSON API) including syntax of all other APIs can be found on https://unipitechnology.stoplight.io/docs/evok and is also released in OpenAPI format Evok_API_OAS.yaml

Major changes between Evok v2 and v3

  • Evok v3 is based on Python3.
  • API breaking changes:
    • Relay entities are excluded from the output endpoint and have a separate endpoint ro. Alternate access via relay is still available.
    • Digital output entities are excluded from the output endpoint and have a separate endpoint do. Alternate access via output is still available.
    • Digital input entities are excluded from the input endpoint and have a separate endpoint di. Alternate access via input is still available.
    • Modified methods of setting analog input ai and analog output ao modes - mode and range are unified into one parameter. For more information see Analog input and Analog output modes in API documentation.
    • Renamed unit_register entity to data_point.
  • Updating Evok from v2 to v3 is unsupported as well as migration from Debian 10 is unsupported - it's recommended to start from a fresh operating system.
  • The configuration of Evok has been completely rewritten to yaml based on tree structure(old .conf structure is no longer supported). See more information in the Evok configuration.
  • Dropped support of rarely used functions/entities (Eeprom,i2cbus,adchip,mcp,gpiobus,pca9685,unipi2,uart,wifi,light_channel,light_device,ext_config)
  • Example website aka 'Unipi Control Panel' has been split into separate project evok-web-jq and can be installed manually.
  • Added option 'all' instead of circuit using API (/rest/relay/all).
  • The device names in the API now match the name in the configuration. For more information see evok configuration.
  • Aliases system has been rewritten. Aliases are automatically saved 5 mins after a change, not immediately. Saving of aliases can be forced via API.
  • Aliases definition file structure has been changed. Evok automatically updates the aliases definition file if a version from Evok v2 is found.
  • Modbus RTU durability has been improved. Loss of communication with one device will not affect the functionality of the entire bus.
  • Added support to communicate with more Modbus TCP servers.

Developer Note

Do you feel like contributing to Evok, or perhaps have a neat idea for an improvement to our system? Feel free to contribute to this repository.

License

Apache License, Version 2.0

evok's People

Contributors

clevehex avatar erwin-willems avatar kratochvil01 avatar martytriska avatar miroslav-ondra avatar mwittig avatar ntd avatar patrikkr010 avatar phillipsnick avatar robertslando avatar tknot avatar tomashora avatar yaneti avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

evok's Issues

[NEURON] Can't start evok after fresh install on UniPian-Neuron-OS-2017-08-30

I installed evok on a freshly installed UniPian-Neuron-OS-2017-08-30 by first running the command mount -o remount,rw /.
Then following the instructions in the readme and rebooting.
But the evok service does not start.

When manually starting the python program I get:

root@unipi:~# python /opt/evok/evok.py
Traceback (most recent call last):
  File "/opt/evok/evok.py", line 35, in <module>
    import config
  File "/opt/evok/config.py", line 7, in <module>
    import neuron
  File "/opt/evok/neuron.py", line 25, in <module>
    import modbusclient_rs485
  File "/opt/evok/modbusclient_rs485.py", line 52, in <module>
    from pymodbus.compat import byte2int
ImportError: No module named compat

[NEURON] Wrong count of I/O on Neuron M203

Hello,

I'm having an issue with M203, one of them is not reporting proper count of I/O in Evok REST API.

This one is working properly

Mar 21 10:54:26 w1e1w1c11100245 evok[8486]: [I 180321 10:54:26 config:66] eprom: UniPi Neuron M203 version: 1.0 serial: 0x4b
Mar 21 10:54:26 w1e1w1c11100245 evok[8486]: [I 180321 10:54:26 evok:1640] Starting using config file /etc/evok.conf
Mar 21 10:54:27 w1e1w1c11100245 evok[8486]: [I 180321 10:54:27 config:78] YAML Definition loaded: DALI.yaml, type: 3, definition count 0
Mar 21 10:54:27 w1e1w1c11100245 evok[8486]: [I 180321 10:54:27 config:78] YAML Definition loaded: S10x.yaml, type: 3, definition count 1
Mar 21 10:54:27 w1e1w1c11100245 evok[8486]: [I 180321 10:54:27 config:78] YAML Definition loaded: xS40.yaml, type: 3, definition count 2
Mar 21 10:54:27 w1e1w1c11100245 evok[8486]: [I 180321 10:54:27 config:78] YAML Definition loaded: xS50.yaml, type: 3, definition count 3
Mar 21 10:54:27 w1e1w1c11100245 evok[8486]: [I 180321 10:54:27 config:78] YAML Definition loaded: L20x.yaml, type: 3, definition count 4
Mar 21 10:54:27 w1e1w1c11100245 evok[8486]: [I 180321 10:54:27 config:78] YAML Definition loaded: L50x.yaml, type: 3, definition count 5
Mar 21 10:54:28 w1e1w1c11100245 evok[8486]: [I 180321 10:54:28 config:78] YAML Definition loaded: L40x.yaml, type: 3, definition count 6
Mar 21 10:54:28 w1e1w1c11100245 evok[8486]: [I 180321 10:54:28 config:78] YAML Definition loaded: xS30.yaml, type: 3, definition count 7
Mar 21 10:54:28 w1e1w1c11100245 evok[8486]: [I 180321 10:54:28 config:78] YAML Definition loaded: L30x.yaml, type: 3, definition count 8
Mar 21 10:54:28 w1e1w1c11100245 evok[8486]: [I 180321 10:54:28 config:78] YAML Definition loaded: M30x.yaml, type: 3, definition count 9
Mar 21 10:54:28 w1e1w1c11100245 evok[8486]: [I 180321 10:54:28 config:78] YAML Definition loaded: xS10.yaml, type: 3, definition count 10
Mar 21 10:54:29 w1e1w1c11100245 evok[8486]: [I 180321 10:54:29 config:78] YAML Definition loaded: L51x.yaml, type: 3, definition count 11
Mar 21 10:54:29 w1e1w1c11100245 evok[8486]: [I 180321 10:54:29 config:78] YAML Definition loaded: M50x.yaml, type: 3, definition count 12
Mar 21 10:54:29 w1e1w1c11100245 evok[8486]: [I 180321 10:54:29 config:78] YAML Definition loaded: M40x.yaml, type: 3, definition count 13
Mar 21 10:54:29 w1e1w1c11100245 evok[8486]: [I 180321 10:54:29 config:78] YAML Definition loaded: CUSTOM MODBUS DEVICE.yaml, type: 3, definition count 14
Mar 21 10:54:29 w1e1w1c11100245 evok[8486]: [I 180321 10:54:29 config:78] YAML Definition loaded: M10x.yaml, type: 3, definition count 15
Mar 21 10:54:29 w1e1w1c11100245 evok[8486]: [I 180321 10:54:29 config:78] YAML Definition loaded: M20x.yaml, type: 3, definition count 16
Mar 21 10:54:29 w1e1w1c11100245 evok[8486]: [I 180321 10:54:29 config:78] YAML Definition loaded: evok-alias.yaml, type: 2, definition count 0
Mar 21 10:54:29 w1e1w1c11100245 evok[8486]: [I 180321 10:54:29 evok:1704] HTTP server listening on port: 8080
Mar 21 10:54:30 w1e1w1c11100245 evok[8486]: [I 180321 10:54:30 modbusclient_tornado:125] SPI client started
Mar 21 10:54:30 w1e1w1c11100245 evok[8486]: [I 180321 10:54:30 neuron:173] Reading SPI boards
Mar 21 10:54:30 w1e1w1c11100245 evok[8486]: [D 180321 10:54:30 owclient:376] Entering 1wire loop
Mar 21 10:54:30 w1e1w1c11100245 evok[8486]: [I 180321 10:54:30 neuron:188] No board on SPI 3
Mar 21 10:54:30 w1e1w1c11100245 evok[8486]: [I 180321 10:54:30 config:354] Alias loaded: <neuron.Relay object at 0x7604dc10> al_lights_kitchen
Mar 21 10:54:30 w1e1w1c11100245 evok[8486]: [I 180321 10:54:30 config:354] Alias loaded: <neuron.Relay object at 0x7604d6b0> al_lights_bedroom

The other one reporting limited count of I/O

Nov  3 17:16:47 neuron evok[336]: [I 161103 17:16:47 config:66] eprom: UniPi Neuron M203 version: 1.0 serial: 0x4a
Nov  3 17:16:47 neuron evok[336]: [I 161103 17:16:47 evok:1640] Starting using config file /etc/evok.conf
Nov  3 17:16:47 neuron evok[336]: [I 161103 17:16:47 config:78] YAML Definition loaded: L20x.yaml, type: 3, definition count 0
Nov  3 17:16:47 neuron evok[336]: [I 161103 17:16:47 config:78] YAML Definition loaded: L30x.yaml, type: 3, definition count 1
Nov  3 17:16:47 neuron evok[336]: [I 161103 17:16:47 config:78] YAML Definition loaded: S10x.yaml, type: 3, definition count 2
Nov  3 17:16:47 neuron evok[336]: [I 161103 17:16:47 config:78] YAML Definition loaded: L40x.yaml, type: 3, definition count 3
Nov  3 17:16:48 neuron evok[336]: [I 161103 17:16:48 config:78] YAML Definition loaded: M50x.yaml, type: 3, definition count 4
Nov  3 17:16:48 neuron evok[336]: [I 161103 17:16:48 config:78] YAML Definition loaded: xS10.yaml, type: 3, definition count 5
Nov  3 17:16:48 neuron evok[336]: [I 161103 17:16:48 config:78] YAML Definition loaded: xS50.yaml, type: 3, definition count 6
Nov  3 17:16:48 neuron evok[336]: [I 161103 17:16:48 config:78] YAML Definition loaded: L50x.yaml, type: 3, definition count 7
Nov  3 17:16:49 neuron evok[336]: [I 161103 17:16:49 config:78] YAML Definition loaded: L51x.yaml, type: 3, definition count 8
Nov  3 17:16:49 neuron evok[336]: [I 161103 17:16:49 config:78] YAML Definition loaded: CUSTOM MODBUS DEVICE.yaml, type: 3, definition count 9
Nov  3 17:16:49 neuron evok[336]: [I 161103 17:16:49 config:78] YAML Definition loaded: M40x.yaml, type: 3, definition count 10
Nov  3 17:16:49 neuron evok[336]: [I 161103 17:16:49 config:78] YAML Definition loaded: M20x.yaml, type: 3, definition count 11
Nov  3 17:16:49 neuron evok[336]: [I 161103 17:16:49 config:78] YAML Definition loaded: M10x.yaml, type: 3, definition count 12
Nov  3 17:16:49 neuron evok[336]: [I 161103 17:16:49 config:78] YAML Definition loaded: DALI.yaml, type: 3, definition count 13
Nov  3 17:16:49 neuron evok[336]: [I 161103 17:16:49 config:78] YAML Definition loaded: xS40.yaml, type: 3, definition count 14
Nov  3 17:16:50 neuron evok[336]: [I 161103 17:16:50 config:78] YAML Definition loaded: xS30.yaml, type: 3, definition count 15
Nov  3 17:16:50 neuron evok[336]: [I 161103 17:16:50 config:78] YAML Definition loaded: M30x.yaml, type: 3, definition count 16
Nov  3 17:16:50 neuron evok[336]: [I 161103 17:16:50 config:78] YAML Definition loaded: evok-alias.yaml, type: 2, definition count 0
Nov  3 17:16:50 neuron evok[336]: [I 161103 17:16:50 evok:1704] HTTP server listening on port: 8080
Nov  3 17:16:50 neuron evok[336]: [I 161103 17:16:50 modbusclient_tornado:125] SPI client started
Nov  3 17:16:50 neuron evok[336]: [I 161103 17:16:50 neuron:173] Reading SPI boards
Nov  3 17:16:50 neuron evok[336]: [D 161103 17:16:50 owclient:376] Entering 1wire loop
Nov  3 17:16:50 neuron evok[336]: [I 161103 17:16:50 neuron:188] No board on SPI 3
Nov  3 17:16:50 neuron evok[336]: [I 161103 17:16:50 config:354] Alias loaded: <neuron.Relay object at 0x750472b0> al_lights_kitchen
Nov  3 17:16:50 neuron evok[336]: [I 161103 17:16:50 config:354] Alias loaded: <neuron.Relay object at 0x75047770> al_lights_bedroom

Difference spotted:

Nov  3 17:16:47 neuron evok[336]: [I 161103 17:16:47 config:66] eprom: UniPi Neuron M203 version: 1.0 serial: 0x4a
Nov  3 17:16:49 neuron evok[336]: [I 161103 17:16:49 config:78] YAML Definition loaded: CUSTOM MODBUS DEVICE.yaml, type: 3, definition count 9

vs

Mar 21 10:54:26 w1e1w1c11100245 evok[8486]: [I 180321 10:54:26 config:66] eprom: UniPi Neuron M203 version: 1.0 serial: 0x4b
Mar 21 10:54:29 w1e1w1c11100245 evok[8486]: [I 180321 10:54:29 config:78] YAML Definition loaded: CUSTOM MODBUS DEVICE.yaml, type: 3, definition count 14

Any help would be appreciated,

Best regards, Adam.

Ability to change Neuron input debounce values

Currently these seem to default to 50ms, I'm assuming it's possible to increase/decrease this looking at the source code (https://github.com/UniPiTechnology/evok/blob/master/evok/neuron.py#L359) and the slider in the provided interface (which throws many JS errors) unless this is something with is UniPi v1 specific.

Figured I'd debug this further by manually executing a POST via Postman to http://IP:8088/rest/input/2_01

Which returns

{"errors": {"__all__": "Input instance has no attribute '_regdebounce'"}, "success": false}

Altered the following line https://github.com/UniPiTechnology/evok/blob/master/evok/neuron.py#L361
to if not (self.regdebounce is None): as theres no reference to _regdebounce inside the class.

Which then gives me

{"errors": {"__all__": "'Board' object has no attribute 'write_regs'"}, "success": false}

As theres no documentation for the underlying board I'm a little unsure on how I can attempt to resolve this issue myself. Any help on this would be much appreciated :)

[NEURON] 'NoneType' object has no attribute 'do_scan'

Prerequisites

  • Can you reproduce the problem in safe mode?
    Untested

  • Are you running the latest Master or the latest release version?
    Tried latest master and release v2.0a

  • [] Did you try to reinstall EVOK?
    Yes and a fresh install of Raspbian Stretch Lite

Version:September 2017
Release date:2017-09-07
Kernel version:4.9

  • Did you perform a cursory search on the [forum] and [google]?

Log files needed

Include the output of the following commands on your Neuron/UniPi device:

/var/log/evok.log

2017-11-23 23:19:36,917 - evok - ERROR - 'model'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 185, in readboards
    yield board.parse_definition(self.hw_dict, i)
  File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 1055, in run
    value = future.result()
  File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 238, in result
    raise_exc_info(self._exc_info)
  File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 307, in wrapper
    yielded = next(result)
  File "/opt/evok/neuron.py", line 574, in parse_definition
    if defin and defin['type'] in config.globals['model']:
KeyError: 'model'
2017-11-23 23:19:36,924 - evok - ERROR - 'model'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 185, in readboards
    yield board.parse_definition(self.hw_dict, i)
  File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 1055, in run
    value = future.result()
  File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 238, in result
    raise_exc_info(self._exc_info)
  File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 307, in wrapper
    yielded = next(result)
  File "/opt/evok/neuron.py", line 574, in parse_definition
    if defin and defin['type'] in config.globals['model']:
KeyError: 'model'
2017-11-23 23:19:36,928 - evok - ERROR - Invalid device circuit number 1_01
Traceback (most recent call last):
  File "/opt/evok/config.py", line 353, in add_aliases
    dev_obj = Devices.by_int(dev_pointer["dev_type"], dev_pointer["circuit"])
  File "/opt/evok/devices.py", line 67, in by_int
    raise Exception('Invalid device circuit number %s' % str(circuit))
Exception: Invalid device circuit number 1_01
2017-11-23 23:19:36,929 - evok - ERROR - Invalid device circuit number 1_02
Traceback (most recent call last):
  File "/opt/evok/config.py", line 353, in add_aliases
    dev_obj = Devices.by_int(dev_pointer["dev_type"], dev_pointer["circuit"])
  File "/opt/evok/devices.py", line 67, in by_int
    raise Exception('Invalid device circuit number %s' % str(circuit))
Exception: Invalid device circuit number 1_02
2017-11-23 23:19:37,395 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:37,897 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:38,399 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:38,901 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:39,403 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:39,906 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:40,407 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:40,909 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:41,411 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:41,914 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:42,416 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:42,918 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:43,420 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:43,922 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:44,424 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:44,927 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:45,429 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:45,931 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:46,433 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:46,935 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:47,437 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:47,940 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:48,442 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:48,944 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:49,446 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:49,948 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:50,450 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:50,952 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:51,454 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:51,957 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:52,459 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:52,961 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:53,463 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:53,965 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:54,467 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:54,969 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:55,472 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:55,974 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:56,476 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:56,978 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:57,480 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:57,982 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:58,483 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:58,986 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:59,488 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:19:59,990 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:00,492 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:00,993 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:09,040 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:09,542 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:10,045 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:10,547 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:11,050 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:11,552 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:12,053 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:12,555 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:13,057 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:13,559 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:14,061 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:14,563 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:15,066 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:15,568 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:16,070 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:16,572 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:17,074 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:17,576 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:18,079 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:18,581 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:19,083 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:19,585 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:20,087 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:20,589 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:21,091 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:21,593 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:22,095 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:22,598 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:23,100 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:23,602 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:24,104 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:24,607 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:25,109 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:25,611 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:26,113 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:26,615 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:27,117 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:27,619 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:28,121 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:28,624 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:29,126 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:29,629 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:30,130 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:30,633 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:31,135 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:31,638 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:32,140 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:32,642 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:33,145 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:33,647 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:34,150 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:34,652 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:35,155 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:35,657 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:36,159 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:36,662 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:37,164 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:37,667 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:38,169 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:38,672 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:39,175 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:39,677 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:40,180 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:40,682 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:41,185 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:41,687 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:42,189 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:42,692 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:43,194 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:43,696 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:44,198 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:44,700 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:45,202 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:45,704 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:46,207 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:46,709 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:47,211 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:47,713 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:48,215 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:48,717 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:49,219 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:49,721 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:50,224 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:50,726 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:51,228 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:51,730 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:52,232 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:52,734 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:53,236 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:53,738 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:54,240 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:54,742 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:55,244 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:55,747 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:56,249 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:56,751 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:57,253 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:57,755 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:58,257 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:58,759 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:59,261 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:20:59,763 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:00,266 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:00,768 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:01,270 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:01,772 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:02,274 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:02,776 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:03,278 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:03,780 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:04,282 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:04,784 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:05,287 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:05,789 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:06,291 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:06,793 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:07,295 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:07,797 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:08,299 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:08,801 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:09,303 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:09,805 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:10,307 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:10,809 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:11,312 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:11,814 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:12,316 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:12,818 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:13,320 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:13,822 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:14,324 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:14,826 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:15,328 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:15,830 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:16,332 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:16,834 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:17,337 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:17,839 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:18,341 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:18,843 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:19,345 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:19,847 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:20,349 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:20,851 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:21,354 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:21,856 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:22,358 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:22,860 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:23,362 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:23,864 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:24,366 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:24,868 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:25,370 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:25,873 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:26,375 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:26,877 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:27,379 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:27,881 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:28,383 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:28,885 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:29,388 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:29,890 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:30,392 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:30,894 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:31,396 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:31,898 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:32,400 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:32,902 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:33,405 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:33,907 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:34,409 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:34,911 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:35,413 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:35,915 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:36,418 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:36,920 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:37,422 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:37,924 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:38,426 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:38,928 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:39,430 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:39,933 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:40,435 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:40,937 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:41,439 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:41,941 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:42,443 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:42,945 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:43,447 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:43,949 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:44,451 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:44,954 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:45,456 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:45,958 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:46,460 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:46,962 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:47,464 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:47,966 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:48,468 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:48,970 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:49,472 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:49,975 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:50,477 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:50,979 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:51,481 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:51,983 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:52,485 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:52,988 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:53,490 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:53,992 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:54,494 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:54,996 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:55,498 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:56,001 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:56,503 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:57,005 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:57,507 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:58,009 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:58,511 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:59,013 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:21:59,515 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:00,017 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:00,519 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:01,021 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:01,524 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:02,026 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:02,528 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:03,030 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:03,532 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:04,034 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:04,536 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:05,038 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:13,232 - evok - ERROR - 'model'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 185, in readboards
    yield board.parse_definition(self.hw_dict, i)
  File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 1055, in run
    value = future.result()
  File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 238, in result
    raise_exc_info(self._exc_info)
  File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 307, in wrapper
    yielded = next(result)
  File "/opt/evok/neuron.py", line 574, in parse_definition
    if defin and defin['type'] in config.globals['model']:
KeyError: 'model'
2017-11-23 23:22:13,237 - evok - ERROR - 'model'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 185, in readboards
    yield board.parse_definition(self.hw_dict, i)
  File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 1055, in run
    value = future.result()
  File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 238, in result
    raise_exc_info(self._exc_info)
  File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 307, in wrapper
    yielded = next(result)
  File "/opt/evok/neuron.py", line 574, in parse_definition
    if defin and defin['type'] in config.globals['model']:
KeyError: 'model'
2017-11-23 23:22:13,242 - evok - ERROR - Invalid device circuit number 1_01
Traceback (most recent call last):
  File "/opt/evok/config.py", line 353, in add_aliases
    dev_obj = Devices.by_int(dev_pointer["dev_type"], dev_pointer["circuit"])
  File "/opt/evok/devices.py", line 67, in by_int
    raise Exception('Invalid device circuit number %s' % str(circuit))
Exception: Invalid device circuit number 1_01
2017-11-23 23:22:13,244 - evok - ERROR - Invalid device circuit number 1_02
Traceback (most recent call last):
  File "/opt/evok/config.py", line 353, in add_aliases
    dev_obj = Devices.by_int(dev_pointer["dev_type"], dev_pointer["circuit"])
  File "/opt/evok/devices.py", line 67, in by_int
    raise Exception('Invalid device circuit number %s' % str(circuit))
Exception: Invalid device circuit number 1_02
2017-11-23 23:22:13,715 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:14,216 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:14,719 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:15,222 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:15,724 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:16,227 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'
2017-11-23 23:22:16,729 - evok - ERROR - 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
  File "/opt/evok/neuron.py", line 225, in scan_boards
    yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'

Running in debug mode

root@raspberrypi:/var/log# sudo python /opt/evok/evok.py
[I 171123 23:22:10 evok:1640] Starting using config file /etc/evok.conf
[I 171123 23:22:10 config:78] YAML Definition loaded: M20x.yaml, type: 3, definition count 0
[I 171123 23:22:10 config:78] YAML Definition loaded: xS40.yaml, type: 3, definition count 1
[I 171123 23:22:10 config:78] YAML Definition loaded: M30x.yaml, type: 3, definition count 2
[I 171123 23:22:10 config:78] YAML Definition loaded: L40x.yaml, type: 3, definition count 3
[I 171123 23:22:11 config:78] YAML Definition loaded: L50x.yaml, type: 3, definition count 4
[I 171123 23:22:11 config:78] YAML Definition loaded: M50x.yaml, type: 3, definition count 5
[I 171123 23:22:11 config:78] YAML Definition loaded: M40x.yaml, type: 3, definition count 6
[I 171123 23:22:11 config:78] YAML Definition loaded: L30x.yaml, type: 3, definition count 7
[I 171123 23:22:11 config:78] YAML Definition loaded: xS50.yaml, type: 3, definition count 8
[I 171123 23:22:11 config:78] YAML Definition loaded: CUSTOM MODBUS DEVICE.yaml, type: 3, definition count 9
[I 171123 23:22:12 config:78] YAML Definition loaded: L20x.yaml, type: 3, definition count 10
[I 171123 23:22:12 config:78] YAML Definition loaded: S10x.yaml, type: 3, definition count 11
[I 171123 23:22:12 config:78] YAML Definition loaded: xS30.yaml, type: 3, definition count 12
[I 171123 23:22:12 config:78] YAML Definition loaded: M10x.yaml, type: 3, definition count 13
[I 171123 23:22:12 config:78] YAML Definition loaded: L51x.yaml, type: 3, definition count 14
[I 171123 23:22:12 config:78] YAML Definition loaded: xS10.yaml, type: 3, definition count 15
[I 171123 23:22:13 config:78] YAML Definition loaded: DALI.yaml, type: 3, definition count 16
[I 171123 23:22:13 config:78] YAML Definition loaded: evok-alias.yaml, type: 2, definition count 0
[I 171123 23:22:13 evok:1704] HTTP server listening on port: 8080
[I 171123 23:22:13 modbusclient_tornado:125] SPI client started
[I 171123 23:22:13 neuron:173] Reading SPI boards
Process OwBusDriver-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/opt/evok/owclient.py", line 375, in run
    ow.init(self.bus)
  File "/usr/lib/python2.7/dist-packages/ow/__init__.py", line 224, in init
    raise exNoController
exNoController
[E 171123 23:22:13 neuron:191] 'model'
    Traceback (most recent call last):
      File "/opt/evok/neuron.py", line 185, in readboards
        yield board.parse_definition(self.hw_dict, i)
      File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 1055, in run
        value = future.result()
      File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 238, in result
        raise_exc_info(self._exc_info)
      File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 307, in wrapper
        yielded = next(result)
      File "/opt/evok/neuron.py", line 574, in parse_definition
        if defin and defin['type'] in config.globals['model']:
    KeyError: 'model'
[E 171123 23:22:13 neuron:191] 'model'
    Traceback (most recent call last):
      File "/opt/evok/neuron.py", line 185, in readboards
        yield board.parse_definition(self.hw_dict, i)
      File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 1055, in run
        value = future.result()
      File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 238, in result
        raise_exc_info(self._exc_info)
      File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 307, in wrapper
        yielded = next(result)
      File "/opt/evok/neuron.py", line 574, in parse_definition
        if defin and defin['type'] in config.globals['model']:
    KeyError: 'model'
[I 171123 23:22:13 neuron:188] No board on SPI 3
[E 171123 23:22:13 config:358] Invalid device circuit number 1_01
    Traceback (most recent call last):
      File "/opt/evok/config.py", line 353, in add_aliases
        dev_obj = Devices.by_int(dev_pointer["dev_type"], dev_pointer["circuit"])
      File "/opt/evok/devices.py", line 67, in by_int
        raise Exception('Invalid device circuit number %s' % str(circuit))
    Exception: Invalid device circuit number 1_01
[E 171123 23:22:13 config:358] Invalid device circuit number 1_02
    Traceback (most recent call last):
      File "/opt/evok/config.py", line 353, in add_aliases
        dev_obj = Devices.by_int(dev_pointer["dev_type"], dev_pointer["circuit"])
      File "/opt/evok/devices.py", line 67, in by_int
        raise Exception('Invalid device circuit number %s' % str(circuit))
    Exception: Invalid device circuit number 1_02
[E 171123 23:22:13 neuron:227] 'NoneType' object has no attribute 'do_scan'
    Traceback (most recent call last):
      File "/opt/evok/neuron.py", line 225, in scan_boards
        yield self.modbus_cache_map.do_scan()
    AttributeError: 'NoneType' object has no attribute 'do_scan'
[E 171123 23:22:14 neuron:227] 'NoneType' object has no attribute 'do_scan'
    Traceback (most recent call last):
      File "/opt/evok/neuron.py", line 225, in scan_boards
        yield self.modbus_cache_map.do_scan()
    AttributeError: 'NoneType' object has no attribute 'do_scan'
[E 171123 23:22:14 neuron:227] 'NoneType' object has no attribute 'do_scan'
    Traceback (most recent call last):
      File "/opt/evok/neuron.py", line 225, in scan_boards
        yield self.modbus_cache_map.do_scan()
    AttributeError: 'NoneType' object has no attribute 'do_scan'
[E 171123 23:22:15 neuron:227] 'NoneType' object has no attribute 'do_scan'
    Traceback (most recent call last):
      File "/opt/evok/neuron.py", line 225, in scan_boards
        yield self.modbus_cache_map.do_scan()
    AttributeError: 'NoneType' object has no attribute 'do_scan'
[E 171123 23:22:15 neuron:227] 'NoneType' object has no attribute 'do_scan'
    Traceback (most recent call last):
      File "/opt/evok/neuron.py", line 225, in scan_boards
        yield self.modbus_cache_map.do_scan()
    AttributeError: 'NoneType' object has no attribute 'do_scan'
[E 171123 23:22:16 neuron:227] 'NoneType' object has no attribute 'do_scan'
    Traceback (most recent call last):
      File "/opt/evok/neuron.py", line 225, in scan_boards
        yield self.modbus_cache_map.do_scan()
    AttributeError: 'NoneType' object has no attribute 'do_scan'
[E 171123 23:22:16 neuron:227] 'NoneType' object has no attribute 'do_scan'
    Traceback (most recent call last):
      File "/opt/evok/neuron.py", line 225, in scan_boards
        yield self.modbus_cache_map.do_scan()
    AttributeError: 'NoneType' object has no attribute 'do_scan'
^C[I 171123 23:22:16 evok:1779] Shutting down

Description

Service never starts due to error on https://github.com/UniPiTechnology/evok/blob/master/evok/neuron.py#L225

Steps to Reproduce

Install fresh Raspbian
Install Evok as per documentation at https://evok.api-docs.io/1.0/jKcTKe5aRBCNjt8Az/introduction
Run in debug mode

UNIPI 1.1: evok.conf issue with sensor or 1wdevice

I am using UniPi and i am migrating from the legacy version to the last evok version to use the lastest raspian stretch os.
I carefully updated the new evok.conf version and inserted the [1WDEVICE_xx] and [SENSOR_xx] definitions that i am using and that were working in the legacy version.
When running evok with rest/api, i get an issue that OWSensorDevice does not have an attribute full, and this for all the devices that are defined.
I looked into the config.py source code and it is very different between the legacy and recent version.
There must be an error in the yaml files to return the json string for a OWSensorDevice when is needed to return the rest/api json string.
Can this be corrected?
Thanks in advance

[GENERAL] webserver port

I have been running a reinstall test with the latest evok, RP3 B+ and raspbian image (2018/04/18) and everything worked fine with the exception of the web server port which defaulted to 80 instead of the value 8180 that i had entered during the installation.
I installed with Unipi 1.1

I corrected nginx/sites-enabled as per the picture below and it worked.
So for me the error is gone and i hope it is fixed when i need to install again.

image

I did not run the install again or looked for the issue in the installation script, but just want to mentioned this happened to my install.
Thanks

[UniPi 1.1] Evok v2.0.1 rpc server not found (404)

Prerequisites

*[]Tried to reinstall evok multiple times.

  • Using the latest version (2.0.1)
  • Tried to reinstall evok multiple times.
  • Could not find a solution on google or the forums.

Log files needed

Please find attached

evok.log is empty
evok.access.log
ps_fax_output.txt

Description

After updating to evok from version 1.0.2 to 2.0.1 on a raspberry pi 3B (raspbian) the evok server returns 404 for any rpc requests.

Steps to Reproduce

  1. Install evok version 2.0.1 for Unipi v1.x
  2. reboot
  3. Do a remote procedure call to the ip and website port as set up in the installation

Expected behavior:
Return the result from evok server

Actual behavior:
Returns 404, 'Not Found'

[GENERAL] Document API responses

I notice there are various REST requests documented in the readme.md. However, there are no responses described. For completeness the responses to each request on success/failure should be documented.

Set proper logging levels

Currently the system logs contain all actions that evok does, this needs to be limited by setting the log in the systemd service configuration

evok web client: settings menu not working

Environment

  • UniPi Neuron M503
  • Jessie Lite
  • evok (master branch)
  • accessing web client with Chrome 59

Error

Uncaught TypeError: $(...).tmpl is not a function
    at HTMLDivElement.<anonymous> (http://192.168.20.23/:44:33)
    at HTMLDocument.dispatch (http://192.168.20.23/js/jquery/jquery-2.1.1.min.js:1043:238)
    at HTMLDocument.r.handle (http://192.168.20.23/js/jquery/jquery-2.1.1.min.js:1010:90)
    at Object.trigger (http://192.168.20.23/js/jquery/jquery-2.1.1.min.js:1033:169)
    at HTMLDivElement.<anonymous> (http://192.168.20.23/js/jquery/jquery-2.1.1.min.js:1134:21)
    at Function.each (http://192.168.20.23/js/jquery/jquery-2.1.1.min.js:72:41)
    at n.fn.init.each (http://192.168.20.23/js/jquery/jquery-2.1.1.min.js:21:18)
    at n.fn.init.trigger (http://192.168.20.23/js/jquery/jquery-2.1.1.min.js:1133:21)
    at a.(anonymous function).(anonymous function)._trigger (http://192.168.20.23/js/jquery/jquery.mobile-1.4.5.min.js:298:33)
    at a.(anonymous function).(anonymous function)._createWidget (http://192.168.20.23/js/jquery/jquery.mobile-1.4.5.min.js:236:184)

Neuron L203 - AO wrong voltage - 3.3V instead of 10V

In the last version of the evok (2days ago) I did found a problem with an analog output. If I choose in the GUI 10V (or I'll send it over WS message/http post) there is only 3.3V at the output as the maximum. 10V should be reached only with WS message/http post once I send 30!

wget -qO- http://10.0.1.122/rest/ao/1_01 --post-data='value=30'

or

{
            cmd: 'set',
            dev: 'ao',
            unit: 'V',
            circuit: '1_01',
            value: 30
}

[GENERAL] Detect and output double tap, triple tap, long press and sustained hold input events

As discussed: http://forum.unipi.technology/viewtopic.php?f=14&t=189

For home automation lighting I'm guessing you'd connect digital inputs to momentary contact light switches.

In such an application it would be very useful to have double tap, triple tap, long press events detected. I'm guessing the best way to do that is in the evok layer and have it spit out different events.

What about sustained holding of an input? Would that be best handled with an 'input on' / 'input off' event pair? Here I'm thinking for controlling dimmable lights or blinds manually rather than setting to predefined levels.

UNIPI 1.1: evok.conf : port config parameter is ignored

I am using a UniPi version 1.1 on raspian stretch.
I noticed the following issues:

  1. in evok.py, line 2153, port is fixed to 8080 and the port value of evok.conf is not read

  2. in evok.py, line 2240, the soap server port is fixed to 8081 and should be a config parameter

  3. further issue is the web version, it is not possible to use any more

  4. when a password is set in the config file, an error is produced when running evok.py:
    Traceback (most recent call last):
    File "evok.py", line 2294, in
    main()
    File "evok.py", line 2144, in main
    if pw: userCookieHelper._passwords.append(pw)

it seems that the variable userCookieHelper is not initialised anywhere

[GENERAL] Websocket cmd:all

Hi all
the websocket cmd:all is affected by bug. Every time I run it the following exception is raised:
unsupported operand type(s) for +=: 'dict' and 'list'
At line 148
result = {}
is initialized as dict but later in line 152 :
result += map(lambda dev: dev.full(), Devices.by_int(dev))
there is a concatenation between dict (result) and list (the result of the fuction dev.full() )
A quick workaround to solve the issue is initialize result as list
result=[]

[NEURON] Not all LED events are not emitted via the WebSocket

Prerequisites

  • Are you running the latest Master or the latest release version?

2.0.1

Description

On the Neuron if you change the LED state via the HTTP control panel, WebSocket events are only emitted for circuit 1.01.

Example toggling 1.01 I will receive:

{ value: 0, circuit: '1_01', dev: 'led', glob_dev_id: 1 }
{ value: 1, circuit: '1_01', dev: 'led', glob_dev_id: 1 }

Toggling 1.02, 1.03 or 1.04 no output is received.

question for iButton use

Dear,

i made major changes to owclient.py (see attached) to accomodate 1w buttons (DS2401 devices).
With these changes and when the scan_interval is set to zero in the config file, everything seem to work fine. Buttons connections are properly reported in the logging.
I also remove disconnected buttons from the structures.

My question is, how can i update the webservice when the button is removed?
It seems the button stays in the /rest/all list even removed from the mydevices structure:

{
lost: false,
interval: 15,
dev: "1wbutton",
circuit: "017CBBC7010000F3",
time: 1524648260.543897,
typ: "DS2401"
} 

Below is the source code. can you point me in the right direction?
It must be something simple i missed, maybe a device event that i need to call?
Thanks!
Rudy

import multiprocessing
import os
import time
import ow
import signal
import string
from tornado.ioloop import IOLoop
import devents
import devices
from log import *

MAX_LOSTINTERVAL = 300  # 5minut

OWCMD_INTERVAL = 1
OWCMD_SCAN = 2
OWCMD_SCAN_INTERVAL = 3
OWCMD_DEFAULT_INTERVAL = 4
OWCMD_SET_PIO = 5
SUPPORTED_DEVICES = ["DS18S20", "DS18B20", "DS2438", "DS2408", "DS2413", "DS2401"]

import fcntl

def set_non_blocking(fd):
    flags = fcntl.fcntl(fd, fcntl.F_GETFL)
    fcntl.fcntl(fd, fcntl.F_SETFL, flags | os.O_NONBLOCK)

class MySensor(object):
    def __init__(self, addr, typ, bus, interval=None, dynamic=True, circuit=None, major_group=1, is_static=False):
        self.alias = ""
        self.devtype = devices.SENSOR
        self.type = typ
        self.circuit = circuit if circuit != None else addr
        self.major_group = major_group
        self.address = addr
        self.interval = bus.interval if interval is None else interval  # seconds
        self.is_dynamic_interval = dynamic  # dynamically change interval #TODO
        self.last_value = None
        self.value = None
        self.lost = False
        self.time = 0
        self.readtime = 0
        self.sens = None
        if is_static:
            self.__bus = bus  #can't pickle, must be reset/set by pickling/un-pickling
        bus.register_sensor(self)

    def get_value(self):
        return self.value

    def get(self):
        return (self.value, self.lost, self.time, self.interval)

    def set(self, interval=None):
        if not (interval is None):
            self.__bus.taskWr.send((OWCMD_INTERVAL, self.circuit, interval))
            self.interval = interval
            devents.config(self)

    def _set_value(self, value):
        """ Called in master process after receiving result from subprocess
            to update values
            Invokes Events
        """
        if type(value) is bool:
            if not self.lost:
                self.lost = True
                devents.status(self)
        elif type(value) is tuple:
            self.lost = False
            if self.value is None:
                self.value = ()
                for i in range(len(value)):
                    self.value += (None,)
            for old, new in zip(self.value, value):
                if old != new:
                    self.value = value
                    self.time = time.time()
                    devents.status(self)
                    break
        else:
            self.lost = False
            self.time = time.time()
            if self.value != value:
                self.value = value
                devents.status(self)

    def read_val_from_sens(self, sens):
        raise NotImplementedError("Please Implement this method")

    def calc_interval(self):
        if self.lost:
            self.lostinterval *= 2
            if self.lostinterval > MAX_LOSTINTERVAL: self.lostinterval = MAX_LOSTINTERVAL
            return self.lostinterval
        if self.is_dynamic_interval:
            ##TODO
            pass
        return self.interval

    def set_lost(self):
        if self.lost: return
        self.lost = True
        self.lostinterval = self.interval

class DS18B20(MySensor):  # thermometer
    def full(self):
        return {'dev': 'temp', 
                'circuit': self.circuit, 
                'address': self.address,
                'value': self.value, 
                'lost': self.lost, 
                'time': self.time, 
                'interval': self.interval, 
                'typ': self.type}
        

    def simple(self):
        return {'dev': 'temp', 
                'circuit': self.circuit, 
                'value': self.value, 
                'lost': self.lost, 
                'typ': self.type}

    def read_val_from_sens(self, sens):
        new_val = float(sens.temperature)
        if not (new_val == 85.0 and abs(new_val - self.value) > 2):
            self.value = round(float(sens.temperature) * 2, 1) / 2  # 4 bits for frac part of number
        else:
            logger.debug("PoR detected! 85C")

class DS2438(MySensor):  # vdd + vad + thermometer

    def full(self):
        if not (type(self.value) is tuple):
            self.value = (None, None, None)
        return {'dev': 'temp', 
                'circuit': self.circuit, 
                'humidity': (((float(self.value[1]) / (float(self.value[0]) - 0.16)) / 0.0062) / (1.0546 - 0.00216 * float(self.value[2]))),
                'vdd': self.value[0], 
                'vad': self.value[1],
                'temp': self.value[2], 
                'vis': self.value[3],
                'lost': self.lost, 
                'time': self.time, 
                'interval': self.interval,
                'typ': self.type}

    def simple(self):
        if not (type(self.value) is tuple):
            self.value = (None, None, None)
        return {'dev': 'temp', 
                'circuit': self.circuit, 
                'vdd': self.value[0], 
                'vad': self.value[1],
                'temp': self.value[2],
                'vis': self.value[3],
                'lost': self.lost, 
                'typ': self.type}

    def read_val_from_sens(self, sens):
        self.value = (sens.VDD, sens.VAD, sens.temperature, sens.vis)

class DS2401(MySensor):  # dallas ibutton

    def full(self):
        return {'dev': '1wbutton', 
                'circuit': self.circuit, 
                'lost': self.lost, 
                'time': self.time, 
                'interval': self.interval,
                'typ': self.type}

    def simple(self):
        return {'dev': '1wbutton', 
                'circuit': self.circuit, 
                'lost': self.lost, 
                'typ': self.type}

    def read_val_from_sens(self, sens):
        # read from the uncached file to check if the iButton is still there.  
        # self.value cannot be a boolean as the result queue check then assumes it is lost, so assign an integer value instead
        self.lost=not True in set(sens.address==self.address for sens in ow.Sensor("/uncached").sensors())
        self.value=int(not self.lost)

    def calc_interval(self): return 0  # make sure these buttons are read very frequently

    def _set_value(self, value):
        """ Called in master process after receiving result from subprocess
            to update values
            Invokes Events
        """
        if type(value) is not bool: self.time = time.time()
        devents.status(self)

class DS2408(MySensor):
    def __init__(self, addr, typ, bus, interval=None, is_dynamic_interval=True, circuit=None, major_group=1, is_static=False):
        self.type = typ
        self.circuit = circuit if circuit != None else addr
        self.address = addr
        self.major_group = major_group
        self.interval = bus.interval if interval is None else interval  # seconds
        self.is_dynamic_interval = is_dynamic_interval  # dynamically change interval #TODO
        self.last_value = None
        self.value = None
        self.lost = False
        self.time = 0
        self.readtime = 0
        self.sens = None
        if is_static:
            self.__bus = bus  #can't pickle, must be reset/set  by pickeling/unpicklgin
        bus.register_sensor(self)
        self.pios = []

    def read_val_from_sens(self, sens):
        #actual values must be read from sensed_ALL, but writes to the GPIOs must be done in PIO_x(PIO_ALL)
        #pios_values = map(int, self.sens.sensed_ALL.split(','))
        pios_values = [int(not int(i)) for i in self.sens.sensed_ALL.split(',')]
        self.value = pios_values

    def full(self):
        return {'dev': '1wdevice', 
                'circuit': self.circuit, 
                'address': self.address, 
                'value': None, 
                'typ': self.type}        

    def simple(self):
        return self.full()

    def m_set_pio(self, pio, value):
        self.__bus.taskWr.send((OWCMD_SET_PIO, self.circuit, value))

    def set_pio(self, pio, value):
        if self.type == 'DS2408':
            setattr(self.sens, 'PIO_'+repr(pio), str(value))
        elif self.type == 'DS2406' or self.type == 'DS2413':
            pio_alpha = dict(zip(range(0, 26), string.ascii_uppercase))
            setattr(self.sens, 'PIO_'+pio_alpha[pio], str(value))

    def register_pio(self, pio):
        if not pio in self.pios:
            self.pios.append(pio)

    def _set_value(self, value):
        """ Called in master process after receiving result from subprocess
            to update values
            Invokes Events
        """
        if type(value) is bool:
            if not self.lost:
                self.lost = True
                devents.status(self)
        else:
            self.lost = False
            self.time = time.time()
            if self.value != value:
                self.value = value
                devents.status(self)
                #update DS_2408_pio object that are attached to this DS2408
                if type(value) is list:
                    pios_cnt = len(value)
                    for pio in self.pios:
                        if pio.pin < pios_cnt:
                            pio.set_value(value[pio.pin])


def MySensorFabric(address, typ, bus, interval=None, dynamic=True, circuit=None, major_group = 1, is_static=False):
    if (typ == 'DS18B20') or (typ == 'DS18S20'):
        return DS18B20(address, typ, bus, interval=interval, circuit=circuit)
    elif (typ == 'DS2438'):
        return DS2438(address, typ, bus, interval=interval, circuit=circuit)
    elif (typ == 'DS2408') or (typ == 'DS2406') or (typ == 'DS2413'):
        return DS2408(address, typ, bus, interval=interval, circuit=circuit, is_static=is_static)
    elif (typ == 'DS2401'):
        return DS2401(address, typ, bus, interval=interval, circuit=circuit)
    else:
        logger.debug("Unsupported 1wire device %s (%s) detected", typ, address)
        return None


class OwBusDriver(multiprocessing.Process):
    def __init__(self, circuit, taskPipe, resultPipe, interval=60, scan_interval=300, major_group=1, bus='--i2c=/dev/i2c-1:ALL'):
        multiprocessing.Process.__init__(self)
        self.devtype = devices.OWBUS
        self.circuit = circuit
        self.taskQ = taskPipe[0]
        self.taskWr = taskPipe[1]
        self.resultRd = resultPipe[0]
        self.resultQ = resultPipe[1]
        self.major_group = major_group
        self.scan_interval = scan_interval
        self.interval = interval
        self.scanned = set()
        self.mysensors = list()
        self.bus = bus
        self.register_in_caller = lambda x: None  # pro registraci, zatim prazdna funkce
        # ow.init(bus)


    def full(self):
        return {'dev': 'owbus', 
                'circuit': self.circuit, 
                'bus': self.bus}

    def list(self):
        list = dict()
        for dev in SUPPORTED_DEVICES:
            temp_list = [sens.address for sens in self.mysensors if sens.type == dev]
            list[dev] = temp_list
        return list


    def switch_to_async(self, mainLoop):
        self.daemon = True
        self.start()
        self.register_in_caller = lambda d: devices.Devices.register_device(devices.SENSOR, d)
        set_non_blocking(self.resultRd)
        mainLoop.add_handler(self.resultRd, self.check_resultq, IOLoop.READ)


    def set(self, scan_interval=None, do_scan=False, interval=None):
        chg = False
        if not (interval is None):
            if interval != self.interval:
                self.taskWr.send((OWCMD_DEFAULT_INTERVAL, 0, interval))
                self.interval = interval
                chg = True
        if not (scan_interval is None):
            if scan_interval != self.scan_interval:
                self.taskWr.send((OWCMD_SCAN_INTERVAL, 0, scan_interval))
                self.scan_interval = scan_interval
                chg = True
        if do_scan:
            self.taskWr.send((OWCMD_SCAN, 0, 0))

        if chg:
            devents.config(self)

    def register_sensor(self, mysensor):
        self.mysensors.append(mysensor)

    #use in main process, callback for tornado ioloop = Consumer of results
    def check_resultq(self, r_pipe, event):  #, register_in_caller):
        obj = self.resultRd.recv()
        if isinstance(obj, MySensor):
            self.register_sensor(obj)
            self.register_in_caller(obj)
            obj.__bus = self
            #Devices.register_device(5,obj)
            logger.debug("New sensor %s - %s", str(obj.type),str(obj.circuit))
        elif type(obj) is tuple:
            # obj[0] - circuit/address of sensor
            # obj[1] - Boolean(True) -> Lost
            #        - value
            #        - (value,value..)
            circuit = obj[0]
            mysensor = next(x for x in self.mysensors if x.circuit == circuit)
            if mysensor: mysensor._set_value(obj[1])

    # ####################################w.init(b#
    # this part is running used in subprocess
    def do_scan(self):
        """ Initiate 1wire bus scanning, 
            check existence in self.scanned
            join sens with mysensor
        """
        for sens in ow.Sensor("/uncached").sensors():
            if not (sens in self.scanned):
                address = sens.address
                try:
                    # find sensor in list self.mysenors by address
                    mysensor = next(x for x in self.mysensors if x.address == address)
                    logger.info("Sensor found " + str(mysensor.circuit))
                except Exception:
                    #if not found, create new one
                    mysensor = MySensorFabric(address, sens.type, self, interval=15)
                    if mysensor:
                        # notify master process about new sensor
                        self.resultQ.send(mysensor)
                #mysensor = self.find_mysensor(sens)
                if mysensor:
                    mysensor.sens = sens
                    self.scanned.add(sens)

    def do_command(self, cmd):
        command, circuit, value = cmd
        if command == OWCMD_INTERVAL:
            mysensor = next(x for x in self.mysensors if x.circuit == circuit)
            if mysensor:
                mysensor.interval = value
        elif command == OWCMD_SCAN:
            self.do_scan()
        elif command == OWCMD_SCAN_INTERVAL:
            self.scan_interval = value
        elif command == OWCMD_DEFAULT_INTERVAL:
            self.interval = value
        elif command == OWCMD_SET_PIO:
            mysensor = next(x for x in self.mysensors if x.circuit == circuit)
            if mysensor:
                pin, value = value
                mysensor.set_pio(pin, int(value))

    def run(self):
        """ Main loop 
            Every scan_interval initiate bus scanning
            Peridocally scan 1wire sensors, else sleep
        """
        signal.signal(signal.SIGINT, signal.SIG_IGN)
        ow.init(self.bus)
        logger.debug("Entering 1wire loop")
        self.do_scan()
        while len(self.mysensors) == 0:
            if self.taskQ.poll(20):
                #commands from master
                cmd = self.taskQ.recv()
                self.do_command(cmd)
            self.do_scan()

        scan_time = time.time() + self.scan_interval
        mysensor = min(self.mysensors, key=lambda x: x.time)
        while True:
            t1 = time.time() 
            if t1 >= scan_time:
                self.do_scan()
                t1 = time.time()
                scan_time = t1 + self.scan_interval
            try:
                mysensor.read_val_from_sens(mysensor.sens)
                if isinstance(mysensor,DS2401) and (mysensor.value==0): #iButton is lost, clean up 
                    self.resultQ.send((mysensor.circuit, mysensor.lost))
                    self.scanned.remove(mysensor.sens)
                    #print(str(devices.Devices['sensor']))  -> seems device is gone already
                    #devices.Devices.remove_item(devices.SENSOR, mysensor)
                    self.mysensors.pop(self.mysensors.index(mysensor))
                    logger.debug("Bye Sensor %s - %s", str(mysensor.type),str(mysensor.circuit))
                else:
                    mysensor.lost = False
                    mysensor.readtime = t1
                    if self.resultQ:
                        # send measurement into result queue
                        self.resultQ.send((mysensor.circuit, mysensor.value))
            except (ow.exUnknownSensor, AttributeError):
                if not mysensor.lost:
                    mysensor.set_lost()
                    self.resultQ.send((mysensor.circuit, mysensor.lost))
            mysensor.time = t1 + mysensor.calc_interval()
            mysensor = min(self.mysensors, key=lambda x: x.time)
            t1 = time.time()
            if mysensor.time > t1:
                if self.taskQ.poll(mysensor.time - t1):
                    #commands from master
                    cmd = self.taskQ.recv()
                    self.do_command(cmd)

[NEURON] Modbus broken on xS30

Prerequisites

  • Are you running the latest Master or the latest release version?
  • Did you try to reinstall EVOK?
  • Did you perform a cursory search on the forum and google?

Log files needed

Everything is running as expected

 PID TTY      STAT   TIME COMMAND
    2 ?        S      0:00 [kthreadd]
    3 ?        S      0:00  \_ [ksoftirqd/0]
    5 ?        S<     0:00  \_ [kworker/0:0H]
    7 ?        S      0:00  \_ [rcu_sched]
    8 ?        S      0:00  \_ [rcu_bh]
    9 ?        S      0:00  \_ [migration/0]
   10 ?        S<     0:00  \_ [lru-add-drain]
   11 ?        S      0:00  \_ [cpuhp/0]
   12 ?        S      0:00  \_ [cpuhp/1]
   13 ?        S      0:00  \_ [migration/1]
   14 ?        S      0:00  \_ [ksoftirqd/1]
   16 ?        S<     0:00  \_ [kworker/1:0H]
   17 ?        S      0:00  \_ [cpuhp/2]
   18 ?        S      0:00  \_ [migration/2]
   19 ?        S      0:00  \_ [ksoftirqd/2]
   21 ?        S<     0:00  \_ [kworker/2:0H]
   22 ?        S      0:00  \_ [cpuhp/3]
   23 ?        S      0:00  \_ [migration/3]
   24 ?        S      0:00  \_ [ksoftirqd/3]
   26 ?        S<     0:00  \_ [kworker/3:0H]
   27 ?        S      0:00  \_ [kdevtmpfs]
   28 ?        S<     0:00  \_ [netns]
   29 ?        S      0:00  \_ [khungtaskd]
   30 ?        S      0:00  \_ [oom_reaper]
   31 ?        S<     0:00  \_ [writeback]
   32 ?        S      0:00  \_ [kcompactd0]
   33 ?        S<     0:00  \_ [crypto]
   34 ?        S<     0:00  \_ [bioset]
   35 ?        S<     0:00  \_ [kblockd]
   36 ?        S<     0:00  \_ [watchdogd]
   37 ?        S      0:00  \_ [kworker/0:1]
   38 ?        S<     0:00  \_ [rpciod]
   39 ?        S<     0:00  \_ [xprtiod]
   40 ?        S      0:00  \_ [kswapd0]
   41 ?        S<     0:00  \_ [vmstat]
   42 ?        S<     0:00  \_ [nfsiod]
   52 ?        S<     0:00  \_ [kthrotld]
   53 ?        S<     0:00  \_ [bioset]
   54 ?        S<     0:00  \_ [bioset]
   55 ?        S      0:00  \_ [kworker/1:1]
   56 ?        S<     0:00  \_ [bioset]
   57 ?        S<     0:00  \_ [bioset]
   58 ?        S<     0:00  \_ [bioset]
   59 ?        S<     0:00  \_ [bioset]
   60 ?        S<     0:00  \_ [bioset]
   61 ?        S<     0:00  \_ [bioset]
   62 ?        S<     0:00  \_ [bioset]
   63 ?        S<     0:00  \_ [bioset]
   64 ?        S<     0:00  \_ [bioset]
   65 ?        S<     0:00  \_ [bioset]
   66 ?        S<     0:00  \_ [bioset]
   67 ?        S<     0:00  \_ [bioset]
   68 ?        S<     0:00  \_ [bioset]
   69 ?        S<     0:00  \_ [bioset]
   70 ?        S<     0:00  \_ [bioset]
   71 ?        S<     0:00  \_ [bioset]
   72 ?        S<     0:00  \_ [bioset]
   73 ?        S<     0:00  \_ [bioset]
   74 ?        S<     0:00  \_ [bioset]
   75 ?        S<     0:00  \_ [bioset]
   76 ?        S<     0:00  \_ [bioset]
   77 ?        S<     0:00  \_ [bioset]
   78 ?        S<     0:00  \_ [iscsi_eh]
   79 ?        S<     0:00  \_ [dwc_otg]
   80 ?        S<     0:00  \_ [DWC Notificatio]
   81 ?        S<     0:00  \_ [VCHIQ-0]
   82 ?        S<     0:00  \_ [VCHIQr-0]
   83 ?        S<     0:00  \_ [VCHIQs-0]
   84 ?        S      0:00  \_ [VCHIQka-0]
   85 ?        S<     0:00  \_ [SMIO]
   86 ?        S      0:00  \_ [kworker/1:2]
   87 ?        S      0:00  \_ [irq/92-mmc1]
   90 ?        S<     0:00  \_ [bioset]
   91 ?        S      0:00  \_ [mmcqd/0]
   92 ?        S      0:00  \_ [kworker/2:1]
   93 ?        S      0:00  \_ [kworker/3:1]
   94 ?        S      0:00  \_ [jbd2/mmcblk0p2-]
   95 ?        S<     0:00  \_ [ext4-rsv-conver]
   96 ?        S<     0:00  \_ [ipv6_addrconf]
  108 ?        S<     0:00  \_ [kworker/2:1H]
  109 ?        S      0:00  \_ [kworker/u8:1]
  149 ?        S      0:00  \_ [kworker/3:2]
  150 ?        S      0:00  \_ [kworker/0:2]
  165 ?        S      0:00  \_ [ext4lazyinit]
  222 ?        S      0:01  \_ [spi0]
  254 ?        S<     0:00  \_ [cfg80211]
  259 ?        S<     0:00  \_ [brcmf_wq/mmc1:0]
  260 ?        S      0:00  \_ [brcmf_wdog/mmc1]
  269 ?        S      0:00  \_ [kworker/u8:2]
  271 ?        S      0:00  \_ [kworker/2:3]
  280 ?        S      0:00  \_ [neuronspi]
  288 ?        S      0:00  \_ [neuronspi]
  293 ?        S      0:00  \_ [neuronspi]
  298 ?        S      0:12  \_ [neuronspi]
  546 ?        S<     0:00  \_ [kworker/3:1H]
  556 ?        S<     0:00  \_ [kworker/1:1H]
  755 ?        S<     0:00  \_ [kworker/0:1H]
  797 ?        S      0:00  \_ [kworker/1:0]
  802 ?        S      0:00  \_ [kworker/u8:0]
  807 ?        S      0:00  \_ [kworker/0:0]
    1 ?        Ss     0:03 /sbin/init
  113 ?        Ss     0:00 /lib/systemd/systemd-journald
  152 ?        Ss     0:00 /lib/systemd/systemd-udevd
  362 ?        Ss     0:00 /opt/neuron-bin/neuron_tcp_server -p 502 -a 255 --che
  369 ?        Ss     0:00 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d
  370 ?        Ss     0:00 avahi-daemon: running [unipi-stretch.local]
  381 ?        S      0:00  \_ avahi-daemon: chroot helper
  375 ?        Ss     0:00 /usr/sbin/cron -f
  377 ?        Ss     0:00 /usr/bin/dbus-daemon --system --address=systemd: --no
  397 ?        Ssl    0:00 /usr/sbin/rsyslogd -n
  398 ?        Ss     0:00 /lib/systemd/systemd-logind
  399 ?        Ssl    0:32 /usr/bin/python /opt/evok/evok.py
  589 ?        S      0:00  \_ /usr/bin/python /opt/evok/evok.py
  458 ?        Ss     0:00 /usr/sbin/sshd -D
  760 ?        Ss     0:00  \_ sshd: pi [priv]
  777 ?        S      0:00      \_ sshd: pi@pts/0
  780 pts/0    Ss     0:00          \_ -bash
  820 pts/0    S      0:00              \_ sudo -i
  824 pts/0    S      0:00                  \_ -bash
  849 pts/0    R+     0:00                      \_ ps -fax
  471 tty1     Ss+    0:00 /sbin/agetty --noclear tty1 linux
  474 ?        Ss     0:00 /sbin/netplugd -p /var/run/netplugd.pid
  479 ?        Ss     0:00 nginx: master process /usr/sbin/nginx -g daemon on; m
  480 ?        S      0:00  \_ nginx: worker process
  481 ?        S      0:00  \_ nginx: worker process
  482 ?        S      0:00  \_ nginx: worker process
  483 ?        S      0:00  \_ nginx: worker process
  568 ?        Ssl    0:00 /lib/systemd/systemd-timesyncd
  571 ?        Ss     0:00 /sbin/dhclient -4 -v -pf /run/dhclient.eth0.pid -lf /
  767 ?        Ss     0:00 /lib/systemd/systemd --user
  770 ?        S      0:00  \_ (sd-pam)

/var/log/evok.log is empty

Changes in /etc/evok.conf

[EXTENSION_1]
global_id = 2							; Mandatory, REQUIRED TO BE UNIQUE
device_name = xS30						; Mandatory
modbus_uart_port = /dev/extcomm/0/0 	; Mandatory
neuron_uart_circuit = 1_01				; Optional, allows associating extensions with specific Neuron UART-over-Modbus ports (not possible for non-Modbus UART ports, e.g. /dev/ttyUSB0 or /dev/ttyS0)
allow_register_access = True 			; Optional, False default, is mandatory with third-party devices
address = 1 							; Optional, 15 default
;scan_frequency = 2 					; Optional, 1 default
;scan_enabled = True 					; Optional, True default
; Note that the following settings will be inherited by other devices sharing the same port, i.e. /dev/extcomm/0/0
;baud_rate = 19200						; Optional, NEEDS UNIPI IMAGE TO WORK! USE API TO CONFIGURE UART MANUALLY IF USING STANDARD RASPBIAN
;parity = N								; Optional, NEEDS UNIPI IMAGE TO WORK! USE API TO CONFIGURE UART MANUALLY IF USING STANDARD RASPBIAN
;stop_bits = 1							; Optional, NEEDS UNIPI IMAGE TO WORK! USE API TO CONFIGURE UART MANUALLY IF USING STANDARD RASPBIAN

Description

Since an update of evok, the Modbus communication is broken.

Steps to Reproduce

Setup:

  • Neuron L40x with fresh UniPian-Neuron-OS-2018-03-09.img installed
  • Neuron xS30 connected via Modbus, Dip-Switch 'End' set, Address 1, Parity N

Setup works fine using Mervis image and Mervis Software with 19200/N/8.

Using UniPian OR Raspian-Lite (various versions tried), RX/TX LEDs are flashing, but off most of the time.

Maybe there is something in eeprom from the previous version, which causes the issue

Expected behavior: Input values are properly displayed in the web interface at port 890

Actual behavior: No updates and errornous RX/TX lights

Startup error, AttributeError: 'Application' object has no attribute 'handlers'

After a fresh installation, i got:
root@pascal:~# /opt/evok/evok.py
Listening on port: 80
UniPi version:1.1
Traceback (most recent call last):
File "/opt/evok/evok.py", line 545, in
main()
File "/opt/evok/evok.py", line 502, in main
for (srv, urlspecs) in app.handlers:
AttributeError: 'Application' object has no attribute 'handlers'

Service should start even when DS2482 is not present

Apr 20 09:17:06 UniPi-Test evok[423]: eprom:: UniPi Neuron S103 version: 1.0 serial: 0x2a
Apr 20 09:17:06 UniPi-Test evok[423]: Using config file /etc/evok-neuron.conf
Apr 20 09:17:06 UniPi-Test evok[423]: HTTP server listening on port: 8088
Apr 20 09:17:06 UniPi-Test evok[423]: Process OwBusDriver-1:
Apr 20 09:17:06 UniPi-Test evok[423]: Traceback (most recent call last):
Apr 20 09:17:06 UniPi-Test evok[423]: File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Apr 20 09:17:06 UniPi-Test evok[423]: self.run()
Apr 20 09:17:06 UniPi-Test evok[423]: File "/opt/evok/owclient.py", line 360, in run
Apr 20 09:17:06 UniPi-Test evok[423]: ow.init(self.bus)
Apr 20 09:17:06 UniPi-Test evok[423]: File "/usr/lib/python2.7/dist-packages/ow/init.py", line 224, in init
Apr 20 09:17:06 UniPi-Test evok[423]: raise exNoController
Apr 20 09:17:06 UniPi-Test evok[423]: exNoController
Apr 20 09:17:17 UniPi-Test evok[423]: [I 170420 09:17:17 web:1971] 200 GET /rest/all (::1) 4.09ms

[NEURON] 1Wire 4-Relay + 4-DI extension not working with Neuron Evok API

I've purchased 1 Wire, 4RO+4DI extension but it is not supported in the current version of Evok API.

I've tracked the code and located issue in config.py L:209:
r = unipig.DS2408_relay(circuit, sensor, pin, dev_id=0)

I assume unipig module is not loaded for Neuron device, since it contains code specific for UniPi.

I did managed to get it working by moving code (class DS2408_pio, class DS2408_input, class DS2408_rela) to config.py, the only thing I needed to change is dev_id since if it remains 0 (the default) extension DIs overlap Neuron's DI 1_01-1_04 (I have M203). It should probably go to the configuration, I've also changed default for major_group from DS2408_pio constructor, not sure for what is it used for.

I can create pull request if you want, but I'm not sure is this the right way and also not verbose with Python so better to ask first.

The same thing should be applied for 1WINPUT type to get DIs mapped.

evok error with wget

Hi, i have a unipi with 1Wire 4-Relay + 4-DI extension, but when i send a HTTP POST petition
i have his error:
alt text
I can only turn on 8 relays
and I can't do it from the GUI

HTTP REST API doest not provide actuall values on Neuron

It only works, when a client is connected to the websocket.

Will be solved as a parameter in configuration and to enable the scanning function of Neuron class. stop_scanning function will be disabled when the parameter is set.

[Errno 111] Connection refused

Hi,
in Python 2.7, importing from jsonrpclib Server and assigning it to local ip address as per UniPi instruction seems ok.
When trying to set or get relay status, the error in object appears. The other thread in forum did not help.
I can't even open webbrowser with Rpi ip address to get UniPi (Lite) status.

Anyone can help? Thank you very much

ps: also reinstalling last Raspbian Jessie from the scratch and with UniPi full board not working.

I tried with last git version: the browser with ip in address bar does never reply, while Python 2.7 goes to "connection timeout"

What does it mean to "copy folder www in the desired location"?

websocket event for 1-Wire devices hangs after 1 - 2 weeks

I have 10 1-Wire Temperatures sensors connected to the Unipi 1.1.
To read the values I use the EVOK (latest version at 23 Aug 2017) websocket event on_message.

This works fine for about 1.5 week. Then no events arrives anymore.
Then I try the following steps:

  1. GET value over http API
    ==> I get an answer but the time and the value in the response are allways the same
  2. I tried to restart the evok process with 'systemctl restart evok'
    ==> error could not restart the service
  3. I tried to reboot (warm restart) the raspberry with 'shutdown -r now'
    ==> after reboot no Analog Inputs were display on the 'Unipi Control panel' in the browser

Finaly I repluged the 230V Power (cold restart)

==> Now all Analog Input appeared with correct values

PS.: The same behavior I had already in the EVOK version of january 2017

Uncaught exception, closing connection

Hello,

I have some problems with Evok. It looks like it will not boot even after restarting the Unipi S103. I already had a similar problem with Evok but it was solved by reinstalling evok. But this time nothing to do.

  • [latest master] Are you running the latest Master or the latest release version?
  • [yes] Did you try to reinstall EVOK?
  • [yes] Did you perform a cursory search on the [forum] and [google]?
cat /var/log/evok.log

[I 180316 01:02:17 config:66] eprom: UniPi Neuron S103 version: 1.0 serial: 0x1b4
[I 180316 01:02:17 evok:1640] Starting using config file /etc/evok.conf
[I 180316 01:02:17 config:78] YAML Definition loaded: CUSTOM MODBUS DEVICE.yaml, type: 3, definition count 0
[I 180316 01:02:17 config:78] YAML Definition loaded: xS50.yaml, type: 3, definition count 1
[I 180316 01:02:17 config:78] YAML Definition loaded: L20x.yaml, type: 3, definition count 2
[I 180316 01:02:17 config:78] YAML Definition loaded: xS10.yaml, type: 3, definition count 3
[I 180316 01:02:18 config:78] YAML Definition loaded: M30x.yaml, type: 3, definition count 4
[I 180316 01:02:18 config:78] YAML Definition loaded: L51x.yaml, type: 3, definition count 5
[I 180316 01:02:18 config:78] YAML Definition loaded: L30x.yaml, type: 3, definition count 6
[I 180316 01:02:18 config:78] YAML Definition loaded: xS30.yaml, type: 3, definition count 7
[I 180316 01:02:18 config:78] YAML Definition loaded: S10x.yaml, type: 3, definition count 8
[I 180316 01:02:19 config:78] YAML Definition loaded: L40x.yaml, type: 3, definition count 9
[I 180316 01:02:19 config:78] YAML Definition loaded: M10x.yaml, type: 3, definition count 10
[I 180316 01:02:19 config:78] YAML Definition loaded: L50x.yaml, type: 3, definition count 11
[I 180316 01:02:19 config:78] YAML Definition loaded: DALI.yaml, type: 3, definition count 12
[I 180316 01:02:19 config:78] YAML Definition loaded: M40x.yaml, type: 3, definition count 13
[I 180316 01:02:19 config:78] YAML Definition loaded: M20x.yaml, type: 3, definition count 14
[I 180316 01:02:20 config:78] YAML Definition loaded: xS40.yaml, type: 3, definition count 15
[I 180316 01:02:20 config:78] YAML Definition loaded: M50x.yaml, type: 3, definition count 16
[I 180316 01:02:20 config:78] YAML Definition loaded: evok-alias.yaml, type: 2, definition count 0
[I 180316 01:02:20 evok:1704] HTTP server listening on port: 6666
[I 180316 01:02:20 modbusclient_tornado:125] SPI client started
[I 180316 01:02:20 neuron:173] Reading SPI boards
[D 180316 01:02:20 owclient:376] Entering 1wire loop
[E 180316 01:02:20 iostream:565] Uncaught exception, closing connection.
    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/tornado/iostream.py", line 562, in wrapper
        return callback(*args)
      File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 277, in null_wrapper
        return fn(*args, **kwargs)
      File "/opt/evok/modbusclient_tornado.py", line 62, in dataReceived
        self.framer.processIncomingPacket(data, self._handleResponse)
      File "/usr/local/lib/python2.7/dist-packages/pymodbus/transaction.py", line 468, in processIncomingPacket
        self._process(callback)
      File "/usr/local/lib/python2.7/dist-packages/pymodbus/transaction.py", line 482, in _process
        result = self.decoder.decode(data)
      File "/usr/local/lib/python2.7/dist-packages/pymodbus/factory.py", line 223, in decode
        return self._helper(message)
      File "/usr/local/lib/python2.7/dist-packages/pymodbus/factory.py", line 245, in _helper
        response.decode(data[1:])
      File "/usr/local/lib/python2.7/dist-packages/pymodbus/register_read_message.py", line 90, in decode
        self.registers.append(struct.unpack('>H', data[i:i + 2])[0])
    error: unpack requires a string argument of length 2


Steps to Reproduce

  1. Just let evok run for a moment (4-7 days maybe more... )
  2. Stop it and run it with /usr/bin/python /opt/evok/evok.py
  3. Evok will not start even after a reboot.

[UNIPI 1.1] RPi-3B+: Installation Issue, tornadows missing

Hello,

I tried a fresh install with the latest version of jessie, version 2018-03-13 desktop and the latest RPI 3 B+
I installed evok 2.0, the legacy version and via git clone, but each time the same result.

evok does not start and if tried manually:

cd /opt/evok
sudo python evok.py

the following error comes up:

Traceback (most recent call last):
File "evok.py", line 24, in <module>
from tornadows import soaphandler, webservices
ImportError: No module named tornadows

I tried to find how to install tornadows, but cannot find help.
I think that tornado is properly installed, also toro.
How to get tornadows?

Any advice?

Kind Regards,
Rudy

[NEURON] Error while connection extension module

I'm trying to connect a xS40 to my neuron.
The config is set in /etc/evok.conf and communication between two seems to be ok, TX and RX leds are blinking on both modules, the run led is solid on the xS40 module.

However the inputs and outputs to not appear in the API.

When I start the service manually I can see the following error during startup:

[E 170929 20:45:35 neuron:242] list index out of range
    Traceback (most recent call last):
      File "/opt/evok/neuron.py", line 231, in readboards
        board = UartBoard(self.Config, self.circuit, self.modbus_address, self, versions.registers, dev_id=self.dev_id)
      File "/opt/evok/neuron.py", line 304, in __init__
        self.sw = versions[0]
    IndexError: list index out of range
[1283, 4110, 0, 2064, 784, 5803, 0, 4, 5000, 1521]
<class 'pymodbus.register_read_message.ReadInputRegistersResponse'>

[NEURON] no boards detected after apt-get upgrade

Prerequisites

  • [ v] Are you running the latest Master or the latest release version?
  • [ v] Did you try to reinstall EVOK?
  • [ v] Did you perform a cursory search on the forum and google?

Log files needed

Include the output of the following commands on your Neuron/UniPi device:

sudo su
cat /var/log/evok.access.log
ps -fax
cat /var/log/evok.log

root@S103-sn488:~# cat /var/log/evok.access.log
172.16.129.31 - - [21/Mar/2018:08:49:50 +0000] "GET /rest/all HTTP/1.1" 200 2644 "http://172.16.129.32/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"
172.16.129.31 - - [21/Mar/2018:08:50:14 +0000] "GET /ws HTTP/1.1" 101 6570 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"
172.16.129.31 - - [21/Mar/2018:08:50:14 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"
172.16.129.31 - - [21/Mar/2018:08:50:15 +0000] "GET /rest/all HTTP/1.1" 304 0 "http://172.16.129.32/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"

root@S103-sn488:~# ps -fax
PID TTY STAT TIME COMMAND
2 ? S 0:00 [kthreadd]
3 ? S 0:00 _ [ksoftirqd/0]
5 ? S< 0:00 _ [kworker/0:0H]
6 ? S 0:00 _ [kworker/u8:0]
7 ? S 0:00 _ [rcu_sched]
8 ? S 0:00 _ [rcu_bh]
9 ? S 0:00 _ [migration/0]
10 ? S< 0:00 _ [lru-add-drain]
11 ? S 0:00 _ [cpuhp/0]
12 ? S 0:00 _ [cpuhp/1]
13 ? S 0:00 _ [migration/1]
14 ? S 0:00 _ [ksoftirqd/1]
16 ? S< 0:00 _ [kworker/1:0H]
17 ? S 0:00 _ [cpuhp/2]
18 ? S 0:00 _ [migration/2]
19 ? S 0:00 _ [ksoftirqd/2]
21 ? S< 0:00 _ [kworker/2:0H]
22 ? S 0:00 _ [cpuhp/3]
23 ? S 0:00 _ [migration/3]
24 ? S 0:00 _ [ksoftirqd/3]
26 ? S< 0:00 _ [kworker/3:0H]
27 ? S 0:00 _ [kdevtmpfs]
28 ? S< 0:00 _ [netns]
29 ? S 0:00 _ [khungtaskd]
30 ? S 0:00 _ [oom_reaper]
31 ? S< 0:00 _ [writeback]
32 ? S 0:00 _ [kcompactd0]
33 ? S< 0:00 _ [crypto]
34 ? S< 0:00 _ [bioset]
35 ? S< 0:00 _ [kblockd]
36 ? S< 0:00 _ [watchdogd]
37 ? S 0:00 _ [kworker/0:1]
38 ? S< 0:00 _ [rpciod]
39 ? S< 0:00 _ [xprtiod]
40 ? S 0:00 _ [kswapd0]
41 ? S< 0:00 _ [vmstat]
42 ? S< 0:00 _ [nfsiod]
52 ? S< 0:00 _ [kthrotld]
53 ? S< 0:00 _ [bioset]

76 ? S< 0:00 _ [bioset]
77 ? S< 0:00 _ [iscsi_eh]
78 ? S< 0:00 _ [dwc_otg]
79 ? S 0:00 _ [kworker/2:1]
80 ? S< 0:00 _ [DWC Notificatio]
81 ? S< 0:00 _ [VCHIQ-0]
82 ? S< 0:00 _ [VCHIQr-0]
83 ? S< 0:00 _ [VCHIQs-0]
84 ? S 0:00 _ [VCHIQka-0]
85 ? S< 0:00 _ [SMIO]
87 ? S 0:00 _ [kworker/3:2]
88 ? S 0:00 _ [irq/92-mmc1]
90 ? S< 0:00 _ [bioset]
91 ? S 0:00 _ [mmcqd/0]
92 ? S 0:00 _ [kworker/1:1]
93 ? S 0:00 _ [jbd2/mmcblk0p2-]
94 ? S< 0:00 _ [ext4-rsv-conver]
96 ? S< 0:00 _ [ipv6_addrconf]
119 ? S< 0:00 _ [kworker/3:1H]
127 ? S 0:00 _ [kworker/1:2]
216 ? S 0:00 _ [spi0]
248 ? S< 0:00 _ [cfg80211]
250 ? S< 0:00 _ [brcmf_wq/mmc1:0]
251 ? S 0:00 _ [brcmf_wdog/mmc1]
265 ? S 0:00 _ [kworker/u8:2]
275 ? S 0:00 _ [kworker/0:2]
485 ? S< 0:00 _ [kworker/0:1H]
486 ? S< 0:00 _ [kworker/1:1H]
749 ? S 0:00 _ [kworker/2:0]
750 ? S 0:00 _ [kworker/3:1]
752 ? S 0:00 _ [kworker/0:0]
754 ? S 0:00 _ [kworker/u8:1]
779 ? S 0:00 _ [kworker/3:0]
1 ? Ss 0:03 /sbin/init
117 ? Ss 0:00 /lib/systemd/systemd-journald
155 ? Ss 0:00 /lib/systemd/systemd-udevd
310 ? Ssl 0:00 /lib/systemd/systemd-timesyncd
361 ? Ss 0:00 avahi-daemon: running [unipi-stretch.local]
392 ? S 0:00 _ avahi-daemon: chroot helper
363 ? Ss 0:00 /lib/systemd/systemd-logind
365 ? Ssl 0:00 /usr/sbin/rsyslogd -n
375 ? Ss 0:00 /usr/sbin/cron -f
377 ? Ss 0:00 /usr/sbin/thd --triggers /etc/triggerhappy/triggers.d/ --socket /run/thd.socket --user nobody --deviceglob /dev/input/event*
384 ? Ss 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
398 ? Ss 0:00 /opt/neuron-bin/neuron_tcp_server -p 502
450 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 linux
453 ? Ss 0:00 /sbin/netplugd -p /var/run/netplugd.pid
455 ? Ss 0:00 /usr/sbin/sshd -D
649 ? Ss 0:00 _ sshd: pi [priv]
670 ? S 0:00 _ sshd: pi@pts/0
673 pts/0 Ss 0:00 _ -bash
690 pts/0 S 0:00 _ sudo su
694 pts/0 S 0:00 _ su
699 pts/0 S 0:00 _ bash
789 pts/0 R+ 0:00 _ ps -fax
460 ? Ss 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
461 ? S 0:00 _ nginx: worker process
462 ? S 0:00 _ nginx: worker process
463 ? S 0:00 _ nginx: worker process
464 ? S 0:00 _ nginx: worker process
540 ? Ss 0:00 /sbin/dhclient -4 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -I -df /var/lib/dhcp/dhclient6.eth0.leases eth0
660 ? Ss 0:00 /lib/systemd/systemd --user
663 ? S 0:00 _ (sd-pam)
778 ? Ssl 0:04 /usr/bin/python /opt/evok/evok.py
784 ? S 0:00 _ /usr/bin/python /opt/evok/evok.py

root@S103-sn488:/home/pi# python /opt/evok/evok.py
[I 180321 08:24:14 config:63] eprom: UniPi Neuron S103 version: 1.0 serial: 0x1e8
[I 180321 08:24:14 evok:1628] Starting using config file /etc/evok.conf
[I 180321 08:24:14 config:75] YAML Definition loaded: L20x.yaml, type: 3, definition count 0
[I 180321 08:24:14 config:75] YAML Definition loaded: M30x.yaml, type: 3, definition count 1
[I 180321 08:24:15 config:75] YAML Definition loaded: L50x.yaml, type: 3, definition count 2
[I 180321 08:24:15 config:75] YAML Definition loaded: S10x.yaml, type: 3, definition count 3
[I 180321 08:24:15 config:75] YAML Definition loaded: xS40.yaml, type: 3, definition count 4
[I 180321 08:24:15 config:75] YAML Definition loaded: M10x.yaml, type: 3, definition count 5
[I 180321 08:24:15 config:75] YAML Definition loaded: L30x.yaml, type: 3, definition count 6
[I 180321 08:24:15 config:75] YAML Definition loaded: M50x.yaml, type: 3, definition count 7
[I 180321 08:24:16 config:75] YAML Definition loaded: L51x.yaml, type: 3, definition count 8
[I 180321 08:24:16 config:75] YAML Definition loaded: xS30.yaml, type: 3, definition count 9
[I 180321 08:24:16 config:75] YAML Definition loaded: M40x.yaml, type: 3, definition count 10
[I 180321 08:24:16 config:75] YAML Definition loaded: M20x.yaml, type: 3, definition count 11
[I 180321 08:24:16 config:75] YAML Definition loaded: CUSTOM MODBUS DEVICE.yaml, type: 3, definition count 12
[I 180321 08:24:16 config:75] YAML Definition loaded: L40x.yaml, type: 3, definition count 13
[I 180321 08:24:17 config:75] YAML Definition loaded: xS10.yaml, type: 3, definition count 14
[I 180321 08:24:17 config:75] YAML Definition loaded: xS50.yaml, type: 3, definition count 15
[I 180321 08:24:17 config:75] YAML Definition loaded: evok-alias.yaml, type: 2, definition count 0
[I 180321 08:24:17 evok:1692] HTTP server listening on port: 8080
[I 180321 08:24:17 modbusclient_tornado:122] SPI client started
[I 180321 08:24:17 neuron:157] Reading SPI boards
[I 180321 08:24:17 neuron:172] No board on SPI 1
[I 180321 08:24:17 neuron:172] No board on SPI 2
[D 180321 08:24:17 owclient:377] Entering 1wire loop
[I 180321 08:24:17 neuron:172] No board on SPI 3
[I 180321 08:24:17 web:2063] 101 GET /ws (127.0.0.1) 3.58ms
[D 180321 08:24:17 evok:158] New WebSocket client connected
[I 180321 08:24:17 web:2063] 304 GET /rest/all (127.0.0.1) 4.17ms
[E 180321 08:24:17 neuron:211] 'NoneType' object has no attribute 'do_scan'
Traceback (most recent call last):
File "/opt/evok/neuron.py", line 209, in scan_boards
yield self.modbus_cache_map.do_scan()
AttributeError: 'NoneType' object has no attribute 'do_scan'

Description

evok "breaks" after apt-get upgrade

Steps to Reproduce

  1. start out with image UniPian-Neuron-OS-2018-03-09.img all works fine out of the box
    Evok fine everything fine

=> Linux S103-sn488 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l GNU/Linux

  1. apt-get update / apt-get upgrade

=> Linux S103-sn488 4.9.80-v7+ #1098 SMP Fri Mar 9 19:11:42 GMT 2018 armv7l GNU/Linux

result: No boards found on SPI 1, 2, 3
(problem arises after reboot, not before, so probably because of new kernel)

  1. tried manual install of git evok-2.0.3a didn't fix things

Expected behavior: expected to be able to run apt-get upgrade safely

Actual behavior: evok doesn't find board on SPI anymore and serves out empty dashboard

long shot: possibly connected to raspberrypi/linux@3b1e49b ??

-- posted to forum too, sorry if doubles are inconvenient

cheers Tony

[NEURON] Web interface does not work (port issue)

Hi,

have previously setup 10+ Neuron S103s with Evok, given a few months ago.

However recently I cannot access the web interface when installing. I get a '404'. I've tried changing port numbers etc but I get nothing. Always 404.

Installing PIGPIO first:

wget abyz.co.uk/rpi/pigpio/pigpio.zip
unzip pigpio.zip
cd PIGPIO
make
sudo make install

Installing Evok like so:

wget https://github.com/UniPiTechnology/evok/archive/master.zip
unzip master.zip
cd evok-master
sudo bash install-evok.sh (you miss the sudo from your guide)

Select '3' option for Neuron and then reboot when prompted.

Once rebooted:

sudo service evok status tells me:

● evok.service - Evok Modbus/Websocket/Rpc Server
   Loaded: loaded (/etc/systemd/system/evok.service; enabled)
   Active: active (running) since Fri 2017-09-15 11:30:52 UTC; 3min 22s ago
 Main PID: 1367 (python)
   CGroup: /system.slice/evok.service
           ├─1367 /usr/bin/python /opt/evok/evok.py
           └─1374 /usr/bin/python /opt/evok/evok.py

Sep 15 11:30:52 raspberrypi systemd[1]: Started Evok Modbus/Websocket/Rpc Server.

So I run sudo service evok stop, then modify the conf file to a free port, say 21555.

I then run sudo service evok start and enter 192.168.1.172:21555 (ip of my UniPi) on my computer's chrome browser, and get 404: Not Found.

Running raspbian on this UniPi.

I had written myself a full guide a month or so ago to follow the steps, and it would install perfectly every time - what's changed?

Thanks

Neuron set relay output via websocket is not working

Today I tried the latest Master version from Evok with miy Neuron S10x.

But when i tried to set a Digital Output via websocket the signal did'nt change.
Setting the Output via REST API or HTTP Console works properly.

After installing an older Version of EVOK the websocket was working again.

[NEURON] Is it normal that "DS2482-100 bus master" keeps reconnecting

Hello,

Evok keeps showing the following log. I'm running 2.0.1 on Neuron devices.

Is this something I should worry about ? Does it means there's something improperly setup ?

Dec 22 12:45:44 cara01 OWFS[597]: DEFAULT: ow_reconnect.c:(72) DS2482-100 bus master reconnected
Dec 22 12:46:04 cara01 OWFS[597]: DEFAULT: ow_reconnect.c:(72) DS2482-100 bus master reconnected
Dec 22 12:46:24 cara01 OWFS[597]: DEFAULT: ow_reconnect.c:(72) DS2482-100 bus master reconnected
Dec 22 12:46:44 cara01 OWFS[597]: DEFAULT: ow_reconnect.c:(72) DS2482-100 bus master reconnected
Dec 22 12:46:44 cara01 OWFS[597]: DEFAULT: ow_reconnect.c:(72) DS2482-100 bus master reconnected
Dec 22 12:47:04 cara01 OWFS[597]: DEFAULT: ow_reconnect.c:(72) DS2482-100 bus master reconnected
Dec 22 12:47:24 cara01 OWFS[597]: DEFAULT: ow_reconnect.c:(72) DS2482-100 bus master reconnected

Thanks in advance,

Adam.

[GENERAL]: `TypeError: 'NoneType' object is not subscriptable` when doing `relay_set` over jsonrpc

Prerequisites

Running evok 5601720

Log files

In [56]: from jsonrpclib import Server
    ...: Server("http://192.168.2.241/rpc").relay_set('2_02', True)
    ...: 
    ...: 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-56-c825eeb3a4c4> in <module>()
      1 from jsonrpclib import Server
----> 2 Server("http://192.168.2.241/rpc").relay_set('2_02', True)
      3 

/usr/lib/python3.6/site-packages/jsonrpclib/jsonrpc.py in __call__(self, *args, **kwargs)
    648                                 "arguments (according to JSON-RPC spec.)")
    649         if args:
--> 650             return self.__send(self.__name, args)
    651         else:
    652             return self.__send(self.__name, kwargs)

/usr/lib/python3.6/site-packages/jsonrpclib/jsonrpc.py in _request(self, methodname, params, rpcid)
    531         response = self._run_request(request)
    532         check_for_errors(response)
--> 533         return response['result']
    534 
    535     def _request_notify(self, methodname, params, rpcid=None):

TypeError: 'NoneType' object is not subscriptable

In [57]: 

Description

When doing relay_set over jsonrpc, the call raises TypeError. Apparently because there is no result object in the response from the server.

Steps to Reproduce

  1. Install evok from required revision
  2. Do the jsonrpc call

Expected behavior: Call finishes without an exception

Actual behavior: TypeError raised.

Humidity Captor

Hello,

How it's possible to link an humidity captor on Unipi.

More I didn't find any documentation to link cable to I01~I14 etc...

[NEURON] HTTP index.html not showing up, gives 404 instead

Hi,

With today's GIT master I cannot see the usual webinterface. All I get is 404, despite the other routes seem to work correctly.

Here's app.handlers for tornado webapp:

[(<_sre.SRE_Pattern object at 0x76367a20>,
  [URLSpec('/auth/login/$', <class '__main__.LoginHandler'>, kwargs={}, name=None),
   URLSpec('/auth/logout/$', <class '__main__.LogoutHandler'>, kwargs={}, name=None),
   URLSpec('/rpc$', <class 'rpc_handler.Handler'>, kwargs={}, name=None),
   URLSpec('/config$', <class '__main__.ConfigHandler'>, kwargs={}, name=None),
   URLSpec('/config/cmd$', <class '__main__.RemoteCMDHandler'>, kwargs={}, name=None),
   URLSpec('/json$', <class '__main__.JSONHandler'>, kwargs={}, name=None),
   URLSpec('/rest/all/?$', <class '__main__.LoadAllHandler'>, kwargs={}, name=None),
   URLSpec('/rest/([^/]+)/([^/]+)/?([^/]+)?/?$', <class '__main__.LegacyRestHandler'>, kwargs={}, name=None),
   URLSpec('/ws$', <class '__main__.WsHandler'>, kwargs={}, name=None)])]

Can't see anything related ton /, index, static or what ever...

Thanks in advance,

Adam.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.