analogsensor default name, validators

This commit is contained in:
MichaelDvP
2024-07-15 08:10:21 +02:00
parent 3d2912b998
commit 4c6d396d70
4 changed files with 45 additions and 14 deletions

View File

@@ -465,7 +465,7 @@ const Sensors: FC = () => {
onClose={onTemperatureDialogClose} onClose={onTemperatureDialogClose}
onSave={onTemperatureDialogSave} onSave={onTemperatureDialogSave}
selectedItem={selectedTemperatureSensor} selectedItem={selectedTemperatureSensor}
validator={temperatureSensorItemValidation()} validator={temperatureSensorItemValidation(sensorData.ts)}
/> />
)} )}
{sensorData?.analog_enabled === true && ( {sensorData?.analog_enabled === true && (

View File

@@ -7,7 +7,8 @@ import type {
DeviceValue, DeviceValue,
EntityItem, EntityItem,
ScheduleItem, ScheduleItem,
Settings Settings,
TemperatureSensor
} from './types'; } from './types';
export const GPIO_VALIDATOR = { export const GPIO_VALIDATOR = {
@@ -289,7 +290,6 @@ export const uniqueNameValidator = (schedule: ScheduleItem[], o_name?: string) =
if ( if (
name !== '' && name !== '' &&
(o_name === undefined || o_name !== name) && (o_name === undefined || o_name !== name) &&
name !== '' &&
schedule.find((si) => si.name === name) schedule.find((si) => si.name === name)
) { ) {
callback('Name already in use'); callback('Name already in use');
@@ -307,8 +307,8 @@ export const schedulerItemValidation = (
name: [ name: [
{ {
type: 'string', type: 'string',
pattern: /^[a-zA-Z0-9_\\.]{0,15}$/, pattern: /^[a-zA-Z0-9_\\.]{0,19}$/,
message: "Must be <15 characters: alpha numeric, '_' or '.'" message: "Must be <20 characters: alpha numeric, '_' or '.'"
}, },
...[uniqueNameValidator(schedule, scheduleItem.o_name)] ...[uniqueNameValidator(schedule, scheduleItem.o_name)]
], ],
@@ -349,8 +349,8 @@ export const entityItemValidation = (entity: EntityItem[], entityItem: EntityIte
{ required: true, message: 'Name is required' }, { required: true, message: 'Name is required' },
{ {
type: 'string', type: 'string',
pattern: /^[a-zA-Z0-9_\\.]{1,15}$/, pattern: /^[a-zA-Z0-9_\\.]{1,19}$/,
message: "Must be <15 characters: alpha numeric, '_' or '.'" message: "Must be <20 characters: alpha numeric, '_' or '.'"
}, },
...[uniqueCustomNameValidator(entity, entityItem.o_name)] ...[uniqueCustomNameValidator(entity, entityItem.o_name)]
], ],
@@ -388,14 +388,25 @@ export const entityItemValidation = (entity: EntityItem[], entityItem: EntityIte
] ]
}); });
export const temperatureSensorItemValidation = () => export const uniqueTemperatureNameValidator = (sensors: TemperatureSensor[]) => ({
validator(rule: InternalRuleItem, n: string, callback: (error?: string) => void) {
if (n !== '' && sensors.find((ts) => ts.n === n)) {
callback('Name already in use');
} else {
callback();
}
}
});
export const temperatureSensorItemValidation = (sensors: TemperatureSensor[]) =>
new Schema({ new Schema({
n: [ n: [
{ {
type: 'string', type: 'string',
pattern: /^[a-zA-Z0-9_\\.]{0,17}$/, pattern: /^[a-zA-Z0-9_\\.]{0,19}$/,
message: "Must be <18 characters: alpha numeric, '_' or '.'" message: "Must be <20 characters: alpha numeric, '_' or '.'"
} },
...[uniqueTemperatureNameValidator(sensors)]
] ]
}); });
@@ -413,13 +424,30 @@ export const isGPIOUniqueValidator = (sensors: AnalogSensor[]) => ({
} }
}); });
export const uniqueAnalogNameValidator = (sensors: AnalogSensor[]) => ({
validator(rule: InternalRuleItem, n: string, callback: (error?: string) => void) {
if (n !== '' && sensors.find((as) => as.n === n)) {
callback('Name already in use');
} else {
callback();
}
}
});
export const analogSensorItemValidation = ( export const analogSensorItemValidation = (
sensors: AnalogSensor[], sensors: AnalogSensor[],
creating: boolean, creating: boolean,
platform: string platform: string
) => ) =>
new Schema({ new Schema({
n: [{ required: true, message: 'Name is required' }], n: [
{
type: 'string',
pattern: /^[a-zA-Z0-9_\\.]{0,19}$/,
message: "Must be <20 characters: alpha numeric, '_' or '.'"
},
...[uniqueAnalogNameValidator(sensors)]
],
g: [ g: [
{ required: true, message: 'GPIO is required' }, { required: true, message: 'GPIO is required' },
platform === 'ESP32-S3' platform === 'ESP32-S3'

View File

@@ -759,8 +759,8 @@ AnalogSensor::Sensor::Sensor(const uint8_t gpio, const std::string & name, const
// returns name of the analog sensor or creates one if its empty // returns name of the analog sensor or creates one if its empty
std::string AnalogSensor::Sensor::name() const { std::string AnalogSensor::Sensor::name() const {
if (name_.empty()) { if (name_.empty()) {
char name[50]; char name[20];
snprintf(name, sizeof(name), "Analog Sensor GPIO %02d", gpio_); snprintf(name, sizeof(name), "%s_%02d", FL_(AnalogTypeName)[type_], gpio_);
return name; return name;
} }
return name_; return name_;

View File

@@ -27,6 +27,9 @@
namespace emsesp { namespace emsesp {
// names, same order as AnalogType
MAKE_ENUM_FIXED(AnalogTypeName, "disabled", "dig_in", "counter", "adc", "timer", "rate", "pwm0", "pwm1", "pwm2")
class AnalogSensor { class AnalogSensor {
public: public:
class Sensor { class Sensor {