Mycroft on FreeBSD

$ locale
LANG=es_ES.UTF-8
LC_CTYPE="es_ES.UTF-8"
LC_COLLATE="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC_NUMERIC="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_ALL=

$ env | grep LANGUAGE
$

With this small hack the cli comes up:

$ diff /usr/home/guru/Mycroft-test/mycroft-core/mycroft/client/text/text_client.p*
1078,1079c1078
<                 # c = scr.get_wch()  # unicode char or int for special keys
<                 c = 27
---
>                 c = scr.get_wch()  # unicode char or int for special keys

Can you try to set the LC_ALL by running the command;

export LC_ALL=en_US.UTF-8

You can try “es_ES.UTF-8” as well, but I believe Mycroft needs en_US. Anyway, try the en first and you could use the ES later if it works.

The curses interface of the LC_ALL=en_US.UTF-8 cli looks like this:

but at the prompt in the bottom line no input is accepted visible, I tried too :help Ctrl-j, nothing happens, only Ctrl-c terminates the proc.

Not visible as in; falls of the screen or as in; it does not take any input whatsoever

The screen does not show any reaction on any keypress I tried.

I found log files below /var/… There is some problem with audio (pymplayer not found)

You can ignore the mplayer error.

But can you type a command blind and insert it via Enter.

Just type; “weather” followed by an enter.

Does mycroft tell you the weather or nothing at all?

I think I have to make an account first and pair the device, what I will do now.

I created an accout and paired my laptop using the code printed in the cli, but typing weather+ CR` does not give any visible reaction.

Ok, so at least we tackled one step, however (at least) one more to go…

Anything in any of the logs?

I spent a lot of time yesterday in debugging the input issue in the file mycroft-core/mycroft/client/text/text_client.py There is at line 1080 the central place where the chars get read from STDIN:

       c = scr.get_wch()  # unicode char or int for special keys

This call gives the above mentioned error message about not havin a valied attribute:

AttributeError: '_curses.curses window' object has no attribute 'get_wch'

That’s why I modified this line to

     c = scr.getch()

and with this change the keyboard input does not work corrctly. The line does not contain chars when ENTER is pressed…

I know less to nothing about Python and do not know how to fix this.

Can some Python guru please send me a 5-line example to test the above call to curses c = scr.get_wch() outside of Mycroft?

I think your issues relates to python and/or libncurses not having unicode wchar support. (wchar = wide characters)

the “scr.get_wch()” basically is a function to get the input as wchar. Considering you have an error of it not understanding the term “wch” which relates to WideCharacter this might be your pointer for google.

A quick google session brought me to this old stuff;

https://bugs.python.org/issue4787

Not sure how valid it still is and I am also at the point that it is getting out of my grasp as I am not a FreeBSD guru, but perhaps it gives you the right pointers to continue your search.

I am sorry I could not help you.

The problem is within the Python3.5 application port in FreeBSD: it does not use libcursesw.so.8, but libcurses.so.8. This issue was fixed in June 2017, I’m on March 2017 with my system. I have to update before doing further tests, which I can’t do before the end of the year.

Give me a break.

I found a way to selectively fix my Python3.5 installation to make it use libwcursesw.so:

History ========================================    Log Output Legend ================ Mic Level ===
 >> I don't understand.                             DEBUG output
 mycroft                                            skills.log, other
 >> Please rephrase your request.                   voice.log
 mycroft, say something
 >> something
 mycroft, how are you?
 >> Could be better
Input (':' for command, Ctrl+C to quit) ===========================================================
>

Great! Is it something that can be done through setup.sh such that experimental freebsd support can be added through a PR?

When I do:

History ========================================    Log Output Legend ================ Mic Level ===
 Hey Mycroft, how is the weather in Munich?         DEBUG output
 >> temperature, 34 °F (wind chill: 27 °F),         skills.log, other
    relative humidity, 93% (dew point: 32 °F),      voice.log
    wind speed, 8.1 mph, (29 minutes ago)
 Mycroft, sing a song
 >> I'm a bit nervous about my voice, but here
    goes nothing.

she (mycroft) answers and plays the song as audio. Is the audio coming from a local file? I do not see enough traffic on my wlan0 interface for coming down the audio from Internet… Anyway, what I have to configure or do for:

  1. Give commands/requests by voice
  2. Mycroft answers by voice and not by text

Is Mycroft a she or a he? :slight_smile:

Mycroft is a he, but you can configure a female voice on Mimic (1). The songs are locally stored and played back.

No. I have had to recompile Python3 with a special trick to apply a fix in advance, but it’s fixed anyway in very recent FreeBSD (since June 2017).

In any case, I will provide patches for the Mycroft scripts I have had to change.

1 Like

And the answers on my question? Locally too?

That depends on the skill. If it has locally sourced responses, sure. If it’s searching wikipedia or something, then would try heading off to the internet.