Ich habe per PHP und co meine AVR’s eingebunden das läuft auch ganz gut, ich möchte es gern aber etwas „professionalisieren“.
Wie fange ich da am besten an und welche Module muss ich dazu entwicklen?
Ich habe im 6 AVR’s die jeweils eine IP haben, diese schicken selbständig daten an eine fixe IP (Server) und können Daten empfangen.
Brauche ich da nun splitter und co welche ich entwicklen muss?
Ich habe mit Modulentwicklung für IPSymcon noch keine erfahrung, allerdings werkle ich beruflich mit Delphi 6 und Delphi 2007 Professional.
Was ich eben noch nicht ganz verstehe ist wie muss ich das ganze systemtechnisch am besten aufbauen?
den den Serversocket von IPS kann ich nicht verwenden (da der zuwenig infos liefert), daher müsste ich das ganze irgendwie kapseln …
Kann mir da wer der profis einen tipp und den weg zeigen?
es wurde mir interessieren das gleiche zu bekommen.
Jetzt habe ich 7 aktoren die senden - und weil ich in IPS die mac adresse (oder sende adresse) nicht mit bekomme, bin ich verplichtet 7 sockets ein zu richten (aka 1 per aktor)
Die ganze administration wenn jetzt auf welcher port sendet ist mir eher ‚dirty & ugly‘ deshalb meine anregung zu antworten
Mit Delphi kenne ich mich nich aus - sry
Deshlab habe ich im Moment ein kleines Delphi Programm, das mir zuerst die Anfrage von den AVR’s entgegen nimmt, sofort ein OK zurücksendet
Dann die IP vorne dazusetzt und das ganze dann an einen Serversocket an IPS sendet
Nur das will ich eben irgendwie nun integrieren in IPS selber …
Könnten nicht die AVR’S irgendwelche Kennungen - z.b. ihre eigene IP oder jedenfalls eine Konstante wie ein Alias in den Datenstrom, den sie schicken, einbinden?
Das sollte doch nicht das Riesenproblem sein, die FW dahingehend umzubiegen?
Ich lasse so eine ganze Reihe „IP“ Devices an denselben Port senden. Von Loxone über Webbrick bis hin zu Eventghost Paketen von PC’s.
Ja könnten Sie, aber warum wenn alle Infos schon in dem IP Paket enthalten sind?
Und das problem ist, die AVR’s warten auf dem Datenstrom auf ein ACK Paket, das diese PAket auch erhalten wurde, und dieses sollte natürlich so schnell wie möglich zurückgesendet werden
im „normalen“ Delphi schickt ich das auf der selben Verbindung sofort zurück, aber per PHP und IPSymcon … habe ich ja keinen nativen zugriff darauf
Ich hatte das damals so gelöst, dass ich nen Kodierschalter vorgesehen habe und dessen Wert immer mitgesendet hab.
Dein kleines Programm mit IPS kommunizieren zu lassen sollte mit TRIXI klappen. Die funktioniert auch unter der 2.6.
Bei einem nativen IPS-Modul hast du ja bei jedem Versionswechsel die A*-Karte weil du alles immer gegen das neue SDK kompilieren musst. Mittlerweile bin ich da aber ganz fit. Vielleicht könnten wir mal einen Gedankenaustausch starten, denn das Thema AVR over Ethernet interessiert mich auch sehr. Hab irgendwie nie so recht den Einstieg geschafft.
Ah ja ist klar, aber wenn es sich auf die Versionswechsel von 2.5 -> 2.6 beschränkt, dann wäre es ja nicht so schlimm.
Das problem ist im Moment noch das ich noch nicht wirklich weiss was ich alles in das Modul packe und so weiter …
Der AVR machts im moment so
1.) Aufbau einer Verbindung zum Server
2.) Senden des Datenstrings
3.) Wartet auf ein OK (wenn kein OK kommt, dann noch mal senden des Datenstrings)
4.) Trennen der Verbindung
wenn ich was aktiv am AVR machen will
1.) Clientsocket erstellen
2.) Verbinung zum AVR herstellen
3.) Datenstring senden
4.) warten auf ein OK oder sonstiges Zeichen
5.) Trennen der Verbindung
Meiner Erfahrung nach kannst du deinen funktionierenden Delphi-Code recht einfach übernehmen und in ein IPS-Modul einbetten. Arbeitest du mit Indy oder machst du die Kommunikation „zu Fuß“? Das threading ist seit der 2.6 etwas zickig in IPS. Das muss man gesondert berücksichtigen. Ich nehme an, dass früher die Module allesamt im Haupthread liefen und paresy das jetzt geändert hat was eine andere Art der Synchronisierung verlangt. Das kann, muss aber nicht, Probleme bei der Migration von 2.5 auf 2.6 bringen.
Delphi 6 kannst du für IPS leider nicht gebrauchen aber D2k7 sollte klappen, glaub ich. Das war noch eine Version vor der Unicode-Umstellung, oder? Ich selbst verwende ein gepachtes BDS2k6 (TurboDelphi) für IPS weil mein D2k9 das SDK nicht mag.
Ja verwende die Indys 10 mit delphi 2007
Genau das war vor der unicodeumstellung
Habe zwar auch die XE’s hier rumliegen, aber noch keine zeit gehabt meine Projekte auf Unicode zu porten, deshalb arbeite ich immer noch mit dem 2007er
Super. Das dürfte auch die version sein, die paresy einsetzt.
Dann einfach das SDK mal runterladen und im Ordner IPSModule das MyLib Projekt mal öffnen. Das ist ein fertiges leeres Modul, das out of the box funktioniert aber eben „leer“ ist, also keinen Zweck erfüllt.
In der UTestModule.pas, die automatisch gestartet wird, gibts es constructor und destructor die du einfach wie gewohnt mit deinem Code erweitern kannst. Was sonst noch alles drin ist konnst du vorerst ignorieren.
Ich bekomme ja in diesem Modul dann am ServerSocket die Info das Device 4, der Port Relais_TV auf 1 gegangen ist
daher muß ich ja das Device irgendwie mit dem Modul verknüpfen?
Ja, jetzt weiss ich nicht so genau wie du bisher mit deinen AVRs umgegangen bist. Ich würde versuchen es für den Anfang möglichst einfach zu halten. Wo sollen denn die Daten landen?
Dein Modul lauscht z.B. mit Indy an einem Port. Mit den empfangenen Daten willst du jetzt was genau anstellen?
Ich weiss ja noch nciht wie ich dann das Modul das den Serversocket beinhaltet (also dieses hier) die Daten weitergeben soll
im Moment habe ich es so im IPS
AVR
TV_Schlafzimmer
Aktiv
Relais_TV
Relais_SAT
IRMP_Code
Pool
Licht Schacht
Licht Pool
Automatikmodus
Pumpe
....
TV_Schlafzimmer ist zb Device 66
Pool ist device 201
es kommt also ein Datenstring vom device 66 mit dem Befehel Relais_TV 0 -> dann sollte diese Variable auf 0 gesetzt werden
oder mit device 66 IRMP code 2,0,f,1 dann sollte das in die Varaible IRMP_Code geschrieben werden … usw
nur was mir noch etwas bageht ist nun die verbindung zu diesen im moment Dummy_Modulen TV_Schlafzimmer und Pool
Also du hast Variablen, die nach einem festen Schema gefüllt werden sollen? Und du hast nicht vor deine „Technologie“ an Dritte Weiter zu geben? Ja? Dann „hartverdrahte“ deine „66 Relais_TV 0“ mit der IPS-Variable 56789 (wie sie eben heisst) doch am simpelsten. Könnte so aussehen:
FKernel.VariableManager.WriteVariableInteger(56789, 0); // 56789 ist die VarID, 0 der Wert, der geschrieben wird
Wenn das erstmal klappt und dir die Umsetzung dann zu starr ist brauchst du ja nur die Zuornung der VariablenIDs dynamisch aus einer selbstdefinierten Datei laden (einfache Variante) oder du setzt dich mal mit der settings.xml (ab der 2.6 dann settings.json) auseinander. Dabei aber immer den internen Handler verwenden. IPS steht nicht gerade drauf wenn man da manuell dran herumfummelt.
Und du hast nicht vor deine „Technologie“ an Dritte Weiter zu geben?
Das wäre sehr leidenswurdig fur mich … schade
Es wäre super wenn das modul in eine (zwei) variable den ursprung und inhallt vom epfangene daten raus gibt…
Im rahmen unsere implementierte energiemessung geben die sensoren die gemessene pulsen in 5 minuten takt durch. Ohne auswertung von wo die daten kommen kann ich also die pulsen nicht am richtigen ‚verbraucher‘ zuweisen…
Na jah … irgendwann bastelle ich wohl was zusammen.
freu freu
die daten sind eine art tabelle mit epoche werte und auflaufende zähler-wert
Um in 5 minuten takt zu messen, brauche ich eigentlich nur die frischeste wert aus die tabelle und dann fängt die ganze rechnerei an… scripte stehen soweit bereit …
Kannst auch noch mit RegisterVariable in eine Art OutBuffer als String schreiben. Da könnte dann ein Script auf Änderung der Variable den Inhalt verarbeiten.