Hallo,
ich habe mir mit einem ESP8266-01 einen smarten Briefkasten zusammen geschraubt und habe hierzu noch eine/paar Fragen.
Aus dem Wikis habe ich hierzu den Ansatz noch nicht gefunden und manches verstehe ich dort auch nicht.
Es soll hier auch nicht bei dem ersten ESP Device bleiben denn ich möchte mein fhem hier sinnvoll erweitern.
Mein Poolthermometer und die Solarsteuerung soll hier dann auch noch einfliessen.
Ich habe mich für die MQTT2 Version in fhem entschieden und habe mir hierzu in meiner Installation einen MQTT2 Server angelegt.
List Server
Internals:
CONNECTS 45
DEF 1883 global
FD 14
FUUID 5d9cbb8d-f33f-3d5f-9e9e-64a92ba08831c4b9
NAME MQTT2_FHEM_Server
NR 749
PORT 1883
STATE connection
TYPE MQTT2_SERVER
READINGS:
2020-09-19 12:33:27 RETAIN {"/home/data":"2","outTopic":"1","pool/temperatur/pool":"1"}
2020-07-08 14:11:50 lastPublish Hello:
2020-11-19 18:37:13 nrclients 1
2020-11-12 15:19:19 state Initialized
clients:
MQTT2_FHEM_Server_192.168.10.208_61327 1
retain:
/home/data:
ts 1605190794.44956
val 2
outTopic:
ts 1605190794.44956
val 1
pool/temperatur/pool:
ts 1605190794.44956
val 1
Attributes:
autocreate complex
icon mqtt
room MQTT,Test
stateFormat connection
verbose 5
Mit meinem ESP8266-01 schreibe ich die folgenden Topics
- MQTT/briefkasten/startup
- MQTT/briefkasten/post
- MQTT/briefkasten/leerung
Dann habe ich mir in fhem das MQTT2_Device Briefkasten angelegt
List Briefkasten
Internals:
CID arduinoClient
DEF arduinoClient
DEVICETOPIC MQTT_Briefkasten
FUUID 5d9e0375-f33f-3d5f-5570-8671cd15d57f67de
IODev MQTT2_FHEM_Server
LASTInputDev MQTT2_FHEM_Server
MQTT2_FHEM_Server_MSGCNT 404
MQTT2_FHEM_Server_TIME 2020-11-19 19:21:18
MSGCNT 404
NAME MQTT_Briefkasten
NR 750
STATE ???
TYPE MQTT2_DEVICE
READINGS:
2020-11-19 18:37:13 Leerung off
2020-11-19 19:21:18 Post off
2020-11-19 18:37:13 StartUp StartUp
Attributes:
IODev MQTT2_FHEM_Server
readingList MQTT/briefkasten/post:.* Post
MQTT/briefkasten/leerung:.* Leerung
MQTT/briefkasten/startup:.* StartUp
room Buero,MQTT2_DEVICE,Test
suppressReading Leerung
userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long
Die Topics bekommen die folgenden Werte
StartUp = Nachricht
StartUp wenn der ESP eine Verbindung zu fhem aufgebaut hat
Post = Nachricht
on wenn Post in den Briefkasten eingelegt wurde, sonst off. Hier wird nur das erste öffnen übermittelt. Das weitere öffnen wird ignoriert.
Leerung = Nachricht
on wenn der Briefkasten zur Leerung geöffnet wurde sonst off.
Eine Leerung des Briefkasten setzt auch den Topic Post auf
off zurück und das Spiel beginnt von vorne.
Soweit funktioniert auch alles aber...
- Wie kann ich es erreichen, dass im DeviceOverview von dem MQTT Device nicht die ? ? ? angezeigt werden sondern ich hier den Status sehe ob ich Post habe oder nicht vielleicht sogar mit einen Icon ?
- Benötige ich die MQTT Bridge überhaupt oder wird diese nur bei übergreifenden Systemen und bei nicht MQTT2 Devices benötigt ?
- Mein Device hat sich in fhem nicht von alleine angelegt obwohl im MQTT2 Server ich autocreate on hatte. Habe ich hier einen Fehler gemacht ?
Vielen Dank schon mal und viele Grüße
Sven
Da MQTT2_DEVICE generisch ist, muss der Benutzer mit stateFormat entscheiden, welches der Readings prominent angezeigt werden soll.
bridgeRegexp wird dann benoetigt, wenn FHEM die Geraete anhand der MQTT-ClientID nicht ausseinanderhalten kann.
Das ist der Fall bei externen MQTT Server oder bei bridge Geraeten wie zigbee2mqtt.
MQTT2_SERVER legt Geraete automatisch an, wenn eine MQTT-Nachricht eintrifft.
Zusaetzlich darf die autocreate Instanz nicht deaktiviert sein, sie kommt in der standard fhem.cfg mit.
Zitatobwohl im MQTT2 Server ich autocreate on hatte.
Du hast autocreate auf complex gestellt. Der Standard ist simpel (auch wenn das attr nicht explizit gesetzt ist) das ist ohne speziellen Grund die bessere Wahl.
Wobei es nicht Dein angesprochenes Problem ist.
autocreate kannst Du mit
list autocreate
überprüfen.
Zitat von: sven.scherf am 19 November 2020, 20:07:30
userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long
[...]
Benötige ich die MQTT Bridge überhaupt oder wird diese nur bei übergreifenden Systemen und bei nicht MQTT2 Devices benötigt ?
Das userAttr "gehört" zu MQTT_GENERIC_BRIDGE. Das brauchst du in diesem setup in der Tat nicht, sondern nur dann, wenn du entweder einen zweiten MQTT-Kanal von diesem Device woandershin aufbauen wolltest oder eben ein "nicht-MQTT-Device" mit der MQTT-Welt verbinden willst.
(Es sollte aber nicht der Grund sein, warum autocreate nicht ging).
Hallo zusammen,
super mit stateFormat habe ich meine Anzeige hinbekommen :)
Wenn ich nun mein MQTT Device lösche und den MQTT2_Fhem_Server auf simple stelle sollt der MQTT2_Client in fhem angelegt werden wenn ein MQTT Nachricht bei fhem einläuft, richtig ?
Unter welchen Namen ist dies dann zu finden ?
Mit dem ESP-01 stelle ich mit dem folgenden sketch eine Verbindung zu fhem her.
const char* clientname = "Briefkasten";
void reconnect() {
while (!client.connected()) {
Serial.println("MQTT Verbindungsversuch...");
if (client.connect(clientname)) {
Serial.println("MQTT Verbindung hergestellt");
client.publish("MQTT/briefkasten/startup","StartUp");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" retrying in 5 seconds");
delay(5000);
}
}
}
Sollte ich dann einen MQTT2 Client mit dem Namen Briefkasten finden ?
Viele Grüße
Sven
list autocreate
ClientID im sketch gesetzt?
Hallo Otto,
hier der List
Internals:
FUUID 5cbaebf1-f33f-3d5f-ccea-1c1c3a5a1917cefc
NAME autocreate
NOTIFYDEV global
NR 6
NTFY_ORDER 50-autocreate
STATE active
TYPE autocreate
Attributes:
autosave 1
device_room %TYPE
filelog ./log/%NAME-%Y.log
Viele Grüße
Sven
Also autocreate ist active ;)
ZitatUnter welchen Namen ist dies dann zu finden ?
Im Raum MQTT2_DEVICE legt er die Geräte an ...
Zitat von: Beta-User am 20 November 2020, 20:57:04
ClientID im sketch gesetzt?
Zur Erläuterung: MQTT2_SERVER akzeptiert mWn. nur Verbindungen von Geräten, die sich mit ID melden.
Hi,
ja die ClientID ist gesetzt.
Bei dem Verbindungsaufbau mit
if (client.connect(clientname)) { ....
ist der clientname die ClientID in diesem Fall Briefkasten.
Sollte so richtig sein.
Viele Grüße
Sven
...stimmt eigentlich, hatte nur kurz auf dem Handy geschaut...
Kommt das auch auf der seriellen Konsole raus, dass die Verbindung erfolgreich aufgebaut wurde?
Ansonsten auch mal den MQTT2_SERVER auf verbose 5 stellen, dann sieht man ggf. im Log, was da schief läuft.