Wie bekomme ich die Daten von „ProxmoxIO“ zum „ProxmoxNode“?
Alle Instanzen müssen ja auf den Token und Ticket zugreifen.
Es werden im „ProxmoxIO“ einmal die Daten geholt die dann 2 Stunden Gültig sind.
Kann ich mit den Instanzen den Socket Updaten wenn der Toket abgelaufen ist?
Das ist ja eher eine grundsätzliche Verständnisfrage zum SDK.
Da wäre es eventuell besser ein eigenes Thema im passenden Bereich aufzumachen.
Dort gibt es auch schon diverse Themen dazu.
Zum Beispiel:
Erster Tipp:
Benutze auf der Symcon Webseite im Entwicklerbereich den Modul Generator und fülle dort den Bereich Datenfluss für deinen Device Instanzen aus.
Dann hast du gleich fertige Funktionen im Code.
Zusätzlich sind die Symcon DemoModule auf GitHub sehr hilfreich, da sie immer ein spezielles Thema behandeln.
Um den Punkt mit den Token und Ticket aufzugreifen, diese Daten sollten den IO nie verlassen.
Deine DeviceInstanz (ProxmoxNode) sendet die Anfrage an den IO, der macht den WebRequest und liefert das Ergebnis zurück an das Device.
Den ungültigen Token sollte der IO selbstständig erkennen und erneuern (eventuell per Timer).
Michael
Jein
Kommt auf die Umsetzung an.
Du kannst natürlich den Symcon eigenen WWWReader als IO benutzen, dann macht dein Splitter das Token handling.
Oder du machst es so weiter wie du jetzt schon angefangen hast und baust deinen eigenen IO welcher die CURL Abfragen inkl. Token selber baut.
Ich würde zu letzteren tendieren, da ich glaube dass der Symcon WWWReader keine Cookies unterstützt.
Michael
Kann ich dir nicht sagen, weil ein Modul aus mehr als nur PHP Code besteht. Ohne module.json wo das prefix steht, weiß keiner wie der PHP Befehl lautet.
Hier wäre das FT_CallString und bei dir dann ???_Token.
ProxmoxIO hat PVEIO ProxmoxNode hat PVENODE als Präfix.
Für Tests wird im Moment beim drücken des Buttons in der IO Instanz die Funktion „Token“ ausgeführt. Ich bekomme mein Token als Return und im Debug alles.
Was muss ich noch ausführen damit die Daten beim Node landen?
Später kommt noch die Instanz „ProxmoxVM“, da brauche ich auch die Daten.
Wie gesagt, warum soll ProxmoxNode den Token bekommen? Sinnvoller ist es wenn ProxmoxNode eine Anfrage an den IO sendet (z.B. sende Payload xyz).
Das geht im ProxmoxNode mit SendDataToParent.
Und im ProxmoxIO kommt der Datensatz dann bei ForwardData an und was du dort mit return zurückgibst, kommt als Rückgabewert von SendDataToParent im ProxmoxNode zurück.
So hast du auch eine 1 zu 1 Kommunikation.
Wenn du spontan Daten vom IO an die Childs (ProxmoxNode, ProxmoxVM usw…) senden willst, kannst du das im ProxmoxIO über SendDataToChildren machen; aber dann bekommen alle Childs die Daten (= je ein belegter PHP-Slot pro Child-Instanz). Ist also eine 1:n Kommunikation.
Beides kann Sinn machen, ist immer die Frage was/wie die API die Daten liefert.
Hast du z.B. eine Anfrage an Proxmox wo eh immer alle Daten für alle Instanzen enthalten sind, macht das zweite schon Sinn. Musst du aber eh pro Instanz (ProxmoxNode, ProxmoxVM usw…) eine eigene Anfrage an Proxmox senden, ist es sinnvoller die Childs initiieren die Abfrage über den ProxmoxIO.
in beiden modul.php sind die Funktionen vorhanden. Ich weiss aber nicht was genau ich machen soll.
Habe etliche Beispiele angeschaut und Probiert. Komme einfach nicht weiter.
Muss ich die ForwardData & SendDataToParent Funktionen aufrufen?
Habe im Node Instanz ein Button der die Abfrage machen soll (nur zum Testen) geht aber nichts.
Kann mit jemand ein Code Schnippsel geben? Wäre echt Super.
public function ForwardData($JSONString)
{
$data = json_decode($JSONString,true);
$returndata = "";
switch ($data)
{
case 'Do Something':
// do what you want
$returndata = 'Done';
break;
}
return $returndata;
}
Damit landet „Done“ bei Dir zurück im „Node“ und wird dort im Debug ausgegeben.
Wichtig sind die UUID. Wie Michael schon sagte, erstelle Dir eine entsprechende Vorlage mit dem Modulgenerator, dann ist es eigentlich nicht so kompliziert.