Skip to content

Commit 5cfb744

Browse files
committed
Changed 'grain' to 'portion'
1 parent ad9faf5 commit 5cfb744

16 files changed

Lines changed: 140 additions & 110 deletions

File tree

custom_components/petlibro/const.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def round(self, value: float, unit: _Unit):
129129
def convert_feed(
130130
self, value: float, from_unit: _Unit | None, to_unit: _Unit | None, rounded: bool = False
131131
):
132-
"""Convert PetLibro feed units. Use **None** for API 'grain' unit (1/12th of a cup)."""
132+
"""Convert PetLibro feed units. Use **None** for portion unit (1/12th of a cup)."""
133133
if value and from_unit != to_unit:
134134
if not {from_unit, to_unit}.issubset(VALID_UNIT_TYPES[APIKey.FEED_UNIT]):
135135
raise ValueError(f"Incompatible conversion: {from_unit} -> {to_unit}")

custom_components/petlibro/number.py

Lines changed: 85 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -133,28 +133,34 @@ def extra_state_attributes(self):
133133
translation_key="manual_feed_quantity",
134134
name="Manual Feed Quantity",
135135
icon="mdi:scale",
136-
native_unit_of_measurement_fn=lambda member: member.feedUnitType.symbol,
137-
native_max_value_fn=lambda m: Unit.round(m.feedUnitType.factor * 12, m.feedUnitType),
138-
native_min_value_fn=lambda member: round(member.feedUnitType.factor, 16),
139-
native_step_fn=lambda member: member.feedUnitType.factor,
140-
method=lambda d, m, v: d.set_manual_feed_quantity(Unit.convert_feed(v, m.feedUnitType, None)),
141-
value_fn=lambda d, m: Unit.convert_feed(d.manual_feed_quantity, None, m.feedUnitType, True),
142-
extra_state_attributes_fn=lambda d, m: {"grain": d.manual_feed_quantity}|{
136+
native_unit_of_measurement_fn=lambda m: m.feedUnitType.symbol
137+
if m.feedUnitType != Unit.CUPS else "/12 cup",
138+
native_max_value_fn=lambda m: Unit.round(m.feedUnitType.factor * 12, m.feedUnitType)
139+
if m.feedUnitType != Unit.CUPS else 12,
140+
native_min_value_fn=lambda m: round(m.feedUnitType.factor, 16)
141+
if m.feedUnitType != Unit.CUPS else 1,
142+
native_step_fn=lambda m: m.feedUnitType.factor
143+
if m.feedUnitType != Unit.CUPS else 1,
144+
method=lambda d, m, v: d.set_manual_feed_quantity(Unit.convert_feed(
145+
v, m.feedUnitType if m.feedUnitType != Unit.CUPS else None, None)),
146+
value_fn=lambda d, m: Unit.convert_feed(d.manual_feed_quantity, None, m.feedUnitType, True)
147+
if m.feedUnitType != Unit.CUPS else d.manual_feed_quantity,
148+
extra_state_attributes_fn=lambda d, m: {"portion": d.manual_feed_quantity}|{
143149
unit.symbol: Unit.convert_feed(d.manual_feed_quantity, None, unit, True)
144150
for unit in VALID_UNIT_TYPES[API.FEED_UNIT] if unit
145151
},
146152
),
147153
PetLibroNumberEntityDescription[AirSmartFeeder](
148-
key="manual_feed_quantity_grain",
149-
translation_key="manual_feed_quantity_grain",
150-
name="Manual Feed Quantity (Grain)",
154+
key="manual_feed_quantity_portion",
155+
translation_key="manual_feed_quantity_portion",
156+
name="Manual Feed Quantity (Portion)",
151157
icon="mdi:scale",
152158
device_class=NumberDeviceClass.POWER_FACTOR,
153159
native_max_value=12,
154160
native_min_value=1,
155161
method=lambda device, m, value: device.set_manual_feed_quantity(value),
156162
value_fn=lambda device, m: device.manual_feed_quantity,
157-
extra_state_attributes_fn=lambda d, m: {"grain": d.manual_feed_quantity}|{
163+
extra_state_attributes_fn=lambda d, m: {"portion": d.manual_feed_quantity}|{
158164
unit.symbol: Unit.convert_feed(d.manual_feed_quantity, None, unit, True)
159165
for unit in VALID_UNIT_TYPES[API.FEED_UNIT] if unit
160166
},
@@ -166,28 +172,34 @@ def extra_state_attributes(self):
166172
translation_key="manual_feed_quantity",
167173
name="Manual Feed Quantity",
168174
icon="mdi:scale",
169-
native_unit_of_measurement_fn=lambda member: member.feedUnitType.symbol,
170-
native_max_value_fn=lambda m: Unit.round(m.feedUnitType.factor * 12, m.feedUnitType),
171-
native_min_value_fn=lambda member: round(member.feedUnitType.factor, 16),
172-
native_step_fn=lambda member: member.feedUnitType.factor,
173-
method=lambda d, m, v: d.set_manual_feed_quantity(Unit.convert_feed(v, m.feedUnitType, None)),
174-
value_fn=lambda d, m: Unit.convert_feed(d.manual_feed_quantity, None, m.feedUnitType, True),
175-
extra_state_attributes_fn=lambda d, m: {"grain": d.manual_feed_quantity}|{
175+
native_unit_of_measurement_fn=lambda m: m.feedUnitType.symbol
176+
if m.feedUnitType != Unit.CUPS else "/12 cup",
177+
native_max_value_fn=lambda m: Unit.round(m.feedUnitType.factor * 12, m.feedUnitType)
178+
if m.feedUnitType != Unit.CUPS else 12,
179+
native_min_value_fn=lambda m: round(m.feedUnitType.factor, 16)
180+
if m.feedUnitType != Unit.CUPS else 1,
181+
native_step_fn=lambda m: m.feedUnitType.factor
182+
if m.feedUnitType != Unit.CUPS else 1,
183+
method=lambda d, m, v: d.set_manual_feed_quantity(Unit.convert_feed(
184+
v, m.feedUnitType if m.feedUnitType != Unit.CUPS else None, None)),
185+
value_fn=lambda d, m: Unit.convert_feed(d.manual_feed_quantity, None, m.feedUnitType, True)
186+
if m.feedUnitType != Unit.CUPS else d.manual_feed_quantity,
187+
extra_state_attributes_fn=lambda d, m: {"portion": d.manual_feed_quantity}|{
176188
unit.symbol: Unit.convert_feed(d.manual_feed_quantity, None, unit, True)
177189
for unit in VALID_UNIT_TYPES[API.FEED_UNIT] if unit
178190
},
179191
),
180192
PetLibroNumberEntityDescription[GranarySmartFeeder](
181-
key="manual_feed_quantity_grain",
182-
translation_key="manual_feed_quantity_grain",
183-
name="Manual Feed Quantity (Grain)",
193+
key="manual_feed_quantity_portion",
194+
translation_key="manual_feed_quantity_portion",
195+
name="Manual Feed Quantity (Portion)",
184196
icon="mdi:scale",
185197
device_class=NumberDeviceClass.POWER_FACTOR,
186198
native_max_value=12,
187199
native_min_value=1,
188200
method=lambda device, m, value: device.set_manual_feed_quantity(value),
189201
value_fn=lambda device, m: device.manual_feed_quantity,
190-
extra_state_attributes_fn=lambda d, m: {"grain": d.manual_feed_quantity}|{
202+
extra_state_attributes_fn=lambda d, m: {"portion": d.manual_feed_quantity}|{
191203
unit.symbol: Unit.convert_feed(d.manual_feed_quantity, None, unit, True)
192204
for unit in VALID_UNIT_TYPES[API.FEED_UNIT] if unit
193205
},
@@ -212,28 +224,34 @@ def extra_state_attributes(self):
212224
translation_key="manual_feed_quantity",
213225
name="Manual Feed Quantity",
214226
icon="mdi:scale",
215-
native_unit_of_measurement_fn=lambda member: member.feedUnitType.symbol,
216-
native_max_value_fn=lambda m: Unit.round(m.feedUnitType.factor * 12, m.feedUnitType),
217-
native_min_value_fn=lambda member: round(member.feedUnitType.factor, 16),
218-
native_step_fn=lambda member: member.feedUnitType.factor,
219-
method=lambda d, m, v: d.set_manual_feed_quantity(Unit.convert_feed(v, m.feedUnitType, None)),
220-
value_fn=lambda d, m: Unit.convert_feed(d.manual_feed_quantity, None, m.feedUnitType, True),
221-
extra_state_attributes_fn=lambda d, m: {"grain": d.manual_feed_quantity}|{
227+
native_unit_of_measurement_fn=lambda m: m.feedUnitType.symbol
228+
if m.feedUnitType != Unit.CUPS else "/12 cup",
229+
native_max_value_fn=lambda m: Unit.round(m.feedUnitType.factor * 12, m.feedUnitType)
230+
if m.feedUnitType != Unit.CUPS else 12,
231+
native_min_value_fn=lambda m: round(m.feedUnitType.factor, 16)
232+
if m.feedUnitType != Unit.CUPS else 1,
233+
native_step_fn=lambda m: m.feedUnitType.factor
234+
if m.feedUnitType != Unit.CUPS else 1,
235+
method=lambda d, m, v: d.set_manual_feed_quantity(Unit.convert_feed(
236+
v, m.feedUnitType if m.feedUnitType != Unit.CUPS else None, None)),
237+
value_fn=lambda d, m: Unit.convert_feed(d.manual_feed_quantity, None, m.feedUnitType, True)
238+
if m.feedUnitType != Unit.CUPS else d.manual_feed_quantity,
239+
extra_state_attributes_fn=lambda d, m: {"portion": d.manual_feed_quantity}|{
222240
unit.symbol: Unit.convert_feed(d.manual_feed_quantity, None, unit, True)
223241
for unit in VALID_UNIT_TYPES[API.FEED_UNIT] if unit
224242
},
225243
),
226244
PetLibroNumberEntityDescription[GranarySmartCameraFeeder](
227-
key="manual_feed_quantity_grain",
228-
translation_key="manual_feed_quantity_grain",
229-
name="Manual Feed Quantity (Grain)",
245+
key="manual_feed_quantity_portion",
246+
translation_key="manual_feed_quantity_portion",
247+
name="Manual Feed Quantity (Portion)",
230248
icon="mdi:scale",
231249
device_class=NumberDeviceClass.POWER_FACTOR,
232250
native_max_value=12,
233251
native_min_value=1,
234252
method=lambda device, m, value: device.set_manual_feed_quantity(value),
235253
value_fn=lambda device, m: device.manual_feed_quantity,
236-
extra_state_attributes_fn=lambda d, m: {"grain": d.manual_feed_quantity}|{
254+
extra_state_attributes_fn=lambda d, m: {"portion": d.manual_feed_quantity}|{
237255
unit.symbol: Unit.convert_feed(d.manual_feed_quantity, None, unit, True)
238256
for unit in VALID_UNIT_TYPES[API.FEED_UNIT] if unit
239257
},
@@ -282,28 +300,34 @@ def extra_state_attributes(self):
282300
translation_key="manual_feed_quantity",
283301
name="Manual Feed Quantity",
284302
icon="mdi:scale",
285-
native_unit_of_measurement_fn=lambda member: member.feedUnitType.symbol,
286-
native_max_value_fn=lambda m: Unit.round(m.feedUnitType.factor * 12, m.feedUnitType),
287-
native_min_value_fn=lambda member: round(member.feedUnitType.factor, 16),
288-
native_step_fn=lambda member: member.feedUnitType.factor,
289-
method=lambda d, m, v: d.set_manual_feed_quantity(Unit.convert_feed(v, m.feedUnitType, None)),
290-
value_fn=lambda d, m: Unit.convert_feed(d.manual_feed_quantity, None, m.feedUnitType, True),
291-
extra_state_attributes_fn=lambda d, m: {"grain": d.manual_feed_quantity}|{
303+
native_unit_of_measurement_fn=lambda m: m.feedUnitType.symbol
304+
if m.feedUnitType != Unit.CUPS else "/12 cup",
305+
native_max_value_fn=lambda m: Unit.round(m.feedUnitType.factor * 12, m.feedUnitType)
306+
if m.feedUnitType != Unit.CUPS else 12,
307+
native_min_value_fn=lambda m: round(m.feedUnitType.factor, 16)
308+
if m.feedUnitType != Unit.CUPS else 1,
309+
native_step_fn=lambda m: m.feedUnitType.factor
310+
if m.feedUnitType != Unit.CUPS else 1,
311+
method=lambda d, m, v: d.set_manual_feed_quantity(Unit.convert_feed(
312+
v, m.feedUnitType if m.feedUnitType != Unit.CUPS else None, None)),
313+
value_fn=lambda d, m: Unit.convert_feed(d.manual_feed_quantity, None, m.feedUnitType, True)
314+
if m.feedUnitType != Unit.CUPS else d.manual_feed_quantity,
315+
extra_state_attributes_fn=lambda d, m: {"portion": d.manual_feed_quantity}|{
292316
unit.symbol: Unit.convert_feed(d.manual_feed_quantity, None, unit, True)
293317
for unit in VALID_UNIT_TYPES[API.FEED_UNIT] if unit
294318
},
295319
),
296320
PetLibroNumberEntityDescription[OneRFIDSmartFeeder](
297-
key="manual_feed_quantity_grain",
298-
translation_key="manual_feed_quantity_grain",
299-
name="Manual Feed Quantity (Grain)",
321+
key="manual_feed_quantity_portion",
322+
translation_key="manual_feed_quantity_portion",
323+
name="Manual Feed Quantity (Portion)",
300324
icon="mdi:scale",
301325
device_class=NumberDeviceClass.POWER_FACTOR,
302326
native_max_value=12,
303327
native_min_value=1,
304328
method=lambda device, m, value: device.set_manual_feed_quantity(value),
305329
value_fn=lambda device, m: device.manual_feed_quantity,
306-
extra_state_attributes_fn=lambda d, m: {"grain": d.manual_feed_quantity}|{
330+
extra_state_attributes_fn=lambda d, m: {"portion": d.manual_feed_quantity}|{
307331
unit.symbol: Unit.convert_feed(d.manual_feed_quantity, None, unit, True)
308332
for unit in VALID_UNIT_TYPES[API.FEED_UNIT] if unit
309333
},
@@ -316,28 +340,34 @@ def extra_state_attributes(self):
316340
translation_key="manual_feed_quantity",
317341
name="Manual Feed Quantity",
318342
icon="mdi:scale",
319-
native_unit_of_measurement_fn=lambda member: member.feedUnitType.symbol,
320-
native_max_value_fn=lambda m: Unit.round(m.feedUnitType.factor * 12, m.feedUnitType),
321-
native_min_value_fn=lambda member: round(member.feedUnitType.factor, 16),
322-
native_step_fn=lambda member: member.feedUnitType.factor,
323-
method=lambda d, m, v: d.set_manual_feed_quantity(Unit.convert_feed(v, m.feedUnitType, None)),
324-
value_fn=lambda d, m: Unit.convert_feed(d.manual_feed_quantity, None, m.feedUnitType, True),
325-
extra_state_attributes_fn=lambda d, m: {"grain": d.manual_feed_quantity}|{
343+
native_unit_of_measurement_fn=lambda m: m.feedUnitType.symbol
344+
if m.feedUnitType != Unit.CUPS else "/12 cup",
345+
native_max_value_fn=lambda m: Unit.round(m.feedUnitType.factor * 12, m.feedUnitType)
346+
if m.feedUnitType != Unit.CUPS else 12,
347+
native_min_value_fn=lambda m: round(m.feedUnitType.factor, 16)
348+
if m.feedUnitType != Unit.CUPS else 1,
349+
native_step_fn=lambda m: m.feedUnitType.factor
350+
if m.feedUnitType != Unit.CUPS else 1,
351+
method=lambda d, m, v: d.set_manual_feed_quantity(Unit.convert_feed(
352+
v, m.feedUnitType if m.feedUnitType != Unit.CUPS else None, None)),
353+
value_fn=lambda d, m: Unit.convert_feed(d.manual_feed_quantity, None, m.feedUnitType, True)
354+
if m.feedUnitType != Unit.CUPS else d.manual_feed_quantity,
355+
extra_state_attributes_fn=lambda d, m: {"portion": d.manual_feed_quantity}|{
326356
unit.symbol: Unit.convert_feed(d.manual_feed_quantity, None, unit, True)
327357
for unit in VALID_UNIT_TYPES[API.FEED_UNIT] if unit
328358
},
329359
),
330360
PetLibroNumberEntityDescription[SpaceSmartFeeder](
331-
key="manual_feed_quantity_grain",
332-
translation_key="manual_feed_quantity_grain",
333-
name="Manual Feed Quantity (Grain)",
361+
key="manual_feed_quantity_portion",
362+
translation_key="manual_feed_quantity_portion",
363+
name="Manual Feed Quantity (Portion)",
334364
icon="mdi:scale",
335365
device_class=NumberDeviceClass.POWER_FACTOR,
336366
native_max_value=12,
337367
native_min_value=1,
338368
method=lambda device, m, value: device.set_manual_feed_quantity(value),
339369
value_fn=lambda device, m: device.manual_feed_quantity,
340-
extra_state_attributes_fn=lambda d, m: {"grain": d.manual_feed_quantity}|{
370+
extra_state_attributes_fn=lambda d, m: {"portion": d.manual_feed_quantity}|{
341371
unit.symbol: Unit.convert_feed(d.manual_feed_quantity, None, unit, True)
342372
for unit in VALID_UNIT_TYPES[API.FEED_UNIT] if unit
343373
},

0 commit comments

Comments
 (0)