MicroPython-Firmware schmirgeln (240er)

Ja, das läuft, cool!! Man kann also den Firmware-Namen der latest and greatest version per parameter mit übergeben, prima!

Top! @Andreas, auch quick connect geht:

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make connect-wifi ssid="sogar mit space geht" password=123viele
Entering REPL. Use Control-X to exit.
>
Pycom MicroPython 1.20.0.rc12 [v1.9.4-81167ed] on 2019-07-15; LoPy with ESP32
Type "help()" for more information.
>>>
>>> from mininet import MiniNet ; MiniNet().connect_wifi_sta('sogar mit space geht', '123viele')
INFO:  Starting MiniNet
INFO:  WiFi STA: Scanning for networks
INFO:  WiFi STA: Networks found ['DIRECT-xy47" Philips 6158', 'sogar mit space gehr', 'sogar mit space geht Gastzugang', 'FRITZ!Box 7490']
INFO:  WiFi STA: Connecting to "sogar mit space geht"
INFO:  WiFi STA: Connected to "sogar mit space geht"
INFO:  WiFi STA: Network configuration is ('192.168.178.23', '255.255.255.0', '192.168.178.1', '192.168.178.1')
INFO:  Ready.

INFO:  WiFi STA: IP address is 192.168.178.23

Note: Press CTRL+X or Ctrl+] to detach from the REPL

Exzellent ;].

@clemens: Thanks for checking out the new features arrived on master since your last pull the other day. Enjoy the ride and good luck.

Next stop "make recycle-ng"

$ time make recycle-ng

Device port: ip => 192.168.178.61
Uploading MicroPython code to device
lftp -u micro,python 192.168.178.61 < tools/upload-all.lftprc
lftp status: 0
Upload finished
Restart device using the HTTP API [y/n]?
INFO: Restarting device at IP address 192.168.178.61 using HTTP API
SUCCESS: Device restart acknowledged. Please wait some seconds for reboot.
Ready.

real	13m33.126s

To receive desktop notifications from Terkin Pinocchio [1] like outlined within the documentation of the MicroTerkin Agent, please have a look at Setup Terkin Pinocchio desktop notifications.

image

For Windows, this would be pip install zroya into the right environment(s) – eventually both the Windows-native one as well as the virtualenv-sandboxed one – like.

  • conda install zroya
  • .venv3/bin/pip install zroya

Along the lines

I am humbly asking you to verify accurateness of the canonical documentation recently spawned with Operate the MicroTerkin firmware sandbox while walking through the ng-steps you are currently invoking. Both posts over there are Wiki’ed, so you will be able to adjust them as you like.

I know these steps are still somehow involved and will need more pedantic review of their intended functionality as they just recently have been minted. However, we have been to the moon and all we got was this lousy spacesuit ;].

We tried hard to optimize on the naming things side during the most recent iterations along the lines of make help. If you feel we could do better, please drop us a note about a specific thing you would like to rename.

Thanks!


  1. Pinocchio accepts a ride from a dolphin to the nearest island called the Island of Busy Bees. Upon arriving on the Island of Busy Bees, Pinocchio can only get food in return for labor. Pinocchio offers to carry a lady’s jug home in return for food and water. When they get to the lady’s house, Pinocchio recognizes the lady as the Fairy.

    The Adventures of Pinocchio - Wikipedia ↩︎

For anyone wondering: This is not real yet but holds true for

  • lftp://exec => mirror --reverse --delete --use-cache terkin, see also the ng upload macro upload-all.lftprc.
  • Some lousy seconds waiting for the lazy operator to press y+ENTER after being prompted for Restart device using the HTTP API [y/n]?

Läuft unter Win / WSL wieder nicht!

statt make terkin-agent action=monitor mache ich in der Windows PowerShell

