Network error window shade - Zwave device

Continuing the discussion from Custom Capability and CLI Developer Preview:

Hi, @mrmrmrmr. I create this post to continue our conversation.
I installed that DTH to test it, but I don’t have a window shade on my side. However, this error is shown when there’s a time out, can you share with me the source code of the DTH your device is using, please?

Hi,

I had already sent you the source for the DTH. But if you want it directly from my account, below you can see.

Also, there is a main Zwave device DTH , which I share below

main device:

/**
 *  Somfy Blinds Controller
 *
 *  Copyright 2014 Chris Wood
 *
 *  Licensed under the Apache License, Version 444 (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.
 *
 */
metadata {
	definition (name: "Somfy ZRTSI Controller", namespace: "chriswood1001", author: "Chris Wood") {
		fingerprint deviceId: "0x0200", inClusters: "0x86, 0x72"
	}

	simulator {

	}

	tiles {
		standardTile("state", "device.state", width: 2, height: 2) {
			state 'connected', icon: "st.unknown.zwave.static-controller", backgroundColor:"#ffffff"
		}

		main "state"
		details(["state"])
	}
}

def parse(String description) {
	def result = null
	if (description.startsWith("Err")) {
	    result = createEvent(descriptionText:description, displayed:true)
	} else {
		def cmd = zwave.parse(description)
		if (cmd) {
			result = createEvent(zwaveEvent(cmd))
		}
	}
	return result
}

def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulation cmd) {
	def event = [displayed: true]
	event.linkText = device.label ?: device.name
	event.descriptionText = "$event.linkText: ${cmd.encapsulatedCommand()} [secure]"
	event
}

def zwaveEvent(physicalgraph.zwave.Command cmd) {
	def event = [displayed: true]
	event.linkText = device.label ?: device.name
	event.descriptionText = "$event.linkText: $cmd"
	event
}

shades DTH:

