Resloves #570 Next Android alarm as sensor

This commit is contained in:
estevez-dev
2020-06-22 22:30:51 +03:00
parent d09afc37b5
commit 7683d18e81
6 changed files with 145 additions and 7 deletions

View File

@ -28,6 +28,7 @@ class AppSettings {
String webhookId;
double haVersion;
bool scrollBadges;
bool nextAlarmSensorCreated = false;
DisplayMode displayMode;
AppTheme appTheme;
final int defaultLocationUpdateIntervalMinutes = 20;
@ -61,6 +62,7 @@ class AppSettings {
locationUpdateInterval = Duration(minutes: prefs.getInt("location-interval") ??
defaultLocationUpdateIntervalMinutes);
locationTrackingEnabled = prefs.getBool("location-enabled") ?? false;
nextAlarmSensorCreated = prefs.getBool("next-alarm-sensor-created") ?? false;
longLivedToken = Hive.box(DEFAULT_HIVE_BOX).get(AUTH_TOKEN_KEY);
oauthUrl = "$httpWebHost/auth/authorize?client_id=${Uri.encodeComponent(
'https://ha-client.app')}&redirect_uri=${Uri

View File

@ -62,12 +62,13 @@ class MobileAppIntegrationManager {
includeAuthHeader: true,
data: json.encode(registrationData)
).then((response) {
Logger.d("Processing registration responce...");
Logger.d("Processing registration response...");
var responseObject = json.decode(response);
AppSettings().webhookId = responseObject["webhook_id"];
AppSettings().save({
'app-webhook-id': responseObject["webhook_id"]
}).then((prefs) {
}).then((_) {
_createNextAlarmSensor(true);
completer.complete();
eventBus.fire(ShowPopupEvent(
popup: Popup(
@ -112,6 +113,7 @@ class MobileAppIntegrationManager {
_askToRegisterApp();
} else {
Logger.d('App registration works fine');
_createNextAlarmSensor(false);
}
completer.complete();
}).catchError((e) {
@ -131,6 +133,42 @@ class MobileAppIntegrationManager {
return completer.future;
}
static _createNextAlarmSensor(bool force) {
if (AppSettings().nextAlarmSensorCreated && !force) {
Logger.d("Next alarm sensor was previously created");
return;
}
Logger.d("Creating next alarm sensor...");
ConnectionManager().sendHTTPPost(
endPoint: "/api/webhook/${AppSettings().webhookId}",
includeAuthHeader: false,
data: json.encode(
{
"data": {
"device_class": "timestamp",
"icon": "mdi:alarm",
"name": "Next Alarm",
"state": "",
"type": "sensor",
"unique_id": "next_alarm"
},
"type": "register_sensor"
}
)
).then((_){
AppSettings().nextAlarmSensorCreated = true;
AppSettings().save({
'next-alarm-sensor-created': true
});
}).catchError((e) {
if (e is http.Response) {
Logger.e("Error creating next alarm sensor: ${e.statusCode}: ${e.body}");
} else {
Logger.e("Error creating next alarm sensor: ${e?.toString()}");
}
});
}
static void _showError() {
eventBus.fire(ShowPopupEvent(
popup: Popup(