PHP contra Python oder Hochsprachen
TS
- hardware
- php
- python
Hello,
eine Frage an die PHP Hardcore-Profis hier:
kann ich mittels PHP auf die/eine serielle Schnittstelle des Hosts zugreifen? (ich vermute: ja, weil Input/Output einstellbar sind)
kann ich die Kenndaten (Baudrate, Parity, ...) auch direkt aus PHP heraus manipulieren?
Wo bleibt dann die Response auf einen Call?
usw.
Ich benutze derzeit ein eher halbnützliches Tool/Klasse für Python3 (minimalmodbus) für die Abfrage meiner Stromzähler diverser PV-Anlagen.
Das soll mal in PHP eine etwas technischere, wesentlich schlankere Version von http://solaranzeige.de von Ulrich Kunz werden.
Die hübschen bunten Bilder mit Grafana möchte ich mir schenken und stattdessen lieber aussagefähige Tabellendaten zur Verfügung stellen.
Um das Ganze in Python mittels der Erweiterung minimalmodbus einigermaßen zum Laufen zu bringen, hat mich schon an den Rand der Verzweiflung gebracht. Und bevor ich versuche, Jonas Berg (Author der Python-Erweiterung) irgendwie zu erreichen, möchte ich lieber die Erkenntnisse in einem Interpreter zusammenfassen, denn PHP wird für die Webformulare usw. sowieso benötigt.
Da möchte ich jetzt nicht mehr auf Python umsteigen müssen.
Eine Alternative wäre sicherlich, die Abfrage- und Konfigurationsroutinen in einer Hochsprache abzufassen, die als BIN auf Linux läuft und pro Aufruf fast null Zeit braucht :-)
Glück Auf
Tom vom Berg
Hallo TS,
kann ich mittels PHP auf die/eine serielle Schnittstelle des Hosts zugreifen?
Ich würde vermuten, ja.
https://www.php.net/manual/en/function.dio-open.php
Gemacht hab ich das noch nicht. Mangels serieller Schnittstelle in meinem PC 😉
Die Frage ist, ob Du das als Kommandozeilentool laufen lassen willst oder in einer Webseite. Die Frage ist auch, ob Du eine Interrupt-gesteuerte Meldung haben willst, wenn sich auf der seriellen Schnittstelle was tut (was ich in PHP eher nicht verorten würde), oder ob Du ein einfaches Request/Response Verfahren brauchst (was durch Polling machbar sein dürfte).
Mit dio_tcsetattr kannst Du auf jeden Fall die Schnittstellenparameter einstellen. Ein Open, Write, Read, Close sollte dann machbar sein, beim Read musst Du aber - denke ich - damit rechnen, dass Du nicht alle Daten in einem Rutsch bekommst. Und bei einer schlechten Datenflusssteuerung kannst Du auch Daten verlieren, wenn Du zu langsam liest.
Ich erinnere mich an einen Drucker, der seriell an einen Siemens-pseudokompatiblen PC angeschlossen war und der nur über Software-Flusskontrolle verfügte. Aber bis der sein "STOOOPPPP!" gesendet hatte, war sein Puffer schon übergelaufen und man musste ihn aus- und einschalten. Hach ja, die frühen Achtziger…
Wo bleibt dann die Response auf einen Call?
Die musst Du Byte für Byte einlesen, nachdem Du den Request raussgeschickt hast. Und dem Gerät auch etwas Zeit einräumen, über deinen Request nachzudenken. DAS programmierst Du dann tatsächlich lowest level mit busy-waiting.
Rolf
Hello,
CU heute Abend Online?
Dann könnten wir ja vielleicht mal ein paar Worte mehr über
sprechen?
Glück Auf
Tom vom Berg
Hallo TS,
ja, ich möchte da sein. Aber von deiner Technik habe ich KEINE Ahnung. Ich habe die dio-Funktionen nur gegoogelt.
Rolf
Hello,
ja, ich möchte da sein. Aber von deiner Technik habe ich KEINE Ahnung. Ich habe die dio-Funktionen nur gegoogelt.
Kann aber trotzdem zu interessanten Anregungen führen...
Bis nachher
Glück Auf
Tom vom Berg
Hallo TS,
Nachtrag: Die Baudrate kannst Du - sagt Tante Google - aber auch mit stty einstellen und dann einfach fread/fwrite verwenden.
Problem könnte die Buffersize sein, irgendwoher muss fread ja wissen, dass die Schnittstelle fertig ist. Eventuell gibt das Protokoll des genutzten Geräts dazu etwas her, aber das musst Du definitiv low-level selbst erzeugen. Bei der seriellen Schnittstelle gibt's keinen Standard wie TCP/IP.
Ich frag mich nur, warum Du das selbst tun musst. Gibt's keinen Controller für PV-Anlagen, der eine HTTP-Abfrage erlaubt?
Rolf