mqtt2.template: bugs, Fragen, Anregungen

Begonnen von Beta-User, 15 Dezember 2018, 11:44:43

Vorheriges Thema - Nächstes Thema

Beta-User

Zitat von: Otto123 am 04 März 2020, 10:16:42
@Beta-User Kannst Du erklären was Du meinst? Was soll passieren / getestet werden?
Es soll am Ende schlicht (kommentarlos) "nichts" passieren, wenn irgendeine Info über (bei dir:) stat/tasmota_A52F4C/RESULT reinkommt... Das sollte über die leere Perl-Anweisung gehen ({ }).
Wir bekommen die Info ja über den jeweiligen POWERx-Zweig, die wir  brauchen.

Beim Schreiben merke ich: Das stimmt zwar für die "einfachen" on/off-Devices, aber z.B. nicht für die dimmbaren oder rgbw-Geräte...
Grübel... Egal wie man es macht, irgendein Haken ist immer, "tele" mit "{}" abzuschalten macht vermutlich keinen Sinn, da dann wohl andere - erwünschte - Infos fehlen.

Wenn jemand eine zündende Idee hat (und meine unausgegorenen Gedanken nachvollziehen konnte), bitte um Info bzw. konstruktive Vorschläge, ansonsten drehe ich das irgendwann am späteren Nachmittag (nur betreffend die {}-Anweisungen zu "stat") wieder (teilweise, wenn sich "komplexere Geräte" einfach identifizieren/separieren lassen?) zurück.

Zitat von: Eisix am 04 März 2020, 10:34:02
Musste ich korrigieren dann ging es wieder.
Auch hier die Empfehlung, jsonMap nicht anzupassen, sondern den richtigen Topic für state zu abbonieren. In diese Richtung:

   jsonMap    POWER1:0
[...]
   stat/Server/POWER1:.* state\
[...]


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

Otto123

#226
Vielleicht nochmal für die Templatetester ;)
Eine aktuelle Datei unterhalb von ./FHEM/ aus dem SVN holen und die alte sichern :)
defmod c3 cmdalias pmupdate .* AS {\
  my ($e,$g) = (undef,(split(" ",$EVENT))[0]);;\
  if (defined $g)\
  {\
    $e = qx(mkdir -p ./restoreDir/pm/"$year-$month-$mday"/FHEM/);;\
    $e = qx(cp ./FHEM/$g ./restoreDir/pm/"$year-$month-$mday"/FHEM/);;\
    qx(wget -qO ./FHEM/$g https://svn.fhem.de/trac/export/HEAD/trunk/fhem/FHEM/$g)\
  } else {\
    $e = "use pmupdate Filename inside ./FHEM/"\
  }\
  return $e ? $e : "./FHEM/$g backuped and new loaded from SVN\nreload $g or shutdown restart to apply\nfor Templates use {AttrTemplate_Initialize()}"\
}

Dann einfach
pmupdate lib/AttrTemplate/mqtt2.template

Man kann die universelle Variante natürlich auch fest verdrahten und {AttrTemplate_Initialize()} gleich anhängen.
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

Otto123

#227
Zitat von: Beta-User am 04 März 2020, 10:38:59
Es soll am Ende schlicht (kommentarlos) "nichts" passieren, wenn irgendeine Info über (bei dir:) stat/tasmota_A52F4C/RESULT reinkommt... Das sollte über die leere Perl-Anweisung gehen ({ }).
Ich sage mal so: Mein Test (und mein Verständnis)
Mit jsonMap POWER1:0 und stat/tasmota_A52F4C/RESULT {json2nameValue($EVENT,'',$JSONMAP)}
2020-03-04_11:35:19 MQTT2_DVES_A52F4C set_off
2020-03-04_11:35:19 MQTT2_DVES_A52F4C off
2020-03-04_11:35:20 MQTT2_DVES_A52F4C set_on
2020-03-04_11:35:20 MQTT2_DVES_A52F4C on

Ohne jsonMap POWER1:0
2020-03-04_11:37:21 MQTT2_DVES_A52F4C set_off
2020-03-04_11:37:21 MQTT2_DVES_A52F4C POWER1: off
2020-03-04_11:37:21 MQTT2_DVES_A52F4C off
2020-03-04_11:37:22 MQTT2_DVES_A52F4C set_on
2020-03-04_11:37:23 MQTT2_DVES_A52F4C POWER1: on
2020-03-04_11:37:23 MQTT2_DVES_A52F4C on

Ohne jsonMap POWER1:0 und stat/tasmota_A52F4C/RESULT {}
2020-03-04_11:38:01 MQTT2_DVES_A52F4C set_off
2020-03-04_11:38:01 MQTT2_DVES_A52F4C off
2020-03-04_11:38:02 MQTT2_DVES_A52F4C set_on
2020-03-04_11:38:02 MQTT2_DVES_A52F4C on


Ergo POWER1:0 knipst das Result weg, RESULT {} knipst das Result weg. Erscheint mir also wie: doppelt hält besser :)

