I search a way to control my CybovacE31 with a computer to integrate it into home
automation system. I know that it is compatible with google home and Alexa but i don't find the protocol used.
Do you have an idea how to do it?
Thanks.
My vacuum : https://kyvol.com/products/cybovac-e31
Not really an answer, but got too long for a comment, so posting it here:
TL&DR; It's likely to use a proprietary protocol between the cloud and the device. It's not public and unlikely to become public.
In case of Alexa, you need to enable a proper skill, right? It's also likely to use a vendor specific mobile app for the initial discovery that uses either Wifi or BLE. Once discovered, the device gets wifi credentials and the skill sends discovery to Alexa, so it can be controlled.
So the registration flow looks like this: Vendor Mobile -> locate device -> get wifi credentials -> send wifi credential to device -> connect device to the cloud using user account.
To control device with Alexa the Amazon account should be linked with the vender user account and skill should be enabled.
The flow for a voice command looks something like this: Echo -> (internet) -> Alexa Cloud -> Skill -> (internet) -> Device.
Why I'm explaining all above? This flow is relatively complicated and it's not enough to know the protocol, but also device cloud should trust you, otherwise you can hack the device. Therefore to control the device, you'll need to be somehow registered and trusted. For most vendors creation of such a support doesn't worth it, therefore they don't publish the protocol.
Related
I am interested in building a device that will be connected to my home network and I will be able to control remotely via an app on my cell phone.
My original thought is this:
Both systems will pull data from some cloud service
My mobile device will modify a data entry in the cloud service
The device will be constantly pulling this data and update the necessary setting when they change
Concerns with the original thought:
Constant pulling of the device in order to see when data has been changed (inefficient)
No way to communicate from the device to the phone (feature limiting)
Question:
What is the best way to create the link between my mobile device and the device that will remain in my home?
Potential similar architectures include Nest, Ring, etc.
The concept is correct - typically, IoT devices and mobile apps communicate through the cloud. There are cases when you want to connect your app directly to a device (e.g. through bluetooth, LAN or sometimes even internets), but that is done usually for a specific reason, e.g.:
IP cameras generate a lot of traffic, putting it through a centralized server is very expensive, so cheap home products do P2P from mobile app (centralized served could help you get the IP address for your camera)
TV with phone as remote control. Using cloud service hear would be weird and limiting access to LAN simplifies the setup
In general cases (Next, Ring) you can be pretty sure the IoT devices talk to the cloud, instead of the mobile app directly. It both offer more feature (as the data can be processed in bulk in cloud), but there's also benefits for using the cloud even if it's used only to relay data.
In many cases, you also want to limit traffic (e.g. save batteries or data plan). Two key aspects to be able to do that:
Don't waste time setting up a connection. That means connecting to a stable cloud service (your mobile might not be online) and using optimized network (e.g. LAN with static IP address, NB-IoT or LTE-M)
Choose optimal M2M protocol. Two popular M2M protocols are COAP ("light weight HTTP") and MQTT (a messaging protocol)
Once you've set up how both your device and mobile app can exchange data with the server, it's up to you to design how to use that. Note that there's nothing stopping from the device to also push data to the server - all connection (IoT device <-> cloud <-> mobile app) can use two-way protocols.
I am working on Amazon smart home skill for controlling the smart home appliances. I am done with creating a skill for that. Now I want to test my skill with any type of virtual device. Is there any way (or virtual devices) for testing the smart home skill without using the physical device.
There's 2 options I use for testing without having physical hardware in front of me.
While editing the skill in the developer console (developer.amazon.com) there's a 'Test' tab that allows you to test out your skill and see payloads sent/returned too.
There's also a cool online tool called Echoism (https://echosim.io/welcome) that will allow you to log into your Amazon account and interact with Alexa through the browser. To use this you'll need to make sure tests are enabled for the skill through the developer console in your account.
There are also some libraries depending on what language you're writing in that will allow you to test locally without having to deploy to lambda first. If you're using Node.js try out node-lambda (https://www.npmjs.com/package/node-lambda). You can create your own payload and test that against your skill locally. You can also package up your skill, test it and then deploy to lambda via terminal. If you're using Python then try out PythonLambda (https://github.com/nficano/python-lambda). It has the same features as node-lambda.
I've found this amazing site to generate my first Alexa skill.
I've uploaded the standard template they have and it passes all the checks.
Please note that this skill has not published yet
and When I say (to the device), Alexa, open api starter, Alexa (device) cannot find that. I have an echo dot 2nd gen.
Do we need to publish a skill to be available for the Alexa device?
In my test mode, I've already enabled the Test for this skill.
Yes, you can use the skill locally for development purposes. If you go to the Alexa apps you should see your app located in there and you can then install it. Once installed you can ask Alexa to open the app.
Although, you can't use other peoples apps that are in development because the app is associated with the Amazon account.
You need to register your device to the development account that you are using.
Once logged in from your development account go here (alexa.amazon.com)
Go to the settings tab and click set up a new device
You will be guided through simple instructions on how to connect your device.
Once you successfully connected the device, you can use all skills from your developer account.
Note: You can have more devices connected to the same developer account, but each device can be connected to just one developer account at a time.
Unfortunately this doesn't work all the time - not sure if it's missing information (for instance on the Echo Screen you have to tap the serial number repeatedly to put the device into dev mode - there doesn't seem to be the same thing for the dot - and if there is it's not mentioned here.)
It could also just be the sheer number of variables in both the alexa ecosystem, the app and what phone it is on and the network the device is connected to and the dec console. One set of instructions doesn't always cover all the possibilities.'
I have found that when using the skill kit with vscode that I have to go into the web-based skill editor and do a build before it works with an echo device.
It's my first few hours today to use Alexa so please bear with me for now.
I followed a tutorial that I found and was able to configure Alexa skills upto the Lamdba function. I was able to use the Test section inside Lamdba service and it worked really well. It can pull data from the external api. I was able to click the Listen button too.
However, I can't figure out how I will deploy this so that I can call the utterances using my real physical Alexa device. Not sure what to do next. And is it possible that I'll be the only one to use it?
You don't have to publish it to use it on your physical alexa device. As long as the alexa device is configured with the same Amazon account that you use to configure your skill then you can use the skill 'live' on your device.
In the configuration, I believe you must have progressed to the 'test' tab, but you don't need to fill in the publishing info to test the skill both virtually and on the device.
UPDATED: We are building Mobile apps on Windows, IOS & Android platform to generate OTP (one time password) for a regulated system. The system will prompt challenge phrase when user attempt to login and the displayed challenge need to be keyed into mobile App to generate the OTP. The generated OTP is then entered back into System to successfully login.
So far the requirements for mobile OTP generate app is good as we can expose a service to generate OTP with required security.
But, we have a wired requirement to support the same feature with offline capability where mobile has no internet connectivity. The only choice we know is to embed the OTP algorithm & key into app and apply suitable security mechanism. Algorithm is custom built propitiatory algorithm and without compromising security we need to achieve the offline capability. Is that a good approach to embed algorithm & key into app to enable offline capability? What is the recommended solution.
I have no idea what you mean by "Enterprise will expose API".
But, you will need something tied to the physical phone device, like the SIM module (i.e. the phone number) or an app with secure/private storage for two-factor to work.
An API exposed on the internet, without a strong link to the authentication token (phone), is not secure.
So, I guess the only answer is: Yes, you should implement the "OTP algorithm" in the app. The app must store the shared secret in a private storage that is not (easily) accessible to other apps. Then, depending on the kind of OTP, you need to provide some means of synchronization between the app and the server. For Google's Authenticator this is just establishing a common timebase because the "OTP" is not strictly one-time but changes (only) depending on the current date+time; hence the current time becomes the "challenge" the server implicitly poses for the client to return the correct response. The good thing is that you don't need access to the internet to know the current time in your app. You only need to synchronize the timebase now and then to make sure the clock in your app does not differ too much from the server's.
The server could instead also send an explicit challenge, like a sequential number. This challenge would be displayed to the user attempting to log-in, the user would have to type the number into the app and return the app's answer to the server.
Many more options are available, but the bottom line is: To provide reasonable security, the OTP must be calculated on the phone.