[GELÖST] MQTT Beweungsmelder mit ESP8266

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Tomzk
Beiträge: 55
Registriert: 5. Nov 2019 11:04
Answers: 0

[GELÖST] MQTT Beweungsmelder mit ESP8266

Beitrag von Tomzk »

Hallo Zusammen,

ich bin derzeit dabei ein Bewegungsmelder über MQTT mittels eines WEMOS D1 Minis in Openhab 2 zu integrieren.
Den Bewegungsmelder habe ich erfolgreich am Wemos verdrahtet, mit ESPEasy geflasht und konfiguriert.
In MQTT.fx bekomme ich das Topic angezeigt und dieser liefert auch Werte sobald der Bewegungsmelder schaltet.

Meine Schwierigkeit liegt jetzt eher in der Integration in OH. Installiert habe ich OH 2.5.0 M5 Milestone.

Müsste ich für den Sensor noch ein Thing unter dem Broker anlegen? (Broker ist per VSC konfiguriert)
Sehe ich das richtig, wenn ich in MQTT.fx den Topic mit den Publishes sehe, so sollte mein Problem nur an der Einbindung nach OH liegen?

Hier meine Konfiguration:
Topic über MQTT.fx:
Wemos1/Bewegung/Contact

Items:

Code: Alles auswählen

Number HCSR501_1 "Bewegungsmelder [MAP(esp-pir.map):%s]" <motion> {mqtt="<[MQTTBroker:Wemos1/Bewegung/Contact:state:default]"}

Switch Wohnzimmer_Licht_Decke "Wohnzimmer Licht Decke"   	{channel="mqtt:topic:MQTTBroker:Wohnzimmer_Licht_Decke:Power"}
Sitemap:

Code: Alles auswählen

Text item=HCSR501_1
Rules:

Code: Alles auswählen

var Timer LightTimer

rule "Bewegungsmelder Licht an"

when
    Item HCSR501_1 changed from 0 to 1

then
    if (Wohnzimmer_Licht_Decke.state == OFF)   {

    Wohnzimmer_Licht_Decke.sendCommand(ON)
    createTimer(now.plusSeconds(20))[|
    Wohnzimmer_Licht_Decke.sendCommand(OFF)
    ]

}

end
Transformations (esp-pir.map):

Code: Alles auswählen

0=Still
1=Motion
Broker:

Code: Alles auswählen

