コード例 #1
0
ファイル: PersisterFactory.cs プロジェクト: flecce/HomeBot
 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);
        }
コード例 #3
0
        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();
        }
コード例 #7
0
        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
ファイル: EmonCMSPersister.cs プロジェクト: flecce/HomeBot
        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
ファイル: BPlusTreeTest.cs プロジェクト: thoward/bsharptree
        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);