• Приветствуем вас на MyAmazFit.ru!
    У нас вы можете:
    • Получить квалифицированную помощь.
    • Скачать эксклюзивные прошивки.
    • Скачать модифицированные шрифты.
    • Скачать лучшие циферблаты.
    • Найти много всего интересного для своих умных устройств.

    Перед регистрацией рекомендуем ознакомиться с Правилами форума.

    Если у вас возникли проблемы с регистрацией или вы не получили письмо с подтверждением, сообщите нам, и мы активируем вашу учетную запись вручную.

Общение Замена данных о погоде

AMSUser

Разработчик
Команда форума
Сообщения
190
Симпатии
277
Баллы
68
Ваше "умное" устройство
Amazfit Bip
#1
Пытаюсь ковырять получение данных о погоде в Мифит и изменение их значений.
Нашел в классе com.xiaomi.hm.health.r.j метод, который получает текущую погоду с серверов Xiaomi:

Java:
    private static String b() {
        return "https://weatherapi.market.xiaomi.com/wtr-v3/weather/current?appKey=watch20161010&sign=j9PMzsOIAw0bN8eE";
    }

    static com.xiaomi.hm.health.r.a.e a(String str, boolean z) {
        HashMap hashMap = new HashMap();
        hashMap.put("locationKey", str);
        hashMap.put("isGlobal", Boolean.toString(z));
        hashMap.put("locale", g());
        Object a = a(b(), hashMap);
        if (!TextUtils.isEmpty(a)) {
            try {
                return (com.xiaomi.hm.health.r.a.e) new e().a(a, com.xiaomi.hm.health.r.a.e.class);
            } catch (Exception e) {
                a.c("WeatherWebAPI", "getWeatherRealtime:" + e.getMessage());
            }
        }
        return null;
    }
   
    private static String a(final String str, HashMap<String, String> hashMap) {
        final StringBuilder stringBuilder = new StringBuilder();
        a.get(str, new RequestParams(hashMap), new AsyncHttpResponseHandler() {
            public void onSuccess(int i, Header[] headerArr, byte[] bArr) {
                a.c("WeatherWebAPI", "=========================onSuccess=========================");
                a.c("WeatherWebAPI", "url            : " + str);
                a.c("WeatherWebAPI", "statusCode     : " + i);
                if (!(i == 200 || a.a() == null)) {
                    com.huami.mifit.a.a.a(a.a(), "Weather_Request_Fail", String.valueOf(i));
                }
                try {
                    stringBuilder.append(new String(bArr));
                    a.d("WeatherWebAPI", "responseBody   : " + stringBuilder.toString());
                } catch (Exception e) {
                    a.c("WeatherWebAPI", "exception      : " + e.getMessage());
                }
                a.c("WeatherWebAPI", "=========================onSuccess=========================");
            }

            public void onFailure(int i, Header[] headerArr, byte[] bArr, Throwable th) {
                a.c("WeatherWebAPI", "=========================onFailure=========================");
                a.c("WeatherWebAPI", "url            : " + str);
                a.c("WeatherWebAPI", "statusCode     : " + i);
                a.c("WeatherWebAPI", "error          : " + th.getMessage());
                a.c("WeatherWebAPI", "=========================onFailure=========================");
                if (a.a() != null) {
                    com.huami.mifit.a.a.a(a.a(), "Weather_Request_Fail", String.valueOf(i));
                }
            }
        });
        return stringBuilder.toString();
    }
Как видно, метод a возвращает строку с результатом обращения к

Пожалуйста войдите или зарегистрируйтесь для просмотра скрытого текста.


Выхлоп в таком виде:
JSON:
{
   "feelsLike":{
      "unit":"℃",
      "value":"-0.4"
   },
   "humidity":{
      "unit":"%",
      "value":"51"
   },
   "pressure":{
      "unit":"mb",
      "value":"1011.3"
   },
   "pubTime":"2018-05-03T10:20:00-07:00",
   "temperature":{
      "unit":"℃",
      "value":"2"
   },
   "uvIndex":"1",
   "visibility":{
      "unit":"km",
      "value":""
   },
   "weather":"1",
   "wind":{
      "direction":{
         "unit":"°",
         "value":"203"
      },
      "speed":{
         "unit":"km/h",
         "value":"13.6"
      }
   }
}
Заменил с помощью xposed значение температуры. В отладке я вижу, что выхлоп метода изменилсятак как мне надо. Но на часах я все равно вижу погоду, которая пришла от сервера Xiaomi. Спрашивается какого фига. Может я не там копаю? Вообщем, хотелось бы услышать мнение компетентных людей.
Сообщения автоматически объединены:

Так пока отбой. :biggrin:Похоже мой код где-то сбоит. Обрезал "сложный" код получения данных с Яндекса и записал значение 100 напрямую в выхлоп. На часах увидел тоже 100. Ну по крайне мере буду знать, что место правильное. Тему можно удалить..
 
Последнее редактирование модератором:

SantaX

Разработчик
Команда форума
Сообщения
120
Симпатии
795
Баллы
148
Ваше "умное" устройство
Amazfit Bip
#2
@AMSUser, в отладке это где? знаю точно что запрос и ответ есть в mili_log.txt, если получится, можно будет попробовать вывести влажность и/или ветер. Пока в окно с погодой в меню, не в циферблат.
 

AMSUser

Разработчик
Команда форума
Сообщения
190
Симпатии
277
Баллы
68
Ваше "умное" устройство
Amazfit Bip
#3
В лог пишу.
если получится, можно будет попробовать вывести влажность и/или ветер
Ну круто!
PS. Я свою проблему решил. Данные с Яндекса получаю и заменяю ими ответы от серверов Xiaomi.
Сообщения автоматически объединены:

При получение прогноза погоды сервер Xiaomi отдает один из таких кусков:
JSON:
"weather":{ 
      "status":0,
      "value":[ 
         { 
            "from":"4",
            "to":"1"
         },
         { 
            "from":"4",
            "to":"1"
         },
         { 
            "from":"0",
            "to":"1"
         },
         { 
            "from":"1",
            "to":"2"
         },
         { 
            "from":"1",
            "to":"1"
         }
      ]
   }
Если я правильно понимаю, прогноз, который мы видим на часах, типа Облачно -> Солнечно?
Может кто знает, где лежат описания этих значений, чтобы самому не копаться? :biggrin:
 
Последнее редактирование:

deboshir

Новичок
Сообщения
1
Симпатии
0
Баллы
11
#5
Господа, а можно давление из будильника вообще убрать и засунуть его в погоду? Сори, если оффтоп.
 

chich

Новичок
Сообщения
34
Симпатии
12
Баллы
18
#8
после этого погода будет всегда работать и опираться на сервера яндекса а не китайского сервиса?
 

laker8906

Новичок
Сообщения
44
Симпатии
29
Баллы
23
Ваше "умное" устройство
Amazfit Bip
#9
@chich, у меня всегда текущая на вотчфейсе работает от яндекса
 
Сверху Снизу