FS20 Instancen fernsteuern

Mein Splittermodul erstellt und versorgt Devices mit unterschiedlichen Interfaces. Unter anderen auch FS20-Instancen .Die Devices haben alle die Splitter-Instance als Parent connected. Ich rufe zum Setzen der Daten in den Devices aus dem Splitter SendDataToChildren mit der dem jeweiligen Interface entsprechenden DataID und den davon abhängigen Strukturen auf. Allerdings gibt es bei den FS20-Devices bei einer für andere Instancen gedachten Sendung eine Fehlermeldung im Log vom FlowHandler

Kann Daten nicht zur Instanz #29577 weiterleiten: Require Data with DataID {…}

Soll das so sein? Ich dachte, der FlowHandler sendet ohnehin nur an die Devices mit der passenden DataID.
Auch sonst scheinen die FS20-Instancen empfindlich zu sein
Das sollte eigentlich eine gültige Sendung für das FS20 Interface sein:

{„DataID“:"{DF4F0170-1C5F-4250-840C-FB5B67262530}",„ByteCount“:9,„Protocol“:0,„Device=“:0,„DestByte1“:0,„DestByte2“:85,„DestByte3“:170,„DataByte1“:0,„DataByte2“:0,„DataByte3“:0}

Meldung:

Warning: Cannot find required field Device in …scripts_ipsmodule.inc.php on line 277

Keine Ahnung, wo er das her hat…
Tommi

Da steht ein = im Feld Device also „Device=“ soll aber wohl nur „Device“ sein :smiley:
Dass der Flowhandler auch an falsche (immer alle verbundenen Instanzen sendet) steht hier schon:
Fehlende Funktionen & Funktionswünsche des PHP-SDK

Michael

Oh man, ich sollte nicht soviel vor der Kiste sitzen. Danke fürs Zeigen! Nun kommen zwar keine Fehlermeldungen mehr, der Status der FS20-Instance ändert sich aber auch nicht. (sollte von Aus auf An)

{„DataID“:"{DF4F0170-1C5F-4250-840C-FB5B67262530}",
„ByteCount“:9,„Protocol“:0,„Device“:0,
„DestByte1“:0,„DestByte2“:85,„DestByte3“:170,
„DataByte1“:17,„DataByte2“:0,„DataByte3“:0}

Grundsätzlich wäre das Senden an alle auch nicht wirklich ein Problem. Man ja die nicht genutzten DataIDs ignorieren. Das muss man natürlich dann auch ins Modul reinschreiben und keine doofen Fehler werfen…

Tommi

Solange du Einfluss darauf hast ist es ja OK.
Aber ich habe z.b einen Splitter welcher ein eigenes Forward-Interface (für Geräte) und eins für ReceiveText implementiert. Original IPS-Instanzen werden dann Fehlermeldungen wenn auf einmal die Daten über mein eigenes Interface eintreffen. Unschön…und das nur weil dort nicht auf die DataId geprüft wird.

Warum deine Daten nicht ausgewertet werden von den Instanzen kann ich gerade auch nicht sagen.

Unter Delphi war dass das ReceiveFHZData-Interface wo dann ein TFHZDataRX Object übergeben wurde, oder ?
Fehlt dann nicht vielleicht DestByte4 und DataByte4 ?
Muss aber gestehen, ich habe mich nie mit FS20 beschäftigt :wink:

Michael

Mit DestByte4+DataByte4 wird es auch nichts. Wenn die FS20-Instance was sendet,z.B. aus dem Testcenter, kommen auch nur jeweils 3 Bytes zurück. Device fehlt ganz.

{„DataID“:"{122F60FB-BE1B-4CAB-A427-2613E4C82CBA}",
„ByteCount“:9,„Protocol“:0,
„DestByte1“:0,„DestByte2“:85,„DestByte3“:170,
„DataByte1“:17,„DataByte2“:0,„DataByte3“:0}

Leider sind die internen Interfaces (noch:D) nicht dokumentiert. Wahrscheinlich kann das nur Paresy checken. Ich sehe aber auch nicht wirklich Sinn darin, deswegen selber ein Device für FS20 schreiben zu müssen.

Tommi

Schau doch in das alte SDK.
Vom FS20Device nach oben senden ist ja auch ein anderes Interface. Das war ja mal TFHZDataTX.
Das hatte/hat wirklich nur 3.
Ja… dieses Punkt hatte ich auch schon mal für die Doku angeregt, aktuell gibt es da ja nix neues.
Michael

OK. Da gibt es tatsächlich Unterschiede.

Das Interface in Delphi:

