FHEM Forum

FHEM => Frontends => Thema gestartet von: Taggardos am 01 Juni 2016, 21:22:20

Titel: Befehl via URL absetzen
Beitrag von: Taggardos am 01 Juni 2016, 21:22:20
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

Titel: Antw:Befehl via URL absetzen
Beitrag von: viegener am 01 Juni 2016, 21:32:18
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.

Titel: Antw:Befehl via URL absetzen
Beitrag von: CoolTux am 01 Juni 2016, 21:48:07
Und XHR=1 kommt wenn überhaupt ganz ans Ende
Titel: Antw:Befehl via URL absetzen
Beitrag von: justme1968 am 01 Juni 2016, 21:57:10
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
Titel: Antw:Befehl via URL absetzen
Beitrag von: Taggardos am 01 Juni 2016, 21:59:47
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?
Titel: Antw:Befehl via URL absetzen
Beitrag von: justme1968 am 01 Juni 2016, 22:08:07
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
Titel: Antw:Befehl via URL absetzen
Beitrag von: Taggardos am 01 Juni 2016, 23:06:01
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;
}
Titel: Antw:Befehl via URL absetzen
Beitrag von: Michael am 03 Juni 2016, 18:08:55
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"
Titel: Antw:Befehl via URL absetzen
Beitrag von: Taggardos am 04 Juni 2016, 12:18:47
Wenn ich es richtig verstanden habe, sollte "&amp;" nur in HTML verwendet werden. https://dev.w3.org/html5/html-author/charref (https://dev.w3.org/html5/html-author/charref)

Als direkte Anweisung müsste man das "&amp;" durch ein simples "&" ersetzen.
Titel: Antw:Befehl via URL absetzen
Beitrag von: justme1968 am 04 Juni 2016, 12:45:23
ja. sie etwas weiter oben.
Titel: Antw:Befehl via URL absetzen
Beitrag von: Michael am 04 Juni 2016, 13:45: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.
Titel: Antw:Befehl via URL absetzen
Beitrag von: dev0 am 04 Juni 2016, 13:59:24
Wenn die Aktion ausgeführt wird, dann ist das kein Problem der URL mehr... Eher wie es in InfoPanel umgesetzt ist (kenne ich nicht).
Titel: Antw:Befehl via URL absetzen
Beitrag von: Michael am 04 Juni 2016, 16:11:09
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.
Titel: Antw:Befehl via URL absetzen
Beitrag von: Taggardos am 05 Juni 2016, 20:04:00
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.