Virtual garage door app for mimolite

Hello, I have many Fortrezz Mimolite devices used to control garage doors. They open / close and sense if the door is open or closed.

The community drivers for these Mimolites work sometimes and not other times, it depends on the latest hub versions.

What I would like to do is set them as Fortrezz minolite as the device type, which always works perfect and then have an app to control a virtual garage door device. I know this should be possible but I can not find an app that works. Can someone recommend one or would someone be willing to write one? I really hate to leave Hubitat but this is very frustrating. Thank you!

I don't think you need an app for this.

  1. Create a virtual garage door using the built-in virtual garage door controller built-in driver.
  2. Create rules that map Open() and Close() of the virtual device to the appropriate commands of your Mimolite device.
  3. Use the virtual garage door in your Dashboards etc.

I was looking for an app because I have 24 doors with Mimolites. That would be a lot of rules to right. Is there a way to write a simple app to do this?

24 rules. Or the same number of child apps (1 per door). Also, rules can be duplicated now.

Ok, can you please explain how I would write a rule to do this exactly? I know how rule Machine works but would need some guidance on how to write this one.

I'll do one tomorrow. But can you send me a screen shot of any one Mimolite device page along with the current states (using the built-in driver).

I would greatly appreciate it!

Here is a rule that controls the Mimolite based on the state of a virtual garage door controller. It also attempts to keep the state of the Virtual Garage Door in sync with the status of the Mimolite contact sensor (which monitors door state).

I don't have a Mimolite, so I can't test it. But I think this should work:

So here you go:

The following conditions will have to be created for this rule:

Finally, I have exported this rule to "json" so you can try importing it - it will make recreating it a lot easier.

Rule to import

