diff --git a/mysensors/__init__.py b/mysensors/__init__.py
index f57486b..784f988 100644
--- a/mysensors/__init__.py
+++ b/mysensors/__init__.py
@@ -49,7 +49,7 @@ class Gateway(object):
         self.metric = True  # if true - use metric, if false - use imperial
         if persistence:
             self.persistence = Persistence(
-                self.sensors, persistence_file, persistence_scheduler)
+                self.sensors, persistence_scheduler, persistence_file)
         else:
             self.persistence = None
         self.protocol_version = safe_is_version(protocol_version)
@@ -351,7 +351,8 @@ class ThreadingGateway(Gateway):
 
     def __init__(self, *args, **kwargs):
         """Set up gateway instance."""
-        super().__init__(*args, **kwargs)
+        super().__init__(
+            *args, persistence_scheduler=self._create_scheduler, **kwargs)
         self.lock = threading.Lock()
         self._stop_event = threading.Event()
         self._cancel_save = None
@@ -373,12 +374,22 @@ class ThreadingGateway(Gateway):
                 continue
             time.sleep(0.02)
 
+    def _create_scheduler(self, save_sensors):
+        """Return function to schedule saving sensors."""
+        def schedule_save():
+            """Save sensors and schedule a new save."""
+            save_sensors()
+            scheduler = threading.Timer(10.0, schedule_save)
+            scheduler.start()
+            self._cancel_save = scheduler.cancel
+        return schedule_save
+
     def start_persistence(self):
         """Load persistence file and schedule saving of persistence file."""
         if not self.persistence:
             return
         self.persistence.safe_load_sensors()
-        self._cancel_save = self.persistence.schedule_save_sensors()
+        self.persistence.schedule_save_sensors()
 
     def stop(self):
         """Stop the background thread."""
@@ -494,7 +505,7 @@ class BaseAsyncGateway(BaseTransportGateway):
         """Return function to schedule saving sensors."""
         @asyncio.coroutine
         def schedule_save():
-            """Return a function to cancel the schedule."""
+            """Save sensors and schedule a new save."""
             yield from self.loop.run_in_executor(None, save_sensors)
             callback = partial(
                 ensure_future, schedule_save(), loop=self.loop)
diff --git a/mysensors/persistence.py b/mysensors/persistence.py
index 5dd4b57..efb2e6c 100644
--- a/mysensors/persistence.py
+++ b/mysensors/persistence.py
@@ -3,35 +3,21 @@ import json
 import logging
 import os
 import pickle
-import threading
 
 from .sensor import ChildSensor, Sensor
 
 _LOGGER = logging.getLogger(__name__)
 
 
-def create_scheduler(save_sensors):
-    """Return function to schedule saving sensors."""
-    def schedule_save():
-        """Return a function to cancel the schedule."""
-        save_sensors()
-        scheduler = threading.Timer(10.0, schedule_save)
-        scheduler.start()
-        return scheduler.cancel
-    return schedule_save
-
-
 class Persistence(object):
     """Organize persistence file saving and loading."""
 
     def __init__(
-            self, sensors, persistence_file='mysensors.pickle',
-            schedule_factory=None):
+            self, sensors, schedule_factory,
+            persistence_file='mysensors.pickle'):
         """Set up Persistence instance."""
         self.persistence_file = persistence_file
         self.persistence_bak = '{}.bak'.format(self.persistence_file)
-        if schedule_factory is None:
-            schedule_factory = create_scheduler
         self.schedule_save_sensors = schedule_factory(self.save_sensors)
         self._sensors = sensors
         self.need_save = True

Main program does not exit cleanly
[branch master - version 0.14.0 - Using serial gateway - NO asyncio]
After calling the SerialGateway.stop() method the program does not return to console but seems to be looping in a still alive thread ( probably the persistence thread).

************************************************************************************
```py
MYSGW_Serial_Port = '/dev/ttyMSGW'
....
GATEWAY = mysensors.SerialGateway(
MYSGW_Serial_Port, event_callback=event, persistence=True,
persistence_file='./mysensors.json', protocol_version='2.0', baud=115200,
timeout=1.0, reconnect_timeout=10.0)
GATEWAY.start_persistence()
GATEWAY.start()
....
....
GATEWAY.stop() #-> main thread does not go past this point
exit(0)
```
*************************************************************************************
diff --git a/tests/test_gateway_mqtt.py b/tests/test_gateway_mqtt.py
index cba4270..60700fa 100644
--- a/tests/test_gateway_mqtt.py
+++ b/tests/test_gateway_mqtt.py
@@ -143,11 +143,10 @@ def test_subscribe_error(gateway, add_sensor, mock_sub, caplog):
 def test_start_stop_gateway(
         mock_save, mock_load, gateway, add_sensor, mock_pub, mock_sub):
     """Test start and stop of MQTT gateway."""