/**
 * 
 * https://community.smartthings.com/t/my-somfy-smartthings-integration/13492
 * Modified ERS 12/29/2016
 *
 * Version 1.0.7
 *
 * Version History
 *
 * 1.0.7    26 Mar 2017		Few updates  (be sure to go into each device, select settings (gear), and hit done
 * 1.0.6    29 Dec 2016		Health Check
 * 1.0.5    01 May 2016		bug fixes
 * 1.0.4    01 May 2016		Sync commands for cases where blinds respond to multiple channels (all vs. single)
 * 1.0.3    17 Apr 2016		Expanded runIn timer for movement and  completed states
 * 1.0.2    04 Apr 2016		Added runIn timer for movement vs. completed states
 * 1.0.1    07 Mar 2016		Add Blinds support by edit device to set to blinds type
 * 1.0.0    24 Feb 2016		Multi-tile, Window Shade Capability, Device Handler attempts to maintain state
 *
 * Notes:
 *
 * Somfy ZRTSII does not report accurate status for the device.
 *
 * This device handler maintains an internal view of device status based on last command
 * reissuing a command to the shade (up, down, preset (when stopped)) does not move the shade/blinds if it is already in that position
 * My/stop command does different actions depending if the shade is idle (go to MY or closed position) or moving (stop)
 *
 * Once the device is installed, it defaults to "shade" operation.  If "blinds" operation is desired, for the device go to settings (gear)
 * and change the device operation to Window Blinds
 *
 *	Shade and Blinds operate differently in ZRTSII buttons
 *	- Shades actions: up button: open (on switch),  down button: close (off switch),       my/stop button: presetPosition (50%)
 *	- Blinds actions: up button: open (on switch),  down button: tilt open (off switch),   my/stop button: close (50%)
 *
 * Window Shade Capability standardizes:  (these should not be changed, except by SmartThings capabilities updates)
 *	- windowShade: unknown, closed, open, partially open, closing, opening 
 *	- Commands:  open(), close(), presetPosition()
 *
 */
  metadata {
    definition (name: "somfy-shades", namespace: "imnotbob", author: "Eric, Ash, Others", vid: "generic-shade") {
        capability "Switch Level"
        capability "Switch"
        //capability "Window Shade"
        //capability "Polling"
        capability "Refresh"
        capability "Actuator"
        capability "Health Check"

        attribute "stopStr", "enum", ["preset/stop", "close/stop"]

        command "OpenSync"
        command "CloseSync"
        command "TiltSync"
        command "levelOpenClose", [ "number" ]

	attribute "lastPoll", "STRING"

        fingerprint deviceId: "0x1105", inClusters: "0x2C, 0x72, 0x26, 0x20, 0x25, 0x2B, 0x86"
    }

    simulator {
        status "on":  "command: 2003, payload: FF"
        status "off": "command: 2003, payload: 00"
        status "09%": "command: 2003, payload: 09"
        status "10%": "command: 2003, payload: 0A"
        status "33%": "command: 2003, payload: 21"
        status "66%": "command: 2003, payload: 42"
        status "99%": "command: 2003, payload: 63"
        
        // reply messages
        reply "2001FF,delay 5000,2602": "command: 2603, payload: FF"
        reply "200100,delay 5000,2602": "command: 2603, payload: 00"
        reply "200119,delay 5000,2602": "command: 2603, payload: 19"
        reply "200132,delay 5000,2602": "command: 2603, payload: 32"
        reply "20014B,delay 5000,2602": "command: 2603, payload: 4B"
        reply "200163,delay 5000,2602": "command: 2603, payload: 63"
    }

    preferences {
	input ("shadeType", "enum", options:[
		"shades": "Window Shades",
		"blinds": "Window Blinds"],
		title: "Window Shades or Blinds?", description: "set type (shades or blinds)", defaultValue: "shades",
                required: false, displayDuringSetup: true )
	}

    tiles(scale: 2) {
        multiAttributeTile(name:"shade", type: "lighting", width: 6, height: 4) {
            tileAttribute("device.windowShade", key: "PRIMARY_CONTROL") {
                attributeState("unknown", label:'${name}', action:"refresh.refresh", icon:"st.doors.garage.garage-open", backgroundColor:"#ffa81e")
                attributeState("closed",  label:'${name}', action:"open", icon:"st.doors.garage.garage-closed", backgroundColor:"#bbbbdd", nextState: "opening")
                attributeState("open",    label:'up', action:"close", icon:"st.doors.garage.garage-open", backgroundColor:"#ffcc33", nextState: "closing")
                attributeState("partially open", label:'preset', action:"presetPosition", icon:"st.Transportation.transportation13", backgroundColor:"#ffcc33")
                attributeState("closing", label:'${name}', action:"presetPosition", icon:"st.doors.garage.garage-closing", backgroundColor:"#bbbbdd")
                attributeState("opening", label:'${name}', action:"presetPosition", icon:"st.doors.garage.garage-opening", backgroundColor:"#ffcc33")
            }
            tileAttribute ("device.level", key: "SLIDER_CONTROL") {
                attributeState("level", action:"switch level.setLevel")
            }
            tileAttribute ("device.speedLevel", key: "VALUE_CONTROL") {
                attributeState("level", action: "levelOpenClose")
            }
        }

        standardTile("switchmain", "device.windowShade") {
            state("unknown", label:'${name}', action:"refresh.refresh", icon:"st.doors.garage.garage-open", backgroundColor:"#ffa81e")
            state("closed",  label:'${name}', action:"open", icon:"st.doors.garage.garage-closed", backgroundColor:"#bbbbdd", nextState: "opening")
            state("open",    label:'up', action:"close", icon:"st.doors.garage.garage-open", backgroundColor:"#ffcc33", nextState: "closing")
            state("partially open", label:'preset', action:"presetPosition", icon:"st.Transportation.transportation13", backgroundColor:"#ffcc33")
            state("closing", label:'${name}', action:"presetPosition", icon:"st.doors.garage.garage-closing", backgroundColor:"#bbbbdd")
            state("opening", label:'${name}', action:"presetPosition", icon:"st.doors.garage.garage-opening", backgroundColor:"#ffcc33")

//            state("on", label:'up', action:"switch.off", icon:"st.doors.garage.garage-open", backgroundColor:"#ffcc33")
//            state("off", label:'closed', action:"switch.on", icon:"st.doors.garage.garage-closed", backgroundColor:"#bbbbdd")
//            state("default", label:'preset', action:"presetPosition", icon:"st.Transportation.transportation13", backgroundColor:"#ffcc33")
        }

        standardTile("on", "device.switch", width: 2, height: 2, inactiveLabel: false, decoration: "flat") {
            state("on", label:'open', action:"switch.on", icon:"st.doors.garage.garage-opening")
        }
        standardTile("off", "device.stopStr", width: 2, height: 2, inactiveLabel: false, decoration: "flat") {
            state("close/stop", label:'close/stop', action:"switch.off", icon:"st.doors.garage.garage-closing")
            state("default", label:'close', action:"switch.off", icon:"st.doors.garage.garage-closing")
        }
        standardTile("preset", "device.stopStr", width: 2, height: 2, inactiveLabel: false, decoration: "flat") {
            state("close/stop", label:'slats open', action:"switch level.setLevel", icon:"st.Transportation.transportation13")
            state("default", label:'preset/stop', action:"switch level.setLevel", icon:"st.Transportation.transportation13")
        }
        controlTile("levelSliderControl", "device.level", "slider", height: 1, width: 3, inactiveLabel: false) {
            state("level", action:"switch level.setLevel")
        }

        standardTile("refresh", "command.refresh", width:2, height:2, inactiveLabel: false, decoration: "flat") {
                state "default", label:'', action:"refresh.refresh", icon:"st.secondary.refresh"
        }

//  Poll provides data, but the ZRTSII does not provide accurate status
//
//      standardTile("poll", "command.poll", width:2, height:2, inactiveLabel: false, decoration: "flat") {
//              state "default", label:'poll', action:"poll", icon:"st.secondary.poll"
//      }

        main(["switchmain"])
        details(["shade", "on", "off", "preset"])
    }
}

