somfy_sdn 2.3.0 → 2.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 58db5a5328195a9cbd9458c4702f2e31490b7a5967d7e94e4ac9fc84a569ba88
4
- data.tar.gz: cb58ee6964aeb41ce39737b3bdacd44974b2f40dd53395c0376c09b8e2add269
3
+ metadata.gz: c9d3b292843473f2020321bca2d00cef41b0a1374cf9df8a5f99e8c3f699dfb0
4
+ data.tar.gz: eb2cb0abbbcff66897e815ce8e97928af0b9dd598d464efe12b99bee3ed646d1
5
5
  SHA512:
6
- metadata.gz: 0d2f32416ae7e943f101868cdda35162f1b14dd7e047d1df2725c36095fc4437e713fc32546b03e10c89e013b00210062ff3e8dfd88f6503266cc3a65e5e262b
7
- data.tar.gz: 3b1e3732ad5d70fbac17f5e498b418a096c890e37b570e5da70cfbeee77c2b0ae6cec25d0ae2f8c3f39bac80e836ab8a70018b43ba75ca3be3421478281f8757
6
+ metadata.gz: 48a69e210eaccaf15de99cd35b499547208b9a05bd30ed2796617b34dbbabaf9d2f11be87e09dd6dce7a5a618d5e5232d6420a6903c4c007f6ce3bba9ac214ab
7
+ data.tar.gz: fe5e5215cb3f870b1b36e926546260234cd4dbbce2985b77cdc2bfaac4c89c9672ef0a05748726a1e4869ef6b73fa6c839dfce8a3b9ff2cbd67926c20062c892
@@ -3,7 +3,15 @@
3
3
  module SDN
4
4
  module CLI
5
5
  class MQTT
6
- Group = Struct.new(:bridge, :addr, :position_percent, :position_pulses, :ip, :last_direction, :state, :motors) do
6
+ Group = Struct.new(:bridge,
7
+ :addr,
8
+ :position_percent,
9
+ :position_pulses,
10
+ :ip,
11
+ :last_direction,
12
+ :state,
13
+ :hass_state,
14
+ :motors) do
7
15
  def initialize(*)
8
16
  members.each { |k| self[k] = :nil }
9
17
  super
@@ -103,6 +103,20 @@ module SDN
103
103
  directions = group.motor_objects.map(&:last_direction).uniq
104
104
  direction = (directions.length == 1) ? directions.first : "mixed"
105
105
  group.publish(:last_direction, direction)
106
+
107
+ positions = group.motor_objects.map(&:position_percent).uniq
108
+ position = (positions.length == 1) ? positions.first : 50
109
+
110
+ hass_state = if state == :running
111
+ (direction == :down) ? :closing : :opening
112
+ elsif position.zero?
113
+ :open
114
+ elsif position == 100
115
+ :closed
116
+ else
117
+ :stopped
118
+ end
119
+ group.publish(:hass_state, hass_state)
106
120
  end
107
121
  when Message::PostMotorLimits
108
122
  motor.publish(:up_limit, message.up_limit)
data/lib/sdn/cli/mqtt.rb CHANGED
@@ -11,6 +11,7 @@ require "sdn/cli/mqtt/p_queue"
11
11
  require "sdn/cli/mqtt/read"
12
12
  require "sdn/cli/mqtt/write"
13
13
  require "sdn/cli/mqtt/subscriptions"
14
+ require "sdn/version"
14
15
 
15
16
  module SDN
16
17
  module CLI
@@ -206,6 +207,7 @@ module SDN
206
207
  publish("#{addr}/discover/$format", "discover")
207
208
  publish("#{addr}/discover/$settable", "true")
208
209
  publish("#{addr}/discover/$retained", "false")
