Smarter Briefkasten oder Wassermelder

Begonnen von sven.scherf, 19 November 2020, 20:07:30

Vorheriges Thema - Nächstes Thema

sven.scherf

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




Raspi 3 mit CUL Stick 433/868MHZ, Homematic

rudolfkoenig

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.

Otto123

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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

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).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

sven.scherf

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
Raspi 3 mit CUL Stick 433/868MHZ, Homematic

Otto123

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

sven.scherf

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
Raspi 3 mit CUL Stick 433/868MHZ, Homematic

Otto123

Also autocreate ist active ;)
ZitatUnter welchen Namen ist dies dann zu finden ?
Im Raum MQTT2_DEVICE legt er die Geräte an ...
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

sven.scherf

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




Raspi 3 mit CUL Stick 433/868MHZ, Homematic

Beta-User

...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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files