Maveo (garage door) integration

Hi all!

I have a Marantec garage door and the Maveo “addon” to control the garage door via smartphone. Until now there is no integration into Home Assistant (at least I couldn´t find any, only some ideas and requests).
I did some research and found a very simple way to integrate it into Home Assistant as a simple switch.

To get this up and running you first need to activate 3rdr party access to your system via the Maveo app and enable TCP:

(sorry, I use the German app :-))

By default the port is configured to 2785 (TCP)

Then you need to add some code to your configuration.yaml:

  - platform: command_line
        command_on: echo -e "C;Garagentor;lightOn" | nc 2785
        command_off: echo -e "C;Garagentor;lightOff" | nc 2785
        friendly_name: Garagentor Light Switch
  - platform: command_line
        command_on: echo -e "C;Garagentor;open" | nc 2785
        command_off: echo -e "C;Garagentor;close" | nc 2785
        friendly_name: Garagentor Switch

You need to change the name of your garage door. Please check the app for the correct name. In my case it´s “Garagentor”.
Restart Home Assistant and you can include the switches for the light and of course the garage door:

That works really good to switch on/off the light and open/close the garage door.

The only think I´m missing is a current status of the light and garage door. Until now I did not found a solution for that. So, currently you never know if the garage door is open or closed. But I´m still wokring on it.

BTW: all commands which are possible:
open: C;Garagentor;open
close: C;Garagentor;close
stop: C;Garagentor;stop
light on: C;Garagentor;lightOn
light off: C;Garagentor;lightOff

If you trigger these commands you will get a response like this:
garage door is open: S;Garagentor;open
garage door is closed: S;Garagentor;closed
garage door is opening: S;Garagentor;opening
garage door is closing: S;Garagentor;closing
light is on: S;Garagentor;lightOn
light is off: S;Garagentor;lightOff

The status codes are great, but you only get a status if you fire a command, which is not really helpful.
But as I said, I´m still in working on it and maybe there is a solution for it.

Any comments or better ideas how to integrate it?


Hi tomu, did you find out anything more about your garage door? I recently moved into a house with a moveo garage door and was wondering whether to purchase their smart module. For now we can only use the little remote controls that came with the door. Would appreciate any input as to how integration into Home Assistant was working


Thanks for the idea and good article. Nevertheless I have some problems with the integration into my HO. Could you please explain what IP address do you use in your code snipet? I assume that my integration maybe does not work because it is wrong in my environment. Is it the address from your router or the Maveo box?



it’s the IP of the maveo Box.

1 Like


i got a breakthrough with maveo and wanted to share my progress with you.

In the beginning I used the code for the switches from @tomu, and it worked great.
But since I also wanted to read/show the current state, I was hoping that there is another way without doing crazy python scripts and such things. So I looked for an alternative and ended up with Node-RED.
But since these were my first attempts with Node-RED, I failed mercilessly at the beginning. After reading a lot about Node-Red, and watching countless videos, I was able to report initial successes.

So, enough chatter, here’s my solution:

Note: I’m not an expert in Node-RED and not sure if all values/nodes are necessary, but it works!

Since English is not my main language and I also use the German apps/software, I try to describe and translate everything as best as I can. For this reason please forgive me small mistakes/inaccuracies.

  • I created 5 button nodes image in Node-RED, one for each possible command (open, close, stop, lightOn and lightOff).

  • Connected each of them with a change node image and as value i used a string with the command i wanted to send.

    • set: msg.payload
    • e.g. value: C;name of your garagedoor;open
      • list of possible commands:
        The commands are case sensitive, and be careful not to accidentally use a comma instead of a semicolon!
        • C;name of your garagedoor*;open
        • C;name of your garagedoor*;close
        • C;name of your garagedoor*;stop
        • C;name of your garagedoor*;lightOn
        • C;name of your garagedoor*;lightOff
          * Replace “name of your garagedoor” with the real name of your garage door!
  • Each of those change nodes is connected with its own tcp request node image but ensure to enable TCP in third party settings of your maveo app beforehand.

    • server: your local IP adress
    • port: 2785
    • return: Strings
    • close: never
  • all of the change node are connected with one switch node image

    • image
      • “enthält” means “contains”
      • “ansonsten” means “else”
    • since the responses contains either closed, closing, open, opening, lightOn or lightOff, i ended up with the values shown in the screenshot so that I can distinguish the answers as follows:
      • door:
        • S;name of your garagedoor;open
        • S;name of your garagedoor;opening
        • S;name of your garagedoor;close
        • S;name of your garagedoor;closing
      • light
        • S;name of your garagedoor;lightOn
        • S;name of your garagedoor;lightOff
      • command
        • R;OK (valid commands are confirmed in this way)
        • R;Error;…(Invalid Commands will be returned in this way)
  • after that i created one tcp out image and 3 function nodes image to cut off the first part of the response (which is always the same) so that only the actual status remains.

  1. door function:
    • connect to switch node output “clos” and “open”
    • under function Tab enter following code and enter your real garagedoor name:
msg.payload = msg.payload.split('S;**your door name**;')[1].substr(0, 8);
return msg;
  1. light function:
    *see small optional addition at the end.
    • connect to switch node output “light”
    • under function Tab enter following code and enter your real garagedoor name:
msg.payload = msg.payload.split('S;**your door name**;light')[1].substr(0, 3);
return msg;
  1. command function:
    • connect to switch node output “else”
    • under function Tab enter following code:
msg.payload = msg.payload.split('R;')[1].substr(0, 5);
return msg;
  1. tcp out
    • connect every output of the switch not to this
    • settings:
      • connect to port: 2785
      • host: your local ip address
  • Then i created a text helpers for door, light and command feedback (e.g. input_text.garage_door_status). In order to fill them with the data, I needed a call service node image for each function node. Configure each node as follows:

That’s all!!
Just create some dashboard cards and enjoy your fully controllable garage door including status feedback!

Small optional addition:

For the lights I wanted a tile that changes color depending on state (refer to screenshot above and below)

I couldn’t solve it any other way, so i created a few more nodes and connected these to the light function node:

  • one switch node image

    • image
  • one entity switch node image

    • enable input and create new device by clicking the edit button

      • Name: whatever you like or call it
      • Device: click edit Button and give it a name you like or call it, no further editing needed.
      • Type: switch
      • Name: whatever you like or call it
        as you can see in the screenshot below i entered nearly the same name everywhere
      • Device class: switch
  • two call service nodes image to toggle the switch (you just created) on and off.

    • image

    • image
      Now connect everything as shown in the screenshot above and your good to go.

1 Like

Important additional information:
You should always be patient if you want to send the next command. The gate takes some time to respond. Here is a typical example:
If the gate is about to close and you send “C;name of your garagedoor;open” the gate will stop for now. You need to send “C;name of your garagedoor;open” again, so that the gate opens completely.
You must take this behavior into account when automating the garage door!

Examples of Invalid Commands:

R;Error;Invalid command

For example if there is an error in capitalization

R;Error;Not enough parameters

For example when using a comma instead of a semicolon.

R;Error: Unknown garage

Garage is not known. Check the name of the garage in the nodes and/or in the maveo app.

Possible causes of error can be:

  • You are not in the identical network.
  • You have not activated the TCP server in the app, please check the toggle.
  • Your maveo box is offline or switched off.
  • Your firewall is blocking the port or has other settings that are causing problems.
1 Like

Hi Tom’u,

leider kann ich deinen Code nicht integrieren.

Könntest Du hier bitte unterstützen?

Wo genau muss ich den yaml Code einfügen.

Ich bekomme es leider nicht hin, will aber unbedingt meine Garage per CarPlay steuern.

Danke im Voraus




der Code muss eigentlich genauso, wie von mir im ersten Beitrag beschrieben, in die configuration.yaml eingefügt werden. HA restarten und dann kann man den Switch nutzen.
An welcher Stelle hast du Probleme?

Hi Tomu,

ich habe Deinen Code über den „Studio Code Server“ in die configuration.yaml eingefügt.

Leider erscheinen die switche nicht.

So schaut die config aus:

Wo finde ich die Switche nach dem Neustart?

Vielen Dank für Deinen Support



Ich sehe gerade, dass sich hier die Syntax wohl irgendwann mal geändert hat.
Bei mir sieht das inzwischen so aus:

  - switch:
      name: garagentor_light_switch
      command_on: 'echo -e "C;Garagentor;lightOn" | nc 2785'
      command_off: 'echo -e "C;Garagentor;lightOff" | nc 2785'
  - switch:
      name: garagentor_switch
      command_on: 'echo -e "C;Garagentor;open" | nc 2785'
      command_off: 'echo -e "C;Garagentor;close" | nc 2785'

Nicht vergessen die IP und den Namen deines Garagentores anzupassen.

Hi Tomu, das hat funktioniert.

Vielen lieben Dank.

Ich muss noch schauen, wie ich das sauber ins CarPlay integrieren kann.


Hallo! Verzeihung, aber ich spreche kein Deutsch, betrüge mit einem Übersetzer. Es scheint, dass die deutsche Version der App anders sein kann als die US-Version. Ich sehe keine Option zum Aktivieren von TCP in der Maveo-App. Ich habe die YAML-Konfiguration mit meiner IP und diesem Port ausprobiert, aber nicht funktioniert. Irgendwelche Alternativvorschläge? Vielen Dank!

Kann es sein, dass die Integration nur via Maveo App läuft?
Ich hab von ZAPF die ZAPF Connect App und entsprechend die Box.

Die Hardware ist allerdings von Maveo, es wird lediglich eine ZAPF Oberfläche implementiert

Hab die Konfiguration von tomu bei mir im yamel hinzugefügt.
Die neue Entität sehe ich auch, allerdings ist sie funktionslos.

Hi there,

The maveo box runs nymea (an open source smart home system: with some closed custom plugins for the marantec garages. Those plugins export the TCP/UDP command stuff you’ve been using above as described in the maveo app (Or ZAPF Connect) when enabling it in the settings of the app.
@shimi636 Apart from the colors and the icon, there’s no difference between maveo app and Zapf connect.

Additionally, there would be the option to use nymeas API which provides a jsonrpc based protocol and would allow controlling every feature of the box (e.g. reading connected sensors, starting firmware updates and whatnot): Here’s the documentation for it: json-rpc · documentation

@Enoche The US version doesn’t come with the maveo box, but instead it’s an all cloud based stick. That one does not offer those possibilities. Not sure if the cloud offers an api you could use. Perhaps play with the guest pass stuff and sniff the network traffic it does to the cloud.

Hi, wäre es möglich, dass du deine node red Lösung als json file zur Verfügung stellen könntest.