switched from using state to using atomicState in preparation of event buffering; using atomicState exclusively per important tip found here: http://docs.smartthings.com/en/latest/smartapp-developers-guide/state.html#atomic-state

This commit is contained in:
David Sulpy
2015-09-10 11:14:27 -05:00
parent 04212d70dd
commit 5719bbcaac

View File

@@ -13,6 +13,7 @@
* for the specific language governing permissions and limitations under the License. * for the specific language governing permissions and limitations under the License.
* *
*/ */
definition( definition(
name: "Initial State Event Streamer", name: "Initial State Event Streamer",
namespace: "initialstate.events", namespace: "initialstate.events",
@@ -173,24 +174,24 @@ def subscribeToEvents() {
def getAccessKey() { def getAccessKey() {
log.trace "get access key" log.trace "get access key"
if (state.accessKey == null) { if (atomicState.accessKey == null) {
httpError(404, "Access Key Not Found") httpError(404, "Access Key Not Found")
} else { } else {
[ [
grokerRootUrl: state.grokerRootUrl, grokerRootUrl: atomicState.grokerRootUrl,
accessKey: state.accessKey accessKey: atomicState.accessKey
] ]
} }
} }
def getBucketKey() { def getBucketKey() {
log.trace "get bucket key" log.trace "get bucket key"
if (state.bucketKey == null) { if (atomicState.bucketKey == null) {
httpError(404, "Bucket key Not Found") httpError(404, "Bucket key Not Found")
} else { } else {
[ [
bucketKey: state.bucketKey, bucketKey: atomicState.bucketKey,
bucketName: state.bucketName bucketName: atomicState.bucketName
] ]
} }
} }
@@ -203,10 +204,10 @@ def setBucketKey() {
log.debug "bucket name: $newBucketName" log.debug "bucket name: $newBucketName"
log.debug "bucket key: $newBucketKey" log.debug "bucket key: $newBucketKey"
if (newBucketKey && (newBucketKey != state.bucketKey || newBucketName != state.bucketName)) { if (newBucketKey && (newBucketKey != atomicState.bucketKey || newBucketName != atomicState.bucketName)) {
state.bucketKey = "$newBucketKey" atomicState.bucketKey = "$newBucketKey"
state.bucketName = "$newBucketName" atomicState.bucketName = "$newBucketName"
state.isBucketCreated = false atomicState.isBucketCreated = false
} }
} }
@@ -215,14 +216,14 @@ def setAccessKey() {
def newAccessKey = request.JSON?.accessKey def newAccessKey = request.JSON?.accessKey
def newGrokerRootUrl = request.JSON?.grokerRootUrl def newGrokerRootUrl = request.JSON?.grokerRootUrl
if (newGrokerRootUrl && newGrokerRootUrl != "" && newGrokerRootUrl != state.grokerRootUrl) { if (newGrokerRootUrl && newGrokerRootUrl != "" && newGrokerRootUrl != atomicState.grokerRootUrl) {
state.grokerRootUrl = "$newGrokerRootUrl" atomicState.grokerRootUrl = "$newGrokerRootUrl"
state.isBucketCreated = false atomicState.isBucketCreated = false
} }
if (newAccessKey && newAccessKey != state.accessKey) { if (newAccessKey && newAccessKey != atomicState.accessKey) {
state.accessKey = "$newAccessKey" atomicState.accessKey = "$newAccessKey"
state.isBucketCreated = false atomicState.isBucketCreated = false
} }
} }
@@ -230,15 +231,15 @@ def installed() {
subscribeToEvents() subscribeToEvents()
state.isBucketCreated = false atomicState.isBucketCreated = false
state.grookerRootUrl = "https://groker.initialstate.com" atomicState.grookerRootUrl = "https://groker.initialstate.com"
} }
def updated() { def updated() {
unsubscribe() unsubscribe()
if (state.bucketKey != null && state.accessKey != null) { if (atomicState.bucketKey != null && atomicState.accessKey != null) {
state.isBucketCreated = false atomicState.isBucketCreated = false
} }
subscribeToEvents() subscribeToEvents()
@@ -246,17 +247,17 @@ def updated() {
def createBucket() { def createBucket() {
if (!state.bucketName) { if (!atomicState.bucketName) {
state.bucketName = state.bucketKey atomicState.bucketName = atomicState.bucketKey
} }
def bucketName = "${state.bucketName}" def bucketName = "${atomicState.bucketName}"
def bucketKey = "${state.bucketKey}" def bucketKey = "${atomicState.bucketKey}"
def accessKey = "${state.accessKey}" def accessKey = "${atomicState.accessKey}"
def bucketCreateBody = new JsonSlurper().parseText("{\"bucketKey\": \"$bucketKey\", \"bucketName\": \"$bucketName\"}") def bucketCreateBody = new JsonSlurper().parseText("{\"bucketKey\": \"$bucketKey\", \"bucketName\": \"$bucketName\"}")
def bucketCreatePost = [ def bucketCreatePost = [
uri: '${state.grokerRootUrl}/api/buckets', uri: '${atomicState.grokerRootUrl}/api/buckets',
headers: [ headers: [
"Content-Type": "application/json", "Content-Type": "application/json",
"X-IS-AccessKey": accessKey, "X-IS-AccessKey": accessKey,
@@ -269,7 +270,7 @@ def createBucket() {
httpPostJson(bucketCreatePost) { httpPostJson(bucketCreatePost) {
log.debug "bucket posted" log.debug "bucket posted"
state.isBucketCreated = true atomicState.isBucketCreated = true
} }
} }
@@ -287,21 +288,21 @@ def genericHandler(evt) {
def eventHandler(name, value) { def eventHandler(name, value) {
if (state.accessKey == null || state.bucketKey == null) { if (atomicState.accessKey == null || atomicState.bucketKey == null) {
return return
} }
if (!state.isBucketCreated) { if (!atomicState.isBucketCreated) {
createBucket() createBucket()
} }
def eventBody = new JsonSlurper().parseText("[{\"key\": \"$name\", \"value\": \"$value\"}]") def eventBody = new JsonSlurper().parseText("[{\"key\": \"$name\", \"value\": \"$value\"}]")
def eventPost = [ def eventPost = [
uri: '${state.grokerRootUrl}/api/events', uri: '${atomicState.grokerRootUrl}/api/events',
headers: [ headers: [
"Content-Type": "application/json", "Content-Type": "application/json",
"X-IS-BucketKey": "${state.bucketKey}", "X-IS-BucketKey": "${atomicState.bucketKey}",
"X-IS-AccessKey": "${state.accessKey}", "X-IS-AccessKey": "${atomicState.accessKey}",
"Accept-Version": "0.0.2" "Accept-Version": "0.0.2"
], ],
body: eventBody body: eventBody