Yio Remote Community

Development Environment

@zehnm

I created the buildroot successfully on Ubuntu 19.10 with Qt 5.12.8.
When setting up the QtCreator for the Raspberry Pi I got this problems :

I added the Qt version from the buildroot and got:

When adding the compilers I got this problem (ABI was not set, and I can’t set it) :

RPi Debugger and Device definition was successfull. When I tried to configure Kit “RPi Crosscompile” I also get an error because RPI g++ is not
identified as compiler for ARM.

The difference to your recipe in the documentation wiki is that I use Qt 5.12.8 (instead of .6) and my user name is ric instead of yio.

Do you have an idea ?

Looks like the arm toolchain is missing.
Could you successfully compile the toolchain in remote-os with make SKIP_BUILD_IMAGE=y?

@zehnm

Following “Setup Buildroot” in the YIO Wiki I successfully executed

make SKIP_BUILD_IMAGE=y

After this step rpi0/output contains the generated build, host, target subdirectories.

One thing looks strange for me, the buildroot C++ compiler
“arm-buildroot-linux-gnueabthf-g++” links to “toolchain-wrapper” . Is it correct ?

What can be missing ?

Let’s check the Buildroot’s host qmake configuration. Your qmake configuration should be identical, with your home directory:

~/projects/yio/remote-os$ rpi0/output/host/bin/qmake -v

QMake version 3.1
Using Qt version 5.12.4 in /home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib


~/projects/yio/remote-os$ rpi0/output/host/bin/qmake -query
qmake properties
    QT_SYSROOT:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot
    QT_INSTALL_PREFIX:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr
    QT_INSTALL_PREFIX/raw:/usr
    QT_INSTALL_ARCHDATA:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr
    QT_INSTALL_ARCHDATA/raw:/usr
    QT_INSTALL_DATA:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr
    QT_INSTALL_DATA/raw:/usr
    QT_INSTALL_DOCS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/doc
    QT_INSTALL_DOCS/raw:/usr/doc
    QT_INSTALL_HEADERS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include/qt5
    QT_INSTALL_HEADERS/raw:/usr/include/qt5
    QT_INSTALL_LIBS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib
    QT_INSTALL_LIBS/raw:/usr/lib
    QT_INSTALL_LIBEXECS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/libexec
    QT_INSTALL_LIBEXECS/raw:/usr/libexec
    QT_INSTALL_BINS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/bin
    QT_INSTALL_BINS/raw:/usr/bin
    QT_INSTALL_TESTS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/tests
    QT_INSTALL_TESTS/raw:/usr/tests
    QT_INSTALL_PLUGINS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/qt/plugins
    QT_INSTALL_PLUGINS/raw:/usr/lib/qt/plugins
    QT_INSTALL_IMPORTS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/imports
    QT_INSTALL_IMPORTS/raw:/usr/imports
    QT_INSTALL_QML:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/qml
    QT_INSTALL_QML/raw:/usr/qml
    QT_INSTALL_TRANSLATIONS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/translations
    QT_INSTALL_TRANSLATIONS/raw:/usr/translations
    QT_INSTALL_CONFIGURATION:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr
    QT_INSTALL_CONFIGURATION/raw:/usr
    QT_INSTALL_EXAMPLES:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/qt/examples
    QT_INSTALL_EXAMPLES/raw:/usr/lib/qt/examples
    QT_INSTALL_DEMOS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/qt/examples
    QT_INSTALL_DEMOS/raw:/usr/lib/qt/examples
    QT_HOST_PREFIX:/home/mzehnder/projects/yio/remote-os/rpi0/output/host
    QT_HOST_DATA:/home/mzehnder/projects/yio/remote-os/rpi0/output/host
    QT_HOST_BINS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/bin
    QT_HOST_LIBS:/home/mzehnder/projects/yio/remote-os/rpi0/output/host/lib
    QMAKE_SPEC:linux-g++
    QMAKE_XSPEC:devices/linux-buildroot-g++
    QMAKE_VERSION:3.1
    QT_VERSION:5.12.4

My Buildroot’s host/bin output looks like:

