Aktualizacja firmware online

User avatar
lesny8
Posts: 3132
Joined: Mon Dec 11, 2017 9:43 pm
Has thanked: 10 times
Been thanked: 9 times

Post

lesny8 wrote: Mon Aug 27, 2018 11:28 pm Skompilowałem pakiet nettle i zainstalowkałem
Pobrałem supla-esp-signtool skompilowałem i próbowałem wygenerować klucz, ale dostaje taki błąd

Kod: Zaznacz cały

~/SUPLA/supla-esp-signtool-master/Release$ ./supla-esp-sigtool -k klucz -g
./supla-esp-sigtool: relocation error: ./supla-esp-sigtool: symbol mpz_set_ui, version HOGWEED_4 not defined in file libhogweed.so.4 with link time reference

Próbowałem, różne wersje nettle, myślałem, że to może tu tkwi przyczyna, ale za każdym razem dostaję to samo :(
Poradziłem sobie z tym błędem.
Konfigurowałem wszystkie testowane wersje nettle z opcją --enable-mini-gmp i instalacja przechodziła, ale niestety próba użycia już wywoływała błąd jak w poprzednim poście. Doinstalowałem zatem libgmp-dev by nie używać tej opcji i znalazłem w dokumentacji jakie są rekomendowane flagi dla linkera dla aplikacji używających publicznego klucza.Zmodyfikowałem linker i w końcu mogłem wygenerować klucze, wystarczyło się przespać i do tematu podejść jeszcze raz :D

Zacząłem cieszyć się jak dziecko na widok lizaka, ale napotkałem kolejne trudności :(
Skompilowałem soft z ustawioną wartością

Code: Select all

#define SUPLA_ESP_SOFTVER "2.7.0"
i wgrałem user1 do modułu na adres 0x01000, potem zmieniłem wartość w źródłach

Code: Select all

#define SUPLA_ESP_SOFTVER "2.7.2"
i skompilowałem ponownie tym razem wygenerowałem oba pliki user1 i user2, podpisałem, zweryfikowałem i są podpisane, wypchnąłem na serwer www.
Na serwerze utworzyłem plik ze skryptem w php, żeby wymuszał pobieranie, po wpisaniu ścieżki. Przetestowałem na kompie w przeglądarce, pobieranie plików rozpoczyna się.
Dodałem wpisy odpowiednio do tabeli esp_update.
Skonfigurowałem moduł, podpiął się do Clouda.
Wszedłem w tryb konfiguracji Firmware update = Yes
Zapisałem i wyszedłem.

W terminalu niestety nic nadzwyczajnego się nie zadziało. Soft sie nie pobrał i nie zaktualizował. Zacząłem szukać po kolei funkcji wywoływanych w procesie aktualizacji.
Doszedłem zdejmując komentarz z loga do tego, że w funkcji supla_esp_update_url_result w przekazywanej do niej strukturze url_result zmienna exists =0 i dlatego nie idzie dalej

Code: Select all

Firmware -- exists = 0, host = , port = 0, path = 
Tak jakby nie znalazł w bazie wpisów dla tego softu?
Device_name jest kropka w kropke wersja na bazie jest wyższa, może brakuje mi w bazie jeszcze jakiejś procedury, albo jakiejś zmiennej w definicji płytki?
Kopię się z tym już 3 dzień i nic, przespanie się tym razem nie pomogło :(
Chciałem na koniec zrobić tutka dla wszystkich ale ostatni puzel mi został.

Mistrzu pomóż proszę. Co może być jeszcze nie tak?
SOP 2023 :heavy_check_mark:
SOP 2024 :heavy_check_mark:
Czekam na kolejne Supla Offline Party :upside_down_face:
🧩: 🔑cz->b ⛴️+ila
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

Co masz w procedurze sql supla_get_device_firmware_url ?
SUPLA.... Nareszcie w domu.
User avatar
lesny8
Posts: 3132
Joined: Mon Dec 11, 2017 9:43 pm
Has thanked: 10 times
Been thanked: 9 times

Post

Kurde nie mogę wyświetlić

Code: Select all

ERROR 1289 (HY000) at line 1: The 'SHOW PROCEDURE|FUNCTION CODE' feature is disabled; you need MySQL built with '--with-debug' to have it working
ale kiedyś podawałeś mi gdzie jest definicja przy okazji aktualizacji dla ROW i to stamtąd wziąłem.
SOP 2023 :heavy_check_mark:
SOP 2024 :heavy_check_mark:
Czekam na kolejne Supla Offline Party :upside_down_face:
🧩: 🔑cz->b ⛴️+ila
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

Gdybyś nie miał

Code: Select all

DELIMITER $$
--
-- Procedures
--
DROP PROCEDURE IF EXISTS `supla_get_device_firmware_url`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `supla_get_device_firmware_url` (IN `device_id` INT, IN `platform` TINYINT, IN `fparam1` INT, IN `fparam2` INT, IN `fparam3` INT, IN `fparam4` INT, OUT `protocols` TINYINT, OUT `host` VARCHAR(100), OUT `port` INT, OUT `path` VARCHAR(100))  NO SQL
BEGIN

SET @protocols = 0;
SET @host = '';
SET @port = 0;
SET @path = '';

SET @fparam1 = fparam1;
SET @fparam2 = fparam2;
SET @platform = platform;
SET @device_id = device_id;

INSERT INTO `esp_update_log`(`date`, `device_id`, `platform`, `fparam1`, `fparam2`, `fparam3`, `fparam4`) VALUES (NOW(),device_id,platform,fparam1,fparam2,fparam3,fparam4);

SELECT u.`protocols`, u.`host`, u.`port`, u.`path` INTO @protocols, @host, @port, @path FROM supla_iodevice AS d, esp_update AS u WHERE d.id = @device_id AND u.`platform` = @platform AND u.`fparam1` = @fparam1 AND u.`fparam2` = @fparam2 AND u.`device_name` = d.name AND u.`latest_software_version` != d.`software_version` AND 

(
version_to_int(d.`software_version`) = 0 OR
version_to_int(u.`latest_software_version`) = 0 OR
version_to_int(u.`latest_software_version`) > version_to_int(d.`software_version`)
)

AND

( u.`device_id` = 0 OR u.`device_id` = device_id ) LIMIT 1;


SET protocols = @protocols;
SET host = @host;
SET port = @port;
SET path = @path;

END$$


DROP FUNCTION IF EXISTS `version_to_int`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `version_to_int` (`version` VARCHAR(10)) RETURNS INT(11) NO SQL
BEGIN
DECLARE result INT DEFAULT 0;
DECLARE n INT DEFAULT 0;
DECLARE m INT DEFAULT 0;
DECLARE dot_count INT DEFAULT 0;
DECLARE last_dot_pos INT DEFAULT 0;
DECLARE c VARCHAR(1);

WHILE n < LENGTH(version) DO
    SET n = n+1;
    SET c = SUBSTRING(version, n, 1);
    
    IF c <> '.' AND ( ASCII(c) < 48 OR ASCII(c) > 57 )
      THEN 
         SET result = 0;
         RETURN 0;
      END IF; 
      
    
   IF c = '.' THEN
     SET dot_count = dot_count+1;
     IF dot_count > 2 THEN 
        SET result = 0;
        RETURN 0;
     END IF;
   END IF;

   IF c = '.' OR n = LENGTH(version) THEN

      SET m = n-last_dot_pos-1;
      
      IF c <> '.' THEN
        SET m = n-last_dot_pos;
        SET dot_count = dot_count+1;
      END IF;
      
          SET result = result + POWER(10, 9-dot_count*3) * SUBSTRING(version, last_dot_pos+1, m);
      
      SET last_dot_pos = n;
   END IF;
      
END WHILE;
RETURN result;
END$$

DELIMITER ;
SUPLA.... Nareszcie w domu.
User avatar
Espablo
Posts: 1754
Joined: Wed Jun 29, 2016 5:04 pm
Location: Oświęcim

Post

lesny8 wrote: Mon Aug 27, 2018 11:28 pm
Skompilowałem pakiet nettle i zainstalowkałem
Pobrałem supla-esp-signtool skompilowałem i próbowałem wygenerować klucz, ale dostaje taki błąd

Code: Select all

~/SUPLA/supla-esp-signtool-master/Release$ ./supla-esp-sigtool -k klucz -g
./supla-esp-sigtool: relocation error: ./supla-esp-sigtool: symbol mpz_set_ui, version HOGWEED_4 not defined in file libhogweed.so.4 with link time reference
Próbowałem, różne wersje nettle, myślałem, że to może tu tkwi przyczyna, ale za każdym razem dostaję to samo :(
Ja zawiesiłem się na tym etapie. Mam zainstalowany libgmp-dev. Kompilacja nettle z opcją --enable-mini-gmp daje mi taki sam komunikat jak powyżej. Jeśli natomiast skompiluję nettle bez tej opcji to przy kompilacji supla-esp-sigtool dostaję taki błąd

Code: Select all

Finished building: ../src/sigtool.c
 
Building target: supla-esp-sigtool
Invoking: Cross GCC Linker
gcc  -o "supla-esp-sigtool"  ./src/sigtool.o   -lhogweed -lnettle
/usr/bin/x86_64-linux-gnu-ld: ./src/sigtool.o: undefined reference to symbol '__gmpz_init'
//usr/lib/x86_64-linux-gnu/libgmp.so.10: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
makefile:30: recipe for target 'supla-esp-sigtool' failed
make: *** [supla-esp-sigtool] Error 1
Możesz opisać krok po kroku co robiłeś?
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
User avatar
lesny8
Posts: 3132
Joined: Mon Dec 11, 2017 9:43 pm
Has thanked: 10 times
Been thanked: 9 times

Post

Espablo wrote: Fri Aug 31, 2018 7:46 pm Możesz opisać krok po kroku co robiłeś?
Tak chciałem, ale nie mogę do końca dobrnąć.

Dopisz w pliku objects.mk na końcu -lgmp

Code: Select all

nano objects.mk
tak ma to wyglądać

Code: Select all

################################################################################
# Automatically-generated file. Do not edit!
################################################################################

USER_OBJS :=

LIBS := -lhogweed -lnettle -lgmp
zapisz i wróć do kompilacji sigtool

Code: Select all

make clean
make
powinno się skompilować bez błędu.
pzygmunt wrote: Fri Aug 31, 2018 7:03 pmGdybyś nie miał
Przemku sprawdziłem czy mam esp_update_log i miałem, a w tabeli takie logi

Code: Select all

date	device_id	platform	fparam1	fparam2	fparam3	fparam4
2018-03-29 17:26:03	32	1	5	0	0	0
2018-03-29 17:31:59	31	1	5	0	0	0
.....
2018-08-31 19:47:58	1075	1	4	0	0	0
kropkami zastąpiłem moje próby, dwa pierwsze są z update ROW w marcu a ostatni z próby dzisiejszej. fparam1=4 czy to nie to?
W esp_update fparam1 zdefiniowany mam na 5, ale od czego to jest?
SOP 2023 :heavy_check_mark:
SOP 2024 :heavy_check_mark:
Czekam na kolejne Supla Offline Party :upside_down_face:
🧩: 🔑cz->b ⛴️+ila
User avatar
Espablo
Posts: 1754
Joined: Wed Jun 29, 2016 5:04 pm
Location: Oświęcim

Post

no nareszcie jakiś postęp @lesny8 DZIEKI :D
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu. :? :roll:
User avatar
lesny8
Posts: 3132
Joined: Mon Dec 11, 2017 9:43 pm
Has thanked: 10 times
Been thanked: 9 times

Post

lesny8 wrote: Fri Aug 31, 2018 8:20 pm param1 zdefiniowany mam na 5, ale od czego to jest?
To już wiem od czego to jest

Code: Select all

params.Param1 = system_get_flash_size_map();
tylko czemu jest 4 a nie 5?

w build.sh mam ustawione dla definicji plytki

Code: Select all

   "myown")
     FLASH_SIZE="2048"
     FOTA=1
no i dalej w skrypcie jest

Code: Select all

case $FLASH_SIZE in
   "512")
    "512 flash size is not supported"
    exit 0
   ;;
   "2048")
     SPI_SIZE_MAP=3
   ;;
   "4096")
     SPI_SIZE_MAP=4
   ;;
   *)
     FLASH_SIZE="1024"
     SPI_SIZE_MAP=2
   ;;
