Befehl via URL absetzen

Begonnen von Taggardos, 01 Juni 2016, 21:22:20

Vorheriges Thema - Nächstes Thema

Taggardos

Hallo,

ich habe ein kleines Problem, an dem ich leider nicht weiterkomme.
Ich baue mir gerade ein ganz kleines Webinterface um die wichtigsten Geräte schnell schalten zu können (am liebsten reines HTML, wenn ich ehrlich bin).

Die Schaltung funktioniert auch soweit mit folgendem <a> Tag:

<a href="http://192.168.178.201:8085/fhem?XHR=1&amp;cmd.HausLicht=set%20HausLicht%20toggle" >

Allerdings leitet der Link mich natürlich immer weiter zu einer blanken Seite (oder in einem neuen Tab via target).
Um das Problem zu umgehen, habe ich mir ein kleines javascript gebastelt, das ein Popup mit der URL öffnet und es dann wieder schließt (was besseres fällt mir nicht ein), welches jedoch nicht funktioniert.

Die URL wird zwar besucht, aber nichts geschaltet. Beim debuggen ist mir aufgefallen, dass selbst wenn ich die URL per Hand in den Browser einticker, nichts geschaltet wird. Gehe ich über den Link von der Seite, jedoch schon... Kann mir das doch bitte einer mal erklären?
Die Suche hat mir leider nicht weiter geholfen... :-/

Viele Grüße,
Christopher


viegener

Ich verstehe zwar nicht was Du versuchst zu erreichen, aber das &amp; solltest Du durch ein normales & ersetzen, denn es trennt die verschiedenen Parameter im URL.

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

CoolTux

Und XHR=1 kommt wenn überhaupt ganz ans Ende
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

justme1968

#3
FHEM ist die reihenfolge der query elemente egal.

das &amp; ist korrekt wenn die url in einem href verwendet wird. nur wenn man sie im browser direkt eingibt muss es & sein.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Taggardos

Ich habe es mir fast gedacht, dass das sehr komisch klingt^^

Erreichen möchte ich damit eine schnelle und leichte Seite, die ich bspw. vom iPhone aufrufen kann, um das Licht anzumachen wenn ich mal gerade zum Kompost gehe oder sonstiges. Ich habe auch die Tablet-UI, Dashboard und einen Floorplan zusammengebaut, allerdings passt das nicht ganz an diese Anforderung. (Werden an anderen Stellen eingesetzt)

Ich habe mal einen Screenshot angehängt, um zu verdeutlichen, was ich meine.

Vielen Dank für die Tipps, das hat das Phänomen mit der direkten Browsereingabe auf Anhieb gelöst :-)
Jetzt funktioniert auch das kleine Script, das ich gebaut habe.



Gibt es denn eine elegantere Lösung, als via Script das extra Fenster aufzurufen?

justme1968

mit etwas javascript kannst du statt dem href einen XMLHttpRequest machen und das ergebniss weg schmeissen. dann bleibst du auf der seite und es geht auch kein fenster auf. du kannst als beispiel die FW_cmd routine aus fhemweb.js verwenden.

als nächstes kommt dann bestimmt noch der wunsch das die icons den aktuellen lampen status widerspiegeln :)

aber im ernst: lädt deine seit wirklich so viel schneller als ein floorplan oder eine ftui seite mit nur drei knöpfen ?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Taggardos

Vielen lieben Dank für den Hinweis mit XMLHttpRequest. Genau das, was ich benötigt habe.

Es ist jetzt nicht so, dass es ewig dauert, aber es besteht schon eine Ladezeit von ein paar Sekunden.
Es vermute, es liegt an meinem Raspberry, auf dem der Server läuft. Der hat halt auch noch andere Dinge zutun^^

Da kommt so eine paar Byte große .html Datei mir schon gelegen...
Nicht zu vergessen der Drang, etwas selbst zu machen... Vermutlich hat der auch sehr großen Anteil an der Sache :-D

Also das Erweitern von dieser kleinen Geschichte ist gar nicht so abwegig :-D