def configure() {
    log.trace "configure() called"
    updated()
}

def ping() {
	log.trace "ping called"
	def now=new Date()
	def tz = location.timeZone
	def nowString = now.format("MMM/dd HH:mm",tz)
	sendEvent("name":"lastPoll", "value":nowString, displayed: false)
	refresh()
}

def updated() {
    log.trace "updated() called"

    sendEvent(name: "checkInterval", value: 60 * 60 * 1, data: [protocol: "zwave", hubHardwareId: device.hub.hardwareID], displayed: false)

    def currstat = device.latestValue("level")
    def currstat1 = device.latestValue("windowShade")

    log.debug "Shade type: ${settings?.shadeType}"
    if (settings?.shadeType) {
        if (settings.shadeType == "shades") {
            sendEvent(name: "stopStr", value: "preset/stop")
        } else {
            sendEvent(name: "stopStr", value: "close/stop")
        }
    } else {
        sendEvent(name: "stopStr", value: "preset/stop")
    }

    log.debug "switch state: ${currstat}  windowShade state: ${currstat1}"
    if ( (currstat == null) || (currstat1 == null)) {
        if (currstat > null) {
            if (currstat >= 75) {
                //sendEvent(name: "windowShade", value: "open")
                finishOpenShade()
            } else if (currstat <= 25) {
                //sendEvent(name: "windowShade", value: "closed")
                finishCloseShade()
            } else {
                //sendEvent(name: "windowShade", value: "partially open")
                finishPartialOpenShade()
            }
        }
    }
}

def parse(String description) {
    description
    def result = []
    def cmd = zwave.parse(description, [0x20: 1, 0x26: 1, 0x70: 1])
    //log.debug "Parsed ${description} to ${cmd}"
    if (cmd) {
        result = zwaveEvent(cmd)
        log.debug "zwaveEvent( ${cmd} ) returned ${result.inspect()}"
    } else {
        log.debug "Non-parsed event: ${description}"
    }
    def now=new Date()
    def tz = location.timeZone
    def nowString = now.format("MMM/dd HH:mm",tz)
    result << createEvent("name":"lastPoll", "value":nowString, displayed: false)
    return result
}

def levelOpenClose(value) {
    log.trace "levelOpenClose called with value $value"
    if (value) {
        on()
    } else {
        off()
    }
}

