Neuigkeiten:

moziloCMS verwendet Cookies. Wenn Sie auf unserer Seite weitersurfen, stimmen Sie der Cookie-Nutzung zu Datenschutzerklärung
moziloCMS Layouts
moziloCMS Plugins

Hauptmenü

http-request via jQuery

Begonnen von Dragonfly, 09. Juli 2015, 08:59:37

« vorheriges - nächstes »

Dragonfly

Hallo - ich bin von der Hausautomatisierer-Front.

Es gibt bereits viele Oberflächen um alles mögliche zu steuern, leider nicht mit Userberechtigung.
Jetzt muß Mozilo herhalten - also schnell mal auf einer Synology installiert (Rechte alles auf 777) und los gehts.

Um daheim etwas zu schalten, muß ich "nur" einen http-get absetzten; schon geht das Licht an, der PC aus, oder der Radio an.
Die einfachste Umsetzung war ein Link, die Antwort vom Server landet in einem I-Frame.
Geht, ist aber nicht ausbaufähig; stefanbe hat mich auf jQuery aufmerksam gemacht.

Daraufhin habe ich mir folgenden Code ergooglet:
<head>{JQUERY}
<script>
$(document).ready(function(){
     $("button").click(function(){
$.get("http://url1/ein",
function(data, status){
             alert("Data: " + data + "\nStatus: " + status);
         });
     });
});
</script>
  <title>

und zum Auslösen:
   <button>ein</button>

Das 1. Ziel ist nun:
Wie bekomme ich möglichst effizient mit einem Script und eigenem Syntax mehrere Schaltflächen für einen einfachen request?

