Skip to content
This repository has been archived by the owner on Jul 30, 2021. It is now read-only.

Adds methods to get speaker volume, night light status and brightness #98

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions pyarlo/base_station.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ def __init__(self, name, attrs, session_token, arlo_session,
self._available_modes = None
self._available_mode_ids = None
self._camera_properties = None
self._camera_extended_properties = None
self._ambient_sensor_data = None
self._last_refresh = None
self._refresh_rate = refresh_rate
Expand Down Expand Up @@ -416,6 +417,71 @@ def get_cameras_signal_strength(self):
signal_strength[serialnum] = cam_strength
return signal_strength

@property
def camera_extended_properties(self):
"""Return _camera_extended_properties."""
if self._camera_extended_properties is None:
self.get_camera_extended_properties()
return self._camera_extended_properties

def get_camera_extended_properties(self):
"""Return camera extended properties."""
resource = 'cameras/{}'.format(self.device_id)
resource_event = self.publish_and_get_event(resource)

if resource_event is None:
return None

self._camera_extended_properties = resource_event.get('properties')
return self._camera_extended_properties

def get_speaker_muted(self):
"""Return whether or not the speaker is muted."""
if not self.camera_extended_properties:
return None

speaker = self.camera_extended_properties.get('speaker')
if not speaker:
return None

return speaker.get('mute')

def get_speaker_volume(self):
"""Return the volume setting of the speaker."""
if not self.camera_extended_properties:
return None

speaker = self.camera_extended_properties.get('speaker')
if not speaker:
return None

return speaker.get('volume')

def get_night_light_state(self):
"""Return the state of the night light (on/off)."""
if not self.camera_extended_properties:
return None

night_light = self.camera_extended_properties.get('nightLight')
if not night_light:
return None

if night_light.get('enabled'):
return 'on'

return 'off'

def get_night_light_brightness(self):
"""Return the brightness (0-255) of the night light."""
if not self.camera_extended_properties:
return None

night_light = self.camera_extended_properties.get('nightLight')
if not night_light:
return None

return night_light.get('brightness')

@property
def properties(self):
"""Return the base station info."""
Expand Down Expand Up @@ -695,6 +761,7 @@ def update(self):
if current_time >= (last_refresh + self._refresh_rate):
self.get_cameras_properties()
self.get_ambient_sensor_data()
self.get_camera_extended_properties()
self._attrs = self._session.refresh_attributes(self.name)
self._attrs = assert_is_dict(self._attrs)
_LOGGER.debug("Called base station update of camera properties: "
Expand Down
5 changes: 5 additions & 0 deletions tests/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,8 @@ def load_ambient_sensor_data(*args, **kwargs):
def load_audio_playback_status(*args, **kwargs):
"""Load audio playback status."""
return load_fixture_json("pyarlo_audio_playback.json")


def load_extended_properties(*args, **kwargs):
"""Load extended camera properties."""
return load_fixture_json("pyarlo_extended_properties.json")
232 changes: 232 additions & 0 deletions tests/fixtures/pyarlo_extended_properties.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
{
"action": "is",
"from": "4R03757BA387F",
"resource": "cameras",
"to": "FQ8QKG-336-14182007_web",
"transId": "web!e6d1b969.8aa4b!1498165992111",
"properties": {
"activityState": "userStreamActive",
"audioAnalytics": {
"babyCryDetection": {
"enabled": true,
"triggered": false
}
},
"audioDetected": false,
"audioDetection": {
"armed": true,
"sensitivity": 3
},
"batteryLevel": 100,
"batteryTech": "Rechargeable",
"brightness": 2,
"capabilities": [
"H.264Streaming",
"JPEGSnapshot",
"SignalStrength",
"Privacy",
"Standby",
{
"MaxZoom": 7
},
{
"Resolutions": [
{
"text": "1080p",
"x": 1920,
"y": 1080
},
{
"text": "720p",
"x": 1280,
"y": 720
},
{
"text": "480p",
"x": 848,
"y": 480
},
{
"text": "360p",
"x": 640,
"y": 360
},
{
"text": "240p",
"x": 416,
"y": 240
}
]
},
{
"TimedStreamDuration": {
"default": 10,
"max": 120,
"min": 5
}
},
{
"TriggerEndStreamDuration": {
"default": 300,
"max": 300,
"min": 10
}
},
{
"Triggers": [
{
"sensitivity": {
"default": 5,
"max": 9,
"min": 1,
"step": 1,
"type": "integer"
},
"type": "ivMotionActive"
},
{
"sensitivity": {
"default": 3,
"max": 5,
"min": 1,
"step": 1,
"type": "integer"
},
"type": "audioAmplitude"
}
]
},
{
"Actions": [
{
"recordVideo": [
{
"StopActions": [
"timeout",
"triggerEndDetected"
]
}
]
},
"recordSnapshot",
"sendEmailAlert",
"pushNotification"
]
},
{
"ambientSensors": [
{
"desc": "tenths of degrees celcius",
"name": "temperature",
"type": "long"
},
{
"desc": "tenths of percent rel. humidity",
"name": "humidity",
"type": "long"
},
{
"desc": "hundredths of quality",
"name": "airQuality",
"type": "long"
}
]
}
],
"chargerTech": "Regular",
"chargingState": "Off",
"connectionState": "available",
"continuousStreamState": "inactive",
"eventAction": {
"actionType": "recordVideo",
"emailNotification": {
"emailList": [
"__OWNER_EMAIL__"
],
"enabled": false
},
"pushNotification": false,
"stopType": "motionStop",
"timeout": 15
},
"flip": false,
"fov": 100,
"hasStreamed": true,
"hwVersion": "6",
"idleLedEnable": false,
"lowBatteryLedEnable": true,
"mic": {
"mute": false,
"volume": 100
},
"mirror": false,
"modelId": "ABC1000",
"motion": {
"zones": [
{
"color": 45136,
"coords": [
{
"x": 0.164855,
"y": 0.091787
},
{
"x": 0.797101,
"y": 0.091787
},
{
"x": 0.797101,
"y": 0.995169
},
{
"x": 0.164855,
"y": 0.995169
}
],
"id": "769355de-243f-4188-af54-245532f13b9e",
"name": "Zone"
}
]
},
"motionDetected": false,
"motionDetection": {
"armed": true,
"sensitivity": 5,
"zones": []
},
"motionSetupModeEnabled": false,
"motionSetupModeSensitivity": 80,
"name": "",
"nightLight": {
"brightness": 200,
"enabled": false,
"mode": "temperature",
"sleepTime": 0,
"sleepTimeRel": 0,
"temperature": 2650
},
"nightVisionMode": 1,
"olsonTimeZone": "America/Chicago",
"powerSaveMode": 2,
"privacyActive": false,
"resolution": {
"height": 1080,
"width": 1920
},
"serialNumber": "48B14CAAAAAAA",
"signalStrength": 4,
"speaker": {
"mute": false,
"volume": 100
},
"standbyActive": false,
"streamingMode": "eventBased",
"swVersion": "1.8.4.5_20140",
"zoom": {
"bottomrightx": 1280,
"bottomrighty": 720,
"topleftx": 0,
"toplefty": 0
}
}
}
Loading