TFHZProtocol = (fhzpFS20, fhzpFHT, fhzpHMS, fhzpKS300, fhzpFHTResponse, fhzpDateTime);
TFHZDevice=(fhzdFS20, fhzdFHT, fhzdHMSTF, fhzdHMST, fhzdHMSW, fhzdHMS100RM,
fhzdHMS100TFK, fhzdSwitchIN, fhzdGasSensor1, fhzdGasSensor2, fhzdCOSensor, fhzdKS300, fhzdFIT, fhzdALW);

//Receive Record
TFHZDataRX = class(TIPSRemotable)
private
FProtocol : TFHZProtocol;
FDevice : TFHZDevice;
FDeviceByte : Byte;
FSrcsByte1 : Byte;
FSrcsByte2 : Byte;
FSrcsByte3 : Byte;
FSrcsByte4 : Byte;
FDataByte1 : Byte;
FDataByte2 : Byte;
FDataByte3 : Byte;
FDataByte4 : Byte;
published
property Protocol : TFHZProtocol read FProtocol write FProtocol;
property Device : TFHZDevice read FDevice write FDevice;
property DeviceByte : Byte read FDeviceByte write FDeviceByte;
property SrcsByte1 : Byte read FSrcsByte1 write FSrcsByte1;
property SrcsByte2 : Byte read FSrcsByte2 write FSrcsByte2;
property SrcsByte3 : Byte read FSrcsByte3 write FSrcsByte3;
property SrcsByte4 : Byte read FSrcsByte4 write FSrcsByte4;
property DataByte1 : Byte read FDataByte1 write FDataByte1;
property DataByte2 : Byte read FDataByte2 write FDataByte2;
property DataByte3 : Byte read FDataByte3 write FDataByte3;
property DataByte4 : Byte read FDataByte4 write FDataByte4;
end;

fhzpFS20 und fhzdfs20 sind an Position 0 in der Enum.

Wenn ich das zusammenbaue und absende, kommen keine Fehler mehr, aber es funktioniert auch nicht

{„DataID“:"{DF4F0170-1C5F-4250-840C-FB5B67262530}",„Protocol“:0,„Device“:0,„DeviceByte“:1,
„SrcsByte1“:0,„SrcsByte2“:85,„SrcsByte3“:170,„SrcsByte4“:0,
„DataByte1“:20,„DataByte2“:0,„DataByte3“:0,„DataByte4“:0}

Dieses FS20 Interface hat mich jetzt schon mehr als einen Tag gekostet. Selber ein Schalter Device zu schreiben wäre wohl doch schneller gewesen :mad:

Tommi

Vielleicht liest der Großmeister ja mit und hat einen Entscheidenden Tip für dich, gell Paresy :smiley:
Michael

Das sieht eigentlich gut aus. Nur die 20 im DataByte1 setzt nichts auf an. Laut FS20 Protokoll kannst du eine 0x10 (16) senden. Ändern sich bei dir die Variablen überhaupt? Ansonsten sendest du evtl. die falsche Homecode/Adresse. Hast du mal die Suche in der Instanz geöffnet?


{
    "DataID": "{DF4F0170-1C5F-4250-840C-FB5B67262530}",
    "Protocol": 0,
    "Device": 0,
    "DeviceByte": 1,
    "SrcsByte1": 0,
    "SrcsByte2": 0,
    "SrcsByte3": 0,
    "SrcsByte4": 0,
    "DataByte1": 16,
    "DataByte2": 0,
    "DataByte3": 0,
    "DataByte4": 0
}

paresy

Danke fürs nachsehen.

20(decimal) wäre nach dem mir bekannten Protokoll ‚dimdown‘, 16(On 100%) oder 17 (On to last Level) gehen auch nicht Die SrcsBytes sind exakt die, welch die Instance selber beim Aufruf aus dem Testcenter als DestBytes sendet +Destbyte4=0.
Suchen bringt nichts. Wahrscheinlich weil die Instance nicht an einer FHZ hängt, sondern von einem neuem Modul angelegt wurde.
BTW: Was macht eigentlich das DeviceByte?

Tommi

Solange die FS20 Instanz korrekt an deinem Splitter hängt und dein Splitter das Paket sendet, sollte es einwandfrei laufen. Kannst du mir dein Modul irgendwie zur Verfügung stellen? Ich schaue mir dann gerne nach Ostern an, woran es liegt. Wir übersehen hier bestimmt irgendwas. :slight_smile:

paresy

Ich würde Dir gerne eine PN mit Attachement schicken, aber da geht kein Attachement… :frowning: