MQTT Client Anbindung

Hallo,

Ich hab einen mosquitto broker auf einem raspi laufen der von domoticz mit Daten gefüttert wird (mit diesem Workaround konnte ich meine LG Klimaanlage „lokal“ abbilden).
Jetzt möchte ich gerne diese Variablen von Symcon aus steuern. Nachdem ich hier nicht so einen tiefen Einblick in die Materie hab, bitte ich um euren Input - Wie kann Symcon auf diese Daten zugreifen und automatisch alle Variablen anlegen? Gibts irgendein Modul, welches ich dazu zweckentfremden kann? Der Versuch, dass domoticz direkt auf den neuen Symcon MQTT Server schreibt, brachte keinen Erfolg.

Grüße,
Thomas

Der Versuch, dass domoticz direkt auf den neuen Symcon MQTT Server schreibt, brachte keinen Erfolg.

Da müsste was im LOG zu sehen sein, wenn die Daten passen.
Anhand der LOG Daten könnte man was bauen.
domoticz, da habe ich keine Ahnung. Wie kommen denn da die Daten der LG Klimaanlage rein ?

Für Domoticz gibts ein Plugin mit dem man an die Daten von LG rankommt (GitHub - olinek2/LGAC_SmartT: Domoticz plugin for LGAC SmartThing).

Hab bei Domoticz eingerichtet dass Daten unter dem Topic „domoticz\out“ publiziert werden (siehe Anhang).

Ich bekomm laufend Einträge im Symcon-LOG wie diesen:

13.05.2019, 22:46:53 | VariableManager | [domoticz\out\Value] = {
„Battery“ : 255,
„RSSI“ : 12,
„description“ : „“,
„dtype“ : „Temp“,
„id“ : „00040002“,
„idx“ : 3,
„name“ : „LG AC Wohnzimmer - Ambient Temp“,
„nvalue“ : 0,
„stype“ : „LaCrosse TX3“,
„svalue1“ : „24.5“,
„unit“ : 2
}

Ich hab im MQTT Konfigurator nur eine Variable (vermutlich weil es nur ein Topic gibt)…

Drück doch mal den Debug Button im zweiten Bild.
Und die Daten zeigen.

Stopp, war zu schnell, du hast ja alle Daten im string, der muss zerlegt werden, in die einzeln VAR’s

Was du mal tun kannst:

[ul]
[li]Konfiguriere einen MQTT Server in IP-Symcon.[/li][li]Hintelrege die MQTT Einstellungen in der LG Klimaanlage[/li][LIST]
[li]IP-Adresse von IP-Symcon (MQTT Server)[/li][li]Port von dem MQTT server[/li][/ul]
[/LIST]
Danach kannst du das Debug des MQTT Server in IP-Symcon öffnen und es mal hier posten.
Evtl. könnte man daraus auch ein extra Modul schreiben.

Grüße,
Kai

Hallo,

Danke schon mal für die Rückmeldung. Das Problem ist dass die LG Klimaanlage nicht direkt zu konfigurieren ist; d.h. ich kann keinen Broker irgendwo eintragen.

Was ich gemacht hab:

  • Domoticz auf einem raspi installiert
  • LGAC SmartThinq Plugin (nach untenstehender Anleitung) eingebunden, dadurch sind die Geräte nativ auf der Oberfläche von Domoticz abgebildet und steuerbar. Funktioniert über ein Phyton Skript, dass dem „LG AC Device Server“ (läuft lokal) lauscht.

Dann hab ich drei Dinge probiert um die Daten in Symcon zu bekommen:

    • Mosquitto Broker auf diesem Raspi installiert
  • Ein MQTT Plugin in Domoticz schreibt „domiticz/out“ auf den Mosquitto Broker —> keine Ahnung wie ich die Daten steuerbar in Symcon bekomme
  1. Ein MQTT Plugin in Domoticz schreibt „domiticz/out“ auf den Symcon Broker —> auch hier keine Ahnung wie ich die Daten nutzbar machen kann. Bekomme nur eine Variable mit der ganzen Zeichenfolge. Selbst wenn ich die Zeichenfolge zerlegen könnte, wüsste ich nicht wie ich diese dann wieder beschreiben soll

  2. Hab auch gesehen, dass Domoticz eine JSON Api hat (Domoticz API/JSON URL’s - Domoticz). Auch hier hab ich im Forum schon nach Einbindungsmöglichkeiten gesucht, bin aber auch nicht schlauer geworden.

Sollte es nicht irgendwelche step-by-step Anleitungen geben, seh ich das Thema für mich als erledigt. Ich hab leider nicht den technischen Background um hier etwas selber zu basteln.

Grüße,
Thomas

Hatte ich falsch gelesen.
Wenn die LG Klimaanlage kein MQTT kann, geht das natürlich nicht.
Du hast die Daten doch schon in IP-Symcon.

Ich stell dir mal schnell eine unsaubere Lösung vor:

Leg dir ein Script an:


$VariablenID = 12345 //ID der Variable Value
$JSON= GetValue($VairablenID)
$Daten = json_decode($JSON);

//Zugreifen kannst du dann auf die Daten mit:

$Daten->Battery;
$Daten->RSSI;
//usw...

Also könntest du nun die Daten mit SetValue in eine Variable schreiben, die du dir vorher anlegst.
Das Script kannst du dann ja immer ausführen lassen, wenn die Variable Value sich ändert.

Wie gesagt, es ist keine schöne Lösung, aber so könntest du es schnell in einzelne Variablen schreiben.

Grüße,
Kai

danke - ich weiß auf was du hinaus willst. die werte in die variablen ablegen sollte ich somit hinbekommen.

allerdings hab ich grad das Problem, dass alle Werte zum Topic „domoticz/in“ von Domoticz ignoriert werden…

Hier das LOG von Domoticz

2019-05-14 12:12:18.447 MQTT: Topic: domoticz/in, Message: { „Battery“ : 255, „RSSI“ : 12, „description“ : „“, „dtype“ : „Light/Switch“, „id“ : „00040001“, „idx“ : 2, „name“ : „LG AC Wohnzimmer - Power“, „nvalue“ : 0, „stype“ : „Switch“, „svalue1“ : „0“, „switchType“ : „On/Off“, „unit“ : 0 }
2019-05-14 12:12:18.455 (LG AC Wohnzimmer) Pushing ‚CPluginMessageBase‘ on to queue
2019-05-14 12:12:18.461 (LG AC Wohnzimmer) Processing ‚CPluginMessageBase‘ message
2019-05-14 12:12:18.462 (LG AC Wohnzimmer) Message handler ‚onDeviceModified‘ not callable, ignored.

ich muss mal schauen an was es hier scheitert… das ganze direkt in symcon einbinden zu können wär mir wesentlich lieber…

Ich hab die Anbindung jetzt am Laufen. Für nähere Infos einfach melden.

Habs jetzt schlussendlich über Aufrufe von der JSON API von Domoticz gelöst, nachdem ich mit dem Zerstückeln der ganzen MQTT Flut nicht zurecht gekommen bin…
Ich hab für jede Variable ein Abfrage- und Sende-Skript angelegt - Funktioniert tadellos (auch wenn der Code alles andere als schön ist - das könnte man sicher eleganter lösen). Aber viele Wege führen ans Ziel :slight_smile:

Grüße,
Thomas

Hallo,
wenn Du bereits einen RasPi einsetzt, kannst Du z.B. mit Node-Red die MQTT-Daten relativ einfach in einzelne MQTT-Topics aufteilen.
Das mache ich z.B. mit dem Temperatur- und Feuchtesensor AM2302 so. Auf dem RasPi (mit Mosqitto) kommen die Daten in einer msg an. Die werden zerlegt und dann auf zwei Topics verteilt. Zusätzlich habe ich einen dritten Topic angelegt, der das aktuelle Datum sendet.
Hiermit bekomme ich die „letzte Meldung“ heraus.

Ich bin aber auch gerade dabei, mich in MQTT einzuarbeiten. RasPis werden nun per MQTT senden.
Mit freundlichen Grüßen
Matthias

Hallo,

ich bin zufällig auf diesen einjährigen Thread gestoßen.
Ich habe auch eine LG SmartThinQ Klimaanlage.
Ich bin zwar nicht so zufrieden und hätte gerne anstatt dieser dort auch eine Samsung WindFree wie in den anderen Räumen, aber damals gab es leider noch keine Samsung mit soviel Power. Aber dies ist ein anderes Thema.

Zurzeit spreche ich die LG mit ein Sammelsurium an IR-Befehlen an, was leider alles andere als optimal und alle mal nicht vollständig ist. (Wenigstes ging das besser als bei den Samsungs.)

