somfy_sdn 2.3.1 → 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: 541526d413e48d3a6d60db5758a5f2ac92cfa1a397420c29221488f3993e0ae2
4
- data.tar.gz: d758f5f0cab2a0fbb6defecadb752f2342c031f209771f26ddf81003a361d649
3
+ metadata.gz: c9d3b292843473f2020321bca2d00cef41b0a1374cf9df8a5f99e8c3f699dfb0
4
+ data.tar.gz: eb2cb0abbbcff66897e815ce8e97928af0b9dd598d464efe12b99bee3ed646d1
5
5
  SHA512:
6
- metadata.gz: ea35c9e9d4700af4da7971bbee10dafa9a3303ae17e554d3d905daebd59c07796ec8b260750a6337deb1c00edf03607ac885316fbcc9535a0a820a94fa991550
7
- data.tar.gz: be63bab6a4ba6b727d3b2e242c1fbd6453130367272978e15ac439ce92bdc3bfcede6cbd5c63235355753c2fde986ea7e1287bc4ce6321f357b5953eee97d789
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
@@ -207,6 +207,7 @@ module SDN
207
207
  publish("#{addr}/discover/$format", "discover")
208
208
  publish("#{addr}/discover/$settable", "true")
209
209
  publish("#{addr}/discover/$retained", "false")
210
+
210
211
  @mqtt.publish_hass_button("discover",
211
212
  command_topic: "#{@base_topic}/#{addr}/discover/set",
212
213
  device: hass_device,
@@ -583,6 +584,14 @@ module SDN
583
584
  return group if group
584
585
 
585
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
+
586
595
  publish("#{addr}/$name", addr)
587
596
  publish("#{addr}/$type", "Shade Group")
588
597
  publish("#{addr}/$properties",
@@ -595,12 +604,53 @@ module SDN
595
604
  publish("#{addr}/discover/$settable", "true")
596
605
  publish("#{addr}/discover/$retained", "false")
597
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
+
598
617
  publish("#{addr}/control/$name", "Control motors")
599
618
  publish("#{addr}/control/$datatype", "enum")
600
619
  publish("#{addr}/control/$format", "up,down,stop,wink,next_ip,previous_ip,refresh")
601
620
  publish("#{addr}/control/$settable", "true")
602
621
  publish("#{addr}/control/$retained", "false")
603
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
+
604
654
  publish("#{addr}/jog-ms/$name", "Jog motors by ms")
605
655
  publish("#{addr}/jog-ms/$datatype", "integer")
606
656
  publish("#{addr}/jog-ms/$format", "-65535:65535")
@@ -621,6 +671,20 @@ module SDN
621
671
  publish("#{addr}/position-pulses/$unit", "pulses")
622
672
  publish("#{addr}/position-pulses/$settable", "true")
623
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
+
624
688
  publish("#{addr}/position-percent/$name", "Position (in %)")
625
689
  publish("#{addr}/position-percent/$datatype", "integer")
626
690
  publish("#{addr}/position-percent/$format", "0:100")
@@ -632,6 +696,18 @@ module SDN
632
696
  publish("#{addr}/ip/$format", "1:16")
633
697
  publish("#{addr}/ip/$settable", "true")
634
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
+
635
711
  publish("#{addr}/state/$name", "State of the motors")
636
712
  publish("#{addr}/state/$datatype", "enum")
637
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.1"
4
+ VERSION = "2.3.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: somfy_sdn
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cody Cutrer