[Button={DESCRIPTION}|{VALUE}]
[Button=ein|http://url1/ein]
[Button=aus|http://url1/aus]
[Button=Kamera Position 1|http://url2/pos1]
...

Es soll also ein Button erstellt werden, welcher benannt werden kann und eine hinterlegte Url im Script einfügt, welches sicher noch zu 50% abgespeckt werden kann  :mrgreen:

Mit dem Plugin "Webcambild" sollte ich auch meine IP-Kamera angezeigt bekommen - hier möchte ich dann einige Requests hinterlegen, welche die Cam dann steuern (Positionen anfahren)


das 2. Ziel - darum der ganze Zirkus:
sofern sich die Konfiguration mit einem eigenen Syntax gut machen läßt wäre, die Buttons so zu präsentieren, daß sie den Schaltstatus kennen - also grüner Button für ein, rot für aus, gelb für unbekannt.
Auch hier gibt es wieder einen Request der gesendet und ausgewertet werden soll.

Hatte noch nichts mit jQuery zu tun - bitte lieb sein  :-[

Vielen Dank für die Hilfe - Tom

stefanbe

#1
Willkommen Dragonfly

so als erstes das wieder Löschen
<head>{JQUERY}
<script>
$(document).ready(function(){
     $("button").click(function(){
$.get("http://url1/ein",
function(data, status){
             alert("Data: " + data + "\nStatus: " + status);
         });
     });
});
</script>
  <title>

<button>ein</button>


den Anhang als Plugin instalieren
mit einem Editor die index.php vom Plugin aufmachen und meinen beiden Kommentaren folgen :-)
Plugin activieren.
nee Inhaltseite aufmachen und nur {CCURemotePC} reinschreiben und die Inhaltseite aufrufen.

ausprobieren.

lg stefanbe

Dragonfly

Vielen Dank - leider nichts  :'(

status= error
error: not found


folgendes:
die .exe kann heißen wie sie will - da gibt es ein Programm welches CCU-RemotePC heißt;
vom aufbau des Scripts würde ich vorschlagen das "ding" mozilo2ccu(.exe) nennen, da es schon sehr speziell in diese richtung geht, und mit allgemeinen requests nichts mehr zu tun hat - ist halt schon Teil 2....

Button erscheint keiner;
im Quelltext ist auch die zusammengesetzte url nicht vorhanden - kann das also nicht prüfen.

$ccu_url = '192.168.125.70/mozilo2ccu.exe?'; - hier fehlt das fragezeichen im script, einfügen bringt keine Änderung

ich würde nicht encoden, wenn es sich vermeiden läßt  - wegen der lesbarkeit


im .js hast du ja auch (richtig) encodet;

im Source-Code taucht aber dann eine falsche auf:
<input type="hidden" name="ccu_state" value="state=dom.GetObject%28%22BidCos-RF.IEQ0023638%3A1.STATE%22%29" />
0 oder 1 kann ja jetzt nicht eingefügt sein, weil ja kein status da ist.

von dem "block" gibt es mehrere Varianten:
('CCU-RemotePC').State(1)
('BidCos-RF.FEQ1234567:2.STATE').State(1)
('CUxD.CUX020019:1.STATE').State(0)
('BidCos-WIR.FEQ1234567:2.STATE').State(1) - die muß ich noch testen, hatte ich übersehen

hier auf meiner seite findest du vielleicht noch einige antworten: http://dragonfly.at/CCU-RemotePC/Senden-Beispiele.html

Kann man denn den "simplen-Request" ohne Plugin lösen?

Danke, Tom

Dragonfly

#3
Moment hier ist´s doch anders als gedacht:
value="state=dom.GetObject%28%22BidCos-RF.IEQ0023638%3A1.STATE%22%29"
            state=dom.GetObject%28%27BidCos-RF.IEQ0023638:1.STATE%27%29.State%280%29 - das ist eine was geht.

da wurde nur der val-Teil vom js nicht hinzugefügt - die %22 haben mich verwirrt - ich nehme immer %27, weil wir schon Probleme hatten, wenn in einem script mehrere " vorhanden sind, und dieses dann nicht mehr weiß, wo was anfängt bzw. aufhört.

Edit:
der Button ist doch da - man sieht in Crome aber fast nicht, weil kein Wert drinnen steht - im FF erkennt man ihn.

hätte das noch abgeändert - bringt aber auch nix:
$button_state = 'dom.GetObject(%27BidCos-RF.IEQ0023638:1.STATE%27)';

stefanbe

du hast da die portnr. vergessen und das fragezeichen brauchst du nicht
Zitat$ccu_url = '192.168.125.70/mozilo2ccu.exe?'

hab dir nochmal nen anhang gemacht siehe oben

schreib mir mal genau was da so geht oder nicht

lg stefanbe

stefanbe

hab das enkoden mal raus genommen

Dragonfly

das hab ich auskommentiert:
#$ccu_url = $this->PLUGIN_SELF_URL.'test.php';

so konfiguriert:

$ccu_url = '192.168.125.70:8181/CCU-RemotePC.exe';
$button_state = "dom.GetObject('BidCos-RF.IEQ0023638:1.STATE')";


Button: blau "unbekannt"

setzte ich die url aus dem source-code zusammen, fehlen einige teile:
192.168.125.70:8181/CCU-RemotePC.exe?state=dom.GetObject('BidCos-RF.IEQ0023638:1.STATE').Value()

getestet:
<xml>
<exec>/CCU-RemotePC.exe</exec>
<sessionId/>
<httpUserAgent>
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36
</httpUserAgent>
<state>true</state>
</xml>
true - also ein



so sieht der SC aus:


<script type="text/javascript">/*<![CDATA[*/var ccu_base = "192.168.125.70:8181/CCU-RemotePC.exe";/*]]>*/</script>
<script type="text/javascript" src="/plugins/CCURemotePC/control.js"></script>

und
<br />
<div class="ccu-button"><input type="hidden" name="ccu_state" value="dom.GetObject('BidCos-RF.IEQ0023638:1.STATE')" /><button value="" disabled></button></div>
   </article>

Dragonfly

Vielleicht wäre es einfacher, die url anders zusammenzusetzen - wegen anderer geräte:

192.168.125.70:8181/CCU-RemotePC.exe?state=dom.GetObject('BidCos-RF.IEQ0023638:1.STATE').Value()

Die url und das in der Klammer wäre zu konfigurieren....

BidCos-RF ist ein funk-teil
CUXD ein virtulelles....

IEQ... ist die seriennummer mit kanal
STATE sagt aus, ob 0 oder 1 zurückkommt (LEVEL gäbe hier eine zahl für einen %-Wert eines dimmers aus)

stefanbe

immer langsam erstmal muss das gehen

das .Value() und state= wird in der control.js gemacht

probier die neue mal aus

du must nur die index.php und control.js tauschen


Dragonfly

Leider wieder unbekannt.

<script type="text/javascript">/*<![CDATA[*/var ccu_base = "192.168.125.70:8181/CCU-RemotePC.exe";/*]]>*/</script>
<script type="text/javascript" src="/plugins/CCURemotePC/control.js"></script>

<br />
<div class="ccu-button"><input type="hidden" name="ccu_state" value="dom.GetObject('BidCos-RF.IEQ0023638:1.STATE')" /><button value="" disabled>Unbekant</button></div>
   </article>


Die CCU-Firewall blockiert aufrufe von unbekannten Ip-Adressen - ein "normaler" link auf einer HP kommt mit der IP des PC´s rein - habe die Firewall jetzt umgestellt, daß auch die IP der Synology akzeptiert werden würde - falls das hier anders läuft.

muß für heute leider schluß machen  >:(
sonst schimpft die frau....

stefanbe

so hab dir was neues gemacht

folge in der "control.js" den kommentaren

im chrome browser kanst du mit der rechten maustaste "element untersuchen" dann "console" da siehst du meldungen aus der "control.js"

hast du die möglichkeit zu schauen was beim server ankommt?

lg stefanbe


Dragonfly

#11
Danke für die doch recht intensiven Bemühungen:

Original, noch nichts verändert:
XMLHttpRequest cannot load %3192.168.125.70:8181/CCU-RemotePC.exe?state=dom.GetObject('BidCos-RF.IEQ0023638:1.STATE').Value(). Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.

darunter - nicht in rot:
f.support.ajax.f.ajaxTransport.send @ jquery-1.7.2.min.js:4f.extend.ajax @ jquery-1.7.2.min.js:4get_ccu_state @ control.js:2(anonymous function) @ control.js:75f.event.dispatch @ jquery-1.7.2.min.js:3f.event.add.h.handle.i @ jquery-1.7.2.min.js:3f.event.trigger @ jquery-1.7.2.min.js:3(anonymous function) @ jquery-1.7.2.min.js:3e.extend.each @ jquery-1.7.2.min.js:2e.fn.e.each @ jquery-1.7.2.min.js:2f.fn.extend.trigger @ jquery-1.7.2.min.js:3(anonymous function) @ control.js:78f.Callbacks.o @ jquery-1.7.2.min.js:2f.Callbacks.p.fireWith @ jquery-1.7.2.min.js:2e.extend.ready @ jquery-1.7.2.min.js:2c.addEventListener.B @ jquery-1.7.2.min.js:2
control.js:34 error
control.js:35 error
control.js:36 DOMException: Failed to execute 'send' on 'XMLHttpRequest': Failed to load '%3192.168.125.70:8181/CCU-RemotePC.exe?state=dom.GetObject('BidCos-RF.IEQ0023638:1.STATE').Value()'.
    at Error (native)
    at Object.f.support.ajax.f.ajaxTransport.send


Hab die anderen Varianten probiert - kommt auf die schnelle gesehen das gleiche raus - geht ja jetzt ums xml-protokoll, das damit nicht zurecht kommt, und das wird ja nicht geändert - sehe ich das richtig?!

stefanbe

#12
ok

änder mal in der control.js das
url: "http://" + ccu_base + "?" + para,

Zitatgeht ja jetzt ums xml-protokoll, das damit nicht zurecht kommt, und das wird ja nicht geändert - sehe ich das richtig?!
nee es geht daeum das überhaupt was beim server ankommt

bin jetzt mal weg bis morgen

lg stefanbe

Dragonfly

#13
Etwas hat sich getan:
XMLHttpRequest cannot load http://192.168.125.70:8181/CCU-RemotePC.exe?state=dom.GetObject(%27BidCos-RF.IEQ0023638:1.STATE%27).Value(). No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.125.60' is therefore not allowed access.

Kleiner Nachtrag:
die schließende Klammer nach Value - also das letzte Zeichen der Url wird in der Console nicht zum link dazugezählt - beim anklicken fehlt also die letzte ) . Fügt man diese hinzu funktioniert der link.

stefanbe

das sieht ja schonn mal gut aus
jetzt kanste das url coden einschalten
//return str;
//return str.replace(/'/g, '%27');
//return str.replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29');
return str.replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/:/g, '%3A');

und ausprobieren

wenn dann noch nee fehlermeldung kommt
dann setzt mal das dazu
crossDomain: true,
        dataType: "xml",


lg stefanbe