diff --git a/projects/octorest/.gitignore b/projects/octorest/.gitignore
new file mode 100644
index 0000000..d878cbc
--- /dev/null
+++ b/projects/octorest/.gitignore
@@ -0,0 +1,21 @@
+*.py[cod]
+*.sw[po]
+*.gcode
+*.gco
+
+# Packages
+*.egg
+*.egg-info
+.eggs
+dist
+build
+sdist
+
+# Testmon
+.testmondata
+
+# VS Code
+.vscode
+
+# Environments
+env/
\ No newline at end of file
diff --git a/projects/octorest/BUILD.bazel b/projects/octorest/BUILD.bazel
new file mode 100644
index 0000000..a756915
--- /dev/null
+++ b/projects/octorest/BUILD.bazel
@@ -0,0 +1,11 @@
+package(default_visibility=["//visibility:public"])
+
+py_library(
+    name = "octorest",
+    imports = ["src"],
+    srcs = glob(["src/**/*"]),
+    deps = [
+        py_requirement('requests'),
+        py_requirement('websocket-client'),
+    ]
+)
diff --git a/projects/octorest/LICENSE b/projects/octorest/LICENSE
new file mode 100644
index 0000000..bd13b59
--- /dev/null
+++ b/projects/octorest/LICENSE
@@ -0,0 +1,25 @@
+The MIT License (MIT)
+
+Copyright (c) 2016-2017 Miro Hrončok <miro@hroncok.cz>
+Copyright (c) 2017 Jiří Makarius <meadowfrey@gmail.com>
+Copyright (c) 2018 Douglas Brion <me@douglasbrion.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+Provided license texts might have their own copyrights and restrictions
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/projects/octorest/MANIFEST.in b/projects/octorest/MANIFEST.in
new file mode 100644
index 0000000..9e7ef82
--- /dev/null
+++ b/projects/octorest/MANIFEST.in
@@ -0,0 +1,5 @@
+include README.md
+include LICENSE
+recursive-include tests *.py
+recursive-include tests *.json
+recursive-include tests *.gcode
diff --git a/projects/octorest/README.rst b/projects/octorest/README.rst
new file mode 100644
index 0000000..65a90cd
--- /dev/null
+++ b/projects/octorest/README.rst
@@ -0,0 +1,244 @@
+===========================
+OctoRest 
+===========================
+
+.. image:: https://pepy.tech/badge/octorest
+	:target: https://pepy.tech/project/octorest
+	:alt: Downloads
+
+.. image:: https://img.shields.io/pypi/l/ansicolortags.svg
+	:target: https://pypi.python.org/pypi/ansicolortags/
+	:alt: PyPI license
+
+.. image:: https://badge.fury.io/py/erichek.svg
+	:target: https://badge.fury.io/py/erichek
+	:alt: PyPI version
+
+.. image:: https://img.shields.io/pypi/pyversions/erichek.svg
+	:target: https://img.shields.io/pypi/pyversions/erichek.svg
+	:alt: Python version
+
+
+Python client library for OctoPrint REST API
+
+This is continued work after the great start by Miro Hrončok of covering the
+OctoPrint REST API. Nearly all current functionality in the API has been covered (up to OctoPrint 1.3.11),
+but as of yet I have not had time to add extensive testing for all aspects of the API.
+
+Installation
+------------
+
+The easiest way to install the package is via ``pip``::
+
+    $ pip install octorest
+    
+
+Examples
+--------
+
+You may want a function which returns an instance of the OctoRest object connected to your printer.
+
+.. code-block:: python
+
+   def make_client(url, apikey):
+        """Creates and returns an instance of the OctoRest client.
+        
+        Args:
+            url - the url to the OctoPrint server
+            apikey - the apikey from the OctoPrint server found in settings
+        """
+        try:
+            client = OctoRest(url=url, apikey=apikey)
+            return client
+        except ConnectionError as ex:
+            # Handle exception as you wish
+            print(ex)
+            
+Once we have a client we can do many a cool thing with it!
+For example the following retrieves all the G-code file names on your OctoPrint server and adds them to a string which is printed out.
+
+.. code-block:: python
+
+   def file_names(client):
+        """Retrieves the G-code file names from the
+        OctoPrint server and returns a string message listing the
+        file names.
+        
+        Args:
+            client - the OctoRest client
+        """
+        message = "The GCODE files currently on the printer are:\n\n"
+        for k in client.files()['files']:
+            message += k['name'] + "\n"
+        print(message)
+
+Maybe you want to stop your print and then subsequently home the printer. This is very simple to do using OctoRest!
+
+.. code-block:: python
+
+   def toggle_home(client):
+        """Toggles the current print (if printing it pauses and
+        if paused it starts printing) and then homes all of
+        the printers axes.
+        
+        Args:
+            client - the OctoRest client 
+        """
+        print("toggling the print!")
+        client.toggle()
+        print("Homing your 3d printer...")
+        client.home()
+
+Implemented features of OctoPrint REST API
+------------------------------------------
+
+A check list of the features currently implemented can be seen below.
+
+* General information
+    - [ ] Authorization
+    - [ ] Login
+    - [ ] Logout
+* Version information
+    - [X] Version information
+* Apps
+    - [ ] Session Keys (Deprecated since version 1.3.11: This functionality will be removed in 1.4.0. Use the Application Keys Plugin workflow instead.)
+    
+      - [ ] Obtaining a temporary session key
+      - [ ] Verifying a temporary session key
+    - [ ] Application Keys Plugin workflow
+      
+      - [X] Probe workflow support
+      - [X] Start authorization process
+      - [X] Poll for decision on existing request
+      - [ ] Decide on existing request
+      - [ ] Fetch list of existing application keys
+      - [ ] Issue an application key command
+* Connection handling
+    - [X] Get connection settings
+    - [X] Issue a connection command
+    
+      - [X] Connect
+      - [X] Disconnect
+      - [X] Fake_ack
+* File operations
+    - [X] Retrieve all files
+    - [X] Retrieve files from specific location
+    - [X] Upload file or create folder
+    - [X] Retrieve a specific file’s or folder’s information
+    - [X] Issue a file command
+    
+      - [X] Select
+      - [X] Slice
+      - [X] Copy
+      - [X] Move
+    - [X] Delete file
+* Job operations
+    - [X] Issue a job command
+    
+        - [X] Start
+        - [X] Cancel
+        - [X] Restart
+        - [X] Pause
+        
+          - [X] Pause
+          - [X] Resume
+          - [X] Toggle
+    - [X] Retrieve information about the current job
+* Languages
+    - [X] Retrieve installed language packs
+    - [X] Upload a language pack
+    - [X] Delete a language pack
+* Log file management
+    - [X] Retrieve a list of available log files
+    - [X] Delete a specific logfile
+* Printer operations
+    - [X] Retrieve the current printer state
+    - [X] Issue a print head command
+    
+      - [X] Jog
+      - [X] Home
+      - [X] Feedrate
+    - [X] Issue a tool command
+    
+      - [X] Target
+      - [X] Offset
+      - [X] Select
+      - [X] Extrude
+      - [X] Flowrate
+    - [X] Retrieve the current tool state
+    - [X] Issue a bed command
+    
+      - [X] Target
+      - [X] Offset
+    - [X] Retrieve the current bed state
+    - [X] Issue a chamber command
+    
+      - [X] Target
+      - [X] Offset
+    - [X] Retrieve the current chamber state
+    - [X] Issue an SD command
+    
+      - [X] Init
+      - [X] Refresh
+      - [X] Release
+    - [X] Retrieve the current SD state
+    - [X] Retrieve custom controls from config.yaml
+    - [X] Send an arbitrary command to the printer
+* Printer profile operations
+    - [X] Retrieve all printer profiles
+    - [X] Retrieve specific printer profile
+    - [ ] Add a new printer profile
+    - [ ] Update an existing printer profile
+    - [X] Remove an existing printer profile
+* Settings
+    - [X] Retrieve current settings
+    - [X] Save settings
+    - [ ] Regenerate the system wide API key
+    - [ ] Fetch template data (in beta)
+* Slicing
+    - [X] List All Slicers and Slicing Profiles
+    - [X] List Slicing Profiles of a Specific Slicer
+    - [X] Retrieve Specific Profile
+    - [ ] Add Slicing Profile
+    - [X] Delete Slicing Profile
+* System
+    - [X] List all registered system commands
+    - [X] List all registered system commands for a source
+    - [X] Execute a registered system command
+* Timelapse
+    - [X] Retrieve a list of timelapses and the current config
+    - [X] Delete a timelapse
+    - [X] Issue a command for an unrendered timelapse
+    
+      - [X] Render
+    - [X] Delete an unrendered timelapse
+    - [X] Change current timelapse config
+* User
+    - [X] Retrieve a list of users
+    - [X] Retrieve a user
+    - [X] Add a user
+    - [X] Update a user
+    - [X] Delete a user
+    - [X] Reset a user’s password
+    - [X] Retrieve a user’s settings
+    - [ ] Update a user’s settings
+    - [X] Regenerate a user’s personal API key
+    - [X] Delete a user’s personal API key
+* Util
+    - [X] Test paths or URLs
+    
+      - [X] Path
+      - [X] URL
+      - [X] Server
+* Wizard
+    - [X] Retrieve additional data about registered wizards
+    - [X] Finish wizards
+
+Copyright & License
+-------------------
+
+Copyright (c) 2016-2017 `Miro Hrončok <miro@hroncok.cz/>`_. MIT License.
+
+Copyright (c) 2017 `Jiří Makarius <meadowfrey@gmail.com/>`_. MIT License.
+
+Copyright (c) 2018-2019, `Douglas Brion <me@douglasbrion.com/>`_. MIT License.
diff --git a/projects/octorest/examples/application_keys_plugin_workflow/application_keys_plugin_workflow.py b/projects/octorest/examples/application_keys_plugin_workflow/application_keys_plugin_workflow.py
new file mode 100644
index 0000000..693c452
--- /dev/null
+++ b/projects/octorest/examples/application_keys_plugin_workflow/application_keys_plugin_workflow.py
@@ -0,0 +1,34 @@
+from octorest import OctoRest, WorkflowAppKeyRequestResult
+
+def main():
+    url = "http://octopi.local"
+    user = "user"
+    
+    client = None
+
+    try:
+        client = OctoRest(url=url)
+    except TypeError:
+        raise NotImplementedError() # Decide what should happen now
+
+    (result, api_key) = (None, None)
+
+    try:
+        (result, api_key) = client.try_get_api_key('my-app', user)
+    except ConnectionError:
+        raise NotImplementedError() # Decide what should happen now. Suggestion - tell the user the OctoPrint server is unreachable and that he should check the URL entered
+
+    if result == WorkflowAppKeyRequestResult.WORKFLOW_UNSUPPORTED:
+        raise NotImplementedError() # Decide what should happen now. Suggestion - fall back to asking the user to manually enter a valid API key.
+    elif result == WorkflowAppKeyRequestResult.TIMED_OUT: # The user took too long to approve the API key request
+        raise NotImplementedError() # Decide what should happen now
+    elif result == WorkflowAppKeyRequestResult.NOPE: # The request has been denied
+        raise NotImplementedError() # Decide what should happen now
+    elif result == WorkflowAppKeyRequestResult.GRANTED:
+        client.load_api_key(api_key) # You have to load the API key before sending any requests to the OctoPrint server
+        pass # At this point you can use the client for whatever you wish
+    
+    raise NotImplementedError() # Decide what should happen now
+
+if __name__ == "__main__":
+    main()
\ No newline at end of file
diff --git a/projects/octorest/examples/basic/basic.py b/projects/octorest/examples/basic/basic.py
new file mode 100644
index 0000000..b2d057c
--- /dev/null
+++ b/projects/octorest/examples/basic/basic.py
@@ -0,0 +1,37 @@
+from octorest import OctoRest
+
+
+def make_client():
+    try:
+        client = OctoRest(url="http://octopi.local", apikey="YouShallNotPass")
+        return client
+    except Exception as e:
+        print(e)
+
+def get_version():
+    client = make_client()
+    message = "You are using OctoPrint v" + client.version['server'] + "\n"
+    return message
+
+def get_printer_info():
+    try:
+        client = OctoRest(url="http://octopi.local", apikey="YouShallNotPass")
+        message = ""
+        message += str(client.version) + "\n"
+        message += str(client.job_info()) + "\n"
+        printing = client.printer()['state']['flags']['printing']
+        if printing:
+            message += "Currently printing!\n"
+        else:
+            message += "Not currently printing...\n"
+        return message
+    except Exception as e:
+        print(e)
+
+def main():
+    c = make_client()
+    for k in c.files()['files']:
+        print(k['name'])
+
+if __name__ == "__main__":
+    main()
\ No newline at end of file
diff --git a/projects/octorest/examples/facebook_chatbot/chatbot.py b/projects/octorest/examples/facebook_chatbot/chatbot.py
new file mode 100644
index 0000000..c32e7f0
--- /dev/null
+++ b/projects/octorest/examples/facebook_chatbot/chatbot.py
@@ -0,0 +1,218 @@
+import random
+import os
+from flask import Flask, request
+from pymessenger2.bot import Bot
+from octorest import OctoRest
+
+class ChatBot(Flask):
+
+    def __init__(self, fb_access_tok='YourFBAccessToken', 
+                fb_verify_tok="YourTokenVerification",
+                octo_url="http://octopi.local",
+                octo_apikey="YouShallNotPass"):
+        """
+        Initialisation of the ChatBot for OctoWatch
+        Parameters:
+            fb_access_tok - the Facebook messenger access token given
+            fb_verify_tok - the Facebook messenger verification code set
+            octo_url - the url of the desired OctoPrint server
+            octo_apikey - the apikey found in the OctoPrint settings
+        """
+        Flask.__init__(self, __name__)
+
+        self.access_token = fb_access_tok
+        self.verify_token = fb_verify_tok
+        self.url = octo_url
+        self.apikey = octo_apikey
+
+        self.bot = Bot(self.access_token)
+
+        self.recipient = None
+
+        self.client = self.make_client(url=self.url, apikey=self.apikey)
+    
+    def make_client(self, url=None, apikey=None):
+        """
+        Creates and returns an instance of the OctoRest client.
+        Parameters:
+            url - the url to the octoprint server
+            apikey - the apikey from the octoprint server found in settings
+        """
+        if url is None:
+            url = self.url
+        if apikey is None:
+            url = self.apikey
+        try:
+            client = OctoRest(url=url, apikey=apikey)
+            return client
+        except ConnectionError as ex:
+            print(ex)
+
+    def verify_fb_token(self, token_sent):
+        """
+        Take token sent by Facebook and verify it matches the verify token
+        If they match, allow the request, else return an error
+        Parameters:
+            token_sent - the token received from Facebook
+        """
+        if token_sent == self.verify_token:
+            return request.args.get("hub.challenge")
+        return "Invalid verification token"
+
+    def get_message(self):
+        """
+        Returns a random message from a list of strings
+        """
+        sample_responses = ["Your print is okay", "I have spotted an error", "1 hour to go"]
+        return random.choice(sample_responses)
+
+    def send_message(self, recipient_id, response):
+        """
+        Uses PyMessenger to send response to user
+        Sends user the text message provided via input response parameter
+        Parameters
+            recipient_id - the id of the person receiving
+            response - the text message to respond with
+        """
+        self.bot.send_text_message(recipient_id, response)
+        return "success"
+
+    def send_image(self, recipient_id, response):
+        """
+        Uses PyMessenger to send response to user
+        Sends user an image provided via the image path in the input response parameter
+        Parameters
+            recipient_id - the id of the person receiving
+            response - the image to respond with given as a path
+        """
+        self.bot.send_image(recipient_id, response)
+        return "success"
+    
+    def get_printer_info(self):
+        """
+        Retrieves information about the printer
+        and returns a chatbot message with its current state
+        """
+        message = str(self.client.version) + "\n"
+        message += str(self.client.job_info()) + "\n"
+        printing = self.client.printer()['state']['flags']['printing']
+        if printing:
+            message += "Currently printing!\n"
+        else:
+            message += "Not currently printing...\n"
+        return message
+    
+    def get_version(self):
+        """
+        Retrieves the OctoPrint version and returns chatbot message
+        """
+        message = "You are using OctoPrint v" + str(self.client.version['server']) + "\n"
+        return message
+    
+    def get_gcode_file_names(self):
+        """
+        Retrieves the GCODE file names from the
+        OctoPrint server and returns chatbot message
+        """
+        message = "The GCODE files currently on the printer are:\n\n"
+        for k in self.client.files()['files']:
+            message += k['name'] + "\n"
+        return message
+    
+    def home(self):
+        """
+        Homes the 3D printer and returns
+        message to inform the user
+        """
+        message = "Homing your printer... :)"
+        self.client.home()
+        return message
+
+    def toggle(self):
+        """
+        Toggles the current print from paused/printing
+        states and returns message to inform the user
+        """
+        message = "Toggling your print!"
+        self.client.pause()
+        return message
+    
+    def receive_message(self):
+        """
+        Method for sending/receiving messages to/from users
+        on Facebook. Checks if tokens are valid. Depending on
+        the text received will select the appropriate reply.
+        Receives JSON from OctoWatch containing information
+        about the print if there has been an error.
+        """
+        if request.method == 'GET':
+            """
+            Before allowing people to message your bot, Facebook has
+            implemented a verify token that confirms all requests 
+            that your bot receives came from Facebook.
+            """ 
+            token_sent = request.args.get("hub.verify_token")
+            return self.verify_fb_token(token_sent)
+        # if the request was not get, it must be POST and we can just
+        # proceed with sending a message back to user
+        else:
+            # get whatever message a user sent the bot
+            output = request.get_json()
+            # if it was from messenger
+            if 'object' in output and 'entry' in output:
+                for event in output['entry']:
+                    messaging = event['messaging']
+                    for message in messaging:
+                        if message.get('message'):
+                            # Facebook Messenger ID for user so we know where
+                            # to send response back to
+                            recipient_id = message['sender']['id']
+                            self.recipient = recipient_id
+                            text = message['message'].get('text')
+                            if text == 'status':
+                                self.send_message(recipient_id, self.get_printer_info())
+                            elif text == 'version':
+                                self.send_message(recipient_id, self.get_version())
+                            elif text == 'files':
+                                self.send_message(recipient_id, self.get_gcode_file_names())
+                            elif text == 'home':
+                                self.send_message(recipient_id, self.home())
+                            elif text == 'toggle':
+                                self.send_message(recipient_id, self.toggle())
+                            elif text == 'pause':
+                                self.send_message(recipient_id, self.toggle())
+                            elif text == 'resume':
+                                self.send_message(recipient_id, self.toggle())
+                            elif text == 'cancel':
+                                self.send_message(recipient_id, self.toggle())
+                            elif message['message'].get('text'):
+                                response_sent_text = self.get_message()
+                                self.send_message(recipient_id, response_sent_text)
+                            # if user sends us a GIF, photo,video, 
+                            # or any other non-text item
+                            if message['message'].get('attachments'):
+                                response_sent_nontext = self.get_message()
+                                self.send_message(recipient_id, response_sent_nontext)
+                return "Message Processed"
+            # if not recognised
+            else:
+                print("Don't recognise...")
+                return "failed"
+            
+def main():
+    """
+    The main function of the program.
+    Creates a ChatBot instance and runs.
+    Defines a function for receiving messages
+    using HTTP GET and POST.
+    """
+    app = ChatBot()
+
+    @app.route("/", methods=['GET', 'POST'])
+    def receive_message():
+        return app.receive_message()
+        
+    app.run()
+
+if __name__ == "__main__":
+    main()
\ No newline at end of file
diff --git a/projects/octorest/requirements.txt b/projects/octorest/requirements.txt
new file mode 100644
index 0000000..e89e92d
--- /dev/null
+++ b/projects/octorest/requirements.txt
@@ -0,0 +1,62 @@
+appdirs==1.4.3
+argh==0.26.2
+attrs==19.3.0
+awesome-slugify==1.6.5
+Babel==2.9.1
+betamax==0.8.1
+betamax-serializers==0.2.1
+blinker==1.4
+cachelib==0.1
+certifi==2022.12.7
+chardet==3.0.4
+Click==7.0
+emoji==0.5.4
+feedparser==5.2.1
+filetype==1.0.5
+Flask==0.12.4
+Flask-Assets==0.12
+Flask-Babel==0.12.2
+Flask-Login==0.4.1
+frozendict==1.2
+future==0.18.2
+idna==2.8
+importlib-metadata==1.3.0
+itsdangerous==1.1.0
+Jinja2==2.11.3
+Markdown==3.1.1
+MarkupSafe==1.1.1
+more-itertools==8.0.2
+netaddr==0.7.19
+netifaces==0.10.9
+OctoPrint==1.8.3
+-e git+git@github.com:dougbrion/octorest.git@510b84dbc4ede1c8bbc92239e04a5c7299f1f96c#egg=octorest
+packaging==19.2
+pathtools==0.1.2
+pkginfo==1.5.0.1
+pluggy==0.13.1
+psutil==5.6.7
+py==1.10.0
+pyasn1==0.4.8
+pylru==1.2.0
+pyparsing==2.4.5
+pyserial==3.4
+pytest==5.3.2
+pytz==2019.3
+PyYAML==5.4
+regex==2019.12.9
+requests==2.22.0
+rsa==4.7
+sarge==0.1.5.post0
+semantic-version==2.8.3
+sentry-sdk==0.13.2
+six==1.13.0
+tornado==4.5.3
+Unidecode==0.4.21
+urllib3==1.26.5
+watchdog==0.9.0
+wcwidth==0.1.7
+webassets==0.12.1
+websocket-client==0.56.0
+Werkzeug==2.2.3
+wrapt==1.11.2
+zipp==0.6.0
diff --git a/projects/octorest/setup.cfg b/projects/octorest/setup.cfg
new file mode 100644
index 0000000..b7e4789
--- /dev/null
+++ b/projects/octorest/setup.cfg
@@ -0,0 +1,2 @@
+[aliases]
+test=pytest
diff --git a/projects/octorest/src/octorest/__init__.py b/projects/octorest/src/octorest/__init__.py
new file mode 100644
index 0000000..b8f244e
--- /dev/null
+++ b/projects/octorest/src/octorest/__init__.py
@@ -0,0 +1,8 @@
+from .client import OctoRest, AuthorizationRequestPollingResult, WorkflowAppKeyRequestResult
+from .xhrstreaminggenerator import XHRStreamingGenerator
+from .xhrstreaming import XHRStreamingEventHandler
+from .websocket import WebSocketEventHandler
+
+
+__all__ = ['OctoRest', 'AuthorizationRequestPollingResult', 'WorkflowAppKeyRequestResult',
+           'XHRStreamingGenerator','XHRStreamingEventHandler', 'WebSocketEventHandler']
diff --git a/projects/octorest/src/octorest/client.py b/projects/octorest/src/octorest/client.py
new file mode 100644
index 0000000..d0cda46
--- /dev/null
+++ b/projects/octorest/src/octorest/client.py
@@ -0,0 +1,1741 @@
+import os
+from contextlib import contextmanager
+from urllib import parse as urlparse
+from typing import Optional, Tuple
+from enum import Enum
+from time import sleep
+from typing import List, Union, Optional
+import re
+
+from requests import Session
+from requests.exceptions import (
+    ConnectionError,
+    HTTPError,
+    Timeout,
+)
+
+
+class AuthorizationRequestPollingResult(Enum):
+    STILL_WAITING = 1
+    GRANTED = 2
+    NOPE = 3  # Request denied or request timed out by the server
+
+
+class WorkflowAppKeyRequestResult(Enum):
+    WORKFLOW_UNSUPPORTED = 1
+    NOPE = 2  # Request denied or request timed out by the server
+    GRANTED = 3
+    TIMED_OUT = 4
+
+
+class OctoRest:
+    """
+    Encapsulates communication with one OctoPrint instance
+    """
+
+    def __init__(
+        self,
+        url: str,
+        *,
+        apikey: Optional[str] = None,
+        session: Session = None,
+    ):
+        """
+        Initialize the object with URL and API key
+
+        If a session is provided, it will be used (mostly for testing)
+        """
+        if not url:
+            raise TypeError("Required argument 'url' not found or empty")
+
+        parsed = urlparse.urlparse(url)
+        if parsed.scheme not in ["http", "https"]:
+            raise TypeError("Provided URL is not HTTP(S)")
+        if not parsed.netloc:
+            raise TypeError("Provided URL is empty")
+
+        self.url = "{}://{}".format(parsed.scheme, parsed.netloc)
+
+        self.session = session or Session()
+
+        if apikey:
+            self.load_api_key(apikey)
+
+    def load_api_key(self, apikey: str) -> None:
+        """Use the given API key for all future communication with the OctoPrint server.
+
+        Raises TypeError if 'apikey' is None or empty.
+        Raises RuntimeError if the API key is rejected by the server.
+
+        """
+        if not apikey:
+            raise TypeError("Required argument 'apikey' not found or empty")
+
+        self.session.headers.update({"X-Api-Key": apikey})
+
+        # Try a simple request to see if the API key works
+        # Keep the info, in case we need it later
+        self.version = self.get_version()
+
+    def _get(self, path, params=None):
+        """
+        Perform HTTP GET on given path with the auth header
+
+        Path shall be the ending part of the URL,
+        i.e. it should not be full URL
+
+        Raises a RuntimeError when not 20x OK-ish
+
+        Returns JSON decoded data
+        """
+        url = urlparse.urljoin(self.url, path)
+        response = self.session.get(url, params=params, timeout=(1.0, 1.0))
+        self._check_response(response)
+
+        return response.json()
+
+    def _post(self, path, data=None, files=None, json=None, ret=True):
+        """
+        Perform HTTP POST on given path with the auth header
+
+        Path shall be the ending part of the URL,
+        i.e. it should not be full URL
+
+        Raises a RuntimeError when not 20x OK-ish
+
+        Returns JSON decoded data
+        """
+        url = urlparse.urljoin(self.url, path)
+        response = self.session.post(url, data=data, files=files, json=json)
+        self._check_response(response)
+
+        if ret:
+            return response.json()
+
+    def _delete(self, path):
+        """
+        Perform HTTP DELETE on given path with the auth header
+
+        Path shall be the ending part of the URL,
+        i.e. it should not be full URL
+
+        Raises a RuntimeError when not 20x OK-ish
+
+        Returns nothing
+        """
+        url = urlparse.urljoin(self.url, path)
+        response = self.session.delete(url)
+        self._check_response(response)
+
+    def _put(self, path, data=None, files=None, json=None, ret=True):
+        """
+        Perform HTTP PUT on given path with the auth header
+
+        Path shall be the ending part of the URL,
+        i.e. it should not be full URL
+
+        Raises a RuntimeError when not 20x OK-ish
+
+        Returns JSON decoded data
+        """
+        url = urlparse.urljoin(self.url, path)
+        response = self.session.put(url, data=data, files=files, json=json)
+        self._check_response(response)
+
+        if ret:
+            return response.json()
+
+    def _patch(self, path, data=None, files=None, json=None, ret=True):
+        """
+        Perform HTTP PATCH on given path with the auth header
+
+        Path shall be the ending part of the URL,
+        i.e. it should not be full URL
+
+        Raises a RuntimeError when not 20x OK-ish
+
+        Returns JSON decoded data
+        """
+        url = urlparse.urljoin(self.url, path)
+        response = self.session.patch(url, data=data, files=files, json=json)
+        self._check_response(response)
+
+        if ret:
+            return response.json()
+
+    def _check_response(self, response):
+        """
+        Make sure the response status code was 20x, raise otherwise
+        """
+
+        response.raise_for_status()
+        return response
+
+    ###########################
+    ### VERSION INFORMATION ###
+    ###########################
+
+    def _version_tuple(self, v):
+        return tuple(map(int, (v.split("."))))
+
+    def get_version(self):
+        """Version information
+        http://docs.octoprint.org/en/master/api/version.html#version-information
+
+        Retrieve information regarding server and API version
+        """
+        return self._get("/api/version")
+
+    ##############
+    ### LOGIN  ###
+    ##############
+
+    def current_user(self):
+        """Current User
+        https://docs.octoprint.org/en/master/api/general.html#current-user
+
+        Retrieves information about the current user.
+        """
+        return self._get("/api/currentuser")
+
+    ###########################
+    ### APPS - SESSION KEYS ###
+    ###########################
+
+    def tmp_session_key(self):
+        """Obtaining a temporary session key
+        http://docs.octoprint.org/en/master/api/apps.html#obtaining-a-temporary-session-key
+
+        Retrieve a temporary session key with a minimum validity.
+        It can only be used as a proper API key after having been verified.
+        Returns the temporary session key and the timestamp until it’s valid.
+
+        Deprecated since version 1.3.11: This functionality will be removed in 1.4.0.
+        Use the Application Keys Plugin workflow instead.
+        """
+        return self._get("/apps/auth")
+
+    def verify_tmp_session_key(self):
+        """Verifying a temporary session key
+        http://docs.octoprint.org/en/master/api/apps.html#verifying-a-temporary-session-key
+
+        Verify a formerly retrieved temporary session key by providing
+        credentials and a cryptographic signature over these credentials
+        and the temporary key.
+        Returns the now verified session key and the new validity.
+
+        Deprecated since version 1.3.11: This functionality will be removed in 1.4.0.
+        Use the Application Keys Plugin workflow instead.
+        """
+        return self._post("/apps/auth")
+
+    ###############################################
+    ### APPS - APPLICATION KEYS PLUGIN WORKFLOW ###
+    ###############################################
+
+    def probe_app_keys_workflow_support(self) -> bool:
+        """Check if the Application Keys Plugin workflow is supported
+        https://docs.octoprint.org/en/master/bundledplugins/appkeys.html#probe-for-workflow-support
+
+        Raises ConnectionError if the OctoPrint server could not be found.
+
+        Returns True if the workflow is supported, otherwise returns False.
+        """
+        url = urlparse.urljoin(self.url, "/plugin/appkeys/probe")
+        response = self.session.get(url)
+
+        if response.status_code == 204:
+            return True
+
+        return False
+
+    def start_authorization_process(self, app: str, user: Optional[str] = None) -> str:
+        """Starts the authorization process
+        https://docs.octoprint.org/en/master/bundledplugins/appkeys.html#start-authorization-process
+
+        app: This parameter should be a human readable identifier to use for the application requesting access.
+        It will be displayed to the user.
+        Internally it will be used case insensitively, so `My App` and `my APP` are considered the same application identifiers.
+
+        user: The optional `user` parameter should be used to limit the authorization process to a specified user.
+        If the parameter is left unset, any user will be able to complete the authorization process and
+        grant access to the app with their account. E.g. if a user `me` starts the process in an app,
+        the app should request that name from the user and use it in the `user` parameter.
+        OctoPrint will then only display the authorization request on browsers the user `me` is logged in on.
+
+        Raises a RuntimeError when the server response does not indicate that the authorization process started.
+
+        Returns the polling URL.
+        """
+        data = {"app": app}
+
+        if user:
+            data["user"] = user
+
+        url = urlparse.urljoin(self.url, "/plugin/appkeys/request")
+        response = self.session.post(url, json=data)
+        self._check_response(response)
+
+        location = response.headers["Location"]
+
+        return location
+
+    def poll_auth_request_decision(
+        self, url: str
+    ) -> Tuple[AuthorizationRequestPollingResult, Optional[str]]:
+        """Check for an authorization request decision
+        https://docs.octoprint.org/en/master/bundledplugins/appkeys.html#poll-for-decision-on-existing-request
+
+        url: The polling url received from OctoRest.startAuthorizationProcess()
+
+        Returns a tuple who's first item an enum representing the result type,
+        and if the result type is GRANTED, the tuple's second item is the API key.
+        """
+
+        response = self.session.get(url)
+
+        if response.status_code == 202:
+            return (AuthorizationRequestPollingResult.STILL_WAITING, None)
+        elif response.status_code == 404:
+            return (AuthorizationRequestPollingResult.NOPE, None)
+        elif response.status_code == 200:
+            key_response = response.json()
+            api_key = key_response[
+                "api_key"
+            ]  # At the time of writing this, the official documentation in the link above says this key is named 'apikey', but wireshark says differently
+            return (AuthorizationRequestPollingResult.GRANTED, api_key)
+        else:
+            raise Exception("Received response with unexpected status code")
+
+    def try_get_api_key(
+        self, appName: str, user: Optional[str], timeout: int = 60
+    ) -> Tuple[WorkflowAppKeyRequestResult, Optional[str]]:
+        """Run the Application Keys Plugin Workflow
+
+        app: This parameter should be a human readable identifier to use for the application requesting access.
+        It will be displayed to the user.
+        Internally it will be used case insensitively, so `My App` and `my APP` are considered the same application identifiers.
+
+        user: The optional `user` parameter should be used to limit the authorization process to a specified user.
+        If the parameter is left unset, any user will be able to complete the authorization process and
+        grant access to the app with their account. E.g. if a user `me` starts the process in an app,
+        the app should request that name from the user and use it in the `user` parameter.
+        OctoPrint will then only display the authorization request on browsers the user `me` is logged in on.
+
+        timeout: the amount of time (in seconds) to wait for the user to approve the key request.
+
+        Raises ConnectionError if the OctoPrint server could not be found.
+
+        Returns a tuple who's first item an enum representing the result type,
+        and if the result type is GRANTED, the tuple's second item is the API key.
+        """
+        workflow_supported = self.probe_app_keys_workflow_support()
+
+        if not workflow_supported:
+            return (WorkflowAppKeyRequestResult.WORKFLOW_UNSUPPORTED, None)
+
+        polling_url = self.start_authorization_process(appName, user)
+
+        interval = 1
+        elapsed = 0
+
+        while elapsed < timeout:
+            (polling_result, api_key) = self.poll_auth_request_decision(polling_url)
+
+            if polling_result == AuthorizationRequestPollingResult.NOPE:
+                return (WorkflowAppKeyRequestResult.NOPE, None)
+
+            if polling_result == AuthorizationRequestPollingResult.GRANTED:
+                return (WorkflowAppKeyRequestResult.GRANTED, api_key)
+
+            sleep(interval)
+            elapsed += interval
+
+        return (WorkflowAppKeyRequestResult.TIMED_OUT, None)
+
+    ###########################
+    ### CONNECTION HANDLING ###
+    ###########################
+
+    def connection_info(self):
+        """Get connection settings
+        http://docs.octoprint.org/en/master/api/connection.html#get-connection-settings
+
+        Retrieve the current connection settings, including information
+        regarding the available baudrates and serial ports and the
+        current connection state.
+        """
+        return self._get("/api/connection")
+
+    def state(self):
+        """
+        A shortcut to get the current state.
+        """
+        return self.connection_info()["current"]["state"]
+
+    def connect(
+        self,
+        *,
+        port=None,
+        baudrate=None,
+        printer_profile=None,
+        save=None,
+        autoconnect=None,
+    ):
+        """Issue a connection command
+        http://docs.octoprint.org/en/master/api/connection.html#issue-a-connection-command
+
+        Instructs OctoPrint to connect to the printer
+
+        port: Optional, specific port to connect to. If not set the current
+        portPreference will be used, or if no preference is available auto
+        detection will be attempted.
+
+        baudrate: Optional, specific baudrate to connect with. If not set
+        the current baudratePreference will be used, or if no preference
+        is available auto detection will be attempted.
+
+        printer_profile: Optional, specific printer profile to use for
+        connection. If not set the current default printer profile
+        will be used.
+
+        save: Optional, whether to save the request's port and baudrate
+        settings as new preferences. Defaults to false if not set.
+
+        autoconnect: Optional, whether to automatically connect to the printer
+        on OctoPrint's startup in the future. If not set no changes will be
+        made to the current configuration.
+        """
+        data = {"command": "connect"}
+        if port is not None:
+            data["port"] = port
+        if baudrate is not None:
+            data["baudrate"] = baudrate
+        if printer_profile is not None:
+            data["printerProfile"] = printer_profile
+        if save is not None:
+            data["save"] = save
+        if autoconnect is not None:
+            data["autoconnect"] = autoconnect
+        self._post("/api/connection", json=data, ret=False)
+
+    def disconnect(self):
+        """Issue a connection command
+        http://docs.octoprint.org/en/master/api/connection.html#issue-a-connection-command
+
+        Instructs OctoPrint to disconnect from the printer
+        """
+        data = {"command": "disconnect"}
+        self._post("/api/connection", json=data, ret=False)
+
+    def fake_ack(self):
+        """Issue a connection command
+        http://docs.octoprint.org/en/master/api/connection.html#issue-a-connection-command
+
+        Fakes an acknowledgment message for OctoPrint in case one got lost on
+        the serial line and the communication with the printer since stalled.
+        This should only be used in "emergencies" (e.g. to save prints), the
+        reason for the lost acknowledgment should always be properly
+        investigated and removed instead of depending on this "symptom solver".
+        """
+        data = {"command": "fake_ack"}
+        self._post("/api/connection", json=data, ret=False)
+
+    #######################
+    ### FILE OPERATIONS ###
+    #######################
+
+    def _prepend_local(self, location):
+        if location.split("/")[0] not in ("local", "sdcard"):
+            return "local/" + location
+        return location
+
+    def files(self, location=None, recursive=False):
+        """Retrieve all files
+        http://docs.octoprint.org/en/master/api/files.html#retrieve-all-files
+
+        Retrieve files from specific location
+        http://docs.octoprint.org/en/master/api/files.html#retrieve-files-from-specific-location
+
+        Retrieve information regarding all files currently available and
+        regarding the disk space still available locally in the system
+
+        If location is used, retrieve information regarding the files currently
+        available on the selected location and - if targeting the local
+        location - regarding the disk space still available locally in the
+        system
+
+        If location is a file, retrieves the selected file''s information
+
+        Args:
+            location: The origin location from which to retrieve the files.
+                      Currently only local and sdcard are supported, with local
+                      referring to files stored in OctoPrint’s uploads folder
+                      and sdcard referring to files stored on the printer’s
+                      SD card (if available).
+            recursive: If set to true, return all files and folders recursively.
+                       Otherwise only return items on same level.
+
+        TODO: Recursive appears to always be on
+        """
+        payload = {"recursive": str(recursive).lower()}
+        if location:
+            location = self._prepend_local(location)
+            return self._get("/api/files/{}".format(location), params=payload)
+        return self._get("/api/files", params=payload)
+
+    @contextmanager
+    def _file_tuple(self, file):
+        """
+        Yields a tuple with filename and file object
+
+        Expects the same thing or a path as input
+        """
+        mime = "application/octet-stream"
+
+        try:
+            exists = os.path.exists(file)
+        except:
+            exists = False
+
+        if exists:
+            filename = os.path.basename(file)
+            with open(file, "rb") as f:
+                yield (filename, f, mime)
+        else:
+            yield file + (mime,)
+
+    def files_info(self, location, filename, recursive=False):
+        """Retrieve a specific file’s or folder’s information
+        http://docs.octoprint.org/en/master/api/files.html#retrieve-a-specific-file-s-or-folder-s-information
+
+        Retrieves the selected file’s or folder’s information.
+        If the file is unknown, a 404 Not Found is returned.
+        If the targeted path is a folder, by default only its direct children
+        will be returned. If recursive is provided and set to true, all
+        sub folders and their children will be returned too.
+        On success, a 200 OK is returned, with a file information item as
+        the response body.
+        """
+        try:
+            payload = {"recursive": str(recursive).lower()}
+            return self._get(
+                "/api/files/{}/{}".format(location, filename),
+                params=payload,
+            )
+        except HTTPError as e:
+            if e.response.status_code == 404:
+                return {}
+            else:
+                raise e
+
+    def upload(
+        self,
+        file,
+        *,
+        location="local",
+        select=False,
+        print=False,
+        userdata=None,
+        path=None,
+    ):
+        """Upload file or create folder
+        http://docs.octoprint.org/en/master/api/files.html#upload-file-or-create-folder
+
+        Upload a given file
+        It can be a path or a tuple with a filename and a file-like object
+        """
+        with self._file_tuple(file) as file_tuple:
+            files = {
+                "file": file_tuple,
+                "select": (None, select),
+                "print": (None, print),
+            }
+            if userdata:
+                files["userdata"] = (None, userdata)
+            if path:
+                files["path"] = (None, path)
+
+            return self._post("/api/files/{}".format(location), files=files)
+
+    def new_folder(self, folder_name, location="local"):
+        """Upload file or create folder
+        http://docs.octoprint.org/en/master/api/files.html#upload-file-or-create-folder
+
+        To create a new folder, the request body must at least contain the foldername
+        form field, specifying the name of the new folder. Note that folder creation
+        is currently only supported on the local file system.
+        """
+        data = {
+            "foldername": folder_name,
+        }
+        return self._post("/api/files/{}".format(location), data=data)
+
+    def select(self, location, *, print=False):
+        """Issue a file command
+        http://docs.octoprint.org/en/master/api/files.html#issue-a-file-command
+
+        Selects a file for printing
+
+        Location is target/filename, defaults to local/filename
+        If print is True, the selected file starts to print immediately
+        """
+        location = self._prepend_local(location)
+        data = {
+            "command": "select",
+            "print": print,
+        }
+        self._post("/api/files/{}".format(location), json=data, ret=False)
+
+    def slice(
+        self,
+        location,
+        slicer="curalegacy",
+        gcode=None,
+        position=None,
+        printer_profile=None,
+        profile=None,
+        select=False,
+        print=False,
+    ):
+        """Issue a file command
+        http://docs.octoprint.org/en/master/api/files.html#issue-a-file-command
+
+        Slices an STL file into GCODE.
+        Note that this is an asynchronous operation that
+        will take place in the background after the response
+        has been sent back to the client.
+
+        TODO: ADD PROFILE.*
+        """
+        location = self._prepend_local(location)
+        data = {
+            "command": "slice",
+            "slicer": slicer,
+            "select": select,
+            "print": print,
+        }
+        if gcode is not None:
+            data["gcode"] = gcode
+        if position is not None:
+            data["position"] = position
+        if printer_profile is not None:
+            data["printerProfile"] = printer_profile
+        if profile is not None:
+            data["profile"] = profile
+        return self._post("/api/files/{}".format(location), json=data, ret=False)
+
+    def copy(self, location, dest):
+        """Issue a file command
+        http://docs.octoprint.org/en/master/api/files.html#issue-a-file-command
+
+        Copies the file or folder to a new destination on the same location
+        """
+        location = self._prepend_local(location)
+        data = {
+            "command": "copy",
+            "destination": dest,
+        }
+        return self._post("/api/files/{}".format(location), json=data, ret=False)
+
+    def move(self, location, dest):
+        """Issue a file command
+        http://docs.octoprint.org/en/master/api/files.html#issue-a-file-command
+
+        Moves the file or folder to a new destination on the same location
+        """
+        location = self._prepend_local(location)
+        data = {
+            "command": "move",
+            "destination": dest,
+        }
+        return self._post("/api/files/{}".format(location), json=data, ret=False)
+
+    def delete(self, location):
+        """Delete file
+        http://docs.octoprint.org/en/master/api/files.html#delete-file
+
+        Delete the selected filename on the selected target
+
+        Location is target/filename, defaults to local/filename
+        """
+        location = self._prepend_local(location)
+        self._delete("/api/files/{}".format(location))
+
+    ######################
+    ### JOB OPERATIONS ###
+    ######################
+
+    def start(self):
+        """Issue a job command
+        http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command
+
+        Starts the print of the currently selected file
+
+        Use select() to select a file
+        """
+        data = {"command": "start"}
+        self._post("/api/job", json=data, ret=False)
+
+    def cancel(self):
+        """Issue a job command
+        http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command
+
+        Cancels the current print job
+
+        There must be an active print job for this to work
+        """
+        data = {"command": "cancel"}
+        self._post("/api/job", json=data, ret=False)
+
+    def restart(self):
+        """Issue a job command
+        http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command
+
+        Restart the print of the currently selected file from the beginning
+
+        There must be an active print job for this to work and the print job
+        must currently be paused
+        """
+        data = {"command": "restart"}
+        self._post("/api/job", json=data, ret=False)
+
+    def pause_command(self, action):
+        """Issue a job command
+        http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command
+
+        Pauses/resumes/toggles the current print job.
+        Accepts one optional additional parameter action specifying
+        which action to take.
+
+        In order to stay backwards compatible to earlier iterations of this API,
+        the default action to take if no action parameter is supplied is to
+        toggle the print job status.
+
+        Pause:
+            Pauses the current job if it’s printing,
+            does nothing if it’s already paused.
+        Resume:
+            Resumes the current job if it’s paused,
+            does nothing if it’s printing.
+        Toggle:
+            Toggles the pause state of the job,
+            pausing it if it’s printing and resuming it
+            if it’s currently paused.
+        """
+        data = {
+            "command": "pause",
+            "action": action,
+        }
+        self._post("/api/job", json=data, ret=False)
+
+    def pause(self):
+        """Issue a job command
+        http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command
+
+        Pauses the current job if it’s printing,
+        does nothing if it’s already paused.
+        """
+        self.pause_command(action="pause")
+
+    def resume(self):
+        """Issue a job command
+        http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command
+
+        Resumes the current job if it’s paused,
+        does nothing if it’s printing.
+        """
+        self.pause_command(action="resume")
+
+    def toggle(self):
+        """Issue a job command
+        http://docs.octoprint.org/en/master/api/job.html#issue-a-job-command
+
+        Toggles the pause state of the job,
+        pausing it if it’s printing and resuming it
+        if it’s currently paused.
+        """
+        self.pause_command(action="toggle")
+
+    def job_info(self):
+        """Retrieve information about the current job
+        http://docs.octoprint.org/en/master/api/job.html#retrieve-information-about-the-current-job
+
+        Retrieve information about the current job (if there is one)
+        """
+        return self._get("/api/job")
+
+    #################
+    ### LANGUAGES ###
+    #################
+
+    def languages(self):
+        """Retrieve installed language packs
+        http://docs.octoprint.org/en/master/api/languages.html#retrieve-installed-language-packs
+
+        Retrieves a list of installed language packs.
+        """
+        return self._get("/api/languages")
+
+    def upload_language(self, file):
+        """Upload a language pack
+        http://docs.octoprint.org/en/master/api/languages.html#upload-a-language-pack
+
+        Uploads a new language pack to OctoPrint.
+        Other than most of the other requests on OctoPrint’s API which are
+        expected as JSON, this request is expected as
+        Content-Type: multipart/form-data due to the included file upload.
+        To upload a file, the request body must contain the file form field
+        with the contents and file name of the file to upload.
+        Only files with one of the extensions zip, tar.gz, tgz or tar will
+        be processed, for other file extensions a 400 Bad Request will be returned.
+        Will return a list of installed language packs upon completion,
+        as described in Retrieve installed language packs.
+
+        Parameters:
+            file – The language pack file to upload
+        """
+        with self._file_tuple(file) as file_tuple:
+            files = {"file": file_tuple}
+
+            return self._post("/api/languages", files=files)
+
+    def delete_language(self, locale, pack):
+        """Delete a language pack
+        http://docs.octoprint.org/en/master/api/languages.html#delete-a-language-pack
+
+        Retrieves a list of installed language packs.
+        """
+        return self._delete("/api/languages/{}/{}".format(locale, pack))
+
+    ###########################
+    ### LOG FILE MANAGEMENT ###
+    ###########################
+
+    def logs(self):
+        """Retrieve a list of available log files
+        http://docs.octoprint.org/en/master/bundledplugins/logging.html#retrieve-a-list-of-available-log-files
+
+        Log file management (and logging configuration) was moved into
+        a bundled plugin in OctoPrint 1.3.7.
+
+        Retrieve information regarding all log files currently available
+        and regarding the disk space still available in the system on the
+        location the log files are being stored
+        """
+        version = self._version_tuple(self.version["server"])
+        if version < self._version_tuple("1.3.7"):
+            return self._get("/api/logs")
+        return self._get("/plugin/logging/logs")
+
+    def delete_log(self, filename):
+        """Delete a specific logfile
+        http://docs.octoprint.org/en/master/bundledplugins/logging.html#delete-a-specific-logfile
+
+        Log file management (and logging configuration) was moved into
+        a bundled plugin in OctoPrint 1.3.7.
+
+        Delete the selected log file with name filename
+        """
+        version = self._version_tuple(self.version["server"])
+        if version < self._version_tuple("1.3.7"):
+            self._delete("/api/logs/{}".format(filename))
+        self._delete("/plugin/logging/logs/{}".format(filename))
+
+    ##########################
+    ### PRINTER OPERATIONS ###
+    ##########################
+
+    def _hwinfo(self, url, **kwargs):
+        """
+        Helper method for printer(), tool(), bed() and sd()
+        """
+        params = {}
+        if kwargs.get("exclude"):
+            params["exclude"] = ",".join(kwargs["exclude"])
+        if kwargs.get("history"):
+            params["history"] = "true"  # or 'yes' or 'y' or '1'
+        if kwargs.get("limit"):
+            params["limit"] = kwargs["limit"]
+        return self._get(url, params=params)
+
+    def printer(self, *, exclude=None, history=False, limit=None):
+        """Retrieve the current printer state
+        http://docs.octoprint.org/en/master/api/printer.html#retrieve-the-current-printer-state
+
+        Retrieves the current state of the printer
+
+        Returned information includes:
+
+        * temperature information
+        * SD state (if available)
+        * general printer state
+
+        Temperature information can also be made to include the printer's
+        temperature history by setting the history argument.
+        The amount of data points to return here can be limited using the limit
+        argument.
+
+        Clients can specify a list of attributes to not return in the response
+        (e.g. if they don't need it) via the exclude argument.
+        """
+        return self._hwinfo(
+            "/api/printer", exclude=exclude, history=history, limit=limit
+        )
+
+    def jog(self, x=None, y=None, z=None):
+        """Issue a print head command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-print-head-command
+
+        Jogs the print head (relatively) by a defined amount in one or more
+        axes. Additional parameters are:
+
+        x: Optional. Amount to jog print head on x axis, must be a valid
+        number corresponding to the distance to travel in mm.
+
+        y: Optional. Amount to jog print head on y axis, must be a valid
+        number corresponding to the distance to travel in mm.
+
+        z: Optional. Amount to jog print head on z axis, must be a valid
+        number corresponding to the distance to travel in mm.
+        """
+        data = {"command": "jog"}
+        if x:
+            data["x"] = x
+        if y:
+            data["y"] = y
+        if z:
+            data["z"] = z
+        self._post("/api/printer/printhead", json=data, ret=False)
+
+    def home(self, axes=None):
+        """Issue a print head command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-print-head-command
+
+        Homes the print head in all of the given axes.
+        Additional parameters are:
+
+        axes: A list of axes which to home, valid values are one or more of
+        'x', 'y', 'z'. Defaults to all.
+        """
+        axes = [a.lower()[:1] for a in axes] if axes else ["x", "y", "z"]
+        data = {"command": "home", "axes": axes}
+        self._post("/api/printer/printhead", json=data, ret=False)
+
+    def feedrate(self, factor):
+        """Issue a print head command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-print-head-command
+
+        Changes the feedrate factor to apply to the movement's of the axes.
+
+        factor: The new factor, percentage as integer or float (percentage
+        divided by 100) between 50 and 200%.
+        """
+        data = {"command": "feedrate", "factor": factor}
+        self._post("/api/printer/printhead", json=data, ret=False)
+
+    @classmethod
+    def _tool_dict(cls, whatever):
+        if isinstance(whatever, (int, float)):
+            whatever = (whatever,)
+        if isinstance(whatever, dict):
+            ret = whatever
+        else:
+            ret = {}
+            for n, thing in enumerate(whatever):
+                ret["tool{}".format(n)] = thing
+        return ret
+
+    def tool_target(self, targets):
+        """Issue a tool command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command
+
+        Sets the given target temperature on the printer's tools.
+        Additional parameters:
+
+        targets: Target temperature(s) to set.
+        Can be one number (for tool0), list of numbers or dict, where keys
+        must match the format tool{n} with n being the tool's index starting
+        with 0.
+        """
+        targets = self._tool_dict(targets)
+        data = {"command": "target", "targets": targets}
+        self._post("/api/printer/tool", json=data, ret=False)
+
+    def tool_offset(self, offsets):
+        """Issue a tool command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command
+
+        Sets the given temperature offset on the printer's tools.
+        Additional parameters:
+
+        offsets: Offset(s) to set.
+        Can be one number (for tool0), list of numbers or dict, where keys
+        must match the format tool{n} with n being the tool's index starting
+        with 0.
+        """
+        offsets = self._tool_dict(offsets)
+        data = {"command": "offset", "offsets": offsets}
+        self._post("/api/printer/tool", json=data, ret=False)
+
+    def tool_select(self, tool):
+        """Issue a tool command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command
+
+        Selects the printer's current tool.
+        Additional parameters:
+
+        tool: Tool to select, format tool{n} with n being the tool's index
+        starting with 0. Or integer.
+        """
+        if isinstance(tool, int):
+            tool = "tool{}".format(tool)
+        data = {"command": "select", "tool": tool}
+        self._post("/api/printer/tool", json=data, ret=False)
+
+    def extrude(self, amount):
+        """Issue a tool command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command
+
+        Extrudes the given amount of filament from the currently selected tool
+
+        Additional parameters:
+
+        amount: The amount of filament to extrude in mm.
+        May be negative to retract.
+        """
+        data = {"command": "extrude", "amount": amount}
+        self._post("/api/printer/tool", json=data, ret=False)
+
+    def retract(self, amount):
+        """Issue a tool command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command
+
+        Retracts the given amount of filament from the currently selected tool
+
+        Additional parameters:
+
+        amount: The amount of filament to retract in mm.
+        May be negative to extrude.
+        """
+        self.extrude(-amount)
+
+    def flowrate(self, factor):
+        """Issue a tool command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-tool-command
+
+        Changes the flow rate factor to apply to extrusion of the tool.
+
+        factor: The new factor, percentage as integer or float
+        (percentage divided by 100) between 75 and 125%.
+        """
+        data = {"command": "flowrate", "factor": factor}
+        self._post("/api/printer/tool", json=data, ret=False)
+
+    def tool(self, history=False, limit=None):
+        """Retrieve the current tool state
+        http://docs.octoprint.org/en/master/api/printer.html#retrieve-the-current-tool-state
+
+        Retrieves the current temperature data (actual, target and offset) plus
+        optionally a (limited) history (actual, target, timestamp) for all of
+        the printer's available tools.
+
+        It's also possible to retrieve the temperature history by setting the
+        history argument. The amount of returned history data points can be
+        limited using the limit argument.
+        """
+        return self._hwinfo("/api/printer/tool", history=history, limit=limit)
+
+    def bed_target(self, target):
+        """Issue a bed command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-bed-command
+
+        Sets the given target temperature on the printer's bed.
+
+        target: Target temperature to set.
+        """
+        data = {"command": "target", "target": target}
+        self._post("/api/printer/bed", json=data, ret=False)
+
+    def bed_offset(self, offset):
+        """Issue a bed command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-bed-command
+
+        Sets the given temperature offset on the printer's bed.
+
+        offset: Temperature offset to set.
+        """
+        data = {"command": "offset", "offset": offset}
+        self._post("/api/printer/bed", json=data, ret=False)
+
+    def bed(self, history=False, limit=None):
+        """Retrieve the current bed state
+        http://docs.octoprint.org/en/master/api/printer.html#retrieve-the-current-bed-state
+
+        Retrieves the current temperature data (actual, target and offset) plus
+        optionally a (limited) history (actual, target, timestamp) for the
+        printer's heated bed.
+
+        It's also possible to retrieve the temperature history by setting the
+        history argument. The amount of returned history data points can be
+        limited using the limit argument.
+        """
+        return self._hwinfo("/api/printer/bed", history=history, limit=limit)
+
+    def chamber_target(self, target):
+        """Issue a chamber command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-chamber-command
+
+        Sets the given target temperature on the printer's chamber.
+
+        target: Target temperature to set.
+        """
+        data = {"command": "target", "target": target}
+        self._post("/api/printer/chamber", json=data, ret=False)
+
+    def chamber_offset(self, offset):
+        """Issue a chamber command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-a-chamber-command
+
+        Sets the given temperature offset on the printer's chamber.
+
+        offset: Temperature offset to set.
+        """
+        data = {"command": "offset", "offset": offset}
+        self._post("/api/printer/chamber", json=data, ret=False)
+
+    def chamber(self, history=False, limit=None):
+        """Retrieve the current chamber state
+        http://docs.octoprint.org/en/master/api/printer.html#retrieve-the-current-chamber-state
+
+        Retrieves the current temperature data (actual, target and offset) plus
+        optionally a (limited) history (actual, target, timestamp) for the
+        printer's heated chamber.
+
+        It's also possible to retrieve the temperature history by setting the
+        history argument. The amount of returned history data points can be
+        limited using the limit argument.
+        """
+        return self._hwinfo("/api/printer/chamber", history=history, limit=limit)
+
+    def sd_init(self):
+        """Issue an SD command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-an-sd-command
+
+        Initializes the printer's SD card, making it available for use.
+        This also includes an initial retrieval of the list of files currently
+        stored on the SD card, so after issuing files(location=sd) a retrieval
+        of the files on SD card will return a successful result.
+
+        If OctoPrint detects the availability of a SD card on the printer
+        during connection, it will automatically attempt to initialize it.
+        """
+        data = {"command": "init"}
+        self._post("/api/printer/sd", json=data, ret=False)
+
+    def sd_refresh(self):
+        """Issue an SD command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-an-sd-command
+
+        Refreshes the list of files stored on the printer''s SD card.
+        Will raise a 409 Conflict if the card has not been initialized yet
+        with sd_init().
+        """
+        data = {"command": "refresh"}
+        self._post("/api/printer/sd", json=data, ret=False)
+
+    def sd_release(self):
+        """Issue an SD command
+        http://docs.octoprint.org/en/master/api/printer.html#issue-an-sd-command
+
+        Releases the SD card from the printer. The reverse operation to init.
+        After issuing this command, the SD card won't be available anymore,
+        hence and operations targeting files stored on it will fail.
+        Will raise a 409 Conflict if the card has not been initialized yet
+        with sd_init().
+        """
+        data = {"command": "release"}
+        self._post("/api/printer/sd", json=data, ret=False)
+
+    def sd(self):
+        """Retrieve the current SD state
+        http://docs.octoprint.org/en/master/api/printer.html#retrieve-the-current-sd-state
+
+        Retrieves the current state of the printer's SD card.
+
+        If SD support has been disabled in OctoPrint's settings,
+        a 404 Not Found is risen.
+        """
+        return self._get("/api/printer/sd")
+
+    def custom_control_request(self):
+        """Retrieves the custom controls as configured in config.yaml.
+                http://docs.octoprint.org/en/master/api/printer.html#get--api-printer-command-custom
+        .
+                The response will contain a list of custom control definitions.
+                A 200 OK with a List all response will be returned.
+        """
+        return self._get("/api/printer/command/custom")
+
+    def get_notifications(self):
+        """Retrieve printer notifications
+        https://docs.octoprint.org/en/master/bundledplugins/action_command_notification.html
+
+        Retrieves the log of notifications from the printer.
+        """
+        return self._get("/api/plugin/action_command_notification")
+
+    def clear_notifications(self):
+        """Retrieve printer notifications
+        https://docs.octoprint.org/en/master/bundledplugins/action_command_notification.html
+
+        Clears the notifications log.
+        """
+        return self._post(
+            "/api/plugin/action_command_notification",
+            json={"command": "clear"},
+            ret=False,
+        )
+
+    def gcode(self, cmd: Union[str, List[str]]):
+        """Send an arbitrary command to the printer
+        http://docs.octoprint.org/en/master/api/printer.html#send-an-arbitrary-command-to-the-printer
+
+        Sends any command to the printer via the serial interface.
+        Should be used with some care as some commands can interfere with or
+        even stop a running print job.
+
+        command: A single string command or command separated by newlines
+        or a list of commands
+        """
+
+        if isinstance(cmd, str):
+            # Split into commands
+            cmd = cmd.split("\n")
+
+        # Discard comments
+        cmd = [re.sub(re.compile(r"\s*;.*$"), "", c) for c in cmd]
+
+        # Strip leading and trailing spaces
+        cmd = [c.strip() for c in cmd]
+
+        # Remove empty commands
+        cmd = [c for c in cmd if c]
+
+        if len(cmd) == 1:
+            data = {"command": cmd[0]}
+        else:
+            data = {"commands": cmd}
+        self._post("/api/printer/command", json=data, ret=False)
+
+    ##################################
+    ### PRINTER PROFILE OPERATIONS ###
+    ##################################
+
+    def printer_profiles(self):
+        """Retrieve all printer profiles
+        http://docs.octoprint.org/en/master/api/printerprofiles.html#retrieve-all-printer-profiles
+
+        Retrieves a list of all configured printer profiles.
+        """
+        return self._get("/api/printerprofiles")
+
+    def printer_profile(self, profile=None):
+        """Retrieve specific printer profile
+        https://docs.octoprint.org/en/master/api/printerprofiles.html#retrieve-a-single-printer-profile
+
+        Retrieves a single, existing printer profile.
+        """
+        # Use default if none given
+        if profile is None:
+            profile = "_default"
+        return self._get("/api/printerprofiles/{}".format(profile))
+
+    def add_printer_profile(self, profile_data):
+        """Add a new printer profile
+        http://docs.octoprint.org/en/master/api/printerprofiles.html#add-a-new-printer-profile
+
+        TODO: Implement this
+        """
+        return self._post("/api/printerprofiles", json=profile_data)
+
+    def update_printer_profile(self, profile, profile_data):
+        """Update an existing printer profile
+        http://docs.octoprint.org/en/master/api/printerprofiles.html#update-an-existing-printer-profile
+
+        TODO: Implement this
+        """
+        return self._patch("/api/printerprofiles/{}".format(profile), json=profile_data)
+
+    def delete_printer_profile(self, profile):
+        """Remove an existing printer profile
+        http://docs.octoprint.org/en/master/api/printerprofiles.html#remove-an-existing-printer-profile
+
+        Deletes an existing printer profile by its profile identifier.
+
+        If the profile to be deleted is the currently selected profile,
+        a 409 Conflict will be returned.
+        """
+        return self._delete("/api/printerprofiles/{}".format(profile))
+
+    ################
+    ### SETTINGS ###
+    ################
+
+    def settings(self, settings=None):
+        """Retrieve current settings
+        http://docs.octoprint.org/en/master/api/settings.html#retrieve-current-settings
+
+        Save settings
+        http://docs.octoprint.org/en/master/api/settings.html#save-settings
+
+        Retrieves the current configuration of printer
+        python dict format if argument settings is not given
+
+        Saves provided settings in argument settings (if given)
+        and retrieves new settings in python dict format
+        Expects a python dict with the settings to change as request body.
+        This can be either a full settings tree,
+        or only a partial tree containing
+        only those fields that should be updated.
+
+        Data model described:
+        http://docs.octoprint.org/en/master/api/settings.html#data-model
+        http://docs.octoprint.org/en/master/configuration/config_yaml.html#config-yaml
+        """
+        if settings:
+            return self._post("/api/settings", json=settings, ret=True)
+        else:
+            return self._get("/api/settings")
+
+    def regenerate_apikey(self):
+        """Regenerate the system wide API key
+        http://docs.octoprint.org/en/master/api/settings.html#regenerate-the-system-wide-api-key
+        """
+        return self._post("/api/settings/apikey")
+
+    def fetch_templates(self):
+        """Fetch template data
+        http://docs.octoprint.org/en/master/api/settings.html#fetch-template-data
+
+        This API endpoint is in beta. Things might change.
+        """
+        return self._get("/api/settings/templates")
+
+    ###############
+    ### SLICING ###
+    ###############
+
+    def slicers(self):
+        """List All Slicers and Slicing Profiles
+        http://docs.octoprint.org/en/master/api/slicing.html#list-all-slicers-and-slicing-profiles
+
+        Returns a list of all available slicing profiles for all
+        registered slicers in the system.
+
+        Returns a 200 OK response with a Slicer list as the body
+        upon successful completion.
+        """
+        return self._get("/api/slicing")
+
+    def slicer_profiles(self, slicer):
+        """List Slicing Profiles of a Specific Slicer
+        http://docs.octoprint.org/en/master/api/slicing.html#list-slicing-profiles-of-a-specific-slicer
+
+        Returns a list of all available slicing profiles for
+        the requested slicer. Returns a 200 OK response with
+        a Profile list as the body upon successful completion.
+        """
+        return self._get("/api/slicing/{}/profiles".format(slicer))
+
+    def slicer_profile(self, slicer, key):
+        """Retrieve Specific Profile
+        http://docs.octoprint.org/en/master/api/slicing.html#retrieve-specific-profile
+
+        Retrieves the specified profile from the system.
+
+        Returns a 200 OK response with a full Profile as
+        the body upon successful completion.
+        """
+        return self._get("/api/slicing/{}/profiles/{}".format(slicer, key))
+
+    def add_slicer_profile(self, slicer, key, profile):
+        """Add Slicing Profile
+        http://docs.octoprint.org/en/master/api/slicing.html#add-slicing-profile
+
+        Adds a new slicing profile for the given slicer to the system.
+        If the profile identified by key already exists, it will be overwritten.
+
+        Expects a Profile as body.
+
+        Returns a 201 Created and an abridged Profile in the body
+        upon successful completion.
+
+        Requires admin rights.
+
+        TODO: Create a profile body to send
+        """
+        return self._put(
+            "/api/slicing/{}/profiles/{}".format(slicer, key), json=profile
+        )
+
+    def delete_slicer_profile(self, slicer, key):
+        """Delete Slicing Profile
+        http://docs.octoprint.org/en/master/api/slicing.html#delete-slicing-profile
+
+        Delete the slicing profile identified by key for the slicer slicer.
+        If the profile doesn’t exist, the request will succeed anyway.
+
+        Requires admin rights.
+        """
+        return self._delete("/api/slicing/{}/profiles/{}".format(slicer, key))
+
+    ##############
+    ### SYSTEM ###
+    ##############
+
+    def system_commands(self):
+        """List all registered system commands
+        http://docs.octoprint.org/en/master/api/system.html#list-all-registered-system-commands
+
+        Retrieves all configured system commands.
+        A 200 OK with a List all response will be returned.
+        """
+        return self._get("/api/system/commands")
+
+    def source_system_commands(self, source):
+        """List all registered system commands for a source
+        http://docs.octoprint.org/en/master/api/system.html#list-all-registered-system-commands-for-a-source
+
+        Retrieves the configured system commands for the specified source.
+        The response will contain a list of command definitions.
+        """
+        return self._get("/api/system/commands/{}".format(source))
+
+    def execute_system_command(self, source, action):
+        """Execute a registered system command
+        http://docs.octoprint.org/en/master/api/system.html#execute-a-registered-system-command
+
+        Execute the system command action defined in source.
+        Example
+        Restart OctoPrint via the core system command restart
+        (which is available if the server restart command is configured).
+
+        Parameters:
+            source – The source for which to list commands,
+            currently either core or custom
+            action – The identifier of the command, action from its definition
+        """
+
+        return self._post(
+            "/api/system/commands/{}/{}".format(source, action), ret=False
+        )
+
+    #################
+    ### TIMELAPSE ###
+    #################
+
+    def timelapses(self, unrendered=None):
+        """Retrieve a list of timelapses and the current config
+        http://docs.octoprint.org/en/master/api/timelapse.html#retrieve-a-list-of-timelapses-and-the-current-config
+
+        Retrieve a list of timelapses and the current config.
+        Returns a timelase list in the response body.
+
+        Unrendered, if True also includes unrendered timelapse.
+        """
+        if unrendered:
+            return self._get("/api/timelapse", params=unrendered)
+        return self._get("/api/timelapse")
+
+    def delete_timelapse(self, filename):
+        """Delete a timelapse
+        http://docs.octoprint.org/en/master/api/timelapse.html#delete-a-timelapse
+
+        Delete the specified timelapse
+
+        Requires user rights
+        """
+        self._delete("/api/timelapse/{}".format(filename))
+
+    def render_timelapse(self, name):
+        """Issue a command for an unrendered timelapse
+        http://docs.octoprint.org/en/master/api/timelapse.html#issue-a-command-for-an-unrendered-timelapse
+
+        Current only supports to render the unrendered timelapse
+        name via the render command.
+
+        Requires user rights.
+
+        name - The name of the unrendered timelapse
+        command – The command to issue, currently only render is supported
+        """
+        data = {
+            "command": "render",
+        }
+        return self._post("/api/timelapse/unrendered/{}".format(name), json=data)
+
+    def delete_unrendered_timelapse(self, filename):
+        """Delete an unrendered timelapse
+        http://docs.octoprint.org/en/master/api/timelapse.html#delete-an-unrendered-timelapse
+        """
+        self._delete("/api/timelapse/unrendered/{}".format(filename))
+
+    def change_timelapse_config(self, type):
+        """Change current timelapse config
+        http://docs.octoprint.org/en/master/api/timelapse.html#change-current-timelapse-config
+
+        Save a new timelapse configuration to use for the next print.
+        The configuration is expected as the request body.
+        Requires user rights.
+
+        Type of the timelapse, either off, zchange or timed.
+
+        TODO: setup timelapse configuration
+        """
+        data = {
+            "type": type,
+        }
+        return self._post("/api/timelapse", json=data)
+
+    ############
+    ### USER ###
+    ############
+
+    def users(self):
+        """Retrieve a list of users
+        http://docs.octoprint.org/en/master/api/users.html#retrieve-a-list-of-users
+
+        Retrieves a list of all registered users in OctoPrint.
+        Will return a 200 OK with a user list response as body.
+        Requires admin rights.
+        """
+        return self._get("/api/users")
+
+    def user(self, username):
+        """Retrieve a user
+        http://docs.octoprint.org/en/master/api/users.html#retrieve-a-user
+
+        Retrieves information about a user.
+        Will return a 200 OK with a user record as body.
+        Requires either admin rights or to be logged in as the user.
+
+        Parameters:
+            username – Name of the user which to retrieve
+        """
+        return self._get("/api/users/{}".format(username))
+
+    def add_user(self, name, password, active=False, admin=False):
+        """Add a user
+        http://docs.octoprint.org/en/master/api/users.html#add-a-user
+
+        Adds a user to OctoPrint.
+        Expects a user registration request as request body.
+        Returns a list of registered users on success, see Retrieve a list of users.
+        Requires admin rights.
+
+        JSON Params:
+            name – The user’s name
+            password – The user’s password
+            active – Whether to activate the account (true) or not (false)
+            admin – Whether to give the account admin rights (true) or not (false)
+        """
+        data = {
+            "name": name,
+            "password": password,
+            "active": str(active).lower(),
+            "admin": str(admin).lower(),
+        }
+        return self._post("/api/users", json=data)
+
+    def update_user(self, username, admin=None, active=None):
+        """Update a user
+        http://docs.octoprint.org/en/master/api/users.html#update-a-user
+
+        Updates a user record.
+        Expects a user update request as request body.
+        Returns a list of registered users on success, see Retrieve a list of users.
+        Requires admin rights.
+
+        Parameters:
+            username – Name of the user to update
+
+        JSON Params:
+            admin – Whether to mark the user as admin (true) or not (false), can be left out (no change)
+            active – Whether to mark the account as activated (true) or deactivated (false), can be left out (no change)
+        """
+        data = {}
+        if admin:
+            data["admin"] = str(admin).lower()
+        if active:
+            data["active"] = str(active).lower()
+        return self._put("/api/users/{}".format(username), json=data)
+
+    def delete_user(self, username):
+        """Delete a user
+        http://docs.octoprint.org/en/master/api/users.html#delete-a-user
+
+        Delete a user record.
+        Returns a list of registered users on success, see Retrieve a list of users.
+        Requires admin rights.
+
+        Parameters:
+            username – Name of the user to delete
+        """
+        return self._delete("/api/users/{}".format(username))
+
+    def reset_user_password(self, username, password):
+        """Reset a user’s password
+        http://docs.octoprint.org/en/master/api/users.html#reset-a-user-s-password
+
+        Changes the password of a user.
+        Expects a JSON object with a single property password as request body.
+        Requires admin rights or to be logged in as the user.
+
+        Parameters:
+            username – Name of the user to change the password for
+
+        JSON Params:
+            password – The new password to set
+        """
+        data = {
+            "password": password,
+        }
+        return self._put("/api/users/{}/password".format(username), json=data)
+
+    def user_settings(self, username):
+        """Retrieve a user’s settings
+        http://docs.octoprint.org/en/master/api/users.html#retrieve-a-user-s-settings
+
+        Retrieves a user’s settings.
+        Will return a 200 OK with a JSON object representing the user’s
+        personal settings (if any) as body.
+        Requires admin rights or to be logged in as the user.
+
+        Parameters:
+            username - Name of the user to retrieve the settings for
+        """
+        return self._get("/api/users/{}/settings".format(username))
+
+    def update_user_settings(self, username, new_settings):
+        """Update a user’s settings
+        http://docs.octoprint.org/en/master/api/users.html#update-a-user-s-settings
+        """
+        return self._patch("/api/users/{}/settings".format(username), json=new_settings)
+
+    def regenerate_user_apikey(self, username):
+        """Regenerate a user’s personal API key
+        http://docs.octoprint.org/en/master/api/users.html#regenerate-a-user-s-personal-api-key
+
+        Generates a new API key for the user.
+        Does not expect a body. Will return the generated API key as apikey
+        property in the JSON object contained in the response body.
+        Requires admin rights or to be logged in as the user.
+
+        Parameters:
+            username – Name of the user to retrieve the settings for
+        """
+        return self._post("/api/users/{}/apikey".format(username))
+
+    def delete_user_apikey(self, username):
+        """Delete a user’s personal API key
+        http://docs.octoprint.org/en/master/api/users.html#delete-a-user-s-personal-api-key
+
+        Deletes a user’s personal API key.
+        Requires admin rights or to be logged in as the user.
+
+        Parameters:
+            username – Name of the user to retrieve the settings for
+        """
+        return self._delete("/api/users/{}/apikey".format(username))
+
+    ############
+    ### UTIL ###
+    ############
+
+    def util_test_path(
+        self,
+        path,
+        check_type,
+        check_access,
+        allow_create_dir=False,
+        check_writable_dir=False,
+    ):
+        """Test paths or URLs
+        http://docs.octoprint.org/en/master/api/util.html#test-paths-or-urls
+
+        check_type: either 'file' or 'dir'
+        """
+        data = {
+            "command": "path",
+            "path": path,
+            "check_type": check_type,
+            "check_access": check_access,
+        }
+        if check_type == "dir":
+            data["allow_create_dir"] = str(allow_create_dir).lower()
+            data["check_writable_dir"] = str(check_writable_dir).lower()
+        return self._post("/api/util/test", json=data)
+
+    def util_test_url(self, url, status, method, response, timeout=120):
+        """Test paths or URLs
+        http://docs.octoprint.org/en/master/api/util.html#test-paths-or-urls
+        """
+        data = {
+            "command": "url",
+            "url": url,
+            "status": status,
+            "method": method,
+            "response": response,
+            "timeout": timeout,
+        }
+        return self._post("/api/util/test", json=data)
+
+    def util_test_server(self, host, port, protocol, timeout=None):
+        """Test paths or URLs
+        http://docs.octoprint.org/en/master/api/util.html#test-paths-or-urls
+        """
+        data = {
+            "command": "server",
+            "host": host,
+            "port": port,
+            "protocol": protocol,
+        }
+        if timeout:
+            data["timeout"] = timeout
+        return self._post("/api/util/test", json=data)
+
+    ##############
+    ### WIZARD ###
+    ##############
+
+    def wizard(self):
+        """Retrieve additional data about registered wizards
+        http://docs.octoprint.org/en/master/api/wizard.html#retrieve-additional-data-about-registered-wizards
+
+        Retrieves additional data about the registered wizards.
+
+        Returns a 200 OK with an object mapping wizard identifiers to wizard
+        data entries.
+        """
+        return self._get("/setup/wizard")
+
+    def finish_wizards(self, handled):
+        """Finish wizards
+        http://docs.octoprint.org/en/master/api/wizard.html#finish-wizards
+
+        Inform wizards that the wizard dialog has been finished.
+
+        Expects a JSON request body containing a property handled
+        which holds a list of wizard identifiers which were handled
+        (not skipped) in the wizard dialog.
+
+        Will call octoprint.plugin.WizardPlugin.on_wizard_finish()
+        for all registered wizard plugins, supplying the information
+        whether the wizard plugin’s identifier was within the list of
+        handled wizards or not.
+        """
+        data = {
+            "handled": handled,
+        }
+        return self._post("/setup/wizard", json=data)
diff --git a/projects/octorest/src/octorest/sockjsclient.py b/projects/octorest/src/octorest/sockjsclient.py
new file mode 100644
index 0000000..eca3ef8
--- /dev/null
+++ b/projects/octorest/src/octorest/sockjsclient.py
@@ -0,0 +1,48 @@
+import random
+import string
+
+from urllib import parse as urlparse
+
+
+class SockJSClient:
+    """
+    Abstract class for SockJS client event handlers
+    """
+    @classmethod
+    def random_str(cls, length):
+        """
+        Produces random string of given length
+        It is used for session ID
+        unique for every session of SockJS connection
+        """
+        letters = string.ascii_lowercase + string.digits
+        return ''.join(random.choice(letters) for c in range(length))
+
+    def __init__(self, url, on_open=None, on_close=None, on_message=None):
+        self.on_open = on_open if callable(on_open) else lambda x: None
+        self.on_close = on_close if callable(on_close) else lambda x: None
+        self.on_message = on_message if callable(on_message) else lambda x, y: None
+
+        self.thread = None
+        self.socket = None
+
+        parsed_url = urlparse.urlparse(url)
+        self.base_url = parsed_url.netloc
+        self.secure = True if parsed_url.scheme in ["wss", "https"] else False
+
+        server_id = str(random.randint(0, 1000))
+        session_id = self.random_str(8)
+        self.url = "{protocol}://" + \
+                   "/".join((self.base_url, "sockjs", server_id, session_id)) \
+                   + "/{method}"
+
+    def wait(self):
+        self.thread.join()
+
+    def run(self):
+        """Initializes and starts thread and socket communication"""
+        raise NotImplementedError("Should have implemented this")
+
+    def send(self, data):
+        """Send data across socket communication"""
+        raise NotImplementedError("Should have implemented this")
diff --git a/projects/octorest/src/octorest/websocket.py b/projects/octorest/src/octorest/websocket.py
new file mode 100644
index 0000000..5cf3ac6
--- /dev/null
+++ b/projects/octorest/src/octorest/websocket.py
@@ -0,0 +1,55 @@
+import json
+from threading import Thread
+
+import websocket
+
+from octorest.sockjsclient import SockJSClient
+
+
+class WebSocketEventHandler(SockJSClient):
+    """
+    Class for SockJS WebSocket communication
+
+    params:
+    url - url of Printer
+    on_open - callback function with 1 argument, api of WebSocketApp
+            - executes on creating new connection
+    on_close - callback function with 1 argument, api of WebSocketApp
+             - executes on connection close
+    on_message - callback function with 2 arguments, api of WebSocketApp
+                 and message in dict format
+               - executes on received message, if array, then it executes
+                 for every value of given array
+    """
+    def __init__(self, url, on_open=None, on_close=None, on_message=None):
+        super().__init__(url, on_open, on_close, on_message)
+
+        self.url = self.url.format(protocol="wss" if self.secure else "ws",
+                                   method="websocket")
+
+    def run(self):
+        """
+        Runs thread, which listens on socket.
+        Executes given callbacks on events
+        """
+        def on_message(ws, data):
+            if data.startswith('m'):
+                self.on_message(ws, json.loads(data[1:]))
+            elif data.startswith('a'):
+                for msg in json.loads(data[1:]):
+                    self.on_message(ws, msg)
+
+        self.socket = websocket.WebSocketApp(self.url,
+                                             on_open=self.on_open,
+                                             on_close=self.on_close,
+                                             on_message=on_message)
+        self.thread = Thread(target=self.socket.run_forever)
+        self.thread.daemon = True
+        self.thread.start()
+
+    def send(self, data):
+        """
+        Sends data, currently not working properly.
+        OctoPrint server is unable to parse.
+        """
+        self.socket.send(json.dumps(data))
diff --git a/projects/octorest/src/octorest/xhrstreaming.py b/projects/octorest/src/octorest/xhrstreaming.py
new file mode 100644
index 0000000..03fcddc
--- /dev/null
+++ b/projects/octorest/src/octorest/xhrstreaming.py
@@ -0,0 +1,73 @@
+import json
+from threading import Thread
+
+import requests
+
+from octorest.sockjsclient import SockJSClient
+
+
+class XHRStreamingEventHandler(SockJSClient):
+    """
+    Class for SockJS communication with XHRStreaming method
+
+    params:
+    url - url of Printer
+    on_open - callback function with 1 argument, api of WebSocketApp
+            - executes on creating new connection
+    on_close - callback function with 1 argument, api of WebSocketApp
+             - executes on connection close
+    on_message - callback function with 2 arguments, api of WebSocketApp
+                 and message in dict format
+               - executes on received message, if array, then it executes
+                 for every value of given array
+    """
+    def __init__(self, url,
+                 on_open=None, on_close=None, on_message=None, session=None):
+
+        super().__init__(url, on_open, on_close, on_message)
+
+        self.socket = session or requests.Session()
+
+    def run(self):
+        """
+        Runs thread, which listens on socket.
+        Executes given callbacks on events
+        """
+        self.thread = Thread(target=self._xhr_streaming_run)
+        self.thread.daemon = True
+        self.thread.start()
+
+    def _xhr_streaming_run(self):
+        """
+        Function for getting data and executing callbacks
+        """
+        url = self.url.format(protocol="https" if self.secure else "http",
+                              method="xhr_streaming")
+        while True:
+            try:
+                connection = self.socket.post(url, stream=True)
+                for line in connection.iter_lines():
+                    line = line.decode('utf-8')
+                    if line.startswith('o'):
+                        self.on_open(self)
+                    elif line.startswith('c'):
+                        self.on_close(self)
+                    elif line.startswith('m'):
+                        data = json.loads(line[1:])
+                        self.on_message(self, data)
+                    elif line.startswith('a'):
+                        for msg in json.loads(line[1:]):
+                            self.on_message(self, msg)
+            finally:
+                connection.close()
+
+    def send(self, data):
+        """
+        Sends data, currently not working properly.
+        OctoPrint server returns 404.
+        """
+        print("SENDING")
+        url = self.url.format(protocol="https" if self.secure else "http",
+                              method="xhr_send")
+        response = self.socket.post(url, data=json.dumps(data))
+        return response
diff --git a/projects/octorest/src/octorest/xhrstreaminggenerator.py b/projects/octorest/src/octorest/xhrstreaminggenerator.py
new file mode 100644
index 0000000..4e3bd20
--- /dev/null
+++ b/projects/octorest/src/octorest/xhrstreaminggenerator.py
@@ -0,0 +1,68 @@
+import json
+import random
+import string
+from urllib import parse as urlparse
+
+import requests
+
+
+class XHRStreamingGenerator:
+    """
+    Class that can communicate to SockJS server with XHR streaming
+    """
+
+    @classmethod
+    def random_str(cls, length):
+        letters = string.ascii_lowercase + string.digits
+        return ''.join(random.choice(letters) for c in range(length))
+
+    def __init__(self, url, session=None):
+        """
+        Initialize the connection
+        The url shall include the protocol and port (if necessary)
+        """
+        self.session = session or requests.Session()
+        r1 = str(random.randint(0, 1000))
+        conn_id = self.random_str(8)
+        self.base_url = url
+        self.url = '/'.join((urlparse.urljoin(url, 'sockjs'), r1, conn_id))
+
+    def info(self):
+        url = urlparse.urljoin(self.base_url, 'sockjs/info')
+        response = self.session.get(url)
+        return response.json()
+
+    def read_loop(self):
+        """
+        Creates generator object
+        """
+        url = '/'.join((self.url, 'xhr_streaming'))
+        while True:
+            try:
+                connection = self.session.post(url, stream=True)
+                for line in connection.iter_lines():
+                    line = line.decode('utf-8')
+                    if line.startswith('o'):
+                        continue  # open connection
+                    if line.startswith('c'):
+                        continue  # close connection
+                    if line.startswith('h'):
+                        continue  # heartbeat
+                    if line.startswith('m'):
+                        yield json.loads(line[1:])
+                        continue  # message
+                    if line.startswith('a'):
+                        for msg in json.loads(line[1:]):
+                            yield msg
+                        continue  # array
+            finally:
+                connection.close()
+
+    def send(self, data):
+        """
+        Sends data, currently not working properly.
+        OctoPrint server returns 404
+        """
+        url = '/'.join((self.url, 'xhr_send'))
+        response = self.session.post(url, data=json.dumps(data))
+        return response
diff --git a/projects/octorest/test/_common.py b/projects/octorest/test/_common.py
new file mode 100644
index 0000000..5368869
--- /dev/null
+++ b/projects/octorest/test/_common.py
@@ -0,0 +1,7 @@
+import os
+
+URL = os.environ.get('OCTOPRINT_URL')
+APIKEY = os.environ.get('OCTOPRINT_APIKEY')
+
+URL = "http://localhost:5000"
+APIKEY = "65FD7606F0FB4DF981C639FEDF08F7E6"
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_change_settings.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_change_settings.json
new file mode 100644
index 0000000..4595258
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_change_settings.json
@@ -0,0 +1,286 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2017-04-24T13:27:14",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.13.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.10\"\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0"
+          ],
+          "Content-Length": [
+            "41"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Expires": [
+            "-1"
+          ],
+          "Pragma": [
+            "no-cache"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Osg.CYEc5VC69OiyMaP-i7MYyBpYkrg; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2017-04-24T13:27:14",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Osg.CYEc5VC69OiyMaP-i7MYyBpYkrg"
+          ],
+          "User-Agent": [
+            "python-requests/2.13.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/settings"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": {\n    \"allowCrossOrigin\": false, \n    \"enabled\": true, \n    \"key\": \"YouShallNotPass\"\n  }, \n  \"appearance\": {\n    \"color\": \"default\", \n    \"colorTransparent\": false, \n    \"defaultLanguage\": \"_default\", \n    \"name\": \"\"\n  }, \n  \"feature\": {\n    \"alwaysSendChecksum\": false, \n    \"externalHeatupDetection\": true, \n    \"gcodeViewer\": true, \n    \"ignoreIdenticalResends\": false, \n    \"keyboardControl\": true, \n    \"pollWatched\": false, \n    \"repetierTargetTemp\": false, \n    \"sdAlwaysAvailable\": false, \n    \"sdSupport\": true, \n    \"swallowOkAfterResend\": true, \n    \"temperatureGraph\": true, \n    \"waitForStart\": false\n  }, \n  \"folder\": {\n    \"logs\": \"/home/pi/.octoprint/logs\", \n    \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n    \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n    \"uploads\": \"/home/pi/.octoprint/uploads\", \n    \"watched\": \"/home/pi/.octoprint/watched\"\n  }, \n  \"plugins\": {\n    \"cura\": {\n      \"cura_engine\": \"/usr/local/bin/cura_engine\", \n      \"debug_logging\": false, \n      \"default_profile\": null\n    }, \n    \"discovery\": {\n      \"httpPassword\": null, \n      \"httpUsername\": null, \n      \"model\": {\n        \"description\": null, \n        \"name\": null, \n        \"number\": null, \n        \"serial\": null, \n        \"url\": null, \n        \"vendor\": null, \n        \"vendorUrl\": null\n      }, \n      \"pathPrefix\": null, \n      \"publicHost\": null, \n      \"publicPort\": 80, \n      \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n      \"zeroConf\": []\n    }, \n    \"pluginmanager\": {\n      \"dependency_links\": false, \n      \"hidden\": [], \n      \"pip\": null, \n      \"pip_args\": null, \n      \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n      \"repository_ttl\": 1440\n    }, \n    \"softwareupdate\": {\n      \"cache_ttl\": 1440, \n      \"check_providers\": {}, \n      \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n      \"octoprint_type\": \"github_release\", \n      \"pip_command\": null\n    }\n  }, \n  \"printer\": {\n    \"defaultExtrusionLength\": 5\n  }, \n  \"scripts\": {\n    \"gcode\": {\n      \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n      \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n      \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n    }\n  }, \n  \"serial\": {\n    \"additionalPorts\": [], \n    \"autoconnect\": false, \n    \"baudrate\": null, \n    \"baudrateOptions\": [\n      250000, \n      230400, \n      115200, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"checksumRequiringCommands\": [\n      \"M110\"\n    ], \n    \"disconnectOnErrors\": true, \n    \"helloCommand\": \"M110 N0\", \n    \"ignoreErrorsFromFirmware\": false, \n    \"log\": false, \n    \"longRunningCommands\": [\n      \"G4\", \n      \"G28\", \n      \"G29\", \n      \"G30\", \n      \"G32\", \n      \"M400\", \n      \"M226\"\n    ], \n    \"port\": null, \n    \"portOptions\": [\n      \"VIRTUAL\"\n    ], \n    \"timeoutCommunication\": 30.0, \n    \"timeoutConnection\": 10.0, \n    \"timeoutDetection\": 0.5, \n    \"timeoutSdStatus\": 1.0, \n    \"timeoutTemperature\": 5.0, \n    \"triggerOkForM29\": true\n  }, \n  \"server\": {\n    \"commands\": {\n      \"serverRestartCommand\": \"sudo service octoprint restart\", \n      \"systemRestartCommand\": \"sudo shutdown -r now\", \n      \"systemShutdownCommand\": null\n    }, \n    \"diskspace\": {\n      \"critical\": 209715200, \n      \"warning\": 524288000\n    }\n  }, \n  \"system\": {\n    \"actions\": [\n      {\n        \"action\": \"shutdown\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -h now\", \n        \"confirm\": \"You are about to shutdown the system.\", \n        \"ignore\": true, \n        \"name\": \"Shutdown\"\n      }, \n      {\n        \"action\": \"reboot\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -r now\", \n        \"confirm\": \"You are about to reboot the system\", \n        \"ignore\": true, \n        \"name\": \"Reboot\"\n      }, \n      {\n        \"action\": \"restart\", \n        \"async\": true, \n        \"command\": \"sudo service octoprint restart\", \n        \"confirm\": \"You are about to restart OctoPrint\", \n        \"ignore\": true, \n        \"name\": \"Restart OctoPrint\"\n      }\n    ], \n    \"events\": null\n  }, \n  \"temperature\": {\n    \"cutoff\": 30, \n    \"profiles\": [\n      {\n        \"bed\": 100, \n        \"extruder\": 210, \n        \"name\": \"ABS\"\n      }, \n      {\n        \"bed\": 60, \n        \"extruder\": 180, \n        \"name\": \"PLA\"\n      }\n    ]\n  }, \n  \"terminalFilters\": [\n    {\n      \"name\": \"Suppress M105 requests/responses\", \n      \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n    }, \n    {\n      \"name\": \"Suppress M27 requests/responses\", \n      \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n    }\n  ], \n  \"webcam\": {\n    \"bitrate\": \"5000k\", \n    \"ffmpegPath\": \"/usr/bin/avconv\", \n    \"ffmpegThreads\": 1, \n    \"flipH\": false, \n    \"flipV\": false, \n    \"rotate90\": false, \n    \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n    \"streamUrl\": \"/webcam/?action=stream\", \n    \"watermark\": true\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0"
+          ],
+          "Content-Length": [
+            "5047"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Expires": [
+            "-1"
+          ],
+          "Pragma": [
+            "no-cache"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-Osg.b2ivS1J-YBJOQe-KMGQt4gBvbUk; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/settings"
+      }
+    },
+    {
+      "recorded_at": "2017-04-24T13:27:15",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"appearance\": {\"name\": \"Test\"}}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "32"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-Osg.b2ivS1J-YBJOQe-KMGQt4gBvbUk"
+          ],
+          "User-Agent": [
+            "python-requests/2.13.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/settings"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": {\n    \"allowCrossOrigin\": false, \n    \"enabled\": true, \n    \"key\": \"YouShallNotPass\"\n  }, \n  \"appearance\": {\n    \"color\": \"default\", \n    \"colorTransparent\": false, \n    \"defaultLanguage\": \"_default\", \n    \"name\": \"Test\"\n  }, \n  \"feature\": {\n    \"alwaysSendChecksum\": false, \n    \"externalHeatupDetection\": true, \n    \"gcodeViewer\": true, \n    \"ignoreIdenticalResends\": false, \n    \"keyboardControl\": true, \n    \"pollWatched\": false, \n    \"repetierTargetTemp\": false, \n    \"sdAlwaysAvailable\": false, \n    \"sdSupport\": true, \n    \"swallowOkAfterResend\": true, \n    \"temperatureGraph\": true, \n    \"waitForStart\": false\n  }, \n  \"folder\": {\n    \"logs\": \"/home/pi/.octoprint/logs\", \n    \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n    \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n    \"uploads\": \"/home/pi/.octoprint/uploads\", \n    \"watched\": \"/home/pi/.octoprint/watched\"\n  }, \n  \"plugins\": {\n    \"cura\": {\n      \"cura_engine\": \"/usr/local/bin/cura_engine\", \n      \"debug_logging\": false, \n      \"default_profile\": null\n    }, \n    \"discovery\": {\n      \"httpPassword\": null, \n      \"httpUsername\": null, \n      \"model\": {\n        \"description\": null, \n        \"name\": null, \n        \"number\": null, \n        \"serial\": null, \n        \"url\": null, \n        \"vendor\": null, \n        \"vendorUrl\": null\n      }, \n      \"pathPrefix\": null, \n      \"publicHost\": null, \n      \"publicPort\": 80, \n      \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n      \"zeroConf\": []\n    }, \n    \"pluginmanager\": {\n      \"dependency_links\": false, \n      \"hidden\": [], \n      \"pip\": null, \n      \"pip_args\": null, \n      \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n      \"repository_ttl\": 1440\n    }, \n    \"softwareupdate\": {\n      \"cache_ttl\": 1440, \n      \"check_providers\": {}, \n      \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n      \"octoprint_type\": \"github_release\", \n      \"pip_command\": null\n    }\n  }, \n  \"printer\": {\n    \"defaultExtrusionLength\": 5\n  }, \n  \"scripts\": {\n    \"gcode\": {\n      \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n      \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n      \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n    }\n  }, \n  \"serial\": {\n    \"additionalPorts\": [], \n    \"autoconnect\": false, \n    \"baudrate\": null, \n    \"baudrateOptions\": [\n      250000, \n      230400, \n      115200, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"checksumRequiringCommands\": [\n      \"M110\"\n    ], \n    \"disconnectOnErrors\": true, \n    \"helloCommand\": \"M110 N0\", \n    \"ignoreErrorsFromFirmware\": false, \n    \"log\": false, \n    \"longRunningCommands\": [\n      \"G4\", \n      \"G28\", \n      \"G29\", \n      \"G30\", \n      \"G32\", \n      \"M400\", \n      \"M226\"\n    ], \n    \"port\": null, \n    \"portOptions\": [\n      \"VIRTUAL\"\n    ], \n    \"timeoutCommunication\": 30.0, \n    \"timeoutConnection\": 10.0, \n    \"timeoutDetection\": 0.5, \n    \"timeoutSdStatus\": 1.0, \n    \"timeoutTemperature\": 5.0, \n    \"triggerOkForM29\": true\n  }, \n  \"server\": {\n    \"commands\": {\n      \"serverRestartCommand\": \"sudo service octoprint restart\", \n      \"systemRestartCommand\": \"sudo shutdown -r now\", \n      \"systemShutdownCommand\": null\n    }, \n    \"diskspace\": {\n      \"critical\": 209715200, \n      \"warning\": 524288000\n    }\n  }, \n  \"system\": {\n    \"actions\": [\n      {\n        \"action\": \"shutdown\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -h now\", \n        \"confirm\": \"You are about to shutdown the system.\", \n        \"ignore\": true, \n        \"name\": \"Shutdown\"\n      }, \n      {\n        \"action\": \"reboot\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -r now\", \n        \"confirm\": \"You are about to reboot the system\", \n        \"ignore\": true, \n        \"name\": \"Reboot\"\n      }, \n      {\n        \"action\": \"restart\", \n        \"async\": true, \n        \"command\": \"sudo service octoprint restart\", \n        \"confirm\": \"You are about to restart OctoPrint\", \n        \"ignore\": true, \n        \"name\": \"Restart OctoPrint\"\n      }\n    ], \n    \"events\": null\n  }, \n  \"temperature\": {\n    \"cutoff\": 30, \n    \"profiles\": [\n      {\n        \"bed\": 100, \n        \"extruder\": 210, \n        \"name\": \"ABS\"\n      }, \n      {\n        \"bed\": 60, \n        \"extruder\": 180, \n        \"name\": \"PLA\"\n      }\n    ]\n  }, \n  \"terminalFilters\": [\n    {\n      \"name\": \"Suppress M105 requests/responses\", \n      \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n    }, \n    {\n      \"name\": \"Suppress M27 requests/responses\", \n      \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n    }\n  ], \n  \"webcam\": {\n    \"bitrate\": \"5000k\", \n    \"ffmpegPath\": \"/usr/bin/avconv\", \n    \"ffmpegThreads\": 1, \n    \"flipH\": false, \n    \"flipV\": false, \n    \"rotate90\": false, \n    \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n    \"streamUrl\": \"/webcam/?action=stream\", \n    \"watermark\": true\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "pre-check=0, no-cache, no-store, must-revalidate, post-check=0, max-age=0"
+          ],
+          "Content-Length": [
+            "5051"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Expires": [
+            "-1"
+          ],
+          "Pragma": [
+            "no-cache"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Osw.4F9twoqNEjXuPiBc2-m8wuI9Jyw; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/settings"
+      }
+    },
+    {
+      "recorded_at": "2017-04-24T13:27:16",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"appearance\": {\"name\": \"\"}}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "28"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Osw.4F9twoqNEjXuPiBc2-m8wuI9Jyw"
+          ],
+          "User-Agent": [
+            "python-requests/2.13.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/settings"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": {\n    \"allowCrossOrigin\": false, \n    \"enabled\": true, \n    \"key\": \"YouShallNotPass\"\n  }, \n  \"appearance\": {\n    \"color\": \"default\", \n    \"colorTransparent\": false, \n    \"defaultLanguage\": \"_default\", \n    \"name\": \"\"\n  }, \n  \"feature\": {\n    \"alwaysSendChecksum\": false, \n    \"externalHeatupDetection\": true, \n    \"gcodeViewer\": true, \n    \"ignoreIdenticalResends\": false, \n    \"keyboardControl\": true, \n    \"pollWatched\": false, \n    \"repetierTargetTemp\": false, \n    \"sdAlwaysAvailable\": false, \n    \"sdSupport\": true, \n    \"swallowOkAfterResend\": true, \n    \"temperatureGraph\": true, \n    \"waitForStart\": false\n  }, \n  \"folder\": {\n    \"logs\": \"/home/pi/.octoprint/logs\", \n    \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n    \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n    \"uploads\": \"/home/pi/.octoprint/uploads\", \n    \"watched\": \"/home/pi/.octoprint/watched\"\n  }, \n  \"plugins\": {\n    \"cura\": {\n      \"cura_engine\": \"/usr/local/bin/cura_engine\", \n      \"debug_logging\": false, \n      \"default_profile\": null\n    }, \n    \"discovery\": {\n      \"httpPassword\": null, \n      \"httpUsername\": null, \n      \"model\": {\n        \"description\": null, \n        \"name\": null, \n        \"number\": null, \n        \"serial\": null, \n        \"url\": null, \n        \"vendor\": null, \n        \"vendorUrl\": null\n      }, \n      \"pathPrefix\": null, \n      \"publicHost\": null, \n      \"publicPort\": 80, \n      \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n      \"zeroConf\": []\n    }, \n    \"pluginmanager\": {\n      \"dependency_links\": false, \n      \"hidden\": [], \n      \"pip\": null, \n      \"pip_args\": null, \n      \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n      \"repository_ttl\": 1440\n    }, \n    \"softwareupdate\": {\n      \"cache_ttl\": 1440, \n      \"check_providers\": {}, \n      \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n      \"octoprint_type\": \"github_release\", \n      \"pip_command\": null\n    }\n  }, \n  \"printer\": {\n    \"defaultExtrusionLength\": 5\n  }, \n  \"scripts\": {\n    \"gcode\": {\n      \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n      \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n      \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n    }\n  }, \n  \"serial\": {\n    \"additionalPorts\": [], \n    \"autoconnect\": false, \n    \"baudrate\": null, \n    \"baudrateOptions\": [\n      250000, \n      230400, \n      115200, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"checksumRequiringCommands\": [\n      \"M110\"\n    ], \n    \"disconnectOnErrors\": true, \n    \"helloCommand\": \"M110 N0\", \n    \"ignoreErrorsFromFirmware\": false, \n    \"log\": false, \n    \"longRunningCommands\": [\n      \"G4\", \n      \"G28\", \n      \"G29\", \n      \"G30\", \n      \"G32\", \n      \"M400\", \n      \"M226\"\n    ], \n    \"port\": null, \n    \"portOptions\": [\n      \"VIRTUAL\"\n    ], \n    \"timeoutCommunication\": 30.0, \n    \"timeoutConnection\": 10.0, \n    \"timeoutDetection\": 0.5, \n    \"timeoutSdStatus\": 1.0, \n    \"timeoutTemperature\": 5.0, \n    \"triggerOkForM29\": true\n  }, \n  \"server\": {\n    \"commands\": {\n      \"serverRestartCommand\": \"sudo service octoprint restart\", \n      \"systemRestartCommand\": \"sudo shutdown -r now\", \n      \"systemShutdownCommand\": null\n    }, \n    \"diskspace\": {\n      \"critical\": 209715200, \n      \"warning\": 524288000\n    }\n  }, \n  \"system\": {\n    \"actions\": [\n      {\n        \"action\": \"shutdown\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -h now\", \n        \"confirm\": \"You are about to shutdown the system.\", \n        \"ignore\": true, \n        \"name\": \"Shutdown\"\n      }, \n      {\n        \"action\": \"reboot\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -r now\", \n        \"confirm\": \"You are about to reboot the system\", \n        \"ignore\": true, \n        \"name\": \"Reboot\"\n      }, \n      {\n        \"action\": \"restart\", \n        \"async\": true, \n        \"command\": \"sudo service octoprint restart\", \n        \"confirm\": \"You are about to restart OctoPrint\", \n        \"ignore\": true, \n        \"name\": \"Restart OctoPrint\"\n      }\n    ], \n    \"events\": null\n  }, \n  \"temperature\": {\n    \"cutoff\": 30, \n    \"profiles\": [\n      {\n        \"bed\": 100, \n        \"extruder\": 210, \n        \"name\": \"ABS\"\n      }, \n      {\n        \"bed\": 60, \n        \"extruder\": 180, \n        \"name\": \"PLA\"\n      }\n    ]\n  }, \n  \"terminalFilters\": [\n    {\n      \"name\": \"Suppress M105 requests/responses\", \n      \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n    }, \n    {\n      \"name\": \"Suppress M27 requests/responses\", \n      \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n    }\n  ], \n  \"webcam\": {\n    \"bitrate\": \"5000k\", \n    \"ffmpegPath\": \"/usr/bin/avconv\", \n    \"ffmpegThreads\": 1, \n    \"flipH\": false, \n    \"flipV\": false, \n    \"rotate90\": false, \n    \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n    \"streamUrl\": \"/webcam/?action=stream\", \n    \"watermark\": true\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "pre-check=0, no-cache, no-store, must-revalidate, post-check=0, max-age=0"
+          ],
+          "Content-Length": [
+            "5047"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Expires": [
+            "-1"
+          ],
+          "Pragma": [
+            "no-cache"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-OtA.qZs1PmwENCY1Fw2yssS9pulv9QA; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/settings"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.8.0"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connect.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connect.json
new file mode 100644
index 0000000..26c0ebc
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connect.json
@@ -0,0 +1,188 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:01:55",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUw.3rrSWDs1yENR2SP_eCKEwuqH2ME; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:01:55",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"connect\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "22"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUw.3rrSWDs1yENR2SP_eCKEwuqH2ME"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUw.3rrSWDs1yENR2SP_eCKEwuqH2ME; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:01:56",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUw.3rrSWDs1yENR2SP_eCKEwuqH2ME"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"current\": {\n    \"baudrate\": 115200, \n    \"port\": \"/dev/ttyACM0\", \n    \"printerProfile\": \"_default\", \n    \"state\": \"Connecting\"\n  }, \n  \"options\": {\n    \"baudratePreference\": 115200, \n    \"baudrates\": [\n      115200, \n      250000, \n      230400, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"portPreference\": \"/dev/ttyACM0\", \n    \"ports\": [\n      \"/dev/ttyACM0\"\n    ], \n    \"printerProfilePreference\": \"_default\", \n    \"printerProfiles\": [\n      {\n        \"id\": \"_default\", \n        \"name\": \"Default\"\n      }\n    ]\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "546"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetVA.bm6hI_J1ZS5vcNgeovT-gyl0XZA; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connection_info.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connection_info.json
new file mode 100644
index 0000000..545931d
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_connection_info.json
@@ -0,0 +1,120 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:01:54",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:01:54",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"current\": {\n    \"baudrate\": 115200, \n    \"port\": \"/dev/ttyACM0\", \n    \"printerProfile\": \"_default\", \n    \"state\": \"Operational\"\n  }, \n  \"options\": {\n    \"baudratePreference\": 115200, \n    \"baudrates\": [\n      115200, \n      250000, \n      230400, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"portPreference\": \"/dev/ttyACM0\", \n    \"ports\": [\n      \"/dev/ttyACM0\"\n    ], \n    \"printerProfilePreference\": \"_default\", \n    \"printerProfiles\": [\n      {\n        \"id\": \"_default\", \n        \"name\": \"Default\"\n      }\n    ]\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "547"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_delete_log.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_delete_log.json
new file mode 100644
index 0000000..b4fb422
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_delete_log.json
@@ -0,0 +1,182 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T15:40:55",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfEhw.24JHRiUCF_9UqCCVUHPXZgi-AR0; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T15:40:55",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfEhw.24JHRiUCF_9UqCCVUHPXZgi-AR0"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "DELETE",
+        "uri": "http://printer15.local/api/logs/serial.log"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfEhw.24JHRiUCF_9UqCCVUHPXZgi-AR0; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/logs/serial.log"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T15:40:55",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfEhw.24JHRiUCF_9UqCCVUHPXZgi-AR0"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/logs"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"files\": [\n    {\n      \"date\": 1452183342, \n      \"name\": \"octoprint.log.2016-01-07\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-01-07\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-01-07\"\n      }, \n      \"size\": 4661\n    }, \n    {\n      \"date\": 1466871995, \n      \"name\": \"octoprint.log.2016-06-25\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-25\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-25\"\n      }, \n      \"size\": 3922\n    }, \n    {\n      \"date\": 1457028455, \n      \"name\": \"octoprint.log.2016-03-03\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-03\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-03\"\n      }, \n      \"size\": 131\n    }, \n    {\n      \"date\": 1464188895, \n      \"name\": \"octoprint.log.2016-05-25\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-25\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-25\"\n      }, \n      \"size\": 9603\n    }, \n    {\n      \"date\": 1463403811, \n      \"name\": \"octoprint.log.2016-05-16\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-16\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-16\"\n      }, \n      \"size\": 5318\n    }, \n    {\n      \"date\": 1468856189, \n      \"name\": \"octoprint.log.2016-07-18\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-18\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-18\"\n      }, \n      \"size\": 40856\n    }, \n    {\n      \"date\": 1449765091, \n      \"name\": \"octoprint.log.2015-12-10\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-10\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-10\"\n      }, \n      \"size\": 9699\n    }, \n    {\n      \"date\": 1464634834, \n      \"name\": \"octoprint.log.2016-05-30\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-30\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-30\"\n      }, \n      \"size\": 4623\n    }, \n    {\n      \"date\": 1467960900, \n      \"name\": \"octoprint.log.2016-07-07\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-07\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-07\"\n      }, \n      \"size\": 8934\n    }, \n    {\n      \"date\": 1449161140, \n      \"name\": \"octoprint.log.2015-12-03\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-03\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-03\"\n      }, \n      \"size\": 7404\n    }, \n    {\n      \"date\": 1461509346, \n      \"name\": \"octoprint.log.2016-04-24\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-24\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-24\"\n      }, \n      \"size\": 5287\n    }, \n    {\n      \"date\": 1455805987, \n      \"name\": \"octoprint.log.2016-02-18\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-18\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-18\"\n      }, \n      \"size\": 5444\n    }, \n    {\n      \"date\": 1459780076, \n      \"name\": \"octoprint.log.2016-04-04\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-04\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-04\"\n      }, \n      \"size\": 4403\n    }, \n    {\n      \"date\": 1457961905, \n      \"name\": \"octoprint.log.2016-03-13\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-13\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-13\"\n      }, \n      \"size\": 4428\n    }, \n    {\n      \"date\": 1457803483, \n      \"name\": \"octoprint.log.2016-03-11\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-11\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-11\"\n      }, \n      \"size\": 7732\n    }, \n    {\n      \"date\": 1450369885, \n      \"name\": \"octoprint.log.2015-12-17\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-17\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-17\"\n      }, \n      \"size\": 4761\n    }, \n    {\n      \"date\": 1430955047, \n      \"name\": \"plugin_pluginmanager_console.log\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/plugin_pluginmanager_console.log\", \n        \"resource\": \"http://printer15.local/api/logs/plugin_pluginmanager_console.log\"\n      }, \n      \"size\": 0\n    }, \n    {\n      \"date\": 1462785291, \n      \"name\": \"octoprint.log.2016-05-09\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-09\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-09\"\n      }, \n      \"size\": 7176\n    }, \n    {\n      \"date\": 1456932162, \n      \"name\": \"octoprint.log.2016-03-01\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-01\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-01\"\n      }, \n      \"size\": 2913\n    }, \n    {\n      \"date\": 1451992592, \n      \"name\": \"octoprint.log.2016-01-05\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-01-05\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-01-05\"\n      }, \n      \"size\": 9045\n    }, \n    {\n      \"date\": 1469113274, \n      \"name\": \"octoprint.log.2016-07-20\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-20\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-20\"\n      }, \n      \"size\": 2111\n    }, \n    {\n      \"date\": 1457019789, \n      \"name\": \"octoprint.log.2016-03-02\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-02\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-02\"\n      }, \n      \"size\": 2026\n    }, \n    {\n      \"date\": 1464008932, \n      \"name\": \"octoprint.log.2016-05-23\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-23\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-23\"\n      }, \n      \"size\": 17258\n    }, \n    {\n      \"date\": 1464958946, \n      \"name\": \"octoprint.log.2016-06-02\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-02\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-02\"\n      }, \n      \"size\": 8299\n    }, \n    {\n      \"date\": 1466435897, \n      \"name\": \"octoprint.log.2016-06-20\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-20\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-20\"\n      }, \n      \"size\": 3132\n    }, \n    {\n      \"date\": 1460713237, \n      \"name\": \"octoprint.log.2016-04-15\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-15\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-15\"\n      }, \n      \"size\": 1613\n    }, \n    {\n      \"date\": 1450178418, \n      \"name\": \"octoprint.log.2015-12-15\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-15\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-15\"\n      }, \n      \"size\": 8050\n    }, \n    {\n      \"date\": 1468601474, \n      \"name\": \"octoprint.log.2016-07-15\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-15\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-15\"\n      }, \n      \"size\": 5512\n    }, \n    {\n      \"date\": 1448817122, \n      \"name\": \"octoprint.log.2015-11-29\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-11-29\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-11-29\"\n      }, \n      \"size\": 3928\n    }, \n    {\n      \"date\": 1456761793, \n      \"name\": \"octoprint.log.2016-02-29\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-29\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-29\"\n      }, \n      \"size\": 1212\n    }, \n    {\n      \"date\": 1468673024, \n      \"name\": \"octoprint.log.2016-07-16\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-16\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-16\"\n      }, \n      \"size\": 1092\n    }, \n    {\n      \"date\": 1448968659, \n      \"name\": \"octoprint.log.2015-12-01\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-01\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-01\"\n      }, \n      \"size\": 7411\n    }, \n    {\n      \"date\": 1462357573, \n      \"name\": \"octoprint.log.2016-05-04\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-04\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-04\"\n      }, \n      \"size\": 4022\n    }, \n    {\n      \"date\": 1469458785, \n      \"name\": \"octoprint.log\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log\"\n      }, \n      \"size\": 34987\n    }, \n    {\n      \"date\": 1449571322, \n      \"name\": \"octoprint.log.2015-12-08\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-08\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-08\"\n      }, \n      \"size\": 14509\n    }, \n    {\n      \"date\": 1460617779, \n      \"name\": \"octoprint.log.2016-04-14\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-14\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-14\"\n      }, \n      \"size\": 1880\n    }, \n    {\n      \"date\": 1430955047, \n      \"name\": \"plugin_cura_engine.log\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/plugin_cura_engine.log\", \n        \"resource\": \"http://printer15.local/api/logs/plugin_cura_engine.log\"\n      }, \n      \"size\": 0\n    }, \n    {\n      \"date\": 1463666797, \n      \"name\": \"octoprint.log.2016-05-18\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-18\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-18\"\n      }, \n      \"size\": 2206\n    }, \n    {\n      \"date\": 1455296267, \n      \"name\": \"octoprint.log.2016-02-12\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-12\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-12\"\n      }, \n      \"size\": 4609\n    }, \n    {\n      \"date\": 1468249188, \n      \"name\": \"octoprint.log.2016-07-11\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-11\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-11\"\n      }, \n      \"size\": 5406\n    }, \n    {\n      \"date\": 1465579069, \n      \"name\": \"octoprint.log.2016-06-10\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-10\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-10\"\n      }, \n      \"size\": 3852\n    }, \n    {\n      \"date\": 1461182807, \n      \"name\": \"octoprint.log.2016-04-20\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-20\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-20\"\n      }, \n      \"size\": 4621\n    }, \n    {\n      \"date\": 1461046943, \n      \"name\": \"octoprint.log.2016-04-19\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-19\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-19\"\n      }, \n      \"size\": 1812\n    }, \n    {\n      \"date\": 1468478597, \n      \"name\": \"octoprint.log.2016-07-13\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-13\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-13\"\n      }, \n      \"size\": 5814\n    }, \n    {\n      \"date\": 1467126645, \n      \"name\": \"octoprint.log.2016-06-28\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-28\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-28\"\n      }, \n      \"size\": 13567\n    }, \n    {\n      \"date\": 1457527305, \n      \"name\": \"octoprint.log.2016-03-09\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-09\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-09\"\n      }, \n      \"size\": 1092\n    }, \n    {\n      \"date\": 1469116625, \n      \"name\": \"octoprint.log.2016-07-21\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-21\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-21\"\n      }, \n      \"size\": 103\n    }, \n    {\n      \"date\": 1466607225, \n      \"name\": \"octoprint.log.2016-06-21\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-21\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-21\"\n      }, \n      \"size\": 6104\n    }, \n    {\n      \"date\": 1458141527, \n      \"name\": \"octoprint.log.2016-03-16\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-16\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-16\"\n      }, \n      \"size\": 1221\n    }, \n    {\n      \"date\": 1463735129, \n      \"name\": \"octoprint.log.2016-05-20\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-20\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-20\"\n      }, \n      \"size\": 1511\n    }, \n    {\n      \"date\": 1468017273, \n      \"name\": \"octoprint.log.2016-07-08\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-08\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-08\"\n      }, \n      \"size\": 726\n    }, \n    {\n      \"date\": 1455552620, \n      \"name\": \"octoprint.log.2016-02-15\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-15\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-15\"\n      }, \n      \"size\": 6555\n    }, \n    {\n      \"date\": 1467351966, \n      \"name\": \"octoprint.log.2016-07-01\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-01\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-01\"\n      }, \n      \"size\": 1488\n    }, \n    {\n      \"date\": 1469293624, \n      \"name\": \"octoprint.log.2016-07-23\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-23\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-23\"\n      }, \n      \"size\": 4371\n    }, \n    {\n      \"date\": 1466754065, \n      \"name\": \"octoprint.log.2016-06-24\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-24\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-24\"\n      }, \n      \"size\": 10251\n    }, \n    {\n      \"date\": 1430955240, \n      \"name\": \"octoprint.log.2015-05-06\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-05-06\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-05-06\"\n      }, \n      \"size\": 7764\n    }, \n    {\n      \"date\": 1460385147, \n      \"name\": \"octoprint.log.2016-04-11\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-11\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-11\"\n      }, \n      \"size\": 6346\n    }, \n    {\n      \"date\": 1465118151, \n      \"name\": \"octoprint.log.2016-06-05\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-05\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-05\"\n      }, \n      \"size\": 1508\n    }\n  ], \n  \"free\": 12721901568\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "17134"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfEhw.24JHRiUCF_9UqCCVUHPXZgi-AR0; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/logs"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_disconnect.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_disconnect.json
new file mode 100644
index 0000000..c951066
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_disconnect.json
@@ -0,0 +1,188 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:01:54",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:01:54",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"disconnect\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "25"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:01:55",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUg.I8LCvGIeN6LtifggZbPYX7IVeDM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"current\": {\n    \"baudrate\": null, \n    \"port\": null, \n    \"printerProfile\": \"_default\", \n    \"state\": \"Closed\"\n  }, \n  \"options\": {\n    \"baudratePreference\": 115200, \n    \"baudrates\": [\n      115200, \n      250000, \n      230400, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"portPreference\": \"/dev/ttyACM0\", \n    \"ports\": [\n      \"/dev/ttyACM0\"\n    ], \n    \"printerProfilePreference\": \"_default\", \n    \"printerProfiles\": [\n      {\n        \"id\": \"_default\", \n        \"name\": \"Default\"\n      }\n    ]\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "530"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetUw.3rrSWDs1yENR2SP_eCKEwuqH2ME; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_extruding.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_extruding.json
new file mode 100644
index 0000000..c9f271b
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_extruding.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T10:56:19",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con20w.kVFVvi_PLAxTfODOyP7V_kt15Zo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T10:56:19",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"amount\": 1, \"command\": \"extrude\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "35"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con20w.kVFVvi_PLAxTfODOyP7V_kt15Zo"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/tool"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con20w.kVFVvi_PLAxTfODOyP7V_kt15Zo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/tool"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_fake_ack.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_fake_ack.json
new file mode 100644
index 0000000..463cac3
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_fake_ack.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:09:31",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnevGw.SxPQ-l5MDsmEPEKtYrF7by5jVzo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:09:31",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"fake_ack\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "23"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnevGw.SxPQ-l5MDsmEPEKtYrF7by5jVzo"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnevGw.SxPQ-l5MDsmEPEKtYrF7by5jVzo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_feedrate.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_feedrate.json
new file mode 100644
index 0000000..497a018
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_feedrate.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T09:44:32",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConmAA.10TXH7hc5Ca0oQbWSaJ-jJPIiBs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T09:44:32",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"feedrate\", \"factor\": 1.0}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "38"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConmAA.10TXH7hc5Ca0oQbWSaJ-jJPIiBs"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/printhead"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConmAA.10TXH7hc5Ca0oQbWSaJ-jJPIiBs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/printhead"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_contains_files_and_free_space_info.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_contains_files_and_free_space_info.json
new file mode 100644
index 0000000..29fa7b1
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_contains_files_and_free_space_info.json
@@ -0,0 +1,120 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:00:38",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBg.eWqBoHEMkhPjutcKA7voafW1QGo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:00:38",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBg.eWqBoHEMkhPjutcKA7voafW1QGo"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/files"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"files\": [\n    {\n      \"date\": 1463733114, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3625.7017746005045, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1366.44818, \n            \"volume\": 8.717114849239637\n          }\n        }\n      }, \n      \"hash\": \"4515363e527de253dc45101b77639cb3097d30c1\", \n      \"links\": [], \n      \"name\": \"plate2.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1463738111.306265, \n          \"printTime\": 4454.600942850113, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/plate2.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/plate2.gcode\"\n      }, \n      \"size\": 1919950, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4454.600942850113\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4454.600942850113\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1455519473, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 9648.473941059889, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 12568.026009999172, \n            \"volume\": 80.1764221731363\n          }\n        }\n      }, \n      \"hash\": \"2dd3898e6435fea50938ceb3350fbfc32348765a\", \n      \"links\": [], \n      \"name\": \"noha-kratsi.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1455530836.038202, \n          \"printTime\": 11359.462301015854, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/noha-kratsi.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/noha-kratsi.gcode\"\n      }, \n      \"size\": 4775982, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 11359.462301015854\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 11359.462301015854\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1464620255, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 11398.550506420732, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 8788.88375, \n            \"volume\": 58.05232223829053\n          }\n        }\n      }, \n      \"hash\": \"fe6208411628992f488050bbd7f516c3a480e947\", \n      \"links\": [], \n      \"name\": \"hodorstop.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 1, \n        \"last\": {\n          \"date\": 1469099651.292224, \n          \"printTime\": 14587.552161931992, \n          \"success\": true\n        }, \n        \"success\": 12\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/hodorstop.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/hodorstop.gcode\"\n      }, \n      \"size\": 5894046, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 14459.99043494463\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 14587.552161931992\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1457777056, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 4210.9288130150535, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 3446.56794, \n            \"volume\": 23.08035200848913\n          }\n        }\n      }, \n      \"hash\": \"01bea07d540b053a3d5f1b0ec45f346b34525323\", \n      \"links\": [], \n      \"name\": \"vicko_mini.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 4, \n        \"last\": {\n          \"date\": 1457810594.271455, \n          \"printTime\": 5053.565083026886, \n          \"success\": true\n        }, \n        \"success\": 2\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/vicko_mini.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/vicko_mini.gcode\"\n      }, \n      \"size\": 932353, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 5045.5501799583435\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 5053.565083026886\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468840568, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 2137.5632077942078, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1305.99734, \n            \"volume\": 8.626371741921183\n          }\n        }\n      }, \n      \"hash\": \"fe8265ba58a1e8612e5018feb3957f47c76b413c\", \n      \"links\": [], \n      \"name\": \"raspberri_pi_camera_case.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468847762.928149, \n          \"printTime\": 3292.3299810886383, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/raspberri_pi_camera_case.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/raspberri_pi_camera_case.gcode\"\n      }, \n      \"size\": 982191, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 3292.3299810886383\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 3292.3299810886383\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1466861811, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 4723.454013809236, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 3107.0064, \n            \"volume\": 20.80643778187892\n          }\n        }\n      }, \n      \"hash\": \"59b88eae5910e6da6b9153bb43b0dfaadbcaf8cb\", \n      \"links\": [], \n      \"name\": \"T3DD_heatbed-cable-holder.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/T3DD_heatbed-cable-holder.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/T3DD_heatbed-cable-holder.gcode\"\n      }, \n      \"size\": 2682616, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1456934033, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 7080.918206109699, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 4333.77106, \n            \"volume\": 28.625418339626794\n          }\n        }\n      }, \n      \"hash\": \"5b1e955d996937a40f8fc4005fff8dc084130610\", \n      \"links\": [], \n      \"name\": \"Vejce_karfiol_part_4_cut_part_0.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1456942767.80793, \n          \"printTime\": 8726.527762889862, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_4_cut_part_0.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_4_cut_part_0.gcode\"\n      }, \n      \"size\": 7158038, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 8726.527762889862\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 8726.527762889862\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1457019764, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 7044.199031518945, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 4312.76324, \n            \"volume\": 28.48665751733648\n          }\n        }\n      }, \n      \"hash\": \"9e717ce25c52d3573f271dbe7a92e77616de931d\", \n      \"links\": [], \n      \"name\": \"Vejce_karfiol_part_4_cut_part_2.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1457028453.545459, \n          \"printTime\": 8680.590276002884, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_4_cut_part_2.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_4_cut_part_2.gcode\"\n      }, \n      \"size\": 6553749, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 8680.590276002884\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 8680.590276002884\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1455279961, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 11421.749939285224, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 15050.77341999927, \n            \"volume\": 96.01485251494636\n          }\n        }\n      }, \n      \"hash\": \"9a40a7a5987ac37623b0036dbbfb57ededb4fe10\", \n      \"links\": [], \n      \"name\": \"noha.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1455293400.102627, \n          \"printTime\": 13428.283998966217, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/noha.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/noha.gcode\"\n      }, \n      \"size\": 5784172, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 13428.283998966217\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 13428.283998966217\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468571668, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 6003.6333479066525, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 3875.82692, \n            \"volume\": 24.725437006630376\n          }\n        }\n      }, \n      \"hash\": \"44389035aa7dd2f140ff2bcd4efeca2441f7e5b8\", \n      \"links\": [], \n      \"name\": \"zakladna_v2_ABS.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468578908.095119, \n          \"printTime\": 7071.251595020294, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/zakladna_v2_ABS.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/zakladna_v2_ABS.gcode\"\n      }, \n      \"size\": 260240, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 7071.251595020294\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 7071.251595020294\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468240729, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 2376.2921410902704, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1493.94965, \n            \"volume\": 9.867834068186571\n          }\n        }\n      }, \n      \"hash\": \"2002616167e75c84dfb26fd58600e344b3e7607c\", \n      \"links\": [], \n      \"name\": \"bulbasaur_starter_1gen_flowalistik.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468244416.955418, \n          \"printTime\": 3644.9868030548096, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/bulbasaur_starter_1gen_flowalistik.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/bulbasaur_starter_1gen_flowalistik.gcode\"\n      }, \n      \"size\": 1117144, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 3644.9868030548096\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 3644.9868030548096\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468007005, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 7335.829037641681, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 5825.47787, \n            \"volume\": 37.16303361353512\n          }\n        }\n      }, \n      \"hash\": \"dfc4c579fb34ad80a21d18d1b96e7668f00c5916\", \n      \"links\": [], \n      \"name\": \"x-ends-v3.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468017269.467861, \n          \"printTime\": 10232.5068359375, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/x-ends-v3.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/x-ends-v3.gcode\"\n      }, \n      \"size\": 6609807, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 10232.5068359375\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 10232.5068359375\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1461501912, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 821.2976320343308, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 317.07501, \n            \"volume\": 2.1671847107913633\n          }\n        }\n      }, \n      \"hash\": \"44f90e6139369d4a0e09a580a74c93eb0566185d\", \n      \"links\": [], \n      \"name\": \"velka-mala-rucicka2.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1461503879.672503, \n          \"printTime\": 1751.5514709949493, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/velka-mala-rucicka2.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/velka-mala-rucicka2.gcode\"\n      }, \n      \"size\": 524261, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 1751.5514709949493\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 1751.5514709949493\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1466523483, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 13054.204115720351, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 9774.22276, \n            \"volume\": 64.56068204251233\n          }\n        }\n      }, \n      \"hash\": \"9ed85be9371f24555bac16f0904dc658af728f5b\", \n      \"links\": [], \n      \"name\": \"T3DD_corner.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1466539900.509135, \n          \"printTime\": 16407.55785703659, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/T3DD_corner.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/T3DD_corner.gcode\"\n      }, \n      \"size\": 3562102, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 16407.55785703659\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 16407.55785703659\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468235053, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3382.0709245561943, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1243.41092, \n            \"volume\": 8.212976011026347\n          }\n        }\n      }, \n      \"hash\": \"6a940bb09887079990c7764fb193b141266dfccb\", \n      \"links\": [], \n      \"name\": \"pikachu_1gen_flowalistik.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468239964.589097, \n          \"printTime\": 4478.840677976608, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/pikachu_1gen_flowalistik.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/pikachu_1gen_flowalistik.gcode\"\n      }, \n      \"size\": 907576, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4478.840677976608\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4478.840677976608\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1456857774, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 17924.17838241675, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 12556.10783000007, \n            \"volume\": 82.93558528475097\n          }\n        }\n      }, \n      \"hash\": \"2d97c5ec32047b94719c0de8b9b14b536a611459\", \n      \"links\": [], \n      \"name\": \"Vejce_karfiol_part_0_cut_part_0.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1456880001.505434, \n          \"printTime\": 22179.878684043884, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_0_cut_part_0.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_0_cut_part_0.gcode\"\n      }, \n      \"size\": 7182441, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 22179.878684043884\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 22179.878684043884\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468475478, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 7392.4177776230335, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 5868.58725, \n            \"volume\": 37.43804544496769\n          }\n        }\n      }, \n      \"hash\": \"fcbb99955c6bbac8aecc89db7e0f4aed9d8f399f\", \n      \"links\": [], \n      \"name\": \"x-ends-v4.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468486094.9666, \n          \"printTime\": 10390.446494102478, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/x-ends-v4.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/x-ends-v4.gcode\"\n      }, \n      \"size\": 6727045, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 10390.446494102478\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 10390.446494102478\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1456759729, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 17640.509256322912, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 10791.372739999977, \n            \"volume\": 71.2791596197848\n          }\n        }\n      }, \n      \"hash\": \"5761a9ddd585f984cfcc5c6fb437273df9c12f9f\", \n      \"links\": [], \n      \"name\": \"Vejce_karfiol_part_1.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 1, \n        \"last\": {\n          \"date\": 1456782401.402252, \n          \"printTime\": 21835.19486093521, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_1.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_1.gcode\"\n      }, \n      \"size\": 8470067, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 21835.19486093521\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 21835.19486093521\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1459766961, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 32171.697852568475, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 11961.890139999727, \n            \"volume\": 80.10421959593491\n          }\n        }\n      }, \n      \"hash\": \"aec7009c1e084475aa0bbf1c0c53d49e83b6fd33\", \n      \"links\": [], \n      \"name\": \"model.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 1, \n        \"last\": {\n          \"date\": 1460421790.410203, \n          \"printTime\": 36656.69072198868, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/model.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/model.gcode\"\n      }, \n      \"size\": 25775736, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 36656.69072198868\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 36656.69072198868\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1469279660, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3171.9563675157638, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 2337.00828, \n            \"volume\": 14.908702633995224\n          }\n        }\n      }, \n      \"hash\": \"424c9be691bb575ad1bb3bdf67d5f7a3074afb48\", \n      \"links\": [], \n      \"name\": \"y-LM8UU-holder_4.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1469284653.173205, \n          \"printTime\": 4819.989939928055, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/y-LM8UU-holder_4.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/y-LM8UU-holder_4.gcode\"\n      }, \n      \"size\": 1416246, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4819.989939928055\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4819.989939928055\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1458140856, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 12733.419195229038, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 8080.14935, \n            \"volume\": 56.73507668108169\n          }\n        }\n      }, \n      \"hash\": \"7cf7bd2d7634a49567f5f8943cdbef760f95ce17\", \n      \"links\": [], \n      \"name\": \"nxops-monolith_v30_(repaired).gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1458155597.625873, \n          \"printTime\": 14485.237243175507, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/nxops-monolith_v30_(repaired).gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/nxops-monolith_v30_%28repaired%29.gcode\"\n      }, \n      \"size\": 4650457, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 14485.237243175507\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 14485.237243175507\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1460374886, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 7477.806584565628, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 4234.5693, \n            \"volume\": 27.970171017903425\n          }\n        }\n      }, \n      \"hash\": \"3af0f6cd898a80fe7e0b13ab7188e20da6b5baf0\", \n      \"links\": [], \n      \"name\": \"SUMA_LOGO.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1460385068.997483, \n          \"printTime\": 9054.055355072021, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/SUMA_LOGO.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/SUMA_LOGO.gcode\"\n      }, \n      \"size\": 3227012, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 9054.055355072021\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 9054.055355072021\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468244878, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3196.1972424692062, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1298.93986, \n            \"volume\": 8.57975568522908\n          }\n        }\n      }, \n      \"hash\": \"b7d483a4cf2532b60efcb3d931eacfeb3e541d16\", \n      \"links\": [], \n      \"name\": \"squirtle_starter_1gen_flowalistik.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468249184.344852, \n          \"printTime\": 4300.201224088669, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/squirtle_starter_1gen_flowalistik.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/squirtle_starter_1gen_flowalistik.gcode\"\n      }, \n      \"size\": 1050215, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4300.201224088669\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4300.201224088669\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1467876827, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 4619.034822528971, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 5919.10692, \n            \"volume\": 37.76033045509936\n          }\n        }\n      }, \n      \"hash\": \"2ec2acb401a3fbb4d55672a0945cf042d1866951\", \n      \"links\": [], \n      \"name\": \"x-ends.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 1, \n        \"last\": {\n          \"date\": 1467884012.536495, \n          \"printTime\": 6892.582817077637, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/x-ends.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/x-ends.gcode\"\n      }, \n      \"size\": 4353772, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 6892.582817077637\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 6892.582817077637\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1467957621, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 6026.925320744925, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 7393.03772, \n            \"volume\": 47.163119563012444\n          }\n        }\n      }, \n      \"hash\": \"5923adeaa0ba3085903dea30951524d43401acdf\", \n      \"links\": [], \n      \"name\": \"protos_parts.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1467966495.813609, \n          \"printTime\": 8831.31046295166, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/protos_parts.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/protos_parts.gcode\"\n      }, \n      \"size\": 5218916, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 8831.31046295166\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 8831.31046295166\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468227636, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3465.3969094418912, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1197.56591, \n            \"volume\": 7.910160617258321\n          }\n        }\n      }, \n      \"hash\": \"28069e0e6813949c3e106d4e920556e1bb09300c\", \n      \"links\": [], \n      \"name\": \"charmander_brim_starter_1gen_flowalistik.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468232156.867724, \n          \"printTime\": 4517.265386104584, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/charmander_brim_starter_1gen_flowalistik.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/charmander_brim_starter_1gen_flowalistik.gcode\"\n      }, \n      \"size\": 1056998, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4517.265386104584\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4517.265386104584\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1455531969, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3331.013938349298, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 2432.72171, \n            \"volume\": 16.06860992159615\n          }\n        }\n      }, \n      \"hash\": \"1f2a8ec946a76a76f9c9df643f0df27c6af83864\", \n      \"links\": [], \n      \"name\": \"x1_carbon_onelink.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1455537511.032959, \n          \"printTime\": 4682.734326839447, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/x1_carbon_onelink.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/x1_carbon_onelink.gcode\"\n      }, \n      \"size\": 1049641, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4682.734326839447\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4682.734326839447\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1469284019, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 6588.450838748042, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 5185.45593, \n            \"volume\": 33.080079836968814\n          }\n        }\n      }, \n      \"hash\": \"fcfdd36224050b95a387d65a88a2dab3a912c612\", \n      \"links\": [], \n      \"name\": \"gregs-wade-filament-175.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1469293621.115723, \n          \"printTime\": 8899.51149892807, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/gregs-wade-filament-175.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/gregs-wade-filament-175.gcode\"\n      }, \n      \"size\": 3460892, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 8899.51149892807\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 8899.51149892807\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1456924089, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 8237.121783042947, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 3399.73047, \n            \"volume\": 22.45589478502033\n          }\n        }\n      }, \n      \"hash\": \"7dfb84b69a305e22f5ff64c384f91c04204f2582\", \n      \"links\": [], \n      \"name\": \"Vejce_karfiol_part_0_cut_part_1_krytka.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1456933981.866552, \n          \"printTime\": 9888.78882098198, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_0_cut_part_1_krytka.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_0_cut_part_1_krytka.gcode\"\n      }, \n      \"size\": 4157254, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 9888.78882098198\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 9888.78882098198\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468840518, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 1904.3513916948775, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1590.97155, \n            \"volume\": 10.508682981789644\n          }\n        }\n      }, \n      \"hash\": \"9586d7092c8dc2db6ca6d6a0883bcf5edf63cff6\", \n      \"links\": [], \n      \"name\": \"kanoepolo_karta.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468858300.161772, \n          \"printTime\": 2953.3381559848785, \n          \"success\": true\n        }, \n        \"success\": 3\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/kanoepolo_karta.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/kanoepolo_karta.gcode\"\n      }, \n      \"size\": 214834, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 2836.458710273107\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 2953.3381559848785\n        }\n      }, \n      \"type\": \"machinecode\"\n    }\n  ], \n  \"free\": 12721975296\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "31951"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBg.eWqBoHEMkhPjutcKA7voafW1QGo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/files"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_local_works.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_local_works.json
new file mode 100644
index 0000000..d48a070
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_local_works.json
@@ -0,0 +1,120 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:00:38",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBg.eWqBoHEMkhPjutcKA7voafW1QGo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:00:39",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBg.eWqBoHEMkhPjutcKA7voafW1QGo"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/files/local"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"files\": [\n    {\n      \"date\": 1463733114, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3625.7017746005045, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1366.44818, \n            \"volume\": 8.717114849239637\n          }\n        }\n      }, \n      \"hash\": \"4515363e527de253dc45101b77639cb3097d30c1\", \n      \"links\": [], \n      \"name\": \"plate2.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1463738111.306265, \n          \"printTime\": 4454.600942850113, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/plate2.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/plate2.gcode\"\n      }, \n      \"size\": 1919950, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4454.600942850113\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4454.600942850113\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1455519473, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 9648.473941059889, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 12568.026009999172, \n            \"volume\": 80.1764221731363\n          }\n        }\n      }, \n      \"hash\": \"2dd3898e6435fea50938ceb3350fbfc32348765a\", \n      \"links\": [], \n      \"name\": \"noha-kratsi.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1455530836.038202, \n          \"printTime\": 11359.462301015854, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/noha-kratsi.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/noha-kratsi.gcode\"\n      }, \n      \"size\": 4775982, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 11359.462301015854\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 11359.462301015854\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1464620255, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 11398.550506420732, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 8788.88375, \n            \"volume\": 58.05232223829053\n          }\n        }\n      }, \n      \"hash\": \"fe6208411628992f488050bbd7f516c3a480e947\", \n      \"links\": [], \n      \"name\": \"hodorstop.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 1, \n        \"last\": {\n          \"date\": 1469099651.292224, \n          \"printTime\": 14587.552161931992, \n          \"success\": true\n        }, \n        \"success\": 12\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/hodorstop.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/hodorstop.gcode\"\n      }, \n      \"size\": 5894046, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 14459.99043494463\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 14587.552161931992\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1457777056, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 4210.9288130150535, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 3446.56794, \n            \"volume\": 23.08035200848913\n          }\n        }\n      }, \n      \"hash\": \"01bea07d540b053a3d5f1b0ec45f346b34525323\", \n      \"links\": [], \n      \"name\": \"vicko_mini.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 4, \n        \"last\": {\n          \"date\": 1457810594.271455, \n          \"printTime\": 5053.565083026886, \n          \"success\": true\n        }, \n        \"success\": 2\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/vicko_mini.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/vicko_mini.gcode\"\n      }, \n      \"size\": 932353, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 5045.5501799583435\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 5053.565083026886\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468840568, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 2137.5632077942078, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1305.99734, \n            \"volume\": 8.626371741921183\n          }\n        }\n      }, \n      \"hash\": \"fe8265ba58a1e8612e5018feb3957f47c76b413c\", \n      \"links\": [], \n      \"name\": \"raspberri_pi_camera_case.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468847762.928149, \n          \"printTime\": 3292.3299810886383, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/raspberri_pi_camera_case.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/raspberri_pi_camera_case.gcode\"\n      }, \n      \"size\": 982191, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 3292.3299810886383\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 3292.3299810886383\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1466861811, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 4723.454013809236, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 3107.0064, \n            \"volume\": 20.80643778187892\n          }\n        }\n      }, \n      \"hash\": \"59b88eae5910e6da6b9153bb43b0dfaadbcaf8cb\", \n      \"links\": [], \n      \"name\": \"T3DD_heatbed-cable-holder.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/T3DD_heatbed-cable-holder.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/T3DD_heatbed-cable-holder.gcode\"\n      }, \n      \"size\": 2682616, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1456934033, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 7080.918206109699, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 4333.77106, \n            \"volume\": 28.625418339626794\n          }\n        }\n      }, \n      \"hash\": \"5b1e955d996937a40f8fc4005fff8dc084130610\", \n      \"links\": [], \n      \"name\": \"Vejce_karfiol_part_4_cut_part_0.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1456942767.80793, \n          \"printTime\": 8726.527762889862, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_4_cut_part_0.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_4_cut_part_0.gcode\"\n      }, \n      \"size\": 7158038, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 8726.527762889862\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 8726.527762889862\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1457019764, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 7044.199031518945, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 4312.76324, \n            \"volume\": 28.48665751733648\n          }\n        }\n      }, \n      \"hash\": \"9e717ce25c52d3573f271dbe7a92e77616de931d\", \n      \"links\": [], \n      \"name\": \"Vejce_karfiol_part_4_cut_part_2.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1457028453.545459, \n          \"printTime\": 8680.590276002884, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_4_cut_part_2.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_4_cut_part_2.gcode\"\n      }, \n      \"size\": 6553749, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 8680.590276002884\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 8680.590276002884\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1455279961, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 11421.749939285224, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 15050.77341999927, \n            \"volume\": 96.01485251494636\n          }\n        }\n      }, \n      \"hash\": \"9a40a7a5987ac37623b0036dbbfb57ededb4fe10\", \n      \"links\": [], \n      \"name\": \"noha.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1455293400.102627, \n          \"printTime\": 13428.283998966217, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/noha.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/noha.gcode\"\n      }, \n      \"size\": 5784172, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 13428.283998966217\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 13428.283998966217\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468571668, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 6003.6333479066525, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 3875.82692, \n            \"volume\": 24.725437006630376\n          }\n        }\n      }, \n      \"hash\": \"44389035aa7dd2f140ff2bcd4efeca2441f7e5b8\", \n      \"links\": [], \n      \"name\": \"zakladna_v2_ABS.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468578908.095119, \n          \"printTime\": 7071.251595020294, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/zakladna_v2_ABS.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/zakladna_v2_ABS.gcode\"\n      }, \n      \"size\": 260240, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 7071.251595020294\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 7071.251595020294\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468240729, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 2376.2921410902704, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1493.94965, \n            \"volume\": 9.867834068186571\n          }\n        }\n      }, \n      \"hash\": \"2002616167e75c84dfb26fd58600e344b3e7607c\", \n      \"links\": [], \n      \"name\": \"bulbasaur_starter_1gen_flowalistik.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468244416.955418, \n          \"printTime\": 3644.9868030548096, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/bulbasaur_starter_1gen_flowalistik.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/bulbasaur_starter_1gen_flowalistik.gcode\"\n      }, \n      \"size\": 1117144, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 3644.9868030548096\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 3644.9868030548096\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468007005, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 7335.829037641681, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 5825.47787, \n            \"volume\": 37.16303361353512\n          }\n        }\n      }, \n      \"hash\": \"dfc4c579fb34ad80a21d18d1b96e7668f00c5916\", \n      \"links\": [], \n      \"name\": \"x-ends-v3.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468017269.467861, \n          \"printTime\": 10232.5068359375, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/x-ends-v3.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/x-ends-v3.gcode\"\n      }, \n      \"size\": 6609807, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 10232.5068359375\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 10232.5068359375\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1461501912, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 821.2976320343308, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 317.07501, \n            \"volume\": 2.1671847107913633\n          }\n        }\n      }, \n      \"hash\": \"44f90e6139369d4a0e09a580a74c93eb0566185d\", \n      \"links\": [], \n      \"name\": \"velka-mala-rucicka2.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1461503879.672503, \n          \"printTime\": 1751.5514709949493, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/velka-mala-rucicka2.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/velka-mala-rucicka2.gcode\"\n      }, \n      \"size\": 524261, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 1751.5514709949493\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 1751.5514709949493\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1466523483, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 13054.204115720351, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 9774.22276, \n            \"volume\": 64.56068204251233\n          }\n        }\n      }, \n      \"hash\": \"9ed85be9371f24555bac16f0904dc658af728f5b\", \n      \"links\": [], \n      \"name\": \"T3DD_corner.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1466539900.509135, \n          \"printTime\": 16407.55785703659, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/T3DD_corner.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/T3DD_corner.gcode\"\n      }, \n      \"size\": 3562102, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 16407.55785703659\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 16407.55785703659\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468235053, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3382.0709245561943, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1243.41092, \n            \"volume\": 8.212976011026347\n          }\n        }\n      }, \n      \"hash\": \"6a940bb09887079990c7764fb193b141266dfccb\", \n      \"links\": [], \n      \"name\": \"pikachu_1gen_flowalistik.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468239964.589097, \n          \"printTime\": 4478.840677976608, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/pikachu_1gen_flowalistik.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/pikachu_1gen_flowalistik.gcode\"\n      }, \n      \"size\": 907576, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4478.840677976608\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4478.840677976608\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1456857774, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 17924.17838241675, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 12556.10783000007, \n            \"volume\": 82.93558528475097\n          }\n        }\n      }, \n      \"hash\": \"2d97c5ec32047b94719c0de8b9b14b536a611459\", \n      \"links\": [], \n      \"name\": \"Vejce_karfiol_part_0_cut_part_0.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1456880001.505434, \n          \"printTime\": 22179.878684043884, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_0_cut_part_0.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_0_cut_part_0.gcode\"\n      }, \n      \"size\": 7182441, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 22179.878684043884\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 22179.878684043884\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468475478, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 7392.4177776230335, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 5868.58725, \n            \"volume\": 37.43804544496769\n          }\n        }\n      }, \n      \"hash\": \"fcbb99955c6bbac8aecc89db7e0f4aed9d8f399f\", \n      \"links\": [], \n      \"name\": \"x-ends-v4.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468486094.9666, \n          \"printTime\": 10390.446494102478, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/x-ends-v4.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/x-ends-v4.gcode\"\n      }, \n      \"size\": 6727045, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 10390.446494102478\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 10390.446494102478\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1456759729, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 17640.509256322912, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 10791.372739999977, \n            \"volume\": 71.2791596197848\n          }\n        }\n      }, \n      \"hash\": \"5761a9ddd585f984cfcc5c6fb437273df9c12f9f\", \n      \"links\": [], \n      \"name\": \"Vejce_karfiol_part_1.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 1, \n        \"last\": {\n          \"date\": 1456782401.402252, \n          \"printTime\": 21835.19486093521, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_1.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_1.gcode\"\n      }, \n      \"size\": 8470067, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 21835.19486093521\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 21835.19486093521\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1459766961, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 32171.697852568475, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 11961.890139999727, \n            \"volume\": 80.10421959593491\n          }\n        }\n      }, \n      \"hash\": \"aec7009c1e084475aa0bbf1c0c53d49e83b6fd33\", \n      \"links\": [], \n      \"name\": \"model.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 1, \n        \"last\": {\n          \"date\": 1460421790.410203, \n          \"printTime\": 36656.69072198868, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/model.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/model.gcode\"\n      }, \n      \"size\": 25775736, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 36656.69072198868\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 36656.69072198868\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1469279660, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3171.9563675157638, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 2337.00828, \n            \"volume\": 14.908702633995224\n          }\n        }\n      }, \n      \"hash\": \"424c9be691bb575ad1bb3bdf67d5f7a3074afb48\", \n      \"links\": [], \n      \"name\": \"y-LM8UU-holder_4.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1469284653.173205, \n          \"printTime\": 4819.989939928055, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/y-LM8UU-holder_4.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/y-LM8UU-holder_4.gcode\"\n      }, \n      \"size\": 1416246, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4819.989939928055\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4819.989939928055\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1458140856, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 12733.419195229038, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 8080.14935, \n            \"volume\": 56.73507668108169\n          }\n        }\n      }, \n      \"hash\": \"7cf7bd2d7634a49567f5f8943cdbef760f95ce17\", \n      \"links\": [], \n      \"name\": \"nxops-monolith_v30_(repaired).gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1458155597.625873, \n          \"printTime\": 14485.237243175507, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/nxops-monolith_v30_(repaired).gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/nxops-monolith_v30_%28repaired%29.gcode\"\n      }, \n      \"size\": 4650457, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 14485.237243175507\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 14485.237243175507\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1460374886, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 7477.806584565628, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 4234.5693, \n            \"volume\": 27.970171017903425\n          }\n        }\n      }, \n      \"hash\": \"3af0f6cd898a80fe7e0b13ab7188e20da6b5baf0\", \n      \"links\": [], \n      \"name\": \"SUMA_LOGO.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1460385068.997483, \n          \"printTime\": 9054.055355072021, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/SUMA_LOGO.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/SUMA_LOGO.gcode\"\n      }, \n      \"size\": 3227012, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 9054.055355072021\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 9054.055355072021\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468244878, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3196.1972424692062, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1298.93986, \n            \"volume\": 8.57975568522908\n          }\n        }\n      }, \n      \"hash\": \"b7d483a4cf2532b60efcb3d931eacfeb3e541d16\", \n      \"links\": [], \n      \"name\": \"squirtle_starter_1gen_flowalistik.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468249184.344852, \n          \"printTime\": 4300.201224088669, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/squirtle_starter_1gen_flowalistik.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/squirtle_starter_1gen_flowalistik.gcode\"\n      }, \n      \"size\": 1050215, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4300.201224088669\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4300.201224088669\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1467876827, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 4619.034822528971, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 5919.10692, \n            \"volume\": 37.76033045509936\n          }\n        }\n      }, \n      \"hash\": \"2ec2acb401a3fbb4d55672a0945cf042d1866951\", \n      \"links\": [], \n      \"name\": \"x-ends.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 1, \n        \"last\": {\n          \"date\": 1467884012.536495, \n          \"printTime\": 6892.582817077637, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/x-ends.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/x-ends.gcode\"\n      }, \n      \"size\": 4353772, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 6892.582817077637\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 6892.582817077637\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1467957621, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 6026.925320744925, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 7393.03772, \n            \"volume\": 47.163119563012444\n          }\n        }\n      }, \n      \"hash\": \"5923adeaa0ba3085903dea30951524d43401acdf\", \n      \"links\": [], \n      \"name\": \"protos_parts.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1467966495.813609, \n          \"printTime\": 8831.31046295166, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/protos_parts.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/protos_parts.gcode\"\n      }, \n      \"size\": 5218916, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 8831.31046295166\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 8831.31046295166\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468227636, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3465.3969094418912, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1197.56591, \n            \"volume\": 7.910160617258321\n          }\n        }\n      }, \n      \"hash\": \"28069e0e6813949c3e106d4e920556e1bb09300c\", \n      \"links\": [], \n      \"name\": \"charmander_brim_starter_1gen_flowalistik.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468232156.867724, \n          \"printTime\": 4517.265386104584, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/charmander_brim_starter_1gen_flowalistik.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/charmander_brim_starter_1gen_flowalistik.gcode\"\n      }, \n      \"size\": 1056998, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4517.265386104584\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4517.265386104584\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1455531969, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 3331.013938349298, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 2432.72171, \n            \"volume\": 16.06860992159615\n          }\n        }\n      }, \n      \"hash\": \"1f2a8ec946a76a76f9c9df643f0df27c6af83864\", \n      \"links\": [], \n      \"name\": \"x1_carbon_onelink.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1455537511.032959, \n          \"printTime\": 4682.734326839447, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/x1_carbon_onelink.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/x1_carbon_onelink.gcode\"\n      }, \n      \"size\": 1049641, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 4682.734326839447\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 4682.734326839447\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1469284019, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 6588.450838748042, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 5185.45593, \n            \"volume\": 33.080079836968814\n          }\n        }\n      }, \n      \"hash\": \"fcfdd36224050b95a387d65a88a2dab3a912c612\", \n      \"links\": [], \n      \"name\": \"gregs-wade-filament-175.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1469293621.115723, \n          \"printTime\": 8899.51149892807, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/gregs-wade-filament-175.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/gregs-wade-filament-175.gcode\"\n      }, \n      \"size\": 3460892, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 8899.51149892807\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 8899.51149892807\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1456924089, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 8237.121783042947, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 3399.73047, \n            \"volume\": 22.45589478502033\n          }\n        }\n      }, \n      \"hash\": \"7dfb84b69a305e22f5ff64c384f91c04204f2582\", \n      \"links\": [], \n      \"name\": \"Vejce_karfiol_part_0_cut_part_1_krytka.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1456933981.866552, \n          \"printTime\": 9888.78882098198, \n          \"success\": true\n        }, \n        \"success\": 1\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/Vejce_karfiol_part_0_cut_part_1_krytka.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/Vejce_karfiol_part_0_cut_part_1_krytka.gcode\"\n      }, \n      \"size\": 4157254, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 9888.78882098198\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 9888.78882098198\n        }\n      }, \n      \"type\": \"machinecode\"\n    }, \n    {\n      \"date\": 1468840518, \n      \"gcodeAnalysis\": {\n        \"estimatedPrintTime\": 1904.3513916948775, \n        \"filament\": {\n          \"tool0\": {\n            \"length\": 1590.97155, \n            \"volume\": 10.508682981789644\n          }\n        }\n      }, \n      \"hash\": \"9586d7092c8dc2db6ca6d6a0883bcf5edf63cff6\", \n      \"links\": [], \n      \"name\": \"kanoepolo_karta.gcode\", \n      \"origin\": \"local\", \n      \"prints\": {\n        \"failure\": 0, \n        \"last\": {\n          \"date\": 1468858300.161772, \n          \"printTime\": 2953.3381559848785, \n          \"success\": true\n        }, \n        \"success\": 3\n      }, \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/kanoepolo_karta.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/kanoepolo_karta.gcode\"\n      }, \n      \"size\": 214834, \n      \"statistics\": {\n        \"averagePrintTime\": {\n          \"_default\": 2836.458710273107\n        }, \n        \"lastPrintTime\": {\n          \"_default\": 2953.3381559848785\n        }\n      }, \n      \"type\": \"machinecode\"\n    }\n  ], \n  \"free\": 12721975296\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "31951"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/files/local"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_sdcard_works.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_sdcard_works.json
new file mode 100644
index 0000000..6e74558
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_files_sdcard_works.json
@@ -0,0 +1,120 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:00:39",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:00:39",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/files/sdcard"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"files\": []\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "17"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/files/sdcard"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_flowrate.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_flowrate.json
new file mode 100644
index 0000000..f6efea2
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_flowrate.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T10:59:43",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con3nw.Nw7AqkN0M9aZ9PYlmtjT8f5OpyU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T10:59:44",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"flowrate\", \"factor\": 1.0}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "38"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con3nw.Nw7AqkN0M9aZ9PYlmtjT8f5OpyU"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/tool"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con3oA.WNfQEILPwegguj5qNiMfVkdRVXA; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/tool"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_get_settings.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_get_settings.json
new file mode 100644
index 0000000..cf4419a
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_get_settings.json
@@ -0,0 +1,138 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2017-04-24T13:01:45",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.13.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.10\"\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0"
+          ],
+          "Content-Length": [
+            "41"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Expires": [
+            "-1"
+          ],
+          "Pragma": [
+            "no-cache"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-IuQ.aPNYxgGOvs6uIBlX0QXk7bzqUFQ; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2017-04-24T13:01:45",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-IuQ.aPNYxgGOvs6uIBlX0QXk7bzqUFQ"
+          ],
+          "User-Agent": [
+            "python-requests/2.13.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/settings"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": {\n    \"allowCrossOrigin\": false, \n    \"enabled\": true, \n    \"key\": \"YouShallNotPass\"\n  }, \n  \"appearance\": {\n    \"color\": \"default\", \n    \"colorTransparent\": false, \n    \"defaultLanguage\": \"_default\", \n    \"name\": \"\"\n  }, \n  \"feature\": {\n    \"alwaysSendChecksum\": false, \n    \"externalHeatupDetection\": true, \n    \"gcodeViewer\": true, \n    \"ignoreIdenticalResends\": false, \n    \"keyboardControl\": true, \n    \"pollWatched\": false, \n    \"repetierTargetTemp\": false, \n    \"sdAlwaysAvailable\": false, \n    \"sdSupport\": true, \n    \"swallowOkAfterResend\": true, \n    \"temperatureGraph\": true, \n    \"waitForStart\": false\n  }, \n  \"folder\": {\n    \"logs\": \"/home/pi/.octoprint/logs\", \n    \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n    \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n    \"uploads\": \"/home/pi/.octoprint/uploads\", \n    \"watched\": \"/home/pi/.octoprint/watched\"\n  }, \n  \"plugins\": {\n    \"cura\": {\n      \"cura_engine\": \"/usr/local/bin/cura_engine\", \n      \"debug_logging\": false, \n      \"default_profile\": null\n    }, \n    \"discovery\": {\n      \"httpPassword\": null, \n      \"httpUsername\": null, \n      \"model\": {\n        \"description\": null, \n        \"name\": null, \n        \"number\": null, \n        \"serial\": null, \n        \"url\": null, \n        \"vendor\": null, \n        \"vendorUrl\": null\n      }, \n      \"pathPrefix\": null, \n      \"publicHost\": null, \n      \"publicPort\": 80, \n      \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n      \"zeroConf\": []\n    }, \n    \"pluginmanager\": {\n      \"dependency_links\": false, \n      \"hidden\": [], \n      \"pip\": null, \n      \"pip_args\": null, \n      \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n      \"repository_ttl\": 1440\n    }, \n    \"softwareupdate\": {\n      \"cache_ttl\": 1440, \n      \"check_providers\": {}, \n      \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n      \"octoprint_type\": \"github_release\", \n      \"pip_command\": null\n    }\n  }, \n  \"printer\": {\n    \"defaultExtrusionLength\": 5\n  }, \n  \"scripts\": {\n    \"gcode\": {\n      \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n      \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n      \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n    }\n  }, \n  \"serial\": {\n    \"additionalPorts\": [], \n    \"autoconnect\": false, \n    \"baudrate\": null, \n    \"baudrateOptions\": [\n      250000, \n      230400, \n      115200, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"checksumRequiringCommands\": [\n      \"M110\"\n    ], \n    \"disconnectOnErrors\": true, \n    \"helloCommand\": \"M110 N0\", \n    \"ignoreErrorsFromFirmware\": false, \n    \"log\": false, \n    \"longRunningCommands\": [\n      \"G4\", \n      \"G28\", \n      \"G29\", \n      \"G30\", \n      \"G32\", \n      \"M400\", \n      \"M226\"\n    ], \n    \"port\": null, \n    \"portOptions\": [\n      \"VIRTUAL\"\n    ], \n    \"timeoutCommunication\": 30.0, \n    \"timeoutConnection\": 10.0, \n    \"timeoutDetection\": 0.5, \n    \"timeoutSdStatus\": 1.0, \n    \"timeoutTemperature\": 5.0, \n    \"triggerOkForM29\": true\n  }, \n  \"server\": {\n    \"commands\": {\n      \"serverRestartCommand\": \"sudo service octoprint restart\", \n      \"systemRestartCommand\": \"sudo shutdown -r now\", \n      \"systemShutdownCommand\": null\n    }, \n    \"diskspace\": {\n      \"critical\": 209715200, \n      \"warning\": 524288000\n    }\n  }, \n  \"system\": {\n    \"actions\": [\n      {\n        \"action\": \"shutdown\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -h now\", \n        \"confirm\": \"You are about to shutdown the system.\", \n        \"ignore\": true, \n        \"name\": \"Shutdown\"\n      }, \n      {\n        \"action\": \"reboot\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -r now\", \n        \"confirm\": \"You are about to reboot the system\", \n        \"ignore\": true, \n        \"name\": \"Reboot\"\n      }, \n      {\n        \"action\": \"restart\", \n        \"async\": true, \n        \"command\": \"sudo service octoprint restart\", \n        \"confirm\": \"You are about to restart OctoPrint\", \n        \"ignore\": true, \n        \"name\": \"Restart OctoPrint\"\n      }\n    ], \n    \"events\": null\n  }, \n  \"temperature\": {\n    \"cutoff\": 30, \n    \"profiles\": [\n      {\n        \"bed\": 100, \n        \"extruder\": 210, \n        \"name\": \"ABS\"\n      }, \n      {\n        \"bed\": 60, \n        \"extruder\": 180, \n        \"name\": \"PLA\"\n      }\n    ]\n  }, \n  \"terminalFilters\": [\n    {\n      \"name\": \"Suppress M105 requests/responses\", \n      \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n    }, \n    {\n      \"name\": \"Suppress M27 requests/responses\", \n      \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n    }\n  ], \n  \"webcam\": {\n    \"bitrate\": \"5000k\", \n    \"ffmpegPath\": \"/usr/bin/avconv\", \n    \"ffmpegThreads\": 1, \n    \"flipH\": false, \n    \"flipV\": false, \n    \"rotate90\": false, \n    \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n    \"streamUrl\": \"/webcam/?action=stream\", \n    \"watermark\": true\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0"
+          ],
+          "Content-Length": [
+            "5047"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Expires": [
+            "-1"
+          ],
+          "Pragma": [
+            "no-cache"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-IuQ.qfWDMAN8ablLVSwYpb8-VhgTn9E; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/settings"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.8.0"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_all.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_all.json
new file mode 100644
index 0000000..930e4c5
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_all.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T09:37:35",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkXw.YhHVMnjXaiyBD8AOIpcpYYxqqJA; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T09:37:35",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"home\", \"axes\": [\"x\", \"y\", \"z\"]}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "44"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkXw.YhHVMnjXaiyBD8AOIpcpYYxqqJA"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/printhead"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkXw.YhHVMnjXaiyBD8AOIpcpYYxqqJA; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/printhead"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_some.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_some.json
new file mode 100644
index 0000000..f050995
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_home_some.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T09:38:52",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkrA.fevE2K2xK4w9Aikweq7pk8S6row; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T09:38:52",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"home\", \"axes\": [\"x\", \"y\"]}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "39"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkrA.fevE2K2xK4w9Aikweq7pk8S6row"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/printhead"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConkrA.fevE2K2xK4w9Aikweq7pk8S6row; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/printhead"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_info_for_specific_file.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_info_for_specific_file.json
new file mode 100644
index 0000000..7a4dcfb
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_info_for_specific_file.json
@@ -0,0 +1,179 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:00:39",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/files/local/hodorstop.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"date\": 1464620255, \n  \"gcodeAnalysis\": {\n    \"estimatedPrintTime\": 11398.550506420732, \n    \"filament\": {\n      \"tool0\": {\n        \"length\": 8788.88375, \n        \"volume\": 58.05232223829053\n      }\n    }\n  }, \n  \"hash\": \"fe6208411628992f488050bbd7f516c3a480e947\", \n  \"links\": [], \n  \"name\": \"hodorstop.gcode\", \n  \"origin\": \"local\", \n  \"prints\": {\n    \"failure\": 1, \n    \"last\": {\n      \"date\": 1469099651.292224, \n      \"printTime\": 14587.552161931992, \n      \"success\": true\n    }, \n    \"success\": 12\n  }, \n  \"refs\": {\n    \"download\": \"http://printer15.local/downloads/files/local/hodorstop.gcode\", \n    \"resource\": \"http://printer15.local/api/files/local/hodorstop.gcode\"\n  }, \n  \"size\": 5894046, \n  \"statistics\": {\n    \"averagePrintTime\": {\n      \"_default\": 14459.99043494463\n    }, \n    \"lastPrintTime\": {\n      \"_default\": 14587.552161931992\n    }\n  }, \n  \"type\": \"machinecode\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "890"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/files/local/hodorstop.gcode"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:00:39",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:00:39",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/files/local/plate2.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"date\": 1463733114, \n  \"gcodeAnalysis\": {\n    \"estimatedPrintTime\": 3625.7017746005045, \n    \"filament\": {\n      \"tool0\": {\n        \"length\": 1366.44818, \n        \"volume\": 8.717114849239637\n      }\n    }\n  }, \n  \"hash\": \"4515363e527de253dc45101b77639cb3097d30c1\", \n  \"links\": [], \n  \"name\": \"plate2.gcode\", \n  \"origin\": \"local\", \n  \"prints\": {\n    \"failure\": 0, \n    \"last\": {\n      \"date\": 1463738111.306265, \n      \"printTime\": 4454.600942850113, \n      \"success\": true\n    }, \n    \"success\": 1\n  }, \n  \"refs\": {\n    \"download\": \"http://printer15.local/downloads/files/local/plate2.gcode\", \n    \"resource\": \"http://printer15.local/api/files/local/plate2.gcode\"\n  }, \n  \"size\": 1919950, \n  \"statistics\": {\n    \"averagePrintTime\": {\n      \"_default\": 4454.600942850113\n    }, \n    \"lastPrintTime\": {\n      \"_default\": 4454.600942850113\n    }\n  }, \n  \"type\": \"machinecode\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "878"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/files/local/plate2.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_raises_with_bad_auth.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_raises_with_bad_auth.json
new file mode 100644
index 0000000..9722e31
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_raises_with_bad_auth.json
@@ -0,0 +1,61 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:00:38",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "nope"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "Invalid API key"
+        },
+        "headers": {
+          "Content-Length": [
+            "15"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=eyJfaWQiOnsiIGIiOiJaVGMxTkRZNU1XWm1ORE5sTlRFeU1ERmpaVFJsTmpoa1pXTTJNMlUyWVRBPSJ9fQ.CnetBg.vtMrh7AJognkQw0TsmD2_6kM47k; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 401,
+          "message": "UNAUTHORIZED"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_works_with_good_auth.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_works_with_good_auth.json
new file mode 100644
index 0000000..1b8b5cf
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_init_works_with_good_auth.json
@@ -0,0 +1,61 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:00:37",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBQ.2PM6OXJ6FpxqjXufEBpgrdM1yrw; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_jog.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_jog.json
new file mode 100644
index 0000000..7ef3e1a
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_jog.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T09:28:31",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConiPw.DBXfBDlrTQ1UoYomYtFzAsgTTa0; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T09:28:31",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"jog\", \"y\": 20}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "27"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConiPw.DBXfBDlrTQ1UoYomYtFzAsgTTa0"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/printhead"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConiPw.DBXfBDlrTQ1UoYomYtFzAsgTTa0; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/printhead"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_logs.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_logs.json
new file mode 100644
index 0000000..6309fd8
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_logs.json
@@ -0,0 +1,120 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T15:12:59",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne9-w.dLCxuov5BKju3au5ROuBEG0Bynw; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T15:12:59",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne9-w.dLCxuov5BKju3au5ROuBEG0Bynw"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/logs"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"files\": [\n    {\n      \"date\": 1452183342, \n      \"name\": \"octoprint.log.2016-01-07\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-01-07\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-01-07\"\n      }, \n      \"size\": 4661\n    }, \n    {\n      \"date\": 1466871995, \n      \"name\": \"octoprint.log.2016-06-25\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-25\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-25\"\n      }, \n      \"size\": 3922\n    }, \n    {\n      \"date\": 1457028455, \n      \"name\": \"octoprint.log.2016-03-03\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-03\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-03\"\n      }, \n      \"size\": 131\n    }, \n    {\n      \"date\": 1464188895, \n      \"name\": \"octoprint.log.2016-05-25\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-25\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-25\"\n      }, \n      \"size\": 9603\n    }, \n    {\n      \"date\": 1463403811, \n      \"name\": \"octoprint.log.2016-05-16\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-16\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-16\"\n      }, \n      \"size\": 5318\n    }, \n    {\n      \"date\": 1468856189, \n      \"name\": \"octoprint.log.2016-07-18\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-18\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-18\"\n      }, \n      \"size\": 40856\n    }, \n    {\n      \"date\": 1449765091, \n      \"name\": \"octoprint.log.2015-12-10\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-10\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-10\"\n      }, \n      \"size\": 9699\n    }, \n    {\n      \"date\": 1464634834, \n      \"name\": \"octoprint.log.2016-05-30\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-30\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-30\"\n      }, \n      \"size\": 4623\n    }, \n    {\n      \"date\": 1467960900, \n      \"name\": \"octoprint.log.2016-07-07\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-07\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-07\"\n      }, \n      \"size\": 8934\n    }, \n    {\n      \"date\": 1449161140, \n      \"name\": \"octoprint.log.2015-12-03\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-03\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-03\"\n      }, \n      \"size\": 7404\n    }, \n    {\n      \"date\": 1461509346, \n      \"name\": \"octoprint.log.2016-04-24\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-24\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-24\"\n      }, \n      \"size\": 5287\n    }, \n    {\n      \"date\": 1455805987, \n      \"name\": \"octoprint.log.2016-02-18\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-18\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-18\"\n      }, \n      \"size\": 5444\n    }, \n    {\n      \"date\": 1459780076, \n      \"name\": \"octoprint.log.2016-04-04\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-04\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-04\"\n      }, \n      \"size\": 4403\n    }, \n    {\n      \"date\": 1457961905, \n      \"name\": \"octoprint.log.2016-03-13\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-13\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-13\"\n      }, \n      \"size\": 4428\n    }, \n    {\n      \"date\": 1457803483, \n      \"name\": \"octoprint.log.2016-03-11\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-11\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-11\"\n      }, \n      \"size\": 7732\n    }, \n    {\n      \"date\": 1450369885, \n      \"name\": \"octoprint.log.2015-12-17\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-17\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-17\"\n      }, \n      \"size\": 4761\n    }, \n    {\n      \"date\": 1430955047, \n      \"name\": \"plugin_pluginmanager_console.log\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/plugin_pluginmanager_console.log\", \n        \"resource\": \"http://printer15.local/api/logs/plugin_pluginmanager_console.log\"\n      }, \n      \"size\": 0\n    }, \n    {\n      \"date\": 1462785291, \n      \"name\": \"octoprint.log.2016-05-09\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-09\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-09\"\n      }, \n      \"size\": 7176\n    }, \n    {\n      \"date\": 1456932162, \n      \"name\": \"octoprint.log.2016-03-01\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-01\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-01\"\n      }, \n      \"size\": 2913\n    }, \n    {\n      \"date\": 1451992592, \n      \"name\": \"octoprint.log.2016-01-05\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-01-05\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-01-05\"\n      }, \n      \"size\": 9045\n    }, \n    {\n      \"date\": 1469113274, \n      \"name\": \"octoprint.log.2016-07-20\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-20\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-20\"\n      }, \n      \"size\": 2111\n    }, \n    {\n      \"date\": 1457019789, \n      \"name\": \"octoprint.log.2016-03-02\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-02\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-02\"\n      }, \n      \"size\": 2026\n    }, \n    {\n      \"date\": 1464008932, \n      \"name\": \"octoprint.log.2016-05-23\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-23\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-23\"\n      }, \n      \"size\": 17258\n    }, \n    {\n      \"date\": 1464958946, \n      \"name\": \"octoprint.log.2016-06-02\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-02\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-02\"\n      }, \n      \"size\": 8299\n    }, \n    {\n      \"date\": 1466435897, \n      \"name\": \"octoprint.log.2016-06-20\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-20\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-20\"\n      }, \n      \"size\": 3132\n    }, \n    {\n      \"date\": 1460713237, \n      \"name\": \"octoprint.log.2016-04-15\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-15\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-15\"\n      }, \n      \"size\": 1613\n    }, \n    {\n      \"date\": 1450178418, \n      \"name\": \"octoprint.log.2015-12-15\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-15\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-15\"\n      }, \n      \"size\": 8050\n    }, \n    {\n      \"date\": 1468601474, \n      \"name\": \"octoprint.log.2016-07-15\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-15\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-15\"\n      }, \n      \"size\": 5512\n    }, \n    {\n      \"date\": 1448817122, \n      \"name\": \"octoprint.log.2015-11-29\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-11-29\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-11-29\"\n      }, \n      \"size\": 3928\n    }, \n    {\n      \"date\": 1456761793, \n      \"name\": \"octoprint.log.2016-02-29\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-29\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-29\"\n      }, \n      \"size\": 1212\n    }, \n    {\n      \"date\": 1468673024, \n      \"name\": \"octoprint.log.2016-07-16\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-16\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-16\"\n      }, \n      \"size\": 1092\n    }, \n    {\n      \"date\": 1448968659, \n      \"name\": \"octoprint.log.2015-12-01\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-01\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-01\"\n      }, \n      \"size\": 7411\n    }, \n    {\n      \"date\": 1462357573, \n      \"name\": \"octoprint.log.2016-05-04\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-04\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-04\"\n      }, \n      \"size\": 4022\n    }, \n    {\n      \"date\": 1469458785, \n      \"name\": \"octoprint.log\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log\"\n      }, \n      \"size\": 34987\n    }, \n    {\n      \"date\": 1449571322, \n      \"name\": \"octoprint.log.2015-12-08\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-12-08\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-12-08\"\n      }, \n      \"size\": 14509\n    }, \n    {\n      \"date\": 1460617779, \n      \"name\": \"octoprint.log.2016-04-14\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-14\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-14\"\n      }, \n      \"size\": 1880\n    }, \n    {\n      \"date\": 1430955047, \n      \"name\": \"plugin_cura_engine.log\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/plugin_cura_engine.log\", \n        \"resource\": \"http://printer15.local/api/logs/plugin_cura_engine.log\"\n      }, \n      \"size\": 0\n    }, \n    {\n      \"date\": 1463666797, \n      \"name\": \"octoprint.log.2016-05-18\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-18\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-18\"\n      }, \n      \"size\": 2206\n    }, \n    {\n      \"date\": 1455296267, \n      \"name\": \"octoprint.log.2016-02-12\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-12\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-12\"\n      }, \n      \"size\": 4609\n    }, \n    {\n      \"date\": 1468249188, \n      \"name\": \"octoprint.log.2016-07-11\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-11\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-11\"\n      }, \n      \"size\": 5406\n    }, \n    {\n      \"date\": 1465579069, \n      \"name\": \"octoprint.log.2016-06-10\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-10\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-10\"\n      }, \n      \"size\": 3852\n    }, \n    {\n      \"date\": 1461182807, \n      \"name\": \"octoprint.log.2016-04-20\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-20\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-20\"\n      }, \n      \"size\": 4621\n    }, \n    {\n      \"date\": 1461046943, \n      \"name\": \"octoprint.log.2016-04-19\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-19\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-19\"\n      }, \n      \"size\": 1812\n    }, \n    {\n      \"date\": 1468478597, \n      \"name\": \"octoprint.log.2016-07-13\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-13\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-13\"\n      }, \n      \"size\": 5814\n    }, \n    {\n      \"date\": 1467126645, \n      \"name\": \"octoprint.log.2016-06-28\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-28\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-28\"\n      }, \n      \"size\": 13567\n    }, \n    {\n      \"date\": 1457527305, \n      \"name\": \"octoprint.log.2016-03-09\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-09\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-09\"\n      }, \n      \"size\": 1092\n    }, \n    {\n      \"date\": 1469116625, \n      \"name\": \"octoprint.log.2016-07-21\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-21\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-21\"\n      }, \n      \"size\": 103\n    }, \n    {\n      \"date\": 1466607225, \n      \"name\": \"octoprint.log.2016-06-21\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-21\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-21\"\n      }, \n      \"size\": 6104\n    }, \n    {\n      \"date\": 1458141527, \n      \"name\": \"octoprint.log.2016-03-16\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-03-16\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-03-16\"\n      }, \n      \"size\": 1221\n    }, \n    {\n      \"date\": 1463735129, \n      \"name\": \"octoprint.log.2016-05-20\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-05-20\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-05-20\"\n      }, \n      \"size\": 1511\n    }, \n    {\n      \"date\": 1468017273, \n      \"name\": \"octoprint.log.2016-07-08\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-08\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-08\"\n      }, \n      \"size\": 726\n    }, \n    {\n      \"date\": 1455552620, \n      \"name\": \"octoprint.log.2016-02-15\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-02-15\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-02-15\"\n      }, \n      \"size\": 6555\n    }, \n    {\n      \"date\": 1467351966, \n      \"name\": \"octoprint.log.2016-07-01\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-01\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-01\"\n      }, \n      \"size\": 1488\n    }, \n    {\n      \"date\": 1430955026, \n      \"name\": \"serial.log\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/serial.log\", \n        \"resource\": \"http://printer15.local/api/logs/serial.log\"\n      }, \n      \"size\": 0\n    }, \n    {\n      \"date\": 1469293624, \n      \"name\": \"octoprint.log.2016-07-23\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-07-23\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-07-23\"\n      }, \n      \"size\": 4371\n    }, \n    {\n      \"date\": 1466754065, \n      \"name\": \"octoprint.log.2016-06-24\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-24\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-24\"\n      }, \n      \"size\": 10251\n    }, \n    {\n      \"date\": 1430955240, \n      \"name\": \"octoprint.log.2015-05-06\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2015-05-06\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2015-05-06\"\n      }, \n      \"size\": 7764\n    }, \n    {\n      \"date\": 1460385147, \n      \"name\": \"octoprint.log.2016-04-11\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-04-11\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-04-11\"\n      }, \n      \"size\": 6346\n    }, \n    {\n      \"date\": 1465118151, \n      \"name\": \"octoprint.log.2016-06-05\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/logs/octoprint.log.2016-06-05\", \n        \"resource\": \"http://printer15.local/api/logs/octoprint.log.2016-06-05\"\n      }, \n      \"size\": 1508\n    }\n  ], \n  \"free\": 12721905664\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "17384"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne9-w.dLCxuov5BKju3au5ROuBEG0Bynw; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/logs"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_list.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_list.json
new file mode 100644
index 0000000..1d737af
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_list.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T11:46:27",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:46:27",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"commands\": [\"G28 X\", \"G28 Y\"]}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "32"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/command"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/command"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_nl.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_nl.json
new file mode 100644
index 0000000..1d737af
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_multiple_gcode_commands_nl.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T11:46:27",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:46:27",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"commands\": [\"G28 X\", \"G28 Y\"]}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "32"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/command"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/command"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_nonexisting_file_raises.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_nonexisting_file_raises.json
new file mode 100644
index 0000000..a5094a6
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_nonexisting_file_raises.json
@@ -0,0 +1,179 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:00:40",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetBw.2YzLddeZqqAUtFKpiwKOyqz4tYo"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/files/local/nietzsche.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "File not found on 'local': nietzsche.gcode"
+        },
+        "headers": {
+          "Content-Length": [
+            "42"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 404,
+          "message": "NOT FOUND"
+        },
+        "url": "http://printer15.local/api/files/local/nietzsche.gcode"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:00:40",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:00:40",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/files/local/noexist.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "File not found on 'local': noexist.gcode"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 404,
+          "message": "NOT FOUND"
+        },
+        "url": "http://printer15.local/api/files/local/noexist.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer.json
new file mode 100644
index 0000000..f83ff20
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer.json
@@ -0,0 +1,120 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T16:09:08",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfLJA.BMOeOXRLXc0hatn_eHaSDI4bJOc; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:09:08",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfLJA.BMOeOXRLXc0hatn_eHaSDI4bJOc"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"sd\": {\n    \"ready\": false\n  }, \n  \"state\": {\n    \"flags\": {\n      \"closedOrError\": false, \n      \"error\": false, \n      \"operational\": true, \n      \"paused\": false, \n      \"printing\": false, \n      \"ready\": true, \n      \"sdReady\": false\n    }, \n    \"text\": \"Operational\"\n  }, \n  \"temperature\": {\n    \"bed\": {\n      \"actual\": 25.3, \n      \"offset\": 0, \n      \"target\": 0.0\n    }, \n    \"tool0\": {\n      \"actual\": 25.0, \n      \"offset\": 0, \n      \"target\": 0.0\n    }\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "474"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfLJA.BMOeOXRLXc0hatn_eHaSDI4bJOc; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_excluded_stuff.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_excluded_stuff.json
new file mode 100644
index 0000000..c9cc00e
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_excluded_stuff.json
@@ -0,0 +1,533 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T16:35:03",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"sd\": {\n    \"ready\": false\n  }, \n  \"state\": {\n    \"flags\": {\n      \"closedOrError\": false, \n      \"error\": false, \n      \"operational\": true, \n      \"paused\": false, \n      \"printing\": false, \n      \"ready\": true, \n      \"sdReady\": false\n    }, \n    \"text\": \"Operational\"\n  }, \n  \"temperature\": {\n    \"bed\": {\n      \"actual\": 24.7, \n      \"offset\": 0, \n      \"target\": 0.0\n    }, \n    \"tool0\": {\n      \"actual\": 24.3, \n      \"offset\": 0, \n      \"target\": 0.0\n    }\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "474"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:35:03",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?exclude=sd"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"state\": {\n    \"flags\": {\n      \"closedOrError\": false, \n      \"error\": false, \n      \"operational\": true, \n      \"paused\": false, \n      \"printing\": false, \n      \"ready\": true, \n      \"sdReady\": false\n    }, \n    \"text\": \"Operational\"\n  }, \n  \"temperature\": {\n    \"bed\": {\n      \"actual\": 24.7, \n      \"offset\": 0, \n      \"target\": 0.0\n    }, \n    \"tool0\": {\n      \"actual\": 24.3, \n      \"offset\": 0, \n      \"target\": 0.0\n    }\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "439"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?exclude=sd"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:35:03",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?exclude=temperature"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"sd\": {\n    \"ready\": false\n  }, \n  \"state\": {\n    \"flags\": {\n      \"closedOrError\": false, \n      \"error\": false, \n      \"operational\": true, \n      \"paused\": false, \n      \"printing\": false, \n      \"ready\": true, \n      \"sdReady\": false\n    }, \n    \"text\": \"Operational\"\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "281"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?exclude=temperature"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:35:04",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfRNw.nquMHU44BOYxd0KNZoM6xOMBn28"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?exclude=state"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"sd\": {\n    \"ready\": false\n  }, \n  \"temperature\": {\n    \"bed\": {\n      \"actual\": 24.7, \n      \"offset\": 0, \n      \"target\": 0.0\n    }, \n    \"tool0\": {\n      \"actual\": 24.3, \n      \"offset\": 0, \n      \"target\": 0.0\n    }\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "229"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?exclude=state"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:35:04",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?exclude=sd%2Ctemperature"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"state\": {\n    \"flags\": {\n      \"closedOrError\": false, \n      \"error\": false, \n      \"operational\": true, \n      \"paused\": false, \n      \"printing\": false, \n      \"ready\": true, \n      \"sdReady\": false\n    }, \n    \"text\": \"Operational\"\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "246"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?exclude=sd%2Ctemperature"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:35:04",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?exclude=sd%2Cstate"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"temperature\": {\n    \"bed\": {\n      \"actual\": 24.7, \n      \"offset\": 0, \n      \"target\": 0.0\n    }, \n    \"tool0\": {\n      \"actual\": 24.3, \n      \"offset\": 0, \n      \"target\": 0.0\n    }\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "194"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?exclude=sd%2Cstate"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:35:04",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?exclude=temperature%2Cstate"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"sd\": {\n    \"ready\": false\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "36"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?exclude=temperature%2Cstate"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:35:04",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:35:04",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?exclude=sd%2Ctemperature%2Cstate"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{}"
+        },
+        "headers": {
+          "Content-Length": [
+            "2"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfROA.LNniXnp3fbREO1jCMpoNH5iYMaM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?exclude=sd%2Ctemperature%2Cstate"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history.json
new file mode 100644
index 0000000..583c52f
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history.json
@@ -0,0 +1,120 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T16:41:47",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfSyw.cxrHdtC6OZQxmK_q-p_0Hr53f10; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:41:48",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfSyw.cxrHdtC6OZQxmK_q-p_0Hr53f10"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?history=true"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"sd\": {\n    \"ready\": false\n  }, \n  \"state\": {\n    \"flags\": {\n      \"closedOrError\": false, \n      \"error\": false, \n      \"operational\": true, \n      \"paused\": false, \n      \"printing\": false, \n      \"ready\": true, \n      \"sdReady\": false\n    }, \n    \"text\": \"Operational\"\n  }, \n  \"temperature\": {\n    \"bed\": {\n      \"actual\": 24.6, \n      \"offset\": 0, \n      \"target\": 0.0\n    }, \n    \"history\": [\n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463404, \n        \"tool0\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.3, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463409, \n        \"tool0\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463414, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463419, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463424, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463429, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463434, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463439, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463444, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463449, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463454, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463459, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.3, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463464, \n        \"tool0\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463469, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463474, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463479, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463484, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.3, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463489, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463494, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463499, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463504, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.3, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463509, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463514, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463519, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463524, \n        \"tool0\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463529, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463534, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463539, \n        \"tool0\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.3, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463544, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463549, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463554, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463559, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463564, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463569, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463574, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463579, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463584, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463589, \n        \"tool0\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463594, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463599, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.3, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463604, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463609, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463614, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463619, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463624, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463629, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463634, \n        \"tool0\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463639, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463644, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463649, \n        \"tool0\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463654, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463659, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463664, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463670, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463675, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463680, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463685, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463690, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463695, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463700, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463705, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463710, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463715, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463720, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463725, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463730, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463735, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463740, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463745, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463750, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463755, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463760, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463765, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463770, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463775, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463780, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463785, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463790, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463795, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463800, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463805, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463810, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463815, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463820, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463825, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463830, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463835, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463840, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463845, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463850, \n        \"tool0\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463855, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463860, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463865, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463870, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463875, \n        \"tool0\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463880, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463885, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463890, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463895, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463900, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463905, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463910, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463915, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463920, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463925, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463930, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463935, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463940, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463945, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463950, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463955, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463960, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463965, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463970, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463975, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463980, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463985, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463990, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469463995, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464000, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464005, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464010, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464015, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464020, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464025, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464030, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.2, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464035, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464040, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464045, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464050, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464055, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464060, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464065, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464070, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464075, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464080, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464085, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464090, \n        \"tool0\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464095, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464100, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464105, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464111, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464116, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464121, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464126, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464131, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464136, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464141, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464146, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464151, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464156, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464161, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464166, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464171, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464176, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464181, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464186, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464191, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464196, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464201, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464206, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464211, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464216, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464221, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464226, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464231, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464236, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464241, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464246, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464251, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464256, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464261, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464266, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464271, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464276, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464281, \n        \"tool0\": {\n          \"actual\": 23.9, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464286, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464291, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464296, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464301, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464306, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464311, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464316, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464321, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464326, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464331, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464336, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464341, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464346, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464351, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464356, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.1, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464361, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464366, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464381, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464381, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464381, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464386, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464391, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 25.0, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464406, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464406, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464406, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464416, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464416, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464421, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464430, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464431, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464436, \n        \"tool0\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464441, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464449, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464451, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464461, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464466, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464471, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464476, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464481, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464486, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464491, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464496, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464501, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464506, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464511, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464516, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464521, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464526, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464531, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464536, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464541, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464546, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464551, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464556, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464561, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464566, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464571, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464576, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464581, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464586, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464591, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464596, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464601, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.9, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464606, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464611, \n        \"tool0\": {\n          \"actual\": 23.9, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464616, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464621, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464626, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464631, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464636, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464641, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464646, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464651, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464656, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464661, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464666, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464671, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464676, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464681, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464686, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464691, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464696, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464701, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464706, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464711, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464716, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464721, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464726, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464731, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464736, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464741, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464746, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464751, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464756, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464761, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464766, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464771, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464776, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464781, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464786, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464791, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464796, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464801, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464806, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464811, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464816, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464821, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464826, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464831, \n        \"tool0\": {\n          \"actual\": 24.3, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464836, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464841, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464846, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.7, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464851, \n        \"tool0\": {\n          \"actual\": 23.9, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464856, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464861, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.8, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464866, \n        \"tool0\": {\n          \"actual\": 24.0, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464871, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464876, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464882, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.5, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464887, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464892, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464897, \n        \"tool0\": {\n          \"actual\": 24.2, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464902, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.6, \n          \"target\": 0.0\n        }, \n        \"time\": 1469464907, \n        \"tool0\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }\n      }\n    ], \n    \"tool0\": {\n      \"actual\": 24.4, \n      \"offset\": 0, \n      \"target\": 0.0\n    }\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "62597"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfSzA.PZATeEUxLNle5dgBWgc_ueUJSdI; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?history=true"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history_and_limit.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history_and_limit.json
new file mode 100644
index 0000000..cca2498
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_printer_with_history_and_limit.json
@@ -0,0 +1,238 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T16:46:26",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4g.NIXD5ZRzBrRopzrK-CV9irIXr0Q"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?history=true&limit=1"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"sd\": {\n    \"ready\": false\n  }, \n  \"state\": {\n    \"flags\": {\n      \"closedOrError\": false, \n      \"error\": false, \n      \"operational\": true, \n      \"paused\": false, \n      \"printing\": false, \n      \"ready\": true, \n      \"sdReady\": false\n    }, \n    \"text\": \"Operational\"\n  }, \n  \"temperature\": {\n    \"bed\": {\n      \"actual\": 24.4, \n      \"offset\": 0, \n      \"target\": 0.0\n    }, \n    \"history\": [\n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469465182, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }\n    ], \n    \"tool0\": {\n      \"actual\": 24.1, \n      \"offset\": 0, \n      \"target\": 0.0\n    }\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "704"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4g.NIXD5ZRzBrRopzrK-CV9irIXr0Q; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?history=true&limit=1"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:46:27",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4g.NIXD5ZRzBrRopzrK-CV9irIXr0Q"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?history=true&limit=2"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"sd\": {\n    \"ready\": false\n  }, \n  \"state\": {\n    \"flags\": {\n      \"closedOrError\": false, \n      \"error\": false, \n      \"operational\": true, \n      \"paused\": false, \n      \"printing\": false, \n      \"ready\": true, \n      \"sdReady\": false\n    }, \n    \"text\": \"Operational\"\n  }, \n  \"temperature\": {\n    \"bed\": {\n      \"actual\": 24.4, \n      \"offset\": 0, \n      \"target\": 0.0\n    }, \n    \"history\": [\n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469465177, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469465182, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }\n    ], \n    \"tool0\": {\n      \"actual\": 24.1, \n      \"offset\": 0, \n      \"target\": 0.0\n    }\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "911"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4w.aItujrhHT1DNRGTNBVvCqMzZ9DM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?history=true&limit=2"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:46:27",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4w.aItujrhHT1DNRGTNBVvCqMzZ9DM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T16:46:27",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4w.aItujrhHT1DNRGTNBVvCqMzZ9DM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer?history=true&limit=3"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"sd\": {\n    \"ready\": false\n  }, \n  \"state\": {\n    \"flags\": {\n      \"closedOrError\": false, \n      \"error\": false, \n      \"operational\": true, \n      \"paused\": false, \n      \"printing\": false, \n      \"ready\": true, \n      \"sdReady\": false\n    }, \n    \"text\": \"Operational\"\n  }, \n  \"temperature\": {\n    \"bed\": {\n      \"actual\": 24.4, \n      \"offset\": 0, \n      \"target\": 0.0\n    }, \n    \"history\": [\n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469465172, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469465177, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }, \n      {\n        \"bed\": {\n          \"actual\": 24.4, \n          \"target\": 0.0\n        }, \n        \"time\": 1469465182, \n        \"tool0\": {\n          \"actual\": 24.1, \n          \"target\": 0.0\n        }\n      }\n    ], \n    \"tool0\": {\n      \"actual\": 24.1, \n      \"offset\": 0, \n      \"target\": 0.0\n    }\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "1118"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfT4w.aItujrhHT1DNRGTNBVvCqMzZ9DM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer?history=true&limit=3"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_retracting.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_retracting.json
new file mode 100644
index 0000000..040b468
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_retracting.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T10:56:28",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con23A.xYkd8b93Nt1_xv6zYA9tKTF2qTI; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T10:56:28",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"extrude\", \"amount\": -1}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "36"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con23A.xYkd8b93Nt1_xv6zYA9tKTF2qTI"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/tool"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con23A.xYkd8b93Nt1_xv6zYA9tKTF2qTI; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/tool"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_init.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_init.json
new file mode 100644
index 0000000..b8c1eb1
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_init.json
@@ -0,0 +1,188 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T11:21:22",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/sd"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"ready\": false\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "20"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/sd"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:21:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:21:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"init\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "19"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/sd"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/sd"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_refresh.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_refresh.json
new file mode 100644
index 0000000..f3deff8
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_refresh.json
@@ -0,0 +1,188 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T11:21:22",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/sd"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"ready\": false\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "20"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/sd"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:21:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:21:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"refresh\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "22"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/sd"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/sd"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_release.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_release.json
new file mode 100644
index 0000000..4431ffe
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_release.json
@@ -0,0 +1,188 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T11:21:22",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/sd"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"ready\": false\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "20"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con8sg.Cv-7NygyGvfwgiaAcv5GoxJPlb4; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/sd"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:21:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:21:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"release\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "22"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/sd"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con80Q.p1B9W2aIPVSLc2vHn7W3wF9Eybk; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/sd"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_status.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_status.json
new file mode 100644
index 0000000..75f7a00
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_sd_card_status.json
@@ -0,0 +1,120 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T11:23:37",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con9OQ.x34Doiwjk4uUasIOAyxw1sdGmsA; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:23:37",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con9OQ.x34Doiwjk4uUasIOAyxw1sdGmsA"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/sd"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"ready\": false\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "20"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con9OQ.x34Doiwjk4uUasIOAyxw1sdGmsA; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/sd"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_selecting_tool.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_selecting_tool.json
new file mode 100644
index 0000000..fbdc5c5
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_selecting_tool.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T10:50:16",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con1aA.hDZaCZIcQIDiQ0pbq7TWp84ejcs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T10:50:16",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"tool\": \"tool0\", \"command\": \"select\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "38"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con1aA.hDZaCZIcQIDiQ0pbq7TWp84ejcs"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/tool"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con1aA.hDZaCZIcQIDiQ0pbq7TWp84ejcs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/tool"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_offset_to_10.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_offset_to_10.json
new file mode 100644
index 0000000..bbedf8c
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_offset_to_10.json
@@ -0,0 +1,188 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T11:05:23",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con48w.zi6OT1Ff9aihHCuu3LE73bQLRkc; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:05:23",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con48w.zi6OT1Ff9aihHCuu3LE73bQLRkc"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/bed"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"bed\": {\n    \"actual\": 31.3, \n    \"offset\": 10, \n    \"target\": 0.0\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "76"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con48w.zi6OT1Ff9aihHCuu3LE73bQLRkc; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/bed"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:05:24",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"offset\", \"offset\": 0}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "34"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con48w.zi6OT1Ff9aihHCuu3LE73bQLRkc"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/bed"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con49A.G5BaiThIk4LdhuJ1Tb3EEuVJvAg; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/bed"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_temperature_to_100.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_temperature_to_100.json
new file mode 100644
index 0000000..f32cfe1
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_bed_temperature_to_100.json
@@ -0,0 +1,188 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T11:04:38",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con4xg.XxeonICrstGxF8xHv5h72djgbio; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:04:38",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con4xg.XxeonICrstGxF8xHv5h72djgbio"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/bed"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"bed\": {\n    \"actual\": 31.1, \n    \"offset\": 0, \n    \"target\": 100.0\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "77"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con4xg.XxeonICrstGxF8xHv5h72djgbio; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/bed"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:04:38",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"target\", \"target\": 0}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "34"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con4xg.XxeonICrstGxF8xHv5h72djgbio"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/bed"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Con4xg.XxeonICrstGxF8xHv5h72djgbio; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/bed"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_offset_to_20.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_offset_to_20.json
new file mode 100644
index 0000000..108d076
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_offset_to_20.json
@@ -0,0 +1,188 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T10:31:47",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConxEw.cJ4eBDRMhvENoJ4khuCO6y_Hw58"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/tool"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"tool0\": {\n    \"actual\": 25.0, \n    \"offset\": 0, \n    \"target\": 0.0\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "77"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConxEw.cJ4eBDRMhvENoJ4khuCO6y_Hw58; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/tool"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T10:33:03",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConxXw.9npwYu1rF68vpoS4NO8J_Kzh6xs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T10:33:03",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"offsets\": {\"tool0\": 0}, \"command\": \"offset\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "46"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConxXw.9npwYu1rF68vpoS4NO8J_Kzh6xs"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/tool"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConxXw.9npwYu1rF68vpoS4NO8J_Kzh6xs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/tool"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_temperature_to_200.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_temperature_to_200.json
new file mode 100644
index 0000000..c87b578
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_set_tool_temperature_to_200.json
@@ -0,0 +1,188 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T10:21:39",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Conusw.m5AJ1hkWfdcEKEdsotaUNH69vaM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T10:21:39",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Conusw.m5AJ1hkWfdcEKEdsotaUNH69vaM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/tool"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"tool0\": {\n    \"actual\": 28.5, \n    \"offset\": 0, \n    \"target\": 200.0\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "79"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Conusw.m5AJ1hkWfdcEKEdsotaUNH69vaM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/tool"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T10:21:40",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"targets\": {\"tool0\": 0}, \"command\": \"target\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "46"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Conusw.m5AJ1hkWfdcEKEdsotaUNH69vaM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/tool"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.ConutA._K3fZQGvzKtT4fhGgdm-rjdLTgM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/tool"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_single_gcode_command.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_single_gcode_command.json
new file mode 100644
index 0000000..d819995
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_single_gcode_command.json
@@ -0,0 +1,129 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-08-08T11:46:27",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-08-08T11:46:27",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"commands\": [\"G28 X\"]}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "23"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/printer/command"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CooCkw.Z-XzqWJmsH_a5fGr53SqMs4KqRU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/printer/command"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed.json
new file mode 100644
index 0000000..7d82f66
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed.json
@@ -0,0 +1,179 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T17:18:50",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbeg.O38ls6wzmSDAiyKvKSi-cFSQP0M"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/tool"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"tool0\": {\n    \"actual\": 24.0, \n    \"offset\": 0, \n    \"target\": 0.0\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "77"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbeg.O38ls6wzmSDAiyKvKSi-cFSQP0M; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/tool"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T17:18:51",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbew.ZB93J2NOl1PeMqknnsoETAe89-c; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T17:18:51",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbew.ZB93J2NOl1PeMqknnsoETAe89-c"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/bed"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"bed\": {\n    \"actual\": 24.0, \n    \"offset\": 0, \n    \"target\": 0.0\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "75"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbew.ZB93J2NOl1PeMqknnsoETAe89-c; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/bed"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history.json
new file mode 100644
index 0000000..ee13a5b
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history.json
@@ -0,0 +1,179 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T17:18:52",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbew.ZB93J2NOl1PeMqknnsoETAe89-c"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/tool?history=true"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"history\": [\n    {\n      \"time\": 1469465628, \n      \"tool0\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465633, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465638, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465643, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465648, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465653, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465658, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465663, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465668, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465673, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465678, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465683, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465688, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465693, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465698, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465703, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465708, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465713, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465718, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465723, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465728, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465733, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465738, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465743, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465748, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465753, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465758, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465763, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465768, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465773, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465778, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465783, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465788, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465793, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465799, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465804, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465809, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465814, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465819, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465824, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465829, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465834, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465839, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465844, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465849, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465854, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465859, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465864, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465869, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465874, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465879, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465884, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465889, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465894, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465899, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465904, \n      \"tool0\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465909, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465914, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465919, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465924, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465929, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465934, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465939, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465944, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465949, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465954, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465959, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465964, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465969, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465974, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465979, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465984, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465989, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465994, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469465999, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466004, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466009, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466014, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466019, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466024, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466029, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466034, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466039, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466044, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466049, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466054, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466059, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466064, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466069, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466074, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466079, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466084, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466089, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466094, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466099, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466104, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466109, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466114, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466119, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466124, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466129, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466134, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466139, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466144, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466149, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466154, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466159, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466164, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466169, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466174, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466179, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466184, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466189, \n      \"tool0\": {\n        \"actual\": 23.8, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466194, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466199, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466204, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466209, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466214, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466219, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466224, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466229, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466234, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466239, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466244, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466249, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466254, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466260, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466265, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466270, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466275, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466280, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466285, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466290, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466295, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466300, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466305, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466310, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466315, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466320, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466325, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466330, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466335, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466340, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466345, \n      \"tool0\": {\n        \"actual\": 23.8, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466350, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466355, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466360, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466365, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466370, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466375, \n      \"tool0\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466380, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466385, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466390, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466395, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466400, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466405, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466410, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466415, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466420, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466425, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466430, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466435, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466440, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466445, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466450, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466455, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466460, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466465, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466470, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466475, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466480, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466485, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466490, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466495, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466500, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466505, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466510, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466515, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466520, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466525, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466530, \n      \"tool0\": {\n        \"actual\": 23.8, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466535, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466540, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466545, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466550, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466555, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466560, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466565, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466570, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466575, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466580, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466585, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466590, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466595, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466600, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466605, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466610, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466615, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466620, \n      \"tool0\": {\n        \"actual\": 23.8, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466625, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466630, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466635, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466640, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466645, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466650, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466655, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466660, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466665, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466670, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466675, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466680, \n      \"tool0\": {\n        \"actual\": 23.7, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466685, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466690, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466695, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466700, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466705, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466710, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466715, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466721, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466726, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466731, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466736, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466741, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466746, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466751, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466756, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466761, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466766, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466771, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466776, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466781, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466786, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466791, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466796, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466801, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466806, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466811, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466816, \n      \"tool0\": {\n        \"actual\": 23.8, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466821, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466826, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466831, \n      \"tool0\": {\n        \"actual\": 23.8, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466836, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466841, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466846, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466851, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466856, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466861, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466866, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466871, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466876, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466881, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466886, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466891, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466896, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466901, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466906, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466911, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466916, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466921, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466926, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466931, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466936, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466941, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466946, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466951, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466956, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466961, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466966, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466971, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466976, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466981, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466986, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466991, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469466996, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467001, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467006, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467011, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467016, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467021, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467026, \n      \"tool0\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467031, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467036, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467041, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467046, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467051, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467056, \n      \"tool0\": {\n        \"actual\": 23.7, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467061, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467066, \n      \"tool0\": {\n        \"actual\": 23.8, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467071, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467076, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467081, \n      \"tool0\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467086, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467091, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467096, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467101, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467106, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467111, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467116, \n      \"tool0\": {\n        \"actual\": 23.9, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467121, \n      \"tool0\": {\n        \"actual\": 23.8, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467126, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }\n  ], \n  \"tool0\": {\n    \"actual\": 24.0, \n    \"offset\": 0, \n    \"target\": 0.0\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "33996"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfA.8PpxbmED1He0gQyBER7Z7TPRCbg; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/tool?history=true"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T17:18:52",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfA.8PpxbmED1He0gQyBER7Z7TPRCbg; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T17:18:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfA.8PpxbmED1He0gQyBER7Z7TPRCbg"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/bed?history=true"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"bed\": {\n    \"actual\": 24.2, \n    \"offset\": 0, \n    \"target\": 0.0\n  }, \n  \"history\": [\n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465633\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465638\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465643\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465648\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.6, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465653\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465658\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465663\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465668\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465673\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465678\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465683\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465688\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465693\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465698\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465703\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465708\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465713\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465718\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465723\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.6, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465728\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465733\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465738\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465743\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465748\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465753\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465758\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465763\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465768\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465773\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465778\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465783\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465788\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465793\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465799\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.6, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465804\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465809\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465814\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465819\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465824\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465829\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.7, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465834\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465839\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465844\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465849\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465854\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465859\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465864\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465869\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465874\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465879\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465884\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.6, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465889\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.7, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465894\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465899\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465904\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.7, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465909\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465914\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465919\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465924\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465929\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465934\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465939\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.6, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465944\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465949\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465954\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465959\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465964\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465969\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465974\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465979\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465984\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465989\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465994\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469465999\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466004\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466009\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466014\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466019\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466024\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466029\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466034\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466039\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466044\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466049\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466054\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466059\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466064\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.6, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466069\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466074\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466079\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466084\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466089\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466094\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466099\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466104\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466109\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466114\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466119\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466124\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466129\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466134\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466139\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466144\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466149\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466154\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466159\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466164\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466169\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466174\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466179\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466184\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466189\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466194\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466199\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466204\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466209\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466214\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466219\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466224\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466229\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466234\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466239\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466244\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466249\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466254\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466260\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466265\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466270\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466275\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466280\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466285\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466290\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466295\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466300\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466305\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466310\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466315\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466320\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466325\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466330\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466335\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466340\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466345\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466350\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466355\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466360\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466365\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466370\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466375\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466380\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466385\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466390\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466395\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466400\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466405\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466410\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466415\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466420\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466425\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466430\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466435\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466440\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466445\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466450\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466455\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466460\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466465\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466470\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466475\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466480\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466485\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466490\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466495\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466500\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466505\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466510\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466515\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466520\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466525\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.8, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466530\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466535\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466540\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466545\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466550\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466555\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466560\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466565\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466570\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466575\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466580\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466585\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466590\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466595\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466600\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466605\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466610\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466615\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466620\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466625\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466630\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466635\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466640\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466645\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466650\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466655\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466660\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466665\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466670\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466675\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.6, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466680\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466685\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466690\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466695\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466700\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466705\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466710\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466715\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466721\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466726\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466731\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466736\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466741\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466746\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466751\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466756\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466761\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466766\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466771\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466776\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466781\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466786\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466791\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466796\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466801\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466806\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466811\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466816\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466821\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466826\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466831\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466836\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466841\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466846\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466851\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466856\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466861\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466866\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466871\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466876\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466881\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466886\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466891\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466896\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466901\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466906\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466911\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466916\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466921\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466926\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466931\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466936\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466941\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466946\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466951\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466956\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466961\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466966\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466971\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466976\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466981\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466986\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466991\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.1, \n        \"target\": 0.0\n      }, \n      \"time\": 1469466996\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467001\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467006\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467011\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467016\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467021\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467026\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467031\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467036\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467041\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467046\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467051\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467056\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467061\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467066\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467071\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467076\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467081\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467086\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467091\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467096\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467101\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.4, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467106\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467111\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.5, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467116\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467121\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467126\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467131\n    }\n  ]\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "33394"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/bed?history=true"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history_limit.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history_limit.json
new file mode 100644
index 0000000..0932a60
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_tool_and_bed_with_history_limit.json
@@ -0,0 +1,415 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T17:18:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/tool?limit=1&history=true"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"history\": [\n    {\n      \"time\": 1469467131, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }\n  ], \n  \"tool0\": {\n    \"actual\": 24.0, \n    \"offset\": 0, \n    \"target\": 0.0\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "209"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/tool?limit=1&history=true"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T17:18:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/tool?limit=2&history=true"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"history\": [\n    {\n      \"time\": 1469467126, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467131, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }\n  ], \n  \"tool0\": {\n    \"actual\": 24.0, \n    \"offset\": 0, \n    \"target\": 0.0\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "322"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/tool?limit=2&history=true"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T17:18:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/tool?limit=3&history=true"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"history\": [\n    {\n      \"time\": 1469467121, \n      \"tool0\": {\n        \"actual\": 23.8, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467126, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }, \n    {\n      \"time\": 1469467131, \n      \"tool0\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }\n    }\n  ], \n  \"tool0\": {\n    \"actual\": 24.0, \n    \"offset\": 0, \n    \"target\": 0.0\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "435"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/tool?limit=3&history=true"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T17:18:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/bed?limit=1&history=true"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"bed\": {\n    \"actual\": 24.2, \n    \"offset\": 0, \n    \"target\": 0.0\n  }, \n  \"history\": [\n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467131\n    }\n  ]\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "205"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/bed?limit=1&history=true"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T17:18:53",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/bed?limit=2&history=true"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"bed\": {\n    \"actual\": 24.2, \n    \"offset\": 0, \n    \"target\": 0.0\n  }, \n  \"history\": [\n    {\n      \"bed\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467126\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467131\n    }\n  ]\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "316"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnfbfQ.c-Uqht9-R1Sen1afqQIJzcWCFto; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/bed?limit=2&history=true"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T17:18:54",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbfg.xpul46Q5TTYYmiHUHpv78jJdJcw; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T17:18:54",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbfg.xpul46Q5TTYYmiHUHpv78jJdJcw"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/printer/bed?limit=3&history=true"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"bed\": {\n    \"actual\": 24.2, \n    \"offset\": 0, \n    \"target\": 0.0\n  }, \n  \"history\": [\n    {\n      \"bed\": {\n        \"actual\": 24.3, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467121\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.0, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467126\n    }, \n    {\n      \"bed\": {\n        \"actual\": 24.2, \n        \"target\": 0.0\n      }, \n      \"time\": 1469467131\n    }\n  ]\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "427"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cnfbfg.xpul46Q5TTYYmiHUHpv78jJdJcw; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/printer/bed?limit=3&history=true"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_unchanged_settings.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_unchanged_settings.json
new file mode 100644
index 0000000..5254ecb
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_unchanged_settings.json
@@ -0,0 +1,206 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2017-04-24T13:10:11",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.13.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.10\"\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0"
+          ],
+          "Content-Length": [
+            "41"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Expires": [
+            "-1"
+          ],
+          "Pragma": [
+            "no-cache"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Ksw.utn_TNLb4gMtuCpqd-fz0AbuDus; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2017-04-24T13:10:12",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNMjjNzKEwNtwTpLi1OL4rHK1QIAU6EzZA.C9-Ksw.utn_TNLb4gMtuCpqd-fz0AbuDus"
+          ],
+          "User-Agent": [
+            "python-requests/2.13.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/settings"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": {\n    \"allowCrossOrigin\": false, \n    \"enabled\": true, \n    \"key\": \"YouShallNotPass\"\n  }, \n  \"appearance\": {\n    \"color\": \"default\", \n    \"colorTransparent\": false, \n    \"defaultLanguage\": \"_default\", \n    \"name\": \"\"\n  }, \n  \"feature\": {\n    \"alwaysSendChecksum\": false, \n    \"externalHeatupDetection\": true, \n    \"gcodeViewer\": true, \n    \"ignoreIdenticalResends\": false, \n    \"keyboardControl\": true, \n    \"pollWatched\": false, \n    \"repetierTargetTemp\": false, \n    \"sdAlwaysAvailable\": false, \n    \"sdSupport\": true, \n    \"swallowOkAfterResend\": true, \n    \"temperatureGraph\": true, \n    \"waitForStart\": false\n  }, \n  \"folder\": {\n    \"logs\": \"/home/pi/.octoprint/logs\", \n    \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n    \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n    \"uploads\": \"/home/pi/.octoprint/uploads\", \n    \"watched\": \"/home/pi/.octoprint/watched\"\n  }, \n  \"plugins\": {\n    \"cura\": {\n      \"cura_engine\": \"/usr/local/bin/cura_engine\", \n      \"debug_logging\": false, \n      \"default_profile\": null\n    }, \n    \"discovery\": {\n      \"httpPassword\": null, \n      \"httpUsername\": null, \n      \"model\": {\n        \"description\": null, \n        \"name\": null, \n        \"number\": null, \n        \"serial\": null, \n        \"url\": null, \n        \"vendor\": null, \n        \"vendorUrl\": null\n      }, \n      \"pathPrefix\": null, \n      \"publicHost\": null, \n      \"publicPort\": 80, \n      \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n      \"zeroConf\": []\n    }, \n    \"pluginmanager\": {\n      \"dependency_links\": false, \n      \"hidden\": [], \n      \"pip\": null, \n      \"pip_args\": null, \n      \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n      \"repository_ttl\": 1440\n    }, \n    \"softwareupdate\": {\n      \"cache_ttl\": 1440, \n      \"check_providers\": {}, \n      \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n      \"octoprint_type\": \"github_release\", \n      \"pip_command\": null\n    }\n  }, \n  \"printer\": {\n    \"defaultExtrusionLength\": 5\n  }, \n  \"scripts\": {\n    \"gcode\": {\n      \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n      \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n      \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n    }\n  }, \n  \"serial\": {\n    \"additionalPorts\": [], \n    \"autoconnect\": false, \n    \"baudrate\": null, \n    \"baudrateOptions\": [\n      250000, \n      230400, \n      115200, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"checksumRequiringCommands\": [\n      \"M110\"\n    ], \n    \"disconnectOnErrors\": true, \n    \"helloCommand\": \"M110 N0\", \n    \"ignoreErrorsFromFirmware\": false, \n    \"log\": false, \n    \"longRunningCommands\": [\n      \"G4\", \n      \"G28\", \n      \"G29\", \n      \"G30\", \n      \"G32\", \n      \"M400\", \n      \"M226\"\n    ], \n    \"port\": null, \n    \"portOptions\": [\n      \"VIRTUAL\"\n    ], \n    \"timeoutCommunication\": 30.0, \n    \"timeoutConnection\": 10.0, \n    \"timeoutDetection\": 0.5, \n    \"timeoutSdStatus\": 1.0, \n    \"timeoutTemperature\": 5.0, \n    \"triggerOkForM29\": true\n  }, \n  \"server\": {\n    \"commands\": {\n      \"serverRestartCommand\": \"sudo service octoprint restart\", \n      \"systemRestartCommand\": \"sudo shutdown -r now\", \n      \"systemShutdownCommand\": null\n    }, \n    \"diskspace\": {\n      \"critical\": 209715200, \n      \"warning\": 524288000\n    }\n  }, \n  \"system\": {\n    \"actions\": [\n      {\n        \"action\": \"shutdown\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -h now\", \n        \"confirm\": \"You are about to shutdown the system.\", \n        \"ignore\": true, \n        \"name\": \"Shutdown\"\n      }, \n      {\n        \"action\": \"reboot\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -r now\", \n        \"confirm\": \"You are about to reboot the system\", \n        \"ignore\": true, \n        \"name\": \"Reboot\"\n      }, \n      {\n        \"action\": \"restart\", \n        \"async\": true, \n        \"command\": \"sudo service octoprint restart\", \n        \"confirm\": \"You are about to restart OctoPrint\", \n        \"ignore\": true, \n        \"name\": \"Restart OctoPrint\"\n      }\n    ], \n    \"events\": null\n  }, \n  \"temperature\": {\n    \"cutoff\": 30, \n    \"profiles\": [\n      {\n        \"bed\": 100, \n        \"extruder\": 210, \n        \"name\": \"ABS\"\n      }, \n      {\n        \"bed\": 60, \n        \"extruder\": 180, \n        \"name\": \"PLA\"\n      }\n    ]\n  }, \n  \"terminalFilters\": [\n    {\n      \"name\": \"Suppress M105 requests/responses\", \n      \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n    }, \n    {\n      \"name\": \"Suppress M27 requests/responses\", \n      \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n    }\n  ], \n  \"webcam\": {\n    \"bitrate\": \"5000k\", \n    \"ffmpegPath\": \"/usr/bin/avconv\", \n    \"ffmpegThreads\": 1, \n    \"flipH\": false, \n    \"flipV\": false, \n    \"rotate90\": false, \n    \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n    \"streamUrl\": \"/webcam/?action=stream\", \n    \"watermark\": true\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0"
+          ],
+          "Content-Length": [
+            "5047"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Expires": [
+            "-1"
+          ],
+          "Pragma": [
+            "no-cache"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-KtA.72BQAegiL0O76bSyF0xtp6iAGzw; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/settings"
+      }
+    },
+    {
+      "recorded_at": "2017-04-24T13:10:12",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-KtA.72BQAegiL0O76bSyF0xtp6iAGzw"
+          ],
+          "User-Agent": [
+            "python-requests/2.13.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/settings"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": {\n    \"allowCrossOrigin\": false, \n    \"enabled\": true, \n    \"key\": \"YouShallNotPass\"\n  }, \n  \"appearance\": {\n    \"color\": \"default\", \n    \"colorTransparent\": false, \n    \"defaultLanguage\": \"_default\", \n    \"name\": \"\"\n  }, \n  \"feature\": {\n    \"alwaysSendChecksum\": false, \n    \"externalHeatupDetection\": true, \n    \"gcodeViewer\": true, \n    \"ignoreIdenticalResends\": false, \n    \"keyboardControl\": true, \n    \"pollWatched\": false, \n    \"repetierTargetTemp\": false, \n    \"sdAlwaysAvailable\": false, \n    \"sdSupport\": true, \n    \"swallowOkAfterResend\": true, \n    \"temperatureGraph\": true, \n    \"waitForStart\": false\n  }, \n  \"folder\": {\n    \"logs\": \"/home/pi/.octoprint/logs\", \n    \"timelapse\": \"/home/pi/.octoprint/timelapse\", \n    \"timelapseTmp\": \"/home/pi/.octoprint/timelapse/tmp\", \n    \"uploads\": \"/home/pi/.octoprint/uploads\", \n    \"watched\": \"/home/pi/.octoprint/watched\"\n  }, \n  \"plugins\": {\n    \"cura\": {\n      \"cura_engine\": \"/usr/local/bin/cura_engine\", \n      \"debug_logging\": false, \n      \"default_profile\": null\n    }, \n    \"discovery\": {\n      \"httpPassword\": null, \n      \"httpUsername\": null, \n      \"model\": {\n        \"description\": null, \n        \"name\": null, \n        \"number\": null, \n        \"serial\": null, \n        \"url\": null, \n        \"vendor\": null, \n        \"vendorUrl\": null\n      }, \n      \"pathPrefix\": null, \n      \"publicHost\": null, \n      \"publicPort\": 80, \n      \"upnpUuid\": \"eee2d143-7153-4fd9-b7af-e25700bb0519\", \n      \"zeroConf\": []\n    }, \n    \"pluginmanager\": {\n      \"dependency_links\": false, \n      \"hidden\": [], \n      \"pip\": null, \n      \"pip_args\": null, \n      \"repository\": \"http://plugins.octoprint.org/plugins.json\", \n      \"repository_ttl\": 1440\n    }, \n    \"softwareupdate\": {\n      \"cache_ttl\": 1440, \n      \"check_providers\": {}, \n      \"octoprint_checkout_folder\": \"/home/pi/OctoPrint\", \n      \"octoprint_type\": \"github_release\", \n      \"pip_command\": null\n    }\n  }, \n  \"printer\": {\n    \"defaultExtrusionLength\": 5\n  }, \n  \"scripts\": {\n    \"gcode\": {\n      \"afterPrintCancelled\": \"; disable motors\\nM84\\n\\n;disable all heaters\\n{% snippet 'disable_hotends' %}\\n{% snippet 'disable_bed' %}\\n;disable fan\\nM106 S0\", \n      \"snippets/disable_bed\": \"{% if printer_profile.heatedBed %}M140 S0\\n{% endif %}\", \n      \"snippets/disable_hotends\": \"{% for tool in range(printer_profile.extruder.count) %}M104 T{{ tool }} S0\\n{% endfor %}\"\n    }\n  }, \n  \"serial\": {\n    \"additionalPorts\": [], \n    \"autoconnect\": false, \n    \"baudrate\": null, \n    \"baudrateOptions\": [\n      250000, \n      230400, \n      115200, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"checksumRequiringCommands\": [\n      \"M110\"\n    ], \n    \"disconnectOnErrors\": true, \n    \"helloCommand\": \"M110 N0\", \n    \"ignoreErrorsFromFirmware\": false, \n    \"log\": false, \n    \"longRunningCommands\": [\n      \"G4\", \n      \"G28\", \n      \"G29\", \n      \"G30\", \n      \"G32\", \n      \"M400\", \n      \"M226\"\n    ], \n    \"port\": null, \n    \"portOptions\": [\n      \"VIRTUAL\"\n    ], \n    \"timeoutCommunication\": 30.0, \n    \"timeoutConnection\": 10.0, \n    \"timeoutDetection\": 0.5, \n    \"timeoutSdStatus\": 1.0, \n    \"timeoutTemperature\": 5.0, \n    \"triggerOkForM29\": true\n  }, \n  \"server\": {\n    \"commands\": {\n      \"serverRestartCommand\": \"sudo service octoprint restart\", \n      \"systemRestartCommand\": \"sudo shutdown -r now\", \n      \"systemShutdownCommand\": null\n    }, \n    \"diskspace\": {\n      \"critical\": 209715200, \n      \"warning\": 524288000\n    }\n  }, \n  \"system\": {\n    \"actions\": [\n      {\n        \"action\": \"shutdown\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -h now\", \n        \"confirm\": \"You are about to shutdown the system.\", \n        \"ignore\": true, \n        \"name\": \"Shutdown\"\n      }, \n      {\n        \"action\": \"reboot\", \n        \"async\": true, \n        \"command\": \"sudo shutdown -r now\", \n        \"confirm\": \"You are about to reboot the system\", \n        \"ignore\": true, \n        \"name\": \"Reboot\"\n      }, \n      {\n        \"action\": \"restart\", \n        \"async\": true, \n        \"command\": \"sudo service octoprint restart\", \n        \"confirm\": \"You are about to restart OctoPrint\", \n        \"ignore\": true, \n        \"name\": \"Restart OctoPrint\"\n      }\n    ], \n    \"events\": null\n  }, \n  \"temperature\": {\n    \"cutoff\": 30, \n    \"profiles\": [\n      {\n        \"bed\": 100, \n        \"extruder\": 210, \n        \"name\": \"ABS\"\n      }, \n      {\n        \"bed\": 60, \n        \"extruder\": 180, \n        \"name\": \"PLA\"\n      }\n    ]\n  }, \n  \"terminalFilters\": [\n    {\n      \"name\": \"Suppress M105 requests/responses\", \n      \"regex\": \"(Send: M105)|(Recv: ok (B|T\\\\d*):)\"\n    }, \n    {\n      \"name\": \"Suppress M27 requests/responses\", \n      \"regex\": \"(Send: M27)|(Recv: SD printing byte)\"\n    }\n  ], \n  \"webcam\": {\n    \"bitrate\": \"5000k\", \n    \"ffmpegPath\": \"/usr/bin/avconv\", \n    \"ffmpegThreads\": 1, \n    \"flipH\": false, \n    \"flipV\": false, \n    \"rotate90\": false, \n    \"snapshotUrl\": \"http://127.0.0.1:8080/?action=snapshot\", \n    \"streamUrl\": \"/webcam/?action=stream\", \n    \"watermark\": true\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0"
+          ],
+          "Content-Length": [
+            "5047"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Expires": [
+            "-1"
+          ],
+          "Pragma": [
+            "no-cache"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJS8g9xyolydzX2dwk09nf3NfF1DzTxdQHh5IrIkJwM_5DA8qiswApf91BbpVodpcyU1LySzJJKvcTSkoz4ksqCVCWrvNKcHCQZJNOjPMJKkiKywTpLi1OLkG2OMHIrTwy0BcrVAgBgFjO_.C9-KtA.72BQAegiL0O76bSyF0xtp6iAGzw; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/settings"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.8.0"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_print.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_print.json
new file mode 100644
index 0000000..67a70ad
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_print.json
@@ -0,0 +1,312 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:38:22",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne13g.xakIKg5AIeaBcw072fzIYw_Q8_w; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:25",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "--1d01e8af2f2a4c36a5c9daf0e9b9f4da\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\ntrue\r\n--1d01e8af2f2a4c36a5c9daf0e9b9f4da\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--1d01e8af2f2a4c36a5c9daf0e9b9f4da\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--1d01e8af2f2a4c36a5c9daf0e9b9f4da--\r\n"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "375"
+          ],
+          "Content-Type": [
+            "multipart/form-data; boundary=1d01e8af2f2a4c36a5c9daf0e9b9f4da"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne13g.xakIKg5AIeaBcw072fzIYw_Q8_w"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"done\": true, \n  \"files\": {\n    \"local\": {\n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n      }\n    }\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "292"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Location": [
+            "http://printer15.local/api/files/local/homex.gcode"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14Q._w3JupF1JxZoROCmlajduj-Pa0U; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 201,
+          "message": "CREATED"
+        },
+        "url": "http://printer15.local/api/files/local"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:26",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14Q._w3JupF1JxZoROCmlajduj-Pa0U"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/job"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"job\": {\n    \"averagePrintTime\": null, \n    \"estimatedPrintTime\": null, \n    \"filament\": {\n      \"tool0\": {\n        \"length\": 0.0, \n        \"volume\": 0.0\n      }\n    }, \n    \"file\": {\n      \"date\": 1469457505, \n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"size\": 6\n    }, \n    \"lastPrintTime\": null\n  }, \n  \"progress\": {\n    \"completion\": 0, \n    \"filepos\": null, \n    \"printTime\": null, \n    \"printTimeLeft\": null\n  }, \n  \"state\": \"Printing\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "466"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14g.55GD-XopDq4yE2XeosJAmOVE6MU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/job"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:26",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14g.55GD-XopDq4yE2XeosJAmOVE6MU"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"current\": {\n    \"baudrate\": 115200, \n    \"port\": \"/dev/ttyACM0\", \n    \"printerProfile\": \"_default\", \n    \"state\": \"Printing\"\n  }, \n  \"options\": {\n    \"baudratePreference\": 115200, \n    \"baudrates\": [\n      115200, \n      250000, \n      230400, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"portPreference\": \"/dev/ttyACM0\", \n    \"ports\": [\n      \"/dev/ttyACM0\"\n    ], \n    \"printerProfilePreference\": \"_default\", \n    \"printerProfiles\": [\n      {\n        \"id\": \"_default\", \n        \"name\": \"Default\"\n      }\n    ]\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "544"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14g.55GD-XopDq4yE2XeosJAmOVE6MU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:35",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne14g.55GD-XopDq4yE2XeosJAmOVE6MU"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "DELETE",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne16w.3CAf4ALHyg2LCsS0fzxgDOr5A9s; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select.json
new file mode 100644
index 0000000..3ba4ff9
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select.json
@@ -0,0 +1,253 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:38:11",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne10w.6JN82vY9s4DEwBhv1ZDiSsIj1-E; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:15",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "--42a345b6f18843e586dd3cd1102c0705\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--42a345b6f18843e586dd3cd1102c0705\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\ntrue\r\n--42a345b6f18843e586dd3cd1102c0705\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--42a345b6f18843e586dd3cd1102c0705--\r\n"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "375"
+          ],
+          "Content-Type": [
+            "multipart/form-data; boundary=42a345b6f18843e586dd3cd1102c0705"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne10w.6JN82vY9s4DEwBhv1ZDiSsIj1-E"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"done\": true, \n  \"files\": {\n    \"local\": {\n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n      }\n    }\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "292"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Location": [
+            "http://printer15.local/api/files/local/homex.gcode"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne11w.eGdWQySHByYfGx_6kPlR8uzlfec; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 201,
+          "message": "CREATED"
+        },
+        "url": "http://printer15.local/api/files/local"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:16",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne11w.eGdWQySHByYfGx_6kPlR8uzlfec"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/job"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"job\": {\n    \"averagePrintTime\": null, \n    \"estimatedPrintTime\": null, \n    \"filament\": {\n      \"tool0\": {\n        \"length\": 0.0, \n        \"volume\": 0.0\n      }\n    }, \n    \"file\": {\n      \"date\": 1469457494, \n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"size\": 6\n    }, \n    \"lastPrintTime\": null\n  }, \n  \"progress\": {\n    \"completion\": 0, \n    \"filepos\": null, \n    \"printTime\": null, \n    \"printTimeLeft\": null\n  }, \n  \"state\": \"Operational\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "469"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne12A.Ub88CqtTjI9HOqjHGmqyYmGrQ-8; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/job"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:21",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne12A.Ub88CqtTjI9HOqjHGmqyYmGrQ-8"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "DELETE",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne13Q.OIBIN2LRguzmaK1rggKwA80_YlQ; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_and_print_one_by_one.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_and_print_one_by_one.json
new file mode 100644
index 0000000..cffd524
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_and_print_one_by_one.json
@@ -0,0 +1,448 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:46:33",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yQ.CO6cYGdtRY0vmEi5ftp3z6hFWP4; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:46:34",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "--588ffed34f60406bbcfe14d12fadbdd5\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--588ffed34f60406bbcfe14d12fadbdd5\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--588ffed34f60406bbcfe14d12fadbdd5\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--588ffed34f60406bbcfe14d12fadbdd5--\r\n"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "376"
+          ],
+          "Content-Type": [
+            "multipart/form-data; boundary=588ffed34f60406bbcfe14d12fadbdd5"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yQ.CO6cYGdtRY0vmEi5ftp3z6hFWP4"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"done\": true, \n  \"files\": {\n    \"local\": {\n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n      }\n    }\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "292"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Location": [
+            "http://printer15.local/api/files/local/homex.gcode"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yg.BMjc_Rko3d9umK8SSU64a9NJYKA; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 201,
+          "message": "CREATED"
+        },
+        "url": "http://printer15.local/api/files/local"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:46:35",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"select\", \"print\": false}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "37"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yg.BMjc_Rko3d9umK8SSU64a9NJYKA"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:46:35",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/job"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"job\": {\n    \"averagePrintTime\": 0.7757258415222168, \n    \"estimatedPrintTime\": null, \n    \"filament\": {\n      \"tool0\": {\n        \"length\": 0.0, \n        \"volume\": 0.0\n      }\n    }, \n    \"file\": {\n      \"date\": 1469457993, \n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"size\": 6\n    }, \n    \"lastPrintTime\": 0.7757258415222168\n  }, \n  \"progress\": {\n    \"completion\": 0, \n    \"filepos\": null, \n    \"printTime\": null, \n    \"printTimeLeft\": null\n  }, \n  \"state\": \"Operational\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "497"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/job"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:46:35",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"start\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "20"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/job"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/job"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:46:35",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"current\": {\n    \"baudrate\": 115200, \n    \"port\": \"/dev/ttyACM0\", \n    \"printerProfile\": \"_default\", \n    \"state\": \"Printing\"\n  }, \n  \"options\": {\n    \"baudratePreference\": 115200, \n    \"baudrates\": [\n      115200, \n      250000, \n      230400, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"portPreference\": \"/dev/ttyACM0\", \n    \"ports\": [\n      \"/dev/ttyACM0\"\n    ], \n    \"printerProfilePreference\": \"_default\", \n    \"printerProfiles\": [\n      {\n        \"id\": \"_default\", \n        \"name\": \"Default\"\n      }\n    ]\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "544"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:46:44",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne3yw.DU6GRTdZPPmqQefsaCg-bpE0sQs"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "DELETE",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne31A.JV1tQVnVHSLrRbFVNwAcdin_2aU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_one_by_one.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_one_by_one.json
new file mode 100644
index 0000000..a9311fc
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_one_by_one.json
@@ -0,0 +1,321 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:38:36",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne17A.drCeDSGJ8gzAovF5s2YO8xRxruU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:39",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "--e39b7661282146ddb94d0db21d733ddf\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--e39b7661282146ddb94d0db21d733ddf\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--e39b7661282146ddb94d0db21d733ddf\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--e39b7661282146ddb94d0db21d733ddf--\r\n"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "376"
+          ],
+          "Content-Type": [
+            "multipart/form-data; boundary=e39b7661282146ddb94d0db21d733ddf"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne17A.drCeDSGJ8gzAovF5s2YO8xRxruU"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"done\": true, \n  \"files\": {\n    \"local\": {\n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n      }\n    }\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "292"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Location": [
+            "http://printer15.local/api/files/local/homex.gcode"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne17w.cQjh_gr0fbkx--r0omS2WhUkf98; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 201,
+          "message": "CREATED"
+        },
+        "url": "http://printer15.local/api/files/local"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:40",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"print\": false, \"command\": \"select\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "37"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne17w.cQjh_gr0fbkx--r0omS2WhUkf98"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne18A.S4JnJjGmucmplodYUTlp82MEifQ; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:40",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne18A.S4JnJjGmucmplodYUTlp82MEifQ"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/job"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"job\": {\n    \"averagePrintTime\": null, \n    \"estimatedPrintTime\": null, \n    \"filament\": {\n      \"tool0\": {\n        \"length\": 0.0, \n        \"volume\": 0.0\n      }\n    }, \n    \"file\": {\n      \"date\": 1469457519, \n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"size\": 6\n    }, \n    \"lastPrintTime\": null\n  }, \n  \"progress\": {\n    \"completion\": 0, \n    \"filepos\": null, \n    \"printTime\": null, \n    \"printTimeLeft\": null\n  }, \n  \"state\": \"Operational\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "469"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne18A.S4JnJjGmucmplodYUTlp82MEifQ; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/job"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:46",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne18A.S4JnJjGmucmplodYUTlp82MEifQ"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "DELETE",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne19g.ESpKDRc4ZJdJp1-VM7kfamNznOs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_with_print_one_by_one.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_with_print_one_by_one.json
new file mode 100644
index 0000000..e1b1dd2
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_and_select_with_print_one_by_one.json
@@ -0,0 +1,380 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:38:47",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne19w.ROeRU7kblKoSaOq5zJO_r9BtvV8; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:50",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "--83e62c28107c47bcacc2c88c90a69a26\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--83e62c28107c47bcacc2c88c90a69a26\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--83e62c28107c47bcacc2c88c90a69a26\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--83e62c28107c47bcacc2c88c90a69a26--\r\n"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "376"
+          ],
+          "Content-Type": [
+            "multipart/form-data; boundary=83e62c28107c47bcacc2c88c90a69a26"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne19w.ROeRU7kblKoSaOq5zJO_r9BtvV8"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"done\": true, \n  \"files\": {\n    \"local\": {\n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n      }\n    }\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "292"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Location": [
+            "http://printer15.local/api/files/local/homex.gcode"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-g.jLuia-QDhJLhA_Pk0ACosh2P9MA; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 201,
+          "message": "CREATED"
+        },
+        "url": "http://printer15.local/api/files/local"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:51",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"print\": true, \"command\": \"select\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "36"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-g.jLuia-QDhJLhA_Pk0ACosh2P9MA"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-w.P0zJaLc6GQj8TnmN3_s0LozfZk4; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:51",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-w.P0zJaLc6GQj8TnmN3_s0LozfZk4"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/job"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"job\": {\n    \"averagePrintTime\": null, \n    \"estimatedPrintTime\": null, \n    \"filament\": {\n      \"tool0\": {\n        \"length\": 0.0, \n        \"volume\": 0.0\n      }\n    }, \n    \"file\": {\n      \"date\": 1469457530, \n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"size\": 6\n    }, \n    \"lastPrintTime\": null\n  }, \n  \"progress\": {\n    \"completion\": 0, \n    \"filepos\": null, \n    \"printTime\": null, \n    \"printTimeLeft\": null\n  }, \n  \"state\": \"Printing\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "466"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-w.P0zJaLc6GQj8TnmN3_s0LozfZk4; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/job"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:38:52",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1-w.P0zJaLc6GQj8TnmN3_s0LozfZk4"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"current\": {\n    \"baudrate\": 115200, \n    \"port\": \"/dev/ttyACM0\", \n    \"printerProfile\": \"_default\", \n    \"state\": \"Printing\"\n  }, \n  \"options\": {\n    \"baudratePreference\": 115200, \n    \"baudrates\": [\n      115200, \n      250000, \n      230400, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"portPreference\": \"/dev/ttyACM0\", \n    \"ports\": [\n      \"/dev/ttyACM0\"\n    ], \n    \"printerProfilePreference\": \"_default\", \n    \"printerProfiles\": [\n      {\n        \"id\": \"_default\", \n        \"name\": \"Default\"\n      }\n    ]\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "544"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1_A.W0jEGRMySfrGA1G6zp0cE2UDtkw; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:39:01",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne1_A.W0jEGRMySfrGA1G6zp0cE2UDtkw"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "DELETE",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne2BQ.lG4vqMFx9ATMW9FAosVM9ZqhBRM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_by_path.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_by_path.json
new file mode 100644
index 0000000..47ff263
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_by_path.json
@@ -0,0 +1,194 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:00:40",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:00:43",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "--d407144672fe44a3a736a6f97ee68057\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--d407144672fe44a3a736a6f97ee68057\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--d407144672fe44a3a736a6f97ee68057\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--d407144672fe44a3a736a6f97ee68057--\r\n"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "376"
+          ],
+          "Content-Type": [
+            "multipart/form-data; boundary=d407144672fe44a3a736a6f97ee68057"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCA.TBe1_1K2YAix1yWu3G3v-EvfxLE"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"done\": true, \n  \"files\": {\n    \"local\": {\n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n      }\n    }\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "292"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Location": [
+            "http://printer15.local/api/files/local/homex.gcode"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCw.czU7it6CQmlonOqy21on_MdG2Yo; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 201,
+          "message": "CREATED"
+        },
+        "url": "http://printer15.local/api/files/local"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:00:50",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetCw.czU7it6CQmlonOqy21on_MdG2Yo"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "DELETE",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetEg.UtgsVSQVmRFLAjTjpYIMCn5BCzY; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_file_object.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_file_object.json
new file mode 100644
index 0000000..3c7637a
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_file_object.json
@@ -0,0 +1,194 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:00:51",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetEw.DFksf3gKco8qcvCz6zqeX5JPIcM; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:00:54",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "--4e7eb470a1674403a282e31068dd81ab\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--4e7eb470a1674403a282e31068dd81ab\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--4e7eb470a1674403a282e31068dd81ab\r\nContent-Disposition: form-data; name=\"file\"; filename=\"fake.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--4e7eb470a1674403a282e31068dd81ab--\r\n"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "375"
+          ],
+          "Content-Type": [
+            "multipart/form-data; boundary=4e7eb470a1674403a282e31068dd81ab"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetEw.DFksf3gKco8qcvCz6zqeX5JPIcM"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"done\": true, \n  \"files\": {\n    \"local\": {\n      \"name\": \"fake.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/fake.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/fake.gcode\"\n      }\n    }\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "289"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Location": [
+            "http://printer15.local/api/files/local/fake.gcode"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetFg.0pTfIgOyoMM0xAeSbNTwm0vUc9A; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 201,
+          "message": "CREATED"
+        },
+        "url": "http://printer15.local/api/files/local"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:01:00",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetFg.0pTfIgOyoMM0xAeSbNTwm0vUc9A"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "DELETE",
+        "uri": "http://printer15.local/api/files/local/fake.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.CnetHA.FtcpSe5epaicl3Pbb41grNTETPU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/fake.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_cancel.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_cancel.json
new file mode 100644
index 0000000..9591893
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_cancel.json
@@ -0,0 +1,457 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:55:32",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne55A.bLTUpNhN3iLMj73o9RWs2PcolMU; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:55:35",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "--457cf9c4e122464da4ef7b8377f3c15c\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--457cf9c4e122464da4ef7b8377f3c15c\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--457cf9c4e122464da4ef7b8377f3c15c\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--457cf9c4e122464da4ef7b8377f3c15c--\r\n"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "376"
+          ],
+          "Content-Type": [
+            "multipart/form-data; boundary=457cf9c4e122464da4ef7b8377f3c15c"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne55A.bLTUpNhN3iLMj73o9RWs2PcolMU"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"done\": true, \n  \"files\": {\n    \"local\": {\n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n      }\n    }\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "292"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Location": [
+            "http://printer15.local/api/files/local/homex.gcode"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne55w.0iMoi7tFPIavUeLizK8XEhFKjaI; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 201,
+          "message": "CREATED"
+        },
+        "url": "http://printer15.local/api/files/local"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:55:36",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"print\": true, \"command\": \"select\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "36"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne55w.0iMoi7tFPIavUeLizK8XEhFKjaI"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56A.ANvaKY58Uhd9_r0jclerFwiBamE; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:55:37",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"pause\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "20"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56A.ANvaKY58Uhd9_r0jclerFwiBamE"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/job"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56Q.vzJzBjTjlL83C1uknbRvacrIfB0; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/job"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:55:38",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56Q.vzJzBjTjlL83C1uknbRvacrIfB0"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"current\": {\n    \"baudrate\": 115200, \n    \"port\": \"/dev/ttyACM0\", \n    \"printerProfile\": \"_default\", \n    \"state\": \"Paused\"\n  }, \n  \"options\": {\n    \"baudratePreference\": 115200, \n    \"baudrates\": [\n      115200, \n      250000, \n      230400, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"portPreference\": \"/dev/ttyACM0\", \n    \"ports\": [\n      \"/dev/ttyACM0\"\n    ], \n    \"printerProfilePreference\": \"_default\", \n    \"printerProfiles\": [\n      {\n        \"id\": \"_default\", \n        \"name\": \"Default\"\n      }\n    ]\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "542"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56g.Blu8vZC7WPUVEWZma82OaXcx5y0; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:55:45",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"cancel\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "21"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne56g.Blu8vZC7WPUVEWZma82OaXcx5y0"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/job"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne58Q.s0clNUVqv3Nxpjug-3SXO_horj8; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/job"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:55:49",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne58Q.s0clNUVqv3Nxpjug-3SXO_horj8"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "DELETE",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne59Q.K9rWo6Q6TRcVyPuPMrrHZLbjxMs; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_restart.json b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_restart.json
new file mode 100644
index 0000000..ca745a9
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_client.TestClient.test_upload_print_pause_restart.json
@@ -0,0 +1,457 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2016-07-25T14:59:42",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/version"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"api\": \"0.1\", \n  \"server\": \"1.2.2\"\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "40"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne63g.byk8IKEzbAYmD6rrywDI3Uu0quY; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/version"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:59:45",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "--a19568a4e7304093bb9b7d0246f9ba1e\r\nContent-Disposition: form-data; name=\"select\"\r\n\r\nfalse\r\n--a19568a4e7304093bb9b7d0246f9ba1e\r\nContent-Disposition: form-data; name=\"print\"\r\n\r\nfalse\r\n--a19568a4e7304093bb9b7d0246f9ba1e\r\nContent-Disposition: form-data; name=\"file\"; filename=\"homex.gcode\"\r\nContent-Type: application/octet-stream\r\n\r\nG28 X\n\r\n--a19568a4e7304093bb9b7d0246f9ba1e--\r\n"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "376"
+          ],
+          "Content-Type": [
+            "multipart/form-data; boundary=a19568a4e7304093bb9b7d0246f9ba1e"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne63g.byk8IKEzbAYmD6rrywDI3Uu0quY"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"done\": true, \n  \"files\": {\n    \"local\": {\n      \"name\": \"homex.gcode\", \n      \"origin\": \"local\", \n      \"refs\": {\n        \"download\": \"http://printer15.local/downloads/files/local/homex.gcode\", \n        \"resource\": \"http://printer15.local/api/files/local/homex.gcode\"\n      }\n    }\n  }\n}"
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "292"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Location": [
+            "http://printer15.local/api/files/local/homex.gcode"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64Q.q5JCiObvtXxJMyC5gGEEbYAQCgQ; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 201,
+          "message": "CREATED"
+        },
+        "url": "http://printer15.local/api/files/local"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:59:46",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"select\", \"print\": true}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "36"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64Q.q5JCiObvtXxJMyC5gGEEbYAQCgQ"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64g.WvlFo3vPUJLopETogQYZ8bZ7MEw; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:59:47",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"pause\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "20"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64g.WvlFo3vPUJLopETogQYZ8bZ7MEw"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/job"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64w.gzSgliyJvAPdp6V4WzBOw17KfTQ; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/job"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:59:48",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": "{\"command\": \"restart\"}"
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "22"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne64w.gzSgliyJvAPdp6V4WzBOw17KfTQ"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/api/job"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Cache-Control": [
+            "no-cache"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne65A.AcvUhZPhMf0z9WwDBpJ4EAihXFI; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/job"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:59:49",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne65A.AcvUhZPhMf0z9WwDBpJ4EAihXFI"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/api/connection"
+      },
+      "response": {
+        "body": {
+          "encoding": null,
+          "string": "{\n  \"current\": {\n    \"baudrate\": 115200, \n    \"port\": \"/dev/ttyACM0\", \n    \"printerProfile\": \"_default\", \n    \"state\": \"Printing\"\n  }, \n  \"options\": {\n    \"baudratePreference\": 115200, \n    \"baudrates\": [\n      115200, \n      250000, \n      230400, \n      57600, \n      38400, \n      19200, \n      9600\n    ], \n    \"portPreference\": \"/dev/ttyACM0\", \n    \"ports\": [\n      \"/dev/ttyACM0\"\n    ], \n    \"printerProfilePreference\": \"_default\", \n    \"printerProfiles\": [\n      {\n        \"id\": \"_default\", \n        \"name\": \"Default\"\n      }\n    ]\n  }\n}"
+        },
+        "headers": {
+          "Content-Length": [
+            "544"
+          ],
+          "Content-Type": [
+            "application/json"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne65Q.7mkhrzVcqH5xQeNN5Nlv5JBrAt4; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/api/connection"
+      }
+    },
+    {
+      "recorded_at": "2016-07-25T14:59:57",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne65Q.7mkhrzVcqH5xQeNN5Nlv5JBrAt4"
+          ],
+          "User-Agent": [
+            "python-requests/2.10.0"
+          ],
+          "X-Api-Key": [
+            "YouShallNotPass"
+          ]
+        },
+        "method": "DELETE",
+        "uri": "http://printer15.local/api/files/local/homex.gcode"
+      },
+      "response": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Content-Length": [
+            "0"
+          ],
+          "Content-Type": [
+            "text/html; charset=utf-8"
+          ],
+          "Server": [
+            "TornadoServer/4.0.1"
+          ],
+          "Set-Cookie": [
+            "session=.eJyrVopPK0otzlCyKikqTdVRis9MUbKqVlJIUrJSigpJNvRziTT1DY_K9XPxy_ELca30dXHLigoJyvHLysiOCvc18jUKNYoMcbRVqtVRykxJzSvJLKnUSywtyYgvqSxIVbLKK83JQZJBMj3CyK08MdAWrLO0OLUoHqtcLQB_4zOk.Cne67Q.pT3b9_-vIWyJRk8Mc-k6Nf99Zjc; Path=/; HttpOnly"
+          ],
+          "X-Clacks-Overhead": [
+            "GNU Terry Pratchett"
+          ]
+        },
+        "status": {
+          "code": 204,
+          "message": "NO CONTENT"
+        },
+        "url": "http://printer15.local/api/files/local/homex.gcode"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.7.1"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_init_works.json b/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_init_works.json
new file mode 100644
index 0000000..21e7b44
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_init_works.json
@@ -0,0 +1,4 @@
+{
+  "http_interactions": [],
+  "recorded_with": "betamax/0.8.0"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_run.json b/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_run.json
new file mode 100644
index 0000000..1ce6110
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_xhrstreaming.TestXHRStreamingGenerator.test_run.json
@@ -0,0 +1,70 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2017-06-19T12:27:23",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "User-Agent": [
+            "python-requests/2.18.1"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/sockjs/808/jpg9p8o8/xhr_streaming"
+      },
+      "response": {
+        "body": {
+          "encoding": "UTF-8",
+          "string": "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\no\na[{\"connected\":{\"display_version\":\"1.3.4 (master branch)\",\"apikey\":\"2941CCF240F7485DB02E9E2BA2DAA6CC\",\"branch\":\"master\",\"plugin_hash\":\"ad308c01f1f0f19984ef0957d37f93d6\",\"config_hash\":\"fdc2cad85aaca61842657e268e22cd78\",\"version\":\"1.3.4\",\"safe_mode\":false,\"debug\":false}},{\"history\":{\"logs\":[\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: wait\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875102.702454,\"messages\":[\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873303},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873308},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873313},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873318},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873323},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873328},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873333},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873338},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873343},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873348},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873353},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873358},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873363},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873368},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873373},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873378},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873383},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873388},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873394},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873398},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873403},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873408},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873413},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873418},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873423},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873429},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873434},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873439},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873444},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873449},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873454},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873459},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873464},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873469},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873474},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873479},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873484},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873489},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873494},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873499},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873504},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873509},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873514},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873519},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873524},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873529},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873534},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873539},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873544},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873549},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873554},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873559},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873564},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873569},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873574},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873579},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873585},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873590},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873595},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873600},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873605},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873610},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873615},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873620},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873625},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873630},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873635},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873640},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873645},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873650},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873655},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873661},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873665},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873670},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873675},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873680},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873685},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873690},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873695},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873700},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873705},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873710},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873715},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873721},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873726},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873731},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873736},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873741},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873746},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873751},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873756},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873761},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873766},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873771},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873776},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873781},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873786},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873791},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873796},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873801},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873806},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873811},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873816},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873821},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873826},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873831},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873836},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873841},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873846},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873851},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873856},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873862},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873866},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873872},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873877},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873882},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873887},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873892},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873897},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873902},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873907},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873912},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873917},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873922},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873928},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873932},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873937},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873942},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873947},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873952},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873957},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873962},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873967},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873972},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873977},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873982},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873987},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873992},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497873997},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874003},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874008},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874013},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874018},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874023},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874028},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874033},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874038},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874043},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874048},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874053},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874058},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874063},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874068},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874073},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874078},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874083},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874088},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874093},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874098},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874103},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874108},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874113},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874118},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874124},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874129},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874134},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874139},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874144},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874149},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874154},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874159},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874164},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874169},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874174},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874179},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874184},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874189},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874194},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874199},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874204},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874209},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874214},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874219},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874225},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874229},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874234},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874239},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874245},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874250},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874255},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874260},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874265},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874270},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874275},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874280},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874285},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874290},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874296},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874300},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874305},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874310},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874315},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874320},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874325},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874330},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874335},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874341},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874345},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874351},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874356},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874361},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874366},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874371},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874376},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874381},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874386},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874391},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874396},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874401},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874406},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874411},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874416},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874421},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874426},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874431},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874436},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874441},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874446},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874451},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874456},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874461},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874466},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874471},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874477},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874482},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874487},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874492},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874497},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874502},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874507},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874512},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874517},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874522},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874527},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874532},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874537},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874542},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874547},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874552},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874557},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874562},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874567},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874572},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874577},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874582},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874588},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874592},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874597},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874603},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874607},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874613},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874618},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874623},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874628},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874633},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874638},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874643},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874648},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874653},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874658},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874663},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874668},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874673},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874678},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874683},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874688},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874693},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874698},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874703},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874708},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874713},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874718},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874723},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874728},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874733},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874738},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874744},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874749},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874754},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874759},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874764},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874769},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874774},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874779},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874784},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874789},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874794},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874799},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874804},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874809},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874814},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874819},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874824},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874829},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874834},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874839},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874844},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874850},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874854},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874860},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874864},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874870},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874875},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874880},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874885},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874890},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874895},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874900},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874905},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874910},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874915},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874920},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874925},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874930},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874935},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874940},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874945},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874950},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874955},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874960},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874965},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874970},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874976},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874981},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874986},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874991},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497874996},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875001},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875006},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875011},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875016},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875021},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875026},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875031},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875036},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875041},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875046},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875051},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875056},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875061},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875066},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875071},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875076},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875081},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875086},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875092},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875097},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875102}],\"job\":{\"estimatedPrintTime\":null,\"filament\":{\"volume\":null,\"length\":null},\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"lastPrintTime\":null},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTime\":null,\"filepos\":null,\"printTimeLeft\":null}}},{\"timelapse\":null}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875103.209275,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875104.173048,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875105.19827,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875106.172706,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875107.13221,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875107.705543,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875107}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875108.274436,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875109.238744,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875110.214514,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875111.241164,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875112.188711,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875112.760484,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875112}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875113.594738,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875114.269033,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875115.296908,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875116.270578,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875117.242411,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875117.815633,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875117}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875118.38418,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875119.347083,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875120.322718,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875121.349488,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875122.308337,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875123.412593,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875122}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875124.388895,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875125.364566,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875126.390628,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875127.355241,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875127.927633,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875127}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875128.496488,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875129.459696,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875130.435139,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875131.463397,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875132.424045,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875132}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875133.522093,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875134.497798,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875135.526031,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875136.500603,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875137.480965,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875137}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875138.577514,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875139.572539,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875140.538331,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875141.564283,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875142.525021,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875143.099208,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875142}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875143.668057,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875144.632456,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875145.608422,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875146.636189,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875147.597477,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875147}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875148.691342,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875149.673888,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875150.699806,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875151.673749,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875152.641336,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875153.213266,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875152}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875153.78358,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875154.722098,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875155.748177,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875156.775074,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875157.697822,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875158.26914,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875157}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875158.838623,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875159.802726,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875160.777641,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875161.805863,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875162.720756,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875162}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875163.818168,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875164.793859,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875165.820493,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875166.79422,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875167.761197,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875168.332551,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875167}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875168.904326,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875169.865955,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875170.84205,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875171.869197,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875172.83054,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875172}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875173.929143,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875174.908114,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875175.935179,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875176.910966,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875177.874486,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875178.44747,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875177}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875179.01702,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875179.982088,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875180.955812,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875181.985602,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875182.935399,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875183.50862,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875182}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875184.078124,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875185.042946,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875186.0187,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875187.045551,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875187.988832,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875188.560357,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875188}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875189.13028,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875190.042041,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875191.017191,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875192.043991,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875192.999158,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875193.570627,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875193}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875194.14025,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875195.104544,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875196.078404,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875197.106169,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875198.019837,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875198}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875199.114079,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875200.092082,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875201.117969,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875202.094984,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875203.062387,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875203.634013,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875203}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875204.203187,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875205.166913,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875206.141939,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875207.170171,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875208.135707,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875208}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875209.746454,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875210.316844,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875211.207805,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875212.235638,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875213.194559,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875214.242785,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875213}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875215.216986,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875216.246018,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875217.22075,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875218.200885,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875218}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875219.301686,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875220.27824,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875221.307826,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875222.28261,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875223.252498,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875224.356107,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875223}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875225.332783,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875226.359232,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875227.334502,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875228.314641,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875229.365869,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875228}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875230.393713,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875231.421517,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875232.396527,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875233.369133,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875234.471186,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875233}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875235.446076,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875236.47554,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875237.449735,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875238.414022,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497875238.986232,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497875238}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875239.559131,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875240.523782,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875241.497356,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497875242.526022,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497875243.470695,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\n"
+        },
+        "headers": {
+          "Access-Control-Allow-Credentials": [
+            "true"
+          ],
+          "Access-Control-Allow-Origin": [
+            "*"
+          ],
+          "Cache-Control": [
+            "no-store, no-cache, must-revalidate, max-age=0"
+          ],
+          "Content-Type": [
+            "application/javascript; charset=UTF-8"
+          ],
+          "Date": [
+            "Mon, 19 Jun 2017 12:25:02 GMT"
+          ],
+          "Server": [
+            "TornadoServer/4.0.2"
+          ],
+          "Set-Cookie": [
+            "JSESSIONID=dummy; Path=/"
+          ],
+          "Transfer-Encoding": [
+            "chunked"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/sockjs/808/jpg9p8o8/xhr_streaming"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.8.0"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_info.json b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_info.json
new file mode 100644
index 0000000..f77f527
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_info.json
@@ -0,0 +1,67 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2017-06-19T10:36:45",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "User-Agent": [
+            "python-requests/2.18.1"
+          ]
+        },
+        "method": "GET",
+        "uri": "http://printer15.local/sockjs/info"
+      },
+      "response": {
+        "body": {
+          "encoding": "UTF-8",
+          "string": "{\"entropy\":52339962,\"websocket\":true,\"origins\":[\"*:*\"],\"cookie_needed\":true}"
+        },
+        "headers": {
+          "Access-Control-Allow-Credentials": [
+            "true"
+          ],
+          "Access-Control-Allow-Origin": [
+            "*"
+          ],
+          "Cache-Control": [
+            "no-store, no-cache, must-revalidate, max-age=0"
+          ],
+          "Content-Length": [
+            "76"
+          ],
+          "Content-Type": [
+            "application/json; charset=UTF-8"
+          ],
+          "Date": [
+            "Mon, 19 Jun 2017 10:36:45 GMT"
+          ],
+          "Etag": [
+            "\"420ca7534b1993fe2192d744b69f1915c7887ed8\""
+          ],
+          "Server": [
+            "TornadoServer/4.0.2"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/sockjs/info"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.8.0"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_init_works.json b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_init_works.json
new file mode 100644
index 0000000..21e7b44
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_init_works.json
@@ -0,0 +1,4 @@
+{
+  "http_interactions": [],
+  "recorded_with": "betamax/0.8.0"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_readloop.json b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_readloop.json
new file mode 100644
index 0000000..c727c36
--- /dev/null
+++ b/projects/octorest/test/fixtures/cassettes/test_xhrstreaminggenerator.TestXHRStreamingGenerator.test_readloop.json
@@ -0,0 +1,70 @@
+{
+  "http_interactions": [
+    {
+      "recorded_at": "2017-06-19T11:39:30",
+      "request": {
+        "body": {
+          "encoding": "utf-8",
+          "string": ""
+        },
+        "headers": {
+          "Accept": [
+            "*/*"
+          ],
+          "Accept-Encoding": [
+            "gzip, deflate"
+          ],
+          "Connection": [
+            "keep-alive"
+          ],
+          "Content-Length": [
+            "0"
+          ],
+          "User-Agent": [
+            "python-requests/2.18.1"
+          ]
+        },
+        "method": "POST",
+        "uri": "http://printer15.local/sockjs/883/i4hkmifb/xhr_streaming"
+      },
+      "response": {
+        "body": {
+          "encoding": "UTF-8",
+          "string": "hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\no\na[{\"connected\":{\"display_version\":\"1.3.4 (master branch)\",\"apikey\":\"2941CCF240F7485DB02E9E2BA2DAA6CC\",\"branch\":\"master\",\"plugin_hash\":\"ad308c01f1f0f19984ef0957d37f93d6\",\"config_hash\":\"fdc2cad85aaca61842657e268e22cd78\",\"version\":\"1.3.4\",\"safe_mode\":false,\"debug\":false}},{\"history\":{\"logs\":[\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Recv: wait\",\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872237.01958,\"messages\":[\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\",\"wait\",\"wait\",\"wait\",\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870438},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870443},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870448},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870453},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870458},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870463},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870468},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870473},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870478},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870484},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870489},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870494},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870499},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870504},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870509},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870514},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870519},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870524},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870529},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870534},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870539},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870544},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870549},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870554},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870559},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870564},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870569},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870574},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870579},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870584},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870589},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870594},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870599},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870604},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870609},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870614},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870619},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870624},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870629},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870634},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870640},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870644},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870649},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870654},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870659},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870664},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870669},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870675},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870679},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870684},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870689},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870694},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870699},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870704},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870709},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870714},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870719},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870724},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870729},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870734},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870739},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870744},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870749},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870754},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870759},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870764},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870769},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870775},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870780},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870785},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870790},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870795},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870800},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870805},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870810},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870815},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870820},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870825},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870830},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870835},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870840},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870845},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870850},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870855},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870860},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870865},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870870},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870875},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870880},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870885},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870890},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870895},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870900},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870905},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870910},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870915},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870920},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870925},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870930},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870935},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870940},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870945},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870950},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870955},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870960},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870965},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870970},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870975},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870980},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870985},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870990},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497870995},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871001},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871006},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871011},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871016},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871021},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871026},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871031},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871036},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871041},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871046},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871051},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871056},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871061},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871066},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871071},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871076},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871081},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871086},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871091},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871096},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871101},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871106},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871111},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871116},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871121},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871126},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871131},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871136},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871141},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871146},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871151},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871156},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871161},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871166},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871171},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871176},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871181},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871186},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871191},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871196},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871201},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871206},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871211},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871217},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871221},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871226},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871232},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871237},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871242},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871247},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871252},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871257},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871262},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871267},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871272},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871277},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871282},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871287},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871292},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871297},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871302},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871307},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871312},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871317},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871322},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871327},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871332},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871337},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871342},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871347},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871352},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871357},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871362},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871367},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871372},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871377},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871382},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871387},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871392},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871397},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871402},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871407},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871413},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871417},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871422},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871427},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871432},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871437},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871442},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871448},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871453},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871458},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871463},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871468},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871473},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871478},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871483},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871488},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871493},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871498},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871503},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871508},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871513},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871518},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871523},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871528},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871533},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871538},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871543},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871548},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871553},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871558},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871563},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871569},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871573},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871578},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871583},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871588},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871593},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871598},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871603},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871608},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871613},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871618},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871623},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871628},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871633},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871638},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871643},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871648},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871653},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871658},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871663},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871669},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871674},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871679},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871684},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871689},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871694},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871699},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871704},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871709},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871714},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871719},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871724},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871729},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871734},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871739},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871744},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871749},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871754},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871759},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871764},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871770},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871774},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871779},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871784},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871789},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871794},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871799},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871804},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871809},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871814},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871819},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871824},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871829},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871834},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871839},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871844},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871849},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871854},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871859},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871864},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871870},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871874},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871879},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871885},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871890},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871895},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871900},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871905},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871910},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871915},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871920},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871925},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871930},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871935},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871940},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871945},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871950},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871955},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871960},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871965},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871970},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871975},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871980},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871985},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871990},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497871995},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872000},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872005},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872010},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872015},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872020},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872025},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872030},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872036},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872040},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872045},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872050},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872055},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872060},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872065},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872070},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872075},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872080},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872085},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872090},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872095},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872101},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872106},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872111},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872116},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872121},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872126},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872131},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872136},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872141},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872146},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872151},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872156},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872161},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872166},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872171},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872176},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872181},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872186},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872191},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872196},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872201},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872206},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872211},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872216},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872221},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872226},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872231},{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872236}],\"job\":{\"estimatedPrintTime\":null,\"filament\":{\"volume\":null,\"length\":null},\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"lastPrintTime\":null},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTime\":null,\"filepos\":null,\"printTimeLeft\":null}}},{\"event\":{\"type\":\"ClientOpened\",\"payload\":{\"remoteAddress\":\"192.168.23.250\"}}},{\"timelapse\":null}]\na[{\"current\":{\"logs\":[],\"offsets\":{},\"serverTime\":1497872237.233173,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872237.783938,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872238.721544,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872239.726866,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872240.731947,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872241.689296,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872242.245053,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872241}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872242.796125,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872243.758402,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872244.762877,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872245.766363,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872246.697157,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872247.246434,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872246}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872247.798049,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872248.758981,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872249.763715,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872250.76846,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872251.745913,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872251}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872252.817043,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872253.82159,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872254.826865,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872255.780152,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872256.764444,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872257.314604,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872256}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872257.863657,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872258.854999,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872259.860712,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872260.864718,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872261.81734,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872261}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872262.838268,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872263.842885,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872264.847121,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872265.851278,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872266.81213,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[],\"offsets\":{},\"serverTime\":1497872267.36858,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872266}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872267.920082,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872268.897878,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872269.851551,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872270.910919,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872271.843009,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872272.390956,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872271}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872272.94091,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872273.907999,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872274.915073,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872275.922743,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872276.886451,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[],\"offsets\":{},\"serverTime\":1497872277.442136,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872276}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872277.990345,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872278.934107,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872279.938766,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872280.945445,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872281.887638,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872282.437681,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872281}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872282.985501,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872283.980185,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872284.984134,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872285.990831,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872286.924068,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872287.47539,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872286}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872288.022639,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872288.988108,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872289.992168,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872290.996297,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872291.959594,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872292.509724,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872291}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872293.059099,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872294.049781,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872295.05532,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872296.011541,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872297.00824,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872296}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872298.081022,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872299.084421,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872300.088983,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872301.094514,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872302.031167,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872302.580473,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872302}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872303.127895,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872304.090211,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872305.046007,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872306.099515,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872307.057881,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872307}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872308.077412,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872309.082528,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872310.088658,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872311.093672,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872312.051071,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872312.611289,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872312}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872313.159558,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872314.122722,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872315.126853,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872316.081088,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872317.061701,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872317.610152,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872317}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872318.159542,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872319.125584,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872320.129799,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872321.136226,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872322.104993,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[],\"offsets\":{},\"serverTime\":1497872322.659224,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872322}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872323.208375,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872324.172084,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872325.178519,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872326.185852,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872327.135207,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872327.686379,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872327}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872328.234321,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872329.19716,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872330.204223,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872331.210638,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872332.180847,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[],\"offsets\":{},\"serverTime\":1497872332.737785,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872332}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872333.286596,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872334.249859,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872335.254395,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872336.259997,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872337.208619,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872337.760517,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872337}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872338.307877,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872339.271662,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872340.276716,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872341.283529,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872342.245447,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872342.795461,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872342}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872343.344214,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872344.335604,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872345.290996,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872346.345997,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872347.28062,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872347.830343,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872347}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872348.378322,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872349.368242,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872350.373132,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872351.377133,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\",\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872352.324023,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872353.396639,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\",\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872352}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872354.403392,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872355.407436,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872356.412538,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872357.351332,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872357.903648,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872357}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872358.453082,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872359.364055,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872360.369219,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872361.374798,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872362.356544,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872362.909234,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872362}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872363.459419,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872364.41928,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872365.424879,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872366.429375,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Send: M105\"],\"offsets\":{},\"serverTime\":1497872367.362167,\"busyFiles\":[],\"messages\":[],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"offsets\":{},\"serverTime\":1497872367.914945,\"busyFiles\":[],\"messages\":[\"ok T:0.00 /0.00 B:1.00 /1.00 @:64\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[{\"tool0\":{\"actual\":0.0,\"target\":0.0},\"bed\":{\"actual\":1.0,\"target\":1.0},\"time\":1497872367}],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872368.463433,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872369.403415,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\na[{\"current\":{\"logs\":[\"Recv: wait\"],\"offsets\":{},\"serverTime\":1497872370.408677,\"busyFiles\":[],\"messages\":[\"wait\"],\"job\":{\"estimatedPrintTime\":null,\"file\":{\"origin\":null,\"path\":null,\"date\":null,\"name\":null,\"size\":null},\"filament\":{\"volume\":null,\"length\":null},\"lastPrintTime\":null},\"temps\":[],\"state\":{\"text\":\"Operational\",\"flags\":{\"operational\":true,\"paused\":false,\"printing\":false,\"sdReady\":true,\"error\":false,\"ready\":true,\"closedOrError\":false}},\"currentZ\":null,\"progress\":{\"completion\":null,\"printTimeLeft\":null,\"printTime\":null,\"filepos\":null}}}]\n"
+        },
+        "headers": {
+          "Access-Control-Allow-Credentials": [
+            "true"
+          ],
+          "Access-Control-Allow-Origin": [
+            "*"
+          ],
+          "Cache-Control": [
+            "no-store, no-cache, must-revalidate, max-age=0"
+          ],
+          "Content-Type": [
+            "application/javascript; charset=UTF-8"
+          ],
+          "Date": [
+            "Mon, 19 Jun 2017 11:37:16 GMT"
+          ],
+          "Server": [
+            "TornadoServer/4.0.2"
+          ],
+          "Set-Cookie": [
+            "JSESSIONID=dummy; Path=/"
+          ],
+          "Transfer-Encoding": [
+            "chunked"
+          ]
+        },
+        "status": {
+          "code": 200,
+          "message": "OK"
+        },
+        "url": "http://printer15.local/sockjs/883/i4hkmifb/xhr_streaming"
+      }
+    }
+  ],
+  "recorded_with": "betamax/0.8.0"
+}
\ No newline at end of file
diff --git a/projects/octorest/test/test_client.py b/projects/octorest/test/test_client.py
new file mode 100644
index 0000000..45feabb
--- /dev/null
+++ b/projects/octorest/test/test_client.py
@@ -0,0 +1,562 @@
+import time
+import os
+from itertools import chain, combinations
+
+import pytest
+import os
+
+from octorest import OctoRest
+
+from betamax import Betamax
+from betamax_serializers import pretty_json
+
+from _common import URL, APIKEY
+
+with Betamax.configure() as config:
+    config.cassette_library_dir = 'tests/fixtures/cassettes'
+    record_mode = os.environ.get('RECORD', 'none')
+    config.default_cassette_options['record_mode'] = record_mode
+    config.default_cassette_options['match_requests_on'] = {
+        'uri',
+        'method',
+    }
+    Betamax.register_serializer(pretty_json.PrettyJSONSerializer)
+    config.default_cassette_options['serialize_with'] = 'prettyjson'
+
+
+def sleep(seconds):
+    '''
+    If recording, sleep for a given amount of seconds
+    '''
+    # if 'RECORD' in os.environ:
+    time.sleep(seconds)
+
+
+def cmd_wait(client, state):
+    while client.state() == state:
+        sleep(0.1)
+
+
+def cmd_wait_until(client, state):
+    while client.state() != state:
+        sleep(0.1)
+
+
+def subsets(*items):
+    '''
+    Get all possible subsets of something
+    '''
+    N = len(items)+1
+    return chain(*map(lambda x: combinations(items, x), range(0, N)))
+
+
+def zero(component):
+    '''
+    Add a 0 at the end of the component, if it is tool
+    '''
+    return 'tool0' if component == 'tool' else component
+
+
+# @pytest.mark.usefixtures('betamax_session')
+@pytest.fixture
+def client():
+    return OctoRest(url=URL, apikey=APIKEY, session=None)
+
+
+@pytest.fixture
+def gcode():
+    class GCode:
+        def __init__(self, filename):
+            self.filename = filename
+            self.path = 'tests/fixtures/gcodes/{}'.format(filename)
+
+    return GCode('telephonebox.gcode')
+
+
+class TestClient:
+    @pytest.mark.usefixtures('betamax_session')
+    def test_init_works_with_good_auth(self):
+        # Should not raise anything
+        OctoRest(url=URL, apikey=APIKEY)
+
+    @pytest.mark.usefixtures('betamax_session')
+    def test_init_raises_with_bad_auth(self):
+        with pytest.raises(RuntimeError):
+            OctoRest(url=URL, apikey='nope')
+
+    ### VERSION INFORMATION TESTS ###
+
+    def test_version(self, client):
+        version = client.get_version()
+        assert 'api' in version
+        assert 'server' in version
+        assert 'text' in version
+
+    ### FILE OPERATION TESTS ###
+
+    def test_files_contains_files_and_free_space_info(self, client):
+        files = client.files()
+        assert 'bigben.gcode' in [f['name'] for f in files['files']]
+        assert isinstance(files['free'], int)
+
+    def test_files_local_works(self, client):
+        files = client.files('local')
+        assert 'bigben.gcode' in [f['name'] for f in files['files']]
+        assert isinstance(files['free'], int)
+
+    def test_files_sdcard_works(self, client):
+        files = client.files('sdcard')
+        assert files['files'] == []  # no files on sdcard
+        assert 'free' not in files  # API doesn't report that back
+
+    @pytest.mark.parametrize('filename', ('bigben.gcode', 'stpauls.gcode'))
+    def test_info_for_specific_file(self, client, filename):
+        f = client.files(filename)
+        assert f['name'] == filename
+
+    @pytest.mark.parametrize('filename', ('unicorn.gcode', 'yeti.gcode', 'noexist.gcode'))
+    def test_nonexisting_file_raises(self, client, filename):
+        with pytest.raises(RuntimeError):
+            client.files(filename)
+
+    def test_upload_by_path(self, client, gcode):
+        f = client.upload(gcode.path)
+        assert f['done']
+        assert f['files']['local']['name'] == gcode.filename
+        client.delete(gcode.filename)
+
+    def test_upload_file_object(self, client, gcode):
+        with open(gcode.path) as fo:
+            f = client.upload(('fake.gcode', fo))
+        assert f['done']
+        assert f['files']['local']['name'] == 'fake.gcode'
+        client.delete('fake.gcode')
+
+    def test_upload_and_select(self, client, gcode):
+        f = client.upload(gcode.path, select=True)
+        assert f['done']
+        assert f['files']['local']['name'] == gcode.filename
+        selected = client.job_info()['job']['file']['name']
+        assert selected == gcode.filename
+        client.delete(gcode.filename)
+
+    def test_upload_and_print(self, client, gcode):
+        f = client.upload(gcode.path, print=True)
+        sleep(1)
+        assert f['done']
+        assert f['files']['local']['name'] == gcode.filename
+        selected = client.job_info()['job']['file']['name']
+        assert selected == gcode.filename
+        assert client.state() == 'Printing'
+        client.cancel()
+        cmd_wait(client, 'Cancelling')
+        client.delete(gcode.filename)
+
+    def test_upload_and_select_one_by_one(self, client, gcode):
+        client.upload(gcode.path)
+        client.select(gcode.filename)
+        selected = client.job_info()['job']['file']['name']
+        assert selected == gcode.filename
+        client.delete(gcode.filename)
+
+    def test_upload_and_select_with_print_one_by_one(self, client, gcode):
+        client.upload(gcode.path)
+        client.select(gcode.filename, print=True)
+        sleep(1)
+        selected = client.job_info()['job']['file']['name']
+        assert selected == gcode.filename
+        assert client.state() == 'Printing'
+        client.cancel()
+        cmd_wait(client, 'Cancelling')
+        client.delete(gcode.filename)
+
+    def test_upload_and_select_and_print_one_by_one(self, client, gcode):
+        client.upload(gcode.path)
+        client.select(gcode.filename)
+        selected = client.job_info()['job']['file']['name']
+        assert selected == gcode.filename
+        client.start()
+        sleep(1)
+        assert client.state() == 'Printing'
+        client.cancel()
+        cmd_wait(client, 'Cancelling')
+        client.delete(gcode.filename)
+
+    def test_file_copy(self, client, gcode):
+        client.upload(gcode.path)
+        client.copy(gcode.filename, 'copied.gcode')
+        files = client.files()
+        assert gcode.filename in [f['name'] for f in files['files']]
+        assert 'copied.gcode' in [f['name'] for f in files['files']]
+        client.delete(gcode.filename)
+        client.delete('copied.gcode')
+
+    def test_file_copy_exists(self, client, gcode):
+        client.upload(gcode.path)
+        client.copy(gcode.filename, 'copied.gcode')
+        files = client.files()
+        assert gcode.filename in [f['name'] for f in files['files']]
+        assert 'copied.gcode' in [f['name'] for f in files['files']]
+        with pytest.raises(RuntimeError):
+            client.copy(gcode.filename, 'copied.gcode')
+        client.delete(gcode.filename)
+
+    def test_file_copy_folder_not_exist(self, client, gcode):
+        files = client.files()
+        if 'copied.gcode' in [f['name'] for f in files['files']]:
+            client.delete('copied.gcode')
+        client.upload(gcode.path)
+        with pytest.raises(RuntimeError):
+            client.copy(gcode.filename, '/random/path/copied.gcode')
+        client.delete(gcode.filename)
+
+    def test_file_move(self, client, gcode):
+        client.upload(gcode.path)
+        client.move(gcode.filename, 'moved.gcode')
+        files = client.files()
+        assert 'moved.gcode' in [f['name'] for f in files['files']]
+        client.delete('moved.gcode')
+
+    def test_file_move_exists(self, client, gcode):
+        client.upload(gcode.path)
+        client.move(gcode.filename, 'moved.gcode')
+        files = client.files()
+        assert 'moved.gcode' in [f['name'] for f in files['files']]
+        client.upload(gcode.path)
+        with pytest.raises(RuntimeError):
+            client.move(gcode.filename, 'moved.gcode')
+        client.delete(gcode.filename)
+        client.delete('moved.gcode')
+
+    def test_file_move_folder_not_exist(self, client, gcode):
+        client.upload(gcode.path)
+        with pytest.raises(RuntimeError):
+            client.copy(gcode.filename, '/random/path/moved.gcode')
+        client.delete(gcode.filename)
+
+    def test_slice_curalegacy(self, client):
+        client.slice('biscuithelper.STL', slicer='curalegacy')
+        sleep(2)
+        files = client.files()
+        assert 'biscuithelper.gco' in [f['name'] for f in files['files']]
+        client.delete('biscuithelper.gco')
+
+    @pytest.mark.parametrize('name', ('biscuits.gco', 'richtea.gcode'))
+    def test_slice_curalegacy_gcode(self, client, name):
+        client.slice('biscuithelper.STL', slicer='curalegacy', gcode=name)
+        sleep(2)
+        files = client.files()
+        assert name in [f['name'] for f in files['files']]
+        client.delete(name)
+
+    def test_slice_curalegacy_select(self, client):
+        client.slice('biscuithelper.STL', slicer='curalegacy', select=True)
+        sleep(2)
+        files = client.files()
+        assert 'biscuithelper.gco' in [f['name'] for f in files['files']]
+        selected = client.job_info()['job']['file']['name']
+        assert selected == 'biscuithelper.gco'
+        client.delete('biscuithelper.gco')
+
+    def test_upload_print_pause_cancel(self, client, gcode):
+        client.upload(gcode.path)
+        client.select(gcode.filename, print=True)
+        cmd_wait_until(client, 'Printing')
+        client.pause()
+        cmd_wait(client, 'Pausing')
+        assert client.state() == 'Paused'
+        client.cancel()
+        cmd_wait(client, 'Cancelling')
+        client.delete(gcode.filename)
+
+    def test_upload_print_pause_restart(self, client, gcode):
+        client.upload(gcode.path)
+        client.select(gcode.filename, print=True)
+        cmd_wait_until(client, 'Printing')
+        client.pause()
+        cmd_wait_until(client, 'Paused')
+        assert client.state() == 'Paused'
+        client.restart()
+        cmd_wait_until(client, 'Printing')
+        assert client.state() == 'Printing'
+        client.cancel()
+        cmd_wait(client, 'Cancelling')
+        client.delete(gcode.filename)
+
+    def test_upload_print_pause_resume(self, client, gcode):
+        client.upload(gcode.path)
+        client.select(gcode.filename, print=True)
+        cmd_wait_until(client, 'Printing')
+        client.pause()
+        cmd_wait_until(client, 'Paused')
+        assert client.state() == 'Paused'
+        client.resume()
+        cmd_wait_until(client, 'Printing')
+        assert client.state() == 'Printing'
+        client.cancel()
+        cmd_wait(client, 'Cancelling')
+        client.delete(gcode.filename)
+
+    def test_upload_print_toggle(self, client, gcode):
+        client.upload(gcode.path)
+        client.select(gcode.filename, print=True)
+        cmd_wait_until(client, 'Printing')
+        client.toggle()
+        cmd_wait_until(client, 'Paused')
+        assert client.state() == 'Paused'
+        client.cancel()
+        cmd_wait(client, 'Cancelling')
+        client.delete(gcode.filename)
+
+    def test_upload_print_toggle_toggle(self, client, gcode):
+        client.upload(gcode.path)
+        client.select(gcode.filename, print=True)
+        cmd_wait_until(client, 'Printing')
+        client.toggle()
+        cmd_wait_until(client, 'Paused')
+        assert client.state() == 'Paused'
+        client.toggle()
+        cmd_wait_until(client, 'Printing')
+        assert client.state() == 'Printing'
+        client.cancel()
+        cmd_wait(client, 'Cancelling')
+        client.delete(gcode.filename)
+
+    def test_logs(self, client):
+        logs = client.logs()
+        assert 'files' in logs
+        assert 'free' in logs
+        assert isinstance(logs['free'], int)
+
+    def test_delete_log(self, client):
+        logs = client.logs()
+        log_lst = [log['name'] for log in logs['files']]
+        assert log_lst[0] in log_lst
+        client.delete_log(log_lst[0])
+        logs = client.logs()
+        for log in logs['files']:
+            assert log['name'] != log_lst[0]
+
+    def test_printer(self, client):
+        printer = client.printer()
+        assert 'ready' in printer['sd']
+        assert printer['state']['flags']['operational']
+        assert printer['state']['flags']['ready']
+        assert not printer['state']['flags']['error']
+        assert not printer['state']['flags']['printing']
+
+    def test_printer_temps(self, client):
+        printer = client.printer()
+        cmd_wait_until(client, 'Operational')
+        assert 'bed' in printer['temperature']
+        assert 'tool0' in printer['temperature']
+        assert 'history' not in printer['temperature']
+
+    @pytest.mark.parametrize('exclude', subsets('sd', 'temperature', 'state'))
+    def test_printer_with_excluded_stuff(self, client, exclude):
+        printer = client.printer(exclude=exclude)
+        for key in exclude:
+            assert key not in printer
+        assert len(printer) == 3 - len(exclude)
+
+    def test_printer_with_history(self, client):
+        printer = client.printer(history=True)
+        assert isinstance(printer['temperature']['history'], list)
+
+    @pytest.mark.parametrize('limit', range(1, 4))
+    def test_printer_with_history_and_limit(self, client, limit):
+        printer = client.printer(history=True, limit=limit)
+        assert len(printer['temperature']['history']) == limit
+
+    @pytest.mark.parametrize('key', ('actual', 'target', 'offset'))
+    @pytest.mark.parametrize('component', ('tool', 'bed'))
+    def test_tool_and_bed(self, client, key, component):
+        info = getattr(client, component)()  # client.tool() or bed()
+        assert 'history' not in info
+        assert isinstance(info[zero(component)][key], (float, int))
+
+    # @pytest.mark.parametrize('key', ('actual', 'target'))
+    # @pytest.mark.parametrize('component', ('tool', 'bed'))
+    # def test_tool_and_bed_with_history(self, client, key, component):
+    #     # TODO: history is not working with bed or tool, only printer
+    #     info = getattr(client, component)(history=True)
+    #     assert 'history' in info
+    #     for h in info['history']:
+    #         assert isinstance(h[zero(component)][key], (float, int))
+
+    # @pytest.mark.parametrize('limit', range(1, 4))
+    # @pytest.mark.parametrize('component', ('tool', 'bed'))
+    # def test_tool_and_bed_with_history_limit(self, client, limit, component):
+    #     # TODO: history is not working with bed or tool, only printer
+    #     info = getattr(client, component)(history=True, limit=limit)
+    #     assert len(info['history']) == limit
+
+    def test_home_all(self, client):
+        # we are only testing if no exception occurred, there's no return
+        client.home()
+
+    @pytest.mark.parametrize('axes', (('x',), ('y',), ('z',), ('x', 'y',)))
+    def test_home_some(self, client, axes):
+        # we are only testing if no exception occurred, there's no return
+        client.home(axes)
+
+    @pytest.mark.parametrize('coordinates', ((20, 0, 0), (0, 20, 0)))
+    def test_jog(self, client, coordinates):
+        # we are only testing if no exception occurred, there's no return
+        client.jog(*coordinates)
+
+    @pytest.mark.parametrize('factor', (100, 50, 150, 0.5, 1.0))
+    def test_feedrate(self, client, factor):
+        # we are only testing if no exception occurred, there's no return
+        client.feedrate(factor)
+
+    @pytest.mark.parametrize('how', (200, [200], {'tool0': 200}))
+    def test_set_tool_temperature_to_200(self, client, how):
+        client.tool_target(how)
+        tool = client.tool()
+        assert tool['tool0']['target'] == 200.0
+        if 'RECORD' in os.environ:
+            # Betamax had some problems here
+            # And we don't do this for testing, but only with actual printer
+            client.tool_target(0)
+
+    # @pytest.mark.parametrize('how', (20, [20], {'tool0': 20}))
+    # def test_set_tool_offset_to_20(self, client, how):
+    #     client.tool_offset(how)
+    #     tool = client.tool()
+    #     print(tool)
+    #     assert tool['tool0']['offset'] == 20.0
+    #     # TODO: make the above assert work?
+    #     if 'RECORD' in os.environ:
+    #         client.tool_offset(0)
+
+    def test_selecting_tool(self, client):
+        # we are only testing if no exception occurred, there's no return
+        client.tool_select(0)
+
+    def test_extruding(self, client):
+        # we are only testing if no exception occurred, there's no return
+        client.extrude(1)
+
+    def test_retracting(self, client):
+        # we are only testing if no exception occurred, there's no return
+        client.retract(1)
+
+    @pytest.mark.parametrize('factor', (100, 75, 125, 0.75, 1.0))
+    def test_flowrate(self, client, factor):
+        # we are only testing if no exception occurred, there's no return
+        client.flowrate(factor)
+
+    def test_set_bed_temperature_to_100(self, client):
+        client.bed_target(100)
+        bed = client.bed()
+        assert bed['bed']['target'] == 100.0
+        if 'RECORD' in os.environ:
+            client.bed_target(0)
+
+    def test_set_bed_offset_to_10(self, client):
+        client.bed_offset(10)
+        bed = client.bed()
+        assert bed['bed']['offset'] == 10.0
+        if 'RECORD' in os.environ:
+            client.bed_offset(0)
+
+    def test_sd_card_init(self, client):
+        client.sd_init()
+
+    def test_sd_card_refresh(self, client):
+        client.sd_refresh()
+
+    def test_sd_card_release(self, client):
+        client.sd_release()
+
+    def test_sd_card_status(self, client):
+        sd = client.sd()
+        # no SD card here, so always not ready
+        assert sd['ready'] is False
+
+    def test_single_gcode_command(self, client):
+        client.gcode('G28 X')
+
+    def test_multiple_gcode_commands_nl(self, client):
+        client.gcode('G28 X\nG28 Y')
+
+    def test_multiple_gcode_commands_list(self, client):
+        client.gcode(['G28 X', 'G28 Y'])
+
+    def test_get_settings(self, client):
+        settings = client.settings()
+        assert 'api' in settings
+        assert 'appearance' in settings
+
+    def test_unchanged_settings(self, client):
+        settings = client.settings()
+        new_settings = client.settings({})
+        assert settings['api'] == new_settings['api']
+        assert settings['appearance'] == new_settings['appearance']
+
+    def test_change_settings(self, client):
+        settings = client.settings()
+        printer_name = settings['appearance']['name']
+        test_name = {'appearance': {'name': 'Gandalf'}}
+        new_settings = client.settings(test_name)
+        assert new_settings['appearance']['name'] == 'Gandalf'
+        client.settings({'appearance': {'name': printer_name}})
+
+    # def test_tmp_session_key(self, client):
+    #     key = client.tmp_session_key()
+    #     print(key)
+
+    def test_users(self, client):
+        users = client.users()
+        assert 'users' in users
+
+    ### CONNECTION HANDLING TESTS ###
+
+    def test_connection_info(self, client):
+        info = client.connection_info()
+
+        assert 'current' in info
+        assert 'baudrate' in info['current']
+        assert 'port' in info['current']
+        assert 'state' in info['current']
+
+        assert 'options' in info
+        assert 'baudrates' in info['options']
+        assert 'ports' in info['options']
+
+    def test_fake_ack(self, client):
+        # we are only testing if no exception occurred, there's no return
+        client.fake_ack()
+
+    def test_disconnect(self, client):
+        client.disconnect()
+        assert client.state() in ['Offline', 'Closed']
+
+    def test_connect(self, client):
+        '''
+        Since it's hard with betamax fixture to check state() multiple times
+        in one test, this test hopes test_disconnect() was called before it.
+        It is not possible to run it without it in record mode.
+        TODO: Fix this
+        '''
+        client.connect()
+        cmd_wait(client, 'Detecting baudrate')
+        assert client.state() in ['Connecting',
+                                  'Operational',
+                                  'Opening serial port']
+        client.disconnect()
+        assert client.state() in ['Offline', 'Closed']
+
+
+# import json
+# client = OctoRest(url=URL, apikey=APIKEY)
+# client.new_folder('hello')
+# f = client.files(recursive=False)
+# print(json.dumps(f, indent=4))
+# g = client.files(recursive=True)
+# print(json.dumps(f, indent=4))
+# print(f == g)
+# print(client.version)
+# client.gcode("M106")
+# client.gcode("M106 \n G28 X Y Z \n M107")
diff --git a/projects/octorest/test/test_xhrstreaming.py b/projects/octorest/test/test_xhrstreaming.py
new file mode 100644
index 0000000..33f60ed
--- /dev/null
+++ b/projects/octorest/test/test_xhrstreaming.py
@@ -0,0 +1,37 @@
+import pytest
+
+from octorest import XHRStreamingEventHandler
+
+from _common import URL
+
+
+def on_message(api, message):
+    api.message = message
+    raise RuntimeError
+
+
+@pytest.mark.usefixtures('betamax_recorder')
+@pytest.fixture
+def client(betamax_recorder):
+    betamax_recorder.current_cassette.match_options.remove('uri')
+    session = betamax_recorder.session
+    return XHRStreamingEventHandler(url=URL,
+                                    session=session,
+                                    on_message=on_message)
+
+
+class TestXHRStreamingGenerator:
+    @pytest.mark.usefixtures('betamax_session')
+    def test_init_works(self, betamax_session):
+        XHRStreamingEventHandler(url=URL, session=betamax_session)
+
+    @pytest.mark.xfail(reason="OctoPrint\'s tornado server returns 404")
+    def test_send(self, client):
+        r = client.send({"throttle": 10})
+        assert r.status_code in [200, 204]
+
+    def test_run(self, client):
+        client.run()
+        assert client.thread.is_alive()
+        client.wait()
+        assert client.message.get("connected", None)
diff --git a/projects/octorest/test/test_xhrstreaminggenerator.py b/projects/octorest/test/test_xhrstreaminggenerator.py
new file mode 100644
index 0000000..bbac85e
--- /dev/null
+++ b/projects/octorest/test/test_xhrstreaminggenerator.py
@@ -0,0 +1,32 @@
+import pytest
+
+from octorest import XHRStreamingGenerator
+
+from _common import URL
+
+
+@pytest.mark.usefixtures('betamax_recorder')
+@pytest.fixture
+def client(betamax_recorder):
+    betamax_recorder.current_cassette.match_options.remove('uri')
+    session = betamax_recorder.session
+    return XHRStreamingGenerator(url=URL, session=session)
+
+
+class TestXHRStreamingGenerator:
+    @pytest.mark.usefixtures('betamax_session')
+    def test_init_works(self, betamax_session):
+        XHRStreamingGenerator(url=URL, session=betamax_session)
+
+    def test_info(self, client):
+        response = client.info()
+        assert response.get("websocket", None) is not None
+
+    @pytest.mark.xfail(reason="OctoPrints tornado server returns 404")
+    def test_send(self, client):
+        r = client.send({"throttle": 10})
+        assert r.status_code in [200, 204]
+
+    def test_readloop(self, client):
+        generator = client.read_loop()
+        assert next(generator).get("connected", None)