[Bugs] 00_MQTT2_SERVER / 10_MQTT2_DEVICE

Begonnen von betateilchen, 10 August 2018, 18:01:33

Vorheriges Thema - Nächstes Thema

hexenmeister

Zitat von: supernova1963 am 25 August 2018, 08:49:38
Die Befehle "URL:<espeasyip>/json" bzw. "URL:<espeasyip>/sysinfo" sind leider scheinbar nur für HTTP verfügbar.
Du kannst praktisch selbe Informationen auch per MQTT haben. Dafür musst du entsprechende "Sensoren" anlegen. "Generic System" oder so.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

supernova1963

Zitat von: hexenmeister am 25 August 2018, 12:07:37
Du kannst praktisch selbe Informationen auch per MQTT haben. Dafür musst du entsprechende "Sensoren" anlegen. "Generic System" oder so.

Als Generic - System Info habe ich bereits Online Zeit (Uptime) und Empfangsqualität (WIFI RSSI) genutzt. Die derzeit möglichen Generic - System Info sind auf die beiden und WebActivity, InputVCC, System
Load und IP beschränkt.

Das wären die json Informationen:

{"System":{
"Build":20102,
"Git Build":"",
"System libraries":"ESP82xx Core 2_4_1, NONOS SDK 2.2.1(cfd48f3), LWIP: 2.0.3",
"Plugins":48,
"Plugin description":" [Normal]",
"Local time":"2018-08-25 13:14:51",
"Unit":24,
"Name":"Dunstabzugshaube",
"Uptime":338,
"Last boot cause":"Manual reboot",
"Reset Reason":"Software/System restart",
"Load":13.40,
"Load LC":12518,
"Free RAM":15800
},
"WiFi":{
"Hostname":"Dunstabzugshaube-24",
"IP config":"Static",
"IP":"192.168.1.24",
"Subnet Mask":"255.255.255.0",
"Gateway IP":"192.168.1.1",
"MAC address":"5C:CF:7F:1D:F3:63",
"DNS 1":"192.168.1.1",
"DNS 2":"0.0.0.0",
"SSID":"RAUNET WLAN",
"BSSID":"20:C9:D0:AE:70:CA",
"Channel":6,
"Connected msec":20388969,
"Last Disconnect Reason":1,
"Last Disconnect Reason str":"(1) Unspecified",
"Number reconnects":0,
"RSSI":-43
},
"Sensors":[
{
"TaskValues": [
{"ValueNumber":1,
"Name":"Online",
"NrDecimals":0,
"Value":337
}],
"DataAcquisition": [
{"Controller":1,
"IDX":0,
"Enabled":"true"
},
{"Controller":2,
"IDX":0,
"Enabled":"true"
},
{"Controller":3,
"IDX":0,
"Enabled":"false"
}],
"TaskInterval":60,
"Type":"Generic - System Info",
"TaskName":"Status",
"TaskEnabled":"true",
"TaskNumber":1
},
{
"TaskValues": [
{"ValueNumber":1,
"Name":"Empfang",
"NrDecimals":0,
"Value":-45
}],
"DataAcquisition": [
{"Controller":1,
"IDX":0,
"Enabled":"true"
},
{"Controller":2,
"IDX":0,
"Enabled":"true"
},
{"Controller":3,
"IDX":0,
"Enabled":"false"
}],
"TaskInterval":60,
"Type":"Generic - System Info",
"TaskName":"Status",
"TaskEnabled":"true",
"TaskNumber":2
},
{
"TaskValues": [
{"ValueNumber":1,
"Name":"Schalter",
"NrDecimals":0,
"Value":0
}],
"DataAcquisition": [
{"Controller":1,
"IDX":0,
"Enabled":"true"
},
{"Controller":2,
"IDX":0,
"Enabled":"true"
},
{"Controller":3,
"IDX":0,
"Enabled":"false"
}],
"TaskInterval":60,
"Type":"Switch input - Switch",
"TaskName":"Strom",
"TaskEnabled":"true",
"TaskNumber":3
}
],
"TTL":60000
}


Wirklich wichtig war mir, dass es auch mit ESPEASY funktioniert.
Ein Hinweis noch: MQTT muss der 1. Controler definiert sein.

Gernot

rudolfkoenig

ZitatDas wären die json Informationen:
Habe json2nameValue erweitert, damit auch mit diesen Daten (insb. Arrays) zurechtkommt, und was Sinnvolles zurueckliefert, z.Bsp. sowas wie "Sensors_3_DataAcquisition_1_Enabled true". Aus den gezeigten JSON entstehen 85 Readings.

