MQTT2 für Worx Landroid Mähroboter

Begonnen von Otto123, 09 Juni 2020, 13:55:43

Vorheriges Thema - Nächstes Thema

rippi46

ZitatDiese Version von MQTT2_CLIENT ist _sehr_ alt.

sind das die richtigen Versionen?

00_MQTT2_CLIENT.pm 27389 2023-04-03 16:41:04Z rudolfkoenig
10_MQTT2_DEVICE.pm 26860 2022-12-16 08:13:49Z rudolfkoenig
00_MQTT2_SERVER.pm 26924 2022-12-29 14:35:15Z rudolfkoenig
FHEM, LMS, VDR ,Dell 9010 Ubuntu 20.04,Raspimatic, HM/HMIP, Max, Elro, Brennenstuhl u. Intertechno mit Connair.
Picoreplayer, Raspi IR-Lanadapter, Firmata(wifi), LaCrosse,
nanocul433, nanocul868, Signalduino, Connexoon,
MySensor-GW+Sensoren, RGBWW, Zigbee2mqtt,Xiaomi,Nextion,LEDMatrix,Alexa

rudolfkoenig

Zitatsind das die richtigen Versionen?
Ja. MQTT2_SERVER wird fuer diese Aufgabe nicht benoetigt.

frober

Wie vermutet, bin immer noch gesperrt.
Zum Test habe ich die unveränderte LandroidUtils.pm benutzt.

@Rudi: bitte die nächste 24h keine Tests und bei 3 Fehlversuchen geht die Sperre von vorne los :-(
P.S. hast du meinen vorigen Post gesehen?
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

frober

An alle die Testen, stellt bitte vorerst die Tests ein.
Ich habe neue Infos, die ich hier nicht teilen kann/darf.
Aber bei zu vielen Fehlversuchen kann es passieren, dass sogar die Mowerkommunikation gesperrt wird!

@Rudi ich schreibe die heute Abend eine Mail dazu.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

Ich habe zuletzt gestern um 18:14 mit FHEM einen Versuch gemacht (ging nicht), und danach (gefuehlt) 3,4-mal mit IOBroker (funktionierte immer ohne Probleme, jedenfalls laut Log und Statusanzeige), bis ca. 20:00.

Die Aufrufe sind in IOBroker verschachtelt, und ein Versuch mit ltrace hat nichts gebracht.

Ich versuch mich durch den Code zu wuehlen.
Testen (egal ob IOBroker oder FHEM) werde ich erst nach Freigabe.

rudolfkoenig

Ich habe jetzt eine Version von LandroidUtils.pm eingecheckt was ein MQTT connect ermoeglicht.

Usage (steht auch in LandroidUtils.pm drin):
define m2c MQTT2_CLIENT xx
attr m2c username a@bc.de
attr m2c connectFn {use LandroidUtils;;Landroid_connect($NAME,"worx",1)}
set m2c password mySecret
Danach ist entweder ein FHEM Neustart, oder "set m2c connect" notwendig.
Der letzte Parameter zu Landroid_connect erlaubt autocreate der MQTT2_DEVICE Instanzen, und setzt die Readings, die aus der HTTPS-Abfrage fuer "Mower-Info" kommen, und das bei jedem Token-Refresh.

Etwa einmal die Stunde wird ein reconnect stattfinden mit dem refresh_token.
Es gibt (noch?) kein automatisches reconnect, falls der Server streikt, dafuer muss man "set m2c connect" manuell ausfuehren.

TODO: jsonMap/setList/besseres readingsList/etc.
Das ueberlasse ich den Besitzern der Geraete.

Etwas Off-Topic: MQTT-Connect hat lange nicht geklappt, weil ich den mqtt_endpoint nicht aus dem Mower-Info geholt habe, sondern aus dem User-Info, beide Datensaetze stammen aus AWS-Abfragen.
Der Falsche heisst a1optpg91s0ydf-ats.iot.eu-west-1.amazonaws.com, der Richtige iot.eu-west-1.worxlandroid.com.

Ralli

#501
Vielen vielen Dank Rudi! Top!

Edit:

Connect erfolgreich, Readings ausgelesen.
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

frober

@Rudi auch von mir nochmals vielen Dank. :)
 
