Autor Thema: [Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE  (Gelesen 27723 mal)

Offline eldrik

  • Sr. Member
  • ****
  • Beiträge: 852
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #30 am: 13 August 2018, 17:02:51 »
Wie es schon da steht: UNSUBSCRIBE habe ich nicht implementiert.
Kannst du dein Programm nicht ueberzeugen, es nicht zu senden? Und wozu macht es direkt nach SUBSCRIBE ein USUBSCRIBE? Ein DISCONNECT reicht doch :)
Wenn nicht, kannst du mir zeigen, wie ich das nachstellen kann, ohne Tage mit Installation von Programmen zu verbringen?

Das mit der Implementierung habe ich mir gedacht  ;) und das Programm bediene ich ja, in dem Moment, selber um zu testen was bei einem Usubscribe passiert, theoretisch könnte ja jedes Mqtt Device Topics unsubscriben, ohne das es die Verbindung zum Broker vollständig beenden will.

Das deshalb die komplette Verbindung gedroped wird mag ein wenig hart sein.  :)

Mqtt.fx ist meine ich eine Java Anwendung, die Installation in meiner Mac VM hat keine 5Minuten gedauert, mit anderen Clients kann ich nicht dienen. Alternativ hat vl. Espeasy einen mqtt Client mit dem man Subscriben und Unsubscriben kann?

Greetz
Eldrik
« Letzte Änderung: 13 August 2018, 17:10:04 von eldrik »

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15921
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #31 am: 13 August 2018, 18:02:12 »
Ansonsten hat die SAP Cloud Platform einen mqtt Client :)
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019

Offline Billy

  • Hero Member
  • *****
  • Beiträge: 1086
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #32 am: 13 August 2018, 18:26:59 »
Was macht define mqcl MQTT localhost:1883
Ist mir nicht ganz klar.
Naja, mit dem ersten define (MQTT2_SERVER) instanziierst Du zuerst einen MQTT Server (der von FHEM gebildet wird). (Quasi der Ersatz für den mosquitto)

Im zweiten define benutzt Du dann das bisher übliche Modul MQTT, um FHEM mit diesem Server (also sich selbst) zu verbinden.

Alle anschließend definierten Geräte MQTT_DEVICE (nicht MQTT2_DEVICE !) und MQTT_BRIDGE müssen dann das mit MQTT definierte IODev verwenden.
Eine Verbindung zum MQTT Server aufbauen. Soweit ich als Laie sehe, brauchen beide (10_MQTT_BRIDGE.pm oder 10_MQTT_GENERIC_BRIDGE.pm) eine MQTT Instanz.
Danke für Eure Antworten, werde ich ausgiebig testen!
Billy
FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink 13x PCA 301;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 1x KFM100, 3x HM-LC-SW1-PL2, ESP8266, Sonoff, Mqtt*

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 20300
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #33 am: 13 August 2018, 20:27:53 »
Habe TcpServerUtils modifiziert, setze da state mit readingsSingleUpdate, allerdings ohne trigger. Bin auf Nebeneffekte gespannt.

Nebeneffekt???

https://forum.fhem.de/index.php/topic,90221.0.html
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.me/MOldenburg
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline ThoTo

  • Full Member
  • ***
  • Beiträge: 151
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #34 am: 14 August 2018, 11:56:51 »
1)
Der Versuch ein gesetztes Attribut getList/setList/readingList für ein MQTT2_DEVICE zu löschen führt zu folgendem Fehler:
Sonoff_Testdevice attr getList/setList/readingList: more parameters needed
2)
Beim Versuch die Variable $name in getList/setList/readingList zu verwenden, erhalte ich einen Fehler:
on { "cmnd/".AttrVal($name,"MQTTName","")."/POWER on" }
off { "cmnd/".AttrVal($name,"MQTTName","")."/POWER off" }
Global symbol "$name" requires explicit package name at (eval 377) line 1.

LG Thomas
Intel NUC | Docker | Homematic | Sonoff | Hue

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
(Albert Einstein)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15921
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #35 am: 14 August 2018, 13:39:35 »
zu 1: es wäre schön, wenn Du geschrieben hättest, wie Du das Attribut löschen wolltest - funktioniert das "deleteattr" hinter der Anzeige nicht?
zu 2: die Variable heißt $NAME und nicht $name

-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019