$ ll ~/projects/yio/remote-os/rpi0/output/host/bin/
Output
total 180952
drwxr-xr-x  2 mzehnder mzehnder    12288 Mai 17 20:52 ./
drwxr-xr-x 14 mzehnder mzehnder     4096 Mai 17 20:49 ../
-rwxr-xr-x  1 mzehnder mzehnder      145 Mai 17 20:43 2to3*
-rwxr-xr-x  1 mzehnder mzehnder      145 Mai 17 20:32 2to3-3.7*
-rwxr-xr-x  2 mzehnder mzehnder    36942 Mai 17 20:31 aclocal*
-rwxr-xr-x  2 mzehnder mzehnder    36942 Mai 17 20:31 aclocal-1.15*
-rwxr-xr-x  1 mzehnder mzehnder     2668 Mai 17 20:47 amuFormat.sh*
-rwxr-xr-x  1 mzehnder mzehnder  1073760 Mai 17 20:26 arm-buildroot-linux-gnueabihf-addr2line*
-rwxr-xr-x  1 mzehnder mzehnder  1103224 Mai 17 20:26 arm-buildroot-linux-gnueabihf-ar*
-rwxr-xr-x  1 mzehnder mzehnder  2014520 Mai 17 20:26 arm-buildroot-linux-gnueabihf-as*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-buildroot-linux-gnueabihf-c++ -> toolchain-wrapper*
-rwxr-xr-x  2 mzehnder mzehnder  1383120 Mai 17 20:30 arm-buildroot-linux-gnueabihf-c++.br_real*
-rwxr-xr-x  1 mzehnder mzehnder  1068736 Mai 17 20:26 arm-buildroot-linux-gnueabihf-c++filt*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-buildroot-linux-gnueabihf-cc -> toolchain-wrapper*
-rwxr-xr-x  3 mzehnder mzehnder  1383040 Mai 17 20:30 arm-buildroot-linux-gnueabihf-cc.br_real*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-buildroot-linux-gnueabihf-cpp -> toolchain-wrapper*
-rwxr-xr-x  1 mzehnder mzehnder  1383080 Mai 17 20:30 arm-buildroot-linux-gnueabihf-cpp.br_real*
-rwxr-xr-x  1 mzehnder mzehnder    46256 Mai 17 20:26 arm-buildroot-linux-gnueabihf-elfedit*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-buildroot-linux-gnueabihf-g++ -> toolchain-wrapper*
-rwxr-xr-x  2 mzehnder mzehnder  1383120 Mai 17 20:30 arm-buildroot-linux-gnueabihf-g++.br_real*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-buildroot-linux-gnueabihf-gcc -> toolchain-wrapper*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-buildroot-linux-gnueabihf-gcc-8.3.0 -> toolchain-wrapper*
-rwxr-xr-x  3 mzehnder mzehnder  1383040 Mai 17 20:30 arm-buildroot-linux-gnueabihf-gcc-8.3.0.br_real*
-rwxr-xr-x  1 mzehnder mzehnder    43400 Mai 17 20:30 arm-buildroot-linux-gnueabihf-gcc-ar*
-rwxr-xr-x  1 mzehnder mzehnder    43400 Mai 17 20:30 arm-buildroot-linux-gnueabihf-gcc-nm*
-rwxr-xr-x  1 mzehnder mzehnder    43400 Mai 17 20:30 arm-buildroot-linux-gnueabihf-gcc-ranlib*
-rwxr-xr-x  3 mzehnder mzehnder  1383040 Mai 17 20:30 arm-buildroot-linux-gnueabihf-gcc.br_real*
-rwxr-xr-x  1 mzehnder mzehnder   831808 Mai 17 20:30 arm-buildroot-linux-gnueabihf-gcov*
-rwxr-xr-x  1 mzehnder mzehnder   622736 Mai 17 20:30 arm-buildroot-linux-gnueabihf-gcov-dump*
-rwxr-xr-x  1 mzehnder mzehnder   652616 Mai 17 20:30 arm-buildroot-linux-gnueabihf-gcov-tool*
-rwxr-xr-x  1 mzehnder mzehnder  1145848 Mai 17 20:26 arm-buildroot-linux-gnueabihf-gprof*
-rwxr-xr-x  2 mzehnder mzehnder  1808328 Mai 17 20:26 arm-buildroot-linux-gnueabihf-ld*
-rwxr-xr-x  2 mzehnder mzehnder  1808328 Mai 17 20:26 arm-buildroot-linux-gnueabihf-ld.bfd*
-rwxr-xr-x  1 mzehnder mzehnder  1089048 Mai 17 20:26 arm-buildroot-linux-gnueabihf-nm*
-rwxr-xr-x  1 mzehnder mzehnder  1230432 Mai 17 20:26 arm-buildroot-linux-gnueabihf-objcopy*
-rwxr-xr-x  1 mzehnder mzehnder  1597808 Mai 17 20:26 arm-buildroot-linux-gnueabihf-objdump*
-rwxr-xr-x  1 mzehnder mzehnder  1103256 Mai 17 20:26 arm-buildroot-linux-gnueabihf-ranlib*
-rwxr-xr-x  1 mzehnder mzehnder   599640 Mai 17 20:26 arm-buildroot-linux-gnueabihf-readelf*
-rwxr-xr-x  1 mzehnder mzehnder  1074080 Mai 17 20:26 arm-buildroot-linux-gnueabihf-size*
-rwxr-xr-x  1 mzehnder mzehnder  1073688 Mai 17 20:26 arm-buildroot-linux-gnueabihf-strings*
-rwxr-xr-x  1 mzehnder mzehnder  1230432 Mai 17 20:26 arm-buildroot-linux-gnueabihf-strip*
lrwxrwxrwx  1 mzehnder mzehnder       39 Mai 17 20:30 arm-linux-addr2line -> arm-buildroot-linux-gnueabihf-addr2line*
lrwxrwxrwx  1 mzehnder mzehnder       32 Mai 17 20:30 arm-linux-ar -> arm-buildroot-linux-gnueabihf-ar*
lrwxrwxrwx  1 mzehnder mzehnder       32 Mai 17 20:30 arm-linux-as -> arm-buildroot-linux-gnueabihf-as*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-linux-c++ -> toolchain-wrapper*
lrwxrwxrwx  1 mzehnder mzehnder       41 Mai 17 20:30 arm-linux-c++.br_real -> arm-buildroot-linux-gnueabihf-c++.br_real*
lrwxrwxrwx  1 mzehnder mzehnder       37 Mai 17 20:30 arm-linux-c++filt -> arm-buildroot-linux-gnueabihf-c++filt*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-linux-cc -> toolchain-wrapper*
lrwxrwxrwx  1 mzehnder mzehnder       40 Mai 17 20:30 arm-linux-cc.br_real -> arm-buildroot-linux-gnueabihf-cc.br_real*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-linux-cpp -> toolchain-wrapper*
lrwxrwxrwx  1 mzehnder mzehnder       41 Mai 17 20:30 arm-linux-cpp.br_real -> arm-buildroot-linux-gnueabihf-cpp.br_real*
lrwxrwxrwx  1 mzehnder mzehnder       37 Mai 17 20:30 arm-linux-elfedit -> arm-buildroot-linux-gnueabihf-elfedit*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-linux-g++ -> toolchain-wrapper*
lrwxrwxrwx  1 mzehnder mzehnder       41 Mai 17 20:30 arm-linux-g++.br_real -> arm-buildroot-linux-gnueabihf-g++.br_real*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-linux-gcc -> toolchain-wrapper*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:30 arm-linux-gcc-8.3.0 -> toolchain-wrapper*
lrwxrwxrwx  1 mzehnder mzehnder       47 Mai 17 20:30 arm-linux-gcc-8.3.0.br_real -> arm-buildroot-linux-gnueabihf-gcc-8.3.0.br_real*
lrwxrwxrwx  1 mzehnder mzehnder       36 Mai 17 20:30 arm-linux-gcc-ar -> arm-buildroot-linux-gnueabihf-gcc-ar*
lrwxrwxrwx  1 mzehnder mzehnder       36 Mai 17 20:30 arm-linux-gcc-nm -> arm-buildroot-linux-gnueabihf-gcc-nm*
lrwxrwxrwx  1 mzehnder mzehnder       40 Mai 17 20:30 arm-linux-gcc-ranlib -> arm-buildroot-linux-gnueabihf-gcc-ranlib*
lrwxrwxrwx  1 mzehnder mzehnder       41 Mai 17 20:30 arm-linux-gcc.br_real -> arm-buildroot-linux-gnueabihf-gcc.br_real*
lrwxrwxrwx  1 mzehnder mzehnder       34 Mai 17 20:30 arm-linux-gcov -> arm-buildroot-linux-gnueabihf-gcov*
lrwxrwxrwx  1 mzehnder mzehnder       39 Mai 17 20:30 arm-linux-gcov-dump -> arm-buildroot-linux-gnueabihf-gcov-dump*
lrwxrwxrwx  1 mzehnder mzehnder       39 Mai 17 20:30 arm-linux-gcov-tool -> arm-buildroot-linux-gnueabihf-gcov-tool*
lrwxrwxrwx  1 mzehnder mzehnder       35 Mai 17 20:30 arm-linux-gprof -> arm-buildroot-linux-gnueabihf-gprof*
lrwxrwxrwx  1 mzehnder mzehnder       32 Mai 17 20:30 arm-linux-ld -> arm-buildroot-linux-gnueabihf-ld*
lrwxrwxrwx  1 mzehnder mzehnder       36 Mai 17 20:30 arm-linux-ld.bfd -> arm-buildroot-linux-gnueabihf-ld.bfd*
lrwxrwxrwx  1 mzehnder mzehnder       32 Mai 17 20:30 arm-linux-nm -> arm-buildroot-linux-gnueabihf-nm*
lrwxrwxrwx  1 mzehnder mzehnder       37 Mai 17 20:30 arm-linux-objcopy -> arm-buildroot-linux-gnueabihf-objcopy*
lrwxrwxrwx  1 mzehnder mzehnder       37 Mai 17 20:30 arm-linux-objdump -> arm-buildroot-linux-gnueabihf-objdump*
lrwxrwxrwx  1 mzehnder mzehnder       36 Mai 17 20:30 arm-linux-ranlib -> arm-buildroot-linux-gnueabihf-ranlib*
lrwxrwxrwx  1 mzehnder mzehnder       37 Mai 17 20:30 arm-linux-readelf -> arm-buildroot-linux-gnueabihf-readelf*
lrwxrwxrwx  1 mzehnder mzehnder       34 Mai 17 20:30 arm-linux-size -> arm-buildroot-linux-gnueabihf-size*
lrwxrwxrwx  1 mzehnder mzehnder       37 Mai 17 20:30 arm-linux-strings -> arm-buildroot-linux-gnueabihf-strings*
lrwxrwxrwx  1 mzehnder mzehnder       35 Mai 17 20:30 arm-linux-strip -> arm-buildroot-linux-gnueabihf-strip*
-rwxr-xr-x  1 mzehnder mzehnder    17704 Mai 17 20:25 attr*
-rwxr-xr-x  1 mzehnder mzehnder    14818 Mai 17 20:30 autoconf*
-rwxr-xr-x  1 mzehnder mzehnder     8636 Mai 17 20:30 autoheader*
-rwxr-xr-x  1 mzehnder mzehnder    32328 Mai 17 20:30 autom4te*
-rwxr-xr-x  2 mzehnder mzehnder   253369 Mai 17 20:31 automake*
-rwxr-xr-x  2 mzehnder mzehnder   253369 Mai 17 20:31 automake-1.15*
-rwxr-xr-x  1 mzehnder mzehnder      939 Mai 17 20:31 autopoint*
-rwxr-xr-x  1 mzehnder mzehnder    21268 Mai 17 20:30 autoreconf*
-rwxr-xr-x  1 mzehnder mzehnder    17275 Mai 17 20:30 autoscan*
-rwxr-xr-x  1 mzehnder mzehnder    34074 Mai 17 20:30 autoupdate*
-rwxr-xr-x  1 mzehnder mzehnder   484824 Mai 17 20:25 bison*
-rwxr-xr-x  1 mzehnder mzehnder     6288 Mai 17 20:43 c_rehash*
-rwxr-xr-x  1 mzehnder mzehnder    79296 Mai 17 20:24 cal*
lrwxrwxrwx  1 mzehnder mzehnder        3 Mai 17 20:35 captoinfo -> tic*
-rwxr-xr-x  1 mzehnder mzehnder   256272 Mai 17 20:24 ccache*
-rwxr-xr-x  1 mzehnder mzehnder    18232 Mai 17 20:25 chacl*
-rwxr-xr-x  1 mzehnder mzehnder    18224 Mai 17 20:25 chattr*
-rwxr-xr-x  1 mzehnder mzehnder    62696 Mai 17 20:24 choom*
-rwxr-xr-x  1 mzehnder mzehnder    14480 Mai 17 20:35 clear*
-rwxr-xr-x  1 mzehnder mzehnder  8132240 Mai 17 20:41 cmake*
-rwxr-xr-x  1 mzehnder mzehnder    42096 Mai 17 20:24 col*
-rwxr-xr-x  1 mzehnder mzehnder    18472 Mai 17 20:24 colcrt*
-rwxr-xr-x  1 mzehnder mzehnder    37048 Mai 17 20:24 colrm*
-rwxr-xr-x  1 mzehnder mzehnder    62568 Mai 17 20:24 column*
-rwxr-xr-x  1 mzehnder mzehnder     1392 Mai 17 20:25 compile_et*
-rwxr-xr-x  1 mzehnder mzehnder  8399352 Mai 17 20:41 cpack*
-rwxr-xr-x  1 mzehnder mzehnder  9459328 Mai 17 20:41 ctest*
-rwxr-xr-x  1 mzehnder mzehnder   132488 Mai 17 20:41 dbus-binding-tool*
-rwxr-xr-x  1 mzehnder mzehnder    17936 Mai 17 20:41 dbus-cleanup-sockets*
-rwxr-xr-x  1 mzehnder mzehnder   282248 Mai 17 20:41 dbus-daemon*
-rwxr-xr-x  1 mzehnder mzehnder    31552 Mai 17 20:41 dbus-launch*
-rwxr-xr-x  1 mzehnder mzehnder    37056 Mai 17 20:41 dbus-monitor*
-rwxr-xr-x  1 mzehnder mzehnder    17560 Mai 17 20:41 dbus-run-session*
-rwxr-xr-x  1 mzehnder mzehnder    37208 Mai 17 20:41 dbus-send*
-rwxr-xr-x  1 mzehnder mzehnder    32440 Mai 17 20:41 dbus-test-tool*
-rwxr-xr-x  1 mzehnder mzehnder    18392 Mai 17 20:41 dbus-update-activation-environment*
-rwxr-xr-x  1 mzehnder mzehnder    17432 Mai 17 20:41 dbus-uuidgen*
-rwxr-xr-x  1 mzehnder mzehnder    34840 Mai 17 20:44 dbusxx-introspect*
-rwxr-xr-x  1 mzehnder mzehnder   183576 Mai 17 20:44 dbusxx-xml2cpp*
-rwxr-xr-x  1 mzehnder mzehnder    96048 Mai 17 20:24 dmesg*
lrwxrwxrwx  1 mzehnder mzehnder        9 Mai 17 20:51 dtc -> linux-dtc*
-rwxr-xr-x  1 mzehnder mzehnder      454 Mai 17 20:32 easy_install*
-rwxr-xr-x  1 mzehnder mzehnder      462 Mai 17 20:32 easy_install-3.7*
-rwxr-xr-x  1 mzehnder mzehnder    95424 Mai 17 20:24 eject*
-rwxr-xr-x  1 mzehnder mzehnder    41488 Mai 17 20:25 faked*
-rwxr-xr-x  1 mzehnder mzehnder     4006 Mai 17 20:25 fakeroot*
-rwxr-xr-x  1 mzehnder mzehnder    41592 Mai 17 20:24 fallocate*
-rwxr-xr-x  1 mzehnder mzehnder    42544 Mai 17 20:24 fincore*
-rwxr-xr-x  1 mzehnder mzehnder    82072 Mai 17 20:24 findmnt*
-rwxr-xr-x  1 mzehnder mzehnder     6344 Jun 12  2019 fixqt4headers.pl*
-rwxr-xr-x  1 mzehnder mzehnder   454504 Mai 17 20:44 flex*
lrwxrwxrwx  1 mzehnder mzehnder        4 Mai 17 20:44 flex++ -> flex*
-rwxr-xr-x  1 mzehnder mzehnder    42312 Mai 17 20:24 flock*
-rwxr-xr-x  1 mzehnder mzehnder    32680 Mai 17 20:47 floppyd*
-rwxr-xr-x  1 mzehnder mzehnder    28680 Mai 17 20:47 floppyd_installtest*
-rwxr-xr-x  1 mzehnder mzehnder    27432 Mai 17 20:37 gapplication*
-rwxr-xr-x  1 mzehnder mzehnder   661768 Mai 17 20:26 gawk*
-rwxr-xr-x  1 mzehnder mzehnder    60728 Mai 17 20:37 gdbus*
-rwxr-xr-x  1 mzehnder mzehnder     2092 Mai 17 20:37 gdbus-codegen*
-rwxr-xr-x  1 mzehnder mzehnder    18864 Mai 17 20:46 genbrk*
-rwxr-xr-x  1 mzehnder mzehnder    18240 Mai 17 20:46 gencfu*
-rwxr-xr-x  1 mzehnder mzehnder    31792 Mai 17 20:46 gencnval*
-rwxr-xr-x  1 mzehnder mzehnder    34360 Mai 17 20:46 gendict*
-rwxr-xr-x  1 mzehnder mzehnder    98688 Mai 17 20:46 genimage*
-rwxr-xr-x  1 mzehnder mzehnder   202736 Mai 17 20:46 genrb*
-rwxr-xr-x  1 mzehnder mzehnder    37888 Mai 17 20:25 getfacl*
-rwxr-xr-x  1 mzehnder mzehnder    28680 Mai 17 20:25 getfattr*
-rwxr-xr-x  1 mzehnder mzehnder    27072 Mai 17 20:24 getopt*
-rwxr-xr-x  1 mzehnder mzehnder    43784 Mai 17 20:31 gettextize*
-rwxr-xr-x  1 mzehnder mzehnder   106024 Mai 17 20:37 gio*
-rwxr-xr-x  1 mzehnder mzehnder    16904 Mai 17 20:37 gio-launch-desktop*
-rwxr-xr-x  1 mzehnder mzehnder    22256 Mai 17 20:37 gio-querymodules*
-rwxr-xr-x  1 mzehnder mzehnder    55960 Mai 17 20:37 glib-compile-resources*
-rwxr-xr-x  1 mzehnder mzehnder    60960 Mai 17 20:37 glib-compile-schemas*
-rwxr-xr-x  1 mzehnder mzehnder    40951 Mai 17 20:37 glib-genmarshal*
-rwxr-xr-x  1 mzehnder mzehnder     5536 Mai 17 20:37 glib-gettextize*
-rwxr-xr-x  1 mzehnder mzehnder    29213 Mai 17 20:37 glib-mkenums*
-rwxr-xr-x  1 mzehnder mzehnder    17464 Mai 17 20:37 gobject-query*
-rwxr-xr-x  1 mzehnder mzehnder   112792 Mai 17 20:31 gperf*
-rwxr-xr-x  1 mzehnder mzehnder    18408 Mai 17 20:37 gresource*
-rwxr-xr-x  1 mzehnder mzehnder    37536 Mai 17 20:37 gsettings*
-rwxr-xr-x  1 mzehnder mzehnder    37216 Mai 17 20:37 gtester*
-rwxr-xr-x  1 mzehnder mzehnder    18662 Mai 17 20:37 gtester-report*
-rwxr-xr-x  1 mzehnder mzehnder    27056 Mai 17 20:24 hardlink*
-rwxr-xr-x  1 mzehnder mzehnder    65184 Mai 17 20:24 hexdump*
lrwxrwxrwx  1 mzehnder mzehnder        7 Mai 17 20:24 i386 -> setarch*
-rwxr-xr-x  1 mzehnder mzehnder    22516 Mai 17 20:46 icu-config*
-rwxr-xr-x  1 mzehnder mzehnder    17872 Mai 17 20:46 icuinfo*
-rwxr-xr-x  1 mzehnder mzehnder     4180 Mai 17 20:30 ifnames*
-rwxr-xr-x  1 mzehnder mzehnder    63704 Mai 17 20:35 infocmp*
lrwxrwxrwx  1 mzehnder mzehnder        3 Mai 17 20:35 infotocap -> tic*
-rwxr-xr-x  1 mzehnder mzehnder    31150 Mai 17 20:31 intltool-extract*
-rwxr-xr-x  1 mzehnder mzehnder    39816 Mai 17 20:31 intltool-merge*
-rwxr-xr-x  1 mzehnder mzehnder     8605 Mai 17 20:31 intltool-prepare*
-rwxr-xr-x  1 mzehnder mzehnder    35055 Mai 17 20:31 intltool-update*
-rwxr-xr-x  1 mzehnder mzehnder     7206 Mai 17 20:31 intltoolize*
-rwxr-xr-x  1 mzehnder mzehnder    38016 Mai 17 20:24 ipcmk*
-rwxr-xr-x  1 mzehnder mzehnder    41456 Mai 17 20:24 ipcrm*
-rwxr-xr-x  1 mzehnder mzehnder    80248 Mai 17 20:24 ipcs*
-rwxr-xr-x  1 mzehnder mzehnder    37032 Mai 17 20:24 isosize*
-rwxr-xr-x  1 mzehnder mzehnder    47376 Mai 17 20:24 kill*
-rwxr-xr-x  1 mzehnder mzehnder   173960 Mai 17 20:50 kmod*
-rwxr-xr-x  1 mzehnder mzehnder    56168 Mai 17 20:24 last*
lrwxrwxrwx  1 mzehnder mzehnder        4 Mai 17 20:24 lastb -> last*
-rwxr-xr-x  1 mzehnder mzehnder  1022272 Mai 17 20:49 lconvert*
-rwxr-xr-x  1 mzehnder mzehnder   365758 Mai 17 20:30 libtool*
-rwxr-xr-x  1 mzehnder mzehnder   129443 Mai 17 20:30 libtoolize*
-rwxr-xr-x  1 mzehnder mzehnder   134528 Mai 17 20:51 linux-dtc*
lrwxrwxrwx  1 mzehnder mzehnder        7 Mai 17 20:24 linux32 -> setarch*
lrwxrwxrwx  1 mzehnder mzehnder        7 Mai 17 20:24 linux64 -> setarch*
-rwxr-xr-x  1 mzehnder mzehnder   334312 Mai 17 20:52 localedef*
-rwxr-xr-x  1 mzehnder mzehnder    57296 Mai 17 20:24 logger*
-rwxr-xr-x  1 mzehnder mzehnder    18608 Mai 17 20:24 look*
-rwxr-xr-x  1 mzehnder mzehnder  1476928 Mai 17 20:49 lrelease*
-rwxr-xr-x  1 mzehnder mzehnder    18056 Mai 17 20:25 lsattr*
-rwxr-xr-x  1 mzehnder mzehnder   143168 Mai 17 20:24 lsblk*
-rwxr-xr-x  1 mzehnder mzehnder   111472 Mai 17 20:24 lscpu*
-rwxr-xr-x  1 mzehnder mzehnder   108472 Mai 17 20:24 lsipc*
-rwxr-xr-x  1 mzehnder mzehnder    48400 Mai 17 20:24 lslocks*
-rwxr-xr-x  1 mzehnder mzehnder    80784 Mai 17 20:24 lsmem*
-rwxr-xr-x  1 mzehnder mzehnder    61984 Mai 17 20:24 lsns*
-rwxr-xr-x  1 mzehnder mzehnder  2062736 Mai 17 20:49 lupdate*
lrwxrwxrwx  1 mzehnder mzehnder        2 Mai 17 20:47 lz -> uz*
-rwxr-xr-x  1 mzehnder mzehnder   149720 Mai 17 20:47 lzip*
-rwxr-xr-x  1 mzehnder mzehnder    95864 Mai 17 20:50 lzop*
-rwxr-xr-x  1 mzehnder mzehnder   191208 Mai 17 20:25 m4*
-rwxr-xr-x  1 mzehnder mzehnder    60480 Mai 17 20:46 makeconv*
-rwxr-xr-x  1 mzehnder mzehnder    32160 Mai 17 20:25 makedevs*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mattrib -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mbadblocks -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mcat -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mcd -> mtools*
-rwxr-xr-x  1 mzehnder mzehnder     1679 Mai 17 20:47 mcheck*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mclasserase -> mtools*
-rwxr-xr-x  1 mzehnder mzehnder      847 Mai 17 20:47 mcomp*
-rwxr-xr-x  1 mzehnder mzehnder    42312 Mai 17 20:24 mcookie*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mcopy -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mdel -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mdeltree -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mdir -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mdu -> mtools*
-rwxr-xr-x  1 mzehnder mzehnder      425 Mai 17 20:32 meson*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mformat -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 minfo -> mtools*
-rwxr-xr-x  1 mzehnder mzehnder     1152 Mai 17 20:25 mk_cmds*
-rwxr-xr-x  1 mzehnder mzehnder    18880 Mai 17 20:47 mkmanifest*
-rwxr-xr-x  1 mzehnder mzehnder    31528 Mai 17 20:25 mkpasswd*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mlabel -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mmd -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mmount -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mmove -> mtools*
-rwxr-xr-x  1 mzehnder mzehnder   907584 Mai 17 20:49 moc*
-rwsr-xr-x  1 mzehnder mzehnder    67264 Mai 17 20:24 mount*
-rwxr-xr-x  1 mzehnder mzehnder    18584 Mai 17 20:24 mountpoint*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mpartition -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mrd -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mren -> mtools*
-rwxr-xr-x  1 mzehnder mzehnder    27304 Mai 17 20:31 msgfmt*
-rwxr-xr-x  1 mzehnder mzehnder    27112 Mai 17 20:31 msgmerge*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mshortname -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mshowfat -> mtools*
-rwxr-xr-x  1 mzehnder mzehnder   231120 Mai 17 20:47 mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mtoolstest -> mtools*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mtype -> mtools*
-rwxr-xr-x  1 mzehnder mzehnder      784 Mai 17 20:47 mxtar*
lrwxrwxrwx  1 mzehnder mzehnder        6 Mai 17 20:47 mzip -> mtools*
-rwxr-xr-x  1 mzehnder mzehnder    42048 Mai 17 20:24 namei*
-rwxr-xr-x  1 mzehnder mzehnder     6396 Mai 17 20:35 ncurses6-config*
-rwxr-xr-x  1 mzehnder mzehnder  5732240 Mai 17 20:32 ninja*
-rwxr-xr-x  1 mzehnder mzehnder 28751680 Mai 17 20:48 node*
lrwxrwxrwx  1 mzehnder mzehnder       38 Mai 17 20:48 npm -> ../lib/node_modules/npm/bin/npm-cli.js*
lrwxrwxrwx  1 mzehnder mzehnder       38 Mai 17 20:48 npx -> ../lib/node_modules/npm/bin/npx-cli.js*
-rwxr-xr-x  1 mzehnder mzehnder   857976 Mai 17 20:43 openssl*
-rwxr-xr-x  1 mzehnder mzehnder   149984 Mai 17 20:48 patchelf*
-rwxr-xr-x  1 mzehnder mzehnder     2407 Mai 17 20:37 pcre-config*
-rwxr-xr-x  1 mzehnder mzehnder    57232 Mai 17 20:37 pcregrep*
-rwxr-xr-x  1 mzehnder mzehnder    83280 Mai 17 20:37 pcretest*
-rwxr-xr-x  1 mzehnder mzehnder      481 Mai 17 20:24 pkg-config*
-rwxr-xr-x  1 mzehnder mzehnder    52472 Mai 17 20:24 pkgconf*
-rwxr-xr-x  1 mzehnder mzehnder    60272 Mai 17 20:46 pkgdata*
-rwxr-xr-x  1 mzehnder mzehnder    46984 Mai 17 20:24 prlimit*
-rwxr-xr-x  1 mzehnder mzehnder      128 Mai 17 20:43 pydoc*
lrwxrwxrwx  1 mzehnder mzehnder        8 Mai 17 20:32 pydoc3 -> pydoc3.7*
-rwxr-xr-x  1 mzehnder mzehnder      128 Mai 17 20:32 pydoc3.7*
lrwxrwxrwx  1 mzehnder mzehnder        7 Mai 17 20:43 python -> python2*
lrwxrwxrwx  1 mzehnder mzehnder       14 Mai 17 20:43 python-config -> python2-config*
-rwxr-xr-x  1 mzehnder mzehnder 13705352 Mai 17 20:32 python-freeze-importlib*
lrwxrwxrwx  1 mzehnder mzehnder        9 Mai 17 20:43 python2 -> python2.7*
lrwxrwxrwx  1 mzehnder mzehnder       16 Mai 17 20:43 python2-config -> python2.7-config*
-rwxr-xr-x  1 mzehnder mzehnder    33136 Mai 17 20:43 python2.7*
-rwxr-xr-x  1 mzehnder mzehnder     2494 Mai 17 20:43 python2.7-config*
lrwxrwxrwx  1 mzehnder mzehnder        9 Mai 17 20:32 python3 -> python3.7*
lrwxrwxrwx  1 mzehnder mzehnder       16 Mai 17 20:32 python3-config -> python3.7-config*
-rwxr-xr-x  2 mzehnder mzehnder    37088 Mai 17 20:32 python3.7*
lrwxrwxrwx  1 mzehnder mzehnder       17 Mai 17 20:32 python3.7-config -> python3.7m-config*
-rwxr-xr-x  2 mzehnder mzehnder    37088 Mai 17 20:32 python3.7m*
-rwxr-xr-x  1 mzehnder mzehnder     3160 Mai 17 20:32 python3.7m-config*
lrwxrwxrwx  1 mzehnder mzehnder       10 Mai 17 20:32 pyvenv -> pyvenv-3.7
-rwxr-xr-x  1 mzehnder mzehnder  1194352 Mai 17 20:49 qdbuscpp2xml*
-rwxr-xr-x  1 mzehnder mzehnder  1243504 Mai 17 20:49 qdbusxml2cpp*
-rwxr-xr-x  1 mzehnder mzehnder   747840 Mai 17 20:49 qlalr*
-rwxr-xr-x  1 mzehnder mzehnder 50249640 Mai 17 20:48 qmake*
-rwxr-xr-x  1 mzehnder mzehnder  1506208 Mai 17 20:49 qmlcachegen*
-rwxr-xr-x  1 mzehnder mzehnder  1317312 Mai 17 20:49 qmlimportscanner*
-rwxr-xr-x  1 mzehnder mzehnder   903568 Mai 17 20:49 qmllint*
-rwxr-xr-x  1 mzehnder mzehnder   674112 Mai 17 20:49 qmlmin*
-rw-r--r--  1 mzehnder mzehnder      270 Mai 17 20:49 qt.conf
-rwxr-xr-x  1 mzehnder mzehnder   670016 Mai 17 20:49 qvkgen*
-rwxr-xr-x  1 mzehnder mzehnder   874816 Mai 17 20:49 rcc*
-rwxr-xr-x  1 mzehnder mzehnder    27280 Mai 17 20:24 rename*
-rwxr-xr-x  1 mzehnder mzehnder    18000 Mai 17 20:24 renice*
lrwxrwxrwx  1 mzehnder mzehnder        4 Mai 17 20:35 reset -> tset*
-rwxr-xr-x  1 mzehnder mzehnder    18280 Mai 17 20:24 rev*
-rwxr-xr-x  1 mzehnder mzehnder    64936 Mai 17 20:24 script*
-rwxr-xr-x  1 mzehnder mzehnder    37288 Mai 17 20:24 scriptreplay*
-rwxr-xr-x  1 mzehnder mzehnder    26840 Mai 17 20:24 setarch*
-rwxr-xr-x  1 mzehnder mzehnder    47496 Mai 17 20:25 setfacl*
-rwxr-xr-x  1 mzehnder mzehnder    23648 Mai 17 20:25 setfattr*
-rwxr-xr-x  1 mzehnder mzehnder    18168 Mai 17 20:24 setsid*
-rwxr-xr-x  1 mzehnder mzehnder    18591 Mai 17 20:43 smtpd.py*
-rwxr-xr-x  1 mzehnder mzehnder    34758 Mai 17 20:32 smtpd.py.7*
-rwxr-xr-x  1 mzehnder mzehnder    48148 Jun 12  2019 syncqt.pl*
-rwxr-xr-x  1 mzehnder mzehnder    18568 Mai 17 20:35 tabs*
-rwxr-xr-x  1 mzehnder mzehnder   478912 Mai 17 20:24 tar*
-rwxr-xr-x  1 mzehnder mzehnder     2295 Mai 17 20:47 tgz*
-rwxr-xr-x  1 mzehnder mzehnder    92416 Mai 17 20:35 tic*
-rwxr-xr-x  1 mzehnder mzehnder    22664 Mai 17 20:35 toe*
-rwxr-xr-x  1 mzehnder mzehnder    14664 Mai 17 20:30 toolchain-wrapper*
-rwxr-xr-x  1 mzehnder mzehnder  3249936 Mai 17 20:48 torque*
-rwxr-xr-x  1 mzehnder mzehnder    26792 Mai 17 20:35 tput*
-rwxr-xr-x  1 mzehnder mzehnder    30864 Mai 17 20:35 tset*
-rwxr-xr-x  1 mzehnder mzehnder  1198400 Mai 17 20:49 uic*
-rwsr-xr-x  1 mzehnder mzehnder    43680 Mai 17 20:24 umount*
lrwxrwxrwx  1 mzehnder mzehnder        7 Mai 17 20:24 uname26 -> setarch*
-rwxr-xr-x  1 mzehnder mzehnder    36672 Mai 17 20:24 utmpdump*
-rwxr-xr-x  1 mzehnder mzehnder    18376 Mai 17 20:24 uuidgen*
-rwxr-xr-x  1 mzehnder mzehnder    47608 Mai 17 20:24 uuidparse*
-rwxr-xr-x  1 mzehnder mzehnder     2541 Mai 17 20:47 uz*
-rwxr-xr-x  1 mzehnder mzehnder    37648 Mai 17 20:24 whereis*
lrwxrwxrwx  1 mzehnder mzehnder        7 Mai 17 20:24 x86_64 -> setarch*
-rwxr-xr-x  1 mzehnder mzehnder     2050 Mai 17 20:31 xgettext*
-rwxr-xr-x  1 mzehnder mzehnder    42472 Mai 17 20:31 xmlwf*
-rwxr-xr-x  1 mzehnder mzehnder     4314 Mai 17 20:25 yacc*