esac
a pozniej jest

Code: Select all


if [ "$FOTA" -eq 1 ]; then

  APP=1

  if [ "user2" = "$2" ]; then
   APP=2
  fi

  case $FLASH_SIZE in
      "1024")
       CFG_SECTOR=0x7C
       ;;
      "2048")
        SPI_SIZE_MAP=5
        CFG_SECTOR=0xFC
      ;;
      "4096")
        SPI_SIZE_MAP=6
        CFG_SECTOR=0xFC
      ;;
  esac
  
no to jak mam ustawione na 2048, to czemu wychodzi 4, a nie 5?
SOP 2023 :heavy_check_mark:
SOP 2024 :heavy_check_mark:
Czekam na kolejne Supla Offline Party :upside_down_face:
🧩: 🔑cz->b ⛴️+ila
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

To jakich parametrów przy flashowaniu używasz ma na to wpływ. Zerknij sobie do dokumentacji Esspressifa (nonos iot sdk)
SUPLA.... Nareszcie w domu.
User avatar
lesny8
Posts: 3132
Joined: Mon Dec 11, 2017 9:43 pm
Has thanked: 10 times
Been thanked: 9 times

Post

pzygmunt wrote: Fri Aug 31, 2018 8:57 pm To jakich parametrów przy flashowaniu używasz ma na to wpływ. Zerknij sobie do dokumentacji Esspressifa (nonos iot sdk)
Eureka
Tu był pies pogrzebany. To, że kompiluje z mapą 2048 tj 5 czyli 16Mbit(1024KB+1024KB), nie oznacza, że z taką mapą wgrywałem, a wgrywałem z parametrem -fs 4MB czyli mapa 32Mbit(512KB+512KB). Jak popatrzyłem w te papiery to w końcu to do mnie dotarło, że w nazwie firmware po coś ta 5 jest :) żeby wiedzieć jak ustawić esptoola albo inny flasher :) Nie ważne ile masz pamięci w module, ważne z jaką skompilowany był firmware i z taką trzeba flashować i odpowiednio esp_init_data_default.bin wrzucić.
Musiałem użyć -fs 2MB-c1
Wszystko pięknie się pobrało i zaktualizowało.

Dzięki Mistrzu za wskazówki.
Espablo wrote: Fri Aug 31, 2018 8:54 pm no nareszcie jakiś postęp @lesny8 DZIEKI :D
a ja składam ukłon w stronę Przemka ;) i jeszcze raz Dziękuję.

P.S.
Zbiorę wszystko do kupy i opiszę w FAQ
SOP 2023 :heavy_check_mark:
SOP 2024 :heavy_check_mark:
Czekam na kolejne Supla Offline Party :upside_down_face:
🧩: 🔑cz->b ⛴️+ila

Return to “Pomoc”