98 |
Please check the URL or use menu on right as the documentation you've requested does not exist
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/Resources/misc/IrisApi-v5/docs/css.css:
--------------------------------------------------------------------------------
1 | * {border:0; padding:0; margin:0; outline:0;}
2 | html {font-size:12px; font-family:verdana,arial,sans-serif;}
3 | body {background-color:black; overflow-y:scroll;}
4 | h1 {color:#FF7F1C; background-color:black; background-image:url('images/header.png'); background-repeat:no-repeat; height:45px; padding:17px 0 0 100px; font-weight:normal; font-size:33px;}
5 | h2 {color:#888; font-size:21px; font-weight:normal;}
6 | h3 {color:#555; font-size:17px; font-weight:normal; padding-bottom:7px;}
7 | h4 {color:#FF7F1C; font-size:15px; margin-top:15px; text-transform:uppercase;}
8 | p {margin:8px 0;}
9 | li > h2 {font-size:18px;}
10 |
11 | h1 span {color:white; font-size:0.6em; font-weight:normal;}
12 |
13 | /* Put an ellipsis before each URI suffix in pages which contain a of class "root" (where the root of the URI is specified to the reader) */
14 | .root ~ .section h2 span.call:before {content:"..."; color:#FF7F1C; font-size:10px; letter-spacing:-1px;}
15 |
16 | div.section {margin:30px; padding:12px; min-width:350px; overflow:auto; border:2px solid #FF7F1C; background-color:white; -moz-border-radius:4px;}
17 | div.section code {color:#666; font-family:monospace;}
18 | div.section > h3 {color:#666; margin-top:12px;}
19 | div.doc {width:auto; margin-right:237px;}
20 | div.menu {position:absolute; right:0; top:0; width:225px; background-color:white; padding-top:73px; padding-bottom:200px; -moz-border-radius-bottomleft:50px; border-left:2px solid #FF7F1C; border-bottom:2px solid #FF7F1C;}
21 | div.menu > h4 {margin-left:40px;}
22 | li {margin-left:40px;}
23 | li li {margin-left:12px;}
24 | div.menu li {list-style-type:none;}
25 |
26 | a:link, a:visited {color:blue; text-decoration:none; padding:0 2px;}
27 | a:hover:link {background-color:#FF7F1C; outline:2px solid #FF7F1C; -moz-outline-radius:10px; -moz-border-radius:8px;}
28 | div.menu a {color:black;}
29 | div.menu h4 a {color:inherit;}
30 | div.menu h4 a:hover {color:black;}
31 |
32 | div.menu > ul > li { margin-bottom:7px; }
33 |
34 | table {background-color:white; padding:2px 10px; margin:5px 0 9px; border-top:1px dashed #FF7F1C; border-bottom:1px dashed #FF7F1C;}
35 | table td {padding:2px 10px 2px 0px;}
36 | div.sample, div.args, div.errors {background-color:white; padding:10px; margin:10px 10px 10px 0; border:1px dashed #FF7F1C; -moz-border-radius:6px; display:table; vertical-align:top;}
37 | p.json, p.xml {white-space:pre; padding-left:10px; font-family:monospace; font-size:14px;}
38 | p.json i {white-space:normal;font-family:sans-serif;font-size:10px;font-color:#777;}
39 | div.args dl dl dt {font-style:italic;}
40 | div.args > dl > dt {font-size:13px;}
41 | div.args dt, div.args dd {min-height:19px; padding-bottom:3px;}
42 | div.args dl dl dt, div.args dl dl dd {min-height:14px;}
43 | div.args dd {line-height:14px;}
44 |
45 | dl {margin:10px;}
46 | dt {font-weight:bold; float:left;}
47 | dd {margin-left:20em;padding-left:1em;}
48 | dl.wide dd {margin-left:35em;}
49 | dl dl dt {width:13em;}
50 | dl dl dd {margin-left:13em;}
51 |
52 | div.errors dd {margin-left:38em;}
53 | div.errors dt {width: 38em;}
54 |
55 | span.call {color:black; font-family:monospace;}
56 | span.call em {color:#888; font-style:normal;}
57 | h2 span.warning {color: red; padding:0 0 0 30px; background-image:url('images/warning.png'); background-repeat:no-repeat;}
58 | div.args em {color:#888; font-style:normal;}
59 | .header, .var {font-family:monospace;}
60 | p.header {font-size:16px; padding:10px;}
61 | span.var {font-weight:bold;}
62 | span.uri {padding:0 2px; font-family:monospace; font-weight:bold;}
63 | span.uri span.var {color:#666;}
64 | span.val {color:#666; font-weight:bold; font-style:italic;}
65 | span.val {font-size:0.9em;}
66 | span.uri span.val {font-size:inherit;}
67 |
68 | th#code {width:39px;}
69 | th#status {width:160px;}
70 | th#treat {width:80px;}
71 | th#desc {}
72 | th {text-align:left;}
73 | th, td {padding:2px 0;}
74 |
75 | .note {padding:3px 0 10px 30px; background-image:url('images/info.png'); background-repeat:no-repeat; margin: 4px 0;}
76 | p.warning {padding:3px 0 10px 30px; background-image:url('images/warning.png'); background-repeat:no-repeat; margin: 4px 0;}
77 |
78 | p.docError {font-size:30px; color:white; border:4px solid red; padding:20px; margin:20px;}
79 |
80 | #allCalls li { display:block; margin-bottom:4px;}
81 | #allCalls a { padding:0 12px 3px; -moz-border-radius:30px;}
82 | #allCalls a:hover { outline:4px; -moz-outline-radius:30px;}
83 | #allCalls > h2 {margin-bottom:1em;}
84 | #allCalls li a { color:#FF7F1C;}
85 | #allCalls li a:hover { color:black;}
86 | #allCalls span.method {display:inline-block; width:90px;}
87 |
88 | ul + p {margin-top:1em;}
89 | a > span.uri {color:black;}
90 |
91 | ul.menu ul {
92 | border-left:1px solid grey;
93 | margin-left: 12px;
94 | }
95 | ul.menu li li:before {content:'-';color:grey}
96 | ul.menu li li{margin-left:0}
97 |
98 |
--------------------------------------------------------------------------------
/www/templates/Settings/Camera-Edit.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
113 |
114 |
--------------------------------------------------------------------------------
/Resources/misc/IrisApi-v5/docs/calls/questions.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
AlertMe.com API v5 Documentation :: calls/questions :: DRAFT
10 |
11 |
12 |
13 |
14 | API v5 Documentation draft
15 |
16 |
97 |
98 |
99 |
GET /users/all/questions
100 |
List all possible memorable questions.
101 |
102 |
Response:
103 |
104 | [
105 | {
106 | "id": 1,
107 | "key": "MEMORABLE_QUESTION::GRANDMOTHERS_MAIDEN_NAME"
108 | }
109 | ]
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/src/Controllers/Devices/DevicesHubInfoController.ts:
--------------------------------------------------------------------------------
1 | module JustinCredible.SmartHomeMobile.Controllers {
2 |
3 | export class DevicesHubInfoController extends BaseController
{
4 |
5 | //#region Injection
6 |
7 | public static ID = "DevicesHubInfoController";
8 |
9 | public static get $inject(): string[] {
10 | return [
11 | "$scope",
12 | Services.HubDataSource.ID,
13 | Services.Utilities.ID,
14 | Services.Preferences.ID
15 | ];
16 | }
17 |
18 | constructor(
19 | $scope: ng.IScope,
20 | private HubDataSource: Services.HubDataSource,
21 | private Utilities: Services.Utilities,
22 | private Preferences: Services.Preferences) {
23 | super($scope, ViewModels.DevicesHubInfoViewModel);
24 | }
25 |
26 | //#endregion
27 |
28 | //#region BaseController Overrides
29 |
30 | protected view_beforeEnter(event?: ng.IAngularEvent, eventArgs?: Ionic.IViewEventArguments): void {
31 | super.view_beforeEnter(event, eventArgs);
32 |
33 | if (this.HubDataSource.homeStatus == null
34 | || this.HubDataSource.homeStatusLastUpdated == null
35 | || moment().diff(this.HubDataSource.homeStatusLastUpdated, "minutes") > 10) {
36 | this.refresh();
37 | }
38 | else {
39 | this.populateViewModel(this.HubDataSource.homeStatus, this.HubDataSource.homeStatusLastUpdated);
40 | }
41 | }
42 |
43 | //#endregion
44 |
45 | //#region Private Methods
46 |
47 | private populateViewModel(homeStatus: AlertMeApiTypes.HomeStatusGetResult, homeStatusLastUpdated: moment.Moment): void {
48 | this.viewModel.lastUpdated = homeStatusLastUpdated.toDate();
49 | this.viewModel.hub = homeStatus.hub;
50 | }
51 |
52 | private refresh(): void {
53 | this.viewModel.isRefreshing = true;
54 |
55 | this.HubDataSource.refreshHomeStatus().then((result: AlertMeApiTypes.HomeStatusGetResult) => {
56 | this.viewModel.isRefreshing = false;
57 | this.scope.$broadcast(Constants.Events.SCROLL_REFRESH_COMPLETE);
58 |
59 | this.populateViewModel(result, this.HubDataSource.homeStatusLastUpdated);
60 |
61 | }, () => {
62 | this.viewModel.isRefreshing = false;
63 | this.scope.$broadcast(Constants.Events.SCROLL_REFRESH_COMPLETE);
64 | });
65 | }
66 |
67 | //#endregion
68 |
69 | //#region Controller Helpers
70 |
71 | protected getVersionDisplayText(versionString: string): string {
72 | return versionString === "VERSION_UNAVAILABLE" ? "(Version Unavailable)" : versionString;
73 | }
74 |
75 | protected getBatteryIconClassName(batteryPercentage: number): string {
76 | var classNames = "";
77 |
78 | if (!batteryPercentage) {
79 | return "";
80 | }
81 |
82 | if (batteryPercentage >= 75) {
83 | classNames = "ion-battery-full";
84 | }
85 | else if (batteryPercentage >= 50 && batteryPercentage < 75) {
86 | classNames = "ion-battery-half";
87 | }
88 | else if (batteryPercentage >= 25 && batteryPercentage < 50) {
89 | classNames = "ion-battery-low";
90 | }
91 | else if (batteryPercentage < 25) {
92 | classNames = "ion-battery-empty";
93 | }
94 |
95 | // If it has less than 10 percent battery life remaining, then make it red.
96 | if (batteryPercentage <= 15) {
97 | classNames += " assertive";
98 | }
99 |
100 | return classNames;
101 | }
102 |
103 | protected getFormattedDate(timestamp: number): string {
104 |
105 | if (!timestamp) {
106 | return "N/A";
107 | }
108 |
109 | return moment.unix(timestamp).format("MMM Do YYYY, h:mm a");
110 | }
111 |
112 | protected getFormattedUpTime(upTimeTotalSeconds: number): string {
113 | var days: number;
114 |
115 | if (!upTimeTotalSeconds) {
116 | return "N/A";
117 | }
118 |
119 | days = upTimeTotalSeconds / 60 / 60 / 24;
120 |
121 | return days.toFixed(1) + " days";
122 | }
123 |
124 | //#endregion
125 |
126 | //#region Controller Events
127 |
128 | protected refresh_click(): void {
129 | this.refresh();
130 | }
131 |
132 | protected refresher_refresh(): void {
133 | this.refresh();
134 | }
135 |
136 | //#endregion
137 | }
138 | }
139 |
--------------------------------------------------------------------------------
/src/Controllers/Devices/DevicesInfoController.ts:
--------------------------------------------------------------------------------
1 | module JustinCredible.SmartHomeMobile.Controllers {
2 |
3 | export interface IDevicesInfoControllerStateParams {
4 | deviceId: string;
5 | }
6 |
7 | export class DevicesInfoController extends BaseController {
8 |
9 | //#region Injection
10 |
11 | public static ID = "DevicesInfoController";
12 |
13 | public static get $inject(): string[] {
14 | return [
15 | "$scope",
16 | "$stateParams",
17 | Services.HubDataSource.ID,
18 | Services.Utilities.ID,
19 | Services.Preferences.ID
20 | ];
21 | }
22 |
23 | constructor(
24 | $scope: ng.IScope,
25 | private $stateParams: IDevicesInfoControllerStateParams,
26 | private HubDataSource: Services.HubDataSource,
27 | private Utilities: Services.Utilities,
28 | private Preferences: Services.Preferences) {
29 | super($scope, ViewModels.DevicesInfoViewModel);
30 | }
31 |
32 | //#endregion
33 |
34 | //#region BaseController Overrides
35 |
36 | protected view_beforeEnter(event?: ng.IAngularEvent, eventArgs?: Ionic.IViewEventArguments): void {
37 | super.view_beforeEnter(event, eventArgs);
38 |
39 | if (this.HubDataSource.homeStatus == null
40 | || this.HubDataSource.homeStatusLastUpdated == null
41 | || moment().diff(this.HubDataSource.homeStatusLastUpdated, "minutes") > 10) {
42 | this.refresh();
43 | }
44 | else {
45 | this.populateViewModel(this.HubDataSource.homeStatus, this.HubDataSource.homeStatusLastUpdated);
46 | }
47 | }
48 |
49 | //#endregion
50 |
51 | //#region Private Methods
52 |
53 | private populateViewModel(homeStatus: AlertMeApiTypes.HomeStatusGetResult, homeStatusLastUpdated: moment.Moment): void {
54 | this.viewModel.lastUpdated = homeStatusLastUpdated.toDate();
55 | this.viewModel.device = _.find(homeStatus.devices, { "id": this.$stateParams.deviceId });
56 | }
57 |
58 | private refresh(): void {
59 | this.viewModel.isRefreshing = true;
60 |
61 | this.HubDataSource.refreshHomeStatus().then((result: AlertMeApiTypes.HomeStatusGetResult) => {
62 | this.viewModel.isRefreshing = false;
63 | this.scope.$broadcast(Constants.Events.SCROLL_REFRESH_COMPLETE);
64 |
65 | this.populateViewModel(result, this.HubDataSource.homeStatusLastUpdated);
66 |
67 | }, () => {
68 | this.viewModel.isRefreshing = false;
69 | this.scope.$broadcast(Constants.Events.SCROLL_REFRESH_COMPLETE);
70 | });
71 | }
72 |
73 | //#endregion
74 |
75 | //#region Controller Helpers
76 |
77 | protected getVersionDisplayText(versionString: string): string {
78 | return versionString === "VERSION_UNAVAILABLE" ? "(Version Unavailable)" : versionString;
79 | }
80 |
81 | protected getBatteryIconClassName(batteryPercentage: number): string {
82 | var classNames = "";
83 |
84 | if (!batteryPercentage) {
85 | return "";
86 | }
87 |
88 | if (batteryPercentage >= 75) {
89 | classNames = "ion-battery-full";
90 | }
91 | else if (batteryPercentage >= 50 && batteryPercentage < 75) {
92 | classNames = "ion-battery-half";
93 | }
94 | else if (batteryPercentage >= 25 && batteryPercentage < 50) {
95 | classNames = "ion-battery-low";
96 | }
97 | else if (batteryPercentage < 25) {
98 | classNames = "ion-battery-empty";
99 | }
100 |
101 | // If it has less than 10 percent battery life remaining, then make it red.
102 | if (batteryPercentage <= 15) {
103 | classNames += " assertive";
104 | }
105 |
106 | return classNames;
107 | }
108 |
109 | protected getProtocolDisplayList(protocols: string[]): string {
110 | return protocols == null ? "" : protocols.join(", ");
111 | }
112 |
113 | protected getMissingProtocolDisplayList(missingProtocols: { [id: string]: string }): string {
114 | return missingProtocols == null ? "" : _.values(missingProtocols).join(", ");
115 | }
116 |
117 | //#endregion
118 |
119 | //#region Controller Events
120 |
121 | protected refresh_click(): void {
122 | this.refresh();
123 | }
124 |
125 | protected refresher_refresh(): void {
126 | this.refresh();
127 | }
128 |
129 | //#endregion
130 | }
131 | }
132 |
--------------------------------------------------------------------------------
/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Smart Home Mobile
4 | Used to control home automation devices.
5 | Justin Unterreiner
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------