diff --git a/.travis.yml b/.travis.yml
index 30fa75f..e52730d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -7,11 +7,13 @@ python:
 - 3.8
 - 2.7
 - pypy3
-install: pip install tox-travis python-coveralls codeclimate-test-reporter
+# python-coveralls 5.0 no longer supports python34
+install: pip install tox-travis codeclimate-test-reporter
 script: tox
 matrix:
   allow_failures:
   - python: 2.7
+  - python: 3.4
   - python: pypy3
   include:
     - python: 3.7
diff --git a/rflink/parser.py b/rflink/parser.py
index 05e7ea0..8a74a52 100644
--- a/rflink/parser.py
+++ b/rflink/parser.py
@@ -305,7 +305,7 @@ def decode_packet(packet: str) -> PacketType:
 
     # convert key=value pairs where needed
     for attr in filter(None, attrs.strip(DELIM).split(DELIM)):
-        key, value = attr.lower().split("=")
+        key, value = attr.lower().split("=", 1)
         if key in VALUE_TRANSLATION:
             value = VALUE_TRANSLATION[key](value)
         name = PACKET_FIELDS.get(key, key)
diff --git a/rflink/protocol.py b/rflink/protocol.py
index a3c54da..9922910 100644
--- a/rflink/protocol.py
+++ b/rflink/protocol.py
@@ -151,7 +151,7 @@ class PacketHandling(ProtocolBase):
         try:
             packet = decode_packet(raw_packet)
         except BaseException:
-            log.exception("failed to parse packet: %s", packet)
+            log.exception("failed to parse packet data: %s", raw_packet)
 
         log.debug("decoded packet: %s", packet)
 

diff --git a/tests/test_parse.py b/tests/test_parse.py
index 3f55831..274e0ae 100644
--- a/tests/test_parse.py
+++ b/tests/test_parse.py
@@ -80,6 +80,10 @@ PROTOCOL_SAMPLES = os.path.join(os.path.dirname(__file__), "protocol_samples.txt
             "20;00;Internal Pullup on RF-in disabled;",
             {"message": "Internal Pullup on RF-in disabled"},
         ],
+        [
+            "20;9A;FA500;ID=0000db9e;SWITCH=01;CMD=SET_LEVEL=2;",
+            {"command": "set_level=2"},
+        ],
     ],
 )
 def test_packet_parsing(packet, expect):

decode_packet: too many values to unpack (expected 2)
I use rflink integration in my HA setup and often get this in HA log:

> 2020-01-22 07:49:56 ERROR (MainThread) [rflink.protocol] failed to parse packet: None
> Traceback (most recent call last):
>   File "/usr/local/lib/python3.7/site-packages/rflink/protocol.py", line 152, in handle_raw_packet
>     packet = decode_packet(raw_packet)
>   File "/usr/local/lib/python3.7/site-packages/rflink/parser.py", line 308, in decode_packet
>     key, value = attr.lower().split("=")
> ValueError: too many values to unpack (expected 2)