210
+
209
211
  @mqtt.publish_hass_button("discover",
210
212
  command_topic: "#{@base_topic}/#{addr}/discover/set",
211
213
  device: hass_device,
@@ -582,6 +584,14 @@ module SDN
582
584
  return group if group
583
585
 
584
586
  @mqtt.batch_publish do
587
+ hass_device = {
588
+ identifiers: addr,
589
+ model: "Shade Group",
590
+ name: addr,
591
+ via_device: @device_id
592
+ }
593
+ node_id = "#{@device_id}_#{addr}"
594
+
585
595
  publish("#{addr}/$name", addr)
586
596
  publish("#{addr}/$type", "Shade Group")
587
597
  publish("#{addr}/$properties",
@@ -594,12 +604,53 @@ module SDN
594
604
  publish("#{addr}/discover/$settable", "true")
595
605
  publish("#{addr}/discover/$retained", "false")
596
606
 
607
+ @mqtt.publish_hass_button("discover",
608
+ command_topic: "#{@base_topic}/#{addr}/discover/set",
609
+ device: hass_device,
610
+ icon: "mdi:search-add",
611
+ name: "Rediscover",
612
+ node_id: node_id,
613
+ object_id: "discover",
614
+ payload_press: "true",
615
+ unique_id: "#{node_id}_discover")
616
+
597
617
  publish("#{addr}/control/$name", "Control motors")
598
618
  publish("#{addr}/control/$datatype", "enum")
599
619
  publish("#{addr}/control/$format", "up,down,stop,wink,next_ip,previous_ip,refresh")
600
620
  publish("#{addr}/control/$settable", "true")
601
621
  publish("#{addr}/control/$retained", "false")
602
622
 
623
+ @mqtt.publish_hass_cover("group",
624
+ command_topic: "#{@base_topic}/#{addr}/control/set",
625
+ device: hass_device,
626
+ icon: "mdi:roller-shade",
627
+ name: "Group",
628
+ node_id: node_id,
629
+ payload_close: "down",
630
+ payload_open: "up",
631
+ payload_stop: "stop",
632
+ position_open: 0,
633
+ position_closed: 100,
634
+ position_topic: "#{@base_topic}/#{addr}/position-percent",
635
+ set_position_topic: "#{@base_topic}/#{addr}/position-percent/set",
636
+ state_topic: "#{@base_topic}/#{addr}/hass-state",
637
+ unique_id: "#{node_id}_group")
638
+ {
639
+ Wink: "mdi:emoticon-wink",
640
+ Next_IP: "mdi:skip-next",
641
+ Previous_IP: "mdi:skip-previous",
642
+ Refresh: "mdi:refresh"
643
+ }.each do |command, icon|
644
+ @mqtt.publish_hass_button(command.to_s.downcase,
645
+ command_topic: "#{@base_topic}/#{addr}/control/set",
646
+ device: hass_device,
647
+ icon: icon,
648
+ name: command.to_s.sub("_", " "),
649
+ node_id: node_id,
650
+ payload_press: command.to_s.downcase,
651
+ unique_id: "#{node_id}_#{command.to_s.downcase}")
652
+ end
653
+
603
654
  publish("#{addr}/jog-ms/$name", "Jog motors by ms")
604
655
  publish("#{addr}/jog-ms/$datatype", "integer")
605
656
  publish("#{addr}/jog-ms/$format", "-65535:65535")
@@ -620,6 +671,20 @@ module SDN
620
671
  publish("#{addr}/position-pulses/$unit", "pulses")
621
672
  publish("#{addr}/position-pulses/$settable", "true")
622
673
 
674
+ @mqtt.publish_hass_number("position-pulses",
675
+ command_topic: "#{@base_topic}/#{addr}/position-pulses/set",
676
+ device: hass_device,
677
+ enabled_by_default: false,
678
+ max: 65_536,
679
+ min: 0,
680
+ name: "Position (Pulses)",
681
+ node_id: node_id,
682
+ object_id: "position-pulses",
683
+ state_topic: "#{@base_topic}/#{addr}/position-pulses",
684
+ step: 10,
685
+ unit_of_measurement: "pulses",
686
+ unique_id: "#{node_id}_position-pulses")
687
+
623
688
  publish("#{addr}/position-percent/$name", "Position (in %)")
624
689
  publish("#{addr}/position-percent/$datatype", "integer")
625
690
  publish("#{addr}/position-percent/$format", "0:100")
@@ -631,6 +696,18 @@ module SDN
631
696
  publish("#{addr}/ip/$format", "1:16")
632
697
  publish("#{addr}/ip/$settable", "true")
633
698
 
699
+ @mqtt.publish_hass_number("ip",
700
+ command_topic: "#{@base_topic}/#{addr}/ip/set",
701
+ device: hass_device,
702
+ name: "Intermediate Position",
703
+ max: 16,
704
+ min: 0,
705
+ node_id: node_id,
706
+ object_id: "ip",
707
+ payload_reset: "",
708
+ state_topic: "#{@base_topic}/#{addr}/ip",
709
+ unique_id: "#{node_id}_ip")
710
+
634
711
  publish("#{addr}/state/$name", "State of the motors")
635
712
  publish("#{addr}/state/$datatype", "enum")
636
713
  publish("#{addr}/state/$format", "#{Message::PostMotorStatus::STATE.keys.join(",")},mixed")
data/lib/sdn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SDN
4
- VERSION = "2.3.0"
4
+ VERSION = "2.3.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: somfy_sdn
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-01-02 00:00:00.000000000 Z
11
+ date: 2025-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ccutrer-serialport