// Somfy ZRTSII does not report accurate status for the device.
// This device handler maintains an internal view of device status based on last command
// reissuing a command to the shade (up, down, preset (my) (when stopped)) does not move the shade if it is already in that position
// My/stop command does different actions depending if the shade is idle (go to MY position) or moving (stop)

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd)
{
    def result = []
    def tempstr = ""
    def statstr = "SAME"

    //log.trace "Basic report cmd.value:  ${cmd.value}"

    if (cmd.value == 0) {
        //result << createEvent(name: "switch", value: "off")

        tempstr = "closed"
        if (settings?.shadeType) {
            if (settings.shadeType == "blinds") {
                tempstr = "tilted open"
            }
        }
    } else if (cmd.value == 0xFF) {
        //result << createEvent(name: "switch", value: "on")
        tempstr = "open"

    } else {  // This has never happend
        //result << createEvent(name: "switch", value: "default")
        tempstr="neither open or closed"
    }
    def swstatstr = "${device.latestValue('switch')}"
    if (cmd.value == 0 && swstatstr == "on") { statstr = "DIFFERENT" }
    if (cmd.value == 0xFF && swstatstr == "off") { statstr = "DIFFERENT" }
        
    //log.debug "${statstr} Zwave state is ${tempstr}; device stored state is ${device.latestValue('switch')} dimmer level: ${device.latestValue('level')} "
    return result
}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) {
    def result = []
    def tempstr = ""

    log.debug "SwitchBinaryReport cmd.value:  ${cmd.value}"
    
    if (cmd.value == 0) {
        tempstr = "closed"
        if (settings?.shadeType) {
            if (settings.shadeType == "blinds") {
                tempstr = "tilted open"
            }
        }

    } else if (cmd.value == 0xFF) {
        tempstr = "open"

    } else {  // this has never happened
        tempstr="neither open or closed"
    }
    log.debug "Reported state is ${tempstr}; device is ${device.latestValue('switch')}  ${device.latestValue('level')} "
    
    //result << createEvent(name:"switch", value: cmd.value ? "on" : "off")
    //result << createEvent(name: "level",value: cmd.value, unit:"%",
        //descriptionText:"${device.displayName} dimmed ${cmd.value==255 ? 100 : cmd.value}%")
    return result
}

def zwaveEvent(physicalgraph.zwave.commands.switchmultilevelv1.SwitchMultilevelReport cmd)
{
    def result = []
    def tempstr = ""

    log.trace "SwitchMultilevelReport cmd.value:  ${cmd.value}"
    
    if (cmd.value == 0) {
        //result << createEvent(name: "switch", value: "off")
        tempstr = "closed"
        if (settings?.shadeType) {
            if (settings.shadeType == "blinds") {
                tempstr = "tilted open"
            }
        }

    } else if (cmd.value == 0xFF) {
        //result << createEvent(name: "switch", value: "on")
        tempstr = "open"
    } else {
        //result << createEvent(name: "switch", value: "default")
        tempstr="neither open or closed"
    }
    //result << createEvent(name: "level",value: cmd.value, unit:"%",
      //descriptionText:"${device.displayName} dimmed ${cmd.value==255 ? 100 : cmd.value}%")
    log.debug "Reported state is ${tempstr}; device is ${device.latestValue('switch')}  ${device.latestValue('level')} "
    return result
}

def on() {
    int level = 100
    log.trace "on() treated as open()"
    setLevel(level) 
}

def off() {
    int level = 0
    log.trace "off() treated as close()"
    setLevel(level) 
}

def setLevel() {
    log.trace "setLevel() treated as preset position"
    setLevel(50) 
}

def open() {
    log.trace "open()"
    on()
}

def close() {
    log.trace "close()"
    off()
}

def presetPosition() {
    log.trace "presetPosition()"
    setLevel(50)
}

def OpenSync() {
    log.trace "OpenSync()"
    finishOpenShade()
}

def CloseSync() {
    log.trace "CloseSync()"
    finishCloseShade()
}

def TiltSync() {
    log.trace "TiltSync()"
    finishPartialOpenShade()
}

