Just wanted to let rhasspy user know that you can now connect your rhasspy and your jeedom to let jeedom handle scenarios with all intents data when rhasspy recognize an intent.
The declared goal is to have a complete replacement for snips/jeedom combo. And I really would keep the Jeedom plugin lightweight without mqtt dependancies on jeedom, as this caused some problems with snips plugin with lot of users.
So I guess the Jeedom plugin will take time for stable version, as I want to be sure rhasspy can run in production before.
I just install rhasspy docker container and it doesnât have api/intents yet so it wonât work before a new image is published. Works with venv only actually
Yes, there is no stable version, only beta.
On your jeedom, go to plugins, market, and enter rhasspy into search input. You should see it, if you have check the option to install beta plugins in your market account.
KiboOst,
thank you for the info
Ok thatâs better, just go to https: //www.jeedom.com/market ⊠log in, modify my profile and check the box Activate access to beta plugins.
For now the plugin is installed, I give the Ip address of my jeedom it is on this same machine that I install rhasspy, I saw the message in the plugin "Please import your Rhasspy assistant. â, I click onâ import the assistant âand selectâ keeping all the intents â, I got the messageâ Could not connect to Rhasspy! "
Where would the problem come from?
Ah! thatâs it it works, I changed the port number to 80, the intents
I do not know what to do !
Okay, Iâll take it up tomorrow, stop for tonight. you have to sleep
I will try to set an example scenario in the doc. And maybe make an english version of the doc if more users need it
Basically:
For an intent, you set a callback scenario that will start when this intent is recognized, with action start.
Under that you check all intent information that will be passed to the scenario as tags.
Then in your scenario, you use these tags as usual in Jeedom, to do whatever you want.
For example, IF tag(room) matches â/kitchen|house/â -> turn kitchen light on
Here it all depends on what entities/slots you use in rhasspy
You can also set several intents to start same scenario and check which intent it comes from:
IF tag(intent) == âlightsTurnOnJeedomâ THEN âŠ
Hope it helps
EDIT : I have updated the doc with some explanation and screens. Still french only for the moment
If you have Jeedom in english, is the plugin in english in Jeedom ?
I have just added a new command on rhasspy device : dynamic Speak
I have updated the doc, but for those not talking french, it is the same function I had done (and use everyday in production) for snips so you can get the doc from here :
I has to be created on devices in Jeedom, you just have to reimport your assistant to get it.
Hello KiboOst,
Ok I understand that you speak French, I am French, my jeedom is in French, I try to speak in English so that all visitors can follow the conversation and have the maximum details on the development of the plugin.
It is true it lacked a tutorial, I see that here advance by giving examples, I will get back to it a little later in the day.
By cons by going into the management of the plugin, I have something in the assistant, in the middle I have the message: Not Found
The requested URL was not found on this server.
"/>
In devices, I have a Master Rhasspy icon which when I click on it tells me successful test.
In the itentions nothing.
As said above, I come back in the day, I would start from scratch, I need to troubleshoot a pc in an emergency.
See you later.
Good evening KiboOst,
I reinstalled the plugin, it didnât change anything.
I still get the message âCould not connect to Rhasspy!â if i leave the port at 12101, iâm even going to my box to open the port, but itâs not better.
So I set the port to 80 and there is a loading of parameters except intentions.
I also always have in the assistant tab the message âThe requested URL was not found on this serverâ.
Below a screenshot:
Also at the end of this chapter:
It says: âBy clicking only one Rhasspy Device, you can run a TTS test on that device.â the test is successful.
What exactly is going to happen, should I hear a sound or something?
Since I have errors, I did not go further as creating a scenario.
No, itâs like when I click on the green button in the Assistant tab, if I put myself on it, my browser gives me the link to my jeedom.
It shows me the jeedom page, I think itâs because of port 80, I couldnât get it to work with port 12101, I donât think itâs my router since I opened the port and I have no better.
It is as if I entered the IP address of my Jeedom without putting 80. Example: 192.168.2.100 or 192.168.2.100:80 itâs the same.
But in my opinion something is missing behind the port, like:
192.168.2.100:80 / âŠ
I also just tested the link at the bottom of the assistant tab: http://192.168.2.100:80/core/api/jeeApi.php?plugin=jeerhasspy&apikey=xxxxxxxxxxxxxxxxxxxxxxxx&plugin=jeerhasspy&type=jeerhasspy
I have a blank page.
I have entered the address http://192.168.20.100/index.php?v=d&m=jeerhasspy&p=jeerhasspy in the browser to access the console and I also tested instead of the IP address in the config, I have errors like âInvalid access tokenâ in the configuration tab there is a window that is displayed is my jeedom login page.
and it crashed, I will have to restart.
Ok otherwise it will be all for tonight, we are looking at the rest tomorrow, so I am also starting to be quite busy because the end of year celebrations are approaching, so I have to make preparations.
The message âThe requested URL was not found on this serverâ comes from the version info that seems to get a wrong url, I will add a check on this. Seems jeedom never reached your rhasspy at all and entered a stored a wrong version information.
So:
You just need the url to go to your rhasspy.
When you are on this page, note the url and the port
Thatâs all you need on jeedom side.
Then import your assistant
Back into rhasspy interface, settings, enter the plugin url into (Assistant panel, internal url): Use a remote HTTP server to handle intents
EDIT : I can reproduce what you have / see (<html lang= in version field etc), this is because you enter your Jeedom url into configuration adresse for rhasspy. Will set definitely set a check here !
So all you need is your rhasspy url
I just published a new Beta of the plugin, that now check when importing the assistant if the version returned is really a version number, in case the user didnât entered the right rhasspy url into plugin configuration.
@Mytika you should update the plugin, then import the assistant. If you finnally got your rhasspy url right, it will be right, else it will reset to rhasspy version to 0.0.0 in the plugin so it wonât give errors.
Got it working the last plugin update.
Now iâm waiting for the rhasspy DEV to add the intents API and also to fix the dividedByZero issue.
I see you are evolved to test the new rhasspy-nlu versionâŠis it working for you ?
Not real, Iâm going to get the plugin in the market and for me it was clear that the rest had to be done alone, itâs my dream.
In short, it was I who did not follow the movement
Iâve added a way to load intents even in actual docker version which does not have /api/intents.
No problem for next version as it first check for api/intents, and of not there, use another solution.
Updated the doc to say that⊠well⊠you need rhasspy to use rhasspy
Last beta show intents a bit better, witch intents having callback scenario or not, and on hover, which scenario is set and its tags. Which avoid having to open each intent to check that.
Now looking for a solution to be notified when wakeword is detected so Jeedom can mute sound in the room before we start talking to rhasspy. Will help the asr greatly, do it with snips and it works great.
If Jeedom can have this notification, then next big step for the plugin will be supporting base/satellite configuration when things get sorted on rhasspy side
Some bugfix on filter jeedom intent option, better UI (intents now in groups like scenarios, and some minor stuff).
And new option to set two variables rhasspyWakeWord / rhasspyWakeSiteId when rhasspy detect wakeword ! This allow you to start a scenario when wakeword is detected, to mute music for example when you are talking to rhasspy. Many thanks @synesthesiam for this !
@KiboOst , thanks for this plugn I didnât test it as I didnât migrate from Snips to Rhasspy. About this migration, do you have a quick tutorial, some tips, or whatever, to easily migrate from Snips to Rhasspy
I finally got my rpi zero and got a satellite working. Not so easy on a pi 0 buster but all works fine now.
So Iâve integrated satellites into the plugin.
They are automatically created once you ask something on one of them. Indeed when one device post an intent to Jeedom I can get its IP inside Jeedom and create the device. But I donât have its port so I create it with default 12101 port. Letâs see in the future if we can get all devices from a master endpoint or such.
All works nice, scenario can answer with tts on the satellite where the intent was asked
Just for fun:
top: my jeedom alpha, on which I develop plugins and the Jeedom core V4
Bottom left : rhasspy master, with docker container. It handle all asr/nlu/intents and such (picoTTS, kaldi)
Bottom right : rpi 0WH, rhasspy venv with only wakeword and TTS.
Both with HermesLedControl and custom snowboy
Not sure I will publish this beta, as I prefer waiting for the next full hermes/services rhasspy ! I guess I will have to re-install everything to test and adapt the plugin.
Hope all hermes topics will be published like snips/amice to HermesLedControl can finally work as advertise. I also have a rhasspy_logger that listen to MQTT topics to log wake/think/speak for entire system (master+sats). Works perfect with snips, so will all mqtt topics it will works the same with rhasspy.
With next Rhasspy big step, this plugin could go to stable version soon
I have written several tools beside the plugin that everyone could benefit. Once all this is stable I will write some doc and share everything.
Rhasspy batcher : python tool to batch test intents after a new training
Rhasspy logger : python tool that listen mqtt and write a log file with wakewords, thinking / intents recognized, speak so you can read/show it anywhere and keep history of master/satellites interactions.
Snowboy custom wake tool : python tool to record samples and generate pmdl file.
For jeedom users, a way to handle intents with python directly inside Jeedom.
And different tips here and there
@synesthesiam the ball is in your court Give us full standard hermes topics and rhasspy-satellite container
Satellites can now be added manually.
Each device, being master or a satellite, have a set of buttons to automatically edit rhasspy profile, open interface, test tts etc.
Finally, just a note to say that jeeRhasspy fully support Jeedom Core v4.0 and v4.1 (even next one ) and Iâm not able to test it on Jeedom v3. It shouldwork, but I wonât spend time on Jeedom v3 anymore.
Once more, many thanks to @synesthesiam and everyone working on this wonderful assistant!
Hello @KiboOst, thanks a lot for your great job on this plugin
I just migrated from Snips to Rhasspy.
I am not using any custom wakeword and with Rhasspy I didnât find any wakeword engine working as good as snips hotword âŠ
So I install Rhasspy on Docker and I also install snips-satellite package on docker to handle wakeword engine.
All is working fine except the ASK function because my snips-satellite cannot be declare as a satellite in jeerhasspy . I see in jeerhasspy logs that you are using Rhasspy HTTP API .
I am not sure but may be if your plugin used the MQTT websocket it will work ?
Hi,
Indeed jeerhasspy plugin wonât work with a snips satellite. It doesnât install any dependency and doesnât listen on mqtt.
Maybe you could try a plugin such a jmqtt but you would handle that with a code block I guess, making your own message on right mqtt topics to handle that. A starting point could be the snips plugin.
Rhasspy provide a lot of http handler/endpoints which allow the jeerhasspy plugin to stay dependancyless, being very simple and not requiring any daemon running, which is a strong point I think.
Thanks for your feedback
I am not skilled enough to do such integration but thanks for the suggestion !
Rhasspy provide a lot of http handler/endpoints which allow the jeerhasspy plugin to stay dependancyless, being very simple and not requiring any daemon running, which is a strong point I think.
Make sense !
This is not the topic ofthis thred but did you manage to find a suitable wakeword engine to put rhasspy in production ?
I tested Raven with 3 reccords of âhey snipsâ but it works 1 in 10 and wake up when I donât ask him âŠ
Snowboy no more usable âŠ
Only problem preventing me to put rhasspy in production actually is the inability to recognize anything or even stop listening with bakground music once the wakeword has been recognized.
Hope @synesthesiam and other sound gurus are working on this, because apart this, all is just awesome.
I finally manage to achive what I want to do (just need to perform some more tests to validate it)
I manage (via asound.conf) to share my microphone between my rhasspy dockerâs container and my snips-satellite dockerâs container
By that way, I can use Snips wakeword engine and, when I want to use a #[Rhasspy-Intents][TTS-#profile#][Ask]# command, the answer is recorded via Rhasspy
One question @KiboOst, when a ASK is awaiting an answer there is no âbeepâ sound is it an expected behanioour ?
We can now rename and move rhasspy devices in other objects, to show them on Dashboard/Design etc.
change: The SetVolumen command is now from 0 to 100 to better handle interface sliders. In Jeedom v4.2 we can set sliders like we want, but wanted to support actual version To find where this command is used in scenarios and such, just go to domotic overview, open the equipment and this command, it will provide a link to anything using it. You can also use Tools/Search and search for this command.
I use Jeedom in english, but actually plugin documentation is in french only. If several people need it, I could translate documentation to english (the plugin itself ever support english Jeedom).
Complete rewrite of intent management inside Jeedom. They are not anymore stored as equipments, but now as rhasspy_intent as a whole with their own code and DB table inside Jeedom.
So, no more need for the Rhasspy-Intents object, which was there only to get intent equipments.
Updating the plugin will migrate intents in new system, and delete Rhasspy-Intents object. Devices wonât have parent object then.
You can now access device settings (name, parent object, category) and advanced configuration.
UI and under the hood code is now a lot more jeedomian and wonât evolve a lot now.
Intent handling now support multiple entities. For example, if you ask to turn on light in the kitchen and living-room, your scenario will receive your tag with âkitchen,living-roomâ.
For example: Tags : {"#intent#":"TurnOn","#confidence#":"1","#wakeword#":"ravenCustom","#siteId#":"Salle","#house_room#":"kitchen,living-room"}
So you can check in your scenario:
IF tag(house_room) matches "/kitchen|downstair/" THEN turn kitchen on
IF tag(house_room) matches "/living-room|downstair/" THEN turn living-room on
It will then turn both light on.
Just for fun, a fast presentation (sorry for poor gif encoding)