zha_map WIP: get inital data

This commit is contained in:
Yegor Vialov 2020-04-01 17:04:32 +00:00
parent 2f517a3ad5
commit 293b5e0242
5 changed files with 113 additions and 2 deletions

View File

@ -317,10 +317,27 @@ class HomeAssistant {
}
}
bool isServiceExist(String service) {
return services != null &&
services.isNotEmpty &&
services.containsKey(service);
}
void _createUI() {
if (!autoUi && (_rawLovelaceData != null)) {
Logger.d("Creating Lovelace UI");
ui = HomeAssistantUI(_rawLovelaceData);
if (isServiceExist('zha_map')) {
panels.add(
Panel(
id: 'haclient_zha',
componentName: 'haclient_zha',
title: 'ZHA',
urlPath: '/haclient_zha',
icon: 'mdi:zigbee'
)
);
}
} else {
Logger.e("No lovelace config!!!!");
}

View File

@ -112,6 +112,7 @@ part 'pages/widgets/page_loading_error.dart';
part 'pages/panel.page.dart';
part 'pages/main/main.page.dart';
part 'pages/integration_settings.page.dart';
part 'pages/zha_page.dart';
part 'home_assistant.class.dart';
part 'pages/log.page.dart';
part 'pages/entity.page.dart';
@ -250,6 +251,7 @@ class _HAClientAppState extends State<HAClientApp> {
),
),
"/whats-new": (context) => WhatsNewPage(),
"/haclient_zha": (context) => ZhaPage(),
"/auth": (context) => new standaloneWebview.WebviewScaffold(
url: "${ConnectionManager().oauthUrl}",
appBar: new AppBar(

View File

@ -57,7 +57,7 @@ class _PlayMediaPageState extends State<PlayMediaPage> {
_loaded = false;
});
} else {
_isMediaExtractorExist = HomeAssistant().services.containsKey("media_extractor");
_isMediaExtractorExist = HomeAssistant().isServiceExist("media_extractor");
//_useMediaExtractor = _isMediaExtractorExist;
_players = HomeAssistant().entities.getByDomains(domains: ["media_player"]);
setState(() {

90
lib/pages/zha_page.dart Normal file
View File

@ -0,0 +1,90 @@
part of '../main.dart';
class ZhaPage extends StatefulWidget {
ZhaPage({Key key}) : super(key: key);
@override
_ZhaPageState createState() => new _ZhaPageState();
}
class _ZhaPageState extends State<ZhaPage> {
List data = [];
String error = "";
@override
void initState() {
super.initState();
_loadData();
}
_loadData() async {
setState(() {
data.clear();
error = "";
});
ConnectionManager().sendSocketMessage(
type: 'zha_map/devices'
).then((response){
setState(() {
data = response['devices'];
});
}).catchError((e){
setState(() {
error = '$e';
});
});
}
@override
Widget build(BuildContext context) {
Widget body;
if (error.isNotEmpty) {
body = PageLoadingError(errorText: error,);
} else if (data.isEmpty) {
body = PageLoadingIndicator();
} else {
List<Widget> devicesListWindet = [];
data.forEach((device) {
devicesListWindet.add(
Card(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
CardHeader(
name: '${device['ieee']}',
subtitle: Text('${device['manufacturer']}'),
),
Text('${device['device_type']}'),
Text('model: ${device['model']}'),
Text('offline: ${device['offline']}'),
Text('neighbours: ${device['neighbours'].length}'),
Text('raw: $device'),
],
),
)
);
});
body = ListView(
children: devicesListWindet
);
}
return new Scaffold(
appBar: new AppBar(
leading: IconButton(icon: Icon(Icons.arrow_back), onPressed: (){
Navigator.pop(context);
}),
actions: <Widget>[
IconButton(
icon: Icon(Icons.refresh),
onPressed: () => _loadData(),
)
],
// Here we take the value from the MyHomePage object that was created by
// the App.build method, and use it to set our appbar title.
title: new Text('ZHA'),
),
body: body
);
}
}

View File

@ -24,7 +24,7 @@ class Panel {
icon = Panel.iconsByComponent[componentName];
}
isHidden = (componentName == 'kiosk' || componentName == 'states' || componentName == 'profile' || componentName == 'developer-tools');
isWebView = (componentName != 'config' && componentName != 'lovelace');
isWebView = (componentName != 'config' && componentName != 'lovelace' && !componentName.startsWith('haclient'));
}
void handleOpen(BuildContext context) {
@ -34,6 +34,8 @@ class Panel {
builder: (context) => PanelPage(title: "$title", panel: this),
)
);
} else if (componentName.startsWith('haclient')) {
Navigator.of(context).pushNamed(urlPath);
} else if (componentName == 'lovelace') {
HomeAssistant().lovelaceDashboardUrl = this.urlPath;
HomeAssistant().autoUi = false;