@@ -267,13 +267,59 @@ await _controller.SetPilotWireSetpointModeAsync(endpoint,
267
267
await _controller . DispatchBasicScenarioAsync ( endpoint ) ;
268
268
break ;
269
269
270
+ case "down" when endpoint . HasCapability ( OpenNettyCapabilities . StopUpDownScenario ) :
271
+ await _controller . DispatchStopUpDownScenarioAsync ( endpoint , OpenNettyModels . Automation . ShutterState . Closing ) ;
272
+ break ;
273
+
270
274
case "on" when endpoint . HasCapability ( OpenNettyCapabilities . OnOffScenario ) :
271
275
await _controller . DispatchOnOffScenarioAsync ( endpoint , OpenNettyModels . Lighting . SwitchState . On ) ;
272
276
break ;
273
277
274
278
case "off" when endpoint . HasCapability ( OpenNettyCapabilities . OnOffScenario ) :
275
279
await _controller . DispatchOnOffScenarioAsync ( endpoint , OpenNettyModels . Lighting . SwitchState . Off ) ;
276
280
break ;
281
+
282
+ case "stop" when endpoint . HasCapability ( OpenNettyCapabilities . StopUpDownScenario ) :
283
+ await _controller . DispatchStopUpDownScenarioAsync ( endpoint , OpenNettyModels . Automation . ShutterState . Stopped ) ;
284
+ break ;
285
+
286
+ case "up" when endpoint . HasCapability ( OpenNettyCapabilities . StopUpDownScenario ) :
287
+ await _controller . DispatchStopUpDownScenarioAsync ( endpoint , OpenNettyModels . Automation . ShutterState . Opening ) ;
288
+ break ;
289
+ }
290
+ break ;
291
+
292
+ case OpenNettyMqttAttributes . ShutterPosition when operation is OpenNettyMqttOperation . Get :
293
+ _ = await _controller . EnumerateShutterPositionsAsync ( endpoint ) . ToListAsync ( ) ;
294
+ break ;
295
+
296
+ case OpenNettyMqttAttributes . ShutterPosition when operation is OpenNettyMqttOperation . Set :
297
+ if ( ! ushort . TryParse ( message . PayloadSegment , CultureInfo . InvariantCulture , out var position ) )
298
+ {
299
+ throw new InvalidDataException ( SR . GetResourceString ( SR . ID0075 ) ) ;
300
+ }
301
+
302
+ await _controller . SetShutterPositionAsync ( endpoint , position ) ;
303
+ break ;
304
+
305
+ case OpenNettyMqttAttributes . ShutterState when operation is OpenNettyMqttOperation . Get :
306
+ _ = await _controller . EnumerateShutterStatesAsync ( endpoint ) . ToListAsync ( ) ;
307
+ break ;
308
+
309
+ case OpenNettyMqttAttributes . ShutterState when operation is OpenNettyMqttOperation . Set :
310
+ switch ( message . ConvertPayloadToString ( ) ? . ToLowerInvariant ( ) )
311
+ {
312
+ case "close" :
313
+ await _controller . MoveShutterUpAsync ( endpoint ) ;
314
+ break ;
315
+
316
+ case "open" :
317
+ await _controller . MoveShutterDownAsync ( endpoint ) ;
318
+ break ;
319
+
320
+ case "stop" :
321
+ await _controller . StopShutterAsync ( endpoint ) ;
322
+ break ;
277
323
}
278
324
break ;
279
325
@@ -488,6 +534,46 @@ orderby name
488
534
components . Add ( $ "entity{ components . Count . ToString ( CultureInfo . InvariantCulture ) } ", component ) ;
489
535
break ;
490
536
}
537
+
538
+ case "Cover" :
539
+ case null when endpoint . HasCapability ( OpenNettyCapabilities . BasicShutterControl ) &&
540
+ endpoint . HasCapability ( OpenNettyCapabilities . BasicShutterState ) :
541
+ {
542
+ var component = new JsonObject
543
+ {
544
+ [ "platform" ] = "cover" ,
545
+ [ "unique_id" ] = Base64Url . EncodeToString ( SHA256 . HashData (
546
+ [
547
+ ..Encoding . UTF8 . GetBytes ( name ) ,
548
+ ..Encoding . UTF8 . GetBytes ( endpoint . Address ? . Value ?? string . Empty )
549
+ ] ) ) ,
550
+ [ "name" ] = endpoint . Name ,
551
+ [ "device_class" ] = endpoint . GetStringSetting ( OpenNettySettings . HomeAssistantDeviceClass ) ?? "shutter"
552
+ } ;
553
+
554
+ if ( endpoint . HasCapability ( OpenNettyCapabilities . BasicShutterControl ) )
555
+ {
556
+ component [ "command_topic" ] = $ "{ options . RootTopic } /{ name } /{ OpenNettyMqttAttributes . ShutterState } /set";
557
+ }
558
+
559
+ if ( endpoint . HasCapability ( OpenNettyCapabilities . BasicShutterState ) )
560
+ {
561
+ component [ "state_topic" ] = $ "{ options . RootTopic } /{ name } /{ OpenNettyMqttAttributes . ShutterState } ";
562
+ }
563
+
564
+ if ( endpoint . HasCapability ( OpenNettyCapabilities . AdvancedShutterControl ) )
565
+ {
566
+ component [ "set_position_topic" ] = $ "{ options . RootTopic } /{ name } /{ OpenNettyMqttAttributes . ShutterPosition } /set";
567
+ }
568
+
569
+ if ( endpoint . HasCapability ( OpenNettyCapabilities . AdvancedShutterState ) )
570
+ {
571
+ component [ "position_topic" ] = $ "{ options . RootTopic } /{ name } /{ OpenNettyMqttAttributes . ShutterPosition } ";
572
+ }
573
+
574
+ components . Add ( $ "entity{ components . Count . ToString ( CultureInfo . InvariantCulture ) } ", component ) ;
575
+ break ;
576
+ }
491
577
}
492
578
}
493
579
0 commit comments