Bridge mqtt:broker:MQTTBroker "MQTTBroker Tom" [ host="192.168.178.38", port=1883, secure=false, username="XXX", password="XXX“, clientID="openHAB2", qos="1" ] 
{ 
	Thing topic Wohnzimmer_Licht_Decke "Wohnzimmer Licht Decke" { 
		Channels: 
			Type switch : Power "Wohnzimmer Licht Decke Power" [ stateTopic="shellies/shelly1-770E74/relay/0", commandTopic="shellies/shelly1-770E74/relay/0/command", on="on", off="off" ] 
	}

//	Test falls Thing angelegt werden müsste
//	Thing topic Wemos_1 "Bewegungsmelder 1"	{
//		Channels:
//			Type switch : Contact "Bewegungsmelder Kontakt"	[ stateTopic="Wemos1/Bewegung/Contact"]
//	} 
}

Danke an alle vorab
Gruß
Tom
Zuletzt geändert von Tomzk am 5. Dez 2019 19:43, insgesamt 2-mal geändert.

Benutzeravatar
udo1toni
Beiträge: 13986
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: MQTT Beweungsmelder mit ESP8266

Beitrag von udo1toni »

Es gibt zwei verschiedene MQTT Addons, nämlich v1 und v2. Für v1 musst Du openHAB über eine mqtt.cfg mit den Einstellungen für den Broker versorgen. Vermutlich hast Du aber eher das v2 Addon installiert, denn v1 ist normalerweise "unsichtbar".
Für v2 brauchst Du keine mqtt.cfg, sondern eine Bridge (die hast Du ja schon definiert), ein Thing pro Device und die passenden Channel (so, wie Du es schon da stehen hast...
Allerdings musst Du Dich entscheiden, ob Du den Type als switch oder number wählst und das Item passend dazu auswählen.

Code: Alles auswählen

Bridge mqtt:broker:MQTTBroker "MQTTBroker Tom" [
    host="192.168.178.38",
    port=1883,
    secure=false,
    username="XXX",
    password="XXX“,
    clientID="openHAB2",
    qos="1" ]
 {
    Thing topic Wohnzimmer_Licht_Decke "Wohnzimmer Licht Decke" { 
    Channels:
        Type switch : Power "Wohnzimmer Licht Decke Power" [ stateTopic="shellies/shelly1-770E74/relay/0", commandTopic="shellies/shelly1-770E74/relay/0/command", on="on", off="off" ] 
    }
    Thing topic Wemos_1 "Bewegungsmelder 1" {
    Channels:
        Type switch : Contact "Bewegungsmelder Kontakt"	[ stateTopic="Wemos1/Bewegung/Contact", on="1", off="0" ]
    } 
}
passende Items:

Code: Alles auswählen

Switch HCSR501_1 "Bewegungsmelder [%s]" <motion> {channel="mqtt:topic:MQTTBroker:Wemos_1:Contact]"}

Switch Wohnzimmer_Licht_Decke "Wohnzimmer Licht Decke [%s]"   	{channel="mqtt:topic:MQTTBroker:Wohnzimmer_Licht_Decke:Power"}
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Tomzk
Beiträge: 55
Registriert: 5. Nov 2019 11:04
Answers: 0

Re: MQTT Beweungsmelder mit ESP8266

Beitrag von Tomzk »

Ja richtig, ich habe das Binding v.2.
Nach dem hinzufügen des Things, sagt mir VS Code, für Contact "missing RULE_ID at "Contact" und unterstreich mir alles. Beim ändern auf "Power" meckert es nicht mehr.

Ich habe beide Varianten zur Steuerung meiner Rule (mit Contact, sowie Power) mit den entsprechend um formulierten Channeln der Items probiert, allerdings hat keine Variante funktioniert. Im Log wird mir beim auslösen des Bewegungsmelders leider auch nichts angezeigt.

Ich sehe gerade, sobald ich in der Items Datei etwas aktualisiere, so bekomme ich folgenden Log:

Code: Alles auswählen

2019-12-02 18:04:53.529 [ERROR] [el.item.internal.GenericItemProvider] - Binding configuration of type 'channel' of item 'HCSR501_1' could not be parsed correctly.

org.eclipse.smarthome.model.item.BindingConfigParseException: UID segment 'Power]' contains invalid characters. The last segment of the channel UID must match the pattern '[\w-]*|[\w-]*#[\w-]*'.

	at org.eclipse.smarthome.model.thing.internal.GenericItemChannelLinkProvider.createItemChannelLink(GenericItemChannelLinkProvider.java:82) ~[?:?]

	at org.eclipse.smarthome.model.thing.internal.GenericItemChannelLinkProvider.processBindingConfiguration(GenericItemChannelLinkProvider.java:72) ~[?:?]

	at org.eclipse.smarthome.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:369) ~[?:?]

	at org.eclipse.smarthome.model.item.internal.GenericItemProvider.internalDispatchBindings(GenericItemProvider.java:338) ~[?:?]

	at org.eclipse.smarthome.model.item.internal.GenericItemProvider.processBindingConfigsFromModel(GenericItemProvider.java:210) ~[?:?]

	at org.eclipse.smarthome.model.item.internal.GenericItemProvider.modelChanged(GenericItemProvider.java:404) ~[?:?]

	at org.eclipse.smarthome.model.core.internal.ModelRepositoryImpl.notifyListeners(ModelRepositoryImpl.java:311) ~[?:?]

	at org.eclipse.smarthome.model.core.internal.ModelRepositoryImpl.addOrRefreshModel(ModelRepositoryImpl.java:149) ~[?:?]

	at org.eclipse.smarthome.model.core.internal.folder.FolderObserver.checkFile(FolderObserver.java:240) ~[?:?]

	at org.eclipse.smarthome.model.core.internal.folder.FolderObserver.processWatchEvent(FolderObserver.java:304) ~[?:?]

	at org.eclipse.smarthome.core.service.WatchQueueReader.lambda$3(WatchQueueReader.java:323) ~[?:?]

	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_222]

	at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_222]

	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_222]

	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_222]

	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_222]

	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_222]

	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_222]
Ich habe das Item auch einmal in der Sitemap dargestellt, allerdings bekomme ich hier nur "-" angezeigt. Kann ich auf der Sitemap ein Item einfügen, welches mir einen Status (1/0, on/off, Still/Motion)anzeigt, oder bekomme ich nur "-" angezeigt, weil hier etwas nicht funktioniert?

Hier auch nochmal meine Rule:

Code: Alles auswählen

var Timer LightTimer

rule "Bewegungsmelder Licht an"

when
    Item HCSR501_1 changed from 0 to 1

then
    if (Wohnzimmer_Licht_Decke.state == OFF)   {

    Wohnzimmer_Licht_Decke.sendCommand(ON)
    createTimer(now.plusSeconds(20))[|
    Wohnzimmer_Licht_Decke.sendCommand(OFF)
    ]

}

end
Edit:
Schreibe ich das contact jeweils klein, so meckert VS Code nicht mehr. Allerdings bekomme ich die selbe Fehlermeldung wie oben.

Benutzeravatar
udo1toni
Beiträge: 13986
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: MQTT Beweungsmelder mit ESP8266

Beitrag von udo1toni »

Was ich mir vorstellen könnte, ist dass openHAB ein Problem mit dem Wort Contact hat, das ist ein Schlüsselwort (wenn auch nicht in einem Things File).

Die Fehlermeldung rührt von einem Tippfehler. Da steht hinten eine ] nach dem Wort Contact. Also bitte so probieren:

Code: Alles auswählen

Bridge mqtt:broker:MQTTBroker "MQTTBroker Tom" [
    host="192.168.178.38",
    port=1883,
    secure=false,
    username="XXX",
    password="XXX“,
    clientID="openHAB2",
    qos="1" ]
 {
    Thing topic Wohnzimmer_Licht_Decke "Wohnzimmer Licht Decke" { 
    Channels:
        Type switch : Power "Wohnzimmer Licht Decke Power" [ stateTopic="shellies/shelly1-770E74/relay/0", commandTopic="shellies/shelly1-770E74/relay/0/command", on="on", off="off" ] 
    }
    Thing topic Wemos_1 "Bewegungsmelder 1" {
    Channels:
        Type switch : contact "Bewegungsmelder Kontakt"	[ stateTopic="Wemos1/Bewegung/Contact", on="1", off="0" ]
    } 
}
und die Items:

Code: Alles auswählen

Switch HCSR501_1 "Bewegungsmelder [%s]" <motion> {channel="mqtt:topic:MQTTBroker:Wemos_1:contact"}

Switch Wohnzimmer_Licht_Decke "Wohnzimmer Licht Decke [%s]"   	{channel="mqtt:topic:MQTTBroker:Wohnzimmer_Licht_Decke:Power"}
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Tomzk
Beiträge: 55
Registriert: 5. Nov 2019 11:04
Answers: 0

Re: MQTT Beweungsmelder mit ESP8266

Beitrag von Tomzk »

Es klappt :shock: :D
Nun bekomme ich im Log den Bewegungsmelder angezeigt. Ich musste nur noch in der Rule "change from 0 to 1" auf OFF to ON switchen und schon klappt alles.

Vielen vielen Dank :roll:

Benutzeravatar
udo1toni
Beiträge: 13986
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: MQTT Beweungsmelder mit ESP8266

Beitrag von udo1toni »

Prima :)
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten