Multisensor liefert alle Daten in FHEM... wie mache ich weiter

Begonnen von Meister_Petz, 11 Februar 2021, 12:25:02

Vorheriges Thema - Nächstes Thema

Meister_Petz

Moin,

wie ist die sinnvollste Herangehensweise?

mein gebastelter Sensor ESP8266 (im Gewächshaus) liefert mir über MQTT folgende Werte:
LufttemperaturInnen
LufttemperaturAußen
Wassertemperatur
Luftfeuchtigkeit relativ
Luftfuechtigkeit absolut
Helligkeit
etc, etc...

Im Moment wird das als EIN Gerät erkannt und die Werte sind alle unbestimmten Typs und unbestimmter Kategorie. Stimmt ja auch erstmal so.

Wie mache ich nun weiter?
Kann ich für die Readings schon einen vorgefertigt Typ hinterlegen? z.B. LufttemperaturInnen ist Typ Temperatur?

Außerdem möchte ich das in mehrere Devices aufteilen. Mach ich das mit Dummys, denen ich spezielle Readings zuweise oder macht man das eher anders?

Danke

Petz


Beta-User

Kannst du mitte mal ein RAW-list von dem Ding (MQTT2_DEVICE, nehme ich an...) einstellen?
Je nach Art des Übermittelungswegs gibt es unterschiedliche Möglichkeiten.
Das hier klingt nach "Klartextübermittlung" (ohne JSON). Dann wäre eine Variante, das RAW zu splitten und je ein eigenes (MQTT2_DEVICE-)Device zu verwenden.

Wenn JSON: readingsProxy.

(Warum muss man das überhaupt aufspalten? stateFormat...?)

PS: dummy sind DAS LETZTE, auf das ich hier kommen würde...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Meister_Petz

Zitat von: Beta-User am 11 Februar 2021, 12:33:45
PS: dummy sind DAS LETZTE, auf das ich hier kommen würde...
Genau deshalb frage ich ;-)

Der Sensor wird demnächst noch ein paar mehr Daten liefern, aber ich denke, das wird keinen Unterschied machen. Die Trennung ist auch dafür gedacht um einen Teil der Daten als einzlene Geräte an Homekit zu übergeben.
defmod MQTT2_MQTT_MultiSensor_Greenhouse MQTT2_DEVICE MQTT_MultiSensor_Greenhouse
attr MQTT2_MQTT_MultiSensor_Greenhouse IODev MQTTBroker2
attr MQTT2_MQTT_MultiSensor_Greenhouse readingList MQTT_MultiSensor_Greenhouse:TemperaturLuft:.* TemperaturLuft\
MQTT_MultiSensor_Greenhouse:HumidityRel:.* HumidityRel\
MQTT_MultiSensor_Greenhouse:HumidityAbs:.* HumidityAbs\
MQTT_MultiSensor_Greenhouse:TemperaturWasser:.* TemperaturWasser\
MQTT_MultiSensor_Greenhouse:Helligkeit:.* Helligkeit
attr MQTT2_MQTT_MultiSensor_Greenhouse room MQTT2_DEVICE

setstate MQTT2_MQTT_MultiSensor_Greenhouse 2021-02-11 12:59:19 Helligkeit 225
setstate MQTT2_MQTT_MultiSensor_Greenhouse 2021-02-11 12:59:18 HumidityAbs 7.67
setstate MQTT2_MQTT_MultiSensor_Greenhouse 2021-02-11 12:59:18 HumidityRel 34.80
setstate MQTT2_MQTT_MultiSensor_Greenhouse 2021-02-11 12:59:18 TemperaturLuft 24.20
setstate MQTT2_MQTT_MultiSensor_Greenhouse 2021-02-11 12:59:19 TemperaturWasser 24.19
setstate MQTT2_MQTT_MultiSensor_Greenhouse 2021-02-11 12:09:18 subscriptions Steckdose/Pumpe1 Steckdose/Pumpe2 Steckdose/UVC

Beta-User

Also:

So könnte man das auf 2 oder mehr Geräte aufteilen (wenn man "muss", ich kann das für homekit nicht beantworten):
defmod MQTT2_MQTT_MultiSensor_Greenhouse MQTT2_DEVICE MQTT_MultiSensor_Greenhouse
attr MQTT2_MQTT_MultiSensor_Greenhouse IODev MQTTBroker2
attr MQTT2_MQTT_MultiSensor_Greenhouse readingList \
  MQTT_MultiSensor_Greenhouse:HumidityRel:.* HumidityRel\
  MQTT_MultiSensor_Greenhouse:HumidityAbs:.* HumidityAbs\
  MQTT_MultiSensor_Greenhouse:TemperaturWasser:.* TemperaturWasser\
  MQTT_MultiSensor_Greenhouse:Helligkeit:.* Helligkeit

defmod MQTT2_MQTT_MultiSensor_Greenhouse1 MQTT2_DEVICE
attr MQTT2_MQTT_MultiSensor_Greenhouse1 IODev MQTTBroker2
attr MQTT2_MQTT_MultiSensor_Greenhouse1 readingList MQTT_MultiSensor_Greenhouse:TemperaturLuft:.* TemperaturLuft

(den Namen kannst du beliebig wählen).

Was ich DRINGEND empfehle zu ändern ist die sehr flache Topic-Struktur. Dass die CID (MQTT_MultiSensor_Greenhouse) als Unterscheidungsmerkmal dient, ist eine Besonderheit des MQTT2_SERVER, darauf sollte man sich nicht verlassen, also füge da mind. noch eine Unterscheidungsebene in den Topic ein!

Z.B. beginne alles mit "Greenhouse/":Greenhouse/HumidityRel
(Das wäre im Sketch für den ESP zu ändern)