Did you change any Buildroot or Linux kernel configuration in remote-os with make menuconfig or make linux-menuconfig?
Depending on the configuration option you need a complete rebuild with make clean && make, or even make distclean if you changed the target device (e.g. RPi 3 to RPi 0).

I found the problem. I added the ARM compilers with QCC instead of GCC. Now it works. I found a problem in remote-os when I added openweather plugin. I got some error messages that openweather is not found in htpp://sources.buildroot.net.

Now I try to add my private smarthome integration. I was able to compile it for desktop and with RPi Crosscompile. Is there a way to inject it manually into the buildroot that it becames part of the generated pi image ?

Good you got it working!
Additional files can be put into the overlay directory: remote-os/overlay
They will be copied 1:1 to the target file system.
Furthermore there are the post-build.sh and post-image.sh scripts in remote-os/rpi0 if you need to modify an existing file in the target and don’t want to simply overwrite it.

Documentation: http://nightly.buildroot.org/manual.html#rootfs-custom

@marton

First I want to thank you for the wonderful assembled YIO. I am sure it wouldn’t look like this if i did it myself.

I will start to work again with roon and openweather integration. But before I would like to inform you about some issues I found with the latest remote-software version. Currently I am testing first on a Linux desktop, I will switch to the PI as second step.

main.qml
Notification Drawer throws exception in onOpacityChanged because loader_main.item is null.

    onOpacityChanged: {
        if (loader_main.item)       // RIC
            loader_main.item.opacity = 1 - opacity + 0.3
    }

integrations.cpp
I again noticed that onLoadComplete fires multiple times (for every integration), which is quite bad because entitires.load() creates all entities a second time after integration has allready been started.
Quite bad for openweather integration, because entities are initialized only once at initialisation.
I propose to make this change in Integrations::load() :

// let's load the plugins
m_integrationsToLoad = c.size(); // RIC
for (QVariantMap::const_iterator iter = c.begin(); iter != c.end(); ++iter) {
    QObject* obj;
    if (!isPluginLoaded(iter.key())) {
        // load the plugin
        obj = loadPlugin(iter.key());
    } else {
        obj = getPlugin(iter.key());
    }

    // push the config to the integration
    QVariantMap map = iter.value().toMap();
    map.insert(Config::KEY_TYPE, iter.key());

    // create instance of the integration
    // m_integrationsToLoad++; RIC
    createInstance(obj, map);
}

To make logging system work as I intended it is necessary to add some logic to Integrations::createInstance(). Otherwise it is not possible to control integrations log level.
I assume that log category (set in Plugin) is equal to integration name / type :

if (interface) {
    connect(interface, &PluginInterface::createDone, this, &Integrations::onCreateDone);

    // RIC define logger category for integration
    Logger* logger = Logger::getInstance();
    QString category = map.value("type").toString();
    if (logger != nullptr && category.count() > 0) {
        int level = logger->toMsgType(map.value("log").toString());  // initial log level
        logger->defineLogCategory(category, level, nullptr, interface);
    }

    interface->create(map, entities, notifications, api, config);
}

