JSON-RPC über Python

User und PWsind beide im Klartext.

den Symcondienst neu starten nach PW-Änderung.? probier ich mal aus.


funktioniert ! Danke
es lag am fehlenden Neustart des Dienstes.

Hallo Leute,

bei mir gibt es schon bei diesem Teil eine Fehlermeldung:

# notwendige Module importieren
import requests, json
from requests.auth import HTTPBasicAuth
...

Ist die Zeilenaufteilung im Python Skript bei Euch auch genau so??

Joachim

Hallo Leute,

bei mir kommt immer die Fehlermeldung:

  File "GPIOinit.py", line 3, in <module>
    from requests.auth import HTTPBasicAuth
ImportError: No module named requests.auth

habe jetzt schon diverse Sachen versucht dieses „requests-Modul“ zu installieren - bisher ohnre Erfolg…

Jemand einen Tipp?

Joachim

sudo apt-get install python-requests hat nicht geklappt?

Edit: und schreib mal alles in eine Zeile; so klappts in meinen Python-Skripten. [emoji4]

Und noch einen: „import requests“ hast Du auch drin?

Ja…

Habe schon Python Update auf 3.2 gemacht, diverse andere Sachen versucht…

Joachim

Nachtrag: Den Tipp mit „sudo apt-get install python-requests“ hatte ich erst gerade gesehen! Jetzt kommt eine andere Fehlermeldung - da muss ich erst mal schauen…

…es funktioniert hier einfach nicht…
Code:

import requests, json
from requests.auth import HTTPBasicAuth

# JSON-RPS zu IPS definieren
def IpsRpc(methodIps, paramIps):
    url = "http://127.0.0.1:3777>/api/"
    auth=HTTPBasicAuth('user@ips.de', 'Password')   # username nicht codiert, bsp. johndoe@unknown.net
    headers = {'content-type': 'application/json'}

    payload = {"method": methodIps, "params": paramIps, "jsonrpc": "2.0", "id": "0"}
    response = requests.post(url, auth=auth, data=json.dumps(payload), headers=headers)

variable=29419
value="abc"
IpsRpc("SetValue", [variable,value])



Fehlermeldung:

Traceback (most recent call last):
  File "GPIOinit.py", line 36, in <module>
    IpsRpc("SetValue", [variable,value])
  File "GPIOinit.py", line 17, in IpsRpc
    response = requests.post(url, auth=auth, data=json.dumps(payload), headers=headers)
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 94, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/api.py", line 49, in request
    return session.request(method=method, url=url, **kwargs)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 443, in request
    prep = self.prepare_request(req)
  File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 374, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
  File "/usr/lib/python2.7/dist-packages/requests/models.py", line 304, in prepare
    self.prepare_url(url, params)
  File "/usr/lib/python2.7/dist-packages/requests/models.py", line 354, in prepare_url
    scheme, auth, host, port, path, query, fragment = parse_url(url)
  File "/usr/lib/python2.7/dist-packages/urllib3/util/url.py", line 143, in parse_url
    raise LocationParseError(url)
urllib3.exceptions.LocationParseError: Failed to parse: 127.0.0.1:3777>

…habe es mit diversen Hinweisen auf dem Thread probiert (mit und ohne „.json“, die payload-Daten in einer oder in mehreren Zeilen…)

Wo liegt der Hund begraben??:confused:

Joachim

Ganz einfach: mach mal das „>“ aus der URL von IPS. [emoji2]

…ja, das hatte ich wohl übersehen…:stuck_out_tongue:

…jetzt kommt aber diese Fehlermeldung:

Traceback (most recent call last):
  File "GPIOinit.py", line 3, in <module>
    import requests, json
  File "/usr/lib/python2.7/dist-packages/requests/__init__.py", line 80, in <module>
    from . import utils
  File "/usr/lib/python2.7/dist-packages/requests/utils.py", line 25, in <module>
    from .compat import parse_http_list as _parse_list_header
  File "/usr/lib/python2.7/dist-packages/requests/compat.py", line 81, in <module>
    import json
  File "/home/pi/json.py", line 3, in <module>
    from requests.auth import HTTPBasicAuth
  File "/usr/lib/python2.7/dist-packages/requests/auth.py", line 17, in <module>
    from .compat import urlparse, str
ImportError: cannot import name urlparse

Joachim

Puuhh… [emoji16] Bei mir siehts so aus:

Hast Du bei Dir die erste Zeile drin? Also dass das Skript mit Python ausgeführt werden soll?

…mit oder ohne Zeile - gleiches Problem…:frowning:

Im Übrigen: Mein Ziel ist offenbar das Gleiche. Ich wollte meine GPIO-Steuerung auch mal auf „universelle Füße“ stellen. Wenn alles klappt sollte dann daraus ein Modul entstehen. Ich nutze aber pigpio, damit kann man dann auch GPIO im gleichen Netzwerk steuern.

Aber an so manch einem „Teilproblem“ bastelt man dann schnell mal so ein paar Tage…

Joachim

…mag vielleicht einer mal sein funktionierendes Skript in Gänze posten und ggf. Mal sagen was noch zusätzlich installiert werden muss?

Joachim

Mach ich morgen gern; Zeit ist grad immer nur so knapp…

…wäre toll!

Ich habe es jetzt noch mal auf einem anderen Raspberry Pi probiert - leider mit gleicher Fehlermeldung. Die Google-Suche nach „ImportError: cannot import name urlparse“ brachte für mich keine erhellenden Ergebnisse.

Komisch, ich habe Jessie installiert und immer aktuell gehalten…

Joachim

