uid: lawn_mower tags: [] props: parameters: - context: item description: String item linked to status#activity. Drives the status badge (MOWING, LEAVING, PARKED…). label: Activity Item name: automowerActivity required: true type: TEXT groupName: binding - context: item description: String item linked to status#state. Shown as the mower's state label below the activity badge. label: State Item name: automowerStatus required: true type: TEXT groupName: binding - context: item description: Number item linked to status#error-code. 0 = no error; the widget decodes codes 1–12 and 110 into human-readable messages. label: Error Code Item name: automowerErrorCode required: true type: TEXT groupName: binding - context: item description: Number item linked to status#battery. Shown as a battery icon; tap opens the Analyzer. label: Battery Item name: automowerBatteryLevel required: true type: TEXT groupName: binding - context: item description: DateTime item linked to status#last-update. Shown as a human-readable timestamp. label: Last Update Item name: automowerLastUpdate required: true type: TEXT groupName: binding - context: item description: Location item linked to status#position. Enables the collapsible GPS track map. Requires automower-map.html installed in /etc/openhab/html/. label: Position Item name: automowerPosition required: false type: TEXT groupName: map - description: Persistence service used to load today's GPS track history. Must support the Location item type — RRD4J (the OpenHAB default) does not. Leave blank to use the OpenHAB default. label: Persistence Service name: persistenceService required: false limitToOptions: false options: - value: '' label: OpenHAB default - value: influxdb label: InfluxDB - value: rrd4j label: RRD4J - value: mapdb label: MapDB - value: jdbc label: JDBC type: TEXT groupName: map - context: item description: String item linked to status#work-area. Shows the active work area name in the status area when the mower is assigned to an area. label: Work Area Name Item name: automowerWorkAreaName required: false type: TEXT groupName: controls - context: item description: String item for rich status detail (e.g. "87% done in main area", "Next start tomorrow at 07:00"). Wire to the Summary Detail proxy item from the optional synthetic status rule. When set, the work area name row is hidden (the detail already includes it). label: Summary Detail Item name: automowerSummaryDetail required: false type: TEXT groupName: controls - context: item description: Number item linked to command#park. Send a number (minutes) to park for that duration. Powers the 30 min / 3 hr / 24 hr options in the Home button menu. label: Park (Timed) Item name: automowerPark required: false type: TEXT groupName: controls - context: item description: Switch item linked to command#park-until-next-schedule. Used by the Home button to park until the next scheduled start. label: Park Until Next Schedule Item name: automowerParkNextSchedule required: false type: TEXT groupName: controls - context: item description: Switch item linked to command#park-until-further-notice. Used by the Home button to park indefinitely. label: Park Until Further Notice Item name: automowerParkFurtherNotice required: false type: TEXT groupName: controls - context: item description: Switch item linked to command#resume-schedule. Used by the Start button to resume the mowing schedule. label: Resume Schedule Item name: automowerResume required: false type: TEXT groupName: controls - context: item description: Switch item for manual pause. ON = paused, OFF = active. Bind to command#pause for direct mower control, or use a NAND group member for combined schedule + weather guard control. label: Manual Pause Switch name: automowerManualPause required: false type: TEXT groupName: schedule - context: item description: Switch ON when it is dark or nighttime. Lights the sunset icon in the guard strip. label: Darkness Switch name: isDark required: false type: TEXT groupName: schedule - context: item description: Switch ON when temperature is too high for mowing. Lights the heat icon in the guard strip. label: High Temp Switch name: isHot required: false type: TEXT groupName: schedule - context: item description: Switch ON when temperature is too low for mowing. Lights the cold icon in the guard strip. label: Low Temp Switch name: isCold required: false type: TEXT groupName: schedule - context: item description: Switch ON when it is raining. Lights the rain icon in the guard strip. label: Rain Switch name: isRaining required: false type: TEXT groupName: schedule - context: item description: Switch ON when there is frost. Lights the snow icon in the guard strip. label: Frost Switch name: isFrost required: false type: TEXT groupName: schedule parameterGroups: - name: binding label: Binding Channels - name: map label: GPS Track Map - name: controls label: Control Actions - name: schedule label: Schedule & Weather Guards timestamp: Aug 25, 2026, 2:58:01 PM component: f7-card config: {} slots: content: - component: f7-row config: style: align-items: center margin-bottom: 6px slots: default: - component: oh-icon config: icon: f7:location_fill style: color: '#4CAF50' font-size: 20px margin-right: 8px - component: Label config: text: Automower style: flex: '1' font-size: 16px font-weight: '600' - component: Label config: text: '=(items[props.automowerErrorCode].state != 0) ? ''Error'' : (items[props.automowerActivity].state === ''MOWING'') ? ''Mowing'' : (items[props.automowerActivity].state === ''LEAVING'') ? ''On the Way'' : (items[props.automowerActivity].state === ''GOING_HOME'') ? ''Going Home'' : (items[props.automowerActivity].state === ''CHARGING'') ? ''Charging'' : (items[props.automowerActivity].state === ''PARKED_IN_CS'') ? ''Parked'' : (items[props.automowerActivity].state === ''STOPPED_IN_GARDEN'') ? ''Stopped'' : items[props.automowerActivity].displayState' style: background: '=(items[props.automowerErrorCode].state != 0) ? ''rgba(244,67,54,0.15)'' : (items[props.automowerActivity].state === ''MOWING'' || items[props.automowerActivity].state === ''LEAVING'') ? ''rgba(76,175,80,0.2)'' : (items[props.automowerActivity].state === ''CHARGING'') ? ''rgba(241,196,15,0.2)'' : (items[props.automowerActivity].state === ''GOING_HOME'') ? ''rgba(26,188,156,0.2)'' : ''rgba(128,128,128,0.15)''' color: '=(items[props.automowerErrorCode].state != 0) ? ''#f44336'' : (items[props.automowerActivity].state === ''MOWING'' || items[props.automowerActivity].state === ''LEAVING'') ? ''#4CAF50'' : (items[props.automowerActivity].state === ''CHARGING'') ? ''#f1c40f'' : (items[props.automowerActivity].state === ''GOING_HOME'') ? ''#1abc9c'' : ''#888''' border-radius: 12px padding: 2px 8px font-size: 12px font-weight: '500' margin-right: 8px - component: oh-icon config: action: analyzer actionAnalyzerItems: =[props.automowerBatteryLevel] height: 22 icon: batterylevel state: =items[props.automowerBatteryLevel].state.split('.')[0] style: filter: grayscale(100%) - component: f7-row config: style: align-items: center margin-bottom: 8px slots: default: - component: Label config: text: =items[props.automowerLastUpdate].displayState style: font-size: 11px color: '#888' - component: f7-row config: style: align-items: center margin-bottom: 6px visible: =!!(props.automowerWorkAreaName) && !props.automowerSummaryDetail && items[props.automowerWorkAreaName]?.state !== 'NULL' && items[props.automowerWorkAreaName]?.state !== 'UNDEF' slots: default: - component: oh-icon config: icon: f7:layers_fill style: color: '#4CAF50' font-size: 14px margin-right: 6px - component: Label config: text: =items[props.automowerWorkAreaName]?.state style: flex: '1' font-size: 13px color: '#888' - component: f7-row config: style: align-items: center margin-bottom: 6px visible: =!!(props.automowerSummaryDetail) && items[props.automowerSummaryDetail]?.state !== 'NULL' && items[props.automowerSummaryDetail]?.state !== 'UNDEF' && items[props.automowerSummaryDetail]?.state !== 'no value' slots: default: - component: oh-icon config: icon: f7:info_circle_fill style: color: '#888' font-size: 13px margin-right: 6px - component: Label config: text: =items[props.automowerSummaryDetail]?.state style: flex: '1' font-size: 12px color: '#888' - component: f7-row config: style: align-items: center margin-bottom: 8px visible: =!!props.automowerManualPause slots: default: - component: oh-icon config: icon: f7:pause_circle style: color: '=items[props.automowerManualPause]?.state === ''ON'' ? ''#ff9800'' : ''#888''' font-size: 16px margin-right: 8px - component: Label config: style: flex: '1' font-size: 13px font-weight: '500' color: '=items[props.automowerManualPause]?.state === ''ON'' ? ''#ff9800'' : ''#888''' text: '=items[props.automowerManualPause]?.state === ''ON'' ? ''Manually paused'' : ''No manual pause''' - component: oh-icon config: action: toggle actionCommand: 'ON' actionCommandAlt: 'OFF' actionItem: =props.automowerManualPause icon: '=items[props.automowerManualPause]?.state === ''ON'' ? ''f7:play_circle_fill'' : ''f7:pause_circle_fill''' style: color: '=items[props.automowerManualPause]?.state === ''ON'' ? ''#ff9800'' : ''#4CAF50''' cursor: pointer font-size: 22px - component: f7-accordion-item config: style: margin: 0 -16px slots: default: - component: f7-accordion-toggle config: style: display: flex align-items: center padding: 6px 16px cursor: pointer slots: default: - component: oh-icon config: icon: f7:map_fill style: color: '#4CAF50' font-size: 14px margin-right: 6px - component: Label config: text: GPS Track style: flex: '1' font-size: 13px color: '#888' - component: oh-icon config: icon: f7:chevron_down style: color: '#888' font-size: 12px - component: f7-accordion-content slots: default: - component: f7-row config: style: border-radius: 8px overflow: hidden background: '#1a1a2e' slots: default: - component: oh-webframe config: src: '=props.automowerPosition ? ''/static/automower-map.html?item='' + props.automowerPosition + (props.persistenceService ? ''&serviceId='' + props.persistenceService : '''') : ''about:blank''' height: 360 style: width: 100% display: block border: none - component: f7-row config: style: justify-content: space-around padding-top: 10px margin-top: 8px border-top: 1px solid rgba(128,128,128,0.15) visible: =!!(props.isDark || props.isHot || props.isCold || props.isRaining || props.isFrost) slots: default: - component: oh-icon config: icon: sunset width: 24px style: filter: '=(props.isDark && items[props.isDark]?.state === ''ON'') ? ''grayscale(0%)'' : ''grayscale(100%) opacity(0.35)''' - component: oh-icon config: icon: temperature_hot width: 24px style: filter: '=(props.isHot && items[props.isHot]?.state === ''ON'') ? ''grayscale(0%)'' : ''grayscale(100%) opacity(0.35)''' - component: oh-icon config: icon: temperature_cold width: 24px style: filter: '=(props.isCold && items[props.isCold]?.state === ''ON'') ? ''grayscale(0%)'' : ''grayscale(100%) opacity(0.35)''' - component: oh-icon config: icon: rain width: 24px style: filter: '=(props.isRaining && items[props.isRaining]?.state === ''ON'') ? ''grayscale(0%)'' : ''grayscale(100%) opacity(0.35)''' - component: oh-icon config: icon: snow width: 24px style: filter: '=(props.isFrost && items[props.isFrost]?.state === ''ON'') ? ''grayscale(0%)'' : ''grayscale(100%) opacity(0.35)''' - component: f7-row config: style: align-items: center gap: 8px padding-top: 10px margin-top: 8px border-top: 1px solid rgba(128,128,128,0.15) visible: =!!(props.automowerPark || props.automowerParkNextSchedule || props.automowerParkFurtherNotice || props.automowerResume) slots: default: - component: oh-button config: fill: true iconF7: house_fill popoverOpen: .mower-park-popover style: --f7-button-bg-color: '#3498db' --f7-button-text-color: '#ffffff' border-radius: 8px flex: 1 visible: =!!(props.automowerPark || props.automowerParkNextSchedule || props.automowerParkFurtherNotice) - component: oh-button config: action: command actionCommand: 'ON' actionItem: =props.automowerManualPause fill: true iconF7: pause_fill style: --f7-button-bg-color: '#f39c12' --f7-button-text-color: '#ffffff' border-radius: 8px flex: 1 visible: =!!(props.automowerManualPause) && (items[props.automowerActivity].state === 'MOWING' || items[props.automowerActivity].state === 'LEAVING') - component: oh-button config: action: command actionCommand: 'ON' actionItem: =props.automowerResume fill: true iconF7: play_fill style: --f7-button-bg-color: '#2ecc71' --f7-button-text-color: '#ffffff' border-radius: 8px flex: 1 visible: =!!(props.automowerResume) && items[props.automowerActivity].state !== 'MOWING' && items[props.automowerActivity].state !== 'LEAVING' - component: f7-popover config: class: mower-park-popover slots: default: - component: oh-list config: inset: false slots: default: - component: oh-list-item config: groupTitle: true title: Park For visible: =!!(props.automowerPark) - component: oh-list-item config: action: command actionCommand: '30' actionItem: =props.automowerPark icon: f7:timer popoverClose: true title: 30 Minutes visible: =!!(props.automowerPark) - component: oh-list-item config: action: command actionCommand: '180' actionItem: =props.automowerPark icon: f7:timer popoverClose: true title: 3 Hours visible: =!!(props.automowerPark) - component: oh-list-item config: action: command actionCommand: '1440' actionItem: =props.automowerPark icon: f7:timer popoverClose: true title: 24 Hours visible: =!!(props.automowerPark) - component: oh-list-item config: groupTitle: true title: Park Until - component: oh-list-item config: action: command actionCommand: 'ON' actionItem: =props.automowerParkNextSchedule icon: f7:calendar popoverClose: true title: Until Next Schedule visible: =!!(props.automowerParkNextSchedule) - component: oh-list-item config: action: command actionCommand: 'ON' actionItem: =props.automowerParkFurtherNotice icon: f7:pause_circle popoverClose: true title: Until Further Notice visible: =!!(props.automowerParkFurtherNotice)