{"deviceReplacements":{"5577":{"deviceName":"Virtual Mimolite","deviceLabel":"","deviceTypeName":"Fortrezz MIMOlite","deviceTypeNamespace":"hubitat"},"5576":{"deviceName":"Virtual GDC","deviceLabel":"","deviceTypeName":"Virtual Garage Door Controller","deviceTypeNamespace":"hubitat"}},"appReplacements":{"5779":{"appTypeName":"Rule-5.1","appTypeNamespace":"hubitat","appType":"sys","appName":"Rule-5.1","appLabel":"Virtual GDC to Mimolite <span style='color:red'>(Not Installed)</span>","parentAppInstalledAppId":"5523","parentAppTypeName":"Rule Machine","parentAppTypeNamespace":"hubitat","parentAppName":"Rule Machine","parentAppLabel":"Rule Machine","childApps":{},"singleInstance":false}},"appData":{"5779":{"state":{"parens":{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0},"actionDone":true,"ndx":26,"installedRules":[],"dateFormat":"yyyy-MM-dd","clonedName":"Virtual GDC to Mimolite <span style='color:red'>(Not Installed)</span>","selectActionsParams":{"label":"Virtual GDC to Mimolite"},"editCondIf":null,"stopOnST":false,"usesTime":false,"inIf":null,"trigCustoms":[],"repeating":null,"capabDone":true,"locationBlocked":[],"pbFixed":true,"inRepIf":null,"ruleNdx":10,"actionList":["2","3","4","6","5","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25"],"firstR":{"2":false,"3":false,"4":false,"5":false,"6":false,"7":false,"8":false,"9":false},"timeTriggers":[],"locVars":{},"allVarsO":[],"actLabelIndent":"","varSettingsUpdated":true,"certainTimes":[],"allVarsS":[],"allVarsT":[],"prevState":{"PB":"true","5576":"closed","5577":"unknown"},"eval":{"2":["6"],"3":["4"],"4":["7"],"5":["3"],"6":["3"],"7":["17"],"8":["4"],"9":["16"]},"installedCapabs":["Configuration","RelativeHumidityMeasurement","ColorMode","HealthCheck","Initialize","PowerSource","SpeechSynthesis","Momentary","DoubleTapableButton","Light","TamperAlert","Battery","Valve","CarbonMonoxideDetector","ZwMultichannel","PresenceSensor","ColorControl","SignalStrength","Polling","ChangeLevel","PowerMeter","Switch","IlluminanceMeasurement","Tone","Bulb","Sensor","WaterSensor","EnergyMeter","ThreeAxis","VoltageMeasurement","ContactSensor","Notification","Refresh","ReleasableButton","ColorTemperature","SwitchLevel","HoldableButton","MotionSensor","DoorControl","Outlet","Telnet","UltravioletIndex","Actuator","Thermostat","AudioVolume","LockCodes","PressureMeasurement","PushableButton","GarageDoorControl","Lock","TemperatureMeasurement","AccelerationSensor","Alarm","SmokeDetector","Chime"],"capabstrue":{"1":"Virtual GDC garage door *changed*","2":"Virtual Mimolite contact *changed*","3":{}},"lastEvtDate":"21-Jul-2022","nestedInIf":[],"actions":{"22":{"wait":null,"delay":"","modes":{},"method":"getOCGarage","indent":"\\t\\t","rule":null,"label":"\\t\\tClose: Virtual GDC\\n","cond":0},"23":{"wait":null,"delay":"","modes":{},"method":"getExitRule","indent":"\\t\\t","rule":null,"label":"\\t\\tExit Rule\\n","cond":0},"24":{"wait":null,"delay":"","modes":{},"method":"getEndIf","indent":"\\t","rule":null,"label":"\\tEND-IF\\n","cond":0},"25":{"wait":null,"delay":"","modes":{},"method":"getEndIf","indent":"","rule":null,"label":"END-IF\\n","cond":0},"10":{"wait":null,"delay":"","modes":{},"method":"getExitRule","indent":"\\t\\t","rule":null,"label":"\\t\\tExit Rule\\n","cond":0},"11":{"wait":null,"delay":"","modes":{},"method":"getEndIf","indent":"\\t","rule":null,"label":"\\tEND-IF\\n","cond":0},"12":{"wait":null,"delay":"","modes":{},"method":"getEndIf","indent":"","rule":null,"label":"END-IF\\n","cond":0},"13":{"wait":null,"delay":"","modes":{},"method":"getIfThen","indent":"","rule":6,"label":"IF (Virtual Mimolite contact open<span style='color:orange'>(F)</span><span style='color:orange'> [FALSE]</span>) THEN\\n","cond":0},"14":{"wait":null,"delay":"0:00:10","modes":{},"method":"getDelay","indent":"\\t","rule":null,"label":"\\tDelay 0:00:10\\n","cond":0},"15":{"wait":null,"delay":"","modes":{},"method":"getIfThen","indent":"\\t","rule":7,"label":"\\tIF (Virtual GDC garage door closed<span style='color:green'>(T)</span><span style='color:green'> [TRUE]</span>) THEN\\n","cond":0},"16":{"wait":null,"delay":"","modes":{},"method":"getOCGarage","indent":"\\t\\t","rule":null,"label":"\\t\\tOpen: Virtual GDC\\n","cond":0},"17":{"wait":null,"delay":"","modes":{},"method":"getExitRule","indent":"\\t\\t","rule":null,"label":"\\t\\tExit Rule\\n","cond":0},"18":{"wait":null,"delay":"","modes":{},"method":"getEndIf","indent":"\\t","rule":null,"label":"\\tEND-IF\\n","cond":0},"19":{"wait":null,"delay":"","modes":{},"method":"getElseIf","indent":"\\t","rule":8,"label":"ELSE-IF (Virtual Mimolite contact closed<span style='color:orange'>(F)</span><span style='color:orange'> [FALSE]</span>) THEN\\n","cond":0},"2":{"wait":null,"delay":"","modes":{},"method":"getIfThen","indent":"","rule":2,"label":"IF (Virtual GDC garage door opening<span style='color:orange'>(F)</span><span style='color:orange'> [FALSE]</span>) THEN\\n","cond":0},"3":{"wait":null,"delay":"","modes":{},"method":"getIfThen","indent":"\\t","rule":3,"label":"\\tIF (Virtual Mimolite contact closed<span style='color:orange'>(F)</span><span style='color:orange'> [FALSE]</span>) THEN\\n","cond":0},"4":{"wait":null,"delay":"","modes":{},"method":"getOnOffSwitch","indent":"\\t\\t","rule":null,"label":"\\t\\tOn: Virtual Mimolite\\n","cond":0},"5":{"wait":null,"delay":"","modes":{},"method":"getEndIf","indent":"\\t","rule":null,"label":"\\tEND-IF\\n","cond":0},"6":{"wait":null,"delay":"","modes":{},"method":"getExitRule","indent":"\\t\\t","rule":null,"label":"\\t\\tExit Rule\\n","cond":0},"7":{"wait":null,"delay":"","modes":{},"method":"getElseIf","indent":"\\t","rule":4,"label":"ELSE-IF (Virtual GDC garage door closing<span style='color:orange'>(F)</span><span style='color:orange'> [FALSE]</span>) THEN\\n","cond":0},"8":{"wait":null,"delay":"","modes":{},"method":"getIfThen","indent":"\\t","rule":5,"label":"\\tIF (Virtual Mimolite contact open<span style='color:orange'>(F)</span><span style='color:orange'> [FALSE]</span>) THEN\\n","cond":0},"9":{"wait":null,"delay":"","modes":{},"method":"getOnOffSwitch","indent":"\\t\\t","rule":null,"label":"\\t\\tOff: Virtual Mimolite\\n","cond":0},"20":{"wait":null,"delay":"0:00:10","modes":{},"method":"getDelay","indent":"\\t","rule":null,"label":"\\tDelay 0:00:10\\n","cond":0},"21":{"wait":null,"delay":"","modes":{},"method":"getIfThen","indent":"\\t","rule":9,"label":"\\tIF (Virtual GDC garage door open<span style='color:orange'>(F)</span><span style='color:orange'> [FALSE]</span>) THEN\\n","cond":0}},"usesDate":false,"actNdx":26,"lastEvtValue":0,"allVarsGT":[],"waitEvents":[],"private":"true","isPredicate":false,"allVars":{},"simpleCond":false,"changedValues":true,"nestedRepIf":[],"lastEvtTime":"10:55","condOper":"cond","allVarsI":[],"nestedElse":[null,null,null,null,null,null],"varTriggersFixed":true,"cutAction":[],"allVarsD":[],"broken":false,"rulesList":[],"nestedLabel":[],"oldInputAct":true,"inputAct":true,"waitCondNdx":2,"token":1,"capabsfalse":{"3":"Virtual Mimolite contact open","4":"Virtual Mimolite contact closed","5":{},"16":"Virtual GDC garage door open","6":"Virtual GDC garage door opening","17":"Virtual GDC garage door closed","7":"Virtual GDC garage door closing","18":{},"8":{}},"stPrimed":true,"timeTriggersW":{},"allLocalVars":{},"varSettingsOld":{},"timeFormat":"HH:mm","olddValues":true},"appSettings":[{"deviceList":null,"multiple":false,"name":"state_16","type":"enum","value":"open"},{"deviceList":null,"multiple":false,"name":"state_17","type":"enum","value":"closed"},{"deviceList":null,"multiple":true,"name":"copyAct","type":"enum","value":null},{"deviceList":null,"multiple":false,"name":"actSubType.6","type":"enum","value":"getExitRule"},{"deviceList":null,"multiple":false,"name":"butEndIf","type":"button","value":""},{"deviceList":null,"multiple":false,"name":"actSubType.7","type":"enum","value":"getElseIf"},{"deviceList":null,"multiple":false,"name":"actSubType.8","type":"enum","value":"getIfThen"},{"deviceList":null,"multiple":true,"name":"disableAct","type":"enum","value":null},{"deviceList":null,"multiple":false,"name":"actSubType.9","type":"enum","value":"getOnOffSwitch"},{"deviceList":null,"multiple":false,"name":"cond","type":"enum","value":null},{"deviceList":null,"multiple":false,"name":"tstate1","type":"enum","value":"*changed*"},{"deviceList":null,"multiple":false,"name":"actSubType.2","type":"enum","value":"getIfThen"},{"deviceList":null,"multiple":false,"name":"tstate2","type":"enum","value":"*changed*"},{"deviceList":null,"multiple":false,"name":"actSubType.3","type":"enum","value":"getIfThen"},{"deviceList":null,"multiple":false,"name":"actSubType.4","type":"enum","value":"getOnOffSwitch"},{"deviceList":null,"multiple":false,"name":"butElse","type":"button","value":""},{"deviceList":null,"multiple":false,"name":"actSubType.5","type":"enum","value":"getEndIf"},{"deviceList":null,"multiple":false,"name":"editToken","type":"button","value":""},{"deviceList":{"5577":"Virtual Mimolite"},"multiple":true,"name":"onOffSwitch.9","type":"capability.switch","value":null},{"deviceList":{"5577":"Virtual Mimolite"},"multiple":true,"name":"onOffSwitch.4","type":"capability.switch","value":null},{"deviceList":null,"multiple":false,"name":"actType.21","type":"enum","value":"condActs"},{"deviceList":null,"multiple":false,"name":"actType.20","type":"enum","value":"delayActs"},{"deviceList":null,"multiple":false,"name":"delayAct.9","type":"enum","value":"none"},{"deviceList":null,"multiple":false,"name":"actType.23","type":"enum","value":"delayActs"},{"deviceList":null,"multiple":false,"name":"actType.22","type":"enum","value":"lockActs"},{"deviceList":null,"multiple":false,"name":"actType.3","type":"enum","value":"condActs"},{"deviceList":null,"multiple":true,"name":"logging","type":"enum","value":null},{"deviceList":null,"multiple":false,"name":"actType.2","type":"enum","value":"condActs"},{"deviceList":null,"multiple":false,"name":"editCond","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"actType.5","type":"enum","value":"condActs"},{"deviceList":null,"multiple":false,"name":"actType.4","type":"enum","value":"switchActs"},{"deviceList":null,"multiple":false,"name":"actType.7","type":"enum","value":"condActs"},{"deviceList":null,"multiple":false,"name":"delayAct.4","type":"enum","value":"none"},{"deviceList":null,"multiple":false,"name":"actType.6","type":"enum","value":"delayActs"},{"deviceList":null,"multiple":false,"name":"updateRule","type":"button","value":""},{"deviceList":null,"multiple":false,"name":"actType.9","type":"enum","value":"switchActs"},{"deviceList":null,"multiple":false,"name":"hasRule","type":"button","value":""},{"deviceList":null,"multiple":false,"name":"actType.8","type":"enum","value":"condActs"},{"deviceList":null,"multiple":false,"name":"delayMinute.14","type":"number","value":""},{"deviceList":{"5577":"Virtual Mimolite"},"multiple":true,"name":"rDev_3","type":"capability.contactSensor","value":null},{"deviceList":null,"multiple":false,"name":"delayHour.20","type":"number","value":""},{"deviceList":null,"multiple":false,"name":"rCapab_16","type":"enum","value":"Garage door"},{"deviceList":{"5576":"Virtual GDC"},"multiple":true,"name":"rDev_6","type":"capability.garageDoorControl","value":null},{"deviceList":null,"multiple":false,"name":"rCapab_17","type":"enum","value":"Garage door"},{"deviceList":{"5576":"Virtual GDC"},"multiple":true,"name":"rDev_7","type":"capability.garageDoorControl","value":null},{"deviceList":null,"multiple":false,"name":"rCapab_18","type":"enum","value":""},{"deviceList":{"5577":"Virtual Mimolite"},"multiple":true,"name":"rDev_4","type":"capability.contactSensor","value":null},{"deviceList":{"5576":"Virtual GDC"},"multiple":true,"name":"garageOpenClose.16","type":"capability.garageDoorControl","value":null},{"deviceList":null,"multiple":false,"name":"pointless","type":"button","value":""},{"deviceList":null,"multiple":true,"name":"cutAct","type":"enum","value":null},{"deviceList":{"5576":"Virtual GDC"},"multiple":true,"name":"garageOpenClose.22","type":"capability.garageDoorControl","value":null},{"deviceList":null,"multiple":true,"name":"deleteAct","type":"enum","value":null},{"deviceList":null,"multiple":false,"name":"oper","type":"enum","value":null},{"deviceList":null,"multiple":false,"name":"not16","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"not17","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"tCapab1","type":"enum","value":"Garage door"},{"deviceList":null,"multiple":false,"name":"tCapab2","type":"enum","value":"Contact"},{"deviceList":null,"multiple":false,"name":"delayAct.16","type":"enum","value":"none"},{"deviceList":null,"multiple":false,"name":"actionDone","type":"button","value":""},{"deviceList":null,"multiple":false,"name":"actSubType.10","type":"enum","value":"getExitRule"},{"deviceList":null,"multiple":false,"name":"tCapab3","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"actSubType.12","type":"enum","value":"getEndIf"},{"deviceList":null,"multiple":false,"name":"actSubType.11","type":"enum","value":"getEndIf"},{"deviceList":null,"multiple":false,"name":"actSubType.14","type":"enum","value":"getDelay"},{"deviceList":null,"multiple":false,"name":"actSubType.13","type":"enum","value":"getIfThen"},{"deviceList":null,"multiple":false,"name":"actSubType.16","type":"enum","value":"getOCGarage"},{"deviceList":null,"multiple":false,"name":"actSubType.15","type":"enum","value":"getIfThen"},{"deviceList":null,"multiple":false,"name":"actSubType.18","type":"enum","value":"getEndIf"},{"deviceList":null,"multiple":false,"name":"actSubType.17","type":"enum","value":"getExitRule"},{"deviceList":null,"multiple":false,"name":"useST","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"actSubType.19","type":"enum","value":"getElseIf"},{"deviceList":null,"multiple":false,"name":"uVar.14","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"delayAct.22","type":"enum","value":"none"},{"deviceList":null,"multiple":false,"name":"refreshActions","type":"button","value":""},{"deviceList":null,"multiple":false,"name":"dValues","type":"bool","value":"true"},{"deviceList":null,"multiple":false,"name":"hasAll","type":"button","value":""},{"deviceList":null,"multiple":false,"name":"cancelCapab","type":"button","value":""},{"deviceList":null,"multiple":false,"name":"delayHour.14","type":"number","value":""},{"deviceList":null,"multiple":false,"name":"delayMinute.20","type":"number","value":""},{"deviceList":null,"multiple":false,"name":"origLabel","type":"text","value":"Virtual GDC to Mimolite"},{"deviceList":null,"multiple":false,"name":"eraseRule","type":"button","value":""},{"deviceList":null,"multiple":false,"name":"uVar.20","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"optSwitch.9","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"delaySecond.14","type":"decimal","value":"10"},{"deviceList":null,"multiple":false,"name":"onOff.4","type":"bool","value":"true"},{"deviceList":null,"multiple":false,"name":"onOff.9","type":"bool","value":"false"},{"deviceList":null,"multiple":false,"name":"delete","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"actType.10","type":"enum","value":"delayActs"},{"deviceList":{"5577":"Virtual Mimolite"},"multiple":true,"name":"tDev2","type":"capability.contactSensor","value":null},{"deviceList":null,"multiple":false,"name":"actType.12","type":"enum","value":""},{"deviceList":{"5576":"Virtual GDC"},"multiple":true,"name":"tDev1","type":"capability.garageDoorControl","value":null},{"deviceList":null,"multiple":false,"name":"actType.11","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"actType.14","type":"enum","value":"delayActs"},{"deviceList":null,"multiple":false,"name":"actType.13","type":"enum","value":"condActs"},{"deviceList":null,"multiple":false,"name":"actType.16","type":"enum","value":"lockActs"},{"deviceList":null,"multiple":false,"name":"actType.15","type":"enum","value":"condActs"},{"deviceList":null,"multiple":false,"name":"garageRL.16","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"actionCancel","type":"button","value":""},{"deviceList":null,"multiple":false,"name":"actType.18","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"actType.17","type":"enum","value":"delayActs"},{"deviceList":null,"multiple":false,"name":"actType.19","type":"enum","value":"condActs"},{"deviceList":null,"multiple":false,"name":"optSwitch.4","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"cancelAct.20","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"state_7","type":"enum","value":"closing"},{"deviceList":null,"multiple":false,"name":"comments","type":"textarea","value":""},{"deviceList":null,"multiple":false,"name":"state_6","type":"enum","value":"opening"},{"deviceList":null,"multiple":false,"name":"actSubType.21","type":"enum","value":"getIfThen"},{"deviceList":null,"multiple":false,"name":"actSubType.20","type":"enum","value":"getDelay"},{"deviceList":null,"multiple":false,"name":"actSubType.23","type":"enum","value":"getExitRule"},{"deviceList":null,"multiple":false,"name":"actSubType.22","type":"enum","value":"getOCGarage"},{"deviceList":null,"multiple":false,"name":"randomAct.14","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"garageRL.22","type":"bool","value":"true"},{"deviceList":null,"multiple":false,"name":"state_4","type":"enum","value":"closed"},{"deviceList":null,"multiple":false,"name":"state_3","type":"enum","value":"open"},{"deviceList":null,"multiple":false,"name":"delaySecond.20","type":"decimal","value":"10"},{"deviceList":null,"multiple":false,"name":"rCapab_3","type":"enum","value":"Contact"},{"deviceList":null,"multiple":false,"name":"not6","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"not4","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"rCapab_5","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"cancelAct.14","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"not3","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"rCapab_4","type":"enum","value":"Contact"},{"deviceList":{"5576":"Virtual GDC"},"multiple":true,"name":"rDev_17","type":"capability.garageDoorControl","value":null},{"deviceList":null,"multiple":false,"name":"not7","type":"bool","value":""},{"deviceList":{"5576":"Virtual GDC"},"multiple":true,"name":"rDev_16","type":"capability.garageDoorControl","value":null},{"deviceList":null,"multiple":false,"name":"randomAct.20","type":"bool","value":""},{"deviceList":null,"multiple":false,"name":"rCapab_7","type":"enum","value":"Garage door"},{"deviceList":null,"multiple":false,"name":"rCapab_6","type":"enum","value":"Garage door"},{"deviceList":null,"multiple":false,"name":"rCapab_8","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"insertAct","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"editAct","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"actType.24","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"actSubType.24","type":"enum","value":"getEndIf"},{"deviceList":null,"multiple":false,"name":"actSubType.25","type":"enum","value":"getEndIf"},{"deviceList":null,"multiple":false,"name":"actType.25","type":"enum","value":""},{"deviceList":null,"multiple":false,"name":"actType.26","type":"enum","value":""}],"subscriptions":[]}}}

1 Like

Thank you, I will try it later tonight and let you know! I really appreciate it!

1 Like

I've tried these rules but I've ran into a few issues. First, the mimolite only has an on command, off does nothing, but on needs to be changed back to off so it can be selected again.
Second, The open command seems to work fine, but closing does not. The door closes, waits a few seconds then re-opens. I've been trying to play with delays, but it hasn't been helping. Any ideas why open works great but close doesn't? It has to be something with the virtual device not having the correct state, but I'm having trouble pinning it down.