Aber wie Du schon sagst, das ist eine einfacher Schalter. Ein off/on Zyklus erzeugt in der Konsole:
11:45:40 MQT: stat/tasmota_A52F4C/RESULT = {"POWER1":"off"}
11:45:40 MQT: stat/tasmota_A52F4C/POWER1 = off
11:45:41 MQT: stat/tasmota_A52F4C/RESULT = {"POWER1":"on"}
11:45:41 MQT: stat/tasmota_A52F4C/POWER1 = on

Nach meinem Verständnis, kann man die Rückmeldung also mit einem von Beiden bekommen:
stat/tasmota_A52F4C/POWER1:.* state
  stat/tasmota_A52F4C/RESULT:.* { json2nameValue($EVENT,'',$JSONMAP) }

Mein Bauchgefühl sagt mir: Es ist nicht gut die RESULT Meldungen komplett weg zu werfen.
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

Es gibt auch einen neue Perl-Routine Svn_GetFile() (in fhem.pl, denke ich), die das ganze vereinfachen kann. Ungetestet:
{ Svn_GetFile("FHEM/lib/AttrTemplate/mqtt2.template", "FHEM/lib/AttrTemplate/mqtt2.template", sub(){ AttrTemplate_Initialize() }) }



Zu dem "doppelt genäht": über die "tele"-Schiene kommt mMn. auch "irgendwann" und "immer wieder" ein JSON mit POWER1. Das wird über jsonMap auch noch mit "ausgeknipst", und dieser Teil ist mMn. ein "Muß", es ist also nicht doppelt, sondern "dreifach genäht".

Ergänzend: Wenn man mit dem hier arbeitet
stat/tasmota_A52F4C/RESULT:.* { json2nameValue($EVENT,'stat_',$JSONMAP) }
kann man jsonMap so erweitern, dass man die gewünschten (scheinbar) _zusätzlichen_ Readings auswertet - das würde dann - vom Zeitstempel her gedacht - vermutlich passen; das jsonMap wäre aber natürlich zu erweitern auf alle relevanten Readings, die dann auch diesen Präfix haben... Deswegen hatte ich vorhin geschrieben, dass alles dann sehr viel komplexer wird und indirekt die Frage gestellt, ob man nicht besser den "tele"-Zweig (teilweise) ausknippst - was aber dann dort einen Präfix und passende jsonMap-Einträge erfordern würde.

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

Otto123

Das {AttrTemplate_Initialize()} hat irgendwie Seiteneffekte, da tritt dann sowas auf wie im Bild

Also man kann zählen wie oft man die Funktion ausgeführt hat.
Ein Neustart behebt dies ;)
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

marvin78

Zitat von: Otto123 am 04 März 2020, 14:35:03
Das {AttrTemplate_Initialize()} hat irgendwie Seiteneffekte, da tritt dann sowas auf wie im Bild

Also man kann zählen wie oft man die Funktion ausgeführt hat.
Ein Neustart behebt dies ;)

Das ist mir auch aufgefallen. Auch fügt es Leeraum im Device ein. Ein Neustart macht wieder alles gut.

Otto123

einen Leerraum pro Start  ::) der dann mit den Hilfetexten in der gleichen Anzahl gefüllt wird - wenn man ein Template wählt.
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

... ist ja lustig, aber ich glaube kaum, dass das ein bug in meinen templates ist  ;D ...
(Jedenfalls so lange, bis mir jemand das Gegenteil beweist...)

(Im Ernst: Der Effekt scheint neu zu sein, das war früher nicht so, jedenfalls soweit ich mich entsinnen kann).
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

Otto123

"Wozu" ? ist eigentlich der doppelte Text der zurückgegeben wird?
<script type="text/javascript">
    $(document).ready(function() {
      $("select.set").change(attrAct);
      function
      attrAct(){
        if($("select.set").val() == "attrTemplate") {
          $('<div id="attrTemplateHelp" class="makeTable help"></div>')
                .insertBefore("div.makeTable.internals");
          $("select.select_widget[informid$=attrTemplate]").change(function(){
            var cmd = "{AttrTemplate_Help('"+$(this).val()+"')}";
            FW_cmd(FW_root+"?cmd="+cmd+"&XHR=1", function(ret) {
              $("div#attrTemplateHelp").html(ret);
            });
          });
        } else {
          $("div#attrTemplateHelp").remove();
        }
      }
      attrAct();
    });
  </script>
  <script type="text/javascript">
    $(document).ready(function() {
      $("select.set").change(attrAct);
      function
      attrAct(){
        if($("select.set").val() == "attrTemplate") {
          $('<div id="attrTemplateHelp" class="makeTable help"></div>')
                .insertBefore("div.makeTable.internals");
          $("select.select_widget[informid$=attrTemplate]").change(function(){
            var cmd = "{AttrTemplate_Help('"+$(this).val()+"')}";
            FW_cmd(FW_root+"?cmd="+cmd+"&XHR=1", function(ret) {
              $("div#attrTemplateHelp").html(ret);
            });
          });
        } else {
          $("div#attrTemplateHelp").remove();
        }
      }
      attrAct();
    });
  </script>
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

