Skip to content

Commit 3eead47

Browse files
authored
Mqtt config (#119)
* MQTT Config. Allow these items to be configured: - mqtt hostname - check hostname in SSL certificate - mqtt transport type. Fix changed header.
1 parent c21f898 commit 3eead47

File tree

5 files changed

+29
-6
lines changed

5 files changed

+29
-6
lines changed

changelog

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
0.8.0b7:
2+
Allow more MQTT config.
3+
Fix headers.
24
Distinguish between user/shared location.
35
Fix missing event issue.
46
Tidy capture code.

pyaarlo/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ class PyArlo(object):
126126
based on camera model. Can also be `v1`, `v2` or `v3`. Use `v3` for the new location API.
127127
* **reconnect_every** - Time, in minutes, to close and relogin to Arlo.
128128
* **snapshot_timeout** - Time, in seconds, to stop the snapshot attempt and return the camera to the idle state.
129+
* **mqtt_host** - specify the mqtt host to use, default mqtt-cluster.arloxcld.com
130+
* **mqtt_hostname_check** - disable MQTT host SSL certificate checking, default True
131+
* **mqtt_transport** - specify either `websockets` or `tcp`, default `tcp`
129132
130133
**Attributes**
131134

pyaarlo/backend.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -501,17 +501,22 @@ def _mqtt_main(self):
501501

502502
# Create and set up the MQTT client.
503503
self._event_client = mqtt.Client(
504-
client_id=self._event_client_id, transport="websockets"
504+
client_id=self._event_client_id, transport=self._arlo.cfg.mqtt_transport
505505
)
506506
self._event_client.on_log = self._mqtt_on_log
507507
self._event_client.on_connect = self._mqtt_on_connect
508508
self._event_client.on_message = self._mqtt_on_message
509-
self._event_client.tls_set_context(ssl.create_default_context())
509+
ssl_context = ssl.create_default_context()
510+
ssl_context.check_hostname = self._arlo.cfg.mqtt_hostname_check
511+
self._event_client.tls_set_context(ssl_context)
510512
self._event_client.username_pw_set(f"{self._user_id}", self._token)
511513
self._event_client.ws_set_options(path=MQTT_PATH, headers=headers)
514+
self.debug(f"mqtt: host={self._arlo.cfg.mqtt_host}, "
515+
f"check={self._arlo.cfg.mqtt_hostname_check}, "
516+
f"transport={self._arlo.cfg.mqtt_transport}")
512517

513518
# Connect.
514-
self._event_client.connect(MQTT_HOST, port=443, keepalive=60)
519+
self._event_client.connect(self._arlo.cfg.mqtt_host, port=443, keepalive=60)
515520
self._event_client.loop_forever()
516521

517522
except Exception as e:
@@ -671,7 +676,7 @@ def _auth(self):
671676
"Source": "arloCamWeb",
672677
"User-Agent": self._user_agent,
673678
"x-user-device-id": self._user_id,
674-
"x-user-device-name": "QlJPV1NFUg==",
679+
"x-user-device-automation-name": "QlJPV1NFUg==",
675680
"x-user-device-type": "BROWSER",
676681
}
677682

@@ -822,7 +827,7 @@ def _validate(self):
822827
"User-Agent": self._user_agent,
823828
"Source": "arloCamWeb",
824829
"x-user-device-id": self._user_id,
825-
"x-user-device-name": "QlJPV1NFUg==",
830+
"x-user-device-automation-name": "QlJPV1NFUg==",
826831
"x-user-device-type": "BROWSER",
827832
}
828833

pyaarlo/cfg.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from .constant import (
44
DEFAULT_AUTH_HOST,
55
DEFAULT_HOST,
6+
MQTT_HOST,
67
PRELOAD_DAYS,
78
TFA_CONSOLE_SOURCE,
89
TFA_DEFAULT_HOST,
@@ -59,6 +60,18 @@ def host(self):
5960
def auth_host(self):
6061
return self._kw.get("auth_host", DEFAULT_AUTH_HOST)
6162

63+
@property
64+
def mqtt_host(self):
65+
return self._kw.get("mqtt_host", MQTT_HOST)
66+
67+
@property
68+
def mqtt_hostname_check(self):
69+
return self._kw.get("mqtt_hostname_check", True)
70+
71+
@property
72+
def mqtt_transport(self):
73+
return self._kw.get("mqtt_transport", "tcp")
74+
6275
@property
6376
def dump(self):
6477
return self._kw.get("dump", False)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def readme():
2020
'click',
2121
'pycryptodome',
2222
'unidecode',
23-
'cloudscraper>=1.2.64',
23+
'cloudscraper>=1.2.71',
2424
'paho-mqtt',
2525
'cryptography'
2626
],

0 commit comments

Comments
 (0)