Git Product home page Git Product logo

liota's Introduction

VMware has ended active development of this project, this repository will no longer be updated.

LIOTA

Little IoT Agent (liota) is an open source project offering some convenience for IoT solution developers in creating IoT Edge System data orchestration applications. Liota has been generalized to allow, via modules, interaction with any data-center component, over any transport, and for any IoT Edge System. It is easy-to-use and provides enterprise-quality modules for interacting with IoT Solutions.

Design

The primary liota design goals are simplicity, ease of use, easy installation and easy modification. Secondary design goals are generality, modularity and enterprise-level quality.

The Basic Abstractions of Liota

The six basic abstractions of liota represent a complete data flow from a device attached to the edge system to an application in a data-center. These are 'Device' (some data source on or attached to the edge system), 'DeviceComms' (communication protocols used between devices and the edge system), 'EdgeSystem' (the edge system hardware and software platforms), 'Metric' (represents a time-series stream from a data source to a data-center application), 'DCCComms' (communication protocols between the edge system and a data-center), and 'DCC' (data-center component, i.e., an ingestion application in a data-center). We have abstract classes for all six of these constructs in a small object hierarchy and a number of concrete classes that comprise this release of liota and allow a liota package or set of packages to create complete data flows from a data source to a component in a data-center.

Entities

Entities represent abstractions for the three main passive constructs: System, Devices and Metrics that can be, depending on the DCC, registered with the DCC. Such registration typically creates a concrete representation (let's call these 'Resources' simply to differentiate from the local representation we'll call objects) in the data-center component for the local object. Various pieces of meta-data can be associated with the Resource typically created during or after registration. Examples of such meta-data associated with the Resource, metrics, entries in a key/value store, relationships to other Resources, alerts and actions.

Each DCC must implement a register() method and return a RegisteredEntity object. The registered entity object may include any specific data, e.g., uuid, that the DCC may need to refer to the Resource representing the entity object. An entity may be registered with multiple DCCs in the same liota package or set of packages.

EdgeSystems and Devices

The abstract subclasses of Entities, EdgeSystem and Device are for now mostly placeholders in the hierarchy. We expect, as concrete implementations are created over time we'll see some common data and logic that we can move up into the abstract classes.

Note: We recommend creating EdgeSystem Objects before creating DCCComms or DeviceComms objects.

Metrics

The Metric subclass of Entity is the local object representing a stream of (number, timestamp) tuples. Metrics may be registered with one or more DCCs and the DCC returns a registered metric object. The metric object includes a sampling function which is a user defined method (udm), a sampling frequency stating the interval between subsequent executions of the udm and an aggregation count stating how many executions of the udm to aggregate before sending to the DCCs to which the metric has been registered. An important piece of meta-data liota supports are SI units and a prefix eliminating any confusion as to what the stream of numbers represent.

DeviceComms

The abstract class DeviceComms represent mechanisms through which devices send and receive data to/from edge systems. Some examples are CAN bus, Modbus, ProfiNet, Zigbee, GPIO pins, Industrial Serial Protocols as well as sockets, websockets, MQTT, CoAP. The DeviceComms abstract class is a placeholder for these various communication mechanisms.

DCCComms

The abstract class DCCComms represents communication protocols between edge systems and DCCs. Currently, liota supports MQTT, WebSocket and plain old BSD sockets. In near future it will support CoAP. MQTT, WebSocket and CoAP are 'Application' or layer-7 protocols. MQTT is a pub-sub system using TCP and CoAP implements reliable UDP datagrams and a data format specification. These protocols are capable of satisfying most of the use cases for transferring data from IoT gateways to data-center components. With the current implementation the gateway acts as MQTT, WebSocket or a traditional Socket client.

DCC (Data Center Component)

The abstract class DCC represents an application in a data-center. It is potentially the most important and complex abstraction of liota. It provides flexibility to developers for choosing the data-center components they need and using API's provided by liota. With help of this abstraction developers may build custom solutions. The abstract class states basic methods and encapsulates them into unified common API's required to send data to various DCC's. Graphite and Project Ice are currently the data-center components supported with AWS, BlueMix and ThingWorx to come soon. New DCC's can easily be integrated in the abstraction.

Transports

Liota supports plain old BSD sockets, WebSocket and MQTT communication protocols. Refer MQTT to know more on different MQTT configuration options available.

