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

IoT Manager - архив обсуждений

Тема в разделе "IoT Manager – мобильное приложение", создана пользователем Victor, 12 окт 2015.

Статус темы:
Закрыта.
  1. Victor

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

    Сообщения:
    2.188
    Симпатии:
    368
    да, теперь настраивайте виджеты под себя, смотря что вам нужно
     
  2. Vladkiy

    Vladkiy Новичок

    Сообщения:
    3
    Симпатии:
    1
    Виктор, в том то и дело, что я не знаю, как это делать... Где почитать??
     
  3. Victor

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

    Сообщения:
    2.188
    Симпатии:
    368
    В приложении есть пункт меню: Виджеты, там полное описание последних виджетов, но не всех и на английском :( но я работаю над описанием и надеюсь, что скоро описание будет для всех виджетов и на русском тоже.
    Еще можно разобраться по исходникам javascript для NODE.JS или для Arduino IDE здесь https://gist.github.com/4refr0nt/
    Я подгоняю виджеты в эмуляторе реального устройства в NODE.JS - это быстро, не нужно после каждого исправления перезаливать прошивку,
    можно быстро попробовать разные виджеты, быстро менять классы и стили и сразу видеть что получилось.
    Удобно использовать nodemon - он сам перезапускает js скрипт после того, как я его отредактировал.
     
  4. Jon

    Jon Читатель

    Сообщения:
    68
    Симпатии:
    10
    После обновления на ver 1.4.7 перестал подключаться к брокеру. Как откатить обновление?
     
  5. KAlexK

    KAlexK Новичок

    Сообщения:
    24
    Симпатии:
    3
    Скорее всего, у вас просто совпали глюки на сервере и обновление IoT Manager. У меня все работает и в 1.4.7. Зайдите в консоль и перегрузите брокер.
     
    Victor нравится это.
  6. Victor

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

    Сообщения:
    2.188
    Симпатии:
    368
    к сожалению, откат невозможен (это особенность GooglePlay)
    но заверяю вас, что никаких изменений в плане подключения к брокеру в этой версии не производилось - попробуйте перезапустить mqtt или подключиться к другому серверу.
     
  7. Oleg_Pvk

    Oleg_Pvk Новичок

    Сообщения:
    1
    Симпатии:
    0
    Доброго времени суток еспшники!
    Прошу Вас господа ткните носом куда копать!
    С библеотеками с горем пополам я разобрался за неделю ковыряний с ардуин.
    Из ардуины экспортирую бин фаил и спомощю программы XTCOM_UTIL прошиваю ESP-8266-12E пользуюсь USB-TTL
    Перезагружаю есп и в ESPloer мне выдаёт такой код
    Раскрыть Спойлер
    Код (C):
    1.  
    2. ets Jan  8 2013,rst cause:2, boot mode:(3,7)
    3.  
    4. load 0x4010f000, len 1264, room 16
    5. tail 0
    6. chksum 0x42
    7. csum 0x42
    8. ~ld
    9.  
    10.  
    11. MQTT client started.
    12. Free heap = 31216
    13. Connecting via WiFi to MyFi...
    14.  
    15. Soft WDT reset
    16.  
    17. ctx: cont
    18. sp: 3fff1e60 end: 3fff22c0 offset: 01b0
    19.  
    20. >>>stack>>>
    21. 3fff2010:  0000001e 4000420c 60000200 3fff00c4  
    22. 3fff2020:  00000100 40004ac0 00000100 003fd000  
    23. 3fff2030:  00000100 3fff0004 3fffc718 003fd000  
    24. 3fff2040:  00000378 4000410f 40101528 00000378  
    25. 3fff2050:  3fff0004 000003fd 3fff0004 3fff4b08  
    26. 3fff2060:  3fffc718 3fff0004 00000378 00000000  
    27. 3fff2070:  003fd000 40211efb 00000378 3fff4b08  
    28. 3fff2080:  00001000 40211f85 3fff0004 000003ff  
    29. 3fff2090:  000003fd 00000000 003fd000 3fff0004  
    30. 3fff20a0:  ffffff00 ffffffff ffffffff ffffffff  
    31. 3fff20b0:  ffffffff ffffffff ffffffff 000003ff  
    32. 3fff20c0:  40211e24 00000003 3fff0fe4 3ffe96ac  
    33. 3fff20d0:  00000001 40211e52 00000003 3ffe96ac  
    34. 3fff20e0:  40203e08 00000000 00000000 00000000  
    35. 3fff20f0:  00000000 3ffe96a0 3fff0fe4 40203ed5  
    36. 3fff2100:  00000000 00000000 00000000 00000000  
    37. 3fff2110:  00000000 00000000 00000000 00000000  
    38. 3fff2120:  00000000 00000000 00000000 00000000  
    39. 3fff2130:  00000000 00000000 00000000 00000000  
    40. 3fff2140:  00000000 00000000 00000000 00000000  
    41. 3fff2150:  00000000 00000000 00000000 00000000  
    42. 3fff2160:  00000000 00000000 00000000 00000000  
    43. 3fff2170:  3fff37f0 40106da6 3fff222c 00000001  
    44. 3fff2180:  00000000 00000000 00000000 402079f6  
    45. 3fff2190:  3fff11c8 00000001 3ffe9b55 40207400  
    46. 3fff21a0:  3fff11c8 00000002 3ffe9562 3fff128c  
    47. 3fff21b0:  3ffe8344 00000003 3fff11c8 40206949  
    48. 3fff21c0:  3ffe9b54 3fff0fe4 3fff11c8 40206949  
    49. 3fff21d0:  00000000 00000001 3fff11c8 402074d4  
    50. 3fff21e0:  00000000 40203e58 3fff11c8 3fff128c  
    51. 3fff21f0:  3ffe8344 3fff0fe4 3fff11c8 40203631  
    52. 3fff2200:  3fff2220 00000001 3fff222a 40207601  
    53. 3fff2210:  3fff35e0 0000000e 3fff2290 40207a4e  
    54. 3fff2220:  3fff11c8 00000001 3ffe9b55 40207400  
    55. 3fff2230:  3fff1100 0000000b 3ffe930f 3fff128c  
    56. 3fff2240:  3fffdc20 00000005 3fff11c8 40206949  
    57. 3fff2250:  3ffe9b54 3fff0b08 3fff11c8 3fff128c  
    58. 3fff2260:  3fffdc20 3fff0b08 3fff11c8 402074d4  
    59. 3fff2270:  40206238 0000000a 3fff11c8 40207749  
    60. 3fff2280:  3fffdc20 3fff0b08 3fff11c8 40202f91  
    61. 3fff2290:  3fff3840 0000000f 00000000 3fff128c  
    62. 3fff22a0:  3fffdc20 00000000 3fff1285 40206ae5  
    63. 3fff22b0:  00000000 00000000 3fff12a0 40100114  
    64. <<<stack<<<
    65.  
    66.  ets Jan  8 2013,rst cause:2, boot mode:(3,7)
    67.  
    68. load 0x4010f000, len 1264, room 16
    69. tail 0
    70. chksum 0x42
    71. csum 0x42
    72. ~ld
    73.  
    74.  
    75. MQTT client started.
    76. Free heap = 31216
    77. Connecting via WiFi to MyFi...
    78.  
    79.  С


    Я уже не знаю куда рыть. Пробовал к разным роутерам подключить эфект оин и тотже
    Что я делаю не так?
    На форуме нашел что к питанию есп капризна.
    По питаню тестером проверил 3.15 - 3.17 вольт с подключной есп и 3.18 - 3.20 без есп
    Неужели ей этого мало?
     
  8. Victor

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

    Сообщения:
    2.188
    Симпатии:
    368
    нужно не только по напряжению требования соблюсти, но и по току.
    Убедитесь, что ваш источник питания выдает не менее 300мА под нагрузкой (если питаете от USB-TTL, то он точно не выдает столько)
    Лучше всего взять USB зарядку для телефона и подключить ESP8266 к ней через стабилизатор на 3,3в (чаще всего используют 1117)
    А так, на питание очень похоже: ESP8266 отваливается после включения WiFi (как раз когда резкое увеличение потребления идет)
    Ну и почитайте наши обсуждения про железные вопросы
     
  9. Сергей Булгаков

    Сергей Булгаков Новичок

    Сообщения:
    19
    Симпатии:
    2
    @Victor Спасибо большое за проделанную работу. Использую вашу программу с поднятым у меня на роутере брокером. На данный момент разбираюсь с виджетами. Все сложно идет без русского описания, можно сказать методом тыка :) Есть желание помочь проекту и сделать данное описание, но к сожалению пока сам не до конца разобрался... Есть пара вопросов:
    1. как в виджет "display-value" выводить дробное число?
    2. есть ли возможность выводить график (если нет, то планируется ли)?
     
  10. Victor

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

    Сообщения:
    2.188
    Симпатии:
    368
    Спасибо за отзыв!
    Просто отправляйте заранее отформатированную строку, например "123.456" (поддерживаются только цифры, пробел и точка)
    В следующей версии еще добавятся символы "°CF"
    пока нет, но будет, через d3
     
    Сергей Булгаков нравится это.
  11. Сергей Булгаков

    Сергей Булгаков Новичок

    Сообщения:
    19
    Симпатии:
    2
    Спасибо за очень быстрый ответ!
    формат "float"?
     
  12. Victor

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

    Сообщения:
    2.188
    Симпатии:
    368
    Нет, именно как строку. Выводятся просто символу по-порядку, что пошлете - то и будет.
     
  13. Сергей Булгаков

    Сергей Булгаков Новичок

    Сообщения:
    19
    Симпатии:
    2
    Ещё раз спасибо.
    Наберусь наглости и задам ещё вопрос. :)
    Даже не знаю как лаконично задать вопрос (по себе знаю, что в правильно заданном вопросе уже будет большая часть ответа)...

    В данный момент делаю все на основе Вашего первого примера.
    Лишнее (для меня в данный момент) я разобрался как убрать :)
    Оставил только три виджета "toggle" которые удачно управляют нужными светодиодами, да ещё и с нескольких телефонов...
    Но нужно добавить ещё управление с физических кнопок... Вот тут та я и застрял. Конфигурирую порт как вход, подтягиваю его к питанию, кнопку вешаю на массу (тут все отработано на ардуинке). Вопрос: куда вставить код опроса кнопки (при нажатии на кнопку (дребезг обрабатываем програмно) нужно:
    1. у брокера спросить текущее состояние светодиода;
    2. изменить состояние на противоположное;
    3. оповестит брокера о новом состоянии.

    код без обработки дребезга (раскрыть)
    Код (Text):
    1. if (digitalRead(knopka1)==0){
    2.     if (sub.payload_string() == "0") {
    3.        newValue = 1; // no inverted
    4.        stat[0] = stat0;
    5.     } else {
    6.        newValue = 0;
    7.        stat[0] = stat1;
    8.     }
    9.     digitalWrite(pin[0],newValue);
    10.     pubStatus(sTopic[0], stat[0]);
    11.   }

    так?
     
  14. Victor

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

    Сообщения:
    2.188
    Симпатии:
    368
    посмотрите еще третий пример - там используется ArduinoJSON и вроде более понятней
    а про кнопку - второй пример, там виджет power-button (это пока один на вход)
    1. не спрашивайте у брокера - он не знает, сохраняйте предыдущее состояние в переменной
    2. digitalWrite() - вам вообще не нужно, только читаем состояние
    3. да, отправляем состояние кнопки, если оно изменилось (см. п1)
    в принципе можно и не сохранять старое состояние, а отправлять на брокер, скажем каждую секунду
     
  15. Сергей Булгаков

    Сергей Булгаков Новичок

    Сообщения:
    19
    Симпатии:
    2
    А я так не заспамлю брокера? Наверное проще сохранять старое состояние в переменной.
    Может быть не совсем понятно объяснил. Нужно управлять светодиодом как из приложения, так и с помощью кнопки (кнопка не фиксируемая). На данный момент, получилось только управлять из приложения.
    П.С. я тут сейчас задумался, а возможно ли считать состояние пина который сконфигурирован как выход?
     
  16. Victor

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

    Сообщения:
    2.188
    Симпатии:
    368
    да, конечно
    то, что касается логики, то делайте все как обычно, просто не забывайте отсылать status, чтобы мобильное приложение знало, что у вас изменилось
    (я к тому, что digitalWrite() у вас в фрагменте скетча правильный )
    не, не стоит на это рассчитывать
     
  17. Сергей Булгаков

    Сергей Булгаков Новичок

    Сообщения:
    19
    Симпатии:
    2
    Спасибо большое, за активное участие! Потопал вникать в третий пример... Я вас ещё помучаю вопросами, но скорее всего позже :)
     
  18. Сергей Булгаков

    Сергей Булгаков Новичок

    Сообщения:
    19
    Симпатии:
    2
    Пожелание к приложению. Сделайте пожалуйста возможность сохранения нескольких конфигураций подключения к брокеру.
     
  19. Сергей Булгаков

    Сергей Булгаков Новичок

    Сообщения:
    19
    Симпатии:
    2
    Добрый день. Написал скетч и даже попытался его выложить на github правда не знаю на сколько у меня это получилось, т.к. делаю я это в первый раз...
    Краткое описание: esp8266 -01 опрашивает датчик давления BMT180, полученные данные (давление и температуру) отправляет брокеру. IoT Manager берет эти данные у брокера и отображает на экране мобильного телефона. Выглядит это примерно вот так:
    Скриншот экрана (раскрыть)
    Screenshot_2016-02-08-18-02-31_ru.esp8266.iotmanager.png

    Библиотека для BMP180 прикреплена внизу.
    Сам код (раскрыть)

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


    P.S. Хочу попросить разрешения, на публикацию статьи о данном приложении у себя на сайте.
     

    Вложения:

    • bmp085.rar
      Размер файла:
      28,2 КБ
      Просмотров:
      10
    Последнее редактирование: 8 фев 2016
  20. Victor

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

    Сообщения:
    2.188
    Симпатии:
    368
    Классно, мне нравится
    не получилось, по крайней мере, здесь нет. почитайте про pull request если есть желание научиться, если нет - скажите я залью сам, или залейте в свой собственный, я поставлю у себя ссылку на гитхабе. Только вот библиотеку лучше со ссылкой на автора (для обновлений)
    Да, разумеется. Если нужно в чем-то мое участие - без проблем, с удовольствием помогу.
     
Статус темы:
Закрыта.

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