JSON-RPC über Python

…ich habe ja eben Dein Skript um alles gekürzt was die GPIO steuert. Ist also quasi auf die JSON-Anbindung reduziert…

…ich habe es jetzt noch mal bei meinem laufendem System auf einem Raspberry Pi 2 probiert - funktioniert sofort, sogar ohne „Requests“ zu installieren…:eek:

Ich habe es bisher auf zwei verschiedenen Raspberry Pi 1b probiert - immer mit irgendeiner Fehlermeldung. Auf allen ist die aktuelle Jessie-Version!

Jetzt erkläre mir mal bitte jemand woran das liegt…

Joachim

Frag mal Murphy… [emoji15] Keine Ahnung, was da los ist… Hast Du vielleicht noch andere Python-Skripte parallel laufen?

…noch mal in der Zusammenfassung:
Ich habe hier vier Raspberry Pi laufen:

  • Raspberry Pi 2 - Skript läuft (auf dem läuft auch das IPS-Produktivsystem)
  • Raspberry Pi 1B - Skript läuft
  • Raspberry Pi 1B mit IPS-Testsystem - Skript gibt die Fehlermeldungen
  • Raspberry Pi 1B - Skript gibt die Fehlermeldungen

Was könnten die beiden letzten gemeinsam haben, was in irgendeiner Form mit Python in Verbindung gebracht werden kann?
Nun, was mir da nach kurzem Nachdenken einfiel, war die Tatsache das ich auf beiden die Python-Erweiterung für PIGPIO installiert habe. Ob das damit zusammenhängt kann ich nicht sagen… (Installiert habe ich es nach dieserAnleitung)

Erfolglose Stunden und Tage sind vergangen - eine Lösung bisher noch nicht in Sichtweite…

Joachim

Dann investier doch noch ne halbe Stunde und setz einen Pi neu auf und Probier das Skript. Dann deine Erweiterung installieren und nochmal testen. Wenn es dann nicht geht, weißt Du woran es liegt. [emoji2]

…das ist schon ein Hobby…

Nachdem ich nun zunächst stundenlang erfolglos versucht habe, das bestehende Jessie zu „reparieren“, habe ich nun über Stunden ein ganz neues Jessie aufgesetzt, dazu dann so weit alles installiert (ohne die PIGPIO-Python Ergänzung), dass ich das Skript testen kann.
Ergebnis: Gleiche Fehlermeldung!!!:mad:

Was ist da los???

Joachim

Hi Joachim,
hattest Du vielleicht (damals) auf dem Raspi ein Firmware Update durchgeführt und auf den anderen ggfs.nicht?

Hallo Neon,

heute morgen habe ich auf dem neu aufgesetztem Raspberry Pi noch mal ein Firmwareupdate durchgeführt - vorher wie nachher funktioniert das Skript nicht…:confused:

Ist doch erstaunlich: fünf Raspberry Pi, fünf mal das gleiche Skript - zwei mal Funktion, drei mal keine Funktion

Ich bin am Überlegen was die fünf unterscheidet bzw. verbindet:
IPS - keine Abhängigkeit bei der Funktion oder eben Nichtfunktion ersichtlich
Homebridge - keine Abhängigkeit bei der Funktion oder eben Nichtfunktion ersichtlich
Logitech Mediaserver - keine Abhängigkeit bei der Funktion oder eben Nichtfunktion ersichtlich

Joachim

Moin Joachim,
ich hatte damals auf dem Raspi 1 nach einem Firmwareupdate Probleme. Habe dann wieder eine ältere Firmware eingespielt und das Problem war wieder weg.

Ich hab hier auf allen 3 Pi´s die neueste Firmware drauf und alles klappt.

#Joachim: hast Du mal mit einem blanken Jessie getestet? Das meinte ich mit „mal kurz in ner halben Stunde“; denn das neue Image ist ja schnell auf der SD drauf. Probier doch bitte nochmal ohne irgendwelche Zusatzsoftware. Und wenn´s dann geht, dann spiel nacheinander deine Addons drauf.

Gruß
Dirk

…so, es bereitet einem ja schon „Schmerzen“, wenn man alles wieder löschen muss…

Ergebnis:
Nagelneues Jessie installiert, Skript laufen lassen - Fehlermeldung wie bekannt…

Alle Updates installiert - Fehlermeldung wie bekannt…

Joachim