PS Microsoft.PowerShell.Core\FileSystem::\\wsl$\Ubuntu\home\cgruber\hiveeyes\sources\hiveeyes-micropython-firmware> python tools/terkin.py monitor
2019-07-22 23:30:56,727 [tools/terkin.py] INFO   : IP networks found: ['192.168.178.0/24']
2019-07-22 23:30:56,727 [tools/terkin.py] INFO   : Discovering devices already connected to IP network 192.168.178.0/24
2019-07-22 23:30:56,727 [tools/terkin.py] INFO   : Waiting for any devices having MAC address prefixes of ['30:ae:a4', '80:7d:3a'] to appear on your local network
2019-07-22 23:30:57,243 [tools/terkin.py] INFO   : Sending ARP ping request to 192.168.178.0/24

Du sagtest, dadurch soll eine Datei angelegt werden, oder war das wo anders?

Make console kann ich ja wieder in WSL machen, mit dem USB-Port als MCU_Port geht das auch

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make console
Device port: usb => /dev/ttyS16
Connecting via serial port /dev/ttyS16.
.venv3/bin/miniterm.py /dev/ttyS16 115200
--- Miniterm on /dev/ttyS16  115200,8,N,1 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---

Nur funktionieren die Tastatur-Shortcuts in WSL überhaupt nicht, komme gar nicht mehr raus, kann nur noch das Fenster komplett schließen.

Firmware updaten geht dann auch nicht, vermutlich weil die IP von terkin-agent action=monitor nirgends gespeichert ist, mache ich vorher:

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make recycle-ng
Device port: ip => 192.168.178.26
Uploading MicroPython code to device
  File "tools/terkin.py", line 52
    log.info(f'Hostname "{hostname}" found at IP address "{ip_address}"')
                                                                       ^
SyntaxError: invalid syntax
Makefile:174: recipe for target 'install-ng' failed
make: *** [install-ng] Error 1

Warum die IP 192.168.178.26, ist doch die 24 am Ende make recycle-ng 192.168.178.24 wirft aber die gleiche Fehlermeldung aus.

Vielen Dank fürs Testen.


Schade.


Das ist ein Indiz dafür, dass die verwendete Python3-Version zu alt ist oder das Programm gar noch unter Python2 läuft. Das hatten wir doch schonmal bei Dir – nicht?

Mögliche Lösung: Das Gerät innerhalb des WSL per python3 starten, falls dort beide Python-Versionen installiert sind.

Ich bekomme bei make setup

You are using pip version 19.0.3, however version 19.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

und wollte daraufhin schon mit pip install --upgrade pipupdaten,

da kommt aber

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# pip install --upgrade pip
/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/__init__.py:83: RequestsDependencyWarning: Old version of cryptography ([1, 2, 3]) may cause slowdown.
  warnings.warn(warning, RequestsDependencyWarning)
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
Requirement already up-to-date: pip in /usr/local/lib/python2.7/dist-packages (19.1.1)

Wir hatten das aber nativ unter Win und nicht im WSL!

Ist nicht schlimm.

Stimmt. Möglich. Stimmt. Möglich. Die Ursache ist aber vermutlich die gleiche.

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# python
Python 2.7.12 (default, Nov 12 2018, 14:36:49)
[GCC 5.4.0 20160609] on linux2

python3 ist auch drauf

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# python3
Python 3.5.2 (default, Nov 12 2018, 13:43:14)
[GCC 5.4.0 20160609] on linux

https://stackoverflow.com/questions/48524196/how-to-get-python-to-run-python-3-in-wsl-bash

To run python3 , you have to specify python3 on the CLI.

Das Python der Sandbox liegt unter .venv3/bin/python bzw. .venv3/bin/python3. Obwohl das Makefile Dir diese Arbeit eigentlich vollständig abnehmen sollte, kann Dir vielleicht eine “Aktivierung” des venvs per source .venv3/bin/activate weiterhelfen, bevor Du make recycle-ng aufrufst.

make recycle hat ja früher funktioniert, nun ist was anders mit recycle-ng??

Leider nicht, wenn ich das richtig gemacht habe

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# source .venv3/bin/activate
(.venv3) root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make recycle-ng
Device port: ip => 192.168.178.24
Uploading MicroPython code to device
  File "tools/terkin.py", line 52
    log.info(f'Hostname "{hostname}" found at IP address "{ip_address}"')
                                                                       ^
SyntaxError: invalid syntax
Makefile:174: recipe for target 'install-ng' failed
make: *** [install-ng] Error 1

