mirror of
https://github.com/home-assistant/home-assistant.io.git
synced 2025-07-15 21:36:52 +00:00
Create component page for mysensors based cover (#986)
* Create component page for mysensors based cover * Updated documentation of MySensors cover to match PR * Updated MySensors cover for 1.4 V_TYPES backport * Fixed sending initial state in setup * Fixed broken link * Changed ha_release
This commit is contained in:
parent
0bc1fc4e3c
commit
2fffb5d097
155
source/_components/cover.mysensors.markdown
Normal file
155
source/_components/cover.mysensors.markdown
Normal file
@ -0,0 +1,155 @@
|
||||
---
|
||||
layout: page
|
||||
title: "MySensors Cover"
|
||||
description: "Instructions how to integrate MySensors covers into Home Assistant."
|
||||
date: 2016-09-25 11:30 +0100
|
||||
sidebar: true
|
||||
comments: false
|
||||
sharing: true
|
||||
footer: true
|
||||
logo: mysensors.png
|
||||
ha_category: Cover
|
||||
ha_release: 0.30
|
||||
---
|
||||
|
||||
Integrates MySensors covers into Home Assistant. See the [main component] for configuration instructions.
|
||||
|
||||
The following actuator types are supported:
|
||||
|
||||
##### MySensors version 1.4
|
||||
S_TYPE | V_TYPE
|
||||
------------|-------------
|
||||
S_COVER | V_UP, V_DOWN, V_STOP, [V_DIMMER or V_LIGHT]
|
||||
|
||||
##### MySensors version 1.5 and higher
|
||||
S_TYPE | V_TYPE
|
||||
------------|-------------
|
||||
S_COVER | V_UP, V_DOWN, V_STOP, [V_PERCENTAGE or V_STATUS]
|
||||
|
||||
All V_TYPES above are required. Use V_PERCENTAGE (or V_DIMMER) if you know the exact position of the cover in percent, use V_STATUS (or V_LIGHT) if you don't.
|
||||
|
||||
For more information, visit the [serial api] of MySensors.
|
||||
|
||||
### {% linkable_title Example sketch %}
|
||||
|
||||
```cpp
|
||||
/*
|
||||
* Documentation: http://www.mysensors.org
|
||||
* Support Forum: http://forum.mysensors.org
|
||||
*/
|
||||
|
||||
// Enable debug prints to serial monitor
|
||||
#define MY_DEBUG
|
||||
#define MY_RADIO_NRF24
|
||||
|
||||
#include <MySensors.h>
|
||||
#define SN "Cover"
|
||||
#define SV "1.1"
|
||||
|
||||
// Actuators for moving the cover up and down respectively.
|
||||
#define COVER_UP_ACTUATOR_PIN 2
|
||||
#define COVER_DOWN_ACTUATOR_PIN 3
|
||||
// Sensors for finding out when the cover has reached its up/down position.
|
||||
// These could be simple buttons or linear hall sensors.
|
||||
#define COVER_UP_SENSOR_PIN 4
|
||||
#define COVER_DOWN_SENSOR_PIN 5
|
||||
|
||||
#define CHILD_ID 0
|
||||
|
||||
// Internal representation of the cover state.
|
||||
enum State {
|
||||
IDLE,
|
||||
UP, // Window covering. Up.
|
||||
DOWN, // Window covering. Down.
|
||||
};
|
||||
|
||||
static int state = IDLE;
|
||||
static int status = 0; // 0=cover is down, 1=cover is up
|
||||
static bool initial_state_sent = false;
|
||||
MyMessage upMessage(CHILD_ID, V_UP);
|
||||
MyMessage downMessage(CHILD_ID, V_DOWN);
|
||||
MyMessage stopMessage(CHILD_ID, V_STOP);
|
||||
MyMessage statusMessage(CHILD_ID, V_STATUS);
|
||||
|
||||
void sendState() {
|
||||
// Send current state and status to gateway.
|
||||
send(upMessage.set(state == UP));
|
||||
send(downMessage.set(state == DOWN));
|
||||
send(stopMessage.set(state == IDLE));
|
||||
send(statusMessage.set(status));
|
||||
}
|
||||
|
||||
void setup() {
|
||||
pinMode(COVER_UP_SENSOR_PIN, INPUT);
|
||||
pinMode(COVER_DOWN_SENSOR_PIN, INPUT);
|
||||
}
|
||||
|
||||
void presentation() {
|
||||
sendSketchInfo(SN, SV);
|
||||
|
||||
present(CHILD_ID, S_COVER);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (!initial_state_sent) {
|
||||
sendState();
|
||||
initial_state_sent = true;
|
||||
}
|
||||
|
||||
if (state == IDLE) {
|
||||
digitalWrite(COVER_UP_ACTUATOR_PIN, LOW);
|
||||
digitalWrite(COVER_DOWN_ACTUATOR_PIN, LOW);
|
||||
}
|
||||
|
||||
if (state == UP && digitalRead(COVER_UP_SENSOR_PIN) == HIGH) {
|
||||
Serial.println("Cover is up.");
|
||||
// Update status and state; send it to the gateway.
|
||||
status = 1;
|
||||
state = IDLE;
|
||||
sendState();
|
||||
// Actuators will be disabled in next loop() iteration.
|
||||
}
|
||||
|
||||
if (state == DOWN && digitalRead(COVER_DOWN_SENSOR_PIN) == HIGH) {
|
||||
Serial.println("Cover is down.");
|
||||
// Update status and state; send it to the gateway.
|
||||
status = 0;
|
||||
state = IDLE;
|
||||
sendState();
|
||||
// Actuators will be disabled in next loop() iteration.
|
||||
}
|
||||
}
|
||||
|
||||
void receive(const MyMessage &message) {
|
||||
if (message.type == V_UP) {
|
||||
// Set state to covering up and send it back to the gateway.
|
||||
state = UP;
|
||||
sendState();
|
||||
Serial.println("Moving cover up.");
|
||||
|
||||
// Activate actuator until the sensor returns HIGH in loop().
|
||||
digitalWrite(COVER_UP_ACTUATOR_PIN, HIGH);
|
||||
}
|
||||
|
||||
if (message.type == V_DOWN) {
|
||||
// Set state to covering up and send it back to the gateway.
|
||||
state = DOWN;
|
||||
sendState();
|
||||
Serial.println("Moving cover down.");
|
||||
// Activate actuator until the sensor returns HIGH in loop().
|
||||
digitalWrite(COVER_DOWN_ACTUATOR_PIN, HIGH);
|
||||
}
|
||||
|
||||
if (message.type == V_STOP) {
|
||||
// Set state to idle and send it back to the gateway.
|
||||
state = IDLE;
|
||||
sendState();
|
||||
Serial.println("Stopping cover.");
|
||||
|
||||
// Actuators will be switched off in loop().
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
[main component]: /components/mysensors/
|
||||
[serial api]: https://www.mysensors.org/download/serial_api_20
|
Loading…
x
Reference in New Issue
Block a user