Identity and TLS Configurations

  • Identity class encapsulates certificates or credentials related to a connection used at both DCC and Device side.
  • TLSConf class encapsulates parameters related to TLS configuration.
  • CRLs(Certificate Revocation Lists) check has been implemented: VRIFY_CRL_CHECK_CHAIN in this mode CRLs of all certificates in the peer cert chain are checked. In order to enable the CRLs set the 'crl_path' in '/etc/liota/liota.conf', it requires a valid path to CRL; if in case intermediate CA is used the CRL should include both Intermediate CRL and Root CRL in PEM format (preferable directory '/usr/lib/liota'). If the check is required to be disabled 'crl_path' should be left blank.
  • Password based CA certificates are not supported.

Package Manager

Liota applications can be broken into small pieces that can be loaded and unloaded into a running liota process. We recommend putting the EdgeSystems, Devices, Metrics and DCC(s) in separate packages. Then each construct can be loaded and unloaded at will. See the README in the package directory for complete details.

Device Discovery

Under Development: Liota SDK provides users a way to discover new devices at run-time through a dedicated discovery thread. The discovery thread could listen on a list of end points by spinning up a listening thread for each of them. Currently, Liota supports 4 kinds of end points: MQTT, COAP, Socket, and Named Pipe. However, because of security consideration on edge system, currently only MQTT and Named Pipe are allowed, especially Named Pipe is only accessible to its owner user.

Assume there is a list of DeviceType-to-DCC Mappings, such as {TypeA:[DCC1-Package-Name, DCC2-Package-Name], TypeB:[DCC3-Package-Name]}. Listening thread waits for a json message from devices, registers new devices with each DCC in the mapping list, sets any properties, fills out device file for AW agent. AW agent enrolls discovered device and pushes content to bring the device to compliance.

The json message from devices starts with Device Type and comprises a dictionary, that is, { 'DeviceType':{key1:value1,key2:value2, ..., keyn:valuen}} e.g., {LM35:{k1:v1,...,SN:12345,kn:vn}}. Assume there is specified unique key for each 'Type' of devices, e.g., [{'Type':'LM35', 'UniqueKey':'SN'}]. We will concatenate the type and unique id to LM35_12345 and use this as the name to register the device.

See the README in the dev_disc directory under package directory for complete usage details.

SI Units

Liota supports SI units and the conversion of the units with help of Pint library which is included in liota package to provide developers the capability to use SI units in their code. We have also included the example simulated_graphite_temp.py which uses the library to convert temperature value from Celsius to Fahrenheit and Kelvin. More details on the usage of the Pint library and conversion of units can be found at this link.

Liota - Future Enhancements

Toward the goal of ubiquity for liota we plan to include the following enhancements:

  • Full support for IEEE 1451, Electronic Transducer Data Sheets
  • Support for CoAP as transports
  • A mechanism for IoT Edge Systems to create planet-wide unique identifiers (possibly based on the blockchain mechanism)
  • Support for actions framework for edge-system defined actions initiated either locally or by data-center components
  • Support for popular IoT ingestion engines
  • Language bindings apart from Python, starting with C, C++, Java and Lua

Installation and Testing

Liota requires a Python 2.7.9+ environment already installed.

In general, liota can be installed:

  $ git clone https://github.com/vmware/liota.git
  $ cd liota/
  $ python setup.py install

Post liota-installation either you can manually copy the config files from "/usr/lib/liota/config/" to "/etc/liota" and create "/var/log/liota" directory. Or you can use the helper script "post-install-setup.sh" to copy the config files which exist at the path "/usr/lib/liota". The script on execution by default checks if the "liota" non-root user exist if it doesn't then non-root "liota" user is required to be created manually. If you require Liota to be installed as the different non-root user which pre-exists on the system then the script will be required to be executed in the following way:

  $ cd /usr/lib/liota
  $ LIOTA_USER="non-root user" ./post-install-setup.sh

It Liota is required to be installed as root user (not the preferred way) then the script should be executed in the following way:

  $ cd /usr/lib/liota
  $ LIOTA_USER="root" ./post-install-setup.sh

Autostarting Liota Daemon

For starting liotad.py in background automatically at reboot perform the following steps:

  • Copy autostartliota script present in scripts folder to location:
  /etc/init.d/

To enable/disable the autostart service perform the following steps:

On Debian/Ubuntu:

  • Execute :
  $ sudo update-rc.d autostartliota defaults
  $ sudo invoke-rc.d autostartliota start
  • To stop the script and remove it from different runlevels, execute:
  $ sudo update-rc.d -f autostartliota remove

On RHEL/CentOS:

  • To add the script to different runlevels (rc[0-6].d folders), execute:
  $ chkconfig --add autostartliota
  • To start it, execute the following command and reboot the system:
  $ chkconfig autostartliota on
  • To stop the script, execute:
  $ chkconfig autostartliota off
  • To remove the script from different runlevels (rc[0-6].d folders), execute:
  $ chkconfig --del autostartliota

Liota.conf

liota.conf provides path to find out various configuration & log files. When initializing, liota does a multi-step search for the configuration file:

  • Looks in the current working directory '.'
  • User's home directory '~'
  • A LIOTA_CONF environment variable
  • Finally the default configuration file location for every installation: /etc/liota/. (note this will need to be copied from the system doc directory, typically /usr/lib/liota/config)

Here is the snapshot of liota.conf file:

[LOG_CFG]
json_path = /etc/liota/logging.json

[LOG_PATH]
log_path = /var/log/liota

[IOTCC_PATH]
dev_file_path = /usr/lib/liota/devs
entity_file_path = /usr/lib/liota/entity
iotcc_path = /usr/lib/liota/iotcc.json

Feel free to modify liota.conf and logging.json as appropriate for your testing.

Examples

Post-installation the sample codes for publishing the data to DCC can be found at following location:

  /usr/lib/liota/examples
  /usr/lib/liota/packages

Please look through the example code noting especially the files sampleProp.conf and dk300_edge_system_iotcc.py

Then as an initial test you could bring up an instance of Graphite using the docker instructions found at this link.

set the appropriate values in sampleProp.conf,

GraphiteMetric = <a dot separated string> "Mymetric.foo.bar.random"
GraphiteIP = <The IP address of the graphite instance you just brought up>
GraphitePort = <typically 2003> # You can test easily by sending directly to carbon

and execute

  $ sudo nohup python simulated_graphite_event_based.py &

If you would like to test against an instance of Project Ice please send an email to us at:

and we'll work with you to get one set up and help with the necessary values in the properties file.

Log Location

The default location for log files generated during Liota operation can be found at:

  /var/log/liota

If the above directory is not available or is not writeable then modify the log location in the file logging.json (find it as described above in the section on liota.conf)

Uninstall Liota

Liota can be uninstalled easily as per the steps below:

   $ pip uninstall liota
   $ rm -rf /usr/lib/liota/ /etc/liota/ /var/log/liota/

Contributing to Liota

Want to hack on Liota and add your own DCC component? Awesome! Just fork the project in order to start contributing the code.

Licensing

Liota is licensed under the BSD 2-Clause License.

liota's People

Contributors

apurvah avatar arunnswamy avatar arunv10 avatar bfrggit avatar dananourie avatar dnance avatar dstefka avatar gregbollella avatar kohlidev avatar piyushmasrani avatar tompscanlan avatar venkat2811 avatar vmware-haoyuli avatar warthog9 avatar winniex1 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

liota's Issues

Use of `heapq` in liota/core/metric_handler.py

On Ln 58 def put_and_notify(self, item, block=True, timeout=None), it seems that it gets the smallest item every time using heapq.nsmallest(1, self.queue)[0] (Ln 64,87). It is confusing that we are using a "PriorityQueue" (Ln 52) but still needs heapq.nsmallest to sort them.

Change the path of Liota generated files to /var/liota folder

As per OSS team we need to change path of all the liota generated files to "/var/tmp/liota" folder. The "/var/tmp" directory is made available for programs that require temporary files or directories that are preserved between system reboots:

  1. "/etc/liota/conf/devs" to "/var/tmp/liota/devs"

  2. "/etc/liota/conf/entity" to "/var/tmp/liota/entity"

  3. "/etc/liota/conf/iotcc.json" tp "/var/tmp/liota/iotcc.json"

I think we can remove "uuid.ini" as we are going to use "iotcc.json" going forward.

Simulated thermistor does not run itself upon __init__

In liota/entities/devices/thermistor_simulated.py, the __init__ method should end with self.run(), or this simulation will not start.