Die Lokale Ansteuerung mit dem Abfangen und Senden der Befehle über einen Raspberry klingt richtig interessant.
Ich werde am WE mal die Software installieren, bin leider ein Linuxlegastheniker aber ich habe ja schon 4 Pi’s in Betrieb, mal sehen wie weit ich komme.
@netfusion kannst du uns hier deine Skripte mal offen legen und die schritte Erläutern wie du das realisiert bekommen hast.
Umso detaillierter umso besser aber ich bin auch für eine kurze Anleitung Dankbar.
Das währe echt eine enorme Hilfe.

Danke
André

Hallo,

ich habe mich mal an der Steuerung versucht.
Leider scheitere ich bereits an der Installation des LGAC plugins

Die Installation von domoticz auf den Pi gibt recht problemlos und läuft auch.
Ich bleibe bei der Plugin instalation
„python3 example.py“ hängen

eine wideq_state.json wird mir leider nicht erzeugt.

Hier die Meldung nach dem ich die Webadresse mit dem Token eingetragen habe

[i]

File „/usr/lib/python3/dist-packages/urllib3/connectionpool.py“, line 600, in urlopen
chunked=chunked)
File „/usr/lib/python3/dist-packages/urllib3/connectionpool.py“, line 343, in _make_request
self._validate_conn(conn)
File „/usr/lib/python3/dist-packages/urllib3/connectionpool.py“, line 841, in validate_conn
conn.connect()
File „/usr/lib/python3/dist-packages/urllib3/connection.py“, line 344, in connect
ssl_context=context)
File "/usr/lib/python3/dist-packages/urllib3/util/ssl
.py", line 344, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File „/usr/lib/python3.7/ssl.py“, line 412, in wrap_socket
session=session
File „/usr/lib/python3.7/ssl.py“, line 853, in _create
self.do_handshake()
File „/usr/lib/python3.7/ssl.py“, line 1117, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1056)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File „/usr/lib/python3/dist-packages/requests/adapters.py“, line 449, in send
timeout=timeout
File „/usr/lib/python3/dist-packages/urllib3/connectionpool.py“, line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File „/usr/lib/python3/dist-packages/urllib3/util/retry.py“, line 398, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host=‚eic.lgthinq.com‘, port=46030): Max retries exceeded with url: /api/member/login (Caused by SSLError(SSLError(1, ‚[SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1056)‘)))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File „example.py“, line 214, in <module>
example(sys.argv[1:])
File „example.py“, line 200, in example
example_command(client, args)
File „example.py“, line 177, in example_command
ls(client)
File „example.py“, line 25, in ls
for device in client.devices:
File „/home/pi/LGAC_SmartT/wideq.py“, line 474, in devices
self._devices = self.session.get_devices()
File „/home/pi/LGAC_SmartT/wideq.py“, line 465, in session
self._session, self._devices = self.auth.start_session()
File „/home/pi/LGAC_SmartT/wideq.py“, line 255, in start_session
session_info = login(self.gateway.api_root, self.access_token)
File „/home/pi/LGAC_SmartT/wideq.py“, line 177, in login
return lgedm_post(url, data)
File „/home/pi/LGAC_SmartT/wideq.py“, line 111, in lgedm_post
res = requests.post(url, json={DATA_ROOT: data}, headers=headers)
File „/usr/lib/python3/dist-packages/requests/api.py“, line 116, in post
return request(‚post‘, url, data=data, json=json, **kwargs)
File „/usr/lib/python3/dist-packages/requests/api.py“, line 60, in request
return session.request(method=method, url=url, **kwargs)
File „/usr/lib/python3/dist-packages/requests/sessions.py“, line 533, in request
resp = self.send(prep, **send_kwargs)
File „/usr/lib/python3/dist-packages/requests/sessions.py“, line 646, in send
r = adapter.send(request, **kwargs)
File „/usr/lib/python3/dist-packages/requests/adapters.py“, line 514, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host=‚eic.lgthinq.com‘, port=46030): Max retries exceeded with url: /api/member/login (Caused by SSLError(SSLError(1, ‚[SSL: DH_KEY_TOO_SMALL] dh key too small (_ssl.c:1056)‘)))
[/i]

Meine Englischkenntnisse sind leider nicht die besten und mein Unix noch weniger.
Ich könnte ein wenig Hilfe gebrauchen.

Besten Dank
André