import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'package:mqtt_client/mqtt_client.dart'; import 'package:mqtt_client/mqtt_server_client.dart'; import 'package:mycoreapi/api.dart'; import 'package:myhomie_app/Helpers/MQTTHelper.dart'; import 'package:myhomie_app/Screens/Debug/DebugPage.dart'; import 'package:myhomie_app/app_context.dart'; import 'package:myhomie_app/client.dart'; import 'package:provider/provider.dart'; import '../../Models/homieContext.dart'; class HomePage extends StatefulWidget { HomePage({Key key}) : super(key: key); @override _HomePageState createState() => _HomePageState(); } class _HomePageState extends State { int _counter = 0; final MqttServerClient client = MqttServerClient.withPort('192.168.31.140', 'flutter_client', 1883); // TODO Add switch button or check online connexion if local broker available //final MqttServerClient client = MqttServerClient.withPort('myhomie.be', 'flutter_client00', 1883); // TODO ONLINE void _incrementCounter() { setState(() { _counter++; print("client.connectionStatus !!! ==" + client.connectionStatus.toString()); if (client.connectionStatus.state == MqttConnectionState.connected) { const pubTopic = 'topic/test'; final builder = MqttClientPayloadBuilder(); builder.addString('Hello MQTT'); client.publishMessage(pubTopic, MqttQos.atLeastOnce, builder.payload); } }); } // connection succeeded void onConnected() { print('Connected !!!!!!!!!!!! ----------------------------------'); client.updates.listen((List> c) { final MqttPublishMessage message = c[0].payload; final payload = MqttPublishPayload.bytesToStringAsString(message.payload.message); print('Received message:$payload from topic: ${c[0].topic}>'); }); } // unconnected void onDisconnected() { print('Disconnected'); } // subscribe to topic succeeded void onSubscribed(String topic) { print('Subscribed topic: $topic'); } // subscribe to topic failed void onSubscribeFail(String topic) { print('Failed to subscribe $topic'); } // unsubscribe succeeded void onUnsubscribed(String topic) { print('Unsubscribed topic: $topic'); } Future connect() async { client.logging(on: false); client.keepAlivePeriod = 20; client.onDisconnected = onDisconnected; client.onConnected = onConnected; client.onSubscribed = onSubscribed; /// Security context /*SecurityContext context = new SecurityContext() ..useCertificateChain('path/to/my_cert.pem') ..usePrivateKey('path/to/my_key.pem', password: 'key_password') ..setClientAuthorities('path/to/client.crt', password: 'password');*/ //client.setProtocolV31(); //client.secure = true; //client.securityContext = context; final connMessage = MqttConnectMessage() .authenticateAs('thomas', 'MyCore,1') // TODO ONLINE /*.keepAliveFor(60) .withWillTopic('willtopic') .withWillMessage('Will message')*/ .withClientIdentifier("TESSST") .startClean(); //.withWillQos(MqttQos.atLeastOnce); //client.secure = true; client.connectionMessage = connMessage; client.autoReconnect = true; try { await client.connect(); } catch (e) { print('Exception: $e'); client.disconnect(); } client.subscribe("#", MqttQos.atLeastOnce); return client; return null; } @override Widget build(BuildContext context) { final appContext = Provider.of(context); Size size = MediaQuery.of(context).size; if (!MQTTHelper.instance.isInstantiated) { print("MQTT NOT INSTANTIATED"); MQTTHelper.instance.connect(appContext); } HomieAppContext homieAppContext = appContext.getContext(); return Scaffold( appBar: AppBar( title: Text("HomePage TODO"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.headline4, ), ], ), ), drawer: Drawer( child: ListView( // Important: Remove any padding from the ListView. padding: EdgeInsets.zero, children: [ const DrawerHeader( decoration: BoxDecoration( color: Colors.blue, ), child: Text('Drawer Header'), ), ListTile( title: const Text('Debug screen'), onTap: () { Navigator.pop(context); Navigator.push( context, MaterialPageRoute( builder: (context) { return DebugPage(); }, ) ); }, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: () { var message = { "userId": homieAppContext.userId, "width": size.width, "height": size.height, "action": "button0" }; const pubTopic = 'rpiZero/test'; final builder = MqttClientPayloadBuilder(); builder.addString(jsonEncode(message)); homieAppContext.clientMQTT.publishMessage(pubTopic, MqttQos.atLeastOnce, builder.payload); var message2 = { "state": "toggle" }; const pubTopic2 = 'zigbee2mqtt/GU10Bureau/set'; final builder2 = MqttClientPayloadBuilder(); builder2.addString(jsonEncode(message2)); homieAppContext.clientMQTT.publishMessage(pubTopic2, MqttQos.atLeastOnce, builder2.payload); /*Navigator.push( context, MaterialPageRoute( builder: (context) { return DebugPage(); }, ) )*/ }, tooltip: 'Increment', child: Icon(Icons.add), ), ); } }