def test_getAudioSpec(): tapo = Tapo(host, user, password) result = tapo.getAudioSpec() assert "audio_capability" in result assert "device_speaker" in result["audio_capability"] assert "device_microphone" in result["audio_capability"] assert result["error_code"] == 0
def test_performRequest_failure(): tapo = Tapo(host, user, password) with pytest.raises(Exception) as err: tapo.performRequest({"invalidData": "test123"}) assert ( 'Error: -40210 Response:{"result": {"responses": []}, "error_code": -40210}' == str(err.value))
def test_getTime(): tapo = Tapo(host, user, password) result = tapo.getTime() assert "system" in result assert "clock_status" in result["system"] assert "seconds_from_1970" in result["system"]["clock_status"] assert "local_time" in result["system"]["clock_status"] assert result["error_code"] == 0
def test_getAlarm(): tapo = Tapo(host, user, password) result = tapo.getAlarm() assert result[".name"] == "chn1_msg_alarm_info" assert result[".type"] == "info" assert "enabled" in result assert "alarm_type" in result assert "alarm_mode" in result assert "light_type" in result
def test_getMotionDetection(): tapo = Tapo(host, user, password) result = tapo.getMotionDetection() assert result[".name"] == "motion_det" assert result[".type"] == "on_off" assert "enabled" in result assert "enhanced" in result assert "sensitivity" in result assert "digital_sensitivity" in result
def test_responseIsOK_success(): tapo = Tapo(host, user, password) class AttributeDict(dict): status_code = 200 text = '{"error_code":0}' def json(self): return json.loads(self.text) result = tapo.responseIsOK(AttributeDict()) assert result is True
def test_setOsd_failure(): tapo = Tapo(host, user, password) originalOsd = tapo.getOsd() with pytest.raises(Exception) as err1: tapo.setOsd( "AAAAAAAAAAAAAAAAA", False, False, False, 1, 2, 3, 4, 5, 6, ) with pytest.raises(Exception) as err2: tapo.setOsd( "valid label", False, False, False, -50, 2, 3, 4, 5, 6, ) with pytest.raises(Exception) as err3: tapo.setOsd( "valid label", False, False, False, 1, 10001, 3, 4, 5, 6, ) # just in case something succeeded, restore original setOsd(tapo, originalOsd) assert "Error: Label cannot be longer than 16 characters" == str(err1.value) assert "Error: Incorrect corrdinates, must be between 0 and 10000" == str( err2.value ) assert "Error: Incorrect corrdinates, must be between 0 and 10000" == str( err3.value )
def test_errorMessage(): tapo = Tapo(host, user, password) origPrivacyModeEnabled = tapo.getPrivacyMode()["enabled"] == "on" if not origPrivacyModeEnabled: tapo.setPrivacyMode(True) with pytest.raises(Exception) as err: tapo.savePreset("unit test") assert "Privacy mode is ON, not able to execute" in str(err.value) if not origPrivacyModeEnabled: tapo.setPrivacyMode(False)
def test_moveMotor(): tapo = Tapo(host, user, password) origPrivacyModeEnabled = tapo.getPrivacyMode()["enabled"] == "on" if origPrivacyModeEnabled: tapo.setPrivacyMode(False) result = tapo.moveMotor(0, 0) if origPrivacyModeEnabled: tapo.setPrivacyMode(True) assert result["error_code"] == 0
async def set_privacy(): ip = get_device_ip(camera_model) user = "******" password = "******" tapo = Tapo(ip, user, password) form = await request.form flag = form['enable'] #Camera not working when its True result = tapo.setPrivacyMode(enabled=flag) err_code = result["error_code"] if err_code == 0: return {"message" : "privacy set successfully"} else: return {"message" : "error occured"}
async def set_mode(): ip = get_device_ip(camera_model) user = "******" password = "******" tapo = Tapo(ip, user, password) form = await request.form mode = form['mode'] # when condition is on : Camera = Blackk & White result = tapo.setDayNightMode(mode) err_code = result["error_code"] if err_code == 0: return {"message" : "mode set successfully"} else: return {"message" : "error occured"}
async def set_osd(): ip = get_device_ip(camera_model) user = "******" password = "******" tapo = Tapo(ip, user, password) form = await request.form label = form['label'] d_enb = form['dateEnabled'] l_enb = form['labelEnabled'] w_enb = form['weekEnabled'] result = tapo.setOsd(label, dateEnabled=d_enb, labelEnabled=l_enb, weekEnabled=w_enb) err_code = result["error_code"] if err_code == 0: return {"message" : "on screen display set successfully"} else: return {"message" : "error occured"}
async def set_motion_not(): ########## NOT WORKING ############### ip = get_device_ip(camera_model) user = "******" password = "******" tapo = Tapo(ip, user, password) form = await request.form flag = form['enable'] try: sense = form['sensitivity'] # Motion detection is off, when enabled=false result = tapo.setMotionDetection(enabled=flag, sensitivity=sense) except: # Motion detection is off, when enabled=false result = tapo.setMotionDetection(enabled=flag) err_code = result["error_code"] if err_code == 0: return {"message" : "motion set successfully"} else: return {"message" : "error occured"}
def test_responseIsOK_failure(): tapo = Tapo(host, user, password) class AttributeDict(dict): status_code = 200 text = '{"error_code":404}' def json(self): return json.loads(self.text) result = tapo.responseIsOK(AttributeDict()) assert result is False class AttributeDict(dict): status_code = 200 text = "not json" def json(self): return json.loads(self.text) with pytest.raises(Exception) as err: result = tapo.responseIsOK(AttributeDict()) assert "Unexpected response from Tapo Camera: " in str(err.value) class AttributeDict(dict): status_code = 404 text = "not json" def json(self): return json.loads(self.text) with pytest.raises(Exception) as err: tapo.responseIsOK(AttributeDict()) assert "Error communicating with Tapo Camera. Status code: 404" == str( err.value)
def test_refreshStok_failure(): with pytest.raises(Exception) as err: tapo = Tapo(host, user, invalidPassword) tapo.refreshStok() assert "Invalid authentication data" in str(err.value)
def test_getUserID(): tapo = Tapo(host, user, password) userID = tapo.getUserID() assert isinstance(userID, int)
def test_getRecordings(): tapo = Tapo(host, user, password) result = tapo.getRecordings("20200101") assert isinstance(result, list)
def test_lightFrequencyMode(): tapo = Tapo(host, user, password) origLightFrequency = tapo.getCommonImage( )["image"]["common"]["light_freq_mode"] tapo.setLightFrequencyMode("50") assert tapo.getCommonImage()["image"]["common"]["light_freq_mode"] == "50" tapo.setLightFrequencyMode("60") assert tapo.getCommonImage()["image"]["common"]["light_freq_mode"] == "60" tapo.setLightFrequencyMode("auto") assert tapo.getCommonImage( )["image"]["common"]["light_freq_mode"] == "auto" with pytest.raises(Exception) as err: tapo.setLightFrequencyMode("invalid") assert "Light frequency mode must be one of" in str(err.value) tapo.setLightFrequencyMode(origLightFrequency) assert (tapo.getCommonImage()["image"]["common"]["light_freq_mode"] == origLightFrequency)
def get_module_spec(): ip = get_device_ip(camera_model) user = "******" password = "******" tapo = Tapo(ip, user, password) return tapo.getModuleSpec()
def get_display_info(): ip = get_device_ip(camera_model) user = "******" password = "******" tapo = Tapo(ip, user, password) return tapo.getOsd()
def get_motion(): ip = get_device_ip(camera_model) user = "******" password = "******" tapo = Tapo(ip, user, password) return tapo.getMotionDetection()
def get_privacy(): ip = get_device_ip(camera_model) user = "******" password = "******" tapo = Tapo(ip, user, password) return tapo.getPrivacyMode()
def get_alarm(): ip = get_device_ip(camera_model) user = "******" password = "******" tapo = Tapo(ip, user, password) return tapo.getAlarm()
def get_basicinfo(): ip = get_device_ip(camera_model) user = "******" password = "******" tapo = Tapo(ip, user, password) return tapo.getBasicInfo()
def test_calibrateMotor(): tapo = Tapo(host, user, password) result = tapo.calibrateMotor() assert result["error_code"] == 0
def test_ensureAuthenticated(): tapo = Tapo(host, user, password) result = tapo.ensureAuthenticated() assert result is True
def registerController(host, username, password): return Tapo(host, username, password)
def test_reboot(): tapo = Tapo(host, user, password) result = tapo.reboot() assert result["error_code"] == 0
import sys from pytapo import Tapo from flask import Flask user = "******" # Camera Username password = "******" # Camera password host = "192.168.1.50" # ip of the camera port = 8092 # The port this camera API will run on app = Flask(__name__) tapo = Tapo(host, user, password) #Simple PTZ TAPO Camera API for Shinobi #This APP is not secure, be sure to setup firewall correctly. @app.route('/pan-left') def pan_left(): tapo.moveMotor(-5, 0) return 'pan left' @app.route('/pan-right') def pan_right(): tapo.moveMotor(5, 0) return 'pan right' @app.route('/tilt-up') def tilt_up(): tapo.moveMotor(0, 5) return 'tilt up'
def test_getHostURL(): tapo = Tapo(host, user, password) hostURL = tapo.getHostURL() assert "https://{host}/stok=".format(host=host) in hostURL assert "/ds" in hostURL