FHEM Forum

Verschiedenes => Bastelecke => ESP Familie => Thema gestartet von: sbiermann am 02 Mai 2017, 16:24:54

Titel: [Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: sbiermann am 02 Mai 2017, 16:24:54
Holas,
meine neue Dachterrasse hat eine schicke Markise bekommen welche ich mit dem HM-LC-BL1-FM von Homematic steuern kann. Da ich das Ganze nun für die Beschattung der Wohung nutzen will, sprich je nach Temperatur und Sonnenschein die Markise ein- bzw. ausfahren möchte, brauche ich einen Mechanismus der die Markise vor Windböen schützt bzw. wenn welche auftreten die Markise automatisch einfährt. Da mir das angebotene Modul des Markisenherstellers zu teuer war, habe ich meine eigenen Windmesser und Anbindung realisiert auf Basis des ESP8266 mit MQTT.

Benutzte Hardware:

Der Eltako Windmesser hat 4 Reedkontakte dementsprechend gibt es 4 Signale wenn er einmal vollständig gedreht hat. Mit der Formel v [km/h] = 1.761 / (1 + rps) + 3.013 * rps  (rps=rounds per second) die ich in einer der Kundenbewertungen (http://"http://amzn.to/2p1wiuY") gefunden habe, konnte ich den Arduino Code so schreiben das am Ende, meiner Meinung nach, verlässliche Werte raus kommen. Die Windgeschwindigkeit wird anschließend per MQTT gepublished. Damit nicht zu viele Werte gesendet werden wird nur jede Sekunde gesendet wenn der Wind sich um mehr als 1 km/h ändert ansonsten nur alle 10 Sekunden. Sollte meiner Meinung nach vollkommen ausreichend sein.

Der Windmesser ist mit dem D7 und GND Pin des Wemos verbunden. Der D7 ist als INPUT_PULLUP initialisiert. Software technisch ist es so gelöst das jeder Reedkontakt einen Interrupt auslöst, welcher dazu führt das eine Variable hoch zählt. Jede Sekunde wird dann geprüft wie viele Reedkontakte wurden überschritten, daraus ergibt sich die rps für die oben genannte Formel.

In FHEM habe ich ein MQTT Device eingerichtet:
define Windmesser MQTT_DEVICE
attr Windmesser IODev MQTTBroker
attr Windmesser room Wetter
attr Windmesser stateFormat wind km/h
attr Windmesser subscribeReading_wind anemometer/wind


Und ein DOIF um die Markise zu steuern:
define AutoMarkiseSchliessen DOIF ([HM_508FCB:pct] > 0 && ([Windmesser:wind] >= 25)) (set HM_508FCB pct 0)

Den Sourcecode für das Projekt findet ihr auf github: https://github.com/sbiermann/esp8266-anemometer.
Installation:

Viele Grüße
Stefan
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: Alex85 am 17 Juni 2017, 12:40:46
Danke, dass du dieses Projekt geteilt hast. Made my day!

Gruß,
Alex
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: Manfi am 28 November 2018, 16:37:53
Hi,
Habe so etwas mit einem La Crosse (Technoline) TX20 Windsensor an einem Sonoff Basic mit Tasmota realisiert. Funktioniert perfekt.
Zusätzlich kann ich damit das Licht meiner Gartenhütte schalten ;D

LG
Manfi
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: heikoh81 am 03 März 2019, 22:49:22
Ich habe den Eltako-Windsensor an einem Raspi am Laufen.
Wemos D1 Mini ist natürlich eine sehr interessante Alternative.
In der Github-Readme steht nichts, wo/wie man die myconfig_samples.h platzieren soll.
Was ist denn die Basis-Software dahinter? Momentan verwende ich tasmota mit dem Wemos D1 Mini.

Software auf Wemos hoch laden, Windmesser anschließen und testen
Wie hast du das gemacht?

Viele Grüße,
Heiko
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: sbiermann am 04 März 2019, 11:12:29
Eigentlich muss man nur das Git Repo auschecken und dann die myconfig_samples.h in myconfig.h umbenennen und die Werte ändern.

Falls du Basissoftware wie ESPEasy oder Tasmota meinst, nein das habe ich nicht verwendet, ist ein purer Sketch der außer den MQTT und ESP Libs nicht anderes verwendet.
Als MQTT Library habe ich folgende verwendet: https://github.com/knolleary/pubsubclient. Die kann man über die Arduino IDE einfach installieren.

Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: vencam am 23 April 2019, 16:57:30
@sbiermann: Ich versuche gerade das Ganze nachzubauen :) ... gefällt mir echt gut!

Die Wifi-Verbindung klappt, jedoch habe ich meinen MQTT Broker mit Benutzernamen und Passwort aufgebaut. Genau das fehlt mir noch in deiner Config, wäre toll wenn du helfen könntest.

Grüße

EDIT:

Hab es schon geschafft! War doch nicht so schwer, wie gedacht!  ::)

