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

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15744
  • s/fhem\.cfg/configDB/g
[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« am: 10 August 2018, 18:01:33 »
Index: 00_MQTT2_SERVER.pm
===================================================================
--- 00_MQTT2_SERVER.pm  (Revision 17119)
+++ 00_MQTT2_SERVER.pm  (Arbeitskopie)
@@ -72,7 +72,7 @@
 {
   my ($hash) = @_;
   my $now = gettimeofday();
-  foreach my $clName (keys $hash->{clients}) {
+  foreach my $clName (keys %{$hash->{clients}}) {
     my $cHash = $defs{$clName};
     next if(!$cHash || !$cHash->{keepalive} ||
              $now < $cHash->{lastMsgTime}+$cHash->{keepalive}*1.5 );
@@ -335,7 +335,7 @@
     $hash->{retain}{$tp} = \%h;
   }
 
-  foreach my $clName (keys $hash->{clients}) {
+  foreach my $clName (keys %{$hash->{clients}}) {
     MQTT2_SERVER_sendto($defs{$clName}, $tp, $val) if(!$src || $src ne $clName);
   }
 
@@ -353,7 +353,7 @@
   my ($hash, $topic, $val) = @_;
   return if(IsDisabled($hash->{NAME}));
   $val = "" if(!defined($val));
-  foreach my $s (keys $hash->{subscriptions}) {
+  foreach my $s (keys %{$hash->{subscriptions}}) {
     my $re = $s;
     $re =~ s,/?#,\\b.*,g;
     $re =~ s,\+,\\b[^/]+\\b,g;
« Letzte Änderung: 10 August 2018, 19:21:50 von betateilchen »
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20196
Antw:[Bug] 00_MQTT2_SERVER
« Antwort #1 am: 10 August 2018, 18:09:40 »
Danke, eingecheckt

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15744
  • s/fhem\.cfg/configDB/g
Antw:[Bug] 00_MQTT2_SERVER
« Antwort #2 am: 10 August 2018, 18:25:04 »
Haengt vom Perl version wohl ab, 5.18 meldet keine Fehler, 5.26 mag tatsaechlich nicht.

Naja, das Problem mit dieser Fehlermeldung diskutieren wir hier im Forum schon seit ca. 3 Jahren... (ich glaube, seit perl 5.24)



funktioniert:

readingList
obi/tele/08/STATE.* { MQTT2_JSON($EVENT) }

funktioniert nicht:

readingList
obi/tele/08/STATE { MQTT2_JSON($EVENT) }



In der commandref zum Server steht noch

Zitat
define <name> MQTT2_SERVER <tcp-portnr> [global|IP]

Enable the server on port <tcp-portnr>. If global is specified, then requests from all interfaces (not only localhost / 127.0.0.1) are serviced. If IP is specified, then FHEMWEB will only listen on this IP.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15744
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #3 am: 10 August 2018, 19:10:03 »
2018.08.10 18:58:08 5: m2s: dispatch obi/tele/08/STATE:{"Time":"2018-08-10T17:58:08","Uptime":"0T00:42:57","Vcc":3.274,"POWER":"off","Wifi":{"AP":1,"SSId":"mowg","RSSI":100,"APMac":"CC:CE:1E:EA:A3:60"}}
2018.08.10 18:58:08 1: ERROR: empty name in readingsBeginUpdate
2018.08.10 18:58:08 1: stacktrace:
2018.08.10 18:58:08 1:     main::readingsBeginUpdate           called by ./FHEM/10_MQTT2_DEVICE.pm (87)
2018.08.10 18:58:08 1:     main::MQTT2_DEVICE_Parse            called by fhem.pl (3783)
2018.08.10 18:58:08 1:     main::Dispatch                      called by ./FHEM/00_MQTT2_SERVER.pm (342)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_doPublish        called by ./FHEM/00_MQTT2_SERVER.pm (279)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3587)
2018.08.10 18:58:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.10 18:58:08 1: readingsUpdate(,Time,2018-08-10T17:58:08) missed to call readingsBeginUpdate first.
2018.08.10 18:58:08 1: stacktrace:
2018.08.10 18:58:08 1:     main::readingsBulkUpdate            called by ./FHEM/10_MQTT2_DEVICE.pm (89)
2018.08.10 18:58:08 1:     main::MQTT2_DEVICE_Parse            called by fhem.pl (3783)
2018.08.10 18:58:08 1:     main::Dispatch                      called by ./FHEM/00_MQTT2_SERVER.pm (342)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_doPublish        called by ./FHEM/00_MQTT2_SERVER.pm (279)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3587)
2018.08.10 18:58:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.10 18:58:08 1: readingsUpdate(,Wifi_SSId,mowg) missed to call readingsBeginUpdate first.
2018.08.10 18:58:08 1: stacktrace:
2018.08.10 18:58:08 1:     main::readingsBulkUpdate            called by ./FHEM/10_MQTT2_DEVICE.pm (89)
2018.08.10 18:58:08 1:     main::MQTT2_DEVICE_Parse            called by fhem.pl (3783)
2018.08.10 18:58:08 1:     main::Dispatch                      called by ./FHEM/00_MQTT2_SERVER.pm (342)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_doPublish        called by ./FHEM/00_MQTT2_SERVER.pm (279)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3587)
2018.08.10 18:58:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.10 18:58:08 1: readingsUpdate(,Uptime,0T00:42:57) missed to call readingsBeginUpdate first.
2018.08.10 18:58:08 1: stacktrace:
2018.08.10 18:58:08 1:     main::readingsBulkUpdate            called by ./FHEM/10_MQTT2_DEVICE.pm (89)
2018.08.10 18:58:08 1:     main::MQTT2_DEVICE_Parse            called by fhem.pl (3783)
2018.08.10 18:58:08 1:     main::Dispatch                      called by ./FHEM/00_MQTT2_SERVER.pm (342)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_doPublish        called by ./FHEM/00_MQTT2_SERVER.pm (279)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3587)
2018.08.10 18:58:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.10 18:58:08 1: readingsUpdate(,Vcc,3.274) missed to call readingsBeginUpdate first.
2018.08.10 18:58:08 1: stacktrace:
2018.08.10 18:58:08 1:     main::readingsBulkUpdate            called by ./FHEM/10_MQTT2_DEVICE.pm (89)
2018.08.10 18:58:08 1:     main::MQTT2_DEVICE_Parse            called by fhem.pl (3783)
2018.08.10 18:58:08 1:     main::Dispatch                      called by ./FHEM/00_MQTT2_SERVER.pm (342)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_doPublish        called by ./FHEM/00_MQTT2_SERVER.pm (279)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3587)
2018.08.10 18:58:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.10 18:58:08 1: readingsUpdate(,Wifi_APMac,CC:CE:1E:EA:A3:60) missed to call readingsBeginUpdate first.
2018.08.10 18:58:08 1: stacktrace:
2018.08.10 18:58:08 1:     main::readingsBulkUpdate            called by ./FHEM/10_MQTT2_DEVICE.pm (89)
2018.08.10 18:58:08 1:     main::MQTT2_DEVICE_Parse            called by fhem.pl (3783)
2018.08.10 18:58:08 1:     main::Dispatch                      called by ./FHEM/00_MQTT2_SERVER.pm (342)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_doPublish        called by ./FHEM/00_MQTT2_SERVER.pm (279)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3587)
2018.08.10 18:58:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.10 18:58:08 1: readingsUpdate(,Wifi_AP,1) missed to call readingsBeginUpdate first.
2018.08.10 18:58:08 1: stacktrace:
2018.08.10 18:58:08 1:     main::readingsBulkUpdate            called by ./FHEM/10_MQTT2_DEVICE.pm (89)
2018.08.10 18:58:08 1:     main::MQTT2_DEVICE_Parse            called by fhem.pl (3783)
2018.08.10 18:58:08 1:     main::Dispatch                      called by ./FHEM/00_MQTT2_SERVER.pm (342)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_doPublish        called by ./FHEM/00_MQTT2_SERVER.pm (279)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3587)
2018.08.10 18:58:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.10 18:58:08 1: readingsUpdate(,POWER,off) missed to call readingsBeginUpdate first.
2018.08.10 18:58:08 1: stacktrace:
2018.08.10 18:58:08 1:     main::readingsBulkUpdate            called by ./FHEM/10_MQTT2_DEVICE.pm (89)
2018.08.10 18:58:08 1:     main::MQTT2_DEVICE_Parse            called by fhem.pl (3783)
2018.08.10 18:58:08 1:     main::Dispatch                      called by ./FHEM/00_MQTT2_SERVER.pm (342)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_doPublish        called by ./FHEM/00_MQTT2_SERVER.pm (279)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3587)
2018.08.10 18:58:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.10 18:58:08 1: readingsUpdate(,Wifi_RSSI,100) missed to call readingsBeginUpdate first.
2018.08.10 18:58:08 1: stacktrace:
2018.08.10 18:58:08 1:     main::readingsBulkUpdate            called by ./FHEM/10_MQTT2_DEVICE.pm (89)
2018.08.10 18:58:08 1:     main::MQTT2_DEVICE_Parse            called by fhem.pl (3783)
2018.08.10 18:58:08 1:     main::Dispatch                      called by ./FHEM/00_MQTT2_SERVER.pm (342)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_doPublish        called by ./FHEM/00_MQTT2_SERVER.pm (279)
2018.08.10 18:58:08 1:     main::MQTT2_SERVER_Read             called by fhem.pl (3587)
2018.08.10 18:58:08 1:     main::CallFn                        called by fhem.pl (723)
2018.08.10 18:58:08 1: ERROR: >mqtt_test< returned by the MQTT2_DEVICE ParseFn is invalid, notify the module maintainer

Ich habe den Verdacht, dass Änderungen an readingList und am device selbst (z.B. Löschen eines devices und späteres Neuanlegen mit gleichem Namen, aber anderer readingList) nicht richtig verarbeitet werden.



Es ist mir nun gelungen, eine umgeflashte Obi Steckdose in FHEM zu integrieren, allerdings - rein gefühlsmässig - ist die Reaktionszeit mit den neuen Modulen hier im lokalen Netzwerk langsamer als über einen mosquitto Server bei Amazon in Irland.
« Letzte Änderung: 10 August 2018, 19:21:58 von betateilchen »
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15744
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #4 am: 10 August 2018, 19:25:15 »
Ist es eigentlich Absicht, dass das DEVICE Modul auch die 00_ am Anfang trägt?

äh... vergiss es :)

Du solltest aber den Eintrag in der MAINTAINER.txt für MQTT2_DEVICE korrigieren - da steht tatsächlich 00_MQTT2_DEVICE und wird deshalb auch in "help" so angezeigt. Das hatte mich irritiert.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20196
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #5 am: 10 August 2018, 21:43:47 »
Danke fuer die Hinweise.
- MAINTAINER: korrigiert
- Doku fuer readingsList korrigiert, obi/tele/08/STATE.* ist richtig (sollte analog zu notify topic:message matchen)
- Doku fuer define MQTT2_SERVER korrigiert.
- delete Bug gefixt
- rename Bug gefixt (das habe ich selbst gefunden :) )

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15744
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #6 am: 10 August 2018, 21:54:02 »
- Doku fuer readingsList korrigiert,

