Example #1
0
 public void WriteVariable(Byte variable, Byte value)
 {
     if (IsConnected)
     {
         Byte[] telegram = Vallox.CreateTelegram(_senderId, Vallox.Adress.Master, variable, value);
         _serialPort.Write(telegram, 0, telegram.Length);
     }
 }
Example #2
0
 public void ReadVariable(Byte variable)
 {
     if (IsConnected)
     {
         Byte[] telegram = Vallox.CreateTelegram(_senderId, Vallox.Adress.Master, Vallox.PollRequest, variable);
         _serialPort.Write(telegram, 0, telegram.Length);
     }
 }
Example #3
0
 public void ExecuteSetFanSpeed()
 {
     if (IsConnected)
     {
         Byte   fanSpeed = Vallox.ConvertBackFanSpeed(SelectedFanSpeed - 1);
         Byte[] telegram = Vallox.CreateTelegram(_senderId, Vallox.Adress.Master, Vallox.Variable.FanSpeed,
                                                 fanSpeed);
         _serialPort.Write(telegram, 0, telegram.Length);
     }
 }
Example #4
0
        /// <summary>
        ///     Try to detect a valid telegram and call the interpreter
        /// </summary>
        /// <returns></returns>
        private bool Interpret()
        {
            bool success = false;

            Queue <byte> .Enumerator enumerator = _interpreterQueue.GetEnumerator();
            enumerator.MoveNext();

            Byte domain = enumerator.Current;

            if (domain == Vallox.Domain)
            {
                enumerator.MoveNext();
                Byte sender = enumerator.Current;

                enumerator.MoveNext();
                Byte receiver = enumerator.Current;

                enumerator.MoveNext();
                Byte command = enumerator.Current;

                enumerator.MoveNext();
                Byte arg = enumerator.Current;

                enumerator.MoveNext();
                Byte checksum = enumerator.Current;

                Byte computedCheckSum = Vallox.ComputeCheckSum(domain, sender, receiver, command, arg);
                if (checksum == computedCheckSum)
                {
                    string timestamp = DateTime.UtcNow.ToString("HH:mm:ss.fff", CultureInfo.InvariantCulture);
                    Write("{0}    {1:X02} {2:X02} {3:X02} {4:X02} {5:X02} {6:X02}    ", timestamp, domain, sender, receiver, command, arg,
                          checksum);
                    Interpret(domain, sender, receiver, command, arg);
                    success = true;
                }
                else
                {
                    WriteLine("Wrong checksum: {0:X02} {1:X02} {2:X02} {3:X02} {4:X02} {5:X02} ({6:X02})", domain,
                              sender, receiver, command, arg, checksum, computedCheckSum);
                    success = false;
                }
            }

            return(success);
        }