-    gateway.persistence = Persistence(gateway.sensors)
-    mock_cancel_save = mock.MagicMock()
+    mock_schedule_factory = mock.MagicMock()
     mock_schedule_save = mock.MagicMock()
-    mock_schedule_save.return_value = mock_cancel_save
-    gateway.persistence.schedule_save_sensors = mock_schedule_save
+    mock_schedule_factory.return_value = mock_schedule_save
+    gateway.persistence = Persistence(gateway.sensors, mock_schedule_factory)
     sensor = add_sensor(1)
     sensor.add_child_sensor(1, gateway.const.Presentation.S_HUM)
     sensor.children[1].values[gateway.const.SetReq.V_HUM] = '20'
@@ -173,7 +172,6 @@ def test_start_stop_gateway(
     assert mock_pub.call_count == 2
     assert mock_pub.mock_calls == calls
     gateway.stop()
-    assert mock_cancel_save.call_count == 1
     assert mock_save.call_count == 1
 
 
@@ -185,7 +183,7 @@ def test_mqtt_load_persistence(gateway, add_sensor, mock_sub, tmpdir):
 
     persistence_file = tmpdir.join('file.json')
     gateway.persistence = Persistence(
-        gateway.sensors, persistence_file.strpath)
+        gateway.sensors, mock.MagicMock(), persistence_file.strpath)
     gateway.persistence.save_sensors()
     del gateway.sensors[1]
     assert 1 not in gateway.sensors
diff --git a/tests/test_mysensors.py b/tests/test_mysensors.py
index 403ce9d..3a6c9c8 100644
--- a/tests/test_mysensors.py
+++ b/tests/test_mysensors.py
@@ -613,6 +613,28 @@ def test_gateway_low_protocol():
     assert gateway.protocol_version == '1.4'
 
 
+@mock.patch('mysensors.persistence.Persistence.save_sensors')
+@mock.patch('mysensors.threading.Timer')
+def test_threading_persistence(mock_timer_class, mock_save_sensors):
+    """Test schedule persistence on threading gateway."""
+    mock_timer_1 = mock.MagicMock()
+    mock_timer_2 = mock.MagicMock()
+    mock_timer_class.side_effect = [mock_timer_1, mock_timer_2]
+    gateway = ThreadingGateway(persistence=True)
+    gateway.persistence.schedule_save_sensors()
+    assert mock_save_sensors.call_count == 1
+    assert mock_timer_class.call_count == 1
+    assert mock_timer_1.start.call_count == 1
+    gateway.persistence.schedule_save_sensors()
+    assert mock_save_sensors.call_count == 2
+    assert mock_timer_class.call_count == 2
+    assert mock_timer_1.start.call_count == 1
+    assert mock_timer_2.start.call_count == 1
+    gateway.stop()
+    assert mock_timer_2.cancel.call_count == 1
+    assert mock_save_sensors.call_count == 3
+
+
 def test_update_fw():
     """Test calling fw_update with bad path."""
     gateway = ThreadingGateway()
diff --git a/tests/test_persistence.py b/tests/test_persistence.py
index fdf5464..c5d8896 100644
--- a/tests/test_persistence.py
+++ b/tests/test_persistence.py
@@ -45,7 +45,7 @@ def test_persistence(gateway, add_sensor, filename, tmpdir):
 
     persistence_file = tmpdir.join(filename)
     gateway.persistence = Persistence(
-        gateway.sensors, persistence_file.strpath)
+        gateway.sensors, mock.MagicMock(), persistence_file.strpath)
     gateway.persistence.save_sensors()
     del gateway.sensors[1]
     assert 1 not in gateway.sensors
@@ -75,7 +75,7 @@ def test_bad_file_name(gateway, add_sensor, tmpdir):
     add_sensor(1)
     persistence_file = tmpdir.join('file.bad')
     gateway.persistence = Persistence(
-        gateway.sensors, persistence_file.strpath)
+        gateway.sensors, mock.MagicMock(), persistence_file.strpath)
     with pytest.raises(Exception):
         gateway.persistence.save_sensors()
 
