@waly_de
Habe meine eigenen Daten genommen, da man alle hex stellen benötigt um etwas lesen zu können.
Das empfangene ByteArray in HEX umwandeln und als string ausgeben ohne Sonderzeichen (zusammenhängende kette).
Danach in die App werfen und nun versuchen zu interpretieren was da für eine Proto Datei das sein könnte.
Nun muss man die proto als Klasse erstellen und das auf die Klasse "mergen".
Nutze dafür halt .NET mit MQTTnet und Google.Protobuf.
In der message steht dann der lesbare string.
var payload = e.ApplicationMessage.PayloadSegment.ToArray();
var inputStream = new CodedInputStream(payload);
PowerMessage message = new();
message.MergeFrom(inputStream);
Wie oben gezeigt habe ich manche Felder schon identifizieren können.
Habe noch weiter herumprobiert und habe mir auch die .java Dateien der .apk angesehen um zu schlussfolgern wie die Daten zusammenhängen.
C4231d.m10767h().mo33598m(this.f29190c, Common.Send_Header_Msg.newBuilder().addMsg(Common.Header.newBuilder().setSrc(32).setDest(53).setSeq(291).setNeedAck(1).setCmdFunc(20).setCmdId(129).setDeviceSn(this.f29190c).setDataLen(build8.toByteString().size()).setPdata(build8.toByteString()).build()).build().toByteArray());
Hier die neuste .proto
syntax = "proto3";
message PowerItem {
optional Meta meta = 1;
uint32 src = 2;
uint32 dest = 3;
uint32 cmdFunc = 8;
CmdFunction cmdId = 9;
uint32 unknown = 10;
uint32 needAck = 11;
uint64 timestamp = 14;
string serialNumber = 25;
}
message PowerMessage {
PowerItem item = 1;
}
message Meta {
int32 value = 1;
}
enum CmdFunction {
Unknown = 0;
PermanentWattsPack = 129;
SupplyPriorityPack = 130;
}