You also removed logger control from YioAPI. For me it is really essential to be able to adjust all the log levels online and to see the current log messages in some UI. I expected that it will be integrated in the webconfigurator. I created a simple Qt app for this purpose which allows to trigger the hardware buttons and control / see the logs. It is available at https://github.com/ChristianRiedl/sim-yio-hardware.

yioapi.cpp :
To add the logger control functionality to YioAPI I added a function to yioapi.cpp :

         } else if (type == "log") {
            /// RIC Logger control
            apiLoggerControl(client, id, map);
        }

and

void YioAPI::apiLoggerControl(QWebSocket* client, const int& id, const QVariantMap& map) {
// Handle log
QVariantMap response;
Logger* logger = Logger::getInstance();
QString logAction = map["action"].toString();
QString logTarget = map["target"].toString();
qCDebug(CLASS_LC) << "YioAPI LOGGER : " << logAction;
if (logAction == "start") {
    // enable logger target, default is queue
    if (logTarget == "file")
        logger->setFileEnabled(true);
    else if (logTarget == "console")
        logger->setConsoleEnabled(true);
    else
        logger->setQueueEnabled(true);
    apiSendResponse(client, id, true, response);
}
else if (logAction == "stop") {
    // edisable logger queue target, default is queue
    if (logTarget == "file")
        logger->setFileEnabled(false);
    else if (logTarget == "console")
        logger->setConsoleEnabled(false);
    else
        logger->setQueueEnabled(false);
    apiSendResponse(client, id, true, response);
}
else if (logAction == "showsource") {
    logger->setShowSourcePos(true);
    apiSendResponse(client, id, true, response);
}
else if (logAction == "hidesource") {
    logger->setShowSourcePos(false);
    apiSendResponse(client, id, true, response);
}
else if (logAction == "purge") {
    int hours = 24;
    if (map.contains("hours"))
        hours = map["hours"].toInt();
    logger->purgeFiles(hours);
    apiSendResponse(client, id, true, response);
}
else if (logAction == "setloglevel") {
    // set log level
    int level = QtMsgType::QtDebugMsg;
    QString category;
    if (map.contains("level"))
        level = logger->toMsgType(map["level"].toString());
    if (map.contains("category")) {
        category = map["category"].toString();
        logger->setCategoryLogLevel(category, level);
    }
    else
        logger->setLogLevel(level);
    apiSendResponse(client, id, true, response);
}
else if (logAction == "getmessages") {
    // get log messages
    int count = 50;
    int level = QtMsgType::QtDebugMsg;
    QStringList categories;
    if (map.contains("count"))
        count = map["count"].toInt();
    if (map.contains("level"))
        level = logger->toMsgType(map["level"].toString());
    if (map.contains("categories"))
        categories = map["categories"].toStringList();
    QJsonArray messages = logger->getQueuedMessages(count, level, categories);
    QJsonObject jsonObj;
    jsonObj.insert("id", id);
    jsonObj.insert("success", true);
    jsonObj.insert("type", "result");
    jsonObj.insert("messages", messages);
    QJsonDocument json = QJsonDocument(jsonObj);
    if (client && m_clients.contains(client) && client->isValid()) {
        client->sendTextMessage(json.toJson(QJsonDocument::JsonFormat::Compact));
    }
}
else if (logAction == "getinfo") {
    // get log info
    QJsonObject info = logger->getInformation();
    QJsonObject jsonObj;
    jsonObj.insert("id", id);
    jsonObj.insert("success", true);
    jsonObj.insert("type", "result");
    jsonObj.insert("info", info);
    QJsonDocument json = QJsonDocument(jsonObj);
    if (client && m_clients.contains(client) && client->isValid()) {
        client->sendTextMessage(json.toJson(QJsonDocument::JsonFormat::Compact));
    }
}
else {
    qCWarning(CLASS_LC) << "YioAPI Bad LOGGER Action : " << logAction;
}
}

