예제 #1
0
 private async void OnOffSensor_04_digitalOnOffSensorSend(OnOffDigitalSensorMgr sender, OnOffDigitalSensorMgr.OnOffSensorEventArgs e)
 {
     await WriteOnOffEntityToCloud(e);
 }
예제 #2
0
        async Task WriteOnOffEntityToCloud(OnOffDigitalSensorMgr.OnOffSensorEventArgs e)
        {
            //Console.WriteLine("Common-method Thread-Id: " + e.DestinationTable + " "+ Thread.CurrentThread.ManagedThreadId.ToString());

            bool validStorageAccount           = false;
            CloudStorageAccount storageAccount = null;
            Exception           CreateStorageAccountException = null;

            try
            {
                storageAccount      = Common.CreateStorageAccountFromConnectionString(connectionString);
                validStorageAccount = true;
            }
            catch (Exception ex0)
            {
                CreateStorageAccountException = ex0;
            }
            if (!validStorageAccount)
            {
                MessageBox.Show("Storage Account not valid\r\nEnter valid Storage Account and valid Key", "Alert", MessageBoxButton.OK);

                return;
            }
            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
            CloudTable       cloudTable  = tableClient.GetTableReference(e.DestinationTable + DateTime.Today.Year);

            if (!existingOnOffTables.Contains(cloudTable.Name))
            {
                try
                {
                    await cloudTable.CreateIfNotExistsAsync();

                    existingOnOffTables.Add(cloudTable.Name);
                }
                catch (Exception exc)
                {
                    Console.WriteLine("Could not create On/Off Table with name: \r\n" + cloudTable.Name + "\r\nCheck your Internet Connection.\r\nAction aborted.");
                    return;
                }
            }

            // formatting the PartitionKey this way to have the tables sorted with last added row upmost
            string partitionKey = "Y3_" + DateTime.Today.Year + "-" + (12 - DateTime.Now.Month).ToString("D2");

            DateTime actDate = DateTime.Now;
            // formatting the RowKey this way to have the tables sorted with last added row upmost
            string rowKey = (10000 - actDate.Year).ToString("D4") + (12 - actDate.Month).ToString("D2") + (31 - actDate.Day).ToString("D2")
                            + (23 - actDate.Hour).ToString("D2") + (59 - actDate.Minute).ToString("D2") + (59 - actDate.Second).ToString("D2");



            //string sampleTime = actDate.Month.ToString("D2") + "/" + actDate.Day.ToString("D2") + "/" + actDate.Year + " " + actDate.Hour.ToString("D2") + ":" + actDate.Minute.ToString("D2") + ":" + actDate.Second.ToString("D2");
            string   sampleTime = actDate.ToString("MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture) + " " + TimeOffsetUTCString;
            TimeSpan tflSend    = e.TimeFromLastSend;
            string   timeFromLastSendAsString = tflSend.Days.ToString("D3") + "-" + tflSend.Hours.ToString("D2") + ":" + tflSend.Minutes.ToString("D2") + ":" + tflSend.Seconds.ToString("D2");

            string onTimeDayAsString = e.OnTimeDay.ToString(@"ddd\-hh\:mm\:ss", CultureInfo.InvariantCulture);

            Dictionary <string, EntityProperty> entityDictionary = new Dictionary <string, EntityProperty>();

            entityDictionary.Add("SampleTime", EntityProperty.GeneratePropertyForString(sampleTime));
            entityDictionary.Add("ActStatus", EntityProperty.GeneratePropertyForString(e.ActState ? "Off" : "On"));
            entityDictionary.Add("LastStatus", EntityProperty.GeneratePropertyForString(e.OldState ? "Off" : "On"));
            entityDictionary.Add("TimeFromLast", EntityProperty.GeneratePropertyForString(timeFromLastSendAsString));
            entityDictionary.Add("OnTimeDay", EntityProperty.GeneratePropertyForString(onTimeDayAsString));

            DynamicTableEntity dynamicTableEntity = await Common.InsertOrMergeEntityAsync(cloudTable, new DynamicTableEntity(partitionKey, rowKey, null, entityDictionary));
        }
예제 #3
0
 private async void OnOffSensor_02_digitalOnOffSensorSend(OnOffDigitalSensorMgr sender, OnOffDigitalSensorMgr.OnOffSensorEventArgs e)
 {
     //Console.WriteLine("OnOffSensor_02 Thread-Id: " + e.DestinationTable + " " + Thread.CurrentThread.ManagedThreadId.ToString());
     await WriteOnOffEntityToCloud(e);
 }