ZitatD.h. das Geraet mit der IP 192.168.1.40 hat eine zweite Verbindung aufgebaut, und danach die Erste zugemacht.
Ab sofort wird LWT nur dann gesendet, falls keine weitere Verbindung vom gleichen IP mit dem gleichen clientID existiert.

SamNitro

Zitat von: rudolfkoenig am 25 August 2018, 16:39:58.
Ab sofort wird LWT nur dann gesendet, falls keine weitere Verbindung vom gleichen IP mit dem gleichen clientID existiert.

Jetzt läuft alles bei mir :) selbst der Reed-Kontakt an der Garage.
Dankeschön
(Intel-Nuc Proxmox) (Homematic) (EnOcean) (CUL868) (CUL433) (Zigbee2MQTT) (ESP8266) (Echo) (DUOFERN)

SusisStrolch

Hmm, ich habe da noch ein kleines Problemchen...
2018.08.26 13:05:29.708 4: m2s_192.168.254.65_30194 DVES_22EC54 PUBLISH tele/gosund/STATE:{"Time":"2018-08-26T12:05:29","Uptime":"0T00:33:26","Vcc":3.152,"POWER":"on","Wifi":{"AP":1,"SSId":"SusiconStrolch","RSSI":100,"APMac":"38:10:D5:B2:22:1E"}}
2018.08.26 13:05:29.712 4: MQTT2_DEVICE_Parse: WZ.Subwoofer tele/gosund/STATE => { json2nameValue($EVENT) }
2018.08.26 13:05:29.718 1: PERL WARNING: Invalid conversion in sprintf: end of string at (eval 29620) line 3.


MQTT-Client ist ein Sonoff-Tasmota (GoSund). Klemmts da irgendwie im "jason2nameValue"?
Synology DS1515+, 16GB RAM, 4x 6TB WD-Red
- Docker (FHEM), MariaDB, MariaDB10, Surveillance Station
Gateways: LCG miniCUL433, LCG miniCUL868, AVR-X4000, VU-Solo SE, Kodi
ESP8266: ESPEasy (S0-Counter, Temp/Hum), Sonoff TH, Sonoff 4ch

rudolfkoenig

Das Problem muss anderswo herkommen, ich sehe kein WARNING:fhem> { my $h = json2nameValue('{"Time":"2018-08-26T12:05:29","Uptime":"0T00:33:26","Vcc":3.152,"POWER":"on","Wifi":{"AP":1,"SSId":"SusiconStrolch","RSSI":100,"APMac":"38:10:D5:B2:22:1E"}}');; join("\n", map { "$_ => $h->{$_}" } keys %{$h}) }
Wifi_APMac => 38:10:D5:B2:22:1E
Uptime => 0T00:33:26
Time => 2018-08-26T12:05:29
Vcc => 3.152
Wifi_RSSI => 100
Wifi_AP => 1
Wifi_SSId => SusiconStrolch
POWER => on
Set mal "attr global stacktrace".

Wallmeier

Wenn ich fhem neustarte bekomme ich das Log zugemüllt mit:
2018.08.26 13:13:27 2: mqttServer_192.168.1.27_12299 wants unclean session, disconnecting
2018.08.26 13:13:28 2: mqttServer_192.168.1.27_19499 wants unclean session, disconnecting
2018.08.26 13:13:29 2: mqttServer_192.168.1.27_43012 wants unclean session, disconnecting