According to what we are doing in the bike simulator liota/entities/devices/bike_simulated.py and other demo scripts and corresponding liota package (i.e. those scripts do not call run() after creating the simulator device object), adding run() in __init__ should be the quickest fix.

I already did this in my branch. Tested. Not submitted yet.

REST Support & ThingWorx DCC

REST as Communication layer (Transports, DCCComms and DeviceComms) in Liota. Example will be based on ThingWorx DCC

Contributors:
@nkanchas
@ashish-vmware

Many files marked executable in repo, while they are actually not

Most of the files listed below should not be executable --

$ find . -executable -type f -name "*.py"
./packages/graphite.py
./packages/cal_sha1sum.py
./packages/dev_disc/liota_devsim_load.py
./packages/dev_disc/dev_disc.py
./packages/liotad.py
./liota/core/device_discovery.py
./liota/core/discovery_simulator.py
./liota/disc_listeners/named_pipe.py
./liota/disc_listeners/coap.py
./liota/disc_listeners/__init__.py
./liota/disc_listeners/socket_svr.py
./liota/disc_listeners/discovery_listener.py
./liota/disc_listeners/mqtt.py
./liota/dccs/iotcc.py
./liota/dev_sims/named_pipe.py
./liota/dev_sims/coap.py
./liota/dev_sims/__init__.py
./liota/dev_sims/device_simulator.py
./liota/dev_sims/socket_clnt.py
./liota/dev_sims/mqtt.py

Marking them executable does not affect functionality when running in the normal way, but that looks misleading. Also, some text files like requirements.txt are also marked executable, which should be fixed altogether.

Problems installing Liota on a Python virtualenv

Hello

We started working with Liota a few weeks ago, developing my own packages and sending information to my own DCC. So far, we managed to send data through HTTP but since you added the MQTT implementation we tried to work with it. Our problem comes with the Liota installation through pip, we got some errors because our packages with MQTT implementation don't find the MQTT files from Liota (can't resolve the imports), and our package files are on the package folder inside the installed Liota, are we doing maybe something wrong?

We are used to develop using virtualenv and the idea is continue the same process with Liota unless you think it's a bad idea. We've created our own requirements.txt file to create the virtualenv based on the file included with Liota, but I decided to download Liota from Github in order to have the latest Liota, work with MQTT and resolve the import issue. But through this method, Liota doesn't install correctly, doesn't appear on the virtualenv libraries and I get "ImportError: No module named liota.core.package_manager" each time I try to run the liotad.py file. Any advice on how can install Liota on a virtualenv and use MQTT?

P.D: this is how mi requirements.txt looks like
aenum==1.4.5
appdirs==1.4.0
linux-metrics==0.1.4
packaging==16.8
paho-mqtt==1.2
Pint==0.7.2
pyparsing==2.1.10
six==1.10.0
websocket-client==0.37.0
-e git+https://github.com/vmware/liota.git@e2427c533db363aeccb5ad34c5b37e97330db06f#egg=liota

Pip uninstall Liota succeeds, but throws an error message

Traceback (most recent call last):
File "/usr/local/bin/pip", line 11, in
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/pip/init.py", line 221, in main
return command.main(cmd_args)
File "/usr/local/lib/python2.7/dist-packages/pip/basecommand.py", line 252, in main
pip_version_check(session)
File "/usr/local/lib/python2.7/dist-packages/pip/utils/outdated.py", line 102, in pip_version_check
installed_version = get_installed_version("pip")
File "/usr/local/lib/python2.7/dist-packages/pip/utils/init.py", line 848, in get_installed_version
working_set = pkg_resources.WorkingSet()
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/init.py", line 619, in init
self.add_entry(entry)
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/init.py", line 675, in add_entry
for dist in find_distributions(entry, True):
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/init.py", line 1942, in find_eggs_in_zip
if metadata.has_metadata('PKG-INFO'):
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/init.py", line 1463, in has_metadata
return self.egg_info and self._has(self._fn(self.egg_info, name))
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/init.py", line 1824, in _has
return zip_path in self.zipinfo or zip_path in self._index()
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/init.py", line 1704, in zipinfo
return self._zip_manifests.load(self.loader.archive)
File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/pkg_resources/init.py", line 1644, in load
mtime = os.stat(path).st_mtime
OSError: [Errno 2] No such file or directory: '/usr/local/lib/python2.7/dist-packages/liota-0.3.1-py2.7.egg'

Metrics collected are stored infinitely in Collector Queue

While testing reconnect back-off mechanism we see that, metrics are collected and stored infinitely in Collector Queue as send thread will always be busy with re-try mechanism. If connection is established within minutes, we'll be fine. If it takes days, it might run out of memory.

@KohliDev

Vrops(DataCenterComponent) is modifying the Gateway passed to it in register()

Now when vrops_gateway = self.vrops.register(gateway) happens, the gateway object passed to it is changed and contains vROps specific properties.

This behavior is harmful in the package manager context, because we may want different DCCs to use the same Gateway object/representation. Therefore, the Gateway object should contain only Gateway specific configuration, parameters, etc. and should NOT contain any DCC specific parameters.

What is the IoTCC?

Hi,
I can't find any information about IoTCC.
Can anyone tell me what is IoTCC and project web site or other information.

Thanks.

scripts/autostartliota doesn't stop

Stop is not implemented in the startup script. Causes problems when installing via ansible and restarting service after changing config files.

Reconnect using Exponential Back-off mechanism

When connection between gateway and DCC is broken, LIOTA should try establishing connection using exponential back-off mechanism. This saves some compute at gateway and also reduces load on DCC when hundreds of gateways try to re-establish connection at the same time.

Local disk caching of collected metrics if connection to DataCenter is broken

Connection between the EdgeSystem and the DataCenter could be broken temporarily and during this time, Liota shall store the collected data on the local disk. Once connection is reestablished, send the data to the DataCenter.

The amount of storage used per device should be configurable and once the threshold is reached, older data is deleted, replacing with newer data.

smartquotes in README.md cause problems in setup.py install

I'm testing on various systems, and sometimes will get errors like this when running python setup.py install:

(venv) root [ /tmp/liota ]# python  setup.py  install
Traceback (most recent call last):
  File "setup.py", line 44, in <module>
    long_description = f.read()
  File "/tmp/liota/venv/lib/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 4822: ordinal not in range(128)

Turns out the README has some smartquotes. Removing those and replacing with simple quotes fixes the problem.

Using **kwargs in _connect() of DeviceComms and DccComms

Data members required for establishing connection in Transport layer are stored in init() method of DeviceComms and DccComms, so that self._connect() can be called. This results in duplication.

Why don't we use **kwargs in abstract _connect() method, so that it can take dynamic arguments instead ?

MQTT DCC comms fails with manually constructed MqttMessagingAttributes

When initializing MQTT DCC comms, I was trying to provide an MqttMessagingAttributes object I constructed myself, using

iotcc = IotControlCenter(MqttDccComms(
    edge_system_name=edge_system.name,
    url=config['BrokerIP'],
    port=config['BrokerPort'],
    identity=identity,
    tls_conf=tls_conf,
    enable_authentication=True,
    mqtt_msg_attr=MqttMessagingAttributes( # manually construct attribute object
        edge_system_name=edge_system.name,
        pub_qos=0
    )
))

Got this error:

Traceback (most recent call last):
  File "./mqtt_debug_plus_qos.py", line 183, in <module>
    pub_qos=0
  File "/usr/local/lib/python3.5/dist-packages/liota-0.3-py3.5.egg/liota/dcc_comms/mqtt_dcc_comms.py", line 113, in __init__
  File "/usr/local/lib/python3.5/dist-packages/liota-0.3-py3.5.egg/liota/dcc_comms/mqtt_dcc_comms.py", line 122, in _connect
  File "/usr/local/lib/python3.5/dist-packages/liota-0.3-py3.5.egg/liota/lib/transports/mqtt.py", line 177, in __init__
  File "/usr/local/lib/python3.5/dist-packages/paho/mqtt/client.py", line 491, in __init__
    raise ValueError('A client id must be provided if clean session is False.')
ValueError: A client id must be provided if clean session is False.

Pip puts data files in the wrong place in the directory hierarchy

Installing liota (0.1) on Snappy Ubuntu and Wind River IDP we noticed that the data files (in conf and example) directories are going to the wrong place in the hierarchy. They are supposed to go in /etc/liota but end up in /usr/lib/python2.7/site-packages/etc/...

Docstring documentation

Docstring styled documentation for all classes and methods. Currently, only few classes have these. This will enable us to use documentation generator like Sphinx in future.

Logging formatter issue to remove new lines