OpenWeather Integration :

Fine that you derive all component buttons now from ButtonBase.qml. But for the Weather entity I would ask you to make some small change to show todays image and average, min, max temperature on the button.

Comp.ButtonBase {
 id: weatherButton
    icon: ""     // RIC
    title.text: obj.friendly_name + "\r\n" + obj.current.temp
    cardLoader.source: "qrc:/components/weather/ui/Card.qml"
 
 Image {      // RIC
    id: image 
    asynchronous: true
    width: 85
    height: 85
    fillMode: Image.PreserveAspectFit
    anchors { left: parent.left; leftMargin: 20; verticalCenter: parent.verticalCenter }
    source: obj.current.imageurl;
    }    
}

ROON integration :

I noticed the upcoming squeezebox integration. Funny, it was cancelled many years ago, but still has some fans. Anyhow I think that ROON and Squeezebox users expect “hierarchical browsing”. I allreaded started to get information from the potential ROON users what they expect. What is the current state ? I am not able to play with the Spotify integration.

Priviledged port for Linux :

I got a problem when running remote from QtCreator. WebSocket server for YioAPI did not start because port number 946 is a priviledged port. Using a port > 1024 will easily avoid this problem.

Unassigned variables :

I noticed several places where variables are not initialized. Microsoft compilers initialize variables in DEBUG compile to 0, In RELEASE mode this is not granted. What is your experience ?
Please add m_forecast initialisation in weather entity constructor.