Die IP 192.168.1.27 ist ein esp-link (https://github.com/jeelabs/esp-link). Kann man da noch etwas dran machen?

SusisStrolch

Zitat von: rudolfkoenig am 26 August 2018, 13:47:48
Das Problem muss anderswo herkommen, ich sehe kein WARNING:
Danke - der Stacktrace hat es an den Tag gebracht - Fehler im stateFormat...
Synology DS1515+, 16GB RAM, 4x 6TB WD-Red
- Docker (FHEM), MariaDB, MariaDB10, Surveillance Station
Gateways: LCG miniCUL433, LCG miniCUL868, AVR-X4000, VU-Solo SE, Kodi
ESP8266: ESPEasy (S0-Counter, Temp/Hum), Sonoff TH, Sonoff 4ch

rudolfkoenig

ZitatKann man da noch etwas dran machen?
Ich vermute es dauert 1-2 Stunden Doku Lesen, Implementieren, und Testen.
Kann man es bei esp-link nicht abschalten?

Wallmeier

Zitat von: rudolfkoenig am 26 August 2018, 16:42:06
Ich vermute es dauert 1-2 Stunden Doku Lesen, Implementieren, und Testen.
Kann man es bei esp-link nicht abschalten?
Ich habe im WebInterface leider keine Möglichkeit gefunden, es abzuschalten... Da ein Restart im Normalfall geplant ist, kann ich damit leben.

schwatter

#115
Ich habe ein Problem beim einlesen der "/fhem?XHR=1&cmd=jsonlist+","/fhem?XHR=1&cmd=jsonlist2+" bezüglich MQTT2_DEVICE.
Und zwar nutze ich das Plugin von Waldmensch für Enigma2, welches ich jetzt seit ca. einem Jahr weiterpflege und Devices hinzufüge.
Versuche ich anstatt MQTT_DEVICE das neue MQTT2_DEVICE einzulesen, kommt nichts an. Selbst bei MQTT2_SERVER erhalte ich Readings.
Zum einlesen verwende ich folgende Readings um das Device dazustellen:

Zum TYPE einlesen
def getType(self):
return str(self.Data["Internals"]["TYPE"])


Zum READINGS einlesen

def getReadings(self):
return self.Data["Readings"]


def getReadingState(self):
type = self.getType()
try:
if type == "MQTT2_DEVICE":
return str(self.Data["Readings"]["state"]["Value"])
else:
return ""
except:
return "no prop"


Ich habe mir die Jsonlist auf meinem Fhemserver soweit angeschaut, und diese mit MQTT_DEVICE verglichen. Schaut bis auf ein paar
mehr Infos gleich aus. Hat wer einen wink mit dem Zaunpfahl?  ;D

rudolfkoenig

Kannst du bitte die "Raw Definition" der beiden Varianten (MQTT_DEVICE und MQTT2_DEVICE ) hier anhaengen?

MarkusN

Zitat von: rudolfkoenig am 25 August 2018, 16:39:58
Ab sofort wird LWT nur dann gesendet, falls keine weitere Verbindung vom gleichen IP mit dem gleichen clientID existiert.

Jetzt scheint LWT so zu funktionieren wie erwartet, danke  8)

schwatter

#118
Zitat von: rudolfkoenig am 29 August 2018, 07:06:25
Kannst du bitte die "Raw Definition" der beiden Varianten (MQTT_DEVICE und MQTT2_DEVICE ) hier anhaengen?

Hier sind die Raw Definitionen. Wobei ich bei MQTT2 jetzt dein Autocreate nutze, das funktioniert super.
Ein paar Attribute habe ich ergänzt. Finde alles unauffällig auf dem ersten Blick.

MQTT

defmod Gosund_Wasserkocher MQTT_DEVICE
attr Gosund_Wasserkocher IODev myBroker
attr Gosund_Wasserkocher devStateIcon on:rc_GREEN:off off:rc_RED:on offline:rc_BLUE:off
attr Gosund_Wasserkocher icon message_socket
attr Gosund_Wasserkocher publishSet on off cmnd/Gosund_Wasserkocher/POWER
attr Gosund_Wasserkocher room 2. Küche,MQTT
attr Gosund_Wasserkocher stateFormat {ReadingsVal($name,"precence","") eq "offline" ? "offline" : ReadingsVal($name,"state","")}
attr Gosund_Wasserkocher subscribeReading_precence tele/Gosund_Wasserkocher/LWT
attr Gosund_Wasserkocher subscribeReading_sensor tele/Gosund_Wasserkocher/SENSOR
attr Gosund_Wasserkocher subscribeReading_setup tele/Gosund_Wasserkocher/STATE
attr Gosund_Wasserkocher subscribeReading_state stat/Gosund_Wasserkocher/POWER
attr Gosund_Wasserkocher webCmd on:off

