Xiaomi Vacuum Control

thnx mate now i have the perfect widget for my needs

1 Like

@Tetsuo another question ,is there a way to make the widget from portrait to landscape without splitting it to 2 separate widgets like this?

With the current implementation, you would have to look for the f7-row or f7-col components. Just looked through the source code and sadly I didn’t organize it very well. So changing it into your orientation is a bit of work.

You would need to wrap blocks in another way - difficult to describe without rewriting the whole widget.

But talking about rewrite: I’m currently in the process of rewriting it from scratch, combining it with a rule to have better control over everything and storing the state to not just have the selected rooms on just one device.

Maybe you could tell me your ideas and I see how I can add them to version 2.0.0. (no idea how fast it will be ready!)

2 Likes

Hey …

I like the widget and it works great … I have two question:

  1. Where I can change the color of the buttons from red to blue or white
  2. The MAP I see in Openhab is very pixelated, is there a way to adjust the resolution ?
  3. Can someone tell me why I have to maps size. I have two roborock´s and I get two different sizes

Thanks guys …

Nice to hear that you’re still working on the Widget! I’ve been using it a lot since implementing it.

Ideas:

  • Spot / Zone Cleaning (no Idea how to get the data for that though)
  • Automatically go to specific coordinates after cleaning for X hours (wait near the trash to empty the dust bin)

Maybe a timer would be an interesting option. so i can select rooms X, Y and Z to clean in a couple of hours from now or when everybody left.

thank you for your work :slight_smile:

Don’t expect it to be fast development :smiley: , but some comments on your ideas:

  • Spot / Zone Cleaning
    Been thinking about that as well, only solution that came to my mind is to overlay the whole image with a grid of blocks which toggle the status and with that you could implement something like Spot cleaning. But that’s actually a moonshot - no idea if it’s really possible to implement.
  • Go to coordinates after cleaning
    I like the idea, never thought about it this way and not sure how to implement that. My current dev-version at home has (besides many bugs) one additional button with predefined coordinates next to my dust bin. So I can easily trigger when I want it emptied. This will be part of the next version.

About the timer - I’d say that should be part of everyones rule set, not part of a widget. But with the new version will come a rule for triggering the actions. Would be a simple task to automate the widget with that I guess.

2 Likes

Holy crap dude. Let wow. Okay, this is great. I had been following this thread but I wasn’t expecting such great progress, I’m definitely adding this to my instance now :slight_smile: awesome work!!

Edit: hah! I tried to install it through the market place and I’m getting an error saying that it was not possible to install it. Tried a couple others that went fine - any hints??

Great to hear that you are still further enhancing the widget!
Looking forward to your rule as mine is a bit “basic”.

Thank you for all your awesome feedback and ideas / inspiration.

Talking about rules: Wich flavor of rules would you implement? I decided for me to go with a “new” filebased jscript rule in conf/automation/js - would that be something you support or rather wish for something else? (Quite sure that I wont change it - even if you wish for something else though! :stuck_out_tongue: But maybe you got good reasons why that is not the best choice.)

Will have to look how installation from marketplace works at all - as I published this one, there was no marketplace.

1 Like

I see. Let me know if you need me to test it again and I’ll do it.

hello,thnx for this super widget.I have a weird small problem with room cleaning,if the room number is 1 then it sends

Item 'MiRobotVacuumV2_Actions_ExecuteCommand' received command app_segment_clean[]

and not

Item 'MiRobotVacuumV2_Actions_ExecuteCommand' received command app_segment_clean[1]

as it should be.Any ideas?All the other numbers from 2 and up are working fine.

Hi @Constantinos_Contis,
think you’re using a modified version based on my post where I tried to help you.

I can only guess and hint you to have a look at the line in the widget, maybe there’s some check of yours wrong:

Or maybe post that line and I can see if I can help you!

1 Like

got it …thnx.At 50 years old my eyes and my brain arent work together well :slight_smile:

1 Like

is there a way to add a button to select 1 or 2 clean passes for roborock S5?

Currently not implemented and I’m also not aware of any function that allows to set the reptition for room cleaning. :confused:

My time is sadly limited to go on with development, but I will have an eye on it as soon as I find some time.

2 Likes

Dear all,
since i moved to a new appartment i am getting warnings and errors using the miio binding and roborock s7.
I got a new internet / WLAN router, however, i configured the same WLAN name and password. So the openhab RPI and roborock connect directly to the WLAN.
Strange thing is that the roborock values / items are available in openhab and they are changing correct. But the thing is changing from offline to online all the time and i am not getting an updated cleaning map. These are the values i get in the log:

2022-10-31 12:09:12.057 [INFO ] [miio.internal.cloud.MiCloudConnector] - Error logging on to Xiaomi cloud (0): Error getting logon location URL. Return code: 70016
2022-10-31 12:10:15.399 [INFO ] [miio.internal.cloud.MiCloudConnector] - Error logging on to Xiaomi cloud (0): Error getting logon location URL. Return code: 70016
2022-10-31 12:11:42.006 [INFO ] [miio.internal.cloud.MiCloudConnector] - Error logging on to Xiaomi cloud (0): Error getting logon location URL. Return code: 70016
2022-10-31 12:13:12.072 [INFO ] [miio.internal.cloud.MiCloudConnector] - Error logging on to Xiaomi cloud (0): Error getting logon location URL. Return code: 70016
2022-10-31 12:15:11.643 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'miio:generic:1BC50A3B' changed from ONLINE to OFFLINE (CONFIGURATION_ERROR)
2022-10-31 12:15:11.670 [INFO ] [ab.event.ThingStatusInfoChangedEvent] - Thing 'miio:generic:1BC50A3B' changed from OFFLINE (CONFIGURATION_ERROR) to ONLINE
2022-10-31 12:15:42.078 [INFO ] [miio.internal.cloud.MiCloudConnector] - Error logging on to Xiaomi cloud (0): Error getting logon location URL. Return code: 70016
2022-10-31 12:17:12.083 [INFO ] [miio.internal.cloud.MiCloudConnector] - Error logging on to Xiaomi cloud (0): Error getting logon location URL. Return code: 70016
2022-10-31 12:18:42.087 [INFO ] [miio.internal.cloud.MiCloudConnector] - Error logging on to Xiaomi cloud (0): Error getting logon location URL. Return code: 70016
2022-10-31 12:20:12.047 [INFO ] [miio.internal.cloud.MiCloudConnector] - Error logging on to Xiaomi cloud (0): Error getting logon location URL. Return code: 70016
2022-10-31 12:21:42.020 [INFO ] [miio.internal.cloud.MiCloudConnector] - Error logging on to Xiaomi cloud (0): Error getting logon location URL. Return code: 70016

