Пример #1
0
 public void Save(IInverter inv, ConverterStatus?value)
 {
     if (value.HasValue)
     {
         _persisterList.ForEach(delegate(IPersister p) { p.Save(inv, value.Value); });
     }
 }
Пример #2
0
        public async Task <IDataExtract> Read(IInverter inverter)
        {
            T value = await _read(inverter);

            var dataExtract = new DataExtract <T>(value);

            return(dataExtract);
        }
        public override bool Save(IInverter inv, ConverterStatus value)
        {
            if (_timeService.GetCurrentDateTime().Subtract(_lastAdd).TotalSeconds < 10)
            {
                return(false);
            }

            ushort uiValue = (ushort)value.TypeStatus.GetProperty(CommonPropertyType.ProduzioneCorrente);
            float  temp1   = (float)value.TypeStatus.GetProperty(CommonPropertyType.Temperatura1);

            _localData.CurrentProductions.Add((int)(value.CommonStatus.EnergieTag * 1000));
            _localData.CurrentPowers.Add((int)uiValue);
            _localData.Taketimes.Add(_timeService.GetCurrentDateTime());
            _localData.Temps.Add(temp1);
            _lastAdd = _timeService.GetCurrentDateTime();
            _logger.LogDebug($"Data added: Count={_localData.CurrentPowers.Count}");
            if (_localData.CurrentPowers.Count >= 30)
            {
                lock (this)
                {
                    _logger.LogDebug("Comunicate to pvoutput for addbatchstatus");

                    string        key = "key=024fe8dd52991266562af15510ab1a999c927805&sid=9627";
                    List <string> sb  = new List <string>();

                    for (int index = 0; index < _localData.CurrentPowers.Count; index++)
                    {
                        sb.Add(String.Format("{0:yyyyMMdd},{1:HH:mm},{2},{3},{4},{5},{6},{7}",
                                             _localData.Taketimes[index],
                                             _localData.Taketimes[index],
                                             _localData.CurrentProductions[index],
                                             (int)_localData.CurrentPowers[index],
                                             -1,
                                             -1,
                                             _localData.Temps[index].ToString("0.0", new System.Globalization.CultureInfo("en-US")),
                                             value.TypeStatus.GetProperty(Enums.CommonPropertyType.UAC)
                                             ));
                    }

                    string statusParameters = "data=" + String.Join(";", sb.ToArray());
                    string statusURI        = "http://pvoutput.org/service/r2/addbatchstatus.jsp?";
                    string statusUrl        = statusURI + key + "&" + statusParameters;
                    _logger.LogDebug("status url:" + statusUrl);
                    string responseValue = "";
                    bool   response      = _doGETRequest(statusUrl, ref responseValue);

                    _localData.Clear();
                    return(response);
                }
            }
            return(false);
        }
Пример #4
0
        public override bool Save(IInverter inv, ConverterStatus value)
        {
            if (_currentInformations.ContainsKey(inv.SerialeNumber) == false)
            {
                _currentInformations.Add(inv.SerialeNumber, new CurrentInformation()
                {
                    CurrentDay = _timeService.GetCurrentDate().Day
                });
            }

            CurrentInformation ci = _currentInformations[inv.SerialeNumber];

            ushort uiValue = (ushort)value.TypeStatus.GetProperty(CommonPropertyType.ProduzioneCorrente);
            float  temp1   = (float)value.TypeStatus.GetProperty(CommonPropertyType.Temperatura1);

            ci.CurrentProduction = (int)(value.CommonStatus.EnergieTag * 1000);
            ci.CurrentPowers.Add((int)uiValue);
            ci.Temps.Add(temp1);

            if (_timeService.GetCurrentDateTime().Subtract(_lastSend).TotalSeconds > _sendIntervalSeconds)
            {
                // LogFactory.GetLog().WriteToLog(TraceEventType.Verbose, "Comunicate to pvoutput for addstatus");

                int prodGiornaliera = ci.CurrentProduction;

                string key = "key=024fe8dd52991266562af15510ab1a999c927805&sid=9627";
                string statusParameters = String.Format("d={0:yyyyMMdd}&t={2:HH:mm}&v1={1}&v2={3}&v5={4}&v6={5}",
                                                        _timeService.GetCurrentDate(),
                                                        prodGiornaliera,
                                                        _timeService.GetCurrentDateTime(),
                                                        ci.MaxPower,
                                                        ci.AverangeTemps.ToString("0.0", new System.Globalization.CultureInfo("en-US")),
                                                        value.TypeStatus.GetProperty(Enums.CommonPropertyType.UAC)
                                                        );
                string statusURI = "http://pvoutput.org/service/r2/addstatus.jsp?";
                string statusUrl = statusURI + key + "&" + statusParameters;
                // LogFactory.GetLog().WriteToLog(TraceEventType.Verbose, "status url:" + statusUrl);
                string responseValue = "";
                bool   response      = _doGETRequest(statusUrl, ref responseValue);

                _lastSend = _timeService.GetCurrentDateTime();
                ci.CurrentPowers.Clear();

                return(response);
            }
            return(false);
        }