nur der Klarheit halber: readingList, ohne "s" in der Mitte (in der Doku steht es richtig)



Vorgestern habe ich mir extra noch einen lokalen mosquitto aufgesetzt, weil meine Steckdosen nicht ins Internet brauchen (und auch nicht kommen). Hätte ich gewusst, dass FHEM das ab heute selbst kann, hätte ich mir die Arbeit sparen können  8)
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15744
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #7 am: 10 August 2018, 22:11:07 »
für MQTT2_SERVER habe ich zwei Wünsche:

  • ein reading "state" und readingFnAttributes anstatt hartcodiertem STATE (wo wird das eigentlich gesetzt ?)*
  • ein reading mit der Anzahl verbundener clients

Edit:

* gefunden: STATE kommt aus TcpServerUtils.pm
« Letzte Änderung: 10 August 2018, 22:15:08 von betateilchen »
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20196
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #8 am: 11 August 2018, 09:01:43 »
Habe TcpServerUtils modifiziert, setze da state mit readingsSingleUpdate, allerdings ohne trigger. Bin auf Nebeneffekte gespannt.
In MQTT2_SERVER gibts jetzt ein NRCLIENTS.

Falls irgendwer bei SSL/TLS helfen will, wuerde ich mich freuen: in MQTT2_SERVER ist zwar TLS mit dem SSL Attribut aktivierbar, aber ich habe mit mosquitto_pub noch keine Verbindung herstellen koennen, und weiss nicht genau, wo das Problem liegt, ausser "es geht nicht".
Habe weiterhin FD in FileLog und global (fuer logfile) eingebaut, damit "list .* FD" bessere Daten liefert.

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15744
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #9 am: 11 August 2018, 10:44:29 »
In MQTT2_SERVER gibts jetzt ein NRCLIENTS.

