//static?
 private void StatusDefault(OSAEObject o)
 {
     if (o.Name!=Name)           //Do not change the state of the plugin object!
         switch (o.Type)
         {
             case objTypeHum:
             case objTypeTemp:
             case objTypeTempHum:
                 o.SetState(objStatOff);
                 //sensor s = new sensor();
                 //sensorList.Add(int.Parse(o.Property(propDevId).Value), s);
                 break;
             default:
                 o.SetState(objStatUnKnown);
                 break;
         }
 }
        private int doCommand(OSAEObject o, string addr, OSAEMethod method)
        {
            try
            {
                int deviceId = System.Convert.ToInt32(addr);
                int result = 0;
                if ((o.State.Value.ToUpper() != objStatDisable) || (method.MethodName.ToUpper() == objMtdEnable) ||
                     (o.Name == Name && method.MethodName.ToUpper() == objMtdInit))
                {
                    switch (method.MethodName)
                    {
                        case objMtdBell:
                            if (TelldusNETWrapper.tdMethods(deviceId, TelldusNETWrapper.TELLSTICK_BELL) > 0)
                            {
                                result = TelldusNETWrapper.tdBell(deviceId);
                                logResult(method.MethodName, result, o);
                                setLastProperties(o, deviceId, TelldusNETWrapper.TELLSTICK_BELL);
                            }
                            else
                                logW("doCommand", o.Name, objMtdBell + " Method is not supported on this object.");
                            break;
                        case objMtdDim:
                            if (TelldusNETWrapper.tdMethods(deviceId, TelldusNETWrapper.TELLSTICK_DIM) > 0)
                            {
                                try
                                {
                                    result = TelldusNETWrapper.tdDim(deviceId, (char)((Int32)(Double.Parse(method.Parameter1) * (255 / 100.0))));
                                }
                                catch (Exception)
                                {
                                    result = TelldusNETWrapper.tdDim(deviceId, '0');
                                }
                                logResult(method.MethodName, result, o);
                                setLastProperties(o, deviceId, TelldusNETWrapper.tdLastSentCommand(deviceId, TelldusNETWrapper.TELLSTICK_ALL));
                            }
                            else
                                logW("doCommand", o.Name, objMtdDim + " Method is not supported on this object.");
                            break;
                        case objMtdDown:
                            if (TelldusNETWrapper.tdMethods(deviceId, TelldusNETWrapper.TELLSTICK_DOWN) > 0)
                            {
                                result = TelldusNETWrapper.tdDown(deviceId);
                                logResult(method.MethodName, result, o);
                                setLastProperties(o, deviceId, TelldusNETWrapper.tdLastSentCommand(deviceId, TelldusNETWrapper.TELLSTICK_ALL));
                            }
                            else
                                logW("doCommand", o.Name, objMtdDown + " Method is not supported on this object.");
                            break;
                        case objMtdUp:
                            if (TelldusNETWrapper.tdMethods(deviceId, TelldusNETWrapper.TELLSTICK_UP) > 0)
                            {
                                result = TelldusNETWrapper.tdUp(deviceId);
                                logResult(method.MethodName, result, o);
                                setLastProperties(o, deviceId, TelldusNETWrapper.tdLastSentCommand(deviceId, TelldusNETWrapper.TELLSTICK_ALL));
                            }
                            else
                                logW("doCommand", o.Name, objMtdUp + " Method is not supported on this object.");
                            break;
                        case objMtdStop:
                            if (TelldusNETWrapper.tdMethods(deviceId, TelldusNETWrapper.TELLSTICK_STOP) > 0)
                            {
                                result = TelldusNETWrapper.tdStop(deviceId);
                                logResult(method.MethodName, result, o);
                                setLastProperties(o, deviceId, TelldusNETWrapper.tdLastSentCommand(deviceId, TelldusNETWrapper.TELLSTICK_ALL));
                            }
                            else
                                logW("doCommand", o.Name, objMtdStop + " Method is not supported on this object.");
                            break;
                        case objMtdOn:
                            if (TelldusNETWrapper.tdMethods(deviceId, TelldusNETWrapper.TELLSTICK_TURNON) > 0)
                            {
                                result = TelldusNETWrapper.tdTurnOn(deviceId);
                                logResult(method.MethodName, result, o);
                                setLastProperties(o, deviceId, TelldusNETWrapper.tdLastSentCommand(deviceId, TelldusNETWrapper.TELLSTICK_ALL));
                            }
                            else
                                logW("doCommand", o.Name, objMtdOn + " Method is not supported on this object.");
                            break;
                        case objMtdOff:
                            if (TelldusNETWrapper.tdMethods(deviceId, TelldusNETWrapper.TELLSTICK_TURNOFF) > 0)
                            {
                                result = TelldusNETWrapper.tdTurnOff(deviceId);
                                logResult(method.MethodName, result, o);
                                setLastProperties(o, deviceId, TelldusNETWrapper.tdLastSentCommand(deviceId, TelldusNETWrapper.TELLSTICK_ALL));
                            }
                            else
                                logW("doCommand", o.Name, objMtdOff + " Method is not supported on this object.");
                            break;
                        case objMtdToggle:
                            if (TelldusNETWrapper.tdMethods(deviceId, TelldusNETWrapper.TELLSTICK_TOGGLE) > 0)
                            {
                                result = TelldusNETWrapper.TELLSTICK_ERROR_METHOD_NOT_SUPPORTED; // !!!!!!!
                                logResult(method.MethodName, result, o);
                                setLastProperties(o, deviceId, TelldusNETWrapper.tdLastSentCommand(deviceId, TelldusNETWrapper.TELLSTICK_ALL));
                            }
                            else
                                logW("doCommand", o.Name, objMtdToggle + " Method is not supported on this object.");
                            break;
                        case objMtdExecute:
                            if (TelldusNETWrapper.tdMethods(deviceId, TelldusNETWrapper.TELLSTICK_EXECUTE) > 0)
                            {
                                result = TelldusNETWrapper.tdExecute(deviceId);
                                logResult(method.MethodName, result, o);
                                setLastProperties(o, deviceId, TelldusNETWrapper.tdLastSentCommand(deviceId, TelldusNETWrapper.TELLSTICK_ALL));
                            }
                            else
                                logW("doCommand", o.Name, objMtdExecute + " Method is not supported on this object.");
                            break;
                        case objMtdLearn:
                            if (TelldusNETWrapper.tdMethods(deviceId, TelldusNETWrapper.TELLSTICK_LEARN) > 0)
                            {
                                result = TelldusNETWrapper.tdLearn(deviceId);
                                logResult(method.MethodName, result, o);
                                setLastProperties(o, deviceId, TelldusNETWrapper.tdLastSentCommand(deviceId, TelldusNETWrapper.TELLSTICK_ALL));
                            }
                            else
                                logW("doCommand", o.Name, objMtdLearn + " Method is not supported on this object.");
                            break;
                        case objMtdRestMaxMin:
                            switch (o.Type)
                            {
                                case objTypeHum:
                                    setPropertyValue(o, propMaxHum, o.Property(propHum).Value);
                                    setPropertyValue(o, propMinHum, o.Property(propHum).Value);
                                    log("doCommand", o.Name, " Reset Min/Max values.");
                                    break;
                                case objTypeTemp:
                                    setPropertyValue(o, propMaxTemp, o.Property(propTemp).Value);
                                    setPropertyValue(o, propMinTemp, o.Property(propTemp).Value);
                                    log("doCommand", o.Name, " Reset Min/Max values.");
                                    break;
                                case objTypeTempHum:
                                    setPropertyValue(o, propMaxHum, o.Property(propHum).Value);
                                    setPropertyValue(o, propMinHum, o.Property(propHum).Value);
                                    setPropertyValue(o, propMaxTemp, o.Property(propTemp).Value);
                                    setPropertyValue(o, propMinTemp, o.Property(propTemp).Value);
                                    log("doCommand", o.Name, " Reset Min/Max values.");
                                    break;
                                default:
                                    logE("doCommand", o.Name, " Reset Min/Max values.", null);
                                    break;
                            }
                            break;

                        case objMtdEnable:
                            switch (o.Type)
                            {
                                case objTypeHum:
                                case objTypeTemp:
                                case objTypeTempHum:
                                    o.SetState(objStatOff);
                                    log("doCommand", o.Name, objStatOff + " Device state set on object.");
                                    break;
                                default:
                                    o.SetState(objStatUnKnown);
                                    log("doCommand", o.Name, objStatUnKnown + " Device state set on object.");
                                    break;
                            }
                            break;
                        case objMtdDis:
                            o.SetState(objStatDisable);  // Should be done automatically on method with same name as state, but not working
                            log("doCommand", o.Name, objStatDisable + " Device state set on object.");
                            break;
                        case objMtdDebugOn:
                            if (debug != true)
                            {
                                debug = true;
                                log("doCommand", o.Name, "Method DebugOn, set debug to TRUE.");
                            }
                            else
                                log("doCommand", o.Name, "Method DebugOn, debug already set to TRUE.");
                            break;
                        case objMtdDebugOff:
                            if (debug != false)
                            {
                                debug = false;
                                log("doCommand", o.Name, "Method DebugOff, set debug to FALSE.");
                            }
                            else
                                log("doCommand", o.Name, "Method DebugOff, debug already set to FALSE.");
                            break;
                        default:
                            logE("doCommand", o.Name, method.MethodName + "Unsuported method: ", null);
                            break;
                        case objMtdRestore:
                            switch (o.Type)
                            {
                                case objTypeBell:
                                    restoreTellstickBellObjectType(Name);
                                    break;
                                case objTypeDim:
                                    restoreTellstickMultiLevelswitchObjectType(Name);
                                    break;
                                case objTypeGroup:
                                    restoreTellstickGroupDeviceObjectType(Name);
                                    break;
                                case objTypeHum:
                                    restoreTellstickHumiditySensorObjectType(Name);
                                    break;
                                case objTypeOnOff:
                                    restoreTellstickBinarySwitchObjectType(Name);
                                    break;
                                case objTypeTemp:
                                    restoreTellstickTemperatureSensorObjectType(Name);
                                    break;
                                case objTypeTempHum:
                                    restoreTellstickTempHumiditySensorObjectType(Name);
                                    break;
                                case objTypeUpDown:
                                    restoreUpDownDeviceObjectType(Name);
                                    break;
                            }
                            break;
                    }
                } // if
                else
                    logW("doCommand", o.Name, objStatDisable + " Methods can not be used when object state is DISABLE!");
                return result;
            }
            catch (Exception ex)
            {
                logE("doCommand", "", "Exception in doCommand: ", ex);
                return -1;
            }
        }
 private void setLastProperties(OSAEObject o, int deviceId, int lastCmd)
 {
     setPropertyValue(o, propLastCmd, MethodToString(lastCmd));
     switch (lastCmd)
     {
         case TelldusNETWrapper.TELLSTICK_TURNON:
             setPropertyValue(o, propLevel, "100");
             o.SetState(objStatOn);
             break;
         case TelldusNETWrapper.TELLSTICK_TURNOFF:
             setPropertyValue(o, propLevel, "0");
             o.SetState(objStatOff);
             break;
         case TelldusNETWrapper.TELLSTICK_DIM:
             try
             {
                 setPropertyValue(o, propLevel, (Decimal.Round((Decimal)(Int32.Parse(TelldusNETWrapper.tdLastSentValue(deviceId)) * (100 / 255.0))).ToString()));
                 if (TelldusNETWrapper.tdLastSentValue(deviceId) != "0")
                     o.SetState(objStatOn);
                 else
                     o.SetState(objStatOff);
             }
             catch (Exception)
             {
                 setPropertyValue(o, propLevel, "");
                 o.SetState(objStatOn);
             }
             break;
         case TelldusNETWrapper.TELLSTICK_TOGGLE:
             if (getPropertyValue(o, propLastCmd) == objEveOn)    // Previous value!
                 o.SetState(objStatOff);
             else
                 o.SetState(objStatOn);
             break;
         case TelldusNETWrapper.TELLSTICK_BELL:
         case TelldusNETWrapper.TELLSTICK_DOWN:
         case TelldusNETWrapper.TELLSTICK_EXECUTE:
         case TelldusNETWrapper.TELLSTICK_STOP:
         case TelldusNETWrapper.TELLSTICK_UP:
             setPropertyValue(o, propLevel, "");
             o.SetState(objStatOn);
             break;
         default:
             o.SetState(objStatUnKnown);
             break;
     }
 }