diff --git a/drivers/mattermost.groovy b/drivers/mattermost.groovy new file mode 100644 index 0000000..6107833 --- /dev/null +++ b/drivers/mattermost.groovy @@ -0,0 +1,98 @@ +/** +* +* File: mattermost.groovy +* Requirements: Requires a Mattermost webhook url. +* Platform: Hubitat +* Modification History: +* 2023-03-11 Initial Release +* +* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +* in compliance with the License. You may obtain a copy of the License at: +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed +* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License +* for the specific language governing permissions and limitations under the License. +*/ + +preferences { + input("mm_url", "text", title: "Webhook URL:", description: "Incoming webhook URL", required: true) + input("mm_channel", "text", title: "Channel:", description: "Override the default channel", required: false) + input("mm_username", "text", title: "Username:", description: "Override the default username", required: false) + input("mm_icon_url", "text", title: "Icon URL:", description: "Override the default profile picture", required: false) + input("mm_icon_emoji", "text", title: "Icon Emoji:", description: "Override the default profile picture", required: false) + input("debug", "bool", title: "Enable Debug Logging", required: true, defaultValue: false) +} + +metadata { + definition (name: "Mattermost", namespace: "jglemza-hubitat", author: "Joshua Glemza", + importUrl: "https://git.hwarf.com/jglemza/hubitat/raw/branch/main/drivers/mattermost.groovy") { + capability "Notification" + capability "Actuator" + capability "Speech Synthesis" + } +} + +def installed() { + initialize() +} + +def updated() { + initialize() +} + +def initialize() { +} + +def speak(message) { + deviceNotification(message) +} + +def deviceNotification(message) { + + def postBody = [text:message] + + if(settings.mm_channel != '') { + postBody['channel'] = settings.mm_channel + } + + if(settings.mm_username != '') { + postBody['username'] = settings.mm_username + } + + if(settings.mm_icon_url != '') { + postBody['icon_url'] = settings.mm_icon_url + } + + if(settings.mm_icon_emoji != '') { + postBody['icon_emoji'] = settings.mm_icon_emoji + } + + ifDebug("Sending Message: $message [${postBody}]") + + // Prepare the package to be sent + def params = [ + uri: settings.mm_url, + body: postBody + ] + try { + httpPostJson(params){response -> + if(response.status != 202) { + sendPush("ERROR: 'Mattermost' received HTTP error ${response.status}.") + log.error "Received HTTP error ${response.status}. ${response}" + } + else { + ifDebug("Message queued for sending via Mattermost.") + } + } + } catch (e) { + log.error "Mattermost: Error making httpPostJson: $e" + } +} + +private ifDebug(msg) { + if (settings?.debug || settings?.debug == null) { + log.debug 'Mattermost: ' + msg + } +}