Offline ThoTo

  • Full Member
  • ***
  • Beiträge: 151
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #36 am: 14 August 2018, 14:26:45 »
zu 1: es wäre schön, wenn Du geschrieben hättest, wie Du das Attribut löschen wolltest - funktioniert das "deleteattr" hinter der Anzeige nicht?

deleteattr hinter der Anzeige oder alternativ deleteattr Devicename setList

zu 2: die Variable heißt $NAME und nicht $name

Ergebnis nach Änderung:
Global symbol "$NAME" requires explicit package name at (eval 28) line 1.
LG Thomas
Intel NUC | Docker | Homematic | Sonoff | Hue

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
(Albert Einstein)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15921
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #37 am: 14 August 2018, 14:54:51 »
deleteattr hinter der Anzeige oder alternativ deleteattr Devicename setList

Wie konntest Du überhaupt ein Attribut mit zu wenigen Parametern setzen, das Du jetzt löschen möchtest? Das muss sich wohl Rudi anschauen.

Ergebnis nach Änderung:
Global symbol "$NAME" requires explicit package name at (eval 28) line 1.

Dann schreib halt das Topic komplett mit dem tatsächlichen Namen in das Attribut.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019

Offline ThoTo

  • Full Member
  • ***
  • Beiträge: 151
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #38 am: 14 August 2018, 15:07:03 »
Wie konntest Du überhaupt ein Attribut mit zu wenigen Parametern setzen, das Du jetzt löschen möchtest? Das muss sich wohl Rudi anschauen.

Gar nicht. Ich hab's mit dem Code aus Rudis Ankündigung versucht und hätte somit gehofft dass du das Verhalten reproduzieren kannst.
define sonoff_th10 MQTT2_DEVICE
attr sonoff_th10 readingList tele/sonoff/S.* { MQTT2_JSON($EVENT) }
attr sonoff_th10 setList\
on tasmota/sonoff/cmnd/Power1 on\
off tasmota/sonoff/cmnd/Power1 off

deleteattr sonoff_th10 readingList
Ergebnis:  sonoff_th10 attr readingList: more parameters needed


LG Thomas
Intel NUC | Docker | Homematic | Sonoff | Hue

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
(Albert Einstein)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15921
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #39 am: 14 August 2018, 15:35:21 »
 ;D