I am using openHab 3.2 on a RPI 3b+.
I am using the Xiaomi Home App and read the token again. Device ID and Token didnt change compared to the thing configuration.

Can someone help?
Thank you!

The error is typically related to problems logging on to the cloud.
This is also why getting the map may be difficult.

Resolving cloud login problems is unfortunately not straightforward.
Sometimes it helps to reset your xiaomi cloud password or simply restarting opeenhab

1 Like

Hi marcel, unfortunately no luck. I changed the password and restarted openhab. No change. Any other suggestion what to do? :frowning:

Edit: forgot to change the login details in the binding settings… now i do have the map in openhab :slight_smile:

1 Like

Hi Guys,

first off thanks to @Tetsuo for this Widget nice work :+1:

I’m trying to adopt it for my ecovas Deebot. I got everything done and working fine. Just got one problem with the area cleaning. I got no numbers for the room i got letters. My skills are just to low to figure out how to send the correct command.

If i select a room i need to send the command: “spotArea:A;B;C” and so on…

Here is the part that’s needs attention:

    - component: oh-repeater
      config:
        sourceType: range
        for: i
        rangeStart: 0
        rangeStop: =JSON.parse(props.rooms).length / props.chunkSize
        fragment: true
        visible: =items[props.itemPrefix+"_State"].state !== "cleaning"
      slots:
        default:
          - component: f7-row
            config: {}
            slots:
              default:
                - component: oh-repeater
                  config:
                    for: roomChunk
                    in: =JSON.parse(props.rooms).slice(loop.i * props.chunkSize, props.chunkSize * (loop.i + 1))
                    fragment: true
                  slots:
                    default:
                      - component: f7-col
                        slots:
                          default:
                            - component: f7-card
                              config:
                                style:
                                  height: 3rem
                                  line-height: 3rem
                              slots:
                                default:
                                  - component: f7-card-content
                                    config:
                                      style:
                                        padding: 0
                                        marging: 0
                                        height: 3rem
                                    slots:
                                      default:
                                        - component: oh-button
                                          config:
                                            iconF7: =loop.roomChunk.icon
                                            iconSize: 1.2em
                                            active: '=vars["clean" + loop.roomChunk.roomId] ? true : false'
                                            text: =loop.roomChunk.label
                                            large: true
                                            action: variable
                                            actionVariable: ="clean" + loop.roomChunk.roomId
                                            actionVariableValue: '=undefined === vars["clean" + loop.roomChunk.roomId] ? true : !vars["clean" + loop.roomChunk.roomId]'
                                            style:
                                              height: 3rem
                                              line-height: 3rem
                                              text-align: center
                                              font-size: 1.1em
    - component: f7-row
      config: {}
      slots:
        default:
          - component: f7-col
            slots:
              default:
                - component: f7-card
                  slots:
                    default:
                      - component: f7-card-content
                        config:
                          style:
                            padding: 0
                        slots:
                          default:
                            - component: oh-button
                              config:
                                visible: =items[props.itemPrefix+"_State"].state !== "cleaning"
                                iconF7: map_pin_ellipse
                                iconSize: 1.2em
                                text: '=items[props.itemPrefix+"_State"].state === "cleaning" ? "Wird ausgeführt" : "Bereiche reinigen"'
                                large: true
                                action: command
                                actionItem: =props.itemPrefix+"_Command"
                                actionCommand: "='spotArea:' + ((vars.cleanA ? 'A';'') + (vars.cleanB ? 'B';'') + (vars.cleanC ? 'C';'') + (vars.cleanD ? 'D';'') + (vars.cleanD ? 'D';'') + (vars.cleanE ? 'E';'') + (vars.cleanF ? 'F';'') + (vars.cleanG ? 'G';'') + (vars.cleanH ? 'H';''))"
                                style:
                                  height: 2.5em
                                  line-height: 2.5em
                                  text-align: center
                                  font-size: 2em

My props for Room looks like this:

{"icon": "chat_bubble_2","roomId": "A","label": "Testraum1"},{"icon": "chat_bubble_2","roomId": "B","label": "Testraum2"},{"icon": "chat_bubble_2","roomId": "C","label": "Testraum3"},{"icon": "chat_bubble_2","roomId": "D","label": "Testraum4"},{"icon": "chat_bubble_2","roomId": "E","label": "Testraum5"},{"icon": "chat_bubble_2","roomId": "F","label": "Testraum6"},{"icon": "chat_bubble_2","roomId": "G","label": "Testraum7"},{"icon": "chat_bubble_2","roomId": "H","label": "Testraum8"}]

i think the problem is that this script use calculation for the room numbers and i use letters :frowning:

Thanks for the help
Cheers