@@ -85,7 +85,7 @@ def test_json_no_files(gateway, tmpdir):
     assert not gateway.sensors
     persistence_file = tmpdir.join('file.json')
     gateway.persistence = Persistence(
-        gateway.sensors, persistence_file.strpath)
+        gateway.sensors, mock.MagicMock(), persistence_file.strpath)
     gateway.persistence.safe_load_sensors()
     assert not gateway.sensors
 
@@ -97,7 +97,7 @@ def test_empty_files(gateway, filename, tmpdir):
     assert not gateway.sensors
     persistence_file = tmpdir.join(filename)
     gateway.persistence = Persistence(
-        gateway.sensors, persistence_file.strpath)
+        gateway.sensors, mock.MagicMock(), persistence_file.strpath)
     persistence = gateway.persistence
     persistence_file.write('')
     with open(persistence.persistence_bak, 'w') as file_handle:
@@ -112,7 +112,8 @@ def test_json_empty_file_good_bak(gateway, add_sensor, tmpdir):
     assert 1 in gateway.sensors
     persistence_file = tmpdir.join('file.json')
     orig_file_name = persistence_file.strpath
-    gateway.persistence = Persistence(gateway.sensors, orig_file_name)
+    gateway.persistence = Persistence(
+        gateway.sensors, mock.MagicMock(), orig_file_name)
     gateway.persistence.save_sensors()
     del gateway.sensors[1]
     assert 1 not in gateway.sensors
@@ -160,7 +161,7 @@ def test_persistence_upgrade(
     assert 'description' not in sensor.children[0].__dict__
     persistence_file = tmpdir.join(filename)
     gateway.persistence = Persistence(
-        gateway.sensors, persistence_file.strpath)
+        gateway.sensors, mock.MagicMock(), persistence_file.strpath)
     gateway.persistence.save_sensors()
     del gateway.sensors[1]
     assert 1 not in gateway.sensors
@@ -175,16 +176,21 @@ def test_persistence_upgrade(
     assert gateway.sensors[1].children[0].type == sensor.children[0].type
 
 
-@mock.patch('mysensors.persistence.threading.Timer')
 @mock.patch('mysensors.persistence.Persistence.save_sensors')
-def test_schedule_save_sensors(mock_save, mock_timer_class, gateway):
+def test_schedule_save_sensors(mock_save, gateway):
     """Test schedule save sensors."""
-    mock_timer = mock.MagicMock()
-    mock_timer_class.return_value = mock_timer
-    gateway.persistence = Persistence(gateway.sensors)
+    mock_schedule_save = mock.MagicMock()
+    mock_schedule_factory = mock.MagicMock()
+    mock_schedule_factory.return_value = mock_schedule_save
+
+    gateway.persistence = Persistence(gateway.sensors, mock_schedule_factory)
+
+    assert mock_schedule_factory.call_count == 1
+    assert mock_schedule_factory.call_args == mock.call(mock_save)
+
     gateway.persistence.schedule_save_sensors()
-    assert mock_save.call_count == 1
-    assert mock_timer.start.call_count == 1
+
+    assert mock_schedule_save.call_count == 1
 
 
 class MySensorsJSONEncoderTestUpgrade(MySensorsJSONEncoder):

pip install -e .
parse_log_pytest
requirements.txt
pytest flake8 pylint pydocstyle
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
astroid==2.11.7
attrs==22.2.0
certifi==2021.5.30
crcmod==1.7
dill==0.3.4
flake8==5.0.4
get-mac==0.9.2
importlib-metadata==4.2.0
iniconfig==1.1.1
intelhex==2.3.0
isort==5.10.1
lazy-object-proxy==1.7.1
mccabe==0.7.0
packaging==21.3
platformdirs==2.4.0
pluggy==1.0.0
py==1.11.0
pycodestyle==2.9.1
pydocstyle==6.3.0
pyflakes==2.5.0
pylint==2.13.9
-e git+https://github.com/theolind/pymysensors.git@f373e86e5423c8a92bb5adeb7b03ae7b64850e04#egg=pymysensors
pyparsing==3.1.4
pyserial==3.5
pyserial-asyncio==0.6
pytest==7.0.1
snowballstemmer==2.2.0
tomli==1.2.3
typed-ast==1.5.5
typing_extensions==4.1.1
voluptuous==0.11.1
wrapt==1.16.0
zipp==3.6.0

name: pymysensors
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - astroid==2.11.7
      - attrs==22.2.0
      - crcmod==1.7
      - dill==0.3.4
      - flake8==5.0.4
      - get-mac==0.9.2
      - importlib-metadata==4.2.0
      - iniconfig==1.1.1
      - intelhex==2.3.0
      - isort==5.10.1
      - lazy-object-proxy==1.7.1
      - mccabe==0.7.0
      - packaging==21.3
      - platformdirs==2.4.0
      - pluggy==1.0.0
      - py==1.11.0
      - pycodestyle==2.9.1
      - pydocstyle==6.3.0
      - pyflakes==2.5.0
      - pylint==2.13.9
      - pyparsing==3.1.4
      - pyserial==3.5
      - pyserial-asyncio==0.6
      - pytest==7.0.1
      - snowballstemmer==2.2.0
      - tomli==1.2.3
      - typed-ast==1.5.5
      - typing-extensions==4.1.1
      - voluptuous==0.11.1
      - wrapt==1.16.0
      - zipp==3.6.0
prefix: /opt/conda/envs/pymysensors

tests/test_gateway_mqtt.py::test_start_stop_gateway tests/test_gateway_mqtt.py::test_mqtt_load_persistence tests/test_mysensors.py::test_threading_persistence tests/test_persistence.py::test_persistence[file.pickle] tests/test_persistence.py::test_persistence[file.json] tests/test_persistence.py::test_bad_file_name tests/test_persistence.py::test_json_no_files tests/test_persistence.py::test_empty_files[file.pickle] tests/test_persistence.py::test_empty_files[file.json] tests/test_persistence.py::test_json_empty_file_good_bak tests/test_persistence.py::test_persistence_upgrade[file.pickle] tests/test_persistence.py::test_persistence_upgrade[file.json] tests/test_persistence.py::test_schedule_save_sensors
tests/test_gateway_mqtt.py::test_send tests/test_gateway_mqtt.py::test_send_empty_string tests/test_gateway_mqtt.py::test_send_error tests/test_gateway_mqtt.py::test_recv tests/test_gateway_mqtt.py::test_recv_wrong_prefix tests/test_gateway_mqtt.py::test_presentation tests/test_gateway_mqtt.py::test_presentation_no_sensor tests/test_gateway_mqtt.py::test_subscribe_error tests/test_gateway_mqtt.py::test_nested_prefix tests/test_gateway_mqtt.py::test_get_gateway_id tests/test_mysensors.py::test_logic_bad_message[1.4] tests/test_mysensors.py::test_logic_bad_message[1.5] tests/test_mysensors.py::test_logic_bad_message[2.0] tests/test_mysensors.py::test_logic_bad_message[2.1] tests/test_mysensors.py::test_logic_bad_message[2.2] tests/test_mysensors.py::test_non_presented_sensor[1.4-None] tests/test_mysensors.py::test_non_presented_sensor[1.5-None] tests/test_mysensors.py::test_non_presented_sensor[2.0-1;255;3;0;19;\n] tests/test_mysensors.py::test_non_presented_sensor[2.1-1;255;3;0;19;\n] tests/test_mysensors.py::test_non_presented_sensor[2.2-1;255;3;0;19;\n] tests/test_mysensors.py::test_present_to_non_sensor[1.4-None] tests/test_mysensors.py::test_present_to_non_sensor[1.5-None] tests/test_mysensors.py::test_present_to_non_sensor[2.0-1;255;3;0;19;\n] tests/test_mysensors.py::test_present_to_non_sensor[2.1-1;255;3;0;19;\n] tests/test_mysensors.py::test_present_to_non_sensor[2.2-1;255;3;0;19;\n] tests/test_mysensors.py::test_internal_id_request[1.4] tests/test_mysensors.py::test_internal_id_request[1.5] tests/test_mysensors.py::test_internal_id_request[2.0] tests/test_mysensors.py::test_internal_id_request[2.1] tests/test_mysensors.py::test_internal_id_request[2.2] tests/test_mysensors.py::test_id_request_with_node_zero[1.4] tests/test_mysensors.py::test_id_request_with_node_zero[1.5] tests/test_mysensors.py::test_id_request_with_node_zero[2.0] tests/test_mysensors.py::test_id_request_with_node_zero[2.1] tests/test_mysensors.py::test_id_request_with_node_zero[2.2] tests/test_mysensors.py::test_presentation_arduino_node[1.4] tests/test_mysensors.py::test_presentation_arduino_node[1.5] tests/test_mysensors.py::test_presentation_arduino_node[2.0] tests/test_mysensors.py::test_presentation_arduino_node[2.1] tests/test_mysensors.py::test_presentation_arduino_node[2.2] tests/test_mysensors.py::test_id_request_presentation[1.4] tests/test_mysensors.py::test_id_request_presentation[1.5] tests/test_mysensors.py::test_id_request_presentation[2.0] tests/test_mysensors.py::test_id_request_presentation[2.1] tests/test_mysensors.py::test_id_request_presentation[2.2] tests/test_mysensors.py::test_internal_config[1.4] tests/test_mysensors.py::test_internal_config[1.5] tests/test_mysensors.py::test_internal_config[2.0] tests/test_mysensors.py::test_internal_config[2.1] tests/test_mysensors.py::test_internal_config[2.2] tests/test_mysensors.py::test_internal_time[1.4] tests/test_mysensors.py::test_internal_time[1.5] tests/test_mysensors.py::test_internal_time[2.0] tests/test_mysensors.py::test_internal_time[2.1] tests/test_mysensors.py::test_internal_time[2.2] tests/test_mysensors.py::test_internal_sketch_name[1.4] tests/test_mysensors.py::test_internal_sketch_name[1.5] tests/test_mysensors.py::test_internal_sketch_name[2.0] tests/test_mysensors.py::test_internal_sketch_name[2.1] tests/test_mysensors.py::test_internal_sketch_name[2.2] tests/test_mysensors.py::test_internal_sketch_version[1.4] tests/test_mysensors.py::test_internal_sketch_version[1.5] tests/test_mysensors.py::test_internal_sketch_version[2.0] tests/test_mysensors.py::test_internal_sketch_version[2.1] tests/test_mysensors.py::test_internal_sketch_version[2.2] tests/test_mysensors.py::test_internal_log_message[1.4] tests/test_mysensors.py::test_internal_log_message[1.5] tests/test_mysensors.py::test_internal_log_message[2.0] tests/test_mysensors.py::test_internal_log_message[2.1] tests/test_mysensors.py::test_internal_log_message[2.2] tests/test_mysensors.py::test_internal_gateway_ready[1.4-None] tests/test_mysensors.py::test_internal_gateway_ready[1.5-None] tests/test_mysensors.py::test_internal_gateway_ready[2.0-255;255;3;0;20;\n] tests/test_mysensors.py::test_internal_gateway_ready[2.1-255;255;3;0;20;\n] tests/test_mysensors.py::test_internal_gateway_ready[2.2-255;255;3;0;20;\n] tests/test_mysensors.py::test_present_light_level_sensor[1.4] tests/test_mysensors.py::test_present_light_level_sensor[1.5] tests/test_mysensors.py::test_present_light_level_sensor[2.0] tests/test_mysensors.py::test_present_light_level_sensor[2.1] tests/test_mysensors.py::test_present_light_level_sensor[2.2] tests/test_mysensors.py::test_present_humidity_sensor[1.4] tests/test_mysensors.py::test_present_humidity_sensor[1.5] tests/test_mysensors.py::test_present_humidity_sensor[2.0] tests/test_mysensors.py::test_present_humidity_sensor[2.1] tests/test_mysensors.py::test_present_humidity_sensor[2.2] tests/test_mysensors.py::test_present_same_child[1.4] tests/test_mysensors.py::test_present_same_child[1.5] tests/test_mysensors.py::test_present_same_child[2.0] tests/test_mysensors.py::test_present_same_child[2.1] tests/test_mysensors.py::test_present_same_child[2.2] tests/test_mysensors.py::test_set_light_level[1.4] tests/test_mysensors.py::test_set_light_level[1.5] tests/test_mysensors.py::test_set_light_level[2.0] tests/test_mysensors.py::test_set_light_level[2.1] tests/test_mysensors.py::test_set_light_level[2.2] tests/test_mysensors.py::test_set_humidity_level[1.4] tests/test_mysensors.py::test_set_humidity_level[1.5] tests/test_mysensors.py::test_set_humidity_level[2.0] tests/test_mysensors.py::test_set_humidity_level[2.1] tests/test_mysensors.py::test_set_humidity_level[2.2] tests/test_mysensors.py::test_battery_level[1.4] tests/test_mysensors.py::test_battery_level[1.5] tests/test_mysensors.py::test_battery_level[2.0] tests/test_mysensors.py::test_battery_level[2.1] tests/test_mysensors.py::test_battery_level[2.2] tests/test_mysensors.py::test_bad_battery_level[1.4] tests/test_mysensors.py::test_bad_battery_level[1.5] tests/test_mysensors.py::test_bad_battery_level[2.0] tests/test_mysensors.py::test_bad_battery_level[2.1] tests/test_mysensors.py::test_bad_battery_level[2.2] tests/test_mysensors.py::test_req[1.4] tests/test_mysensors.py::test_req[1.5] tests/test_mysensors.py::test_req[2.0] tests/test_mysensors.py::test_req[2.1] tests/test_mysensors.py::test_req[2.2] tests/test_mysensors.py::test_req_zerovalue[1.4] tests/test_mysensors.py::test_req_zerovalue[1.5] tests/test_mysensors.py::test_req_zerovalue[2.0] tests/test_mysensors.py::test_req_zerovalue[2.1] tests/test_mysensors.py::test_req_zerovalue[2.2] tests/test_mysensors.py::test_req_novalue[1.4] tests/test_mysensors.py::test_req_novalue[1.5] tests/test_mysensors.py::test_req_novalue[2.0] tests/test_mysensors.py::test_req_novalue[2.1] tests/test_mysensors.py::test_req_novalue[2.2] tests/test_mysensors.py::test_req_notasensor[1.4] tests/test_mysensors.py::test_req_notasensor[1.5] tests/test_mysensors.py::test_req_notasensor[2.0] tests/test_mysensors.py::test_req_notasensor[2.1] tests/test_mysensors.py::test_req_notasensor[2.2] tests/test_mysensors.py::test_callback[1.4] tests/test_mysensors.py::test_callback[1.5] tests/test_mysensors.py::test_callback[2.0] tests/test_mysensors.py::test_callback[2.1] tests/test_mysensors.py::test_callback[2.2] tests/test_mysensors.py::test_callback_exception[1.4] tests/test_mysensors.py::test_callback_exception[1.5] tests/test_mysensors.py::test_callback_exception[2.0] tests/test_mysensors.py::test_callback_exception[2.1] tests/test_mysensors.py::test_callback_exception[2.2] tests/test_mysensors.py::test_set_and_reboot[1.4] tests/test_mysensors.py::test_set_and_reboot[1.5] tests/test_mysensors.py::test_set_and_reboot[2.0] tests/test_mysensors.py::test_set_and_reboot[2.1] tests/test_mysensors.py::test_set_and_reboot[2.2] tests/test_mysensors.py::test_set_child_value[1.4] tests/test_mysensors.py::test_set_child_value[1.5] tests/test_mysensors.py::test_set_child_value[2.0] tests/test_mysensors.py::test_set_child_value[2.1] tests/test_mysensors.py::test_set_child_value[2.2] tests/test_mysensors.py::test_set_child_value_no_sensor[1.4-None] tests/test_mysensors.py::test_set_child_value_no_sensor[1.5-None] tests/test_mysensors.py::test_set_child_value_no_sensor[2.0-1;255;3;0;19;\n] tests/test_mysensors.py::test_set_child_value_no_sensor[2.1-1;255;3;0;19;\n] tests/test_mysensors.py::test_set_child_value_no_sensor[2.2-1;255;3;0;19;\n] tests/test_mysensors.py::test_non_presented_child[1.4-None] tests/test_mysensors.py::test_non_presented_child[1.5-None] tests/test_mysensors.py::test_non_presented_child[2.0-1;255;3;0;19;\n] tests/test_mysensors.py::test_non_presented_child[2.1-1;255;3;0;19;\n] tests/test_mysensors.py::test_non_presented_child[2.2-1;255;3;0;19;\n] tests/test_mysensors.py::test_set_child_no_children[1.4] tests/test_mysensors.py::test_set_child_no_children[1.5] tests/test_mysensors.py::test_set_child_no_children[2.0] tests/test_mysensors.py::test_set_child_no_children[2.1] tests/test_mysensors.py::test_set_child_no_children[2.2] tests/test_mysensors.py::test_set_child_value_bad_type[1.4] tests/test_mysensors.py::test_set_child_value_bad_type[1.5] tests/test_mysensors.py::test_set_child_value_bad_type[2.0] tests/test_mysensors.py::test_set_child_value_bad_type[2.1] tests/test_mysensors.py::test_set_child_value_bad_type[2.2] tests/test_mysensors.py::test_set_child_value_bad_ack[1.4] tests/test_mysensors.py::test_set_child_value_bad_ack[1.5] tests/test_mysensors.py::test_set_child_value_bad_ack[2.0] tests/test_mysensors.py::test_set_child_value_bad_ack[2.1] tests/test_mysensors.py::test_set_child_value_bad_ack[2.2] tests/test_mysensors.py::test_set_child_value_value_type[1.4] tests/test_mysensors.py::test_set_child_value_value_type[1.5] tests/test_mysensors.py::test_set_child_value_value_type[2.0] tests/test_mysensors.py::test_set_child_value_value_type[2.1] tests/test_mysensors.py::test_set_child_value_value_type[2.2] tests/test_mysensors.py::test_child_validate[1.4] tests/test_mysensors.py::test_child_validate[1.5] tests/test_mysensors.py::test_child_validate[2.0] tests/test_mysensors.py::test_child_validate[2.1] tests/test_mysensors.py::test_child_validate[2.2] tests/test_mysensors.py::test_set_forecast[1.4] tests/test_mysensors.py::test_set_forecast[1.5] tests/test_mysensors.py::test_set_forecast[2.0] tests/test_mysensors.py::test_set_forecast[2.1] tests/test_mysensors.py::test_set_forecast[2.2] tests/test_mysensors.py::test_set_bad_battery_attribute[1.4] tests/test_mysensors.py::test_set_bad_battery_attribute[1.5] tests/test_mysensors.py::test_set_bad_battery_attribute[2.0] tests/test_mysensors.py::test_set_bad_battery_attribute[2.1] tests/test_mysensors.py::test_set_bad_battery_attribute[2.2] tests/test_mysensors.py::test_set_rgb[1.5] tests/test_mysensors.py::test_set_rgb[2.0] tests/test_mysensors.py::test_set_rgb[2.1] tests/test_mysensors.py::test_set_rgb[2.2] tests/test_mysensors.py::test_set_rgbw[1.5] tests/test_mysensors.py::test_set_rgbw[2.0] tests/test_mysensors.py::test_set_rgbw[2.1] tests/test_mysensors.py::test_set_rgbw[2.2] tests/test_mysensors.py::test_smartsleep[2.0-1;255;3;0;22;\n] tests/test_mysensors.py::test_smartsleep[2.1-1;255;3;0;22;\n] tests/test_mysensors.py::test_smartsleep[2.2-1;255;3;0;32;500\n] tests/test_mysensors.py::test_smartsleep_from_unknown[2.0-1;255;3;0;22;\n] tests/test_mysensors.py::test_smartsleep_from_unknown[2.1-1;255;3;0;22;\n] tests/test_mysensors.py::test_smartsleep_from_unknown[2.2-1;255;3;0;32;500\n] tests/test_mysensors.py::test_set_with_new_state[2.0-1;255;3;0;22;\n] tests/test_mysensors.py::test_set_with_new_state[2.1-1;255;3;0;22;\n] tests/test_mysensors.py::test_set_with_new_state[2.2-1;255;3;0;32;500\n] tests/test_mysensors.py::test_discover_response_unknown[2.0] tests/test_mysensors.py::test_discover_response_unknown[2.1] tests/test_mysensors.py::test_discover_response_unknown[2.2] tests/test_mysensors.py::test_discover_response_known[2.0] tests/test_mysensors.py::test_discover_response_known[2.1] tests/test_mysensors.py::test_discover_response_known[2.2] tests/test_mysensors.py::test_set_position[2.0] tests/test_mysensors.py::test_set_position[2.1] tests/test_mysensors.py::test_set_position[2.2] tests/test_mysensors.py::test_gateway_bad_protocol tests/test_mysensors.py::test_gateway_low_protocol tests/test_mysensors.py::test_update_fw tests/test_mysensors.py::test_update_fw_bad_path
mysensors/persistence.py mysensors/__init__.py
mysensors/persistence.py mysensors/__init__.py