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