private void onReceived(object sender, BasicDeliverEventArgs ea) { var config = _appConfig.Value.MQTT; IBasicProperties props = ea.BasicProperties; string msgType = ""; if (props.Headers != null) { foreach (var key in props.Headers.Keys) { byte[] b = (byte[])props.Headers[key]; msgType = Encoding.Default.GetString(b); } } var body = ea.Body; var message = Encoding.UTF8.GetString(body); if (msgType == "OpProp") { if (mqttWorker.MqttClient.IsConnected) { //_logger.LogInformation(message); OperatingProps opProps = JsonConvert.DeserializeObject <OperatingProps>(message); mqttWorker.Update(opProps, counter); counter += 1; counter %= 100000; } else { _logger.LogWarning("No Connection to Mqtt"); } } }
private byte[] SensorValueByte(OperatingProps opProps, string sensorName) { if (sensorName == sensorValues[11].Name) { if (opProps.inverter.ModeId == DeviceModes.Battery) { if ((opProps.inverter.DeviceStatus1 & DeviceStatus1Flags.BatteryChargingSCC) == DeviceStatus1Flags.BatteryChargingSCC) { if ((opProps.battery.BatteryChargingCurrent == 0) && (opProps.battery.BatteryDischargeCurrent == 0)) { return(Encoding.UTF8.GetBytes("Solar Only")); } else { return(Encoding.UTF8.GetBytes("Solar And Charging")); } } else if ((opProps.inverter.DeviceStatus1 & DeviceStatus1Flags.BatteryChargingAC) == DeviceStatus1Flags.BatteryChargingAC) { return(Encoding.UTF8.GetBytes("Utility Charging")); } else { return(Encoding.UTF8.GetBytes("Battery")); } } else { return(Encoding.UTF8.GetBytes(opProps.inverter.Mode.ToString(CultureInfo.InvariantCulture))); } } return(Encoding.UTF8.GetBytes(SensorValue(opProps, sensorName).ToString(CultureInfo.InvariantCulture))); }
public void Update(OperatingProps opProps, int counter) { if (MqttClient.IsConnected) { int iPeriodUpdateId = 0; foreach (SensorConfig sensor in sensorValues) { string sensorName = $"{config.topic}/sensor/{config.devicename}_{sensor.Name}"; decimal sensorValue = SensorValue(opProps, sensor.Name); if (sensor.HasRunningAverage) { periodUpdates[iPeriodUpdateId].addValue(sensorValue); iPeriodUpdateId += 1; } if (counter % sensor.UpdatePeriod == 0) { // publish a message on "/home/temperature" topic with QoS 2 byte[] value = SensorValueByte(opProps, sensor.Name); MqttClient.Publish(sensorName, value); } } } else { _logger.Log(LogLevel.Information, "Updated paused until connected...{0}", config.server); } }
private void EcoMonCMSPost(string msgType, string message) { if (msgType == "OpProp") { OperatingProps opProps = JsonConvert.DeserializeObject <OperatingProps>(message); string json = JsonConvert.SerializeObject(opProps.inverter, Formatting.Indented); string url = $"http://axpi4/input/post?node=emonpi&fulljson={{\"power1\":\"{opProps.inverter.ACOutputActivePower}\"}}&apikey=c84bdc0fc6f3d3cf7b8f88cb0073d622"; Console.WriteLine(" [x] Sending {0}", url); var response = client.GetAsync(url); } }
private decimal SensorValue(OperatingProps opProps, string sensorName) { if (sensorName == sensorValues[0].Name) { return(opProps.solar.PVInputVoltage1); } if (sensorName == sensorValues[1].Name) { return(opProps.solar.PVInputCurrentForBattery); } if (sensorName == sensorValues[2].Name) { return(opProps.solar.PVChargingPower); } if (sensorName == sensorValues[3].Name) { return(opProps.solar.BatteryVoltageFromSCC); } if (sensorName == sensorValues[4].Name) { return(opProps.inverter.ACOutputActivePower); } if (sensorName == sensorValues[5].Name) { return(opProps.battery.BusVoltage); } if (sensorName == sensorValues[6].Name) { return(opProps.enviroment.HeatSinkTemperature); } if (sensorName == sensorValues[7].Name) { return(opProps.battery.BatteryCapacity); } if (sensorName == sensorValues[8].Name) { return(opProps.battery.BatteryChargingCurrent); } if (sensorName == sensorValues[9].Name) { return(opProps.battery.BatteryDischargeCurrent); } if (sensorName == sensorValues[10].Name) { return(opProps.battery.BatteryVoltage); } if (sensorName == sensorValues[12].Name) { // time to charge. ( 100 - Battery % * Ah) / current if (opProps.battery.BatteryChargingCurrent > 0) { decimal remCap = 1 - ((decimal)opProps.battery.BatteryCapacity / 100); decimal ahRem = (remCap * inverterConfig.BatteryAmpHours); decimal hRem = (ahRem / (decimal)opProps.battery.BatteryChargingCurrent); decimal minutes = hRem * 60; //_logger.Log(LogLevel.Information, "Charge..{0}:{1}:{2}:{3}", remCap, ahRem, hRem, minutes); return(minutes); } else { return(0); } } if (sensorName == sensorValues[13].Name) { // time to discharge. ( ( Battery % - (DoD * 100) * Ah) / current if (opProps.battery.BatteryDischargeCurrent > 0) { decimal capRem = opProps.battery.BatteryCapacity - (100 * inverterConfig.DoD); decimal cap = (capRem / 100); decimal ahRem = (cap * inverterConfig.BatteryAmpHours); decimal hRem = (ahRem / (decimal)opProps.battery.BatteryDischargeCurrent); decimal minutes = hRem * 60; //_logger.Log(LogLevel.Information, "DisCharge..{0}:{1}:{2}:{3}", minutes, opProps.battery.BatteryCapacity, inverterConfig.BatteryAmpHours, opProps.battery.BatteryDischargeCurrent); return(minutes); } else { return(0); } } if (sensorName == sensorValues[14].Name) { return(opProps.inverter.GridVoltage); } return(0); }