Mit den ganzen Anpassungen die nötig waren, hätte ich alleine keine Change gehabt, aber ich habe viel dadurch gelernt. :)

Ich habe gerade den Code angeschaut und gesehen, dass du viele meiner Gedanken schon umgesetzt hast. ;)
Nur eins, den vorhandenen Token könnte man doch z.B. bei <3500 sec weiterverwenden und nur zw. 3500 und 3600 ein refresh machen? Ok, im Normalfall sollte das keine Rolle spielen...
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

rudolfkoenig

Zitatden vorhandenen Token könnte man doch z.B. bei <3500 sec weiterverwenden und nur zw. 3500 und 3600 ein refresh machen?
Die seltenen Faelle waren mir den etwas aufwendigeren Code nicht wert.

Ralli

Bei mir ist der Token ein paar mal unauffällig erneuert worden:

2023.04.08 09:20:12.011 1: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT2_Client_Landroid)
2023.04.08 10:19:12.735 1: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT2_Client_Landroid)
2023.04.08 11:18:13.328 1: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT2_Client_Landroid)
2023.04.08 12:17:13.831 1: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT2_Client_Landroid)
2023.04.08 13:16:14.747 1: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT2_Client_Landroid)
2023.04.08 14:15:15.404 1: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT2_Client_Landroid)
2023.04.08 15:14:16.063 1: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT2_Client_Landroid)

Aber dann:
2023.04.08 16:14:15.567 1: ERROR: Landroid_connect MQTT2_Client_Landroid - read from https://id.eu.worx.com:443 timed out
2023.04.08 16:20:18.954 1: iot.eu-west-1.worxlandroid.com:443 disconnected, waiting to reappear (MQTT2_Client_Landroid)
2023.04.08 16:20:19.168 1: ERROR: Landroid_connect MQTT2_Client_Landroid - no access_token / <!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en-US"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en-US"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en-US"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en-US"> <!--<![endif]-->
<head>


<title>id.eu.worx.com | 502: Bad gateway</title>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta name="robots" content="noindex, nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" id="cf_styles-css" href="/cdn-cgi/styles/main.css" />


</head>
<body>
<div id="cf-wrapper">

   

    <div id="cf-error-details" class="p-0">
        <header class="mx-auto pt-10 lg:pt-6 lg:px-8 w-240 lg:w-full mb-8">
            <h1 class="inline-block sm:block sm:mb-2 font-light text-60 lg:text-4xl text-black-dark leading-tight mr-2">
             
              <span class="inline-block">Bad gateway</span>
              <span class="code-label">Error code 502</span>
            </h1>
            <div>
              Visit <a href="https://www.cloudflare.com/5xx-error-landing?utm_source=errorcode_502&utm_campaign=id.eu.worx.com" target="_blank" rel="noopener noreferrer">cloudflare.com</a> for more information.
            </div>
            <div class="mt-3">2023-04-08 14:20:19 UTC</div>
        </header>
       
        <div class="my-8 bg-gradient-gray">
            <div class="w-240 lg:w-full mx-auto">
                <div class="clearfix md:px-8">
                 
<div id="cf-browser-status" class=" relative w-1/3 md:w-full py-15 md:p-0 md:py-8 md:text-left md:border-solid md:border-0 md:border-b md:border-gray-400 overflow-hidden float-left md:float-none text-center">
  <div class="relative mb-10 md:m-0">
   
    <span class="cf-icon-browser block md:hidden h-20 bg-center bg-no-repeat"></span>
    <span class="cf-icon-ok w-12 h-12 absolute left-1/2 md:left-auto md:right-0 md:top-0 -ml-6 -bottom-4"></span>
   
  </div>
  <span class="md:block w-full truncate">You</span>
  <h3 class="md:inline-block mt-3 md:mt-0 text-2xl text-gray-600 font-light leading-1.3">
   
    Browser
   
  </h3>
  <span class="leading-1.3 text-2xl text-green-success">Working</span>
