Add Mattermost driver
This commit is contained in:
98
drivers/mattermost.groovy
Normal file
98
drivers/mattermost.groovy
Normal file
@@ -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
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user