Ich stelle das riesige Script hier mal rein, vielleicht hat ja jemand Freude daran oder hat noch Verbesserungsvorschläge :)


function SendRequest(devicename) {
var IP = "192.168.178.201"
var Port = "8085"

var url =  "http://" + IP + ":" + Port + "/fhem?XHR=1&cmd." + devicename + "=set%20" + devicename + "%20toggle";

var req = new XMLHttpRequest();
req.open("GET", url);
req.send(null);

req = null;
}

Michael

Moin @all

Auch ich komme irgendwie nicht klar.  ::)
Bekomme auch eine Leere Seite zurück.

Ich versuche im InfoPanel einen Link (Schaltbefehl) im IMG auszuführen.
img  - 648 510 2 "http://192.xxx.xxx.xxx:8083/fhem?XHR=1&amp;cmd.Umluft_S=set%20Umluft_S%20on" file "/opt/fhem/www/images/default/Umluft.on.png"
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

Taggardos

Wenn ich es richtig verstanden habe, sollte "&amp;" nur in HTML verwendet werden. https://dev.w3.org/html5/html-author/charref

Als direkte Anweisung müsste man das "&amp;" durch ein simples "&" ersetzen.

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Michael

#10
Moin

Erst mal Danke für eure Antworten.

ZitatAls direkte Anweisung müsste man das "&amp;" durch ein simples "&" ersetzen.

http://192.xxx.xxx.xxx:8083/fhem?XHR=1&cmd.Umluft_S=set%20Umluft_S%20off
http://192.xxx.xxx.xxx:8083/fhem?cmd.Umluft_S=set%20Umluft_S%20off&XHR=1
Leider klappt das auch nicht.
Geschaltet wird aber.
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

dev0

Wenn die Aktion ausgeführt wird, dann ist das kein Problem der URL mehr... Eher wie es in InfoPanel umgesetzt ist (kenne ich nicht).

Michael

Hallo @all

Habe mal die "Beschreibungbeschreibung" angesehen.
Aber auch bei dieser Version bekomme ich eine neue weiße Seite.

Zitat
Antw:55_InfoPanel.pm - Wer 02_RSS.pm mag, wird auch das hier lieben...
« Antwort #20 am: 30 Januar 2015, 11:17:42 »
Tipp: Button mit Statusanzeige

Code: [Auswählen]
button 13 0 0 160 80 0 0 {"http://192.168.123.241:8083/fhem?XHR=1&amp;cmd.az_Drucker=set%20az_Drucker%20toggle"} {"Drucker an"}
condition {ReadingsVal('az_Drucker','state','off') eq 'on'}
rgb "FF0000FF"
circle - 20 20 5 1
rgb "4D4D4DFF"
condition 1

@Taggardos

function SendRequest(devicename) {
var IP = "192.168.178.201"
var Port = "8085"

var url =  "http://" + IP + ":" + Port + "/fhem?XHR=1&cmd." + devicename + "=set%20" + devicename + "%20toggle";

var req = new XMLHttpRequest();
req.open("GET", url);
req.send(null);

req = null;
}

Wo muss dein Code hin und wie rufe ich Ihn auf?  :-[
Vllt hilft er mir auch.
Gruß, Michael

FHEM 6.0 auf RPi 3
CUL V3 868 Mhz | JeeLink LaCrosse & PCA301 | CCU3
BMP085(180) | 14x TX29DTH-IT | 5x PCA 301 | SMA Peripheries | MobileAlerts MA-10(100,120PRO,200,251,410,650,660,800) | HM IP

Taggardos

Also ich finde es in den meisten Fällen am saubersten, seinen Javascript Code in einer seperaten Datei aufzubewahren. Diese kann man im Head bereich einbinden.

<script language="javascript" type="text/javascript" src="Pfad zur Script Datei.js"></script>

Aufrufen könnte man die Funktion dann via Link zum Beispiel. <a href="#" onclick="SendRequest('devicename');" ></a>
Bedeutet das jedes Mal, wenn der Link angeklickt wird, die Funktion mit dem fest eingegebenen Device gestartet wird.