Sonoff TH16 mit SI7021, Tasmota 7.1.2

Begonnen von tomix, 15 März 2020, 23:16:35

Vorheriges Thema - Nächstes Thema

tomix

Hallo zusammen
Erster Beitrag, falls also am falschen Ort usw. bitte mitteilen. Daraus kann man auch auf meine Erfahrungen mit FHEM schliessen: gegen null.

Wieso FHEM, es gab neue Dachfenster mit Motoren und einem KLF 200 und die Dachfenster möchte ich auf Tastendruck z.B. nur 15 Minuten öffnen, bzw. im Sommer sobald aussen kühler als innen. Aber dazu wohl erst viel später ;-) .
Ich habe also mal auf der Debian Kiste FHEM installiert wie hier beschrieben:
https://fhem.de/fhem_DE.html#Installation
Dann mal damit angefangen:
https://wiki.fhem.de/wiki/Erste_Schritte_in_FHEM
Gut beschrieben und klappte wunderbar.
Zum Anfangen wollte ich den Sonoff TH16 (mit MQTT2) mal einbinden, habe ich nicht hingekriegt. Also mal den KLF 200 ausprobiert, wie hier beschrieben:
https://wiki.fhem.de/wiki/Velux_KLF200
Kein Problem, echt cool.

Nun somit zum Problem. Ich habe für den Sonoff einen MQTT2 Server angelegt oder ich denke ich habe dies zumindest gemacht mit:
define MQTT2_FHEM_Server MQTT2_SERVER 1883 global

In der Tasmota WebUI habe ich MQTT aktiviert, muss ich noch mehr einstellen?  :-\ Nun beim posten realisiert. Den Host eintragen!!! Dann erscheint das Ding zumindest mit ???.

Dann muss ich nun wohl nur das tasmota_1ch+motion+SI7021 template umschreiben, das gibt keine Temperatur und Feuchte aus, aber das Relais lässt sich schalten?
Also mal zurück zu Basic, aber was wird da verlangt:
Specify the unknown parameters for tasmota_basic_state_power1:
Command topic prefix, without trailing /   
info topic prefix, without trailing /   
ack topic prefix, without trailing /

Kann mir da jemand mit einem Beispiel auf die Sprünge helfen?

Aus dem Inhalt des Templates ( https://github.com/mhop/fhem-mirror/blob/master/fhem/FHEM/lib/AttrTemplate/mqtt2.template ) werde ich nicht wirklich schlauer.

Gruss
tomix


Beta-User

Praxisbeispiele zu MQTT2_DEVICE im Wiki kennst du?

Dass die Parameter nicht aufgelöst werden, liegt daran, dass du readingList gelöscht haben dürftest, bitte einfach den tasmota neu starten, dann ist das wieder da, dann das template nochmal anwenden und hier eine RAW-Definition einstellen, wenn ein paar Werte/Readings gekommen sind.

Am besten den Tasmota auch mal updaten, nicht dass da was herkommt/fehlt...
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

tomix

#2
Zitat von: Beta-User am 15 März 2020, 23:46:53
Praxisbeispiele zu MQTT2_DEVICE im Wiki kennst du?
Nur das hier:
https://wiki.fhem.de/wiki/MQTT2_DEVICE

Zitat von: Beta-User am 15 März 2020, 23:46:53
Dass die Parameter nicht aufgelöst werden, liegt daran, dass du readingList gelöscht haben dürftest, bitte einfach den tasmota neu starten, dann ist das wieder da, dann das template nochmal anwenden und hier eine RAW-Definition einstellen, wenn ein paar Werte/Readings gekommen sind.
Ich glaube es ist eigentlich alles da was ich brauche.

Unter Readings steht dies:
Heap 27 2020-03-16 12:47:43
LWT Online 2020-03-16 12:16:55
LoadAvg 19 2020-03-16 12:47:43
MqttCount 4 2020-03-16 12:47:43
POWER 2020-03-16 12:16:55
POWER1 off 2020-03-16 12:47:43
SI7021_Humidity 40.7 2020-03-16 12:47:43
SI7021_Temperature 21.2 2020-03-16 12:47:43
Sleep 50 2020-03-16 12:47:43
SleepMode Dynamic 2020-03-16 12:47:43
StatusSNS_SI7021_Humidity 40.7 2020-03-16 12:50:01
StatusSNS_SI7021_Temperature 21.2 2020-03-16 12:50:01
StatusSNS_TempUnit C 2020-03-16 12:50:01
StatusSNS_Time 2020-03-16T12:50:01 2020-03-16 12:50:01
TempUnit C 2020-03-16 12:47:43
Time 2020-03-16T12:47:43 2020-03-16 12:47:43
...

Unter Attributes steht dann unter readingList:
DVES_44B60B:tele/tasmota_th16/LWT:.* LWT
DVES_44B60B:cmnd/tasmota_th16/POWER:.* POWER
DVES_44B60B:stat/tasmota_th16/STATUS10:.* { json2nameValue($EVENT) }
DVES_44B60B:tele/tasmota_th16/STATE:.* { json2nameValue($EVENT) }
DVES_44B60B:tele/tasmota_th16/SENSOR:.* { json2nameValue($EVENT) }
DVES_44B60B:stat/tasmota_th16/RESULT:.* { json2nameValue($EVENT) }
DVES_44B60B:stat/tasmota_th16/POWER1:.* POWER1


Ziel wäre nun mal die Temperatur und Feuchte aufzuzeichnen (Plot), POWER1 schalten zu können und den/die GPIO (Taster) auslesen zu können (das wäre das wichtigste). Ich brauche vor allem mal einen Taster als Eingang (Dachfenster für 15 Minuten öffnen).

Was ist eine RAW-Definition?

Gruss
tomix

Beta-User

So, "extra für dich überarbeitet": https://wiki.fhem.de/wiki/MQTT2-Module_-_Praxisbeispiele#attrTemplate

Statt Suchmaschine: https://wiki.fhem.de/wiki/Raw_definition

Du solltest dich damit beschäftigen, wo der Unterschied zwischen deiner Konfiguration und der mit jsonMap + stat/tasmota_th16/POWER1 state besteht.

Mach mit "RAW-Definition auch mal eine weitere Kopie von dem Ding und wende darauf das "tasmota_1ch+motion+SI7021" an. Das macht was ähnliches wie das, was du willst, aber dazu mußt du erst die firmware so konfigurieren, dass die auch Tastendrücke übermittelt.



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

tomix

Zitat von: Beta-User am 16 März 2020, 16:09:50
Mach mit "RAW-Definition auch mal eine weitere Kopie von dem Ding und wende darauf das "tasmota_1ch+motion+SI7021" an.
Sorry wenn ich jetzt mit einer absoluten Anfängerfrage komme. Beim bestehend Device unten auf "Raw Definition" geklickt:

defmod MQTT2_DVES_44B60B MQTT2_DEVICE DVES_44B60B
attr MQTT2_DVES_44B60B IODev MQTT2_FHEM_Server
attr MQTT2_DVES_44B60B readingList DVES_44B60B:tele/tasmota_th16/LWT:.* LWT\
DVES_44B60B:cmnd/tasmota_th16/POWER:.* POWER\
DVES_44B60B:stat/tasmota_th16/STATUS10:.* { json2nameValue($EVENT) }\
DVES_44B60B:tele/tasmota_th16/STATE:.* { json2nameValue($EVENT) }\
DVES_44B60B:tele/tasmota_th16/SENSOR:.* { json2nameValue($EVENT) }\
DVES_44B60B:stat/tasmota_th16/RESULT:.* { json2nameValue($EVENT) }\
DVES_44B60B:stat/tasmota_th16/POWER1:.* POWER1
attr MQTT2_DVES_44B60B room MQTT2_DEVICE

setstate MQTT2_DVES_44B60B 2020-03-16 21:12:48 Heap 27
setstate MQTT2_DVES_44B60B 2020-03-16 18:17:42 LWT Online
setstate MQTT2_DVES_44B60B 2020-03-16 21:12:48 LoadAvg 19
setstate MQTT2_DVES_44B60B 2020-03-16 21:12:48 MqttCount 5
setstate MQTT2_DVES_44B60B 2020-03-16 18:17:42 POWER
setstate MQTT2_DVES_44B60B 2020-03-16 21:12:48 POWER1 off
setstate MQTT2_DVES_44B60B 2020-03-16 21:12:48 SI7021_Humidity 45.5
setstate MQTT2_DVES_44B60B 2020-03-16 21:12:48 SI7021_Temperature 21.5
setstate MQTT2_DVES_44B60B 2020-03-16 21:12:48 Sleep 50
setstate MQTT2_DVES_44B60B 2020-03-16 21:12:48 SleepMode Dynamic
setstate MQTT2_DVES_44B60B 2020-03-16 21:16:01 StatusSNS_SI7021_Humidity 46.0
setstate MQTT2_DVES_44B60B 2020-03-16 21:16:01 StatusSNS_SI7021_Temperature 21.5
...


Wie klappt das nun mit der Kopie? Ich habe mal "defmod MQTT2_DVES_44B60B_TEST MQTT2_DEVICE DVES_44B60B" ins Eingabefeld eingegeben und dann unten wieder auf "Raw Definition" und dort dann alles gelöscht und dort dann folgendes eingefügt:

attr MQTT2_DVES_44B60B_TEST IODev MQTT2_FHEM_Server
attr MQTT2_DVES_44B60B_TEST readingList DVES_44B60B:tele/tasmota_th16/LWT:.* LWT\
DVES_44B60B:cmnd/tasmota_th16/POWER:.* POWER\
DVES_44B60B:stat/tasmota_th16/STATUS10:.* { json2nameValue($EVENT) }\
DVES_44B60B:tele/tasmota_th16/STATE:.* { json2nameValue($EVENT) }\
DVES_44B60B:tele/tasmota_th16/SENSOR:.* { json2nameValue($EVENT) }\
DVES_44B60B:stat/tasmota_th16/RESULT:.* { json2nameValue($EVENT) }\
DVES_44B60B:stat/tasmota_th16/POWER1:.* POWER1
attr MQTT2_DVES_44B60B_TEST room MQTT2_DEVICE


Das führt dann zu folgender "Raw Definition":

defmod MQTT2_DVES_44B60B_TEST MQTT2_DEVICE DVES_44B60B
attr MQTT2_DVES_44B60B_TEST IODev MQTT2_FHEM_Server
attr MQTT2_DVES_44B60B_TEST readingList DVES_44B60B:tele/tasmota_th16/LWT:.* LWT\
DVES_44B60B:cmnd/tasmota_th16/POWER:.* POWER\
DVES_44B60B:stat/tasmota_th16/STATUS10:.* { json2nameValue($EVENT) }\
DVES_44B60B:tele/tasmota_th16/STATE:.* { json2nameValue($EVENT) }\
DVES_44B60B:tele/tasmota_th16/SENSOR:.* { json2nameValue($EVENT) }\
DVES_44B60B:stat/tasmota_th16/RESULT:.* { json2nameValue($EVENT) }\
DVES_44B60B:stat/tasmota_th16/POWER1:.* POWER1
attr MQTT2_DVES_44B60B_TEST room MQTT2_DEVICE

setstate MQTT2_DVES_44B60B_TEST 2020-03-16 21:17:48 Heap 26
setstate MQTT2_DVES_44B60B_TEST 2020-03-16 21:17:48 LoadAvg 19
setstate MQTT2_DVES_44B60B_TEST 2020-03-16 21:17:48 MqttCount 5
setstate MQTT2_DVES_44B60B_TEST 2020-03-16 21:17:48 POWER1 off
setstate MQTT2_DVES_44B60B_TEST 2020-03-16 21:17:48 SI7021_Humidity 45.0
setstate MQTT2_DVES_44B60B_TEST 2020-03-16 21:17:48 SI7021_Temperature 21.5
...


Verhält sich auch sonst gleich wie "MQTT2_DVES_44B60B" nur bei "set MQTT2_DVES_44B60B_TEST attrTemplate kann ich nun aber nur tasmota_basic und tasmota_basic_state_power1 auswählen und Diverses anderes aber nicht all die Tasmota-Einträge. Das verstehe ich nun nicht.

Gruss
tomix

tomix


defmod MQTT2_DVES_44B60B_TEST MQTT2_DEVICE DVES_44B60B
attr MQTT2_DVES_44B60B_TEST IODev MQTT2_FHEM_Server
attr MQTT2_DVES_44B60B_TEST autocreate 0
attr MQTT2_DVES_44B60B_TEST comment NOTE: For on-for-timer SetExtensions are used. You may add on-for-timer option running on the device. The following is limited to 1h max duration, but will not affect future simple "on" commands:<br>on-for-timer {my $duration = $EVTPART1*10;; 'cmnd/cmnd/tasmota_th16/Backlog POWER1 1;; delay '.$duration.';; POWER1 0'}<br>See the "Praxisbeispiele" in the wiki for "pulseTime1" alternative option and it's restrictions.
attr MQTT2_DVES_44B60B_TEST devStateIcon {\
  my $state = lc ReadingsVal($name, "POWER1", "off");;\
  "<div>" . FW_makeImage(lc ReadingsVal($name, "state", "off"))\
    . sprintf(\
    "&nbsp;;&nbsp;;[Temp: %.1f°C / Feucht: %.0f%%]",\
    ReadingsVal($name,"SI7021_Temperature",0),\
    ReadingsVal($name,"SI7021_Humidity",0)\
    ) . "</div>"\
  }
attr MQTT2_DVES_44B60B_TEST icon hue_filled_outlet
attr MQTT2_DVES_44B60B_TEST jsonMap POWER1:0 POWER2:0 POWER3:0 POWER4:0 Dimmer:0 Channel_0:0 Channel_1:0 Channel_2:0 Channel_3:0 Channel_4:0 HSBColor:0 Color:0
attr MQTT2_DVES_44B60B_TEST model tasmota_basic_state_power1
attr MQTT2_DVES_44B60B_TEST readingList tele/tasmota_th16/LWT:.* LWT\
  tele/tasmota_th16/STATE:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota_th16/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota_th16/INFO.:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  tele/tasmota_th16/UPTIME:.* { json2nameValue($EVENT,'',$JSONMAP) }\
  stat/tasmota_th16/POWER1:.* state\
  stat/tasmota_th16/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr MQTT2_DVES_44B60B_TEST room MQTT2_DEVICE
attr MQTT2_DVES_44B60B_TEST setList off:noArg    cmnd/tasmota_th16/POWER1 0\
  on:noArg     cmnd/tasmota_th16/POWER1 1\
  toggle:noArg cmnd/tasmota_th16/POWER1 2\
  setOtaUrl:textField cmnd/tasmota_th16/OtaUrl $EVTPART1\
  upgrade:noArg   cmnd/tasmota_th16/upgrade 1
attr MQTT2_DVES_44B60B_TEST setStateList on off toggle

Nun sieht es mal so aus wie ich will. Das mit dem Icon geht wohl auch einfacher (muss mich da mal einlesen).

Dann mal zum Lötkolben greifen und einen Taster am TH16 ergänzen (zum Glück alles da, um trotz Corona basteln zu können).

Gruss
tomix

tomix

Die RAW Definition vom Logging noch:

defmod MQTT2_DVES_44B60B_TEST_LOG FileLog ./log/MQTT2_DVES_44B60B_TEST-%Y-%m.log MQTT2_DVES_44B60B_TEST:SI7021_Humidity:.*|MQTT2_DVES_44B60B_TEST:SI7021_Temperature:.*

setstate MQTT2_DVES_44B60B_TEST_LOG active
setstate MQTT2_DVES_44B60B_TEST_LOG 2020-03-21 23:00:35 linesInTheFile 1850

Plot klappt auch wunderbar, aber ich zerschiess mir immer alles wenn ich den Taster an GPIO2 einrichten will. Fang nun nochmals neu an um die Einstellungen speichern zu können.

Gruss
tomix

tomix

Also mal weiter gewurstelt. Das ganze ist nicht schöne, aber liefert mal was brauchbares.
In der WebGUI Tasmota wie folgt eingerichtet
Gerätetyp -> Generic (0)
GPIO0 -> Button1
GPIO2 -> Button2
GPIO12 -> Relay1
GPIO13 -> Led1i
GPIO14 -> SI7021
GPIO15 -> Relay2 (virtuell)

Dann noch via Konsole im WebGUI:

cmnd/sonoff/Longitude 8....
cmnd/sonoff/Latitude 47....

ButtonTopic tasmota_th16_button
Backlog SetOption1 1; SetOption32 15
Rule1
on Power2#State do Publish cmnd/tasmota_th16_button/POWER2 DOUBLE endon
Rule1 1


Dann erhalte ich im Filelog für DOUBLE, HOLD, TOGGLE. Bei TOGGLE schaltet das virtuelle Relais 2. Aber es lässt sich nicht verhindern, dass einmal oder zwei mal drücken ein Relais schaltet (also halt ein virtuelles).

Nun soll mal auf TOGGLE reagiert werden.

stratege-0815

Hallo zusammen,
Ich möchte hier ebenfalls ein sonoff TH16 mit Si7021 in Betrieb nehmen. WebGUI vom sonoff zeigt auch alles, aber offenbar gibt es dafür noch kein MQTT Template.
Ohne angewendetes Template bekomme ich auch zig Werte.

Unter anderem:


sn_SI7021_DewPoint 15.0 2021-07-01 14:23:20
sn_SI7021_Humidity 65.3 2021-07-01 14:23:20
sn_SI7021_Temperature 21.8 2021-07-01 14:23:20


Aber wie geht es dann weiter?


Beta-User

Na ja, kommt ja auch darauf an, was du am Ende haben willst...?

Es gibt eines, das zusätzlich einen Motion-Anteil hat (tasmota_1ch+motion+SI7021). Das könnte ja ein Startpunkt sein?

Wenn es nur darum geht, die Readings umzubenennen, musst du halt die $JSONMAP-Variante von json2nameValue() verwenden und dann das jsonMap-Attribut passend füllen. Aber ohne (RAW-) list ist es schwierig, da was konkreteres dazu zu sagen, evtl. wäre auch hilfreich zu wissen, welche Info über welchen Topic reinkommt, wenn da "zu viel" oder zu oft was reinkommt.
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

stratege-0815

Ich schreibe am Wochenende noch mal ausführlicher, bin gerade so zwischen Tür und Angel...
(sorry, dass ich das hier so unvollständig abgeladen habe)