HTTP Frage- Anbindung WLAN - Gardena R40Li mittels eines ESP8266

Begonnen von Warlock_2016, 22 April 2019, 21:06:13

Vorheriges Thema - Nächstes Thema

Warlock_2016

Hallo Zusammen,

ich möchte gerne in meinen Gardena R40LI eine ES8266 Board mit WIFI installieren und am Motherboard anschliessen, damit ich über FHEM Befehle mittels Post/Get den Roboter steuern kann.

Es gibt im Netz eine gute Anleitung dazu mit den HEXcode, aber leider mehr mit dem Fokus auf der Hardware "LOXONE" und wie man es auf dieser Plattform realisiert >:(

https://www.loxwiki.eu/pages/viewpage.action?pageId=48137811

Ich war in der Lage auf dem ESP9266 das Sketch zu installieren und mit dem WIFI zu verbinden. Ich kann nun mittels einem Browser (siehe Bild Anhang) Befehle absetzen. Ebenso hat der Programmier vom Sketch erwähnt, dass man direkt Befehle absetzen kann (siehe auch unten)

Meine Frage hier wäre. 

Gibt es im FHEM eine Möglichkeit HTTP Befehle direkt an den ESP zusenden, wie auf dem Web Formular quasi ohne das Web Formular einsetzen zu müssen?

Wenn ich mir das HTML Coding ansehen sind folgende Funktionen im Header aufgebaut. Die Funktion "function con() " baut beispielsweise die Verbindung zum ESP auf.


Gruss, Markus


______________________________________________________________________

<html><head><title>dihav SerialPort over WiFi - HTML Interface</title></head><body style="background-color:#1C2128;text-align:center;line-height:250%"><br><div style="width:500;padding:10;margin:auto;box-shadow:0 0 6 2 rgba(0,0,0,0.2);border-radius:10;background-color:#8EA9CC"><style>input{width:100%} select{width:100%} .b2{width:50%} .b4{width:25%} </style><script language=javascript>
var art, rfc = 0;
function con() {
var s='bdrt=' + frm.bdrt.value + '&dbt=' + frm.dbt.value + '&sbt=' + frm.sbt.value + '&prty=' + frm.prty.value;
var req = new XMLHttpRequest();
req.onload = function(e) {
if (req.status == 200) if (req.responseText == 'OK') {
frm.disbtn.disabled = false;
frm.conbtn.disabled = true;
if (frm.ars.value != 0) art = setInterval(rec, frm.ars.value);
}
}
req.open('POST', 'con?' + rfc.toString(), true);
rfc++;
req.send(s);
}
function dis() {
var req = new XMLHttpRequest();
req.onload = function(e) {
if (req.status == 200) if (req.responseText == 'OK') {
frm.disbtn.disabled = true;
frm.conbtn.disabled = false;
clearTimeout(art);
}
}
req.open('GET', 'dis?' + rfc.toString(), true);
rfc++;
req.send(null);
}
function arschng() {
if (frm.disbtn.disabled) return;
clearTimeout(art);
if (frm.ars.value != 0) art = setInterval(rec, frm.ars.value);
}
function rec() {
if (frm.disbtn.disabled) return;
var req = new XMLHttpRequest();
req.onload = function(e) {
if (req.status == 200) if (req.responseText.startsWith('OK')) {
frm.recvd.innerHTML += dt2txt(req.responseText.substr(2), frm.rectp.value);
}
}
req.open('GET', 'rec?' + rfc.toString(), true);
rfc++;
req.send(null);
}
function send(data) {
if (frm.disbtn.disabled) return;
var req = new XMLHttpRequest();
req.onload = function(e) {
if (req.status == 200) if (req.responseText == 'OK') {
frm.sndhst.innerHTML += dt2txt(data, frm.dttp.value);
}
}
req.open('POST', 'snd?' + rfc.toString(), true);
rfc++;
req.send(data);
}
function snddt() {
var d = '', v = frm.snd.value, t = frm.dttp.value, p = '', i;
if (t != 0) v += ' ';
for (var k = 0; k < v.length; k++)
if (t == 0) {
d += v.charCodeAt(k).toString(16);
} else if (v.charAt(k) == ' ') {
if ((p != '') && (t == 1)) i = parseInt(p, 16);
if ((p != '') && (t == 2)) i = parseInt(p);
if (!isNaN(i)) {
if (i < 0) i = 0;
if (i > 255) i = 255;
if (i < 16) d += '0';
d += i.toString(16);
}
p = '';
} else
p += v.charAt(k);
if (frm.apnd.value == 1) d += '0d';
if (frm.apnd.value == 2) d += '0a';
if (frm.apnd.value == 3) d += '0d0a';
send(d);
}
function dt2txt(data, typ) {
var r = '', i;
for (var k = 0; k < data.length; k += 2) {
i = parseInt(data.substr(k, 2), 16);
if (typ == 0) r += String.fromCharCode(i);
if ((typ == 1) && (i < 16)) r += '0';
if (typ == 1) r += i.toString(16) + ' ';
if (typ == 2) r += i.toString() + ' ';
}
return(r);
}


____________________________________________________________


Step 10: Directly Use WiFi in Your Program
If you want to make a program that directly connects to this device without using the software downloaded from step 6, use the following protocol, I've made for this device.

Each [] is a byte.
Baud rate on port 2321 is a 4-byte value that most significant byte will be sent first.

Connect:
HTTP (Port 80):
Request: POST con
bdrt=####&dbt=#&sbt=#&prty=#
Response: OK or ER

Port 2321:
Request: [1][bdrt][bdrt][bdrt][bdrt][dbt][sbt][prty]
Response:
  • or [1]

    Disconnect:
    HTTP (Port 80):
    Request: GET dis
    Response: OK

    Port 2321:
    Request: [2]
    Response: [1]

    Receive Data:
    HTTP (Port 80):
    Request: GET rec
    Response: OK...data(hex)... or ER

    Port 2321:
    Data bytes will be sent to a server created on the PC on port 2321.

    Send Data:
    HTTP (Port 80):
    Request: POST snd
    ...data(hex)...
    Response: OK or ER

    Port 2321:
    Request: [3][datasize(max255)]...data...
    Response:
  • or [1]


    Test Connection:
    Port 2321:
    Request: [4]
    Response: [44]



Bender78

#1
Hallo,

bist du in dieser Sache schon weiter gekommen? Wollte dies ebenfalls an meinem R70Li einbauen und warte derzeit aber noch auf die Teile.
Via Udp funktioniert das nicht?

Warlock_2016


amenomade

Anscheinend muss man nur GET und POST Requests absenden. Von daher, sollte es mit HTTPMOD möglich sein

Alternativ mit curl in myUtils
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

eppi

Mein Material (Flachbandkabel und Pfostenstecker) ist noch unterwegs, trotzdem habe ich mich mal etwas eingelesen.
Für mein Projekt benötige ich folgende Befehle:

#Manuell:
#02-0E-01-03-D2-03
system "curl -s -k http://192.168.x.y/send?cmd=02-0E-01-03-D2-03"

#Auto:
#02-0E-01-04-51-03
system "curl -s -k http://192.168.x.y/send?cmd=02-0E-01-04-51-03"

#Home:
#02-0E-01-02-8C-03
system "curl -s -k http://192.168.x.y/send?cmd=02-0E-01-02-8C-03"

#Start:
#02-0E-01-01-6E-03
system "curl -s -k http://192.168.x.y/send?cmd=02-0E-01-01-6E-03"

#Stop:
#02-0E-01-00-30-03
system "curl -s -k http://192.168.x.y/send?cmd=02-0E-01-00-30-03"


Versuche deshalb mal in die FHEM-Commandozeile folgendes einzugeben (curl muss installiert sein auf deinem RPI):
IP 192.168.x.y durch die deines ESP ersetzen
{system "curl -s -k http://192.168.x.y/send?cmd=02-0E-01-02-8C-03"}
und
{system "curl -s -k http://192.168.x.y/send?cmd=02-0E-01-01-6E-03"}

Danach sollte der Robotermäher zurück zur Basis fahren..
Bei den curl Parameter (-s -k) bin ich mir nicht ganz sicher, ob diese benötigt werden. Das werde ich testen, sobald mein Material hier ist.

Viel Erfolg!


amenomade

Wenn das so ist, und dazu keine Authentifizierung nötig ist, kann man das super einfach mit HTTPMOD abbilden:

define R40li HTTPMOD 192.168.x.y/send?cmd=%%code%% 0
attr R40li replacement01Mode text
attr R40li replacement01Regex %%code%%
attr R40li get01Name Manuell
attr R40li get01Replacement01Value 02-0E-01-03-D2-03
attr R40li get02Name Auto
attr R40li get02Replacement01Value 02-0E-01-04-51-03
attr R40li get03Name Auto
attr R40li get03Replacement01Value 02-0E-01-02-8C-03
attr R40li get04Name Auto
attr R40li get04Replacement01Value 02-0E-01-01-6E-033
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Warlock_2016

Hast du in der Zwischenzeit deine Teile bekommen zum Ausprobieren?
Mein Verständnis war, dass man zuerst einen Connect zum Mähroboter machen muss?

amenomade

Ich habe selbst kein Gardena. Aber wenn Du das HTTPMOD wie oben definierst, und dann die Log mit verbose 5 zeigst, könnte man weiter gehen. Selbst das Login kann man einfach in HTTPMOD einbauen.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

eppi

Zitat von: Warlock_2016 am 16 Juni 2019, 23:05:16
Hast du in der Zwischenzeit deine Teile bekommen zum Ausprobieren?
Mein Verständnis war, dass man zuerst einen Connect zum Mähroboter machen muss?
Nein, leider noch nicht. China (Ali) Bestellungen dauern in letzter Zeit bei mir 5 und mehr Wochen. Ich melde mich bei dir sobald das Material hier ist und ich testen konnte.

Accureve

Hallo, habe eine Anleitung zur Automatisierung des Gardena R40li mit einem ESP8266 in folgendem Beitrag hinterlegt: https://forum.fhem.de/index.php/topic,111669.0.html