def refresh() {
    log.trace "refresh()"
    delayBetween([
        //zwave.switchBinaryV1.switchBinaryGet().format(),
        //zwave.switchMultilevelV1.switchMultilevelGet().format(),
        //zwave.meterV2.meterGet(scale: 0).format(),      // get kWh
        //zwave.meterV2.meterGet(scale: 2).format(),      // get Watts
        //zwave.sensorMultilevelV1.sensorMultilevelGet().format(),
        //zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType:1, scale:1).format(),  // get temp in Fahrenheit
        //zwave.batteryV1.batteryGet().format(),
        zwave.basicV1.basicGet().format()
    ], 3000)
}

// If you add the Polling capability to your device type, this command
// will be called approximately every 5 minutes to check the device's state
// zrtsII does not provide accurate status of shade position

//def poll() {
//        log.trace "Poll"
//        zwave.basicV1.basicGet().format()
//}

def setLevel(level) {
    log.trace "setLevel(level)  {$level}"
    log.debug "level.inspect " + level.inspect()

    int newlevel = level

    if (level > null) {

        if (level >= 75) {
            sendEvent(name: "windowShade", value: "opening")
            sendEvent(name: "level", value: level)
            sendEvent(name: "switch", value: "on")
            runIn(25, "finishOpenShade", [overwrite: true])
            delayBetween([
                zwave.switchMultilevelV1.switchMultilevelSet(value: 0xFF).format(),
                zwave.basicV1.basicGet().format()
//                sendEvent(name: "windowShade", value: "open"),
//                sendEvent(name: "switch", value: "on")
            ], 4000)
        } else if (level <= 25) {
            sendEvent(name: "windowShade", value: "closing")
            sendEvent(name: "level", value: level)
            sendEvent(name: "switch", value: "off")
            runIn(25, "finishCloseShade", [overwrite: true])
            if (settings.shadeType == "shades") {
                delayBetween([
                    zwave.switchMultilevelV1.switchMultilevelSet(value: 0x00).format(),
                    zwave.basicV1.basicGet().format()
//                    sendEvent(name: "windowShade", value: "closed"),
//                    sendEvent(name: "switch", value: "off")
                ], 4000)
            } else {
                delayBetween([
                    zwave.switchMultilevelV1.switchMultilevelStopLevelChange().format(),
                    zwave.basicV1.basicGet().format()
//                    sendEvent(name: "windowShade", value: "closed"),
//                    sendEvent(name: "switch", value: "off")
                ], 4000)
            }
        } else {
            def currstat = device.latestValue("windowShade")
            if (currstat == "open") { sendEvent(name: "windowShade", value: "closing") }
            else { sendEvent(name: "windowShade", value: "opening") }
            sendEvent(name: "level", value: level)
            sendEvent(name: "switch", value: "on")
            runIn(15, "finishPartialOpenShade", [overwrite: true])
            if (settings.shadeType == "shades") {
                delayBetween([
                    zwave.switchMultilevelV1.switchMultilevelStopLevelChange().format(),
                    zwave.basicV1.basicGet().format()
//                    sendEvent(name: "windowShade", value: "partially open"),
//                    sendEvent(name: "switch", value: "default")
                ], 4000)
            } else {
                delayBetween([
                    zwave.switchMultilevelV1.switchMultilevelSet(value: 0x00).format(),
                    zwave.basicV1.basicGet().format()
//                    sendEvent(name: "windowShade", value: "partially open"),
//                    sendEvent(name: "switch", value: "default")
                ], 4000)
            }
        }

        // this code below causes commands not be sent/received by the Somfy ZRTSII - I assume delayBetween is asynchronous...

        //log.trace("finished level adjust")
        //if (newlevel != level) { 
            //log.trace("finished level adjust1")
            //delayBetween([
                //sendEvent(name: "level", value: newlevel)
            //], 1000)
        //}
    }
}

def finishOpenShade() {
    sendEvent(name: "windowShade", value: "open")
    def newlevel = 99
    sendEvent(name: "level", value: newlevel)
    sendEvent(name: "switch", value: "on")
}

def finishCloseShade() {
    sendEvent(name: "windowShade", value: "closed")
    def newlevel = 0
    sendEvent(name: "level", value: newlevel)
    sendEvent(name: "switch", value: "off")
}