Пример #5
0
 public RealTimeInverter([NotNull] IDisposer disposer,
                         [NotNull] IAgenda agenda,
                         [NotNull] IInverterFactory factory,
                         [NotNull] IWire wireIn,
                         [NotNull] IWire wireOut)
     : base(disposer,
            agenda,
            new[]
 {
     wireIn
 },
            new[]
 {
     wireOut
 })
 {
     m_Inverter = factory.Create(wireIn,
                                 wireOut);
 }
Пример #6
0
        public Connected(ILogger <IMachine> logger, IOptions <Config> config, IInverter inverter, Message.IFacade messageFacade, Transition.IFactory transitionFactory)
        {
            _logger            = logger;
            _config            = config;
            _inverter          = inverter;
            _messageFacade     = messageFacade;
            _transitionFactory = transitionFactory;
            _scheduler         = TaskPoolScheduler.Default;

            var extractors = config.Value.ModelsToRead
                             .Split(',')
                             .Join(ModelToExtractorMappings, name => name.ToLower(), mapping => mapping.Key.ToLower(), (name, mapping) => new { Name = name, Value = mapping.Value() })
                             .ToArray();

            var models = string.Join(", ", extractors.Select(tuple => tuple.Name));

            _logger.LogInformation($"Connected state will read the following models: {models}");

            _extractors = extractors.Select(tuple => tuple.Value).ToArray();
        }
        public ArithmeticLogicUnit(
            IByteXOr byteXOr,
            IByteOr byteOr,
            IByteAnd byteAnd,
            IInverter inverter,
            IByteAdder byteAdder,
            IByteEnabler byteEnabler,
            IAnd and,
            IIsZeroGate isZeroGate,
            IByteDecoder byteDecoder,
            IRightByteShifter rightByteShifter,
            ILeftByteShifter leftByteShifter,
            IOr or,
            IAluWire aluWire,
            IByteComparator byteComparator,
            Action <Caez> updateFlags,
            Action <IByte> updateAcc,
            IByteFactory byteFactory)
        {
            _byteXOr          = byteXOr;
            _byteOr           = byteOr;
            _byteAnd          = byteAnd;
            _inverter         = inverter;
            _byteAdder        = byteAdder;
            _byteEnabler      = byteEnabler;
            _and              = and;
            _isZeroGate       = isZeroGate;
            _byteDecoder      = byteDecoder;
            _rightByteShifter = rightByteShifter;
            _leftByteShifter  = leftByteShifter;
            _or             = or;
            _aluWire        = aluWire;
            _byteComparator = byteComparator;
            _updateFlags    = updateFlags;
            _updateAcc      = updateAcc;

            InputA = byteFactory.Create();
            InputB = byteFactory.Create();
            Op     = new Op();
        }
Пример #8
0
        public override bool Save(IInverter inv, ConverterStatus value)
        {
            if (_currentInformations.ContainsKey(inv.SerialeNumber) == false)
            {
                _currentInformations.Add(inv.SerialeNumber, new CurrentInformation()
                {
                    CurrentDay = _timeService.GetCurrentDate().Day
                });
            }

            CurrentInformation ci = _currentInformations[inv.SerialeNumber];

            ushort uiValue = (ushort)value.TypeStatus.GetProperty(CommonPropertyType.ProduzioneCorrente);
            float  temp1   = (float)value.TypeStatus.GetProperty(CommonPropertyType.Temperatura1);

            ci.CurrentProduction = (int)(value.CommonStatus.EnergieTag * 1000);
            ci.CurrentPowers.Add((int)uiValue);
            ci.Temps.Add(temp1);

            if (_timeService.GetCurrentDateTime().Subtract(_lastSend).TotalSeconds > _sendIntervalSeconds)
            {
                // LogFactory.GetLog().WriteToLog(TraceEventType.Verbose, "Comunicating... to emoncms for post");

                int prodGiornaliera = ci.CurrentProduction;

                string statusURI = "http://emoncms.org/input/post?apikey=cfe3a5e1be7b49c6d6a1aa372f32ec3a&json={invtotgen:" + ci.CurrentProduction.ToString() + ",invcurpwd:" + ci.MaxPower.ToString() + "}";
                //string statusUrl = String.Format(statusURI, ci.CurrentProduction, ci.MaxPower);
                // LogFactory.GetLog().WriteToLog(TraceEventType.Verbose, "status url:" + statusURI);
                string responseValue = "";
                bool   response      = _doGETRequest(statusURI, ref responseValue);
                // LogFactory.GetLog().WriteToLog(TraceEventType.Verbose, "  Comunication ok");

                _lastSend = _timeService.GetCurrentDateTime();
                ci.CurrentPowers.Clear();

                return(response);
            }
            return(false);
        }
