+ Antworten
Ergebnis 1 bis 5 von 5
  1. #1
    Registriert seit
    Aug 2018
    Beiträge
    74

    Standard Ist die Verbindung über die JSON-RPC-Schnittstelle bidirektional?

    Hallo,
    ich will in einem C#-Programm über die JSON-RPC-Schnittstelle in IP-Symcon einen Z-Wave-Schalter ein- und ausschalten. Bisher habe ich keine Erfahrung mit der JSON-RPC-Schnittstelle.
    Ist die Verbindung über die JSON-RPC-Schnittstelle bidirektional?
    Erhalte ich im C# eine Rückmeldung, wenn ich den Z-Wave-Schalter auf true oder false setze?
    Wenn ja, gibt es ein Beispiel?

    Alexander

  2. #2
    Registriert seit
    Feb 2017
    Beiträge
    1,132

    Hallo Alexander,

    die Anfrage ist bidirektional und jeder Aufruf wird bestätigt.

    Hier mal ein Javascript-Ausschnitt, wie so ein Aufruf möglich ist:
    Code:
    // Build request object
    let RPCrequest = {
        jsonrpc: '2.0',
        method: method, // Name of the method, e.g., 'SetValue'
        params: params, // All parameters in array, e.g., [ 12345, 23 ] for SetValue
        id: id                    // Any ID for a call, will respond with the same ID
    };
    
    // Configure the request
    let httpRequest = new XMLHttpRequest();
    httpRequest.open('POST', context.url);
    httpRequest.setRequestHeader('Content-Type', 'application/json');
    if (context.password != '') {
        let credentials = window.btoa(context.username + ":" + context.password);
        httpRequest.setRequestHeader('Authorization', 'Basic ' + credentials);
    }
    httpRequest.onreadystatechange = function () {
        if (this.readyState != 4) return;
    
        let response = JSON.parse(this.responseText);
        // Do something with response
    }
    
    httpRequest.send(JSON.stringify(RPCrequest));
    Einiges mag wohl Javascript spezifisch sein, aber man erkennt:
    - Anfrage per HTML POST mit Credentials
    - Antwort kommt als JSON

    Ich hoffe das hilft
    Geändert von Dr. Niels (17.09.18 um 09:11 Uhr)

  3. #3
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    20,423

    Hier gibt es auch noch Beispiele für cURL: Datenaustausch — IP-Symcon :: Automatisierungssoftware

    In C# sollte dies ebenfalls problemlos möglich sein.

    paresy

  4. #4
    Registriert seit
    Aug 2018
    Beiträge
    74

    Hallo,
    Danke für die Hilfe. Die Beispiele werde ich testen.

    Alexander

  5. #5
    Registriert seit
    Sep 2012
    Beiträge
    130

    Moin in die Runde,

    ich würde gerne mal auf das Schwarmwissen zugreifen :-) ...

    Ich komme hier schon seid ein paar Tagen nicht wirklich weiter. Ich bin dabei mein Wecker etwas zu erneuern und auf ein neues Script zu stellen. Weil sich ein paar Sachen schon gut bewährt haben würde ich diese gerne erneut mit JavaScript umsetzen. Dazu habe ich das obere Beispiel genutzt. Soweit so gut - ich sende eine Anfrage und bekomme eine Antwort.

    Leider funktioniert das nicht mit weiteren Variablen die ich aktualisieren möchte. Und ich sehe / finde den Fehler nicht. Es wären bei mir so 5 Variablen die ich gerne pollen würde um sie mit Javascript auszuwerten.

    Hätte jemand eine Anregung bzw. was mache ich falsch ...

    Bei einer Einzelnen Variablen geht das, soweit ich bei der zweiten Variable den Status abfrage passen die Zustände nicht mehr ...

    Danke,
    Grüße

    Thomas


    PHP-Code:
    <?

    // https://www.symcon.de/forum/threads/38632-Ist-die-Verbindung-%C3%BCber-die-JSON-RPC-Schnittstelle-bidirektional?highlight=HTTP.setRequestHeader%28+Authorization

    $ausgabe '<html>
    <head>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <meta http-equiv="cache-control" content="no-cache">

    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">

        
    <script type="text/javascript">

        let username = "user@domain.tld";
        let password = "**********";
        
        function updateIPS(){
            id_wecker_zustand =     25381 /*[Scripte\Wecker\Schlafzimmer\Wecker Zustand]*/;
            id_wecker_schlummern =     56669 /*[Scripte\Wecker\Schlafzimmer\Wecker Schlummern]*/;

            var wecker_value = updateRPC("GetValue", [id_wecker_zustand]);

                    // Wecker
                    if(wecker_value == false) {
                        var wecker_inhalt = "<img src=\"/user/wecker/icons/wecker-aus.png\" onclick=window.updateRPC(\"SetValue\",[id_wecker_zustand,true]);>";
                    }
                    else {
                        var wecker_inhalt = "<img src=\"/user/wecker/icons/wecker-an.png\" onclick=window.updateRPC(\"SetValue\",[id_wecker_zustand,false]);>";
                    }
                alert("Wecker: " + wecker_value);
                    document.getElementById("wecker").innerHTML = wecker_inhalt;
                    
                    
    //        var schlummern_value = updateRPC("GetValue", [id_wecker_schlummern]);

    //                // Schlummern
    //                if(schlummern_value == false) {
    //                    var schlummern_inhalt = "<img src=\"/user/wecker/icons/schlummern.png\" onclick=window.updateRPC(\"SetValue\",[id_wecker_schlummern,true]);>";
    //                }
    //                else {
    //                    var schlummern_inhalt = "<img src=\"/user/wecker/icons/tagesablauf.png\" onclick=window.updateRPC(\"SetValue\",[id_wecker_schlummern,false]);>";
    //                }
    //            alert("Schlummern: " + schlummern_value);
    //                document.getElementById("schlummern").innerHTML = schlummern_inhalt;



            window.setTimeout("updateIPS()", 8000);
        
        }
        
        window.setTimeout("updateIPS()", 1000);

        function updateRPC(name, params) {
            
            var HTTP = new XMLHttpRequest();
            HTTP.open("POST","/api/",true);
                var rpc = JSON.stringify({"jsonrpc":"2.0", "method":name, "params":params, "id":0});
            HTTP.setRequestHeader("Content-type", "application/json");
            HTTP.setRequestHeader("Authorization", "Basic " + btoa(username + ":" + password));
            HTTP.send(rpc);

                HTTP.onreadystatechange = function() {
                            if (this.readyState == 4 && this.status == 200) {
                                let json = JSON.parse(this.responseText);
                                
                        id = JSON.parse(params);
                    alert("HTTP: " + id + " " + json.result);
                                objekt_value = json.result;
                                }
                            }
        
                return window.objekt_value;
            
        }


    </script>

    <style>

        html, body {
            width: 640px;
            height: 360px;

            background-color: #000000;
            color: #ffffff;
            margin: 0px;
            padding: 0px;
            font-family: Arial, Helvetica, sans-serif;
            overflow: hidden;

            document.body.scroll = "no";
            document.body.style.overflow = "hidden";
            document.height = window.innerHeight;

            document.body.addEventListener("touchmove", function(e){ e.preventDefault(); });
        }

    </style>




    </head>

    <body>

        <div id="wecker" class="wecker"></div>
        <div id="schlummern" class="schlummern"></div>


    </body>
    </html>

    '
    ;


    echo 
    $ausgabe;

Ähnliche Themen

  1. JSON-RPC Schnittstelle unter Symcon 5.0
    Von PixelHomie im Forum Allgemeine Diskussion
    Antworten: 6
    Letzter Beitrag: 08.08.18, 09:06
  2. IP-Symcon - JSON RPC Schnittstelle
    Von saschahb im Forum Entwicklung mit PHP-SDK/Delphi-SDK
    Antworten: 28
    Letzter Beitrag: 15.07.16, 10:03
  3. Geht die JSON Schnittstelle mit Tasker bei euch noch?
    Von Jannis im Forum Skripte, PHP, SQL
    Antworten: 7
    Letzter Beitrag: 24.08.15, 06:50
  4. Was ist die beste Möglichkeit um JSON-Abfragen aus IPS/PHP zu realisieren?
    Von swissboy im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 2
    Letzter Beitrag: 15.07.15, 21:05
  5. Antworten: 4
    Letzter Beitrag: 14.01.08, 15:12