def finishPartialOpenShade() {
    sendEvent(name: "windowShade", value: "partially open")
    def newlevel = 50
    sendEvent(name: "level", value: newlevel)
    sendEvent(name: "switch", value: "on")
}

// this appears to never be called

//def setLevel(level, duration) {
//    log.trace "setLevel(level, duration)  {$level} ${duration}"
//    setLevel(level)
//    return
//}

I see that you removed the “Window Shade” capability, but below there are some events that try to change that attribute, anyway, copying directly your code I don’t see the error yet.
Just to confirm, is the device using the published version of the DTH? sometimes when we modify it, the selected version changes to Draft.
Another cause could be that the DTH was cached with the previous configuration, please try to create a new DTH of the shades (not the main one) and see if the error is shown again in each shade.

actually I don’T know the relation between that capability and the attribute. So, should I delete the lines which send event to that attribute ?

I am using the published version and there is no draft.

I just created a clone of the DTH and assigned new DTH to one of the shades.
then I cleared cache of my ST app.
But I still get the error “A network or server error occured. Try again later.”

What else should I try ?

hi,

I could not figure out what I’m doing wrong. And when you try you don’t get the silly network error, so what’s wrong with me ?

thx

Yes, they shouldn’t be there because you don’t have that attribute in any other capabilities of your metadata. For example, this is one of them:

You should create a new device that uses the new DTH to avoid data caching.

Also, please, confirm the following points:

  • Did you select a value for the settings.shadeType?
  • When the level >= 75, after a few seconds, the value changes automatically to 99 because of the finishOpenShade function
  • If level <= 25, after a few seconds it changes to 0 according to the finishCloseShade function
  • If level > 26 and level < 75, then the value changes to 50 because of the finishPartialOpenShade function
  • All of these values are displayed correctly in the app and getting the device status, it has the same values
  • The shades are controlled correctly with all the commands

Hi,

I removed all calls to the windowShade attribute and created a new DTH.
Then I changed the device type of one of my shade devices.
Closed the app, reopen and retried sevral times. The problem persists.

Unfortunately I am not able to create a new device because this is a Zwave device and to create a new one I have to delete all devices and remove the main device.
That is a difficult task. I really don’t want to do it.
If there is a cache issue, please help me to clear it on the ST side.

Answers to your questions:

  • Did you select a value for the settings.shadeType ?

All my shades are selected as “Window Shades” , the other setting (blinds) doesn’t work fine with my shades.

  • When the level >= 75, after a few seconds, the value changes automatically to 99 because of the finishOpenShade function

Yes, because actually there is no level setting on the zwave device. Just open/close /preset sellections. (that is 0%, 50% , 100%)

  • If level <= 25, after a few seconds it changes to 0 according to the finishCloseShade function
  • If level > 26 and level < 75, then the value changes to 50 because of the finishPartialOpenShade function
  • All of these values are displayed correctly in the app and getting the device status, it has the same values

yes.

  • The shades are controlled correctly with all the commands

yes

there is only the silly “network error” issue. This error is really very silly and it came with the “new” Smartthings app. I did not have such issues with Classic ST.
With the new app this started with several devices. And it is really useless, false.
I believe Samsung Smartthings developers should really consider removing this silly error.

Please help…

Hi, thanks for the information. I know that making several tests can be a little bit tedious, I appreciate your help.
In order to discard other possible causes, I need your support to make the following tests:

  • Use a custom VID in the DTH
    1. Generate a custom VID according to the DTH metadata.
    2. Create a new DTH and assign it the new VID
    3. Select this new DTH for the shade devices
      I’d like to see if the generic VID is involved.
  • Use the device without the ZWave commands to see if they are throwing the error.
    1. Comment all the ZWave commands in the DTH (the one with the custom VID)
    2. Check that the device is not using the Draft version after this change
    3. Control the device from the app (it won’t reach the shades anymore, though) and see if the error keeps appearing.

Please, let me know your results.

Hi Nayleyz,

Thanks. I will do these 2 tests.
How can I create acustom VID for this DTH ? (The code is not mine, can I still create a new VID ?)

