NEWS
IOBroker - HTTP Post/GET ESP8266 und HTML_WEbFronted
-
Hallo Zusammen
ich habe folgenden Use Case. Ich habe auf meinen Rasberry IoBroker laufen und ich bin damit sehr zufrieden. Die meisten meiner Aktoren sind Homematic. Ich habe jetzt das Problem, dass ich gerne in meinen Rasenmähroboter einen ESP8266 im Wlan verbauen möchte, um ihn mittels dem IoBroker und VIS zusteuern.
Derzeit kann ich auch Befehle über das HTML WebFront an den ESP absenden und es funktioniert.
Gemäss dem Entwickler ist es auch möglich direkt Befehle an den ESP über einen Programmcode (zum Beispiel: JavaScript, Pearl, C) zu senden mittels WebSocket und über einen speziellen Port.
Hat jemand mit sowas Erfahrung wie man einen HTPP Post mit Get und Post im IoBroker aufbauen könnte?
Gruss, Markus
-
Hallo,
ich sende mit folgendem HTTP request Daten an meine ESPs:
require("request")('http://192.168.0.6/state1').on("error", function (e) {console.error(e);});
Hier sendet er den Befehl state1, der vom ESP ausgewertet/ausgeführt wird.
Viele Grüße
Christian -
ich sende besondere tasmota befehle an die sonoffs auf diese art (dabei wird curl genutzt):
exec('curl "http://sonoff11/cm?cmnd=power2 off"');
man muss nur den http eintrag ändern. geht auch mit blockly
-
Ja danke für Eure Hilfe. Guter Schritt voran.
Was ich nur nicht ganz verstehe wie man rausfinden kann, welche Parameter man mit in der Url mitgeben muss.
Wenn ich mir den Code hinter der HTML Seite ansehe (siehe Bilde und unten den Code), der den ESP mit einem Formular ansteuert, dann sehe ich folgenden JavaScript Code im Header hinterlegt:u.a. auch die Befehle für Post "req.open('POST', 'con?' + rfc.toString(), true); der das Event an den ESP abfeuert.
Heisst es dann ich muss in der Url folgenden Code angeben Christian:
Im Prinzip muss es ja trivial sein, wenn man einfach die Formfunktionen simulieren könnte.
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);
}
</script><b>Gardena_Maehroboter</b><br><form name=frm><table style="width:100%"><tr><td colspan=2 align=right><u><br>Connection</u></td></tr><tr><td style="width:20%">Baud rate:</td><td style="width:80%"><select size=1 name=bdrt><option>600</option><option>1200</option><option>2400</option><option>4800</option><option>9600</option><option>14400</option><option>19200</option><option>28800</option><option>38400</option><option>56000</option><option>57600</option><option selected>115200</option><option>128000</option><option>256000</option></select></td></tr><tr><td>Data bits:</td><td><select size=1 name=dbt><option>5</option><option>6</option><option>7</option><option selected>8</option></select></td></tr><tr><td>Stop bits:</td><td><select size=1 name=sbt><option selected>1</option><option>2</option></select></td></tr><tr><td>Parity:</td><td><select size=1 name=prty><option value=0 selected>None</option><option value=1>Odd</option><option value=2>Even</option></select></td></tr><tr><td></td><td><input type=button class=b2 value=Connect name=conbtn onclick="con();"><input type=button class=b2 value=Disonnect name=disbtn disabled onclick="dis();"></td></tr><tr><td colspan=2 align=right><u><br>Transmitter</u></td></tr><tr><td>Data:</td><td><input name=snd></td></tr><tr><td>Append data:</td><td><select name=apnd size=1><option value=0>None</option><option value=1>CR</option><option value=2>LF</option><option selected value=3>CR+LF</option></select></td></tr><tr><td>Data type:</td><td><select name=dttp size=1><option value=0 selected>ASCII</option><option value=1>HEX (example: 21 f3 1a)</option><option value=2>Decimal (example: 5 241 94 123)</option></select></td></tr><tr><td></td><td><input type=button class=b4 value=Send onclick="snddt();"><input type=button class=b4 value="Send CR" onclick="send('0d');"><input type=button class=b4 value="Send LF" onclick="send('0a');"><input type=button class=b4 value="Send CR+LF" onclick="send('0d0a');"></td></tr><tr><td>History:</td><td><textarea name=sndhst style="width:100%" rows=5></textarea></td></tr><tr><td colspan=2 align=right><u><br>Receiver</u></td></tr><tr><td>Display type:</td><td><select name=rectp size=1><option selected value=0>ASCII</option><option value=1>HEX</option><option value=2>Decimal</option></select></td></tr><tr><td>Refresh every:</td><td><select name=ars size=1 onchange="arschng();"><option value=0 selected>None</option><option value=5000>5 second</option><option value=10000>10 seconds</option></select></td></tr><tr><td></td><td><input type=button value="Receive Now" onclick="rec();"></td></tr><tr><td>Received data:</td><td><textarea name=recvd style="width:100%" rows=5></textarea></td></tr></table></form><a href=set>Settings</a></div><a href=http://www.dihav.com/ style="text-decoration:none;color:#8EA9CC;font-size:0.6em">www.dihav.com</a></body></html> -
@Schmeckm :
Mich würde das Thema auch brennend interessieren- kannst du vielleicht einen Link auf den Code oder weitere Infos zu der ESP- Anbindung schicken. Robonect ist mir eindeutig zu teuer - das könnte eine Alternative darstellen.
LG Schubi -
@Schmeckm sagte in IOBroker - HTTP Post/GET ESP8266 und HTML_WEbFronted:
Heisst es dann ich muss in der Url folgenden Code angeben Christian:
http://192.168.178.20/con?Da fehlt noch der Parameter: rfc.toString(), true
den musst Du noch rausfinden und anhängen.Gruß
Christian