Vielen Dank nochmals. make recycle sollte auf jeden Fall vorerst niemals terkin.py bemühen müssen. Das kam versehentlich wegen der Desktop Notifications rein und wurde gerade eben per Makefile: Suppress desktop notifications on Windows for now · hiveeyes/hiveeyes-micropython-firmware@f22c3ba · GitHub wieder behoben.

Happy recycling again!


P.S.: Leider klappte bei @clemens der FTP-Transfer auf diese Weise jedoch noch nicht out-of-the-box, da das unter Ubuntu/WSL installierte lftp in einer Version 4.6.3.0 vorlag, die mit den aktuellen Einstellungen aus upload-all.lftprc scheinbar nicht ordentlich gegen das Pycom Gerät arbeiten kann und blöde Fehler wirft, die wir nicht beheben konnten. Schade!

Wir haben uns dann damit beholfen, lftp über Chocolatey nativ unter Windows zu installieren.

choco install lftp

Mit der dadurch vorliegenden Version 4.8.0 klappt dann der Transfer, allerdings noch nicht automatisiert über das Make-Target "make install-ftp", sondern leider nur zu Fuß nach ein paar kleineren Anpassungen.

Fazit: Klappt in der Theorie und Praxis, allerdings leider nicht so wie geplant. Daher nun der Seitenblick hin zu Entwicklungsversion der Datenlogger-Firmware direkt in Atom/Pymakr nutzen.

Warum kann ich über die Serielle Schnittstelle nun nicht mehr updaten?

root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# export MCU_PORT=/dev/ttyS16
root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make install
Device port: usb => /dev/ttyS16
.venv3/bin/rshell --port /dev/ttyS16 --user micro --password python --buffer-size 2048 --quiet mkdir /flash/dist-packages

Nachdem minutenlan nichts passierte habe ich mit

^X^C abgebrochen

Traceback (most recent call last):
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1255, in connect
    ip_address = socket.gethostbyname(port)
socket.gaierror: [Errno -2] Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ".venv3/bin/rshell", line 10, in <module>
    sys.exit(main())
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/command_line.py", line 4, in main
    rshell.main.main()
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 2843, in main
    real_main()
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 2805, in real_main
    connect(args.port, baud=args.baud, wait=args.wait, user=args.user, password=args.password)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1261, in connect
    connect_serial(port, baud=baud, wait=wait)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1285, in connect_serial
    dev = DeviceSerial(port, baud, wait)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/main.py", line 1553, in __init__
    data = pyb.read_until(1, b'>>> ', timeout=0.1)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/rshell/pyboard.py", line 154, in read_until
    data = self.serial.read(min_num_bytes)
  File "/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware/.venv3/lib/python3.5/site-packages/serial/serialposix.py", line 483, in read
    ready, _, _ = select.select([self.fd, self.pipe_abort_read_r], [], [], timeout.time_left())
KeyboardInterrupt
Makefile:191: recipe for target 'install-requirements' failed
make: *** [install-requirements] Error 1

Funkt da die IP-basierte Variante dazwischen? Ich kann so nicht testen, weil ich die aktuelle Firmware gerade nicht aufs Gerät bekommen.

Gleiches bei make recycle und make list-boards

Vermutlich hat sie sich wieder aufgehängt.

Es ging jetzt, hast du das logging abgespeckt? Früher war mehr output, das hat mich verwirrt, es kamen nur Fehlermeldungen, dass Verzeichnisse nicht angelegt werden konnten.

Das sind nur Meldungen von der Dateiübertragung auf das Gerät, vermute ich. Das ist nicht die Logausgabe auf dem Terminal des Geräts.

Es gibt ein paar neue Optionen, um das Logging abzuschalten. Wenn Du diese nicht bemüht hast, sollte eigentlich alles gut funktionieren. Vielleicht hast Du aber genau in diesem Bereich einen weiteren Fehler entdeckt.

Ich habe

    # Enable or disable logging completely.
    'enabled': True,

    # Log configuration settings at system startup.
    'configuration': True,

Früher kam doch epoch time und nochmal epoch time das kommt jetzt nicht mehr.

make install liefert nun das als log
root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-micropython-firmware# make install
Device port: usb => /dev/ttyS16
.venv3/bin/rshell --port /dev/ttyS16 --user micro --password python --buffer-size 2048 --quiet mkdir /flash/dist-packages
.venv3/bin/rshell --port /dev/ttyS16 --user micro --password python --buffer-size 2048 --quiet rsync dist-packages /flash/dist-packages
.venv3/bin/rshell --port /dev/ttyS16 --user micro --password python --buffer-size 2048 --quiet --file tools/upload-framework.rshell
.venv3/bin/rshell --port /dev/ttyS16 --user micro --password python --buffer-size 2048 --quiet --file tools/upload-sketch.rshell
root@XPS13-CGruber:/home/cgruber/hiveeyes/sources/hiveeyes-

und make recycle das:

micropython-firmware# make recycle
Device port: usb => /dev/ttyS16
.venv3/bin/rshell --port /dev/ttyS16 --user micro --password python --buffer-size 2048 --quiet --file tools/upload-framework.rshell
Unable to create /flash/lib/terkin
Unable to create /flash/lib/hiveeyes
.venv3/bin/rshell --port /dev/ttyS16 --user micro --password python --buffer-size 2048 --quiet --file tools/upload-sketch.rshell
Entering REPL. Use Control-X to exit.
>
Pycom MicroPython 1.20.0.rc12 [v1.9.4-81167ed] on 2019-07-15; LoPy with ESP32
Type "help()" for more information.
>>>
>>> import machine ; machine.reset()
ets Jun  8 2016 00:22:57

rst:0x7 (TG0WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff8028,len:8
load:0x3fff8030,len:2156
ho 0 tail 12 room 4
load:0x4009fa00,len:19208
entry 0x400a05f4
Initializing filesystem as LittleFS!
Traceback (most recent call last):
  File "main.py", line 31, in <module>
  File "/flash/lib/hiveeyes/datalogger.py", line 14, in <module>
  File "/flash/lib/terkin/datalogger.py", line 11, in <module>
  File "/flash/lib/terkin/configuration.py", line 9, in <module>
  File "dist-packages/dotty_dict/__init__.py", line 2, in <module>
  File "dist-packages/dotty_dict/dotty_dict.py", line 3, in <module>
  File "dist-packages/collections/__init__.py", line 6, in <module>
ImportError: cannot import name OrderedDict
Pycom MicroPython 1.20.0.rc12 [v1.9.4-81167ed] on 2019-07-15; LoPy with ESP32
Type "help()" for more information.
>>>

Lässt cannot import name OrderedDict auf einen Fehler in meiner settings.py schließen?

rshell verboseness

Ja, an dieser Stelle ist die Ausgabe nun etwas weniger verbose als früher. Ändern kannst Du es, indem Du in der Datei tools/micropython.mk hinten den Parameter --quiet entfernst, sowie ggf. auch wieder --timing hinzufügst.

$(eval rshell_options  := --port $(mcu_port) --user micro --password python --buffer-size $(mcu_transfer_buffer) --quiet)

Broken dependencies

Problem

Das weist darauf hin, dass irgendetwas bei den Abhängigkeiten kaputtgegangen ist.

Analyse

Während die Datei collections/__init__.py auf meiner Workstation noch völlig in Ordnung ist, hat jener commit, der gerade gestern reinkam, unsere Geschichte wohl kurzzeitig in Mitleidenschaft gezogen.

Bummer. Will fix this.

Das sollte nun wieder heile sein.

Please invoke these commands to heal your local sandbox.

git pull
make setup
make recycle-ng

Die Ursache war, dass der Autor Änderungen an der Bibliothek pycopy-collections vorgenommen hatte, die für das Pycom-Ökosystem inkompatibel waren und wir derzeit aufgrund von Mängeln im upip package installer nicht die genaue Version eines abhängigen Pakets in der Beschreibungsdatei requirements-mpy.txt entsprechend “pinnen” können.


P.S.: Ping @weef re. Python package pinning bei Erschließung von Annotationen im Grafana per "grafannotate" - #13 by weef.

1 Like