Пример #9
0
        public bool Save(IInverter inv, Enums.ConverterStatus value)
        {
            if (_timeService.GetCurrentDateTime().Subtract(_lastSend).TotalSeconds > _sendIntervalSeconds)
            {
                _logger.LogDebug("Save data to file");

                lock (_syncObject)
                {
                    string baseDir  = _configService.GetConfigValue("Persisters.File.DataPath", null);
                    string dayFn    = _timeService.GetCurrentDate().ToString("yyyy_MM_dd");
                    string dataFile = Path.Combine(baseDir, dayFn + ".txt");
                    if (File.Exists(dataFile) == false)
                    {
                        _prepareFile(dataFile);
                    }
                    string data = String.Format("{0};{1};{2};{3};{4};{5};{6};{7}",
                                                _timeService.GetCurrentDateTime().ToString("yyyy-MM-dd-HH:mm:ss"),
                                                (int)(value.CommonStatus.EnergieTag * 1000),
                                                value.TypeStatus.GetProperty(Enums.CommonPropertyType.ProduzioneCorrente),
                                                value.TypeStatus.GetProperty(Enums.CommonPropertyType.Temperatura1),
                                                value.TypeStatus.GetProperty(Enums.CommonPropertyType.IAC),
                                                value.TypeStatus.GetProperty(Enums.CommonPropertyType.IDC),
                                                value.TypeStatus.GetProperty(Enums.CommonPropertyType.UAC),
                                                value.TypeStatus.GetProperty(Enums.CommonPropertyType.UDC)
                                                );
                    using (StreamWriter sw = File.AppendText(dataFile))
                    {
                        sw.WriteLine(data);
                    }

                    _logger.LogDebug("Istantanea:{0} kWh, Prod giornaliera:{1} kWh", value.TypeStatus.GetProperty(Enums.CommonPropertyType.ProduzioneCorrente), value.CommonStatus.EnergieTag);
                }
                _lastSend = _timeService.GetCurrentDateTime();
            }
            return(true);
        }
Пример #10
0
 public Disconnecting(ILogger <IMachine> logger, IInverter inverter, Transition.IFactory transitionFactory)
 {
     _logger            = logger;
     _inverter          = inverter;
     _transitionFactory = transitionFactory;
 }
Пример #11
0
 public ToConnected(IInverter inverter)
 {
     Inverter = inverter;
 }
 public void RecordPvVoltage(IInverter inverter, int pv, double voltage)
 => _pvVoltage.WithLabels(inverter.Model, inverter.Identification, pv.ToString()).Set(voltage);
Пример #13
0
 public ToDisconnecting(IInverter inverter)
 {
     Inverter = inverter;
 }
 public void RecordInverterTemp(IInverter inverter, double temp)
 => _inverterTemp.WithLabels(inverter.Model, inverter.Identification).Set(temp);
 public void RecordEnergyToday(IInverter inverter, double energy)
 => _energyToday.WithLabels(inverter.Model, inverter.Identification).Set(energy);
Пример #16
0
        private static void DoQuery(IIndexReader<int, string, string> index, string queryText, IInverter<string, string> inverter)
        {
            Console.Out.WriteLine("=== graph for " + queryText + "===");

            var results = index.ExecuteQuery(queryText, inverter);

            Console.Out.WriteLine("=== results for: " + queryText + " ===");

            foreach (var result in results)
            {
                Console.Out.WriteLine("doc: {0}, text: {1}", result.Id, result.Value);
            }
        }
 public void RecordPvCurrent(IInverter inverter, int pv, double current)
 => _pvCurrent.WithLabels(inverter.Model, inverter.Identification, pv.ToString()).Set(current);
 public void RecordTotalOperationHours(IInverter inverter, double hours)
 => _totalOperationHours.WithLabels(inverter.Model, inverter.Identification).IncTo(hours);
 public void RecordGridCurrent(IInverter inverter, double current)
 => _gridCurrent.WithLabels(inverter.Model, inverter.Identification).Set(current);
 public void RecordGridFrequency(IInverter inverter, double frequency)
 => _gridFrequency.WithLabels(inverter.Model, inverter.Identification).Set(frequency);
 public void RecordGridVoltage(IInverter inverter, double voltage)
 => _gridVoltage.WithLabels(inverter.Model, inverter.Identification).Set(voltage);
Пример #22
0
 public ITransition ToConnected(IInverter inverter)
 {
     return(new ToConnected(inverter));
 }
 public void RecordOutputPower(IInverter inverter, double power)
 => _outputPower.WithLabels(inverter.Model, inverter.Identification).Set(power);
Пример #24
0
 public ITransition ToDisconnecting(IInverter inverter)
 {
     return(new ToDisconnecting(inverter));
 }
 public void RecordOperationMode(IInverter inverter, OperationMode operationMode)
 => _operationMode.WithLabels(inverter.Model, inverter.Identification).Set((int)operationMode);
 public void RecordEnergyTotal(IInverter inverter, double energy)
 => _energyTotal.WithLabels(inverter.Model, inverter.Identification).IncTo(energy);
 public void RecordPvPower(IInverter inverter, int pv, double power)
 => _pvPower.WithLabels(inverter.Model, inverter.Identification, pv.ToString()).Set(power);