rudolfkoenig

ZitatDas {AttrTemplate_Initialize()} hat irgendwie Seiteneffekte, da tritt dann sowas auf wie im Bild
Habs gefixt.

DS_Starter

Hallo zusammen,

habe kürzlich ein Tasmota 8 channel über  MQTT2_DEVICE eingebunden und dafür das Template tasmota_8ch_unified_icon verwendet.
Hat alles prima funktioniert und durch die Templates vereinfacht sich die Einrichtung. Super Sache ... und vielen Dank für die ständige Weiterentwicklung !

Kleine Anmerkung: In dem Template tasmota_8ch_unified_icon hat sich in Zeile 1082 womöglich ein kleiner Cut&Paste Fehler eingeschlichen.

attr DEVICE stateFormat LWT\
<a href="http://IPAddress" target="_blank">Hostname</a>\
<a href="http://ipaddress" target="_blank">IPAddress</a>\
<br>\
1:POWER1\
....

Sollte sicherlich sein:

<a href="http://Hostname" target="_blank">Hostname</a>\

Habe es bei mir so abgeändert und es wird dann auch der Hostname verwendet.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Beta-User

Zitat von: DS_Starter am 05 März 2020, 23:00:51
Hat alles prima funktioniert und durch die Templates vereinfacht sich die Einrichtung. Super Sache ... und vielen Dank für die ständige Weiterentwicklung !
Danke für die Rückmeldung  :) ! (Danke zurück auch für deine Aktivitäten - in jüngster Zeit fand ich das mit Synology-Kalender2holiday besonders nett; der code für myUtils kam mir dabei bekannt vor... ;D )

Danke auch für den Hinweis auf dieses "doppelte Lottchen", die zweite Zeile ist mir versehentlich "durchgerutscht", update ist im svn (ich hätte das <br> noch dahinter ziehen können, und eigentlich ist auch webCmd völlig überflüssig, oder...?).

Die erste Zeile war allerdings schon so so beabsichtigt, und sollte auch funktionieren:
- Es werden ja von der firmware beide Infos geliefert;
- solange der dns-Server funktioniert, ist es auch funktional gleichwertig, ob man auf die IP oder den Namen verlinkt, abgesehen davon, dass eben vorab der dns-Server "behelligt" wird;
- erst wenn der dns-Server nicht funktioniert, sieht man den Unterschied: die jetzige Variante im svn liefert trotzdem noch den "richtigen" Link, die Variante mit Hostname als target sollte einen timeout bringen.

Oder übersehe ich schon wieder was?
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

DS_Starter

#237
Hallo Beta-User,

die eingecheckte Version passt ja, alles gut. Ich dachte du wolltest dem Nutzer sowohl einen Link über Hostamen (mit DNS-Auflösung) als auch über die IP anbieten. 
Aber so wie es jetzt ist, ist es jetzt richtig.  :)

Momentan betreibe ich schon einige MQTT Devices, nutze die Möglichkeiten bis dato allerdings auch nur aus der Perspektive "Anwender". Aber ich finde MQTT als universelles und etabliertes Protokoll im IoT Bereich verdient es sich damit näher zu befassen.
Deswegen haben wir MQTT als Thema für unseren nächsten Stammtisch auf die Agenda gesetzt. Es wird sicherlich nicht bei nur einem Termin bleiben.
Bis dahin will ich ein paar theoretische Grundlagen zusammentragen/aufbereiten mit Querverweisen zu den best-practice Anwendungsscenarien in FHEM. 
Habe gesehen hier im MQTT-Forum gibt es ja bereits einige angepinnte Verweise zu diversen Quellen. Mal sehen wie ich das nutzen kann damit wir uns am Stammtisch einen gemeinsamen Wissensstand erarbeiten können.
Solltest du noch ein paar Links haben, die du/ihr in diesem Kontext als beachtenswert erachtest, nehme ich die gerne entgegen.

Bleibt also alles spannend und interessant ... mach(t) weiter so.  8)

Achso ...
Zitat
und eigentlich ist auch webCmd völlig überflüssig, oder...?
Es ist ein Template bzw. nur eine Vorlage ... wenn es jemandem nicht gefällt/er es nicht braucht, kann er es ja löschen. Ich würde es so lassen.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

87insane

Hey Heiko. Habe auch hierdurch mit MQTT angefangen und bin gerne bereit dir einiges grundlegendes zu erklären, bei Bedarf.

Hatten hier sogar kleine skripte gebaut um zb einen win pc mit an zu zeigen und dafür nicht direkt ein Riesen Programm zu installieren.

Gruß,
Kai

Gesendet von meinem LM-G810 mit Tapatalk


DS_Starter

#239
Hi Kay,

auf dein Angebot komme ich gerne zurück.  8)

Zunächst versuche ich unsere Stammtischmannschaft auf ein gemeinsames Kenntislevel zu heben, damit wir in der Lage sind uns in der MQTT-FHEM-Welt zurecht zu finden und in diesem Kontext auch fähig sind intelligente Fragen zu stellen (mich eingeschlossen).  ;)

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter