NEWS
[Gelöst] [EspHome - HowTo] "Time Based Cover" wie steuern?
-
Ich habe mal die Cover Platform ausprobiert.
Das ganze funktioniert über die Weboberfläche des ESP, aber wie steuere ich das ganze von IO-Broker aus?
Es wird zwar bei den Objekten ein Objekt "position" angelegt, das ist aber immer 0 (egal wo der Rolladen steht). Wenn ich den Wert ändere passiert auch nichgts.Im Log ist mir auch aufgefallen, dass die Position im Gegensatz zu den anderen Zuständen nicht mit "sending state" sondern mit "publishing:" ausgegeben wird.
Kann es sein, dass "cover" nur über MQTT gesteuert werden kann?Kannst Du vielleicht helfen @dutchman ?
-
@wolfgangfb
Ich habe das ganze jetzt erfolgreich gelöst. Da es in der Vergangenheit schon andere gegeben hat, die über das gleiche Problem gestolprt sind hier die ausführliche Lösung:Es ist in der Tat so, dass der Rolladen (oder was auch immer man damit steuern möchte) nicht direkt über die ESPHome Datenpunkte sondern über MQTT gesteuert und ausgewertet werden müssen.
Bei mir wird das ganze über mit einem ESP8266 (Wemos D1 Mini) und 2 Relais gesteuert wobei ich da gleich einen "Hardware" Interlock-Schutz eingebaut habe damit nicht gleichzeitig "Auf" und "Ab" aktiv sein können (man kann zwar in ESPHome ein Interlock aktivieren, das ist aber eben nur Software)..
Also einfach ein Relais für AnAus und eines für AufAb, damit kann immer nur eine Richtung geschaltet sein.switch: - platform: gpio pin: number: D3 mode: OUTPUT inverted: true id: on_rollo name: "RelaisAnAus" restore_mode: ALWAYS_OFF - platform: gpio pin: number: D4 mode: OUTPUT inverted: true id: dir_rollo name: "RelaisAufAb"
(Den Restore Mode habe ich eingeaut damit im Falle eines Neustartes nicht sofort der Rollo loslegt, Inverted weil es so zu meinen Relais passt, kommt ja immer darauf an,wie man das ganze anschließt).
Jetzt zur eigentlichen Steuerung:
cover: - platform: time_based name: "GastRollo" device_class: shutter id: gast_rollo position_state_topic: "Rollo.Gast.position.ist" position_command_topic: "Rollo.Gast.position.wunsch" open_action: - switch.turn_on: on_rollo - switch.turn_on: dir_rollo open_duration: 20sec close_action: - switch.turn_on: on_rollo - switch.turn_off: dir_rollo close_duration: 20sec stop_action: - switch.turn_off: on_rollo
Die "Actions" sind meiner Meinung nach einfach zu verstehen (Bei "Auf", "Ab" und "Stop" werrden eben die entsprechenden Relais geschaltet).
Was meiner Meinung nach nicht so gut in der Doku erklärt ist, sind die Eiknträge:position_state_topic: "Rollo.Gast.position.ist" position_command_topic: "Rollo.Gast.position.wunsch"
Damit definiert man, über welche MQTT Topics der Rollandenzustand gelesen und gesetzt werden kann. Das sind zwingend 2 verschiedene Punkte!
Um MQTT in ESPHome machen zu können muss noch die MQTT Plattform hinzugefügt werden:
mqtt: broker: 192.168.1.203
(Bei mir wird kein Username und kein Password benötigt, wer eins gesetzt hat, muss es hier mit "username:" und "password:" angeben. Natürlich muss die IP Adresse noch angepasst werden)
Das verwirrende ist meiner Meinung nach, dass in den Objekten des ESPs selbst unter "Cover" ein Objekt "Position" auftaucht, dieses aber scheinbar nicht verwendet wird (bei mir dsteht da immer 0, wozu tilt gut sein soll weiß ich auch nicht, der Stop Button macht bei mir auch nichts.)
In den Datenpunkten von MQTT tauchen aber jetzt die beiden Punkte "ist und "wunsch" auf
Über "ist" kann man verfolgen, an welcher Stelle der Rollo gerade ist, wenn man "wunsch" ändert bewirkt das, dass der Rollo zu dieser Position gefahren wird.
Um das ganze z.B.in VIS z.B. über eine Shutter Komponente steuer zu können benötigt man aber einen gemeinsamen Datenpunkt zum Lesen und Schreiben. Deshalb erzeugt man einfach einen Alias bei dem man unterschiedliche Datenpunkte für Lesen und Schreiben angeben kann.
Um unterschiedliche Datenpunkte einstellen zu können muss man auf den Reiter "Alias klicken.
Wer jetzt das ganze noch über einen einzelnen Taster steuern möcht (Wechsel "Auf" -> "Halt" -> "Ab" -> "Halt" etc.)
baut noch folgendes ein:
binary_sensor: - platform: gpio name: "RolloTaster" pin: number: D8 mode: INPUT_PULLUP inverted: true filters: - delayed_on: 100ms on_press: then: - cover.toggle: gast_rollo
(Ich weiß, dass D8 mit Vorsicht zu genießen ist, der "Filter" ist zum Entprellen des Tasters, da es für D8 keinen internen Pulldown gibt habe ich eben INPUT_PULLUP gewählt (damit ist der Pin ohne das der Taster gedrückt ist immer high, der Taster ist an GND und D8 angeschlossen und zieht den PIN dann eben auf Low, deshalb auch "Inverted")
Viel Spaß beim nachbauen.