Logs are not readable and /n appears everywhere in case of error traceback. This issue occurs after the PR #120 merge, needs to be resolved before Next Liota release:

2017-05-05 12:34:43 UTC 5966 ERROR [MainThread] liota.lib.transports.web_socket.connect_soc(60) - Traceback (most recent call last):\n File "build/bdist.linux-x86_64/egg/liota/lib/transports/web_socket.py", line 58, in connect_soc__\n__ self.WebSocketConnection()\n File "build/bdist.linux-x86_64/egg/liota/lib/transports/web_socket.py", line 71, in WebSocketConnection__\n__ if self.identity.root_ca_cert:\n__AttributeError: 'bool' object has no attribute 'root_ca_cert'\n__
2017-05-05 12:41:54 UTC 5994 INFO [MainThread] liota.lib.utilities.utility.setup_logging(242) - created logger with /etc/liota/conf/logging.json
2017-05-05 12:41:54 UTC 5994 INFO [MainThread] liota.lib.utilities.utility.get_disk_name(140) - Disk name is : fd0
2017-05-05 12:41:54 UTC 5994 ERROR [MainThread] liota.lib.transports.web_socket.connect_soc(60) - Traceback (most recent call last):\n File "build/bdist.linux-x86_64/egg/liota/lib/transports/web_socket.py", line 58, in connect_soc__\n__ self.WebSocketConnection()\n File "build/bdist.linux-x86_64/egg/liota/lib/transports/web_socket.py", line 71, in WebSocketConnection__\n__ if self.identity.root_ca_cert:\n__AttributeError: 'bool' object has no attribute 'root_ca_cert'\n__
2017-05-05 12:59:22 UTC 6023 INFO [MainThread] liota.lib.utilities.utility.setup_logging(242) - created logger with /etc/liota/conf/logging.json
2017-05-05 12:59:22 UTC 6023 INFO [MainThread] liota.lib.utilities.utility.get_disk_name(140) - Disk name is : fd0
2017-05-05 12:59:22 UTC 6023 ERROR [MainThread] liota.lib.transports.web_socket.connect_soc(60) - Traceback (most recent call last):\n File "build/bdist.linux-x86_64/egg/liota/lib/transports/web_socket.py", line 58, in connect_soc__\n__ self.WebSocketConnection()\n File "build/bdist.linux-x86_64/egg/liota/lib/transports/web_socket.py", line 67, in WebSocketConnection__\n__ self.ws = create_connection(self.host, enable_multithread=True,\n__AttributeError: WebSocket instance has no attribute 'host'\n__
2017-05-05 13:02:19 UTC 6052 INFO [MainThread] liota.lib.utilities.utility.setup_logging(242) - created logger with /etc/liota/conf/logging.json
2017-05-05 13:02:19 UTC 6052 INFO [MainThread] liota.lib.utilities.utility.get_disk_name(140) - Disk name is : fd0
2017-05-05 13:02:19 UTC 6052 ERROR [MainThread] liota.lib.transports.web_socket.connect_soc(60) - Traceback (most recent call last):\n File "build/bdist.linux-x86_64/egg/liota/lib/transports/web_socket.py", line 58, in connect_soc__\n__ self.WebSocketConnection()\n File "build/bdist.linux-x86_64/egg/liota/lib/transports/web_socket.py", line 68, in WebSocketConnection__\n__ sslopt={"cert_reqs": ssl.CERT_NONE})\n File "/usr/local/lib/python2.7/dist-packages/websocket_client-0.37.0-py2.7.egg/websocket/core.py", line 489, in create_connection_\n__ websock.connect(url, **options)\n File "/usr/local/lib/python2.7/dist-packages/websocket_client-0.37.0-py2.7.egg/websocket/core.py", line 219, in connect_\n__ self.handshake_response = handshake(self.sock, *addrs, **options)\n File "/usr/local/lib/python2.7/dist-packages/websocket_client-0.37.0-py2.7.egg/websocket/handshake.py", line 67, in handshake_\n__ status, resp = _get_resp_headers(sock)\n File "/usr/local/lib/python2.7/dist-packages/websocket_client-0.37.0-py2.7.egg/websocket/handshake.py", line 123, in get_resp_headers\n__ raise WebSocketBadStatusException("Handshake status %d", status)\n__WebSocketBadStatusException: Handshake status 404\n__

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.