Beispiel #1
0
 public FrameAttribute()
 {
     FrameResponse      = new FrameResponse();
     CompleteExpression = string.Empty;
 }
Beispiel #2
0
 public FrameAttribute(FrameResponse frameResponse, string completeExpression)
 {
     FrameResponse      = frameResponse;
     CompleteExpression = completeExpression;
 }
Beispiel #3
0
        public List <FrameResponse> ReadAllTelegram(string portcom, string macadresseprt)
        {
            List <FrameResponse> myFrameList = new List <FrameResponse>();

            HyScript hyScript             = new HyScript();
            int      port                 = Convert.ToInt32(portcom);
            string   comPort              = "com://" + port;
            string   response             = "false";
            string   dataJSON             = "";
            string   rawDataInterpretJSON = "";
            string   cmdClear             = "if(dc~=nil) then dc:close(); cl=nil; pl=nil; dc=nil";

            _logger.Info("Check Licence");
            response = hyScript.call("setLogLevel(-1); setLogFileName('IzarCSI.log'); return License.check('EGEEEGEE','I1ARCQI0')");
            _logger.Info("resultat Check Licence : " + response);
            if (response == "true")
            {
                hyScript.call(cmdClear);

                string cmd = "dc = DataConcentrator.new();" +
                             " ds = BtReceiverDataSource.new();" +
                             " ds:setDataConcentrator(ref(dc));" +
                             " pl = IPhysicalLayer.new('" + comPort + "');" +
                             " cl = ICommunicationLayer.new('hybtoh://', ref(pl));" +
                             " ds:setCommunicationLayer(ref(cl));" +
                             " local ri = RadioInterpreter.new();" +
                             " ri:setProcessLevel();" +
                             " dc:setRadioInterpreter(ri);" +
                             " ri:enableDecryption(false);" +
                             " tsf=ToStringFormater.new();" +
                             " tsf:setAddSPDEAddress(true);" +
                             " setFormater(tsf);" +
                             " ds:setSourceId('" + macadresseprt + "');" +
                             " ds:config('timeoutNoAnswer', 150);" +
                             " ds:config('timeoutNoDataFollows', 2);" +
                             " ds:config('timeoutAfterTelegram', 10); return true";


                _logger.Info("Init: " + cmd);
                response = hyScript.call(cmd);

                _logger.Info("resultat Init : " + response);

                if (response == "true")
                {
                    //startASync
                    _logger.Info("ds:startASync()");
                    hyScript.call("ds:startASync()");

                    Thread.Sleep(2000);

                    //stopASync
                    _logger.Info("ds:stopASync()");
                    hyScript.call("ds:stopASync()");

                    string telegramProcessed = hyScript.call("return dc:getNumberOfProcessedTelegrams()");
                    _logger.Info("Nombre de télégrammes traités: " + telegramProcessed);


                    string telegramCollected = hyScript.call("return dc:getNumberOfCollectedTelegrams()");
                    _logger.Info("Nombre de télégrammes collectés: " + telegramCollected);


                    string falseTelegram = hyScript.call("return dc:getNumberOfFalseTelegrams()");
                    _logger.Info("Nombre de faux télégrammes : " + falseTelegram);


                    string foundedDevice = hyScript.call("return dc:getNumberOfFoundedDevices()");
                    _logger.Info("Nombre de modules trouvés : " + foundedDevice);

                    //device founded
                    if (Convert.ToInt32(foundedDevice) > 0)
                    {
                        _logger.Info("dc:getDeviceList()");
                        dataJSON = hyScript.call("return dc:getDeviceList():__tostring(dc:getDeviceList():getBeginDeviceDescriptionIterator(true))");
                        _logger.Info("resultat getDeviceList : " + dataJSON);

                        try
                        {
                            FrameResponse          dataFrame;
                            SappelResponseContract sappelResponseContract = JsonConvert.DeserializeObject <SappelResponseContract>(dataJSON);

                            List <Entry> entries = sappelResponseContract.entries.ToList();


                            foreach (var entry in entries)
                            {
                                List <Telegram> telegrams = entry.value.meteringPoint.telegrams.ToList();

                                foreach (var telegram in telegrams)
                                {
                                    dataFrame = new FrameResponse();

                                    if (telegram.telegramTypeSpecifica.qualityIndicator.rssi > 25)
                                    {
                                        dataFrame.deviceId   = telegram.mBusData.deviceId.spdeid.spde;
                                        dataFrame.manuString = telegram.mBusData.deviceId.manuString;
                                        dataFrame.ciField    = telegram.mBusData.ciField;
                                        dataFrame.structure  = telegram.mBusData.deviceId.spdeid.format;

                                        //Récupération des alarmes
                                        if (telegram.mBusData.alarmField.data != "00" && telegram.mBusData.alarmField.data != "00 00")
                                        {
                                            dataFrame.alarmeCode = TelegramAlarmFormat(telegram.mBusData.alarmField.data);
                                        }


                                        string rawData = TelegramFormat(telegram.mBusData.rawData.data);

                                        //On récupére la raw data
                                        rawDataInterpretJSON = Interpreter(rawData);
                                        Telegram         telegramResponse = JsonConvert.DeserializeObject <Telegram>(rawDataInterpretJSON);
                                        List <MBusValue> mBusValues       = telegramResponse.mBusData.mBusValues.ToList();
                                        foreach (var mBusValue in mBusValues)
                                        {
                                            if ((mBusValue.valid == true))
                                            {
                                                if (mBusValue.dimension.stringId == "VOLUME")
                                                {
                                                    //volume
                                                    if (mBusValue.storageNumber == 0 && mBusValue.tariffNumber == 0 && mBusValue.subUnitNumber == 0)
                                                    {
                                                        dataFrame.volumeValue    = Convert.ToInt32(mBusValue.formated);
                                                        dataFrame.volumeIndex    = CalculIndex(Convert.ToInt32(mBusValue.formated), Convert.ToInt32(mBusValue.exponent));
                                                        dataFrame.volumeCode     = mBusValue.dimension.stringId;
                                                        dataFrame.volumeUnite    = mBusValue.unit.stringId;
                                                        dataFrame.volumeExponent = Convert.ToInt32(mBusValue.exponent);
                                                        dataFrame.volumeFormat   = dataFrame.volumeCode + "  " + dataFrame.volumeIndex + "  m3";
                                                    }
                                                }
                                                if (mBusValue.dimension.stringId == "ENERGY")
                                                {
                                                    //Energy
                                                    if (mBusValue.storageNumber == 0 && mBusValue.tariffNumber == 0 && mBusValue.subUnitNumber == 0)
                                                    {
                                                        dataFrame.energyValue    = Convert.ToInt32(mBusValue.formated);
                                                        dataFrame.energyIndex    = CalculIndex(Convert.ToInt32(mBusValue.formated), Convert.ToInt32(mBusValue.exponent));
                                                        dataFrame.energyCode     = mBusValue.dimension.stringId;
                                                        dataFrame.energyUnite    = mBusValue.unit.stringId;
                                                        dataFrame.energyExponent = Convert.ToInt32(mBusValue.exponent);
                                                        dataFrame.energyFormat   = dataFrame.energyCode + "  " + dataFrame.energyIndex + "  " + dataFrame.energyUnite;
                                                    }
                                                }

                                                if (mBusValue.dimension.stringId == "OPERATIONTIMEBATTERY")
                                                {
                                                    dataFrame.batteryCode     = mBusValue.dimension.stringId;
                                                    dataFrame.batteryFormated = Convert.ToInt32(mBusValue.formated);
                                                    dataFrame.batteryUnite    = mBusValue.unit.stringId;
                                                }
                                                if (mBusValue.dimension.stringId == "TIMEPOINT")
                                                {
                                                    dataFrame.date = mBusValue.formated.ToString();
                                                }
                                            }
                                        }

                                        if (!myFrameList.Where(x => x.deviceId == dataFrame.deviceId).Any())
                                        {
                                            if ((dataFrame.volumeCode != null || dataFrame.energyCode != null) && dataFrame.ciField != 0)
                                            {
                                                myFrameList.Add(dataFrame);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            _logger.Info("ERREUR : " + ex.Message);
                        }
                    }

                    hyScript.call("dc:getDeviceList():clear()");
                }
                else
                {
                    dataJSON = hyScript.call("dc:clearLastException() val=dc:getValue(valueIdent) ret = {val, dc:getLastException()} return ret");
                    _logger.Info("Erreur Init and StartASync: " + dataJSON);
                }
            }
            else
            {
                dataJSON = hyScript.call("dc:clearLastException() val=dc:getValue(valueIdent) ret = {val, dc:getLastException()} return ret");
                _logger.Info("Erreur check licence: " + dataJSON);
            }
            _logger.Info("ResultMyFrameList : " + myFrameList.ToString());
            return(myFrameList);
        }