Solución Smart Home SDK
Inteligente amasado MK102
Smart Plug MK112
Interruptor inteligente WS001-3
README.md - IOS

1. Por debajo de la carpeta Dispositivo MKSDK es el SDK para configurar la conexión inteligente

1.1 Si desea configurar la información de Sever MQTT y la información WiFi para conectarse de conector inteligente,Usted necesita tomar el enchufe inteligente en modo AP(Por favor consulte el manual de usuario MokoLife):enchufar el conector inteligente en el zócalo de energía,presione el botón de 10 segundos hasta que el indicador de conector inteligente luz parpadeo ámbar que indican el conector inteligente en modo AP(Nota:El período de tiempo de espera para el modo de AP es 3 minutos,una vez que haya configurado la información al conector inteligente,que va a terminar el modo AP).Entre en la página de WLAN y seleccione el punto de acceso conector inteligente para conectar ,cuando se conecta correctamente,llamada connectDeviceWithHost:Puerto:connectSucBlock:métodos connectFailedBlock a plug.Following inteligente Connect es la configuración completa del proceso de enchufe inteligente:

paso 1

[[MKSocketManager sharedInstance] connectDeviceWithHost:@”192.168.4.1″
Puerto:8266
connectSucBlock:^(NSString * IP, puerto NSInteger) {
//el éxito de conexión
connectFailedBlock:^(NSError * Error) {
//Conexión fallida
}];

paso 2

[[MKSocketManager sharedInstance] readSmartPlugDeviceInformationWithSucBlock:^(Identificación del returnData) {
//INFO Leer dispositivo de éxito
} failedBlock:^(NSError * Error) {
//INFO Leer dispositivo no pudo
}];

paso 3

[[MKSocketManager sharedInstance] configMQTTServerHost:@”su anfitrión servidor MQTT”
Puerto:Puerto
connectMode:mqttServerConnectTCPMode
QoS:mqttQosLevelExactlyOnce
mantener viva:60
cleanSession:SÍ
Identificación del cliente:@”la dirección MAC del dispositivo”
nombre de usuario:@”MQTT su Servidor Nombre”
contraseña:@”la contraseña del servidor MQTT”
sucBlock:^(Identificación del returnData) {
//config éxito
}
failedBlock:^(NSError * Error) {
//Error config
}];

etapa 4

[[MKSocketManager sharedInstance] configWifiSSID:su SSID wifi
contraseña:Contraseña de wifi
seguridad:wifiSecurity_WPA2_PSK
sucBlock:^(Identificación del returnData) {
//config éxito
} failedBlock:^(NSError * Error) {
//Error config
}];

2. La carpeta MKSDKForMqttServer es el SDK que configura la APP y MQTTServer

2.1 MKMQTTServerManagerDelegate
@protocol MKMQTTServerManagerDelegate

(vacío)mqttServerManagerStateChanged:(MKMQTTSessionManagerState)estado;//método delegado estatal de conexión

(vacío)SessionManager:(MKMQTTServerManager *)SessionManager didReceiveMessage:(NSData *)ontopic datos:(NSString *)tema;//Recibe los datos desde el servidor MQTT

@fin

2.2 APP conectarse al servidor MQTT
Cuando la red está disponible,llamada [[MKMQTTServerManager sharedInstance] connectMQTTServer:Puerto:TLS:mantener viva:limpiar:auth:usuario:pasar:Identificación del cliente:] para conectar el servidor de MQTT.

2.3 Subscribe tema
Por favor, consulte el documento de Protocal MQTT para el tema de la plug.Call inteligentes – (vacío)suscripciones:(NSArray *)topicList y – (vacío)unsubscriptions:(NSArray *)topicList para suscribirse y darse de baja del tema separatrly.

2.4 APP publicar datos en un tema específico
Por favor, consulte el documento de Protocal MQTT para el tema de la conexión inteligente. – (vacío)enviar datos:(NSDictionary *)tema de datos:(NSString *)tema sucBlock:(vacío (^)(vacío))sucBlock failedBlock:(vacío (^)(NSError * Error))failedBlock

README.md - Android

1.Importación y el uso del SDK

1.1 mokosupport proyecto de módulo de importación

1.2 proyecto de archivo y mokosupport llamada settings.gradle Configurar:

incluir ‘:aplicación’,’:mokosupport’

1.3 Editar el archivo build.gradle del proyecto principal:

dependencias {
FileTree aplicación(usted: ‘libs’, incluir: ['*.tarro'])
proyecto de implementación(camino: ‘: mokosupport’)
}

1.4 Importación SDK durante la inicialización del proyecto:

BaseApplication clase pública se extiende Aplicación {
@Anular
onCreate public void() {
super.onCreate();
// inicialización
MokoSupport.getInstance().en eso(getApplicationContext());
}
}

2.Introducción de la función

    • Los métodos proporcionados en SDK incluyen: comunicación Socket con dispositivo WIFI, servicio de conexión MQTT, desconexión, tema de suscripción, tema para darse de baja, tema Publicar, de registro de registro, etc..
    • Toma de comunicación es llamado por SocketService;
    • MQTT comunicación puede ser llamado por MokoSupport.getInstance();

2.1 SocketService

Antes de crear una conexión de socket, necesita confirmar si la aplicación se conecta a una red WiFi del dispositivo. Conectar la dirección IP por defecto 192.168.4.1, el número de puerto por defecto es 8266, que pueden ser modificados en SocketThread.

2.1.1 inicialización

bindService(Intención nueva(esta, SocketService.class), mServiceConnection, BIND_AUTO_CREATE);

Inicio SocketService, y obtener el objeto SocketService, llamada mService.startSocket() para crear un hilo Socket, conectar el dispositivo, y los hilo espera para el mensaje a ser enviados después de la conexión es satisfactoria;

2.1.2 Obtener estado de la conexión y la respuesta

1.Obtener el estado de la conexión mediante el registro de la emisión:

Broadcast ACCIÓN:MokoConstants.ACTION_AP_CONNECTION

Estado de conexión:

    • conexión con éxito:MokoConstants.CONN_STATUS_SUCCESS
    • conectando:MokoConstants.CONN_STATUS_CONNECTING
    • La conexión falló:MokoConstants.CONN_STATUS_FAILED
    • El tiempo de conexión expiro:MokoConstants.CONN_STATUS_TIMEOUT

2、Obtener la respuesta de comunicación del zócalo mediante el registro de la emisión :

Broadcast ACCIÓN:MokoConstants.ACTION_AP_SET_DATA_RESPONSE

Obtener una respuesta:

= Respuesta DeviceResponse (DeviceResponse) intent.getSerializableExtra(MokoConstants.EXTRA_AP_SET_DATA_RESPONSE);

2.1.3 Enchufe
Enviar datos sólo acepta cadenas en formato JSON

p.ej:

1、Obtener información del dispositivo:

{
“encabezamiento” : 4001
}

respuesta:

{
“código” : 0,
“mensaje” : “éxito”,
“resultado” : {
“encabezamiento” : 4001,
“device_function” : “iot_plug”,
“nombre del dispositivo” : “plug_one”,
“device_specifications” : “nosotros”,
“device_mac” : “11:22:33:44:55:66”,
“tipo de dispositivo” : “1”
}
}

2、 Enviar información del servidor MQTT

{
“encabezamiento” : 4002,
“anfitrión” : “45.32.33.42”,
“Puerto” : 1883,
“connect_mode” : 0,
“nombre de usuario” : “DVES_USER”,
“contraseña” : “DVES_PASS”,
“mantener viva” : 120,
“QoS” : 2,
“clean_session” :1
}
respuesta:

{
“código” : 0,
“mensaje” : “éxito”,
“resultado” : {
“encabezamiento” : 4002
}
}

3、Enviar una red Wi-Fi con un SSID específico

{
“encabezamiento” : 4003,
“wifi_ssid” : “Fitpolo”,
“wifi_pwd” : “fitpolo1234.”,
“WIFI_SECURITY” : 3
}

respuesta:

{
“código” : 0,
“mensaje” : “éxito”,
“resultado” : {
“encabezamiento” : 4003
}
}

2.2 MokoSupport

2.2.1 Conectar con el servidor MQTT
1、crear MqttAndroidClient

creatClient public void(string host, abertura para cuerda, cadena clientId, booleano tlsConnection)

2、Conectar con el servidor

connectMqtt public void(opciones MqttConnectOptions)
Obtener el estado de la creación según MqttCallbackHandler y recibir el servidor de formulario de datos de retorno

@Anular
connectComplete public void(reconexión booleano, cadena serverURI) {

}
@Anular
connectionlost public void(causa throwable) {

}
@Anular
public void messageArrived(cadena tema, mensaje MqttMessage) throws Exception {

}

3、Obtener el estado de la conexión mediante el registro de la emisión:

Broadcast ACCIÓN:MokoConstants.ACTION_MQTT_CONNECTION

Estado de conexión:

    • el éxito de conexión:MokoConstants.MQTT_CONN_STATUS_SUCCESS
    • Desconectar:MokoConstants.MQTT_CONN_STATUS_LOST

4、Recibir los datos de retorno desde un servidor mediante el registro de la emisión

Broadcast ACCIÓN:MokoConstants.ACTION_MQTT_RECEIVE

de datos de retorno:

    • Retorno de datos Tema:

MokoConstants.EXTRA_MQTT_RECEIVE_TOPIC

    • Retorno de datos de mensajes:

MokoConstants.EXTRA_MQTT_RECEIVE_MESSAGE

Los datos de retorno está en formato JSON,p.ej:

{
“nombre de empresa” : “harina”,
“fecha de producción” : “201801”,
“Modelo del Producto” : “plug_one”,
“versión de firmware” : “000001”
“device_mac” : “11:22:33:44:55:66”
}

2.2.2 monitor de la acción
la comunicación MQTT contiene cuatro tipos de acciones. Para ejecutar cada acción, Es necesario que ajuste ActionListener para supervisar el estado de la Acción:

enumeración de acción pública {
/**
* Acción Conectar
**/
CONECTAR,
/**
* Subscribe Acción
**/
SUSCRIBIR,
/**
* publicar Acción
**/
PUBLICAR,
/**
* Acción Darse de baja
**/
BAJA
}

Obtener el Estado de acción mediante el registro de la emisión:

1、CONECTAR

Broadcast ACCIÓN:MokoConstants.ACTION_MQTT_CONNECTION

La conexión falló:MokoConstants.MQTT_CONN_STATUS_FAILED
2、SUSCRIBIR

Broadcast ACCIÓN:MokoConstants.ACTION_MQTT_SUBSCRIBE

Subscribe Tema:MokoConstants.EXTRA_MQTT_RECEIVE_TOPIC
Subscribe estado:MokoConstants.EXTRA_MQTT_STATE

3、PUBLICAR

Broadcast ACCIÓN:MokoConstants.ACTION_MQTT_PUBLISH

estado de publicación:MokoConstants.EXTRA_MQTT_STATE

4、BAJA

Broadcast ACCIÓN:MokoConstants.ACTION_MQTT_UNSUBSCRIBE

estado de darse de baja:MokoConstants.EXTRA_MQTT_STATE

2.2.3 Subscribe tema

MokoSupport.getInstance().suscribir(cadena tema, QoS int)

2.2.4 publicar información

MokoSupport.getInstance().publicar(cadena tema, mensaje MqttMessage)

2.2.5 tema Darse de baja

MokoSupport.getInstance().Darse de baja(cadena tema)

2.2.6 Determinar si el MQTT está conectado

MokoSupport.getInstance().está conectado()

2.2.7 desconexión

MokoSupport.getInstance().disconnectMqtt()

3.Guardar registro en la tarjeta SD
SDK se integra el registro se guarda en la función de la tarjeta SD, se llama https://github.com/elvishew/xLog

método de inicialización en MokoSupport.getInstance().en eso(getApplicationContext())

El nombre de carpeta y nombre de archivo guardado en la tarjeta SD puede ser modificado.

LogModule clase pública {
private static final String TAG = “mokoLife”;// nombre del archivo
private static final String = LOG_FOLDER “mokoLife”;// nombre de la carpeta

}

estrategia de almacenamiento: Sólo almacenar los datos del día y los datos del día anterior , el archivo se añade como sufijo with.bak

método de llamada:

LogModule.v(“información de registro”);
LogModule.d(“información de registro”);
LogModule.i(“información de registro”);
LogModule.w(“información de registro”);
LogModule.e(“información de registro”);