Ja, aber als zusätzliches internal und nicht als reading. Das hilft mir nicht weiter :(

Szenario: Es geht darum, auf die Änderung der Anzahl ein notify triggern zu können, insbesondere für monitoring-Zwecke.
Beispiel: Wenn ich weiß, dass es 7 Steckdosen gibt und die Anzahl plötzlich auf 6 sinkt, weiss, ich dass etwas nicht stimmt.

Habe TcpServerUtils modifiziert, setze da state mit readingsSingleUpdate, allerdings ohne trigger.

Danke.

-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

Offline Billy

  • Hero Member
  • *****
  • Beiträge: 1074
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #10 am: 11 August 2018, 16:03:13 »
Frage, läuft 00_MQTT2_SERVER

auch mit 10_MQTT_BRIDGE.pm oder 10_MQTT_GENERIC_BRIDGE.pm?

Gruß 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*

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15744
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #11 am: 11 August 2018, 16:32:02 »
Versuch macht kluch... aber ich würde mal auf "nein" tippen.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4484
    • tech_LogBuch
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #12 am: 11 August 2018, 16:41:39 »
Wird nicht funktionieren. Die bisherigen Module sind sehr eng miteinander gekoppelt.
Die GenericBrigde ist von mir. Ich muss mir die neuen ansehen, evtl kann ich eine entsprechende Anpassung für die neuen Module erstellen.
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

Offline Billy

  • Hero Member
  • *****
  • Beiträge: 1074
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #13 am: 11 August 2018, 17:04:36 »
Ich finde gut, dass das MQTT Thema jetzt in FHEM an Fahrt gewinnt!

Eine Bereinigung wäre für Neueinsteiger sicher sinnvoll.

Wenn ich das richtig verstanden habe ist "00_MQTT2_SERVER / 10_MQTT2_DEVICE"
nicht mit den bisherigen Bridges (10_MQTT_BRIDGE.pm oder 10_MQTT_GENERIC_BRIDGE.pm) verwendbar? schade  :-\

Eine MQTT2_GENERIC_BRIDGE.pm wäre dann die Lösung. ;)

Billy

« Letzte Änderung: 11 August 2018, 17:07:16 von 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*

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15744
  • s/fhem\.cfg/configDB/g
Antw:[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE
« Antwort #14 am: 11 August 2018, 17:12:37 »
Eine MQTT2_GENERIC_BRIDGE.pm wäre dann die Lösung. ;)

ich glaube man braucht das gar nicht, weil sich das meiste per notify lösen lässt :)
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

 

decade-submarginal