MQTT

Begonnen von smurfix, 21 Januar 2015, 09:26:49

Vorheriges Thema - Nächstes Thema

Gisbert

Hallo Stephan,

ich bin's nochmals, mit einem merkwürdigen Verhalten.

Wenn ich den RPi boote, funktioniert alles bestens, dank systemctl.
Wenn ich jedoch im laufenden Betrieb in Fhem "rereadcfg" durchführe erscheint dies im logfile:
2017.06.13 22:44:36 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:36 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:36 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:38 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:38 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:38 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:38 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:38 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:38 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:38 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:38 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:39 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:39 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 reappeared (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 disconnected, waiting to reappear (MyBroker)
2017.06.13 22:44:40 1: 192.168.178.26:1883 reappeared (MyBroker)

usw.

Es läßt sich leicht beheben, indem ich define MyBroker MQTT 192.168.178.26:1883 user password eingebe, aber das kann nur ein Notbehelf sein.

Es scheint so, als habe der MQTT Broker user password "vergessen".
Woran könnte es liegen?

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

Gisbert

#76
Hallo Stephan,

es ist tatsächlich so, dass nach einem rereadcfg in der Datei /opt/fhem/FHEM/FhemUtils/uniqueID die Einträge für user und password des MQTT-Brokers nicht mehr vorhanden sind. Die Datei ist mit aktuellem Datum/Zeit neu gespeichert im Dateiverzeichnis vorhanden.

Vorher standen die beiden Zeilen am Ende dieser Datei, in meinem Fall:
myBroker_user:xxxxxx
mBroker_pass:yyyyyy
Nach dem rereadcfg sind diese Einträge verschwunden; andere user/password von anderen Modulen sind noch vorhanden.

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

PatrickR

Hi! Das Problem ist bekannt (s.  o.) und ein Patch auf dem Weg.


Von unterwegs gesendet.
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

hexenmeister

Hallo Stephan,

könntest Du ein Patch für 10_MQTT_DEVICE.pm prüfen und aufnehemen?

Grund:
Im Falle folgender Definition

define XXX MQTT_DEVICE
attr XXX publishSet /topic/set

ohne Werteliste, also nicht so:
attr XXX publishSet on off /topic/set
funktioniert set XXX <wert> nicht, sondern wird mit Meldung "Unknown argument $command, choose one of ..." quittiert.

Ursache: Fehlende Bedingung in der Prüfung.
Warum ich das für einen Fehler halte? Weil man bei einigen Geräten keine abschliessende Werteliste definieren kann oder will (wenn diese z.B zu lang wird). So bei einem Dimmer möchte man eher nicht alle möglichen Prozentwerte angeben müssen.

Patch:
diff U3 D:/Develop/fhem/FHEM/10_MQTT_DEVICE.pm W:/FHEM/10_MQTT_DEVICE.pm
--- D:/FHEM_ORIGINAL/10_MQTT_DEVICE.pm Sat Feb 11 04:53:52 2017
+++ W:/FHEM_DEV/10_MQTT_DEVICE.pm Wed Jun 14 20:57:24 2017
@@ -83,7 +83,7 @@
   my ($hash,$name,$command,@values) = @_;
   return "Need at least one parameters" unless defined $command;
   return "Unknown argument $command, choose one of " . join(" ", map {$hash->{sets}->{$_} eq "" ? $_ : "$_:".$hash->{sets}->{$_}} sort keys %{$hash->{sets}})
-    if(!defined($hash->{sets}->{$command}));
+    if(!defined($hash->{sets}->{$command}) && @values);
   my $msgid;
   if (@values) {
     my $value = join " ",@values;


Danke und Grüße
Alexander

P.S.
Ich würde gerne in den nächten Tagen noch einen Patch einreichen, diesemal für 00_MQTT.pm. Dieser soll es ermöglichen, andere Clients-Module zu verwenden, als MQTT_DEVICE und MQTT_BRIDGE. Ich würde gernen ein eigenes Modul schreiben, das erstens anderen Syntax für subscribe/publish versteht (die jetztzigen kann man leider nicht nachträglich in WebUI editieren) und zweitens eine bequemmere Verwendung für bestimmte Device-Typen anbietet.
Ich habe mehrere per MQTT angebundenen Schalter und Dimmer und würde gerne diese mit wenigen Zeilen definieren können, auch bereits mit allem, was eine Bedienung in WebUI braucht.
Vermuttlich so:
define WZDGOST MQTT_DEVICE_TYPE dimmer
attr WZDGOST IODev MQTT
attr WZDGOST base /haus/dg/wz/licht/ost

eisler

Hallo Alexander,

habe deinen Patch mit aufgenommen. ( https://svn.fhem.de/trac/changeset/14520/ )

Grüße
Stephan


hexenmeister

Prima, Danke! :)

scooty

Hallo zusammen,

mit heutiger Version der 10_MQTT_DEVICE.pm kommen in meinem FHEM beim Start folgende Warnungen:
2017.06.16 09:34:35.182 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at /opt/fhem/FHEM/lib/Net/MQTT/Message/Publish.pm line 28.
2017.06.16 09:34:35.182 1: PERL WARNING: Use of uninitialized value $_[0] in pack at /opt/fhem/FHEM/lib/Net/MQTT/Constants.pm line 130.

Kurz darauf erscheinen im Log dauerhaft und beständig folgende Einträge der Art:
2017.06.16 09:35:05.349 1: 127.0.0.1:1883 disconnected, waiting to reappear (MQTT_SRV_lokal)
2017.06.16 09:35:05.388 1: 127.0.0.1:1883 reappeared (MQTT_SRV_lokal)
2017.06.16 09:35:05.529 1: 127.0.0.1:1883 disconnected, waiting to reappear (MQTT_SRV_lokal)
2017.06.16 09:35:05.685 1: 127.0.0.1:1883 reappeared (MQTT_SRV_lokal)
2017.06.16 09:35:06.397 1: 127.0.0.1:1883 disconnected, waiting to reappear (MQTT_SRV_lokal)
2017.06.16 09:35:06.437 1: 127.0.0.1:1883 reappeared (MQTT_SRV_lokal)

und es kommen auch keine Messages mehr rein (laienhaft ausgedrückt).

Ein Rückspielen der alten Version behebt das Problem.

Kann/muss ich noch etwas "nachkonfigurieren" oder ist es ein allgemeines Problem mit der neuen Version?
Weitere Infos kann ich gerne liefern wenn gewünscht.

Vielen Dank,
Andreas
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH1080 / IO Homecontrol

deluxe41

Kann ich leider bestätigen.


Gesendet von iPhone mit Tapatalk
Fritzbox 7490 ( USV + Fall Back ), einige HM komponenten,ESPs

kumue

Zitat von: deluxe41 am 16 Juni 2017, 10:25:18
Kann ich leider bestätigen.


Gesendet von iPhone mit Tapatalk

ebenso, alles schick derzeit...

hexenmeister

Bin leider derzeit nicht zuhause und kann nicht testen. Bei meiner Installation hat es noch funktioniert. Habe aber wohl irgendwo zu kurz gedacht, werde abends ansehen.

scooty

Kein Stress, mit der alten Version läuft's ja.

Vielen Dank für die schnelle Rückmeldung,
Andreas
Fhem auf Gigabyte Brix
CUL V3 HM / CUL V3 MAX / MaxCube aFW Homematic&MAX / ZWave.me ZME_UZB1 / SDuino 433 / Velux KLF200
Homematic / MAX / Logitech Hub / ZWave / Wifi LED / div. 433 Temperatursensoren / pywws WH1080 / IO Homecontrol

hexenmeister

Arghhhh! Man darf sich nie auf einen einfachen Anwendungsfall beschränken und glauben, dass der Rest schon passen wird.
War letztendlich (natürlich  >:( ) deutlich komplexer. Aber ich glaube, ich habs 8)

Bevor ich um eine übernahme bitte (ich möchte nicht den gleichen Fehler nochmal machen ;D ), bitte ich um Test, daher hänge ich auch die ganze neue Datei an. Bei mir passt alles und keine Meldungen im Log. Zum Testen habe ich ein Device wie im Anhang angelegt. Funktioniert alles: Set-Liste, Slider, State-Icons, Feedback per mqtt...
Fehlt jmanden noch etwas? Weitere Ideen?

Patch:
diff U3 D:/Develop/fhem/FHEM/10_MQTT_DEVICE.pm W:/FHEM/10_MQTT_DEVICE.pm
--- D:/FHEM_ORIG/10_MQTT_DEVICE.pm Fri Jun 16 18:01:34 2017
+++ W:/FHEM_DEV/10_MQTT_DEVICE.pm Fri Jun 16 18:02:09 2017
@@ -82,16 +82,22 @@
sub Set($$$@) {
   my ($hash,$name,$command,@values) = @_;
   return "Need at least one parameters" unless defined $command;
-  return "Unknown argument $command, choose one of " . join(" ", map {$hash->{sets}->{$_} eq "" ? $_ : "$_:".$hash->{sets}->{$_}} sort keys %{$hash->{sets}})
-    if(!defined($hash->{sets}->{$command}) && @values);
   my $msgid;
-  if (@values) {
-    my $value = join " ",@values;
-    $msgid = send_publish($hash->{IODev}, topic => $hash->{publishSets}->{$command}->{topic}, message => $value, qos => $hash->{qos}, retain => $hash->{retain});
-    readingsSingleUpdate($hash,$command,$value,1);
-  } else {
-    $msgid = send_publish($hash->{IODev}, topic => $hash->{publishSets}->{""}->{topic}, message => $command, qos => $hash->{qos}, retain => $hash->{retain});
-    readingsSingleUpdate($hash,"state",$command,1);
+  my $mark=0;
+  if($command ne '?') {
+    if(defined($hash->{publishSets}->{$command})) {
+      my $value = join " ",@values;
+      $msgid = send_publish($hash->{IODev}, topic => $hash->{publishSets}->{$command}->{topic}, message => $value, qos => $hash->{qos}, retain => $hash->{retain});
+      readingsSingleUpdate($hash,$command,$value,1);
+      $mark=1;
+    } elsif(defined($hash->{publishSets}->{""})) {
+      $msgid = send_publish($hash->{IODev}, topic => $hash->{publishSets}->{""}->{topic}, message => $command, qos => $hash->{qos}, retain => $hash->{retain});
+      readingsSingleUpdate($hash,"state",$command,1);
+      $mark=1;
+    }
+  }
+  if(!$mark) {
+    return "Unknown argument $command, choose one of " . join(" ", map {$hash->{sets}->{$_} eq "" ? $_ : "$_:".$hash->{sets}->{$_}} sort keys %{$hash->{sets}})
   }
   $hash->{message_ids}->{$msgid}++ if defined $msgid;
   readingsSingleUpdate($hash,"transmission-state","outgoing publish sent",1);
@@ -151,8 +157,19 @@
           topic    => $topic,
         };
         if ($2 eq "") {
-          foreach my $set (@values) {
-            $hash->{sets}->{$set}="";
+          if(@values) {
+            foreach my $set (@values) {
+              $hash->{sets}->{$set}="";
+              my($setname,@restvalues) = split(":",$set);
+              if(@restvalues) {
+                $hash->{publishSets}->{$setname} = {
+                  'values' => \@restvalues,
+                  topic    => $topic,
+                };
+              }
+            }
+          } else {
+            $hash->{sets}->{""}="";
           }
         } else {
           $hash->{sets}->{$2}=join(",",@values);

hexenmeister

Gestern habe ich nicht mehr geschafft zu beschreieben, was mein Patch genau alles tut, das hole ich jetzt nach...

Damit wird es möglich, mit dem Attribut publishSet nicht nur eine feste Anzahl der Werte zu definieren, sondern auch FHEM-spezifische Erweiterungen für Slider samt min/max/step, oder Wertelisten. Auch ganz ohne Wertedefinition funktioniert es jetzt und es können beliebige Werte gepublisht werden.

attr XXX publishSet on off topic/123                  # nur on oder off werden akzeptiert: set XXX on
attr XXX publishSet switch:on,off topic/123           # set XXX switch on
attr XXX publishSet level:slider,0,1,100 topic/123    # set XXX level 50
attr XXX publishSet topic/123                         # set XXX wasAuchImmer


oder auch alles zusammen
attr XXX publishSet on off switch:on,off level:slider,0,1,100 topic/123

Für publishSet_.* habe ich das jetzt nicht implementiert, da mir nicht eingefallen ist, wie da ein logisch aussehende Syntax sein soll.

P.A.Trick

Hexenmeister Du bist ein Gott! Funktioniert mir bei super! Danke dafür!

defmod mqtt_Test MQTT_DEVICE
attr mqtt_Test IODev myBroker
attr mqtt_Test publishSet on off switch:on,off level:slider,0,1,100 topic/123
attr mqtt_Test stateFormat transmission-state


BTW: Die Connect/Disconnect Meldungen sind auch Geschichte! Mercí
Cubietruck,RPI,QNAP Ts-419p+, FS20, FRITZ!DECT200, 7 MAX! Thermostate, 3 MAX! Fensterkontakte, Kodi, CUL V3.3, EM1000S, LW12, LD382, HUE, HM-CFG-USB-2, 1x HM-LC-SW1-FM, 2x HM-LC-SW2-FM, 2x HM-LC-Sw1PBU-FM, 3xHM-LC-Bl1PBU-FM,HM-SEC-RHS, 2xHM-SEC-SD,HM-WDS30-T-O, 3x HM-LC-Dim1TPBU-FM, RPI+AddOn

hexenmeister

Zitat von: P.A.Trick am 17 Juni 2017, 14:18:02
Hexenmeister Du bist ein Gott! Funktioniert mir bei super! Danke dafür!

;D Vielen Dank für die Blumen  ;D
Freut mich, dass das funktioniert und nützlich ist :)

Ich brauche noch eine weitere Feature, die ich impelentieren möchte: https://forum.fhem.de/index.php/topic,73279.0.html (sorry für doppelposting). Wie ist Deine Meinung dazu?