Obvoiusly there is no impact on the functionality, but the messages flood the log.
I hope it's possible to rewrite the code so it account for situations like this.
tests/test_parse.py::test_packet_parsing[20;9A;FA500;ID=0000db9e;SWITCH=01;CMD=SET_LEVEL=2;-expect15]
tests/test_parse.py::test_packet_parsing[20;2D;UPM/Esic;ID=0001;TEMP=00cf;HUM=16;BAT=OK;-expect0] tests/test_parse.py::test_packet_parsing[20;36;Alecto tests/test_parse.py::test_packet_parsing[20;08;UPM/Esic;ID=1003;RAIN=0010;BAT=OK;-expect2] tests/test_parse.py::test_packet_parsing[20;46;Kaku;ID=44;SWITCH=4;CMD=OFF;-expect3] tests/test_parse.py::test_packet_parsing[20;E0;NewKaku;ID=cac142;SWITCH=1;CMD=ALLOFF;-expect4] tests/test_parse.py::test_packet_parsing[20;00;Nodo tests/test_parse.py::test_packet_parsing[20;01;VER=1.1;REV=45;BUILD=04;-expect6] tests/test_parse.py::test_packet_parsing[20;01;PONG;-expect7] tests/test_parse.py::test_packet_parsing[20;02;STATUS;setRF433=ON;setNodoNRF=OFF;setMilight=OFF;setLivingColors=OFF;setAnsluta=OFF;setGPIO=OFF;setBLE=OFF;setMysensors=OFF;-expect8] tests/test_parse.py::test_packet_parsing[20;01;CMD tests/test_parse.py::test_packet_parsing[20;02;OK;-expect10] tests/test_parse.py::test_packet_parsing[20;01;mock;ID=0;BFORECAST=1;HSTATUS=0-expect11] tests/test_parse.py::test_packet_parsing[20;05;RTS;ID=147907;SWITCH=01;CMD=UP;-expect13] tests/test_parse.py::test_packet_parsing[20;00;Internal tests/test_parse.py::test_descriptions tests/test_parse.py::test_units tests/test_parse.py::test_packet_valiation[20;00;Nodo tests/test_parse.py::test_packet_valiation[20;03;Cresta;ID=8301;WINDIR=0005;WINSP=0000;WINGS=0000;WINTMP=00c3;WINCHL=00c3;BAT=LOW;] tests/test_parse.py::test_packet_valiation[20;04;Cresta;ID=3001;TEMP=00b4;HUM=50;BAT=OK;] tests/test_parse.py::test_packet_valiation[20;05;Cresta;ID=2801;TEMP=00af;HUM=53;BAT=OK;] tests/test_parse.py::test_packet_valiation[20;06;NewKaku;ID=008440e6;SWITCH=a;CMD=OFF;] tests/test_parse.py::test_packet_valiation[20;07;AB400D;ID=41;SWITCH=1;CMD=ON;] tests/test_parse.py::test_packet_valiation[20;08;SilvercrestDB;ID=04d6bb97;SWITCH=1;CMD=ON;CHIME=01;] tests/test_parse.py::test_packet_valiation[20;2D;UPM/Esic;ID=0001;TEMP=00cf;HUM=16;BAT=OK;] tests/test_parse.py::test_packet_valiation[20;6A;UPM/Esic;ID=1002;WINSP=0041;WINDIR=5A;BAT=OK;] tests/test_parse.py::test_packet_valiation[20;08;UPM/Esic;ID=1003;RAIN=0010;BAT=OK;] tests/test_parse.py::test_packet_valiation[20;31;Mebus;ID=c201;TEMP=00cf;] tests/test_parse.py::test_packet_valiation[20;32;Auriol;ID=008f;TEMP=00d3;BAT=OK;] tests/test_parse.py::test_packet_valiation[20;A2;Auriol tests/test_parse.py::test_packet_valiation[20;33;Cresta;ID=3001;TEMP=00b0;HUM=50;] tests/test_parse.py::test_packet_valiation[20;0C;Cresta;ID=8001;RAIN=001c;] tests/test_parse.py::test_packet_valiation[20;47;Cresta;ID=8001;WINDIR=0002;WINSP=0060;WINGS=0088;WINCHL=b0;] tests/test_parse.py::test_packet_valiation[20;47;Cresta;ID=8001;TEMP=00b0;UV=00d0;] tests/test_parse.py::test_packet_valiation[20;36;Alecto tests/test_parse.py::test_packet_valiation[20;07;Mebus;ID=ea01;TEMP=0017;] tests/test_parse.py::test_packet_valiation[20;3D;Alecto tests/test_parse.py::test_packet_valiation[20;26;Alecto tests/test_parse.py::test_packet_valiation[20;30;Alecto tests/test_parse.py::test_packet_valiation[20;16;Alecto tests/test_parse.py::test_packet_valiation[20;17;Alecto tests/test_parse.py::test_packet_valiation[20;74;Oregon tests/test_parse.py::test_packet_valiation[20;b3;Oregon tests/test_parse.py::test_packet_valiation[20;e5;Oregon tests/test_parse.py::test_packet_valiation[20;46;Oregon tests/test_parse.py::test_packet_valiation[20;83;Oregon tests/test_parse.py::test_packet_valiation[20;32;Oregon tests/test_parse.py::test_packet_valiation[20;4a;Oregon tests/test_parse.py::test_packet_valiation[20;ba;Oregon tests/test_parse.py::test_packet_valiation[20;AF;SelectPlus;ID=1bb4;CHIME=01;] tests/test_parse.py::test_packet_valiation[20;FC;Plieger tests/test_parse.py::test_packet_valiation[20;47;Byron tests/test_parse.py::test_packet_valiation[20;12;Pir;ID=aa66;PIR=ON;] tests/test_parse.py::test_packet_valiation[20;63;SmokeAlert;ID=123456;SMOKEALERT=ON;] tests/test_parse.py::test_packet_valiation[20;06;Kaku;ID=41;SWITCH=1;CMD=ON;] tests/test_parse.py::test_packet_valiation[20;0C;Kaku;ID=41;SWITCH=2;CMD=OFF;] tests/test_parse.py::test_packet_valiation[20;0D;Kaku;ID=41;SWITCH=2;CMD=ON;] tests/test_parse.py::test_packet_valiation[20;46;Kaku;ID=44;SWITCH=4;CMD=OFF;] tests/test_parse.py::test_packet_valiation[20;E0;NewKaku;ID=cac142;SWITCH=1;CMD=ALLOFF;] tests/test_parse.py::test_packet_valiation[20;3B;NewKaku;ID=cac142;SWITCH=3;CMD=OFF;0] tests/test_parse.py::test_packet_valiation[20;0B;NewKaku;ID=000005;SWITCH=2;CMD=ON;] tests/test_parse.py::test_packet_valiation[20;0E;NewKaku;ID=000005;SWITCH=2;CMD=OFF;] tests/test_parse.py::test_packet_valiation[20;12;NewKaku;ID=000002;SWITCH=2;CMD=OFF;] tests/test_parse.py::test_packet_valiation[20;1E;NewKaku;ID=00000a;SWITCH=2;CMD=OFF;] tests/test_parse.py::test_packet_valiation[20;1F;NewKaku;ID=00000a;SWITCH=2;CMD=ON;] tests/test_parse.py::test_packet_valiation[20;01;NewKaku;ID=000007;SWITCH=2;CMD=OFF;] tests/test_parse.py::test_packet_valiation[20;04;NewKaku;ID=000007;SWITCH=2;CMD=ON;] tests/test_parse.py::test_packet_valiation[20;04;NewKaku;ID=000007;SWITCH=2;CMD=SET_LEVEL=14;] tests/test_parse.py::test_packet_valiation[20;0C;HomeEasy;ID=7900b200;SWITCH=0b;CMD=ALLON;] tests/test_parse.py::test_packet_valiation[20;AD;FA500;ID=0d00b900;SWITCH=0001;CMD=UNKOWN;] tests/test_parse.py::test_packet_valiation[20;AE;FA500;ID=0a01;SWITCH=0a01;CMD=OFF;] tests/test_parse.py::test_packet_valiation[20;03;Eurodomest;ID=03696b;SWITCH=00;CMD=OFF;] tests/test_parse.py::test_packet_valiation[20;04;Eurodomest;ID=03696b;SWITCH=07;CMD=ALLOFF;] tests/test_parse.py::test_packet_valiation[20;41;Conrad tests/test_parse.py::test_packet_valiation[20;47;Blyss;ID=ff98;SWITCH=A1;CMD=ON;] tests/test_parse.py::test_packet_valiation[20;73;Kambrook;ID=010203;SWITCH=A1;CMD=OFF;] tests/test_parse.py::test_packet_valiation[20;39;RTS;ID=1a602a;SWITCH=01;CMD=DOWN;] tests/test_parse.py::test_packet_valiation[20;01;MiLightv1;ID=F746;SWITCH=00;RGBW=3c00;CMD=ON;] tests/test_parse.py::test_packet_valiation[20;3B;NewKaku;ID=cac142;SWITCH=3;CMD=OFF;1] tests/test_parse.py::test_packet_valiation[10;Kaku;00004d;1;OFF;] tests/test_parse.py::test_packet_valiation[10;AB400D;00004d;1;OFF;] tests/test_parse.py::test_packet_valiation[10;Impuls;00004d;1;OFF;] tests/test_parse.py::test_packet_valiation[10;NewKaku;00c142;1;ON;] tests/test_parse.py::test_packet_valiation[10;NewKaku;128ac4d;1;OFF;] tests/test_parse.py::test_packet_valiation[10;Eurodomest;123456;01;ON;] tests/test_parse.py::test_packet_valiation[10;Blyss;ff98;A1;OFF;] tests/test_parse.py::test_packet_valiation[10;Conrad;ff0607;1;OFF;] tests/test_parse.py::test_packet_valiation[10;Kambrook;050325;a1;ON;] tests/test_parse.py::test_packet_valiation[10;X10;000041;1;OFF;] tests/test_parse.py::test_packet_valiation[10;HomeConfort;01b523;D3;ON;] tests/test_parse.py::test_packet_valiation[10;FA500;001b523;D3;ON;] tests/test_parse.py::test_packet_valiation[10;Powerfix;000080;0;ON;] tests/test_parse.py::test_packet_valiation[10;Ikea tests/test_parse.py::test_packet_valiation[10;HomeEasy;7900b100;3;ON;] tests/test_parse.py::test_packet_valiation[10;EV1527;000080;0;ON;] tests/test_parse.py::test_packet_valiation[10;Chuango;000080;2;ON;] tests/test_parse.py::test_packet_valiation[10;Selectplus;001c33;] tests/test_parse.py::test_packet_valiation[10;Byron;112233;01;OFF;] tests/test_parse.py::test_packet_valiation[10;DELTRONIC;001c33;] tests/test_parse.py::test_packet_valiation[10;BYRON;00009F;01;ON;] tests/test_parse.py::test_packet_valiation[10;FA20RF;67f570;1;ON;] tests/test_parse.py::test_packet_valiation[10;MERTIK;64;UP;] tests/test_parse.py::test_packet_valiation[10;RTS;1a602a;0;ON;] tests/test_parse.py::test_packet_valiation[10;RTS;1b602b;0123;PAIR;] tests/test_parse.py::test_packet_valiation[10;RTS;1b602b;0123;0;PAIR;] tests/test_parse.py::test_packet_valiation[10;MiLightv1;F746;00;3c00;ON;] tests/test_parse.py::test_packet_valiation[10;MiLightv1;F746;01;34BC;PAIR;] tests/test_parse.py::test_packet_valiation[10;MiLightv1;F746;01;34BC;UNPAIR;] tests/test_parse.py::test_packet_valiation[10;MiLightv1;F746;01;34BC;BRIGHT;] tests/test_parse.py::test_packet_valiation[10;MiLightv1;F746;01;34BC;COLOR;] tests/test_parse.py::test_packet_valiation[10;UNITEC;7796;01;ON;] tests/test_parse.py::test_packet_valiation[10;UNITEC;7796;01;PAIR;] tests/test_parse.py::test_packet_valiation[10;REBOOT;] tests/test_parse.py::test_packet_valiation[10;PING;] tests/test_parse.py::test_packet_valiation[10;VERSION;] tests/test_parse.py::test_packet_valiation[10;RFDEBUG=ON;] tests/test_parse.py::test_packet_valiation[10;RFUDEBUG=ON;] tests/test_parse.py::test_packet_valiation[10;QRFDEBUG=ON;] tests/test_parse.py::test_packet_valiation[10;TRISTATEINVERT;] tests/test_parse.py::test_packet_valiation[10;RTSCLEAN;] tests/test_parse.py::test_packet_valiation[10;RTSRECCLEAN=9;] tests/test_parse.py::test_packet_valiation[10;RTSSHOW;] tests/test_parse.py::test_packet_valiation[10;RTSINVERT;] tests/test_parse.py::test_packet_valiation[10;RTSLONGTX;] tests/test_parse.py::test_packet_valiation[11;20;0B;NewKaku;ID=000005;SWITCH=2;CMD=ON;] tests/test_parse.py::test_packet_valiation[20;D3;OK;] tests/test_parse.py::test_packet_valiation[20;D4;NewKaku;ID=000005;SWITCH=2;CMD=ON;]