28
28
LIGHT_SCHEMA = vol .Schema ({
29
29
vol .Required (CONF_NAME ): cv .string ,
30
30
vol .Required (CONF_STATE_ADDRESS ): ADDRESS_SCHEMA ,
31
- vol .Required (CONF_SET_ADDRESS ): ADDRESS_SCHEMA
31
+ vol .Optional (CONF_SET_ADDRESS ): ADDRESS_SCHEMA
32
32
})
33
33
34
34
PLATFORM_SCHEMA = PLATFORM_SCHEMA .extend ({
@@ -64,18 +64,21 @@ def setup_platform(
64
64
state_byte = device [CONF_STATE_ADDRESS ][CONF_BYTE ]
65
65
state_bit = device [CONF_STATE_ADDRESS ][CONF_BIT ]
66
66
67
- set_byte = device [CONF_SET_ADDRESS ][CONF_BYTE ]
68
- set_bit = device [CONF_SET_ADDRESS ][CONF_BIT ]
67
+ if device .get (CONF_SET_ADDRESS ):
68
+ set_byte = device [CONF_SET_ADDRESS ][CONF_BYTE ]
69
+ set_bit = device [CONF_SET_ADDRESS ][CONF_BIT ]
69
70
70
- lamp = SimaticLight (client , name , (state_byte , state_bit ), (set_byte , set_bit ))
71
+ lamp = SimaticLight (client , name , (state_byte , state_bit ), (set_byte , set_bit ))
72
+ else :
73
+ lamp = SimaticLight (client , name , (state_byte , state_bit ), None )
71
74
lamps .append (lamp )
72
75
73
76
add_entities (lamps )
74
77
75
78
76
79
class SimaticLight (LightEntity ):
77
80
78
- def __init__ (self , client : snap7 .client .Client , name : str , state_address : tuple [int , int ], set_address : tuple [int , int ]) -> None :
81
+ def __init__ (self , client : snap7 .client .Client , name : str , state_address : tuple [int , int ], set_address : tuple [int , int ] | None ) -> None :
79
82
self ._client = client
80
83
self ._state_address = state_address
81
84
self ._set_address = set_address
@@ -92,19 +95,24 @@ def is_on(self) -> bool | None:
92
95
93
96
def turn_on (self , ** kwargs : Any ) -> None :
94
97
_LOGGER .debug (f"turn on lamp { self ._name } " )
98
+ self .set_state (1 )
95
99
96
100
def turn_off (self , ** kwargs : Any ) -> None :
97
101
_LOGGER .debug (f"turn off lamp { self ._name } " )
102
+ self .set_state (0 )
98
103
99
104
def set_state (self , value : int ):
105
+ if not self ._set_address :
106
+ _LOGGER .debug (f"Not set configured for lamp { self ._name } " )
107
+
100
108
byte , bit = self ._set_address
101
109
res = self ._client .db_read (10 , byte , 1 )[0 ]
102
110
set_v = (value << bit )
103
111
set_byte = bytearray ([set_v ])
104
112
self ._client .db_write (10 , byte , set_byte )
105
113
106
114
def update (self ) -> None :
107
- _LOGGER .error (f"Updating State for lamp { self ._name } " )
115
+ _LOGGER .debug (f"Updating State for lamp { self ._name } " )
108
116
byte , bit = self ._state_address
109
117
110
118
res = self ._client .db_read (10 , byte , 1 )[0 ]
0 commit comments