m_enumState = &metaEnumState;
m_forecast = nullptr;       // RIC
initializeSupportedFeatures(config);

Hi @ChristianRiedl,
my pleasure, hope you’ll enjoy YIO :slight_smile:

Great to have you back on board, I think a lot of people will be happy for the roon integration, especially.

Good catch in main.qml and integrations.cpp, I pushed a fix for those.

The YioAPI went over a makeover and I removed the logger because I didn’t know how it should work. Also I remember we had thoughts about integrating the logging into journald so we can have an improved logging on the device itself. And at the same time simplifying it a bit, so it wouldn’t generate so many files. Let’s pick up this again, probably @zehnm knows more about this than me.
But having a logging control in the web configurator is a great idea. I shall design an interface for it and as soon as Shepless has more time we can make it happen. However I know that priority is IR learning at the moment.

Every button is derived from the ButtonBase but it can be customized, so adding extra information is definitely possible. I am working on an icon set for weather, so when it’s done, I would replace the images with the icons, to have a bit more unified look and feel.

There’s one last step required for the hierarchical browsing to work. I have not had a lot of time to focus on this, but I will try to get back to it ASAP. I would also like to use this feature :slight_smile:

I haven’t had any problems with 946 being a privileged port and I don’t know anyone who had. Changing a port now would be a big issue, as many people are using the remote and they would have to make sure they are using the correct version of the dock, webconfigurator and the app. 946 also stands for YIO :slight_smile:

I haven’t had problems with unassigned variables on Mac and Linux, but we can find them and mark them.

@marton @zehnm

Regarding logging : journald is a good idea to use it instead of the files.

To change file per hour in the meanwhile to file per day is quite easy to change

void Logger::writeFile(const SMessage& message, const QDateTime& dt) {
    int day = dt.date().day();
    if (day != m_lastDay || m_file == nullptr) {
        m_lastDay = day;

Logging is not only important to analyse what has happened in the past. For me it is also important during development and testing. In this case realtime display of the log is very useful. And the possibility to filter the log by category and to adjust log levels per category.

YioAPI log functions are described in our wiki (https://github.com/YIO-Remote/documentation/wiki/Logging) and it simply allows to

  • control the log levels per category
  • start and stop log output to file, console, and (most important) queue output
  • get information about categories including their log levels and per level counts
  • read log messages of a selected set of categories from queue for real time display in a UI.

I also think that usage of QLoggingCategory which allows to disable log levels at the point where the log messages are created (instead of creating a lot of messages which are filtered afterwards) is the right way to save resources.

Currently we have a half implemented logging system with the queue, and the possibility to control the log levels also in the integrations. I would advocate to add the 2 missing functionialities in Integrations::createInstance and YioAPI, to have a working logging system as intended.

@marton

Regarding Weather button :

The weather services typically deliver a set of weather icons. They are downloaded and cached locally in openweather integration. My ImageCache class is generic and can be used for such purpose by other integrations. Please make the small change in the weather button. It is currenly used only by my weather integration.

Hi @ChristianRiedl,

I’ll create a branch for the logger update and will add it to the API again.

I know weather services deliver icons sometimes, but I’d really like to have a unified look across the whole UI, even if it means I have to draw more icons :slight_smile:

Hi @Marton,

Great.

You find the different icon types for openweather at https://openweathermap.org/weather-conditions#How-to-get-icon-URL.

I don’t know if this “weather categories” are standardized somehow.

Maybe it makes sense to add my weather button as intermediate solution.

Thanks for the link @ChristianRiedl.

I agree, an intermedia solution with the button modification is a good one.