Скрыть объявление
Управляйте вашими ESP8266 и другими устройствами прямо с телефона из любой точки мира, где есть интернет!
Подробности и обсуждение IoT Manager в этой теме. Официальный сайт приложения и документация IoTmanager.ru
Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Прошу оказать помощь

Тема в разделе "IoT Manager – мобильное приложение", создана пользователем vgkcom, 28 мар 2017.

  1. vgkcom

    vgkcom Новичок

    Сообщения:
    18
    Симпатии:
    0
    Прошу оказать помощь в присвоении widgetConfig в среде IDE arduino. Вроде разобрался в виджите Steel но не могу управлять конфигом, не отображается название и другие свойства widgetConfig.

    Например
    {
    id :"1",
    descr :"Steel 1",
    widget :"steel",
    topic :refix + "/" + deviceID + "/steel1",
    widgetConfig : {
    width : "auto",
    height : 100,
    type : "Linear",
    titleString: "Thermometer 1",
    unitString : "temp C",
    threshold: 90
    }

    В ардуино задаю так. Виджет на телефоне появляется но без названия.

    JsonObject& root1 = jsonBuffer.createObject();
    root1["id"] = 1;
    root1["descr"] ="Steel 1";
    root1["widget"] ="steel";
    sTopic[1] = prefix + "/" + deviceID + "/steel1";
    root1[ "titleString"] = "Thermometer";
    и так далее,
    но root1["titleString"] ="Thermometer 1"; не отображает название.
    как правильно задать widgetConfig.
     
  2. Victor

    Victor Administrator Команда форума

    Сообщения:
    2.188
    Симпатии:
    368
    нужно делать вложенный JSON, т.е. widgetConfig 'это тоже JSON объект с параметрами
     
  3. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    698
    Симпатии:
    127
    Может не понял вопроса... но... если вы отправляете json с сервера на телефон, если он изначально "статичен", если в нем не надо заниматься подстановкой полей и т.п.... просто напишите json как он есть (ваше "например") сохраните в строку и передайте клиенту (телефону) эту строку. JsonObject предназначен скорее для разбора или динамического изменения нежели для создания статических документов.
     
  4. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    771
    Симпатии:
    111
    Вот как это выглядит после всех обработок:
    Код (Text):
    1. {
    2.   "nWidgets": [
    3.     {
    4.       "id": "1",
    5.       "descr": "Steel 1",
    6.       "widget": "steel",
    7.       "topic": "/steel1",
    8.       "widgetConfig": {
    9.         "width": "auto",
    10.         "height": 100,
    11.         "type": "Linear",
    12.         "titleString": "Thermometer 1",
    13.         "unitString": "temp C",
    14.         "threshold": 90
    15.       }
    16.     }
    17.   ]
    18. }
    Топик конечно нужно поправить.
     
    Victor нравится это.
  5. vgkcom

    vgkcom Новичок

    Сообщения:
    18
    Симпатии:
    0
    Спасибо за быстрый ответ, я начинающий программист и в основном беру примеры из готовых скетчей, этот написан для JS, и выдает ошибку:
    Arduino: 1.6.5 (Windows 8.1), Плата"NodeMCU 1.0 (ESP-12E Module), 80 MHz, 115200, 4M (3M SPIFFS)"

    Изменена опция сборки, пересобираем все

    MQTTdisplay-value_widget_demo.ino: In function 'void initVar()':
    MQTTdisplay-value_widget_demo:152: error: expected ';' before ':' token
    MQTTdisplay-value_widget_demo:291: error: expected '}' at end of input
    MQTTdisplay-value_widget_demo:291: error: expected '}' at end of input
    Multiple libraries were found for "PubSubClient.h"

    Used: D:\Скетч Arduino\libraries\pubsubclientesp8266

    Not used: D:\Скетч Arduino\libraries\PubSubClient

    expected ';' before ':' token

    Это сообщение будет содержать больше информации чем
    "Отображать вывод во время компиляции"
    включено в Файл > Настройки
     
  6. vgkcom

    vgkcom Новичок

    Сообщения:
    18
    Симпатии:
    0
    Вот мой так сказать отладочный скетч:

    Код (Text):
    1.  
    2. #include <ESP8266WiFi.h>
    3. #include <WiFiClientSecure.h>
    4. #include <PubSubClient.h>
    5. #include <ArduinoJson.h>
    6.  
    7. const char *ssid =  "ASUS";            // cannot be longer than 32 characters!
    8. const char *pass =  "qwer1234";       // WiFi password
    9.  
    10. String prefix   = "/IoTmanager";      // global prefix for all topics - must be some as mobile device
    11. String deviceID = "dev04";            // thing ID - unique device id in our project
    12.  
    13. WiFiClient wclient;
    14.  
    15. // config for cloud mqtt broker by DNS hostname ( for example, cloudmqtt.com use: m20.cloudmqtt.com - EU, m11.cloudmqtt.com - USA )
    16. String mqttServerName = "m10.cloudmqtt.com";            // for cloud broker - by hostname, from CloudMQTT account data
    17. int    mqttport = 12416;                                // default 1883, but CloudMQTT.com use other, for example: 13191, 23191 (SSL), 33191 (WebSockets) - use from CloudMQTT account data
    18. String mqttuser =  "test";                              // from CloudMQTT account data
    19. String mqttpass =  "test";                              // from CloudMQTT account data
    20. PubSubClient client(wclient, mqttServerName, mqttport); // for cloud broker - by hostname
    21.  
    22.  
    23. String val;
    24. String ids = "";
    25. int newValue, newtime, oldtime, freeheap;
    26.  
    27. const int nWidgets = 2;
    28. String sTopic      [nWidgets];
    29. String stat        [nWidgets];
    30. int    pin         [nWidgets];
    31. String thing_config[nWidgets];
    32. StaticJsonBuffer<1024> jsonBuffer;
    33. JsonObject& json_status = jsonBuffer.createObject();
    34. String string_status;
    35.  
    36. void FreeHEAP() {
    37.   if ( ESP.getFreeHeap() < freeheap ) {
    38.     if ( ( freeheap != 100000) ) {
    39.        Serial.print("Memory leak detected! old free heap = ");
    40.        Serial.print(freeheap);
    41.        Serial.print(", new value = ");
    42.        Serial.println(ESP.getFreeHeap());
    43.     }
    44.     freeheap = ESP.getFreeHeap();
    45.   }
    46. }
    47.  
    48. String setStatus ( String s ) {
    49.   json_status["status"] = s;
    50.   string_status = "";
    51.   json_status.printTo(string_status);
    52.   return string_status;
    53. }
    54. String setStatus ( int s ) {
    55.   json_status["status"] = s;
    56.   string_status = "";
    57.   json_status.printTo(string_status);
    58.   return string_status;
    59. }
    60. void initVar() {
    61.  
    62.   pin   [0] = A0;     // ADC
    63.   sTopic[0] = prefix + "/" + deviceID + "/ADC";
    64.   stat  [0] = setStatus (0);
    65.  
    66.   JsonObject& root = jsonBuffer.createObject();
    67.   //JsonObject& cfg  = jsonBuffer.createObject();
    68.  
    69.   root["id"] = 0;
    70.   root["page"] = "ADC";
    71.   root["widget"] = "display-value";
    72.   root["class1"] = "item no-border";                          // class for 1st div
    73.   root["style1"] = "";                                        // style for 1st div
    74.   root["descr"]  = "DisplayValue";                            // text  for description
    75.   root["class2"] = "balanced";                                // class for description from Widgets Guide - Color classes
    76.   root["style2"] = "font-size:20px;float:left;padding-top:10px;font-weight:bold;"; // style for description
    77.   root["topic"] = sTopic[0];
    78.   root["class3"] = "";                                        // class for 3 div - SVG
    79.   root["style3"] = "float:right;";                            // style for 3 div - SVG
    80.   root["height"] = "40";                                      // SVG height without "px"
    81.   root["color"]  = "#52FF00";                                 // color for active segments
    82.   root["inactive_color"] = "#414141";                         // color for inactive segments
    83.   root["digits_count"]   = 5;                                 // how many digits
    84.   root.printTo(thing_config[0]);
    85.  
    86.   // widget1
    87.    JsonObject& root1 = jsonBuffer.createObject();
    88.    root1["id"] = 1;
    89.    root1["descr"] ="Steel 1";
    90.    root1["widget"] ="steel";
    91.    sTopic[1] = prefix + "/" + deviceID + "/steel1";
    92.    stat  [1] = setStatus (1);
    93.    root1["width"] ="auto";
    94.    root1["height"] =100;
    95.    root1["type"] = "Linear";
    96.  
    97. // вот тут как правильно задать конфиг
    98.  
    99.    root1[ "titleString"] = "Thermometer";  
    100.    root1["unitString"] = "temp C";
    101.    root1["threshold"] = 70;
    102.    root1["lcdVisible"] = true;
    103.    root1["thresholdVisible"] = true;
    104.    root1["thresholdRising"] = true;
    105.  
    106.    root1.printTo(thing_config[1]);
    107.  
    108. }
    109. void pubStatus(String t, String payload) {
    110.     if (client.publish(t + "/status", payload)) {
    111.        Serial.println("Publish new status for " + t + ", value: " + payload);
    112.     } else {
    113.        Serial.println("Publish new status for " + t + " FAIL!");
    114.     }
    115.     FreeHEAP();
    116. }
    117. void pubConfig() {
    118.   bool success;
    119.   success = client.publish(MQTT::publish(prefix, deviceID).set_qos(1));
    120.   if (success) {
    121.       delay(500);
    122.       for (int i = 0; i < nWidgets; i = i + 1) {
    123.         success = client.publish(MQTT::publish(prefix + "/" + deviceID + "/config", thing_config).set_qos(1));
    124.         if (success) {
    125.           Serial.println("Publish config: Success (" + thing_config + ")");
    126.         } else {
    127.           Serial.println("Publish config FAIL! ("    + thing_config + ")");
    128.         }
    129.         delay(150);
    130.       }    
    131.   }
    132.   if (success) {
    133.      Serial.println("Publish config: Success");
    134.   } else {
    135.      Serial.println("Publish config: FAIL");
    136.   }
    137.  
    138.        stat[0] = setStatus( analogRead(pin[0]) );
    139.      
    140.         int rrr = 100;
    141.         stat[1] = setStatus (rrr);
    142.      
    143.   for (int i = 0; i < nWidgets; i = i + 1) {
    144.       pubStatus(sTopic, stat);
    145.       delay(100);
    146.       }    
    147. }
    148. void callback(const MQTT::publish& sub) {
    149.   Serial.print("Get data from subscribed topic ");
    150.   Serial.print(sub.topic());
    151.   Serial.print(" => ");
    152.   Serial.println(sub.payload_string());
    153.  
    154.   if ( sub.payload_string() == "HELLO" ) {  // handshaking
    155.      pubConfig();
    156.   }
    157. }
    158.  
    159. void setup() {
    160.   WiFi.mode(WIFI_STA);
    161.   initVar();
    162.   oldtime = 0;
    163.   Serial.begin(115200);
    164.   delay(10);
    165.   Serial.println();
    166.   Serial.println();
    167.   Serial.println("MQTT client started.");
    168.   FreeHEAP();
    169.   freeheap = 100000;
    170.   WiFi.disconnect();
    171.   WiFi.printDiag(Serial);
    172. }
    173.  
    174. void loop() {
    175.   if (WiFi.status() != WL_CONNECTED) {
    176.     Serial.print("Connecting via WiFi to ");
    177.     Serial.print(ssid);
    178.     Serial.println("...");
    179.  
    180.     WiFi.begin(ssid, pass);
    181.  
    182.     if (WiFi.waitForConnectResult() != WL_CONNECTED) {
    183.       return;
    184.     }
    185.  
    186.     Serial.println("");
    187.     Serial.println("WiFi connect: Success");
    188.     Serial.print("IP address: ");
    189.     Serial.println(WiFi.localIP());
    190.   }
    191.  
    192.   if (WiFi.status() == WL_CONNECTED) {
    193.     if (!client.connected()) {
    194.       Serial.println("Connecting to MQTT server ...");
    195.       bool success;
    196.       if (mqttuser.length() > 0) {
    197.         success = client.connect( MQTT::Connect( deviceID ).set_auth(mqttuser, mqttpass) );
    198.       } else {
    199.         success = client.connect( deviceID );
    200.       }
    201.       if (success) {
    202.         client.set_callback(callback);
    203.         Serial.println("Connect to MQTT server: Success");
    204.         client.subscribe(prefix); // for receiving HELLO messages and handshaking
    205.         pubConfig();
    206.       } else {
    207.         Serial.println("Connect to MQTT server: FAIL");
    208.         delay(1000);
    209.       }
    210.     }
    211.  
    212.     if (client.connected()) {
    213.       newtime = millis();
    214.       if (newtime - oldtime > 10000) { // read ADC and publish data every 10 sec
    215.         stat[0] = setStatus( analogRead( pin[0] ) );
    216.         pubStatus(sTopic[0], stat[0] );
    217.         int rrr = 100;
    218.         stat[1] = setStatus (rrr);
    219.         pubStatus(sTopic[1], stat[1] );
    220.         oldtime = newtime;
    221.       }
    222.       client.loop();
    223.     }
    224.   }
    225. }
     
    Последнее редактирование модератором: 29 мар 2017
  7. vgkcom

    vgkcom Новичок

    Сообщения:
    18
    Симпатии:
    0
    Все разобрался, перевел все в строку:
    thing_config[1] = "{\"id\":1, \"descr\":\"Steel 1\",\"page\":\"ADC\",\"widget\":\"steel\",\"topic\":\"/IoTmanager/dev04/steel1\",\"widgetConfig\":{\"width\":\"auto\",\"height\":100,\"type\":\"Linear\",\"titleString\":\"Температура\",\"unitString\":\"°C\",\"threshold\":10,\"minValue\" : -10, \"maxValue\" : 30 } }";
     

Поделиться этой страницей