Example #5
0
        /// <summary>
        ///     Intrepret approved message
        /// </summary>
        /// <param name="domain"></param>
        /// <param name="sender"></param>
        /// <param name="receiver"></param>
        /// <param name="command"></param>
        /// <param name="value"></param>
        private void Interpret(Byte domain, Byte sender, Byte receiver, Byte command, Byte value)
        {
            string senderString = Vallox.ConvertAddress(sender);

            UpdateStatistics(senderString, sender, true, false);

            string receiverString = Vallox.ConvertAddress(receiver);

            UpdateStatistics(receiverString, receiver, false, true);


            if (receiver == Vallox.Adress.Panel1 || receiver == Vallox.Adress.Panel8 || receiver == _senderId ||
                receiver == Vallox.Adress.Panels) // TODO: right now 0x20 0x21 0x22 are received
            {
                Byte variable = command;

                ValloxVariable variableItem = GetVariableItem(variable);
                variableItem.Value = value;

                switch (variable)
                {
                case Vallox.Variable.FanSpeed:
                {
                    int fanSpeed = Vallox.ConvertFanSpeed(value);
                    WriteLine("Fan speed {0}", fanSpeed);
                    FanSpeed = fanSpeed;
                    break;
                }

                case Vallox.Variable.Humidity:
                {
                    WriteLine("Humidity {0}%", value);
                    Humidity = value;
                    break;
                }

                case Vallox.Variable.Co2High:
                {
                    WriteLine("CO2 high {0}", value);
                    Co2High = value;
                    break;
                }

                case Vallox.Variable.Co2Low:
                {
                    WriteLine("CO2 low {0}", value);
                    Co2Low = value;
                    break;
                }

                case Vallox.Variable.HumiditySensor1:
                {
                    WriteLine("%RH1 {0}", value);
                    HumiditySensor1 = value;
                    break;
                }

                case Vallox.Variable.HumiditySensor2:
                {
                    WriteLine("%RH2 {0}", value);
                    HumiditySensor2 = value;
                    break;
                }

                case Vallox.Variable.TempOutside:
                {
                    int temperature = Vallox.ConvertTemp(value);
                    WriteLine("Temperature outside {0}°", temperature);
                    TempOutside = temperature;
                    break;
                }

                case Vallox.Variable.TempExhaust:
                {
                    int temperature = Vallox.ConvertTemp(value);
                    WriteLine("Temperature exhaust {0}°", temperature);
                    TempExhaust = temperature;
                    break;
                }

                case Vallox.Variable.TempInside:
                {
                    int temperature = Vallox.ConvertTemp(value);
                    WriteLine("Temperature inside {0}°", temperature);
                    TempInside = temperature;
                    break;
                }

                case Vallox.Variable.TempIncomming:
                {
                    int temperature = Vallox.ConvertTemp(value);
                    WriteLine("Temperature incomming {0}°", temperature);
                    TempIncomming = temperature;
                    break;
                }

                case Vallox.Variable.Select:
                {
                    WriteLine("Select {0}", value);

                    bool powerState;
                    bool co2AdjustState;
                    bool humidityAdjustState;
                    bool heatingState;
                    bool filterGuardIndicator;
                    bool heatingIndicator;
                    bool faultIndicator;
                    bool serviceReminderIndicator;

                    Vallox.ConvertSelect(value,
                                         out powerState, out co2AdjustState, out humidityAdjustState, out heatingState,
                                         out filterGuardIndicator, out heatingIndicator, out faultIndicator,
                                         out serviceReminderIndicator);

                    PowerState               = powerState;
                    Co2AdjustState           = co2AdjustState;
                    HumidityAdjustState      = humidityAdjustState;
                    HeatingState             = heatingState;
                    FilterGuardIndicator     = filterGuardIndicator;
                    HeatingIndicator         = heatingIndicator;
                    FaultIndicator           = faultIndicator;
                    ServiceReminderIndicator = serviceReminderIndicator;
                    break;
                }

                case Vallox.Variable.HeatingSetPoint:
                {
                    int temperature = Vallox.ConvertTemp(value);
                    WriteLine("Heating set point temperature {0}°", temperature);
                    HeatingSetPoint = temperature;
                    break;
                }

                case Vallox.Variable.FanSpeedMax:
                {
                    int fanSpeed = Vallox.ConvertFanSpeed(value);
                    WriteLine("Fan speed max {0}", fanSpeed);
                    FanSpeedMax = fanSpeed;
                    break;
                }

                case Vallox.Variable.ServiceReminder:
                {
                    WriteLine("Service reminder {0}", value);
                    ServiceReminder = value;
                    break;
                }

                case Vallox.Variable.PreHeatingSetPoint:
                {
                    int temperature = Vallox.ConvertTemp(value);
                    WriteLine("Pre heating set point {0}°", temperature);
                    PreHeatingSetPoint = temperature;
                    break;
                }

                case Vallox.Variable.InputFanStop:
                {
                    int temperature = Vallox.ConvertTemp(value);
                    WriteLine("Input fan stop below temp {0}°", temperature);
                    InputFanStopThreshold = temperature;
                    break;
                }

                case Vallox.Variable.FanSpeedMin:
                {
                    int fanSpeed = Vallox.ConvertFanSpeed(value);
                    WriteLine("Fan speed min {0}", fanSpeed);
                    FanSpeedMin = fanSpeed;
                    break;
                }

                case Vallox.Variable.Program:
                {
                    WriteLine("Program {0}", value);

                    int  adjustmentIntervalMinutes;
                    bool automaticHumidityLevelSeekerState;
                    Vallox.BoostSwitchMode boostSwitchMode;
                    Vallox.RadiatorType    radiatorType;
                    bool cascadeAdjust;
                    Vallox.ConvertProgram(value, out adjustmentIntervalMinutes,
                                          out automaticHumidityLevelSeekerState,
                                          out boostSwitchMode, out radiatorType, out cascadeAdjust);

                    AdjustmentIntervalMinutes         = adjustmentIntervalMinutes;
                    AutomaticHumidityLevelSeekerState = automaticHumidityLevelSeekerState;
                    BoostSwitchMode = boostSwitchMode;
                    RadiatorType    = radiatorType;
                    CascadeAdjust   = cascadeAdjust;
                    break;
                }

                case Vallox.Variable.BasicHumidityLevel:
                {
                    WriteLine("Basic humidity level {0}%", value);
                    BasicHumidityLevel = value;
                    break;
                }

                case Vallox.Variable.HrcBypass:
                {
                    int temperature = Vallox.ConvertTemp(value);
                    WriteLine("HRC bypass {0}°", temperature);
                    HrcBypassThreshold = temperature;
                    break;
                }

                case Vallox.Variable.DcFanInputAdjustment:
                {
                    WriteLine("DC fan input adjustment {0}%", value);
                    DcFanInputAdjustment = value;
                    break;
                }

                case Vallox.Variable.DcFanOutputAdjustment:
                {
                    WriteLine("DC fan output adjustment {0}%", value);
                    DcFanOutputAdjustment = value;
                    break;
                }

                case Vallox.Variable.CellDefrosting:
                {
                    int temperature = Vallox.ConvertTemp(value);
                    WriteLine("Cell defrosting below temperature {0}°", temperature);
                    CellDefrostingThreshold = temperature;
                    break;
                }

                case Vallox.Variable.Co2SetPointUpper:
                {
                    WriteLine("CO2 set point upper {0}", value);
                    Co2SetPointUpper = value;
                    break;
                }

                case Vallox.Variable.Co2SetPointLower:
                {
                    WriteLine("CO2 set point lower {0}", value);
                    Co2SetPointLower = value;
                    break;
                }

                case Vallox.Variable.Program2:
                {
                    WriteLine("Program2 {0}", value);
                    Vallox.MaxSpeedLimitMode maxSpeedLimitMode;
                    Vallox.ConvertProgram2(value, out maxSpeedLimitMode);
                    MaxSpeedLimitMode = maxSpeedLimitMode;
                    break;
                }

                case Vallox.Variable.Unknown:
                {
                    WriteLine("Unkown at {0} {1}", DateTime.Now.ToShortTimeString(), value);
                    break;
                }

                case Vallox.Variable.Flags1:
                {
                    WriteLine("Flags1 {0}", value);
                    break;
                }

                case Vallox.Variable.Flags2:
                {
                    WriteLine("Flags2 {0}", value);
                    break;
                }

                case Vallox.Variable.Flags3:
                {
                    WriteLine("Flags3 {0}", value);
                    break;
                }

                case Vallox.Variable.Flags4:
                {
                    WriteLine("Flags4 {0}", value);
                    break;
                }

                case Vallox.Variable.Flags5:
                {
                    WriteLine("Flags5 {0}", value);
                    break;
                }

                case Vallox.Variable.Flags6:
                {
                    WriteLine("Flags6 {0}", value);
                    break;
                }

                case Vallox.Variable.IoPortFanSpeedRelays:
                {
                    WriteLine("IoPortFanSpeedRelays {0}", value);
                    break;
                }

                case Vallox.Variable.IoPortMultiPurpose1:
                {
                    WriteLine("IoPortMultiPurpose1 {0}", value);
                    break;
                }

                case Vallox.Variable.IoPortMultiPurpose2:
                {
                    WriteLine("IoPortMultiPurpose2 {0}", value);
                    break;
                }

                case Vallox.Variable.MachineInstalledC02Sensor:
                {
                    WriteLine("MachineInstalledC02Sensor {0}", value);
                    break;
                }

                case Vallox.Variable.PostHeatingOnCounter:
                {
                    WriteLine("PostHeatingOnCounter {0}", value);
                    break;
                }

                case Vallox.Variable.PostHeatingOffTime:
                {
                    WriteLine("PostHeatingOffTime {0}", value);
                    break;
                }

                case Vallox.Variable.PostHeatingTargetValue:
                {
                    WriteLine("PostHeatingTargetValue {0}", value);
                    break;
                }

                case Vallox.Variable.FirePlaceBoosterCounter:
                {
                    WriteLine("FirePlaceBoosterCounter {0}", value);
                    break;
                }

                case Vallox.Variable.LastErrorNumber:
                {
                    WriteLine("LastErrorNumber {0}", value);
                    break;
                }

                case Vallox.Variable.MaintenanceMonthCounter:
                {
                    WriteLine("MaintenanceMonthCounter {0}", value);
                    break;
                }

                case Vallox.Variable.SuspendBus:
                {
                    WriteLine("Suspend bus for C02 sensor cummunication at {0} {1}",
                              DateTime.Now.ToShortTimeString(), value);
                    break;
                }

                case Vallox.Variable.ResumeBus:
                {
                    WriteLine("Resume bus for all devices at {0} {1}", DateTime.Now.ToShortTimeString(), value);
                    break;
                }

                default:
                {
                    WriteLine("Unknown command {0:X02} {1}", command, value);
                    break;
                }
                }
            }
            else
            {
                if (command == 0)
                {
                    string variable = Vallox.ConvertVariable(value);
                    WriteLine("{0:X02} --> {1:X02}: get {2}", senderString, receiverString, variable);
                }
                else
                {
                    string variable = Vallox.ConvertVariable(command);
                    WriteLine("{0:X02} --> {1:X02}: set {2} = 0x{3:X02}", senderString, receiverString, variable, value);
                }
            }
        }