setstate Gosund_Wasserkocher off
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 ENERGY_Current 0
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 ENERGY_Factor 0
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 ENERGY_Period 0
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 ENERGY_Power 0
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 ENERGY_Today 0
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 ENERGY_Total 0.105
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 ENERGY_Voltage 243
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 ENERGY_Yesterday 0
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 POWER off
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 Time 2018-08-29T21:07:24
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 Uptime 0T23:15:54
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 Vcc 3.148
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 Wifi_AP 1
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 Wifi_APMac CC:CE:1E:50:CA:A6
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 Wifi_RSSI 52
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 Wifi_SSId FRITZ!Box1313
setstate Gosund_Wasserkocher 2018-08-28 21:51:38 precence online
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 sensor {"Time":"2018-08-29T21:07:24","ENERGY":{"Total":0.105,"Yesterday":0.000,"Today":0.000,"Period":0,"Power":0,"Factor":0.00,"Voltage":243,"Current":0.000}}
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 setup {"Time":"2018-08-29T21:07:24","Uptime":"0T23:15:54","Vcc":3.148,"POWER":"off","Wifi":{"AP":1,"SSId":"FRITZ!Box1313","RSSI":52,"APMac":"CC:CE:1E:50:CA:A6"}}
setstate Gosund_Wasserkocher 2018-08-28 21:51:38 state off
setstate Gosund_Wasserkocher 2018-08-29 21:07:25 transmission-state incoming publish received


Und hier MQTT2

defmod Gosund_Trockner MQTT2_DEVICE DVES_7FBBEB
attr Gosund_Trockner IODev myFhembroker
attr Gosund_Trockner devStateIcon on:rc_GREEN off:rc_RED offline:rc_BLUE reboot:rc_YELLOW
attr Gosund_Trockner icon message_socket
attr Gosund_Trockner readingList DVES_7FBBEB:tele/Gosund_Trockner/LWT:.* LWT\
DVES_7FBBEB:cmnd/Gosund_Trockner/POWER:.* POWER\
DVES_7FBBEB:tele/Gosund_Trockner/INFO1:.* { json2nameValue($EVENT) }\
DVES_7FBBEB:tele/Gosund_Trockner/INFO2:.* { json2nameValue($EVENT) }\
DVES_7FBBEB:tele/Gosund_Trockner/INFO3:.* { json2nameValue($EVENT) }\
DVES_7FBBEB:stat/Gosund_Trockner/RESULT:.* { json2nameValue($EVENT) }\
DVES_7FBBEB:stat/Gosund_Trockner/POWER:.* POWER\
DVES_7FBBEB:tele/Gosund_Trockner/STATE:.* { json2nameValue($EVENT) }\
DVES_7FBBEB:tele/Gosund_Trockner/SENSOR:.* { json2nameValue($EVENT) }\
DVES_7FBBEB:tele/Gosund_Trockner/UPTIME:.* { json2nameValue($EVENT) }
attr Gosund_Trockner room 5. Waschküche,MQTT2_DEVICE
attr Gosund_Trockner setList on cmnd/Gosund_Trockner/POWER on\
off cmnd/Gosund_Trockner/POWER off\
reboot cmnd/Gosund_Trockner/Restart 1
attr Gosund_Trockner stateFormat { \
  my $state = ReadingsVal($name, "state", "off");;   \
  return '<img src="/fhem/images/fhemSVG/rc_GREEN.svg",img width="32" height="32"<div>'.sprintf("&nbsp;;&nbsp;;Spannung: %.0f V &nbsp;;&nbsp;;Stromstärke: %.3f A &nbsp;;&nbsp;;Leistung: %.0f W &nbsp;;&nbsp;;Wifi_RSSI: %.0f %%", ReadingsVal($name,"ENERGY_Voltage",0), ReadingsVal($name,"ENERGY_Current",0), ReadingsVal($name,"ENERGY_Power",0), ReadingsVal($name,"Wifi_RSSI",0)).'</div>' if($state eq "on");;   \
  return '<img src="/fhem/images/fhemSVG/rc_RED.svg",img width="32" height="32"<div>'.sprintf("&nbsp;;&nbsp;;Spannung: %.0f V &nbsp;;&nbsp;;Stromstärke: %.3f A &nbsp;;&nbsp;;Leistung: %.0f W &nbsp;;&nbsp;;Wifi_RSSI: %.0f %%", ReadingsVal($name,"ENERGY_Voltage",0), ReadingsVal($name,"ENERGY_Current",0), ReadingsVal($name,"ENERGY_Power",0), ReadingsVal($name,"Wifi_RSSI",0)).'</div>' if($state eq "off");;     \
  return '<img src="/fhem/images/fhemSVG/rc_YELLOW.svg",img width="32" height="32"<div>'..sprintf("&nbsp;;&nbsp;;Spannung: %.0f V &nbsp;;&nbsp;;Stromstärke: %.3f A &nbsp;;&nbsp;;Leistung: %.0f W &nbsp;;&nbsp;;Wifi_RSSI: %.0f %%", ReadingsVal($name,"ENERGY_Voltage",0), ReadingsVal($name,"ENERGY_Current",0), ReadingsVal($name,"ENERGY_Power",0), ReadingsVal($name,"Wifi_RSSI",0)).'</div>' if($state eq "reboot");; \
  return '<img src="/fhem/images/fhemSVG/rc_BLUE.svg",img width="32" height="32"<div>'.sprintf("&nbsp;;&nbsp;;Spannung: %.0f V &nbsp;;&nbsp;;Stromstärke: %.3f A &nbsp;;&nbsp;;Leistung: %.0f W &nbsp;;&nbsp;;Wifi_RSSI: %.0f %%", ReadingsVal($name,"ENERGY_Voltage",0), ReadingsVal($name,"ENERGY_Current",0), ReadingsVal($name,"ENERGY_Power",0), ReadingsVal($name,"Wifi_RSSI",0)).'</div>' if($state eq "offline");;   \
}
attr Gosund_Trockner webCmd on:off:reboot

setstate Gosund_Trockner <img src="/fhem/images/fhemSVG/rc_GREEN.svg",img width="32" height="32"<div>&nbsp;;&nbsp;;Spannung: 228 V &nbsp;;&nbsp;;Stromstärke: 0.000 A &nbsp;;&nbsp;;Leistung: 0 W &nbsp;;&nbsp;;Wifi_RSSI: 22 %</div>
setstate Gosund_Trockner 2018-08-29 21:11:09 ENERGY_Current 0.000
setstate Gosund_Trockner 2018-08-29 21:11:09 ENERGY_Factor 0.00
setstate Gosund_Trockner 2018-08-29 21:11:09 ENERGY_Period 0
setstate Gosund_Trockner 2018-08-29 21:11:09 ENERGY_Power 0
setstate Gosund_Trockner 2018-08-29 21:11:09 ENERGY_Today 0.000
setstate Gosund_Trockner 2018-08-29 21:11:09 ENERGY_Total 1.095
setstate Gosund_Trockner 2018-08-29 21:11:09 ENERGY_Voltage 228
setstate Gosund_Trockner 2018-08-29 21:11:09 ENERGY_Yesterday 0.000
setstate Gosund_Trockner 2018-08-28 21:55:07 FallbackTopic DVES_7FBBEB
setstate Gosund_Trockner 2018-08-28 21:55:07 GroupTopic sonoffs
setstate Gosund_Trockner 2018-08-28 21:55:07 Hostname Gosund_Trockner-7147
setstate Gosund_Trockner 2018-08-28 21:55:07 IPAddress 192.168.178.48
setstate Gosund_Trockner 2018-08-28 23:30:12 LWT online
setstate Gosund_Trockner 2018-08-28 21:55:07 Module BlitzWolf SHP2
setstate Gosund_Trockner 2018-08-29 21:11:09 POWER on
setstate Gosund_Trockner 2018-08-25 17:22:01 Restart Restarting
setstate Gosund_Trockner 2018-08-28 21:55:07 RestartReason Software/System restart
setstate Gosund_Trockner 2018-08-26 15:24:36 SetOption0 off
setstate Gosund_Trockner 2018-08-26 15:20:18 SetOption1 off
setstate Gosund_Trockner 2018-08-26 15:22:16 SetOption15 on
setstate Gosund_Trockner 2018-08-26 15:17:51 Sleep 50 (50)
setstate Gosund_Trockner 2018-08-29 21:11:09 Time 2018-08-29T20:11:09
setstate Gosund_Trockner 2018-08-29 21:11:09 Uptime 0T23:16:10
setstate Gosund_Trockner 2018-08-29 21:11:09 Vcc 3.238
setstate Gosund_Trockner 2018-08-28 21:55:07 Version 6.1.1.13
setstate Gosund_Trockner 2018-08-28 21:55:07 WebServerMode Admin
setstate Gosund_Trockner 2018-08-29 21:11:09 Wifi_AP 1
setstate Gosund_Trockner 2018-08-29 21:11:09 Wifi_APMac 44:4E:6D:17:8C:C7
setstate Gosund_Trockner 2018-08-29 21:11:09 Wifi_RSSI 22
setstate Gosund_Trockner 2018-08-29 21:11:09 Wifi_SSId FRITZ1313
setstate Gosund_Trockner 2018-08-27 18:21:01 state on


rudolfkoenig

Ich meinte die _komplette_ Raw Definition, also auch die setstate Zeilen.