Esempio n. 1
0
        public double NowCast25, NowCast10;                               // Just need one parameter, after calculation
                                                                          // it is send by the webserver and can be forgotten.

        public EmulateAirLink(Support s)
        {
            Sup = s;
            Sup.LogDebugMessage($"AirLink Emulator: Constructor and started");

            DoCalibrated = Sup.GetSensorsIniValue("General", "UseCalibration", "True").Equals("true", StringComparison.OrdinalIgnoreCase);
        }
Esempio n. 2
0
            internal DefinitionSerialPort(Support s, string Name)
            {
                Sup = s;

                Sup.LogDebugMessage($"DefinitionSerialPort Constructor...");

                try
                {
                    SerialPortUsed     = Sup.GetSensorsIniValue("PortDefinitions", $"{Name}_SerialPort", "/dev/ttyS0");
                    SerialBaudRate     = Convert.ToInt32(Sup.GetSensorsIniValue("PortDefinitions", $"{Name}_SerialBaudrate", "9600"));
                    SerialParity       = (Parity)Enum.Parse(typeof(Parity), Sup.GetSensorsIniValue("PortDefinitions", $"{Name}_SerialParity", "None"), true);
                    SerialDataBits     = Convert.ToInt32(Sup.GetSensorsIniValue("PortDefinitions", $"{Name}_SerialDataBits", "8"));
                    SerialNrOfStopBits = (StopBits)Enum.Parse(typeof(StopBits), Sup.GetSensorsIniValue("PortDefinitions", $"{Name}_SerialStopBits", "One"), true);
                }
                catch (Exception e) when(e is ArgumentException || e is ArgumentNullException || e is OverflowException || e is FormatException)
                {
                    Sup.LogTraceErrorMessage($"Serial: Exception on Serial Port definitions in Inifile : {e.Message}");
                }
            }
Esempio n. 3
0
        void Init()
        {
            bool NoSerialDevice = false;
            bool NoI2cDevice    = false;

            // Setup logging and Ini
            Sup = new Support();

            Sup.LogDebugMessage(message: "Init() : Start");

            string AirLinkPMDevice = "";
            string AirLinkTHDevice = "";

            Console.CancelKeyPress += new ConsoleCancelEventHandler(CtrlCHandler);
            CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;

            // Setup tracing
            Trace.Listeners.Add(new TextWriterTraceListener($"log/{DateTime.Now.ToString( "yyMMddHHmm", CultureInfo.InvariantCulture )}sensors.log"));
            Trace.AutoFlush = true;
            CUSensorsSwitch = new TraceSwitch("CUSensorsSwitch", "Tracing switch for CUSensors")
            {
                Level = TraceLevel.Verbose
            };

            Sup.LogDebugMessage($"Initial {CUSensorsSwitch} => Error: {CUSensorsSwitch.TraceError}, Warning: {CUSensorsSwitch.TraceWarning}, Info: {CUSensorsSwitch.TraceInfo}, Verbose: {CUSensorsSwitch.TraceVerbose}, ");

            string thisTrace = Sup.GetSensorsIniValue("General", "TraceInfo", "Warning");     // Verbose, Information, Warning, Error, Off

            // Now set the Trace level to the wanted value
            switch (thisTrace.ToLower())
            {
            case "error": CUSensorsSwitch.Level = TraceLevel.Error; break;

            case "warning": CUSensorsSwitch.Level = TraceLevel.Warning; break;

            case "info": CUSensorsSwitch.Level = TraceLevel.Info; break;

            case "verbose": CUSensorsSwitch.Level = TraceLevel.Verbose; break;

            default: CUSensorsSwitch.Level = TraceLevel.Off; break;
            }

            Sup.LogDebugMessage($"According to Inifile {CUSensorsSwitch} => Error: {CUSensorsSwitch.TraceError}, Warning: {CUSensorsSwitch.TraceWarning}, Info: {CUSensorsSwitch.TraceInfo}, Verbose: {CUSensorsSwitch.TraceVerbose}, ");

            // Determine which sensor has to be for the AirLink:
            AirLinkEmulation = Sup.GetSensorsIniValue("General", "AirLinkEmulation", "false").Equals("true", StringComparison.OrdinalIgnoreCase);
            AirLinkPMDevice  = Sup.GetSensorsIniValue("AirLinkDevices", $"PMdevice", "");
            AirLinkTHDevice  = Sup.GetSensorsIniValue("AirLinkDevices", $"THdevice", "");

            // Check if we want AirLinkEmulation and do accordingly
            //
            if (AirLinkEmulation)
            {
                Sup.LogDebugMessage(message: "Init : Creating the AirLink Emulator and the Webserver");
                thisEmulator  = new EmulateAirLink(Sup);
                thisWebserver = new WebServer(Sup, thisEmulator);
            }

            // Do the Serial devices
            Sup.LogDebugMessage(message: "Init : Creating the Serial devices");
            for (int i = 0; i < MaxNrSerialSensors; i++)
            {
                string DeviceName = Sup.GetSensorsIniValue("SerialDevices", $"Serial{i}", "");
                thisSerial[i] = new Serial(Sup, DeviceName);
                if (AirLinkEmulation && $"Serial{i}" == AirLinkPMDevice)
                {
                    Sup.LogDebugMessage(message: $"Init : Serial{i} is AirLink device");
                    thisSerial[i].IsAirLinkSensor = true;
                    thisEmulator.SetSerialDevice(thisSerial[i]);
                }

                if (i == 0 && string.IsNullOrEmpty(DeviceName))
                {
                    NoSerialDevice = true;
                    break;
                }
            }// Serial devices

            // Do the i2c devices
            // Define the driver on this level so we only have one driver in the system on which we open all connections
            Sup.LogTraceInfoMessage(message: "Init : Creating the I2C driver");
            ThisDriver = new I2cDriver(ProcessorPin.Gpio02, ProcessorPin.Gpio03, false);
            Sup.LogTraceInfoMessage(message: $"Init : created the I2cDriver {ThisDriver}");
            I2C.DetectSensors(Sup);

            for (int i = 0; i < MaxNrI2cSensors; i++)
            {
                string DeviceName = Sup.GetSensorsIniValue("I2CDevices", $"I2C{i}", "");
                thisI2C[i] = new I2C(Sup, DeviceName);
                if (AirLinkEmulation && $"I2C{i}" == AirLinkTHDevice)
                {
                    Sup.LogDebugMessage(message: $"Init : I2C{i} is AirLink device");
                    thisI2C[i].IsAirLinkSensor = true;
                    thisEmulator.SetI2cDevice(thisI2C[i]);
                }

                if (i == 0 && string.IsNullOrEmpty(DeviceName))
                {
                    NoI2cDevice = true;
                    break;
                }
            }// i2c devices

            if (AirLinkEmulation && (NoI2cDevice || NoSerialDevice))
            {
                Sup.LogDebugMessage("Init: At leat one serial and one I2c device is required for PM and T/H in AirLink emulation");
                Environment.Exit(0);
            }

            if (AirLinkEmulation)
            {
                Sup.LogDebugMessage(message: $"Init : Starting the webserver");
                thisWebserver.Start();

                // Do the SensorCommunity Init
                DoSensorCommunity = Sup.GetSensorsIniValue("General", "SensorCommunity", "false").Equals("true", StringComparison.OrdinalIgnoreCase);
                Sup.LogDebugMessage(message: $"Init : Starting SensorCommunity: SensorCommunity is {DoSensorCommunity}");

                if (DoSensorCommunity)
                {
                    thisSensorCommunity = new SensorCommunity(Sup);
                }
            }
        } // Init