Hallo Joachim,

hier mal mein Skript:


#!/usr/bin/env python

import RPi.GPIO as GPIO  
import requests
import json
from requests.auth import HTTPBasicAuth
import time
import Adafruit_DHT

GPIO.setmode(GPIO.BCM)  
  
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(9, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(10, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)  
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(27, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# JSON-RPC zu IPS definieren
def IPSrpc(methodIps, paramIps):
    url = "http://192.168.0.10:3777/api/"
    auth=HTTPBasicAuth('xxx@xxx.de', 'passwort')
    headers = {'content-type': 'application/json'}

    payload = {
        "method": methodIps,
        "params": paramIps,
        "jsonrpc": "2.0",
        "id": "0",
    }
    response = requests.post(url, auth=auth, data=json.dumps(payload), headers=headers).json
    #print(response)

# Callback functions  
def my_callback05(channel):  
    IPSrpc("SetValue", [16624, bool(GPIO.input(7))])  
def my_callback06(channel):  
    IPSrpc("SetValue", [20723, bool(GPIO.input(8))])  
def my_callback12(channel):  
    IPSrpc("SetValue", [32958, bool(GPIO.input(9))])  
def my_callback13(channel):  
    IPSrpc("SetValue", [56070, bool(GPIO.input(10))])  
def my_callback16(channel):  
    IPSrpc("SetValue", [45232, bool(GPIO.input(11))])  
def my_callback19(channel):  
    IPSrpc("SetValue", [32046, bool(GPIO.input(17))])  
def my_callback20(channel):  
    IPSrpc("SetValue", [43085, bool(GPIO.input(22))])  
def my_callback21(channel):  
    IPSrpc("SetValue", [29786, bool(GPIO.input(23))])  
def my_callback26(channel):  
    IPSrpc("SetValue", [34756, bool(GPIO.input(24))])  
def my_callback24(channel):  
    IPSrpc("SetValue", [14855, bool(GPIO.input(27))])  

# Add interrupts    
GPIO.add_event_detect(7, GPIO.BOTH, callback=my_callback05)  
GPIO.add_event_detect(8, GPIO.BOTH, callback=my_callback06)  
GPIO.add_event_detect(9, GPIO.BOTH, callback=my_callback12)  
GPIO.add_event_detect(10, GPIO.BOTH, callback=my_callback13)  
GPIO.add_event_detect(11, GPIO.BOTH, callback=my_callback16)  
GPIO.add_event_detect(17, GPIO.BOTH, callback=my_callback19)  
GPIO.add_event_detect(22, GPIO.BOTH, callback=my_callback20)  
GPIO.add_event_detect(23, GPIO.BOTH, callback=my_callback21)  
GPIO.add_event_detect(24, GPIO.BOTH, callback=my_callback26)  
#GPIO.add_event_detect(27, GPIO.BOTH, callback=my_callback24)  

# Initial States
IPSrpc("SetValue", [16624, bool(GPIO.input(7))])
IPSrpc("SetValue", [20723, bool(GPIO.input(8))])
IPSrpc("SetValue", [32958, bool(GPIO.input(9))])
IPSrpc("SetValue", [56070, bool(GPIO.input(10))])
IPSrpc("SetValue", [45232, bool(GPIO.input(11))])
IPSrpc("SetValue", [32046, bool(GPIO.input(17))])
IPSrpc("SetValue", [43085, bool(GPIO.input(22))])
IPSrpc("SetValue", [29786, bool(GPIO.input(23))])
IPSrpc("SetValue", [34756, bool(GPIO.input(24))])
IPSrpc("SetValue", [14855, bool(GPIO.input(27))])

try:
    while True:
	start_time = time.time()
        sensor = Adafruit_DHT.DHT22
        humidity, temperature = Adafruit_DHT.read_retry(sensor, 4)
        #print(temperature)
        IPSrpc("SetValue", [37107, temperature])
        IPSrpc("SetValue", [22609, humidity])
	end_time = time.time()
        delay = float(end_time - start_time)
        time.sleep(60 - delay)
except KeyboardInterrupt:
    GPIO.cleanup()

GPIO.cleanup()           # clean up GPIO on normal exit  


Das läuft auf zwei PI´s mit Jessie Lite. Musste nur „python requests“ nachinstallieren; mehr nicht.
Ich hoffe, es hilft Dir weiter. :slight_smile:

Vielen Dank!

Jedoch leider das Gleiche in grün…

Fehlermeldung:

Traceback (most recent call last):
  File "json.py", line 4, in <module>
    import requests
  File "/usr/lib/python2.7/dist-packages/requests/__init__.py", line 80, in <module>
    from . import utils
  File "/usr/lib/python2.7/dist-packages/requests/utils.py", line 25, in <module>
    from .compat import parse_http_list as _parse_list_header
  File "/usr/lib/python2.7/dist-packages/requests/compat.py", line 81, in <module>
    import json
  File "/home/pi/json.py", line 6, in <module>
    from requests.auth import HTTPBasicAuth
  File "/usr/lib/python2.7/dist-packages/requests/auth.py", line 17, in <module>
    from .compat import urlparse, str
ImportError: cannot import name urlparse

Vielleicht ist irgendetwas mit der requests-Installation falsch gelaufen? Wie hast Du es installiert?

Joachim

So wie ich es weiter oben schon geschrieben hatte; mit sudo apt-get install python-requests…

…wenn ich das mache, ist die Meldung: Alles gut, alles aktuell…[emoji17]

Schau mal hier: python - ImportError: Cannot import name X - Stack Overflow
Hast Du noch mehr in deinem Skript drin?