This model does a good job of capturing key elements in the domain, but it suffers from a common error: the overuse of classes and sub-classes when instances would do a better job.
Let's look at Measurement. I infer that you mean not the taking of the measurement (an action) but the aspect to be measured, such as the status of the Fire Alarm. I would rename Measurement to MeasurementType, then represent the sub-classes of Measurement as instances of MeasurementType.
:_MeasurementType_FireAlarmReading a :MeasurementType, owl:NamedIndividual .
:_MeasurementType_GasReading a :MeasurementType, owl:NamedIndividual .
etc.
MeasurementType is a category class, and its instances define specific categories into which the measurements are placed.
The actual measurement is an event, with a start and end time. Each instance gets related to the type of measurement through a 'isCategorizedBy' property.
:_Measurement_gas_reading_2023-04-30T13-18-33 a :Measurement ;
:startDateTime '2023-04-30T13:18:33'^^xsd:dateTime ;
:endDateTime '2023-04-30T13:18:39'^^xsd:dateTime ;
:isCategorizedBy :_MeasurementType_GasReading ;
:hasMagnitude [ reference to a magnitude object that handles the numeric value and an appropriate unit of measure]
.
This pattern makes it easy to add other kinds of measurements later without introducing new sub-classes. You just add a new instance of MeasurementType, e.g.
:_MeasurementType_Radon_Level a :MeasurementType, owl:NamedIndividual .
Finally, I suggest you look at basing your model on the 'gist' upper ontology which provides many useful base classes and properties that you can extend to model your domain. https://www.semanticarts.com/gist/