Die Frage ist doch jetzt: Wo liegt der Fehler?

Ist möglicherweise durch irgendeine Änderung im Jessie-Image etwas „defekt“?
Oder die Änderung durchaus gewollt und erfordert ein anderes Vorgehen?

Joachim

…nun hänge ich an diesem Punkt fest, da die JSON-RPC-Anbindung ein wichtiger Bestandteil des Gesamtprojektes darstellt. Alternativ ist auch eine UDP-Server/Client-Anbindung umsetzbar…

Kann mir jemand die Suchkriterien benennen, die ich benutzen muss, um eine JSON-RPC-Anbindung möglicherweise unter der Nutzung andere Module zu realisieren?

Joachim

Hallo Joachim,

ich würde Dir gern helfen, aber ich weiß nicht wie… :confused:
Wie gesagt, bei mir läuft alles (Jessie Lite installiert, python-requests installiert --> läuft.).

Magst Du mir mal ein Python-Skript von Dir schicken und ich probier´s bei mir aus?
Oder ich schick Dir mal ein Image von einem meiner RasPi´s und du spielst das bei Dir auf?

Gruß
Dirk

Hallo Dirk,

vielen Dank für Dein Angebot! Nun, der Fehler tritt ja schon dann auf, wenn man das Skript auf

import requests
import json
from requests.auth import HTTPBasicAuth

gekürzt hat. Auf anderen Raspberry Pi läuft es in Gänze einwandfrei…

Ich werde noch mal folgendes machen: Ich installiere noch mal die Jessie Lite Version und schaue mal was dann passiert. Aber irgendwie ist es ja schon komisch, dass es schon bei einem frisch installierten System diese Fehler hat…
Schwer vorstellbar für mich ist es auch, dass dieses „Detail“ am Firmwarestand hängen sollte oder an der Raspberry Pi Version…

Joachim

…so, Jessie Lite Image raufgezogen, gestartet, Skript kopiert und gestartet, Fehlermeldung:

Traceback (most recent call last):
  File "json.py", line 2, in <module>
    import requests
ImportError: No module named requests

dann:

sudo apt-get install python-requests

Skript noch mal neu gestartet:

Traceback (most recent call last):
  File "json.py", line 2, 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 4, 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

…diese Vorehensweise kann mal wohl - aus welchem Grund auch immer - für eine Neuinstallation nicht verwenden.
Es hilft wenig, wenn ich solange suche, bis ich einen Raspberry Pi gefunden habe aus dem es - aus welchem Grund auch immer - läuft, wenn ich genau diesen Teil zur Erstellung eines IPS-Moduls verwenden möchte…

Joachim

Hier noch mal das Python Skript:

#!/usr/bin/env python
import requests
import json
from requests.auth import HTTPBasicAuth
import time


# JSON-RPC zu IPS definieren
def IPSrpc(methodIps, paramIps):
    url = "http://192.168.178.47:3777/api/"
    auth=HTTPBasicAuth('User', '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)
    #print(response)



# Initial States
IPSrpc("SetValue", [29419, "Test"])

Der Code selbst muss m.E. so korrekt sein, da er auf zwei Raspberry Pi so läuft…

Das ist wirklich ungewöhnlich. Bei mir funktioniert das auch ohne Probleme. urlparse gehört eigentlich zur Standardinstallation (paket libpython2.7-stdlib) und liegt in /usr/lib/python2.7/urlparse.py, Kann es sein, das die SD-Karte an der Stelle ein Problem hat?

Tommi

…das könnte ja durchaus sein, aber bei drei von fünf Raspberry Pi (mit jeweils anderen Speicherkarten) an der gleichen „Speicherstelle“ defekt?:confused:

Joachim

…eigentlich findet man sehr wenig über die Fehlermeldung. Hier habe ich etwas gefunden, alles ausprobiert, leider aber auch erfolglos…

Schon komisch das Ganze…:frowning:

Joachim

…nun, manchmal ist es so einfach: Ich hatte einigen Skripten auf den verschiedenen Raspberry Pi den Namen „test.py“ gegeben, anderen „json.py“. Offenbar verwirrte das den Intepreter so dass er offenbar bei dem Dateinnamem „json.py“ wieder „zu sich selbst fand“. Auf die Idee bin ich dann erst heute gekommen - jetzt läuft es offenbar alles so wie soll…:slight_smile:

Joachim