Das läuft natürlich auch mit dem LogikGenerator Template auf nem PC und Python.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Logikbaustein 12242_HostCheck (ByteCodeLogic)
Einklappen
X
-
Zitat von Michel Beitrag anzeigen[WARNUNG]Die Nutzung dieser Möglichkeit kann bei unsachgemäßer Anwendung euren HS/FS komplett lahmlegen!
Ich rate dringend davon ab, das auf produktiven HS/FS einzusetzen und/oder zeitkritische bzw. umfangreiche Aktionen in den Code zu packen!
Die Behandlung dieses Codes weicht vom HS-internen Standard erheblich ab!
[/WARNUNG]
Die Bausteine, die quasi externen Code enthalten, werden vom eigentlichen HS-Prozess natürlich nicht überwacht - der kennt sie gar nicht. D.h., während die normale HS-Logik so getimed ist, dass immer Zeit für andere "nebensächliche" Dinge wie Telegrammversand und Empfang ist, laufen diese Prozesse ungehindert mit Priorität. Während der Abarbeitung ist für den Rest des HS Schicht im Schacht. Muss man beachten, ansonsten gilt natürlich:
Ungeahnte MöglichkeitenGruß MatthiasEIB übersetzt meine Frau mit "Ehepaar Ist Beschäftigt"
- PN nur für PERSÖNLICHES!
Kommentar
-
Zitat von MarcNaroska Beitrag anzeigenWo liegt denn der Unterschied/Vor-/Nachteil von ByteCode gegenüber base64 Codierung?
Die Betatester haben mitgeteilt das die 2.4er Firmware die Python Version 2.4 gegenüber der bisherigen Version 2.2 hat.
Man kann natürlich auch parallel das Python 2.4 installieren und den Baustein für beide Versionen kompilieren, jedoch macht dieser Mehraufwand wohl nur bei kommerziellen closed-source Bausteinen sinn.
Kommentar
-
echt Stark !!!!
Nils,
Super !!!
Ich glaube hier hast Du was ganz Tooles gemacht.
Ich habe nämlich das Problem beim ECO-BUS von Buderus eine Serielle Schnittstelle (über Moxa) abfragen zu müssen, die noch einen Handshake drumrum hat (3964R).
Mit IP Telegrammen geht das nicht, selbst mit geschachtelten Abfragen bzw. Senden ist das nur schwer möglich. Zumindest kriegt man einen Knoten im Kopf und es würde nie wieder einer verstehen. Von fehlern und Testbarkeit mal ganz abgesehen.
Mit den Möglichkeiten hier bin ich aber sicher, werde ich da nun eine gute und auch saubere Lösung finden.
Wichtig wird aber ein sauberes Austesten sein, etc.
Warscheinlich ist es am besten den Code auf dem PC direkt zu testen und dann erst auf den HS zu portieren?
Nils wie bist Du vorgegangen, welche Test- bzw. Entwicklungsumgebung hast Du dir aufgebaut?
Gruß Tbi
Kommentar
-
Hi,
zum Testen kannst du in dem anderen Thread https://knx-user-forum.de/knx-eib-fo...zpruefung.html das Template raus kopieren, ich bin da bereits wieder an einer neuen Version, werd die gegebenenfalls in den DL Bereich wechseln wenn sich das nicht mehr stündlich/täglich ändert
Bei TCP Verbindungen kann aber das Problem was Michel und Matthias erwähnten auftreten, dass ein zu langer Aufenthalt (for/while oder select) die gesamte Logik ausbremsen können.
Gedanklich ist mir da schon einiges mittels eines xml sub-bus durch den Kopf gegangen.
Ich mach mal nen kurzen DUMP
Prozess mit fork eigenständig machen und die Kommunikation mit (Daemon) erfolgt mittels (direkter Steuerung egal welchen Protokolles -- senden) sowie alles was der Daemon empfängt, sendet er er schön in XML verpackt an einen event-empfangen des HS.
Ein Packet dahin könnte z.B. so aussehen
Code:<xml> <buderus> <druck>15</druck> <kesseltemp>77.2</kesseltemp> </buderus> </xml> oder auch so <xml> <mpd> <bad><title>Was ein tolles Lied</title><status>play</status></bad> <kueche><title>Was ein tolles Lied</title><status>play</status></kueche> </mpd> </xml> .....
Kommentar
-
Zitat von tbi Beitrag anzeigenWahrscheinlich ist es am besten den Code auf dem PC direkt zu testen und dann erst auf den HS zu portieren?
Was du so nicht testen kannst, ist die Auswirkung auf die "Nebentätigkeiten" des HS, wie z.B. dafür zu sorgen, daß das KNX-Prozessabbild "sauber" ist, alle anderen Logiken weiterhin abgearbeitet werden etc.
Gerade Verbindungen in die "Aussenwelt" könnten deinen HS/FS lahmlegen; evtl. auch parallele Aufrufe des Bausteins.
Ich teste gerade auf einem meiner Beta-HS diverse Sachen. Mal sehen, ob daraus eine Art "how-to" / "don´t do" Liste wird.
[WARNUNG]Legt ihr den HS/FS auf diese Weise lahm und laßt die auslösende Logik auch noch beim Start berechnen, kann es dazu kommen, daß ihr nur noch per serieller Schnittstelle an den HS kommt!
[/WARNUNG]
Du solltest also wissen, was du tust!Gruss aus Radevormwald
Michel
Kommentar
-
Ich bin gerade dabei dem Logik Template eine Art Live-Schnittstelle zu basteln
Das wird dann einen Baustein erstellen der zusätlich zu den definierten noch jeweils einen Eingang und Ausgang hinzufügt.
Diese werden mittels Event-Empfangen/Senden verbunden.
Der Logikbaustein wird nicht die eigentliche Logik enthalten sondern eine ebenfalls codierte Logik die die Logik die über den (Live-Eingang) erhalten wird ausführt.
Bin im Moment noch in der Theorie aber man sollte dann von der Commandozeile das Pythonscript aufrufen können und auch alle Variablen von dort ändern. Ausgeführt wird im HS, und wenns dann wirklich mal den HS schießt, macht nix, da nix remanent im Speicher ist reicht ein Neustart des HS und alles is wieder wech
Kommentar
-
Hi,
@Michel:
So testest du "nur", ob dein Python-Code syntaktisch richtig ist und korrekt arbeitet, wovon ich ausgehe, bevor du den Code in den HS schiebst.
Gerade Verbindungen in die "Aussenwelt" könnten deinen HS/FS lahmlegen; evtl. auch parallele Aufrufe des Bausteins.
Du solltest also wissen, was du tust!. Oder besser bin mir bewußt und werde mich darauf gut vorbereiten. Also wie geht dann ein Wiederbelebungsversuch eines HS über Seriell?
@Nils:
Gedanklich ist mir da schon einiges mittels eines xml sub-bus durch den Kopf gegangen.
Ich mach mal nen kurzen DUMP
Prozess mit fork eigenständig machen und die Kommunikation mit (Daemon) erfolgt mittels (direkter Steuerung egal welchen Protokolles -- senden) sowie alles was der Daemon empfängt, sendet er er schön in XML verpackt an einen event-empfangen des HS.
Mit der Lösung, die Du vorschlägst, würde der HS komplett nicht blockiert, so wie ich Dich verstehe ?
Wo würdest Du dann die Events fangen ? Da hast Du das Problem doch dann wieder ?
Gruß Tbi
Kommentar
-
Zitat von tbi Beitrag anzeigenWo würdest Du dann die Events fangen ? Da hast Du das Problem doch dann wieder ?
Das nutz ich jetzt auch schon um das besagte mit dem MPD zu machen, allerdings sende ich das von einem anderen Rechner auf dem auch die MPD's (MusicPlayerDaemon) laufen und hab da einfach nur einen loop der alle statis sammelt und dann komplet per netcat an den HS schickt.Angehängte Dateien
Kommentar
-
das Konzept
Hallo Nils,
ich fassen nochmal zusammen, wie ich Dein Konzept verstehe:
- Über eine Logik wird ein PHP Prozess hochgezogen und abgetrennt, der dann die Schnittstellen Logik im Bauch hat. Der läuft dann selbstständig und blockiert den HS nicht mehr. Er wird vom Kernel so mit CPU Zeit versorgt, wie es eben geht.
- Seine Ergebnisse verschickt er über IP-Telegramme und werden von HS wie gewohnt verarbeitet.
- Befehle empfängt er über IP-Telegramme, verarbeitet die und schickt sie dann an die externe (bei mir die spez. Serielle) Schnittstelle weiter.
- Remanente Daten sind nicht notwendig, das wäre ok. Der Prozess würde nach einem Neustart erst wieder durch eine Logik gestartet. Die sollte dann nicht an "System start" gebunden sein
. Zumindest nicht am Anfang.
. So könnte das gehen. Da gäbe es eine Menge Schnittstellen, die man so kapseln und auf dem HS anbieten könnte.
Tbi
Kommentar
-
Zitat von tbi Beitrag anzeigenÜber eine Logik wird ein PHP Prozess hochgezogen und abgetrennt, der dann die Schnittstellen Logik im Bauch hat. Der läuft dann selbstständig und blockiert den HS nicht mehr. Er wird vom Kernel so mit CPU Zeit versorgt, wie es eben geht.
Kommentar
-
Aber schön darauf achten, daß du die richtige Python Version verwendest:
Benötigt wird, um den ByteCode zu erstellen, ein Python gleicher Version wie der HS, also Python 2.2.3Gruss aus Radevormwald
Michel
Kommentar
Kommentar