Eingänge von entfernten Raspberry Pi "intelligent" Abfragen

Der Datenaustausch sendet alles utf8enkodiert.
Das ist so damit es ein valider JSON-String ist und dann musst du den Buffer halt mit decode wieder in seinen Originalzustand bringen.
Michael

Hallo Ernst,

bin jetzt schon ein ganzes Stück weitergekommen. Was mich noch beschäftigt sind die Sendungen von PIGPIO kommend.
Wir haben eine Menge Antworten die 16 Zeichen lang sind, der Befehl steht an erster Stelle. Wir haben die Notifikation die 12 Zeichen lang ist - so weit so gut…

Aber es sind keine Einzelfälle, dass Datensendungen so schnell hintereinander kommen (z.B. regelmäßig bei Anforderung des Handle, Bestätigung der Sendung und Handle sind in einer Zeile), dass sie vom ClientSocket als „eine“ dargestellt werden. Dann fängt es an kompliziert zu werden. Wenn man anz.B. an die I2C Kommunikaation denkt, so beinhaltet die machmal in der Antwort einen variablen Anteil. Alles nicht das Problem, wenn nur ein Datensatz ankommt…
Wären die Datensendungen entweder 16 oder 12 Zeichen lang, so könnte Mathematik helfen…

Mir ist kein Trennzeichen aufgefallen, wie soll man das Thema also mit dem Blick auf die Ausbaufähigkeit das sicher in den Griff bekommen?

Joachim

Hallo Joachim,

ist mir auch noch nicht klar!

Ansätze:

  • Befehle senden --> Pause, oder besser Abfrage ob Antwort empfangen wurde, einfügen.
  • Befehle empfangen:
    • Trennzeichen gibts in der Form nicht.
    • Länge des Datensatzes prüfen (12 / 16 Byte) und entsprechend auswerten.
    • Beim 16 Byte Datensatz Parameter 3 prüfen:
      • Wert > 0 --> Es folgen noch Daten mit … Bytes (Wert in P3 = Anzahl, wenn grösser 0)
        Diese Daten müssen aber scheinbar Befehlsabhängig ausgewertet werden.

Ich hab da noch ein anderes Thema entdeckt.
Es werden scheinbar max. 16 Handles vom PIGPIOD akzeptiert. Bei der nächsten Anfrage kommt eine Fehlermeldung (Negativer Zahlenwert) - z.B.: -24 (PI_NO_HANDLE).

Bin gerade dabei diese Fehlermeldungen abzufangen und als Meldung an IPS weiterleiten.
Eine Auflistung der Fehlercodes / Fehlermeldungen findest Du im Python- bzw. PIGS-Quellcode.

Übrigens hat Joan am Wochenende wieder einiges neu eingebaut! z.B.: Eine Shell-Funktion um über PIGPIOD Befehle / Programme auf dem entfernten Pi auszuführen.
Interessant für :

  • Shutdown-Befehl
  • Restart-Befehl
  • Abfrage von Betriebsdaten wie Prozessortemperatur

Es bleibt noch viel zu tun !

Hallo Ernst,

wozu benötigst Du so viele Handle?:confused:

Ich hole mir einen zum Start, Änderungen an den Notify-Pins laufen dann über den Handle…

Kennst Du mein Projekt?

Diese ganze Differenzierung nach Länge und einigen Informationen innerhalb der Daten habe ich da auch umgesetzt, ist m.E. aber sehr aufwendig dort alles abzubilden.

Joan hat vor zwei Sockets zu installieren, einen für die Kommandos, den anderen für die Notify-Funktionen - hilft aber nur bedingt wenn die Daten so schnell kommen, das sie im IPS ClientSocket als „eins“ ankommen…

Joachim

Das mit der max. Anzahl der Handles ist mir beim Testen aufgefallen. Nennen wir es Fehlbedienung - fehlender Durchblick. :rolleyes:
Mir dreht es sich im Moment darum die Fehlermeldungen abzufangen (und als Hiilfe anzuzeigen), da die negativen Werte des Parameter P3 bei der Auswertung recht störend sind.

Dein Projekt hab ich schon entdeckt!:wink:
Ich versuch im Moment zuerst eine stabile Schnittstelle zwischen IPS und PIGPIOD zu erstellen. Funktionsmodule wie Dimmer, RGB-Steuerung … sollen später darauf aufbauen.

Mal so als Idee… da ich es in ähnlicher Form für APIs nutze wo viele Response-Daten gerne mal eintreffende Events blockieren.

Nutzt doch den Client-Socket nur für den Empfang der Events/Notify.
Und zum senden/schalten baut direkt aus dem Splitter mit PHP einen Socket auf.

Hat mehrere Vorteile:

[ul]
[li]Es steht beim senden/schalten sofort die Antwort zur Verfügung.
[/li][li]Im Splitter brauchen im ReceiveData nur die Events behandelt werden.
[/li][li]Beim senden an den PI braucht der Splitter keine Semaphore setzen um zu verhindern dass zwei Threads gleichzeitig auf den IO senden.
[/li][/ul]

Und noch ein paar mehr… wie das durchreichen der Antwort über eine Hilfsvariable an den Thread welcher die Sendung veranlaßt hat mit allen dazugehörigen Semaphoren und co.

Solange dann keiner Zeitgleich 16 GIOS schalten will, gibt das ja wohl kein Problem mit den Handels :wink:

Michael

Hallo Michael,

habe ich jetzt mal so :slight_smile:

Sieht jetzt im Debug des IPS-ClientSockets deutlich aufgeräumter aus…:wink:

Mal sehen wie es weitergeht…

Joachim

…konnte jetzt innerhalb weniger Stunden erfolgreich eine Instanz zur Integration des HC SR04 erstellen!

Dabei habe ich dann den Zeitstempel der Notifikation genutzt.

Die PIGPIO-Schnittstelle eröffnet viele neue Möglichkeiten .:slight_smile:

Joachim