Bzgl. Umbenennen, das ginge auch erweitert auf das Reading (dann erkennt es die Sprachsteuerung ggf. automatisch...) und ohne den CID-Kenner, aber erweiterter Topic-Struktur dann so:defmod Greenhouse_Airtemp MQTT2_DEVICE
attr Greenhouse_Airtemp IODev MQTTBroker2
attr Greenhouse_Airtemp readingList Greenhouse/TemperaturLuft:.* temperature

Hoffe, das Prinzip wir damit etwas klarer?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Meister_Petz

Das hilft mir definitiv weiter, DANKE!

werds gleich testen

DeeSPe

Für HomeKit ist es möglich das homebridgeMapping so zu erstellen dass für ein FHEM-Gerät mehrere HomeKit-Geräte angezeigt werden.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Meister_Petz

Ich verzweifle so ein bisschen an dem MQTT2_DEVICE und der readingList

Hab die MQTT Nachricht nun in json umgebaut und das Topic "vertieft"

Topic: Greenhouse
{"Airtemp": 24.40,"HumRel": 34.20,"HumAbs": 7.63,"Watertemp": 24.63,"Lightlevel": 225,"Round": 19}


Das ist nun der Multisensor
defmod MQTT2_MultiSensor_Greenhouse MQTT2_DEVICE MultiSensor_Greenhouse
attr MQTT2_MultiSensor_Greenhouse IODev MQTTBroker2
attr MQTT2_MultiSensor_Greenhouse readingList MultiSensor_Greenhouse:Greenhouse:.* { json2nameValue($EVENT) }
attr MQTT2_MultiSensor_Greenhouse room MQTT2_DEVICE

setstate MQTT2_MultiSensor_Greenhouse 2021-02-11 16:53:57 Airtemp 24.00
setstate MQTT2_MultiSensor_Greenhouse 2021-02-11 16:53:57 HumAbs 7.68
setstate MQTT2_MultiSensor_Greenhouse 2021-02-11 16:53:57 HumRel 35.20
setstate MQTT2_MultiSensor_Greenhouse 2021-02-11 16:53:57 Lightlevel 216
setstate MQTT2_MultiSensor_Greenhouse 2021-02-11 16:53:57 Watertemp 24.31
setstate MQTT2_MultiSensor_Greenhouse 2021-02-11 16:53:57 msgNr 81
setstate MQTT2_MultiSensor_Greenhouse 2021-02-11 16:54:07 subscriptions Steckdose/Pumpe1 Steckdose/Pumpe2 Steckdose/UVC


Das ist das MQTT Device für die Lufttemperatur
defmod Greenhouse_Airtemp MQTT2_DEVICE
attr Greenhouse_Airtemp IODev MQTTBroker2
attr Greenhouse_Airtemp readingList Greenhouse/Airtemp:.* Airtemp
attr Greenhouse_Airtemp room MQTT2_DEVICE


Ich geh davon aus, dass ich die readingList anpassen muss, aber mir gehen die Ideen aus. Das hab ich schon probiert:

attr Greenhouse_Airtemp readingList MultiSensor_Greenhouse:Greenhouse:Airtemp:.* { json2nameValue($EVENT) }
attr Greenhouse_Airtemp readingList MultiSensor_Greenhouse:Greenhouse/Airtemp.* { json2nameValue($EVENT) }
attr Greenhouse_Airtemp readingList Greenhouse:Airtemp:.* { json2nameValue($EVENT) }
attr Greenhouse_Airtemp readingList Greenhouse/Airtemp/.* { json2nameValue($EVENT) }
attr Greenhouse_Airtemp readingList Greenhouse/Airtemp.* { json2nameValue($EVENT) }


Im Monitor sehen die Meldungen so aus:
2021-02-11 16:56:37 MQTT2_DEVICE MQTT2_MultiSensor_Greenhouse Airtemp: 24.00
2021-02-11 16:56:37 MQTT2_DEVICE MQTT2_MultiSensor_Greenhouse HumAbs: 7.68
2021-02-11 16:56:37 MQTT2_DEVICE MQTT2_MultiSensor_Greenhouse Lightlevel: 217
2021-02-11 16:56:37 MQTT2_DEVICE MQTT2_MultiSensor_Greenhouse Watertemp: 24.31
2021-02-11 16:56:37 MQTT2_DEVICE MQTT2_MultiSensor_Greenhouse HumRel: 35.20
2021-02-11 16:56:57 MQTT2_DEVICE MQTT2_MultiSensor_Greenhouse Watertemp: 24.31
2021-02-11 16:56:57 MQTT2_DEVICE MQTT2_MultiSensor_Greenhouse msgNr: 90


Beta-User

MAn. tust du dir bei dem, was du vorhast mit JSON keinen Gefallen. Unterstellt, das sendet nicht ununterbrochen Daten, würde ich das wieder "Klartext" senden lassen, oder eben den Weg gehen, den @DeeSPe vorgeschlagen hat und das HomeBridgeMapping entsprechend ausgestalten...

Die Alternative ist jsonMap: Immer die Elemente, die man nicht haben will nach ":0" mappen. In den attrTemplate zu Tasmota findest du dazu einige Beispiele, die readingList ist dann bei allen einheitlich:
attr <devicenamen> readingList MultiSensor_Greenhouse:Greenhouse:.* { json2nameValue($EVENT,'',$JSONMAP) }

Ist aber ehrlich gesagt eher schwierig, so als Direkteinstieg...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Meister_Petz

Zitat von: Beta-User am 11 Februar 2021, 17:09:16
MAn. tust du dir bei dem, was du vorhast mit JSON keinen Gefallen.
Und ich hab gedacht ich mach das "sauber" ;-)

Aber der ESP ist ja schnell zurück geflasht

Danke!

Meister_Petz