</div>

<div id="cf-cloudflare-status" class=" relative w-1/3 md:w-full py-15 md:p-0 md:py-8 md:text-left md:border-solid md:border-0 md:border-b md:border-gray-400 overflow-hidden float-left md:float-none text-center">
  <div class="relative mb-10 md:m-0">
    <a href="https://www.cloudflare.com/5xx-error-landing?utm_source=errorcode_502&utm_campaign=id.eu.worx.com" target="_blank" rel="noopener noreferrer">
    <span class="cf-icon-cloud block md:hidden h-20 bg-center bg-no-repeat"></span>
    <span class="cf-icon-ok w-12 h-12 absolute left-1/2 md:left-auto md:right-0 md:top-0 -ml-6 -bottom-4"></span>
    </a>
  </div>
  <span class="md:block w-full truncate">Frankfurt</span>
  <h3 class="md:inline-block mt-3 md:mt-0 text-2xl text-gray-600 font-light leading-1.3">
    <a href="https://www.cloudflare.com/5xx-error-landing?utm_source=errorcode_502&utm_campaign=id.eu.worx.com" target="_blank" rel="noopener noreferrer">
    Cloudflare
    </a>
  </h3>
  <span class="leading-1.3 text-2xl text-green-success">Working</span>
</div>

<div id="cf-host-status" class="cf-error-source relative w-1/3 md:w-full py-15 md:p-0 md:py-8 md:text-left md:border-solid md:border-0 md:border-b md:border-gray-400 overflow-hidden float-left md:float-none text-center">
  <div class="relative mb-10 md:m-0">
   
    <span class="cf-icon-server block md:hidden h-20 bg-center bg-no-repeat"></span>
    <span class="cf-icon-error w-12 h-12 absolute left-1/2 md:left-auto md:right-0 md:top-0 -ml-6 -bottom-4"></span>
   
  </div>
  <span class="md:block w-full truncate">id.eu.worx.com</span>
  <h3 class="md:inline-block mt-3 md:mt-0 text-2xl text-gray-600 font-light leading-1.3">
   
    Host
   
  </h3>
  <span class="leading-1.3 text-2xl text-red-error">Error</span>
</div>

                </div>
             
            </div>
        </div>

        <div class="w-240 lg:w-full mx-auto mb-8 lg:px-8">
            <div class="clearfix">
                <div class="w-1/2 md:w-full float-left pr-6 md:pb-10 md:pr-0 leading-relaxed">
                    <h2 class="text-3xl font-normal leading-1.3 mb-4">What happened?</h2>
                    <p>The web server reported a bad gateway error.</p>
                </div>
             
                <div class="w-1/2 md:w-full float-left leading-relaxed">
                    <h2 class="text-3xl font-normal leading-1.3 mb-4">What can I do?</h2>
                    <p class="mb-6">Please try again in a few minutes.</p>
                </div>
            </div>
             
        </div>

        <div class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
  <p class="text-13">
    <span class="cf-footer-item sm:block sm:mb-1">Cloudflare Ray ID: <strong class="font-semibold">7b4b267b3c08bb65</strong></span>
    <span class="cf-footer-separator sm:hidden">•</span>
    <span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
      Your IP:
      <button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">Click to reveal</button>
      <span class="hidden" id="cf-footer-ip">93.119.255.109</span>
      <span class="cf-footer-separator sm:hidden">•</span>
    </span>
    <span class="cf-footer-item sm:block sm:mb-1"><span>Performance & security by</span> <a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing?utm_source=errorcode_502&utm_campaign=id.eu.worx.com" id="brand_link" target="_blank">Cloudflare</a></span>
   
  </p>
  <script>(function(){function d(){var b=a.getElementById("cf-footer-item-ip"),c=a.getElementById("cf-footer-ip-reveal");b&&"classList"in b&&(b.classList.remove("hidden"),c.addEventListener("click",function(){c.classList.add("hidden");a.getElementById("cf-footer-ip").classList.remove("hidden")}))}var a=document;document.addEventListener&&a.addEventListener("DOMContentLoaded",d)})();</script>
</div><!-- /.error-footer -->


    </div>
</div>
</body>
</html>

Wobei das allerdings auch eher nach einem infrastrukturellen Problem aussieht...

Und danach nichts mehr, das liegt wahrscheinlich an dem AttributmaxFailedConnects 1?

Und nun connected der MQTT2_Client auch nicht mehr.
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

frober

Bei mir gibt es keine Probleme.
Gehe Mal im Device auf Def und übernehme ohne Änderung ob der Connect wieder funktioniert. Connect wird auto. ausgeführt.

id.eu.worx.com | 502: Bad gatewayDas verwundert mich.
@Rudi hast du eine Idee,?
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Ralli

Einen erneuten Connect (set ... connect) hatte ich natürlich probiert, das war erfolglos.

Ein shutdown restart hat's geheilt.
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

frober

Zitat von: Ralli am 08 April 2023, 20:19:05Einen erneuten Connect (set ... connect) hatte ich natürlich probiert, das war erfolglos.

Ein shutdown restart hat's geheilt.

Von (set ... connect) war nicht die Rede.
Def öffnen, als wolltest du xx ändern und einfach übernehmen löst einen Reconnect aus.
Dann kannst du ein shutdown restart sparen.
Raspi 3b mit Raspbian Buster und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Ralli

#508
Zitat von: frober am 08 April 2023, 21:11:51Von (set ... connect) war nicht die Rede.

Das weiß ich - hab's aber trotzdem probiert ;)

ZitatDef öffnen, als wolltest du xx ändern und einfach übernehmen löst einen Reconnect aus.
Dann kannst du ein shutdown restart sparen.

Danke, ja, ist mit bekannt.

So sah es heute nacht aus:

Zitat2023.04.09 01:11:46.922 1: iot.eu-west-1.worxlandroid.com:443 reappeared (MQTT2_Client_Landroid)
2023.04.09 01:29:54.704 1: iot.eu-west-1.worxlandroid.com:443 disconnected, waiting to reappear (MQTT2_Client_Landroid)
2023.04.09 02:28:56.740 2: maxFailedConnects (1) reached, no more reconnect attemtps
2023.04.09 03:27:57.398 2: maxFailedConnects (1) reached, no more reconnect attemtps
2023.04.09 04:26:58.294 2: maxFailedConnects (1) reached, no more reconnect attemtps
2023.04.09 05:25:58.917 2: maxFailedConnects (1) reached, no more reconnect attemtps
2023.04.09 06:25:01.522 2: maxFailedConnects (1) reached, no more reconnect attemtps
2023.04.09 07:24:02.182 2: maxFailedConnects (1) reached, no more reconnect attemtps

Seitdem stand das MQTT2_Client-Device auf disconnected.  Weder ein defmod noch ein shutdown restart haben dazu geführt, dass ein erfolgreicher Connect zustandekommt.
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

rudolfkoenig

Soweit ich weiss, sollte ein Neustart und ein "set ... connect" identisch sein, beide entfernen nrFailedConnects, genauso wie ein erfolgreiches connect.
modify (DEF oeffnen und speichern) tut das nicht.

Dass statt JSON mit auth-Daten ein HTML Dokument zurueckgeliefert wird, habe ich auch gesehen, ich habe es aber auf die Server-Probleme geschoben.
Wenn das "normal" ist, muessten wir rauskriegen, was in diesem Fall zu tun ist.