Einfach in myconfig.h folgende Zeilen hinzufügen:

const char* mqttUser = "YourMqttUser";
const char* mqttPassword = "YourMqttUserPassword";


Im Sketch dann noch folgende Zeile abändern von:

if (client.connect(mqtt_id)) { in if (client.connect(mqtt_id, mqttUser, mqttPassword )) {
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: wuschel am 31 Mai 2019, 01:58:23
Guten Abend sbiermann,
erstmal vielen dank für den Code und das bereitstellen.
Bin über google auf diesen Thread aufmerksam geworden, habe einen wemos d1 mini erfolgreich über die arduino ide gelfasht.
Allerdings bekomme ich im Debug nur merkwürdigen output und in der Heimsteuerung keine Werte.

Evtl eine Idee wo es klemmen könnte?

Ich selbst kann mit der meldung nichts anfangen...

Danke und Gruß





Connecting to *SSID meines WLANS* (drei buchstaben)
.......
WiFi connected
IP address:
192.1**.1**.***
do update
[update] Update failed.
Attempting MQTT connection...connected
ISR not in IRAM!

Abort called

>>>stack>>>

ctx: cont
sp: 3ffffd90 end: 3fffffc0 offset: 01b0
3fffff40:  3ffe865f 3ffee558 3ffee6d8 40203b38 
3fffff50:  00000000 00000000 3ffee558 3ffe84dc 
3fffff60:  000001ed 3ffee66c 3ffee6d8 401004e6 
3fffff70:  000001ed 3ffee66c 3ffee6d8 40201540 
3fffff80:  40209350 70b2a8c0 feefeffe feefeffe 
3fffff90:  feefeffe feefeffe feefeffe 3ffee7f4 
3fffffa0:  3fffdad0 00000000 3ffee7c4 40205b28 
3fffffb0:  feefeffe feefeffe 3ffe8530 40100861 
<<<stack<<<

ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v8b899c12
~ld


Connecting to *SSID meines WLANS*
.......
WiFi connected
IP address:
192.1**.1**.***
do update
[update] Update failed.
Attempting MQTT connection...connected
ISR not in IRAM!

Abort called

>>>stack>>>

ctx: cont
sp: 3ffffd90 end: 3fffffc0 offset: 01b0
3fffff40:  3ffe865f 3ffee558 3ffee6d8 40203b38 
3fffff50:  00000000 00000000 3ffee558 3ffe84dc 
3fffff60:  000001ed 3ffee66c 3ffee6d8 401004e6 
3fffff70:  000001ed 3ffee66c 3ffee6d8 40201540 
3fffff80:  40209350 70b2a8c0 feefeffe feefeffe 
3fffff90:  feefeffe feefeffe feefeffe 3ffee7f4 
3fffffa0:  3fffdad0 00000000 3ffee7c4 40205b28 
3fffffb0:  feefeffe feefeffe 3ffe8530 40100861 
<<<stack<<<

ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v8b899c12
~ld

Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: sbiermann am 31 Mai 2019, 07:57:25
Das ganze ist wohl ein Problem mit der ESP8266 Library ab einer bestimmten Version. Zu mindestens sagt Google dies so.

Probier mal folgendes aus:
Such im Code die Stelle:
void Interrupt()
und füge das ICACHE_RAM_ATTR ein, so das es so aussieht:
void ICACHE_RAM_ATTR interrupt()

Theoretisch sollte dies das Problem lösen.
Bitte gib kurz Rückmeldung ob das Problem gelöst wurde, dann füge ich das in Code auf Github ein.
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: wuschel am 31 Mai 2019, 10:58:53
Guten Morgen und danke für das annehmnen des Problems.

Habe void Interrupt() zu void ICACHE_RAM_ATTR interrupt() geändert ein paar Zeilen weiter unten kommt er dann zum fehler beim kompilieren.

Denke diese Zeile müsste auch angepasst werden oder ?


    attachInterrupt(input_pin,Interrupt,RISING);



esp8266-anemometer:100:31: error: 'Interrupt' was not declared in this scope

     attachInterrupt(input_pin,Interrupt,RISING);

                               ^

exit status 1
'Interrupt' was not declared in this scope

Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: sbiermann am 31 Mai 2019, 11:04:32
Kleiner Vertipper anstelle von:
void ICACHE_RAM_ATTR interrupt()
muss es
void ICACHE_RAM_ATTR Interrupt()
heißen.
Sprich aus dem kleine i ein großes I machen.
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: wuschel am 31 Mai 2019, 11:07:18
Angepasst, kompilerit kurzen moment länger um dann wieder abzubrechen.

Habe mal einen Screenshot gemacht, ist denke aussagekräftiger

http://img28115.imagevenue.com/img.php?image=93569_ide_122_490lo.JPG
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: sbiermann am 31 Mai 2019, 11:33:02
Ok, ich habe mal den Code ausgecheckt und mit der aktuellen Arduino IDE bauen lassen. Den Fehler konnte ich nachvollziehen und beheben. Ich habe eine korrigierte Version eingecheckt und nach Github gepushed. Die kompiliert korrekt, aber ob sie funktioniert kann ich mangels Hardware nicht ausprobieren.
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: wuschel am 31 Mai 2019, 12:00:35
Danke für deine Mühe, bekomme den Sketch nun gar nicht mehr kompiliert.

Könntest du noch ein paar mehr Angaben zu deiner Umgebung machen, evtl auch deine libs mit hier einfügen oder in das GitHub Projekt?

Als ESP Boards hatte ich 2.5.2 und jetzt 2.5.1 bei beiden motzt er das er das Board nicht kennt -> Fehler beim Kompilieren für das Board Generic ESP8266 Module.


//PS:
Denke es liegt an der PubSubClient.h -> mit der hier genannten im Thrad kommt der Fehler mit dem Board  -> Fehler beim Kompilieren für das Board Generic ESP8266 Module.
Nehme ich eine andere aus der GitHub Repo kommt ->  'class PubSubClient' has no member named 'setServer'

Daher auch die Frage nach den benutzten Libs
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: sbiermann am 31 Mai 2019, 12:48:00
Installiert ist die PubSub Client von Nick O'Leary https://pubsubclient.knolleary.net/ in der Version 2.7.0.
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: wuschel am 31 Mai 2019, 23:36:48
Mit dieser Lib hat es geklappt, danke läuft sauber!
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: mb3000 am 01 Juni 2019, 06:52:47
Hallo zusammen,
erstmal dank an sbiermann für die Veröffentlichung. Bei mir hat alles auf Anhieb funktioniert, sehr gute Beschreibung. Ich nutze einen NodeMCU Amica. Allerdings habe ich ein Problem und versuche es gerade zu lösen. Im Moment liegt der Sensor im Arbeitszimmer, so dass ich die Software noch anpassen kann. Läuft Sensor und NodeMCU länger als 8h (also ohne Wind) kommen keine Windgeschwindigkeiten mehr an (Geschwindkeit 0.00). Ich gehe davon aus, dass der Interrupt nicht mehr ausgelöst wird. Erste Gedanken sind, dass vielleicht bei mir einen externen Pull Up Widerstand benötige. Hat jemand ein vergleichbares Problem?

Viele Grüße
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: sbiermann am 01 Juni 2019, 17:26:51
Nee, ich habe nur das Problem das hin und wieder das Netzwerk wegbricht. Aber das haben alle Geräte die da in der Ecke hängen. Ist halt außerhalb des Gebäudes und dazu noch gut isoliert was Strahlung angeht (bedampfte Fenster, verzinktes Blech, usw.).
Ansonsten tut der Sensor aber immer seinen Dienst, meldet alle 10 Sekunden seinen Wert und dieser ändert sich auch regelmäßig.
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: Topgun am 18 Juli 2019, 17:18:48
Da ich im Forum nach meiner Lösung gefragt wurde und diese mit einem Wemos D1 mini realisiert wurde, stelle ich sie hier einfach mal ein:

Hardware:
- Eltako Windsensor (ca 50 Euro): https://www.amazon.de/Eltako-Windsensor-WS/dp/B0018LBFG8
- Wemos D1 mini (ca 2,50 Euro): https://www.ebay.de/itm/162809655148 (das Development Board auswählen, die Antenne benötigt ihr nicht)

Schaltplan:
Den Windsensor zwischen Masse (G) und D4 anschließen. Es gehen auch andere Pins, aber so sieht man am Blinken der LED des ESP8266 gleich, ob die Erfassung funktioniert.

Programmierung (mit ESPhome):

esphome:
  name: windsensor
  platform: ESP8266
  board: d1_mini

wifi:
  ssid: "xxxxx"
  password: "xxxxx"

# Enable logging
logger:
  level: INFO
  logs:
    mqtt.client: ERROR

ota:
  password: "xxxxx"

web_server:
  port: 80

mqtt:
  broker: 192.168.0.1
  username: xxxxx
  password: xxxxx
  id: mqtt_client
  log_topic:
    topic: fhem/windsensor
  birth_message:
    topic: fhem/windsensor
    payload: online
  will_message:
    topic: fhem/windsensor
    payload: offline

sensor:
  - platform: pulse_counter
    name: Windgeschwindigkeit
    id: windsensor
    pin:
      number: D4
      mode: INPUT_PULLUP
    unit_of_measurement: rps
    update_interval: 10s
    filters:
      - multiply: 0.016666666
      - lambda: return (x/4);


Ich lasse mir derzeit nicht die Windgeschwindigkeit sondern die Umdrehungen pro Sekunde - gemittelt über 10 Sekunden (update_interval) - ausgeben.
Die IP des brokers sollte die des FHEM Servers sein.

In FHEM muss dann noch ein MQTT-Server erstellt werden:
defmod myBroker MQTT2_SERVER 1883 global

Sobald der ESP8266 Daten über MQTT sendet, taucht das Device in FHEM auf. Im Reading state steht dann die Umdrehungen pro Sekunde.
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: PSI69 am 10 Juli 2020, 11:40:32
Ich hole dieses ältere Ding noch einmal hoch...

Den Windmesser mit einem Wemos D1 Mini und dem verlinktem Eltako Windmesser habe ich gerade frei verdrahtet aufgebaut. Beim Messen ist mir aufgefallen, dass mein Exemplar genau zwei Impulse pro Umdrehung abgibt. Das habe ich auch so in den Defs eingetragen (number_reed = 2).

Wenn ich den Eltako jetzt (aus meiner Sicht) verdammt schnell anschupse, dann kommen im Schnitt 20 - 25 km/h heraus.

Ich frage mich jetzt, ob das so richtig ist...

Wer hat das nachgabaut und kann mich erhellen?

Danke Peter
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: Topgun am 18 Oktober 2020, 17:21:14
An der wirklichen Windgeschwindkeit saß ich auch eine Weile dran, habe es dann aber aufgegeben. Denke dafür braucht man ein "Referenzwind", in den man den Windmesser hält und ein paar Windgeschwindigkeiten erfasst. Dann kann man eine Formel dafür entwickeln.

Mir ging es eher darum, ab wann die Markise automatisch rein fahren muss. Und da habe ich einfach geschaut, wann der "Grenzwert" der Markise erreicht ist (egal wie schnell der Wind ist) und habe daraus ein DOIF gemacht.
Titel: Antw:[Projekt] ESP8266 Windmesser zur Markisensteuerung
Beitrag von: Ranseyer am 19 Oktober 2020, 19:17:29
Zitat von: Topgun am 18 Oktober 2020, 17:21:14
Denke dafür braucht man ein "Referenzwind", in den man den Windmesser hält und ein paar Windgeschwindigkeiten erfasst. Dann kann man eine Formel dafür entwickeln.


Wenn das jemand will, möglicherweise kein Problem... mir ist dabei sofort die Story einfallen von jemandem der vor 20 Jährchen sowas entwickelt hatte...:
"Den Windmesser aus dem Auto halten und ein paaar Geschwindigkeiten probieren"
8) 8) 8)
Achtung geltendes Recht dabei einhalten ! PS: Und heute sieht man die tatsächliche Geschwindigkeit im GPS Empfänger statt dem falschen Tacho...