somfy_sdn 2.3.1 → 2.3.2

Sign up to get free protection for your applications and to get access to all the features.
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