Btw, I think I have a more generic issue. Because today I realized that my device named “Entrance Siren” is also producing this “network error”
It is a zwave siren and it uses the internal/default “SmartAlert Siren” device type.
When I start a command on it , it works (for example starts strobe or siren) but also creates this network error.

Maybe this network error is a problem on my ST account ? How can we troubleshoot it ?

I just removed the siren from zwave devices and re-added it with same internal device type.
Still having the network error with this fresh device. Though the siren & strobe functions are working as expected.

Hi, there! Yeah, now that you mention it’s happening with another ZWave device that’s using an internal handler, it can be something else causing this behavior.
You should contact Customer Support and expose this situation (that you receive false Network errors using Zwave devices that use custom and internal DTHs), you can add some screen captures and they’ll request any other information needed.
If you need anything else, you can post it here and I’ll get back to you.

Note: For the custom DTH, I think there’s no need of making the last tests I mentioned, so keep using the version where you added the missing sendEvent.

thanks. I just opened a ticket to support. I hope they can find a solution.

Hi again,

I am coming back to you because,
I contacted Samsung support in many ways but they can not investigate my problem.

Besides, I noticed that Smartthings app on my phone can not receive any notifications (push notifications)

I have an issue, maybe coming from my phone or my phone. But nobody can analyze and identify the problem.
Maybe you have contact to Smartthings developer team and could help me.
Any hope ?

thanks.

Hi, @SamsungZell! Would you help with this one, please?
Thanks! :smiley:

Thank you for tagging me @nayelyz!

@mrmrmrmr, I’m sorry that you’re having issues with push notifications. I’d be happy to take a look into your concerns further.

I would give these troubleshooting steps first if you are using an Andriod Device:

Do you see your Samsung Account listed under the Settings>Members tab in ST App? It might display “Owner: Name and Samsung Account Email” associated with your device.

Using this path way Settings>Apps>Smartthings>Notifications>Smartthings Notifications.
Check your Smart Things Notification Settings Menu and ensure they are enabled.


Here you can set the settings for Alert, Silent, and Pop-Up.
You can set up a test automation to see if you receive the push notification.
If device turns on, then Notify Someone and type a test message to see if you receive the push notification from

If you are located in the US and are trying to receive SMS Push messages ensure the numbers have OPT’d in to receive SMS Notifications from SmartThings as of 9/25/2019. You can view additional information about the changes here at this link: Changes to SMS Service

I’d first give those a try to see if you notice any difference in your push notifications symptoms.

I hope this message finds you well!

^SamsungZell

@SamsungZell

thanks for your interest and response.

Actually, my primary issue is not notifications. It is the false “network error” message described in this thread.
However, recently, this notification problem raised. I noticed it last week but I believe it started in the last 2-3 weeks.

Before that , I was able to receive notifications from my custom smart apps.
Now do not receive any notifications from custom smart apps.
But I do receive notifications from “automations” and integrated smart apps like “smartthings home monitor”

I have already gone through the troubleshooting steps you wrote.
Yes, I see my email address on “members”
Yes, app notifications are enabled (I receive notifications from automations and integrated smart apps)

So my “notification issue” is specific to “custom smart apps”
And when I check under :

  • Smartthings App → Settings → Notifications
    I do not see custom apps listed. I only see devices and integrated smart apps.

So it is like I do not have any custom apps installed. However, I have smart apps installed.

What is happening with my smart apps ?
Why are they like ghost. They do work but…

I also don’t see notifications under “messages” part of the app.
I only see notifications from app itself (hub disconnected/connected) , and automations and integrated smart apps.

to make a simple test , I just added a simple smart app now, with only one command (sendPush(“test”))
it did not appear under notification settings.

@SamsungZell , did you read my post ? is it clear ?

Hey there!

I completely understand your frustration and I wish I was equipped to assist you further with your custom smart app but I would recommend proceeding with your support ticket advising that you are continuing to receive false network errors and the missing notification history in your “messages”.

You can reach out directly to a support team in your area using the below information:
US: 1-866-813-2404
US: support@smartthings.com
UK: support@smartthings.co.uk

I hope this message finds you well!

^SamsungZell