Json Python Problem

Hallo,

ich hab ein Paar fragen zur Json API. Ist die Standartgemäß aktive? Hier im Forum gibt es ein paar alte Einträge wo man ein hacken am Webserver setzten soll, den gibts es aber scheinbar nicht mehr. Dann habe ich noch was gefunden das eine jsonrpc.php erstellt werden soll. Was ist denn jetzt richtig? Ich habe das Gefühl das die Schnittstelle auf meinem Pi nicht funktioniert. Per Fiddler bekomme ich immer nur den Fehler 404 wenn ich http://ip-symcon-IP:3777/api aufrufe. Ein Passwort habe ich am WebFrontend gesetzt.

Gruß
Timo

Hi!

Hast du die Daten für den FERNZUGRIFF richtig gesetzt? Die brauchst du für die API…
Siehe hier: Datenaustausch — IP-Symcon :: Automatisierungssoftware

Benutzername = E-Mail Adresse die du bei der Lizenz drin stehen hast
Kennwort = Was du bei Fernzugriff eingestellt hast

Grüße,
Chris

Was heißt denn richtig? Im Webfront Configurator habe den haken erfordert Passwort gesetzt und eine Passwort vergeben.

Hier das Script was ich gerne verwenden möchte:

import pigpio
import DHT22
import requests
import json
from time import sleep

#Initiate GPIO for pigpio
pi = pigpio.pi()

#setup the sensor
dht22 = DHT22.sensor(pi, 4) #BCM (description) reference
                            #Board (Pin Numbers) 
dht22.trigger();
#Sleep time to be above 2 seconds
sleepTime = 3


def InvokeIpsRpc(method, parameters):
    url = "http://192.168.0.40:83/api/"
    headers = {
        'content-type': 'application/json',
        'Authorization': 'Basic XXE-Mail:PasswortXX Base64'
        }
    payload = {
        'method': method,
        'params': parameters,
        'jsonrpc': '2.0',
        'id': '0'
        }

    response = requests.post(url ,headers=headers, data=json.dumps(payload))
    return(response.text)


def readDHT22():
    #get new reading
    dht22.trigger()

    #save our values

    # truncate the float to two places
    humidity = '%.2f' % (dht22.humidity())
    temp = '%.2f' % (dht22.temperature())

    return (humidity, temp)

while True:
    humidity, temp = readDHT22()
    print("Humidity is: " + humidity + "%")
    InvokeIpsRpc('SetValue', [45731,humidity])
    print("Temperature is: " + temp + "C")
    InvokeIpsRpc('SetValue', [25622,temp])
    sleep(sleepTime)

den Code habe ich hier gefunden

Zur Authentifizierung verwende ich :
E-Mailadresse:WebfornConfigurationPasswort in Base64
Das sollte doch richtig sein?

Nö, noch immer falsch.
Lies nochmal was Chris schrieb und folge einfach mal dem Link.
Da steht u.A.

Als Benutzername muss Ihr Lizenz-Benutzername verwendet werden. Das Kennwort setzten Sie über Fernzugriff aktivieren.

Michael

Mir fällt grad noch was auf…
Du postest hier im IPS 3.x Bereich und nennst aber Port 3777 von IPS 4. Welche IPS Version hast du denn im Einsatz?

Fernzugriffpasswort IST UNGLEICH WebFront-Passwort !!!
IPS 3.4 >> Fernzugriff — IP-Symcon :: Automatisierungssoftware

Grüße,
Chris

Naja… auch IPS 3 hört auf Port 3777.
Aber nur und only auf 127.0.0.1, welches dann gar keine Authentifizierung benötigt :smiley:

Kann mir durchaus vorstellen, dass IPS 4 dahingehend auch noch irgendwann angepaßt wird.
Michael

Ok vielen Dank. Ich dachte das Fernzugriff Passwort wäre das WebFrontConfigrator Passwort. Aber habe jetzt auch den Fernzugriff aktiviert und IP-Symcon neue gestartet. Die Verwaltungskonsole fragt jetzt auch nach einem Login was auch funktioniert. Aber mein Script aktualisiert meine Variablen leider nicht.

Ja IP-Symcon hat die Version 4.0. Also ansonsten bitte verschieben.

Beim Rest kann ich dir leider nicht helfen. Aber vlt. findest du hier im Forum noch das ein oder andere Beispiel, welches dir inhaltlich weiterhelfen kann.

Viel Erfolg und Grüße,
Chris

Schau mal hier: JSON-RPC über Python
Da wurde Python schon mal besprochen.

Übrigens glaub ich, dass die Authentifizierung noch nicht korrekt ist. Du musst den Benutzernamen:Passwort Base64 kodieren. Nicht Base64 dahinter schreiben. Hast du denn geschaut, was genau zurückkommt?

Ganz wichtig ist das Slash (/) am Ende. Dann kommt auch kein 404.

paresy

Ja danke das „/“ war noch eine Problem. Funktioniert jetzt alles.