Da hat Rudi sich selbst ausgetrickst...

  my ($type, $dev, $attrName, $param) = @_;

  if($attrName =~ m/(.*)List/) {
    my $type = $1;

    if($type eq "del") {
      MQTT2_DEVICE_delReading($dev) if($type eq "reading");
      return undef;
    }

Erst wird geprüft, ob $type eq "del" und dann auch gleichzeitig noch eq "reading" ist? Das wird schwierig zu erfüllen sein.

Lösungsvorschlag:

Index: 10_MQTT2_DEVICE.pm
===================================================================
--- 10_MQTT2_DEVICE.pm  (revision 17135)
+++ 10_MQTT2_DEVICE.pm  (working copy)
@@ -290,10 +290,10 @@
   my ($type, $dev, $attrName, $param) = @_;
 
   if($attrName =~ m/(.*)List/) {
-    my $type = $1;
+    my $atype = $1;
 
     if($type eq "del") {
-      MQTT2_DEVICE_delReading($dev) if($type eq "reading");
+      MQTT2_DEVICE_delReading($dev) if($atype eq "reading");
       return undef;
     }
 

« Letzte Änderung: 14 August 2018, 15:37:43 von betateilchen »
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline SamNitro

  • Sr. Member
  • ****
  • Beiträge: 668
  • Kölner Wimpelbeauftragter
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #40 am: 14 August 2018, 19:37:15 »
Bei meinem anderen MQTT Server bekomme ich eine LWT Meldung. Bei dem hier leider nicht, ist das ein Fehler meinerseits oder liegt es am Server?
(Rpi 3, Stretch) (EnOcean) (MAX!) (CUL868) (CUL433) (Zigbee) (FS20) (ESP8266) (Echo)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15921
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #41 am: 14 August 2018, 20:53:33 »
die LWT gibt es in diesem Server auch. Mach mal ein "list <serverName>" dann siehst Du sie in den Internals unter "retain"
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019

Offline SamNitro

  • Sr. Member
  • ****
  • Beiträge: 668
  • Kölner Wimpelbeauftragter
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #42 am: 14 August 2018, 21:08:02 »
Ok da habe ich es gefunden, aber warum erstellt er unter dem eigentlichen Gerät kein eigenes Reading?
(Rpi 3, Stretch) (EnOcean) (MAX!) (CUL868) (CUL433) (Zigbee) (FS20) (ESP8266) (Echo)

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20466
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #43 am: 14 August 2018, 22:16:07 »
Zitat
MQTT2_JSON() wünsche ich mir als Funktion json2reading() in fhem.pl und dazu noch CommandSetReadingFromHash()
Ich habe MQTT2_JSON als json2nameValue() nach fhem.pl kopiert, und da auch eine weitere Funktion json2reading implementiert, die mit dem has/Namen eines FHEM Geraetes und dem JSON aufgerufen werden muss. Ich habe MQTT2_JSON als Wrapper behalten, aber die Doku angepasst, d.h. MQTT2_JSON is deprecated. Achtung: json2nameValue ist _nicht_ die Umkehrfunktion zu toJSON, und soll es auch nicht sein.

Zitat
Das deshalb die komplette Verbindung gedroped wird mag ein wenig hart sein.  :)
Na was sonst soll ich machen? Die andere Seite erwartet eine klare Antwort, wenn ich nichts antworte, dann beendet sie die Verbindung. Ich habe jetzt UNSUBSCRIBE implementiert, kann es aber nicht testen, da ich nicht weiss, womit. SAP ist bei mir in der Kategorie "Tage mit Installation von Programmen verbringen"

Zitat
Da hat Rudi sich selbst ausgetrickst...
Das ist nicht zu leugnen. Habe mich von deinem Patch inspirieren lassen, und es hoffentlich gefixt.


Zitat
Global symbol "$NAME" requires explicit package name at (eval 28) line
Das habe ich nirgendwo zugesagt. Ich habe es jetzt an 4 Stellen eingebaut, allerdings nur oeberflaechlich getestet. Feedback is welcome.

Zitat
Ok da habe ich es gefunden, aber warum erstellt er unter dem eigentlichen Gerät kein eigenes Reading?
Weil die Geraete, wo LWT gespeichert wird, temporaer sind. MQTT2_DEVICE entspricht nicht 1:1 einer Verbindung zu MQTT2_SERVER. Das kann man zwar so konfigurieren, muss man aber nicht.

Offline ThoTo

  • Full Member
  • ***
  • Beiträge: 151
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #44 am: 14 August 2018, 22:36:43 »
Vielen Dank Rudi erstmal für die beiden Module, top!!!

Das habe ich nirgendwo zugesagt. Ich habe es jetzt an 4 Stellen eingebaut, allerdings nur oeberflaechlich getestet. Feedback is welcome.

Ich war am Holzweg und du zu schnell  :-[
Mea culpa!

Meine Idee war über ein User-Attribut "DeviceTopic" einen Teil des MQTT Topic vorzugeben und diesen dann für get,set,reading zu verwenden.
Mit AttrVal($NAME,....) ist das aber zu umständlich und spätestens bei den Readings klappt es nicht mehr.

Ich habe dann für mich testweise das Modul so umgeschrieben, dass es in getList/setList/readingList %TOPIC% durch den Wert des Attributes DeviceTopic ersetzt.
So sieht es dann für ein Sonoff/Tasmota-Device aus:
defmod HAUS.SONF.Steckdose MQTT2_DEVICE
attr HAUS.SONF.Steckdose DeviceTopic Sonoff-123456
attr HAUS.SONF.Steckdose IODev MQTTBroker
attr HAUS.SONF.Steckdose readingList tele/%TOPIC%/STATE:.* { MQTT2_JSON($EVENT) }\
stat/%TOPIC%/STATUS5:.* { MQTT2_JSON($EVENT) }\
stat/%TOPIC%/POWER:.* state\
tele/%TOPIC%/LWT:.* presence
attr HAUS.SONF.Steckdose setList on cmnd/%TOPIC%/POWER on\
off cmnd/%TOPIC%/POWER off\
statusRequest cmnd/%TOPIC%/Status 5

Würde es begrüssen wenn du das einbauen könntest, meinen Patch poste ich dann gerne.

LG Thomas
Intel NUC | Docker | Homematic | Sonoff | Hue

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher."
(Albert Einstein)

 

decade-submarginal