mirror of
https://github.com/chirpstack/chirpstack.git
synced 2025-02-20 17:12:48 +00:00
Add event prefix + arbitrary JSON options for IFTTT.
This commit is contained in:
parent
5146c87940
commit
513aa7804d
481
api/csharp/Chirpstack/api/Application.cs
vendored
481
api/csharp/Chirpstack/api/Application.cs
vendored
@ -163,204 +163,205 @@ namespace Chirpstack.Api {
|
||||
"bG90VGhpbmdzSW50ZWdyYXRpb24iVwojVXBkYXRlUGlsb3RUaGluZ3NJbnRl",
|
||||
"Z3JhdGlvblJlcXVlc3QSMAoLaW50ZWdyYXRpb24YASABKAsyGy5hcGkuUGls",
|
||||
"b3RUaGluZ3NJbnRlZ3JhdGlvbiI9CiNEZWxldGVQaWxvdFRoaW5nc0ludGVn",
|
||||
"cmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJOChBJZnR0",
|
||||
"cmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSJ8ChBJZnR0",
|
||||
"dEludGVncmF0aW9uEhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJEgsKA2tleRgC",
|
||||
"IAEoCRIVCg11cGxpbmtfdmFsdWVzGAMgAygJIksKHUNyZWF0ZUlmdHR0SW50",
|
||||
"ZWdyYXRpb25SZXF1ZXN0EioKC2ludGVncmF0aW9uGAEgASgLMhUuYXBpLklm",
|
||||
"dHR0SW50ZWdyYXRpb24iNAoaR2V0SWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QS",
|
||||
"FgoOYXBwbGljYXRpb25faWQYASABKAkiSQobR2V0SWZ0dHRJbnRlZ3JhdGlv",
|
||||
"blJlc3BvbnNlEioKC2ludGVncmF0aW9uGAEgASgLMhUuYXBpLklmdHR0SW50",
|
||||
"ZWdyYXRpb24iSwodVXBkYXRlSWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QSKgoL",
|
||||
"aW50ZWdyYXRpb24YASABKAsyFS5hcGkuSWZ0dHRJbnRlZ3JhdGlvbiI3Ch1E",
|
||||
"ZWxldGVJZnR0dEludGVncmF0aW9uUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9p",
|
||||
"ZBgBIAEoCSJJCi9HZW5lcmF0ZU1xdHRJbnRlZ3JhdGlvbkNsaWVudENlcnRp",
|
||||
"ZmljYXRlUmVxdWVzdBIWCg5hcHBsaWNhdGlvbl9pZBgBIAEoCSKWAQowR2Vu",
|
||||
"ZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZpY2F0ZVJlc3BvbnNl",
|
||||
"EhAKCHRsc19jZXJ0GAEgASgJEg8KB3Rsc19rZXkYAiABKAkSDwoHY2FfY2Vy",
|
||||
"dBgDIAEoCRIuCgpleHBpcmVzX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVm",
|
||||
"LlRpbWVzdGFtcCoiCghFbmNvZGluZxIICgRKU09OEAASDAoIUFJPVE9CVUYQ",
|
||||
"ASq/AQoPSW50ZWdyYXRpb25LaW5kEggKBEhUVFAQABINCglJTkZMVVhfREIQ",
|
||||
"ARIQCgxUSElOR1NfQk9BUkQQAhIOCgpNWV9ERVZJQ0VTEAMSDgoKTE9SQV9D",
|
||||
"TE9VRBAEEg8KC0dDUF9QVUJfU1VCEAUSCwoHQVdTX1NOUxAGEhUKEUFaVVJF",
|
||||
"X1NFUlZJQ0VfQlVTEAcSEAoMUElMT1RfVEhJTkdTEAgSDwoLTVFUVF9HTE9C",
|
||||
"QUwQCRIJCgVJRlRUVBAKKj8KEUluZmx1eERiUHJlY2lzaW9uEgYKAk5TEAAS",
|
||||
"BQoBVRABEgYKAk1TEAISBQoBUxADEgUKAU0QBBIFCgFIEAUqMQoPSW5mbHV4",
|
||||
"RGJWZXJzaW9uEg4KCklORkxVWERCXzEQABIOCgpJTkZMVVhEQl8yEAEyuDwK",
|
||||
"EkFwcGxpY2F0aW9uU2VydmljZRJlCgZDcmVhdGUSHS5hcGkuQ3JlYXRlQXBw",
|
||||
"bGljYXRpb25SZXF1ZXN0Gh4uYXBpLkNyZWF0ZUFwcGxpY2F0aW9uUmVzcG9u",
|
||||
"c2UiHILT5JMCFiIRL2FwaS9hcHBsaWNhdGlvbnM6ASoSXgoDR2V0EhouYXBp",
|
||||
"LkdldEFwcGxpY2F0aW9uUmVxdWVzdBobLmFwaS5HZXRBcHBsaWNhdGlvblJl",
|
||||
"c3BvbnNlIh6C0+STAhgSFi9hcGkvYXBwbGljYXRpb25zL3tpZH0SbgoGVXBk",
|
||||
"YXRlEh0uYXBpLlVwZGF0ZUFwcGxpY2F0aW9uUmVxdWVzdBoWLmdvb2dsZS5w",
|
||||
"cm90b2J1Zi5FbXB0eSItgtPkkwInGiIvYXBpL2FwcGxpY2F0aW9ucy97YXBw",
|
||||
"bGljYXRpb24uaWR9OgEqEl8KBkRlbGV0ZRIdLmFwaS5EZWxldGVBcHBsaWNh",
|
||||
"dGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiHoLT5JMCGCoW",
|
||||
"L2FwaS9hcHBsaWNhdGlvbnMve2lkfRJeCgRMaXN0EhwuYXBpLkxpc3RBcHBs",
|
||||
"aWNhdGlvbnNSZXF1ZXN0Gh0uYXBpLkxpc3RBcHBsaWNhdGlvbnNSZXNwb25z",
|
||||
"ZSIZgtPkkwITEhEvYXBpL2FwcGxpY2F0aW9ucxKIAQoQTGlzdEludGVncmF0",
|
||||
"aW9ucxIcLmFwaS5MaXN0SW50ZWdyYXRpb25zUmVxdWVzdBodLmFwaS5MaXN0",
|
||||
"SW50ZWdyYXRpb25zUmVzcG9uc2UiN4LT5JMCMRIvL2FwaS9hcHBsaWNhdGlv",
|
||||
"bnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMSnwEKFUNyZWF0ZUh0",
|
||||
"dHBJbnRlZ3JhdGlvbhIhLmFwaS5DcmVhdGVIdHRwSW50ZWdyYXRpb25SZXF1",
|
||||
"ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkuC0+STAkUiQC9hcGkvYXBw",
|
||||
"IAEoCRIVCg11cGxpbmtfdmFsdWVzGAMgAygJEhYKDmFyYml0cmFyeV9qc29u",
|
||||
"GAQgASgIEhQKDGV2ZW50X3ByZWZpeBgFIAEoCSJLCh1DcmVhdGVJZnR0dElu",
|
||||
"dGVncmF0aW9uUmVxdWVzdBIqCgtpbnRlZ3JhdGlvbhgBIAEoCzIVLmFwaS5J",
|
||||
"ZnR0dEludGVncmF0aW9uIjQKGkdldElmdHR0SW50ZWdyYXRpb25SZXF1ZXN0",
|
||||
"EhYKDmFwcGxpY2F0aW9uX2lkGAEgASgJIkkKG0dldElmdHR0SW50ZWdyYXRp",
|
||||
"b25SZXNwb25zZRIqCgtpbnRlZ3JhdGlvbhgBIAEoCzIVLmFwaS5JZnR0dElu",
|
||||
"dGVncmF0aW9uIksKHVVwZGF0ZUlmdHR0SW50ZWdyYXRpb25SZXF1ZXN0EioK",
|
||||
"C2ludGVncmF0aW9uGAEgASgLMhUuYXBpLklmdHR0SW50ZWdyYXRpb24iNwod",
|
||||
"RGVsZXRlSWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QSFgoOYXBwbGljYXRpb25f",
|
||||
"aWQYASABKAkiSQovR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0",
|
||||
"aWZpY2F0ZVJlcXVlc3QSFgoOYXBwbGljYXRpb25faWQYASABKAkilgEKMEdl",
|
||||
"bmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlmaWNhdGVSZXNwb25z",
|
||||
"ZRIQCgh0bHNfY2VydBgBIAEoCRIPCgd0bHNfa2V5GAIgASgJEg8KB2NhX2Nl",
|
||||
"cnQYAyABKAkSLgoKZXhwaXJlc19hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1",
|
||||
"Zi5UaW1lc3RhbXAqIgoIRW5jb2RpbmcSCAoESlNPThAAEgwKCFBST1RPQlVG",
|
||||
"EAEqvwEKD0ludGVncmF0aW9uS2luZBIICgRIVFRQEAASDQoJSU5GTFVYX0RC",
|
||||
"EAESEAoMVEhJTkdTX0JPQVJEEAISDgoKTVlfREVWSUNFUxADEg4KCkxPUkFf",
|
||||
"Q0xPVUQQBBIPCgtHQ1BfUFVCX1NVQhAFEgsKB0FXU19TTlMQBhIVChFBWlVS",
|
||||
"RV9TRVJWSUNFX0JVUxAHEhAKDFBJTE9UX1RISU5HUxAIEg8KC01RVFRfR0xP",
|
||||
"QkFMEAkSCQoFSUZUVFQQCio/ChFJbmZsdXhEYlByZWNpc2lvbhIGCgJOUxAA",
|
||||
"EgUKAVUQARIGCgJNUxACEgUKAVMQAxIFCgFNEAQSBQoBSBAFKjEKD0luZmx1",
|
||||
"eERiVmVyc2lvbhIOCgpJTkZMVVhEQl8xEAASDgoKSU5GTFVYREJfMhABMrg8",
|
||||
"ChJBcHBsaWNhdGlvblNlcnZpY2USZQoGQ3JlYXRlEh0uYXBpLkNyZWF0ZUFw",
|
||||
"cGxpY2F0aW9uUmVxdWVzdBoeLmFwaS5DcmVhdGVBcHBsaWNhdGlvblJlc3Bv",
|
||||
"bnNlIhyC0+STAhYiES9hcGkvYXBwbGljYXRpb25zOgEqEl4KA0dldBIaLmFw",
|
||||
"aS5HZXRBcHBsaWNhdGlvblJlcXVlc3QaGy5hcGkuR2V0QXBwbGljYXRpb25S",
|
||||
"ZXNwb25zZSIegtPkkwIYEhYvYXBpL2FwcGxpY2F0aW9ucy97aWR9Em4KBlVw",
|
||||
"ZGF0ZRIdLmFwaS5VcGRhdGVBcHBsaWNhdGlvblJlcXVlc3QaFi5nb29nbGUu",
|
||||
"cHJvdG9idWYuRW1wdHkiLYLT5JMCJxoiL2FwaS9hcHBsaWNhdGlvbnMve2Fw",
|
||||
"cGxpY2F0aW9uLmlkfToBKhJfCgZEZWxldGUSHS5hcGkuRGVsZXRlQXBwbGlj",
|
||||
"YXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ih6C0+STAhgq",
|
||||
"Fi9hcGkvYXBwbGljYXRpb25zL3tpZH0SXgoETGlzdBIcLmFwaS5MaXN0QXBw",
|
||||
"bGljYXRpb25zUmVxdWVzdBodLmFwaS5MaXN0QXBwbGljYXRpb25zUmVzcG9u",
|
||||
"c2UiGYLT5JMCExIRL2FwaS9hcHBsaWNhdGlvbnMSiAEKEExpc3RJbnRlZ3Jh",
|
||||
"dGlvbnMSHC5hcGkuTGlzdEludGVncmF0aW9uc1JlcXVlc3QaHS5hcGkuTGlz",
|
||||
"dEludGVncmF0aW9uc1Jlc3BvbnNlIjeC0+STAjESLy9hcGkvYXBwbGljYXRp",
|
||||
"b25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zEp8BChVDcmVhdGVI",
|
||||
"dHRwSW50ZWdyYXRpb24SIS5hcGkuQ3JlYXRlSHR0cEludGVncmF0aW9uUmVx",
|
||||
"dWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJLgtPkkwJFIkAvYXBpL2Fw",
|
||||
"cGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVn",
|
||||
"cmF0aW9ucy9odHRwOgEqEpMBChJHZXRIdHRwSW50ZWdyYXRpb24SHi5hcGku",
|
||||
"R2V0SHR0cEludGVncmF0aW9uUmVxdWVzdBofLmFwaS5HZXRIdHRwSW50ZWdy",
|
||||
"YXRpb25SZXNwb25zZSI8gtPkkwI2EjQvYXBpL2FwcGxpY2F0aW9ucy97YXBw",
|
||||
"bGljYXRpb25faWR9L2ludGVncmF0aW9ucy9odHRwEp8BChVVcGRhdGVIdHRw",
|
||||
"SW50ZWdyYXRpb24SIS5hcGkuVXBkYXRlSHR0cEludGVncmF0aW9uUmVxdWVz",
|
||||
"dBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJLgtPkkwJFGkAvYXBpL2FwcGxp",
|
||||
"Y2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0",
|
||||
"aW9ucy9odHRwOgEqEpABChVEZWxldGVIdHRwSW50ZWdyYXRpb24SIS5hcGku",
|
||||
"RGVsZXRlSHR0cEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1",
|
||||
"Zi5FbXB0eSI8gtPkkwI2KjQvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRp",
|
||||
"b25faWR9L2ludGVncmF0aW9ucy9odHRwEqsBChlDcmVhdGVJbmZsdXhEYklu",
|
||||
"dGVncmF0aW9uEiUuYXBpLkNyZWF0ZUluZmx1eERiSW50ZWdyYXRpb25SZXF1",
|
||||
"ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ik+C0+STAkkiRC9hcGkvYXBw",
|
||||
"bGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdy",
|
||||
"YXRpb25zL2h0dHA6ASoSkwEKEkdldEh0dHBJbnRlZ3JhdGlvbhIeLmFwaS5H",
|
||||
"ZXRIdHRwSW50ZWdyYXRpb25SZXF1ZXN0Gh8uYXBpLkdldEh0dHBJbnRlZ3Jh",
|
||||
"dGlvblJlc3BvbnNlIjyC0+STAjYSNC9hcGkvYXBwbGljYXRpb25zL3thcHBs",
|
||||
"aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2h0dHASnwEKFVVwZGF0ZUh0dHBJ",
|
||||
"bnRlZ3JhdGlvbhIhLmFwaS5VcGRhdGVIdHRwSW50ZWdyYXRpb25SZXF1ZXN0",
|
||||
"GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkuC0+STAkUaQC9hcGkvYXBwbGlj",
|
||||
"YXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRp",
|
||||
"b25zL2h0dHA6ASoSkAEKFURlbGV0ZUh0dHBJbnRlZ3JhdGlvbhIhLmFwaS5E",
|
||||
"ZWxldGVIdHRwSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVm",
|
||||
"LkVtcHR5IjyC0+STAjYqNC9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlv",
|
||||
"bl9pZH0vaW50ZWdyYXRpb25zL2h0dHASqwEKGUNyZWF0ZUluZmx1eERiSW50",
|
||||
"ZWdyYXRpb24SJS5hcGkuQ3JlYXRlSW5mbHV4RGJJbnRlZ3JhdGlvblJlcXVl",
|
||||
"c3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiT4LT5JMCSSJEL2FwaS9hcHBs",
|
||||
"aWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3Jh",
|
||||
"dGlvbnMvaW5mbHV4ZGI6ASoSowEKFkdldEluZmx1eERiSW50ZWdyYXRpb24S",
|
||||
"Ii5hcGkuR2V0SW5mbHV4RGJJbnRlZ3JhdGlvblJlcXVlc3QaIy5hcGkuR2V0",
|
||||
"SW5mbHV4RGJJbnRlZ3JhdGlvblJlc3BvbnNlIkCC0+STAjoSOC9hcGkvYXBw",
|
||||
"bGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2luZmx1",
|
||||
"eGRiEqsBChlVcGRhdGVJbmZsdXhEYkludGVncmF0aW9uEiUuYXBpLlVwZGF0",
|
||||
"ZUluZmx1eERiSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVm",
|
||||
"LkVtcHR5Ik+C0+STAkkaRC9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlv",
|
||||
"bi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2luZmx1eGRiOgEqEpwB",
|
||||
"ChlEZWxldGVJbmZsdXhEYkludGVncmF0aW9uEiUuYXBpLkRlbGV0ZUluZmx1",
|
||||
"eERiSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5",
|
||||
"IkCC0+STAjoqOC9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0v",
|
||||
"aW50ZWdyYXRpb25zL2luZmx1eGRiErQBChxDcmVhdGVUaGluZ3NCb2FyZElu",
|
||||
"dGVncmF0aW9uEiguYXBpLkNyZWF0ZVRoaW5nc0JvYXJkSW50ZWdyYXRpb25S",
|
||||
"ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlKC0+STAkwiRy9hcGkv",
|
||||
"YXRpb25zL2luZmx1eGRiOgEqEqMBChZHZXRJbmZsdXhEYkludGVncmF0aW9u",
|
||||
"EiIuYXBpLkdldEluZmx1eERiSW50ZWdyYXRpb25SZXF1ZXN0GiMuYXBpLkdl",
|
||||
"dEluZmx1eERiSW50ZWdyYXRpb25SZXNwb25zZSJAgtPkkwI6EjgvYXBpL2Fw",
|
||||
"cGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pbmZs",
|
||||
"dXhkYhKrAQoZVXBkYXRlSW5mbHV4RGJJbnRlZ3JhdGlvbhIlLmFwaS5VcGRh",
|
||||
"dGVJbmZsdXhEYkludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1",
|
||||
"Zi5FbXB0eSJPgtPkkwJJGkQvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRp",
|
||||
"b24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pbmZsdXhkYjoBKhKc",
|
||||
"AQoZRGVsZXRlSW5mbHV4RGJJbnRlZ3JhdGlvbhIlLmFwaS5EZWxldGVJbmZs",
|
||||
"dXhEYkludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0",
|
||||
"eSJAgtPkkwI6KjgvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9",
|
||||
"L2ludGVncmF0aW9ucy9pbmZsdXhkYhK0AQocQ3JlYXRlVGhpbmdzQm9hcmRJ",
|
||||
"bnRlZ3JhdGlvbhIoLmFwaS5DcmVhdGVUaGluZ3NCb2FyZEludGVncmF0aW9u",
|
||||
"UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPkkwJMIkcvYXBp",
|
||||
"L2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2lu",
|
||||
"dGVncmF0aW9ucy90aGluZ3Nib2FyZDoBKhKvAQoZR2V0VGhpbmdzQm9hcmRJ",
|
||||
"bnRlZ3JhdGlvbhIlLmFwaS5HZXRUaGluZ3NCb2FyZEludGVncmF0aW9uUmVx",
|
||||
"dWVzdBomLmFwaS5HZXRUaGluZ3NCb2FyZEludGVncmF0aW9uUmVzcG9uc2Ui",
|
||||
"Q4LT5JMCPRI7L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9p",
|
||||
"bnRlZ3JhdGlvbnMvdGhpbmdzYm9hcmQStAEKHFVwZGF0ZVRoaW5nc0JvYXJk",
|
||||
"SW50ZWdyYXRpb24SKC5hcGkuVXBkYXRlVGhpbmdzQm9hcmRJbnRlZ3JhdGlv",
|
||||
"blJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT5JMCTBpHL2Fw",
|
||||
"aS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9p",
|
||||
"bnRlZ3JhdGlvbnMvdGhpbmdzYm9hcmQ6ASoSpQEKHERlbGV0ZVRoaW5nc0Jv",
|
||||
"YXJkSW50ZWdyYXRpb24SKC5hcGkuRGVsZXRlVGhpbmdzQm9hcmRJbnRlZ3Jh",
|
||||
"dGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiQ4LT5JMCPSo7",
|
||||
"L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlv",
|
||||
"bnMvdGhpbmdzYm9hcmQSrgEKGkNyZWF0ZU15RGV2aWNlc0ludGVncmF0aW9u",
|
||||
"EiYuYXBpLkNyZWF0ZU15RGV2aWNlc0ludGVncmF0aW9uUmVxdWVzdBoWLmdv",
|
||||
"b2dsZS5wcm90b2J1Zi5FbXB0eSJQgtPkkwJKIkUvYXBpL2FwcGxpY2F0aW9u",
|
||||
"cy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9t",
|
||||
"eWRldmljZXM6ASoSpwEKF0dldE15RGV2aWNlc0ludGVncmF0aW9uEiMuYXBp",
|
||||
"LkdldE15RGV2aWNlc0ludGVncmF0aW9uUmVxdWVzdBokLmFwaS5HZXRNeURl",
|
||||
"dmljZXNJbnRlZ3JhdGlvblJlc3BvbnNlIkGC0+STAjsSOS9hcGkvYXBwbGlj",
|
||||
"YXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL215ZGV2aWNl",
|
||||
"cxKuAQoaVXBkYXRlTXlEZXZpY2VzSW50ZWdyYXRpb24SJi5hcGkuVXBkYXRl",
|
||||
"TXlEZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVm",
|
||||
"LkVtcHR5IlCC0+STAkoaRS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlv",
|
||||
"bi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL215ZGV2aWNlczoBKhKf",
|
||||
"AQoaRGVsZXRlTXlEZXZpY2VzSW50ZWdyYXRpb24SJi5hcGkuRGVsZXRlTXlE",
|
||||
"ZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVt",
|
||||
"cHR5IkGC0+STAjsqOS9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9p",
|
||||
"ZH0vaW50ZWdyYXRpb25zL215ZGV2aWNlcxKuAQoaQ3JlYXRlTG9yYUNsb3Vk",
|
||||
"SW50ZWdyYXRpb24SJi5hcGkuQ3JlYXRlTG9yYUNsb3VkSW50ZWdyYXRpb25S",
|
||||
"ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IlCC0+STAkoiRS9hcGkv",
|
||||
"YXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50",
|
||||
"ZWdyYXRpb25zL3RoaW5nc2JvYXJkOgEqEq8BChlHZXRUaGluZ3NCb2FyZElu",
|
||||
"dGVncmF0aW9uEiUuYXBpLkdldFRoaW5nc0JvYXJkSW50ZWdyYXRpb25SZXF1",
|
||||
"ZXN0GiYuYXBpLkdldFRoaW5nc0JvYXJkSW50ZWdyYXRpb25SZXNwb25zZSJD",
|
||||
"gtPkkwI9EjsvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2lu",
|
||||
"dGVncmF0aW9ucy90aGluZ3Nib2FyZBK0AQocVXBkYXRlVGhpbmdzQm9hcmRJ",
|
||||
"bnRlZ3JhdGlvbhIoLmFwaS5VcGRhdGVUaGluZ3NCb2FyZEludGVncmF0aW9u",
|
||||
"UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPkkwJMGkcvYXBp",
|
||||
"L2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2lu",
|
||||
"dGVncmF0aW9ucy90aGluZ3Nib2FyZDoBKhKlAQocRGVsZXRlVGhpbmdzQm9h",
|
||||
"cmRJbnRlZ3JhdGlvbhIoLmFwaS5EZWxldGVUaGluZ3NCb2FyZEludGVncmF0",
|
||||
"aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJDgtPkkwI9Kjsv",
|
||||
"ZWdyYXRpb25zL2xvcmFjbG91ZDoBKhKnAQoXR2V0TG9yYUNsb3VkSW50ZWdy",
|
||||
"YXRpb24SIy5hcGkuR2V0TG9yYUNsb3VkSW50ZWdyYXRpb25SZXF1ZXN0GiQu",
|
||||
"YXBpLkdldExvcmFDbG91ZEludGVncmF0aW9uUmVzcG9uc2UiQYLT5JMCOxI5",
|
||||
"L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlv",
|
||||
"bnMvbG9yYWNsb3VkEq4BChpVcGRhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlvbhIm",
|
||||
"LmFwaS5VcGRhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29n",
|
||||
"bGUucHJvdG9idWYuRW1wdHkiUILT5JMCShpFL2FwaS9hcHBsaWNhdGlvbnMv",
|
||||
"e2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbG9y",
|
||||
"YWNsb3VkOgEqEp8BChpEZWxldGVMb3JhQ2xvdWRJbnRlZ3JhdGlvbhImLmFw",
|
||||
"aS5EZWxldGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUu",
|
||||
"cHJvdG9idWYuRW1wdHkiQYLT5JMCOyo5L2FwaS9hcHBsaWNhdGlvbnMve2Fw",
|
||||
"cGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbG9yYWNsb3VkErABChpDcmVh",
|
||||
"dGVHY3BQdWJTdWJJbnRlZ3JhdGlvbhImLmFwaS5DcmVhdGVHY3BQdWJTdWJJ",
|
||||
"bnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT",
|
||||
"5JMCTCJHL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0",
|
||||
"aW9uX2lkfS9pbnRlZ3JhdGlvbnMvZ2NwLXB1Yi1zdWI6ASoSqQEKF0dldEdj",
|
||||
"cFB1YlN1YkludGVncmF0aW9uEiMuYXBpLkdldEdjcFB1YlN1YkludGVncmF0",
|
||||
"aW9uUmVxdWVzdBokLmFwaS5HZXRHY3BQdWJTdWJJbnRlZ3JhdGlvblJlc3Bv",
|
||||
"bnNlIkOC0+STAj0SOy9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9p",
|
||||
"ZH0vaW50ZWdyYXRpb25zL2djcC1wdWItc3ViErABChpVcGRhdGVHY3BQdWJT",
|
||||
"dWJJbnRlZ3JhdGlvbhImLmFwaS5VcGRhdGVHY3BQdWJTdWJJbnRlZ3JhdGlv",
|
||||
"blJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUoLT5JMCTBpHL2Fw",
|
||||
"aS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9p",
|
||||
"bnRlZ3JhdGlvbnMvZ2NwLXB1Yi1zdWI6ASoSoQEKGkRlbGV0ZUdjcFB1YlN1",
|
||||
"YkludGVncmF0aW9uEiYuYXBpLkRlbGV0ZUdjcFB1YlN1YkludGVncmF0aW9u",
|
||||
"UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJDgtPkkwI9KjsvYXBp",
|
||||
"L2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9n",
|
||||
"Y3AtcHViLXN1YhKmAQoXQ3JlYXRlQXdzU25zSW50ZWdyYXRpb24SIy5hcGku",
|
||||
"Q3JlYXRlQXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3Rv",
|
||||
"YnVmLkVtcHR5Ik6C0+STAkgiQy9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3Jh",
|
||||
"dGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F3cy1zbnM6ASoS",
|
||||
"nAEKFEdldEF3c1Nuc0ludGVncmF0aW9uEiAuYXBpLkdldEF3c1Nuc0ludGVn",
|
||||
"cmF0aW9uUmVxdWVzdBohLmFwaS5HZXRBd3NTbnNJbnRlZ3JhdGlvblJlc3Bv",
|
||||
"bnNlIj+C0+STAjkSNy9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9p",
|
||||
"ZH0vaW50ZWdyYXRpb25zL2F3cy1zbnMSpgEKF1VwZGF0ZUF3c1Nuc0ludGVn",
|
||||
"cmF0aW9uEiMuYXBpLlVwZGF0ZUF3c1Nuc0ludGVncmF0aW9uUmVxdWVzdBoW",
|
||||
"Lmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJOgtPkkwJIGkMvYXBpL2FwcGxpY2F0",
|
||||
"aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9u",
|
||||
"cy9hd3Mtc25zOgEqEpcBChdEZWxldGVBd3NTbnNJbnRlZ3JhdGlvbhIjLmFw",
|
||||
"aS5EZWxldGVBd3NTbnNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJv",
|
||||
"dG9idWYuRW1wdHkiP4LT5JMCOSo3L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxp",
|
||||
"Y2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXdzLXNucxLCAQogQ3JlYXRlQXp1",
|
||||
"cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb24SLC5hcGkuQ3JlYXRlQXp1cmVTZXJ2",
|
||||
"aWNlQnVzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVt",
|
||||
"cHR5IliC0+STAlIiTS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5h",
|
||||
"cHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2F6dXJlLXNlcnZpY2UtYnVz",
|
||||
"OgEqEsEBCh1HZXRBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbhIpLmFwaS5H",
|
||||
"ZXRBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QaKi5hcGkuR2V0",
|
||||
"QXp1cmVTZXJ2aWNlQnVzSW50ZWdyYXRpb25SZXNwb25zZSJJgtPkkwJDEkEv",
|
||||
"YXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9u",
|
||||
"cy90aGluZ3Nib2FyZBKuAQoaQ3JlYXRlTXlEZXZpY2VzSW50ZWdyYXRpb24S",
|
||||
"Ji5hcGkuQ3JlYXRlTXlEZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29v",
|
||||
"Z2xlLnByb3RvYnVmLkVtcHR5IlCC0+STAkoiRS9hcGkvYXBwbGljYXRpb25z",
|
||||
"L3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL215",
|
||||
"ZGV2aWNlczoBKhKnAQoXR2V0TXlEZXZpY2VzSW50ZWdyYXRpb24SIy5hcGku",
|
||||
"R2V0TXlEZXZpY2VzSW50ZWdyYXRpb25SZXF1ZXN0GiQuYXBpLkdldE15RGV2",
|
||||
"aWNlc0ludGVncmF0aW9uUmVzcG9uc2UiQYLT5JMCOxI5L2FwaS9hcHBsaWNh",
|
||||
"dGlvbnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbXlkZXZpY2Vz",
|
||||
"Eq4BChpVcGRhdGVNeURldmljZXNJbnRlZ3JhdGlvbhImLmFwaS5VcGRhdGVN",
|
||||
"eURldmljZXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
|
||||
"RW1wdHkiUILT5JMCShpFL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9u",
|
||||
"LmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbXlkZXZpY2VzOgEqEp8B",
|
||||
"ChpEZWxldGVNeURldmljZXNJbnRlZ3JhdGlvbhImLmFwaS5EZWxldGVNeURl",
|
||||
"dmljZXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1w",
|
||||
"dHkiQYLT5JMCOyo5L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lk",
|
||||
"fS9pbnRlZ3JhdGlvbnMvbXlkZXZpY2VzEq4BChpDcmVhdGVMb3JhQ2xvdWRJ",
|
||||
"bnRlZ3JhdGlvbhImLmFwaS5DcmVhdGVMb3JhQ2xvdWRJbnRlZ3JhdGlvblJl",
|
||||
"cXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiUILT5JMCSiJFL2FwaS9h",
|
||||
"cHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRl",
|
||||
"Z3JhdGlvbnMvbG9yYWNsb3VkOgEqEqcBChdHZXRMb3JhQ2xvdWRJbnRlZ3Jh",
|
||||
"dGlvbhIjLmFwaS5HZXRMb3JhQ2xvdWRJbnRlZ3JhdGlvblJlcXVlc3QaJC5h",
|
||||
"cGkuR2V0TG9yYUNsb3VkSW50ZWdyYXRpb25SZXNwb25zZSJBgtPkkwI7Ejkv",
|
||||
"YXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9u",
|
||||
"cy9sb3JhY2xvdWQSrgEKGlVwZGF0ZUxvcmFDbG91ZEludGVncmF0aW9uEiYu",
|
||||
"YXBpLlVwZGF0ZUxvcmFDbG91ZEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2ds",
|
||||
"ZS5wcm90b2J1Zi5FbXB0eSJQgtPkkwJKGkUvYXBpL2FwcGxpY2F0aW9ucy97",
|
||||
"aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9sb3Jh",
|
||||
"Y2xvdWQ6ASoSnwEKGkRlbGV0ZUxvcmFDbG91ZEludGVncmF0aW9uEiYuYXBp",
|
||||
"LkRlbGV0ZUxvcmFDbG91ZEludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5w",
|
||||
"cm90b2J1Zi5FbXB0eSJBgtPkkwI7KjkvYXBpL2FwcGxpY2F0aW9ucy97YXBw",
|
||||
"bGljYXRpb25faWR9L2ludGVncmF0aW9ucy9sb3JhY2xvdWQSsAEKGkNyZWF0",
|
||||
"ZUdjcFB1YlN1YkludGVncmF0aW9uEiYuYXBpLkNyZWF0ZUdjcFB1YlN1Yklu",
|
||||
"dGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPk",
|
||||
"kwJMIkcvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRp",
|
||||
"b25faWR9L2ludGVncmF0aW9ucy9nY3AtcHViLXN1YjoBKhKpAQoXR2V0R2Nw",
|
||||
"UHViU3ViSW50ZWdyYXRpb24SIy5hcGkuR2V0R2NwUHViU3ViSW50ZWdyYXRp",
|
||||
"b25SZXF1ZXN0GiQuYXBpLkdldEdjcFB1YlN1YkludGVncmF0aW9uUmVzcG9u",
|
||||
"c2UiQ4LT5JMCPRI7L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lk",
|
||||
"fS9pbnRlZ3JhdGlvbnMvZ2NwLXB1Yi1zdWISsAEKGlVwZGF0ZUdjcFB1YlN1",
|
||||
"YkludGVncmF0aW9uEiYuYXBpLlVwZGF0ZUdjcFB1YlN1YkludGVncmF0aW9u",
|
||||
"UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJSgtPkkwJMGkcvYXBp",
|
||||
"cy9henVyZS1zZXJ2aWNlLWJ1cxLCAQogVXBkYXRlQXp1cmVTZXJ2aWNlQnVz",
|
||||
"SW50ZWdyYXRpb24SLC5hcGkuVXBkYXRlQXp1cmVTZXJ2aWNlQnVzSW50ZWdy",
|
||||
"YXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IliC0+STAlIa",
|
||||
"TS9hcGkvYXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9p",
|
||||
"ZH0vaW50ZWdyYXRpb25zL2F6dXJlLXNlcnZpY2UtYnVzOgEqErMBCiBEZWxl",
|
||||
"dGVBenVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbhIsLmFwaS5EZWxldGVBenVy",
|
||||
"ZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9i",
|
||||
"dWYuRW1wdHkiSYLT5JMCQypBL2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0",
|
||||
"aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXp1cmUtc2VydmljZS1idXMStQEKHENy",
|
||||
"ZWF0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb24SKC5hcGkuQ3JlYXRlUGlsb3RU",
|
||||
"aGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1w",
|
||||
"dHkiU4LT5JMCTSJIL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFw",
|
||||
"cGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3QtdGhpbmdzOgEqErAB",
|
||||
"ChlHZXRQaWxvdFRoaW5nc0ludGVncmF0aW9uEiUuYXBpLkdldFBpbG90VGhp",
|
||||
"bmdzSW50ZWdyYXRpb25SZXF1ZXN0GiYuYXBpLkdldFBpbG90VGhpbmdzSW50",
|
||||
"ZWdyYXRpb25SZXNwb25zZSJEgtPkkwI+EjwvYXBpL2FwcGxpY2F0aW9ucy97",
|
||||
"YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9waWxvdC10aGluZ3MStQEK",
|
||||
"HFVwZGF0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb24SKC5hcGkuVXBkYXRlUGls",
|
||||
"b3RUaGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYu",
|
||||
"RW1wdHkiU4LT5JMCTRpIL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9u",
|
||||
"LmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3QtdGhpbmdzOgEq",
|
||||
"EqYBChxEZWxldGVQaWxvdFRoaW5nc0ludGVncmF0aW9uEiguYXBpLkRlbGV0",
|
||||
"ZVBpbG90VGhpbmdzSW50ZWdyYXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3Rv",
|
||||
"YnVmLkVtcHR5IkSC0+STAj4qPC9hcGkvYXBwbGljYXRpb25zL3thcHBsaWNh",
|
||||
"dGlvbl9pZH0vaW50ZWdyYXRpb25zL3BpbG90LXRoaW5ncxKiAQoWQ3JlYXRl",
|
||||
"SWZ0dHRJbnRlZ3JhdGlvbhIiLmFwaS5DcmVhdGVJZnR0dEludGVncmF0aW9u",
|
||||
"UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJMgtPkkwJGIkEvYXBp",
|
||||
"L2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9L2lu",
|
||||
"dGVncmF0aW9ucy9nY3AtcHViLXN1YjoBKhKhAQoaRGVsZXRlR2NwUHViU3Vi",
|
||||
"SW50ZWdyYXRpb24SJi5hcGkuRGVsZXRlR2NwUHViU3ViSW50ZWdyYXRpb25S",
|
||||
"ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkOC0+STAj0qOy9hcGkv",
|
||||
"YXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL2dj",
|
||||
"cC1wdWItc3ViEqYBChdDcmVhdGVBd3NTbnNJbnRlZ3JhdGlvbhIjLmFwaS5D",
|
||||
"cmVhdGVBd3NTbnNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9i",
|
||||
"dWYuRW1wdHkiToLT5JMCSCJDL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0",
|
||||
"aW9uLmFwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXdzLXNuczoBKhKc",
|
||||
"AQoUR2V0QXdzU25zSW50ZWdyYXRpb24SIC5hcGkuR2V0QXdzU25zSW50ZWdy",
|
||||
"YXRpb25SZXF1ZXN0GiEuYXBpLkdldEF3c1Nuc0ludGVncmF0aW9uUmVzcG9u",
|
||||
"c2UiP4LT5JMCORI3L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0aW9uX2lk",
|
||||
"fS9pbnRlZ3JhdGlvbnMvYXdzLXNucxKmAQoXVXBkYXRlQXdzU25zSW50ZWdy",
|
||||
"YXRpb24SIy5hcGkuVXBkYXRlQXdzU25zSW50ZWdyYXRpb25SZXF1ZXN0GhYu",
|
||||
"Z29vZ2xlLnByb3RvYnVmLkVtcHR5Ik6C0+STAkgaQy9hcGkvYXBwbGljYXRp",
|
||||
"b25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25z",
|
||||
"L2F3cy1zbnM6ASoSlwEKF0RlbGV0ZUF3c1Nuc0ludGVncmF0aW9uEiMuYXBp",
|
||||
"LkRlbGV0ZUF3c1Nuc0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90",
|
||||
"b2J1Zi5FbXB0eSI/gtPkkwI5KjcvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGlj",
|
||||
"YXRpb25faWR9L2ludGVncmF0aW9ucy9hd3Mtc25zEsIBCiBDcmVhdGVBenVy",
|
||||
"ZVNlcnZpY2VCdXNJbnRlZ3JhdGlvbhIsLmFwaS5DcmVhdGVBenVyZVNlcnZp",
|
||||
"Y2VCdXNJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1w",
|
||||
"dHkiWILT5JMCUiJNL2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFw",
|
||||
"cGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvYXp1cmUtc2VydmljZS1idXM6",
|
||||
"ASoSwQEKHUdldEF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uEikuYXBpLkdl",
|
||||
"dEF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uUmVxdWVzdBoqLmFwaS5HZXRB",
|
||||
"enVyZVNlcnZpY2VCdXNJbnRlZ3JhdGlvblJlc3BvbnNlIkmC0+STAkMSQS9h",
|
||||
"cGkvYXBwbGljYXRpb25zL3thcHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25z",
|
||||
"L2F6dXJlLXNlcnZpY2UtYnVzEsIBCiBVcGRhdGVBenVyZVNlcnZpY2VCdXNJ",
|
||||
"bnRlZ3JhdGlvbhIsLmFwaS5VcGRhdGVBenVyZVNlcnZpY2VCdXNJbnRlZ3Jh",
|
||||
"dGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiWILT5JMCUhpN",
|
||||
"dGVncmF0aW9ucy9pZnR0dDoBKhKXAQoTR2V0SWZ0dHRJbnRlZ3JhdGlvbhIf",
|
||||
"LmFwaS5HZXRJZnR0dEludGVncmF0aW9uUmVxdWVzdBogLmFwaS5HZXRJZnR0",
|
||||
"dEludGVncmF0aW9uUmVzcG9uc2UiPYLT5JMCNxI1L2FwaS9hcHBsaWNhdGlv",
|
||||
"bnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaWZ0dHQSogEKFlVw",
|
||||
"ZGF0ZUlmdHR0SW50ZWdyYXRpb24SIi5hcGkuVXBkYXRlSWZ0dHRJbnRlZ3Jh",
|
||||
"dGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiTILT5JMCRhpB",
|
||||
"L2FwaS9hcHBsaWNhdGlvbnMve2ludGVncmF0aW9uLmFwcGxpY2F0aW9uX2lk",
|
||||
"fS9pbnRlZ3JhdGlvbnMvYXp1cmUtc2VydmljZS1idXM6ASoSswEKIERlbGV0",
|
||||
"ZUF6dXJlU2VydmljZUJ1c0ludGVncmF0aW9uEiwuYXBpLkRlbGV0ZUF6dXJl",
|
||||
"U2VydmljZUJ1c0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1",
|
||||
"Zi5FbXB0eSJJgtPkkwJDKkEvYXBpL2FwcGxpY2F0aW9ucy97YXBwbGljYXRp",
|
||||
"b25faWR9L2ludGVncmF0aW9ucy9henVyZS1zZXJ2aWNlLWJ1cxK1AQocQ3Jl",
|
||||
"YXRlUGlsb3RUaGluZ3NJbnRlZ3JhdGlvbhIoLmFwaS5DcmVhdGVQaWxvdFRo",
|
||||
"aW5nc0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0",
|
||||
"eSJTgtPkkwJNIkgvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBw",
|
||||
"bGljYXRpb25faWR9L2ludGVncmF0aW9ucy9waWxvdC10aGluZ3M6ASoSsAEK",
|
||||
"GUdldFBpbG90VGhpbmdzSW50ZWdyYXRpb24SJS5hcGkuR2V0UGlsb3RUaGlu",
|
||||
"Z3NJbnRlZ3JhdGlvblJlcXVlc3QaJi5hcGkuR2V0UGlsb3RUaGluZ3NJbnRl",
|
||||
"Z3JhdGlvblJlc3BvbnNlIkSC0+STAj4SPC9hcGkvYXBwbGljYXRpb25zL3th",
|
||||
"cHBsaWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL3BpbG90LXRoaW5ncxK1AQoc",
|
||||
"VXBkYXRlUGlsb3RUaGluZ3NJbnRlZ3JhdGlvbhIoLmFwaS5VcGRhdGVQaWxv",
|
||||
"dFRoaW5nc0ludGVncmF0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5F",
|
||||
"bXB0eSJTgtPkkwJNGkgvYXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24u",
|
||||
"YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9waWxvdC10aGluZ3M6ASoS",
|
||||
"pgEKHERlbGV0ZVBpbG90VGhpbmdzSW50ZWdyYXRpb24SKC5hcGkuRGVsZXRl",
|
||||
"UGlsb3RUaGluZ3NJbnRlZ3JhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9i",
|
||||
"dWYuRW1wdHkiRILT5JMCPio8L2FwaS9hcHBsaWNhdGlvbnMve2FwcGxpY2F0",
|
||||
"aW9uX2lkfS9pbnRlZ3JhdGlvbnMvcGlsb3QtdGhpbmdzEqIBChZDcmVhdGVJ",
|
||||
"ZnR0dEludGVncmF0aW9uEiIuYXBpLkNyZWF0ZUlmdHR0SW50ZWdyYXRpb25S",
|
||||
"ZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IkyC0+STAkYiQS9hcGkv",
|
||||
"YXBwbGljYXRpb25zL3tpbnRlZ3JhdGlvbi5hcHBsaWNhdGlvbl9pZH0vaW50",
|
||||
"ZWdyYXRpb25zL2lmdHR0OgEqEpcBChNHZXRJZnR0dEludGVncmF0aW9uEh8u",
|
||||
"YXBpLkdldElmdHR0SW50ZWdyYXRpb25SZXF1ZXN0GiAuYXBpLkdldElmdHR0",
|
||||
"SW50ZWdyYXRpb25SZXNwb25zZSI9gtPkkwI3EjUvYXBpL2FwcGxpY2F0aW9u",
|
||||
"cy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pZnR0dBKiAQoWVXBk",
|
||||
"YXRlSWZ0dHRJbnRlZ3JhdGlvbhIiLmFwaS5VcGRhdGVJZnR0dEludGVncmF0",
|
||||
"aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSJMgtPkkwJGGkEv",
|
||||
"YXBpL2FwcGxpY2F0aW9ucy97aW50ZWdyYXRpb24uYXBwbGljYXRpb25faWR9",
|
||||
"L2ludGVncmF0aW9ucy9pZnR0dDoBKhKTAQoWRGVsZXRlSWZ0dHRJbnRlZ3Jh",
|
||||
"dGlvbhIiLmFwaS5EZWxldGVJZnR0dEludGVncmF0aW9uUmVxdWVzdBoWLmdv",
|
||||
"b2dsZS5wcm90b2J1Zi5FbXB0eSI9gtPkkwI3KjUvYXBpL2FwcGxpY2F0aW9u",
|
||||
"cy97YXBwbGljYXRpb25faWR9L2ludGVncmF0aW9ucy9pZnR0dBLhAQooR2Vu",
|
||||
"ZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZpY2F0ZRI0LmFwaS5H",
|
||||
"ZW5lcmF0ZU1xdHRJbnRlZ3JhdGlvbkNsaWVudENlcnRpZmljYXRlUmVxdWVz",
|
||||
"dBo1LmFwaS5HZW5lcmF0ZU1xdHRJbnRlZ3JhdGlvbkNsaWVudENlcnRpZmlj",
|
||||
"YXRlUmVzcG9uc2UiSILT5JMCQiJAL2FwaS9hcHBsaWNhdGlvbnMve2FwcGxp",
|
||||
"Y2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvbXF0dC9jZXJ0aWZpY2F0ZUJoChFp",
|
||||
"by5jaGlycHN0YWNrLmFwaUIQQXBwbGljYXRpb25Qcm90b1ABWi5naXRodWIu",
|
||||
"Y29tL2NoaXJwc3RhY2svY2hpcnBzdGFjay9hcGkvZ28vdjQvYXBpqgIOQ2hp",
|
||||
"cnBzdGFjay5BcGliBnByb3RvMw=="));
|
||||
"fS9pbnRlZ3JhdGlvbnMvaWZ0dHQ6ASoSkwEKFkRlbGV0ZUlmdHR0SW50ZWdy",
|
||||
"YXRpb24SIi5hcGkuRGVsZXRlSWZ0dHRJbnRlZ3JhdGlvblJlcXVlc3QaFi5n",
|
||||
"b29nbGUucHJvdG9idWYuRW1wdHkiPYLT5JMCNyo1L2FwaS9hcHBsaWNhdGlv",
|
||||
"bnMve2FwcGxpY2F0aW9uX2lkfS9pbnRlZ3JhdGlvbnMvaWZ0dHQS4QEKKEdl",
|
||||
"bmVyYXRlTXF0dEludGVncmF0aW9uQ2xpZW50Q2VydGlmaWNhdGUSNC5hcGku",
|
||||
"R2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZpY2F0ZVJlcXVl",
|
||||
"c3QaNS5hcGkuR2VuZXJhdGVNcXR0SW50ZWdyYXRpb25DbGllbnRDZXJ0aWZp",
|
||||
"Y2F0ZVJlc3BvbnNlIkiC0+STAkIiQC9hcGkvYXBwbGljYXRpb25zL3thcHBs",
|
||||
"aWNhdGlvbl9pZH0vaW50ZWdyYXRpb25zL21xdHQvY2VydGlmaWNhdGVCaAoR",
|
||||
"aW8uY2hpcnBzdGFjay5hcGlCEEFwcGxpY2F0aW9uUHJvdG9QAVouZ2l0aHVi",
|
||||
"LmNvbS9jaGlycHN0YWNrL2NoaXJwc3RhY2svYXBpL2dvL3Y0L2FwaaoCDkNo",
|
||||
"aXJwc3RhY2suQXBpYgZwcm90bzM="));
|
||||
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
|
||||
new pbr::FileDescriptor[] { global::Google.Api.AnnotationsReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.EmptyReflection.Descriptor, },
|
||||
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Chirpstack.Api.Encoding), typeof(global::Chirpstack.Api.IntegrationKind), typeof(global::Chirpstack.Api.InfluxDbPrecision), typeof(global::Chirpstack.Api.InfluxDbVersion), }, null, new pbr::GeneratedClrTypeInfo[] {
|
||||
@ -432,7 +433,7 @@ namespace Chirpstack.Api {
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetPilotThingsIntegrationResponse), global::Chirpstack.Api.GetPilotThingsIntegrationResponse.Parser, new[]{ "Integration" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.UpdatePilotThingsIntegrationRequest), global::Chirpstack.Api.UpdatePilotThingsIntegrationRequest.Parser, new[]{ "Integration" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.DeletePilotThingsIntegrationRequest), global::Chirpstack.Api.DeletePilotThingsIntegrationRequest.Parser, new[]{ "ApplicationId" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.IftttIntegration), global::Chirpstack.Api.IftttIntegration.Parser, new[]{ "ApplicationId", "Key", "UplinkValues" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.IftttIntegration), global::Chirpstack.Api.IftttIntegration.Parser, new[]{ "ApplicationId", "Key", "UplinkValues", "ArbitraryJson", "EventPrefix" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.CreateIftttIntegrationRequest), global::Chirpstack.Api.CreateIftttIntegrationRequest.Parser, new[]{ "Integration" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetIftttIntegrationRequest), global::Chirpstack.Api.GetIftttIntegrationRequest.Parser, new[]{ "ApplicationId" }, null, null, null, null),
|
||||
new pbr::GeneratedClrTypeInfo(typeof(global::Chirpstack.Api.GetIftttIntegrationResponse), global::Chirpstack.Api.GetIftttIntegrationResponse.Parser, new[]{ "Integration" }, null, null, null, null),
|
||||
@ -6136,7 +6137,7 @@ namespace Chirpstack.Api {
|
||||
public const int IntegrationFieldNumber = 1;
|
||||
private global::Chirpstack.Api.InfluxDbIntegration integration_;
|
||||
/// <summary>
|
||||
/// Integration object to update.
|
||||
/// Integration object to update.
|
||||
/// </summary>
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||
@ -10997,7 +10998,8 @@ namespace Chirpstack.Api {
|
||||
private string credentialsFile_ = "";
|
||||
/// <summary>
|
||||
/// Credentials file.
|
||||
/// This IAM service-account credentials file (JSON) must have the following Pub/Sub roles:
|
||||
/// This IAM service-account credentials file (JSON) must have the following
|
||||
/// Pub/Sub roles:
|
||||
/// * Pub/Sub Publisher
|
||||
/// </summary>
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||
@ -16231,6 +16233,8 @@ namespace Chirpstack.Api {
|
||||
applicationId_ = other.applicationId_;
|
||||
key_ = other.key_;
|
||||
uplinkValues_ = other.uplinkValues_.Clone();
|
||||
arbitraryJson_ = other.arbitraryJson_;
|
||||
eventPrefix_ = other.eventPrefix_;
|
||||
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
|
||||
}
|
||||
|
||||
@ -16287,7 +16291,8 @@ namespace Chirpstack.Api {
|
||||
/// You would specify the following fields:
|
||||
/// uplink_values = ["batteryLevel", "buttons_0_pressed"]
|
||||
///
|
||||
/// Note: The first value is always used for the DevEUI.
|
||||
/// Notes: The first value is always used for the DevEUI.
|
||||
/// Ignored if arbitrary_json is set to true.
|
||||
/// </summary>
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||
@ -16295,6 +16300,42 @@ namespace Chirpstack.Api {
|
||||
get { return uplinkValues_; }
|
||||
}
|
||||
|
||||
/// <summary>Field number for the "arbitrary_json" field.</summary>
|
||||
public const int ArbitraryJsonFieldNumber = 4;
|
||||
private bool arbitraryJson_;
|
||||
/// <summary>
|
||||
/// Arbitrary JSON.
|
||||
/// If set to true, ChirpStack events will be sent as-is as arbitrary JSON
|
||||
/// payload. If set to false (default), the 3 JSON values format will be used.
|
||||
/// </summary>
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||
public bool ArbitraryJson {
|
||||
get { return arbitraryJson_; }
|
||||
set {
|
||||
arbitraryJson_ = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>Field number for the "event_prefix" field.</summary>
|
||||
public const int EventPrefixFieldNumber = 5;
|
||||
private string eventPrefix_ = "";
|
||||
/// <summary>
|
||||
/// Event prefix.
|
||||
/// If set, the event name will be PREFIX_EVENT. For example if event_prefix
|
||||
/// is set to weatherstation, and uplink event will be sent as
|
||||
/// weatherstation_up to the IFTTT webhook.
|
||||
/// Note: Only characters in the A-Z, a-z and 0-9 range are allowed.
|
||||
/// </summary>
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||
public string EventPrefix {
|
||||
get { return eventPrefix_; }
|
||||
set {
|
||||
eventPrefix_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||
public override bool Equals(object other) {
|
||||
@ -16313,6 +16354,8 @@ namespace Chirpstack.Api {
|
||||
if (ApplicationId != other.ApplicationId) return false;
|
||||
if (Key != other.Key) return false;
|
||||
if(!uplinkValues_.Equals(other.uplinkValues_)) return false;
|
||||
if (ArbitraryJson != other.ArbitraryJson) return false;
|
||||
if (EventPrefix != other.EventPrefix) return false;
|
||||
return Equals(_unknownFields, other._unknownFields);
|
||||
}
|
||||
|
||||
@ -16323,6 +16366,8 @@ namespace Chirpstack.Api {
|
||||
if (ApplicationId.Length != 0) hash ^= ApplicationId.GetHashCode();
|
||||
if (Key.Length != 0) hash ^= Key.GetHashCode();
|
||||
hash ^= uplinkValues_.GetHashCode();
|
||||
if (ArbitraryJson != false) hash ^= ArbitraryJson.GetHashCode();
|
||||
if (EventPrefix.Length != 0) hash ^= EventPrefix.GetHashCode();
|
||||
if (_unknownFields != null) {
|
||||
hash ^= _unknownFields.GetHashCode();
|
||||
}
|
||||
@ -16350,6 +16395,14 @@ namespace Chirpstack.Api {
|
||||
output.WriteString(Key);
|
||||
}
|
||||
uplinkValues_.WriteTo(output, _repeated_uplinkValues_codec);
|
||||
if (ArbitraryJson != false) {
|
||||
output.WriteRawTag(32);
|
||||
output.WriteBool(ArbitraryJson);
|
||||
}
|
||||
if (EventPrefix.Length != 0) {
|
||||
output.WriteRawTag(42);
|
||||
output.WriteString(EventPrefix);
|
||||
}
|
||||
if (_unknownFields != null) {
|
||||
_unknownFields.WriteTo(output);
|
||||
}
|
||||
@ -16369,6 +16422,14 @@ namespace Chirpstack.Api {
|
||||
output.WriteString(Key);
|
||||
}
|
||||
uplinkValues_.WriteTo(ref output, _repeated_uplinkValues_codec);
|
||||
if (ArbitraryJson != false) {
|
||||
output.WriteRawTag(32);
|
||||
output.WriteBool(ArbitraryJson);
|
||||
}
|
||||
if (EventPrefix.Length != 0) {
|
||||
output.WriteRawTag(42);
|
||||
output.WriteString(EventPrefix);
|
||||
}
|
||||
if (_unknownFields != null) {
|
||||
_unknownFields.WriteTo(ref output);
|
||||
}
|
||||
@ -16386,6 +16447,12 @@ namespace Chirpstack.Api {
|
||||
size += 1 + pb::CodedOutputStream.ComputeStringSize(Key);
|
||||
}
|
||||
size += uplinkValues_.CalculateSize(_repeated_uplinkValues_codec);
|
||||
if (ArbitraryJson != false) {
|
||||
size += 1 + 1;
|
||||
}
|
||||
if (EventPrefix.Length != 0) {
|
||||
size += 1 + pb::CodedOutputStream.ComputeStringSize(EventPrefix);
|
||||
}
|
||||
if (_unknownFields != null) {
|
||||
size += _unknownFields.CalculateSize();
|
||||
}
|
||||
@ -16405,6 +16472,12 @@ namespace Chirpstack.Api {
|
||||
Key = other.Key;
|
||||
}
|
||||
uplinkValues_.Add(other.uplinkValues_);
|
||||
if (other.ArbitraryJson != false) {
|
||||
ArbitraryJson = other.ArbitraryJson;
|
||||
}
|
||||
if (other.EventPrefix.Length != 0) {
|
||||
EventPrefix = other.EventPrefix;
|
||||
}
|
||||
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
|
||||
}
|
||||
|
||||
@ -16432,6 +16505,14 @@ namespace Chirpstack.Api {
|
||||
uplinkValues_.AddEntriesFrom(input, _repeated_uplinkValues_codec);
|
||||
break;
|
||||
}
|
||||
case 32: {
|
||||
ArbitraryJson = input.ReadBool();
|
||||
break;
|
||||
}
|
||||
case 42: {
|
||||
EventPrefix = input.ReadString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@ -16459,6 +16540,14 @@ namespace Chirpstack.Api {
|
||||
uplinkValues_.AddEntriesFrom(ref input, _repeated_uplinkValues_codec);
|
||||
break;
|
||||
}
|
||||
case 32: {
|
||||
ArbitraryJson = input.ReadBool();
|
||||
break;
|
||||
}
|
||||
case 42: {
|
||||
EventPrefix = input.ReadString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
3
api/csharp/Chirpstack/api/ApplicationGrpc.cs
vendored
3
api/csharp/Chirpstack/api/ApplicationGrpc.cs
vendored
@ -9,7 +9,8 @@ using grpc = global::Grpc.Core;
|
||||
|
||||
namespace Chirpstack.Api {
|
||||
/// <summary>
|
||||
/// ApplicationService is the service providing API methods for managing applications.
|
||||
/// ApplicationService is the service providing API methods for managing
|
||||
/// applications.
|
||||
/// </summary>
|
||||
public static partial class ApplicationService
|
||||
{
|
||||
|
1091
api/go/api/application.pb.go
vendored
1091
api/go/api/application.pb.go
vendored
File diff suppressed because it is too large
Load Diff
8
api/grpc-web/api/application_pb.d.ts
vendored
8
api/grpc-web/api/application_pb.d.ts
vendored
@ -1555,6 +1555,12 @@ export class IftttIntegration extends jspb.Message {
|
||||
clearUplinkValuesList(): IftttIntegration;
|
||||
addUplinkValues(value: string, index?: number): IftttIntegration;
|
||||
|
||||
getArbitraryJson(): boolean;
|
||||
setArbitraryJson(value: boolean): IftttIntegration;
|
||||
|
||||
getEventPrefix(): string;
|
||||
setEventPrefix(value: string): IftttIntegration;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): IftttIntegration.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: IftttIntegration): IftttIntegration.AsObject;
|
||||
@ -1568,6 +1574,8 @@ export namespace IftttIntegration {
|
||||
applicationId: string,
|
||||
key: string,
|
||||
uplinkValuesList: Array<string>,
|
||||
arbitraryJson: boolean,
|
||||
eventPrefix: string,
|
||||
}
|
||||
}
|
||||
|
||||
|
62
api/grpc-web/api/application_pb.js
vendored
62
api/grpc-web/api/application_pb.js
vendored
@ -13195,7 +13195,9 @@ proto.api.IftttIntegration.toObject = function(includeInstance, msg) {
|
||||
var f, obj = {
|
||||
applicationId: jspb.Message.getFieldWithDefault(msg, 1, ""),
|
||||
key: jspb.Message.getFieldWithDefault(msg, 2, ""),
|
||||
uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f
|
||||
uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,
|
||||
arbitraryJson: jspb.Message.getBooleanFieldWithDefault(msg, 4, false),
|
||||
eventPrefix: jspb.Message.getFieldWithDefault(msg, 5, "")
|
||||
};
|
||||
|
||||
if (includeInstance) {
|
||||
@ -13244,6 +13246,14 @@ proto.api.IftttIntegration.deserializeBinaryFromReader = function(msg, reader) {
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.addUplinkValues(value);
|
||||
break;
|
||||
case 4:
|
||||
var value = /** @type {boolean} */ (reader.readBool());
|
||||
msg.setArbitraryJson(value);
|
||||
break;
|
||||
case 5:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setEventPrefix(value);
|
||||
break;
|
||||
default:
|
||||
reader.skipField();
|
||||
break;
|
||||
@ -13294,6 +13304,20 @@ proto.api.IftttIntegration.serializeBinaryToWriter = function(message, writer) {
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getArbitraryJson();
|
||||
if (f) {
|
||||
writer.writeBool(
|
||||
4,
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getEventPrefix();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
5,
|
||||
f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -13370,6 +13394,42 @@ proto.api.IftttIntegration.prototype.clearUplinkValuesList = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional bool arbitrary_json = 4;
|
||||
* @return {boolean}
|
||||
*/
|
||||
proto.api.IftttIntegration.prototype.getArbitraryJson = function() {
|
||||
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {boolean} value
|
||||
* @return {!proto.api.IftttIntegration} returns this
|
||||
*/
|
||||
proto.api.IftttIntegration.prototype.setArbitraryJson = function(value) {
|
||||
return jspb.Message.setProto3BooleanField(this, 4, value);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string event_prefix = 5;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.IftttIntegration.prototype.getEventPrefix = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.IftttIntegration} returns this
|
||||
*/
|
||||
proto.api.IftttIntegration.prototype.setEventPrefix = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 5, value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
3
api/js/api/application_grpc_pb.js
vendored
3
api/js/api/application_grpc_pb.js
vendored
@ -701,7 +701,8 @@ function deserialize_google_protobuf_Empty(buffer_arg) {
|
||||
}
|
||||
|
||||
|
||||
// ApplicationService is the service providing API methods for managing applications.
|
||||
// ApplicationService is the service providing API methods for managing
|
||||
// applications.
|
||||
var ApplicationServiceService = exports.ApplicationServiceService = {
|
||||
// Create creates the given application.
|
||||
create: {
|
||||
|
8
api/js/api/application_pb.d.ts
vendored
8
api/js/api/application_pb.d.ts
vendored
@ -1691,6 +1691,12 @@ export class IftttIntegration extends jspb.Message {
|
||||
setUplinkValuesList(value: Array<string>): void;
|
||||
addUplinkValues(value: string, index?: number): string;
|
||||
|
||||
getArbitraryJson(): boolean;
|
||||
setArbitraryJson(value: boolean): void;
|
||||
|
||||
getEventPrefix(): string;
|
||||
setEventPrefix(value: string): void;
|
||||
|
||||
serializeBinary(): Uint8Array;
|
||||
toObject(includeInstance?: boolean): IftttIntegration.AsObject;
|
||||
static toObject(includeInstance: boolean, msg: IftttIntegration): IftttIntegration.AsObject;
|
||||
@ -1706,6 +1712,8 @@ export namespace IftttIntegration {
|
||||
applicationId: string,
|
||||
key: string,
|
||||
uplinkValuesList: Array<string>,
|
||||
arbitraryJson: boolean,
|
||||
eventPrefix: string,
|
||||
}
|
||||
}
|
||||
|
||||
|
62
api/js/api/application_pb.js
vendored
62
api/js/api/application_pb.js
vendored
@ -13195,7 +13195,9 @@ proto.api.IftttIntegration.toObject = function(includeInstance, msg) {
|
||||
var f, obj = {
|
||||
applicationId: jspb.Message.getFieldWithDefault(msg, 1, ""),
|
||||
key: jspb.Message.getFieldWithDefault(msg, 2, ""),
|
||||
uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f
|
||||
uplinkValuesList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,
|
||||
arbitraryJson: jspb.Message.getBooleanFieldWithDefault(msg, 4, false),
|
||||
eventPrefix: jspb.Message.getFieldWithDefault(msg, 5, "")
|
||||
};
|
||||
|
||||
if (includeInstance) {
|
||||
@ -13244,6 +13246,14 @@ proto.api.IftttIntegration.deserializeBinaryFromReader = function(msg, reader) {
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.addUplinkValues(value);
|
||||
break;
|
||||
case 4:
|
||||
var value = /** @type {boolean} */ (reader.readBool());
|
||||
msg.setArbitraryJson(value);
|
||||
break;
|
||||
case 5:
|
||||
var value = /** @type {string} */ (reader.readString());
|
||||
msg.setEventPrefix(value);
|
||||
break;
|
||||
default:
|
||||
reader.skipField();
|
||||
break;
|
||||
@ -13294,6 +13304,20 @@ proto.api.IftttIntegration.serializeBinaryToWriter = function(message, writer) {
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getArbitraryJson();
|
||||
if (f) {
|
||||
writer.writeBool(
|
||||
4,
|
||||
f
|
||||
);
|
||||
}
|
||||
f = message.getEventPrefix();
|
||||
if (f.length > 0) {
|
||||
writer.writeString(
|
||||
5,
|
||||
f
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -13370,6 +13394,42 @@ proto.api.IftttIntegration.prototype.clearUplinkValuesList = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional bool arbitrary_json = 4;
|
||||
* @return {boolean}
|
||||
*/
|
||||
proto.api.IftttIntegration.prototype.getArbitraryJson = function() {
|
||||
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {boolean} value
|
||||
* @return {!proto.api.IftttIntegration} returns this
|
||||
*/
|
||||
proto.api.IftttIntegration.prototype.setArbitraryJson = function(value) {
|
||||
return jspb.Message.setProto3BooleanField(this, 4, value);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* optional string event_prefix = 5;
|
||||
* @return {string}
|
||||
*/
|
||||
proto.api.IftttIntegration.prototype.getEventPrefix = function() {
|
||||
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* @return {!proto.api.IftttIntegration} returns this
|
||||
*/
|
||||
proto.api.IftttIntegration.prototype.setEventPrefix = function(value) {
|
||||
return jspb.Message.setProto3StringField(this, 5, value);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
7
api/md/api/api.md
vendored
7
api/md/api/api.md
vendored
@ -1108,7 +1108,9 @@
|
||||
| key | [string](#string) | | Key. This key can be obtained from the IFTTT Webhooks documentation page. |
|
||||
| uplink_values | [string](#string) | repeated | Values. Up to 2 values can be forwarded to IFTTT. These values must map to the decoded payload keys. For example: { "batteryLevel": 75.3, "buttons": [{"pressed": false}, {"pressed": true}] } You would specify the following fields: uplink_values = ["batteryLevel", "buttons_0_pressed"]
|
||||
|
||||
Note: The first value is always used for the DevEUI. |
|
||||
Notes: The first value is always used for the DevEUI. Ignored if arbitrary_json is set to true. |
|
||||
| arbitrary_json | [bool](#bool) | | Arbitrary JSON. If set to true, ChirpStack events will be sent as-is as arbitrary JSON payload. If set to false (default), the 3 JSON values format will be used. |
|
||||
| event_prefix | [string](#string) | | Event prefix. If set, the event name will be PREFIX_EVENT. For example if event_prefix is set to weatherstation, and uplink event will be sent as weatherstation_up to the IFTTT webhook. Note: Only characters in the A-Z, a-z and 0-9 range are allowed. |
|
||||
|
||||
|
||||
|
||||
@ -1549,7 +1551,8 @@ Note: The first value is always used for the DevEUI. |
|
||||
<a name="api-ApplicationService"></a>
|
||||
|
||||
### ApplicationService
|
||||
ApplicationService is the service providing API methods for managing applications.
|
||||
ApplicationService is the service providing API methods for managing
|
||||
applications.
|
||||
|
||||
| Method Name | Request Type | Response Type | Description |
|
||||
| ----------- | ------------ | ------------- | ------------|
|
||||
|
1379
api/proto/api/application.proto
vendored
1379
api/proto/api/application.proto
vendored
File diff suppressed because it is too large
Load Diff
1379
api/python/proto/chirpstack-api/api/application.proto
vendored
1379
api/python/proto/chirpstack-api/api/application.proto
vendored
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -412,14 +412,18 @@ class HttpIntegration(_message.Message):
|
||||
def __init__(self, application_id: _Optional[str] = ..., headers: _Optional[_Mapping[str, str]] = ..., encoding: _Optional[_Union[Encoding, str]] = ..., event_endpoint_url: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class IftttIntegration(_message.Message):
|
||||
__slots__ = ["application_id", "key", "uplink_values"]
|
||||
__slots__ = ["application_id", "arbitrary_json", "event_prefix", "key", "uplink_values"]
|
||||
APPLICATION_ID_FIELD_NUMBER: _ClassVar[int]
|
||||
ARBITRARY_JSON_FIELD_NUMBER: _ClassVar[int]
|
||||
EVENT_PREFIX_FIELD_NUMBER: _ClassVar[int]
|
||||
KEY_FIELD_NUMBER: _ClassVar[int]
|
||||
UPLINK_VALUES_FIELD_NUMBER: _ClassVar[int]
|
||||
application_id: str
|
||||
arbitrary_json: bool
|
||||
event_prefix: str
|
||||
key: str
|
||||
uplink_values: _containers.RepeatedScalarFieldContainer[str]
|
||||
def __init__(self, application_id: _Optional[str] = ..., key: _Optional[str] = ..., uplink_values: _Optional[_Iterable[str]] = ...) -> None: ...
|
||||
def __init__(self, application_id: _Optional[str] = ..., key: _Optional[str] = ..., uplink_values: _Optional[_Iterable[str]] = ..., arbitrary_json: bool = ..., event_prefix: _Optional[str] = ...) -> None: ...
|
||||
|
||||
class InfluxDbIntegration(_message.Message):
|
||||
__slots__ = ["application_id", "bucket", "db", "endpoint", "organization", "password", "precision", "retention_policy_name", "token", "username", "version"]
|
||||
|
@ -7,7 +7,8 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2
|
||||
|
||||
|
||||
class ApplicationServiceStub(object):
|
||||
"""ApplicationService is the service providing API methods for managing applications.
|
||||
"""ApplicationService is the service providing API methods for managing
|
||||
applications.
|
||||
"""
|
||||
|
||||
def __init__(self, channel):
|
||||
@ -254,7 +255,8 @@ class ApplicationServiceStub(object):
|
||||
|
||||
|
||||
class ApplicationServiceServicer(object):
|
||||
"""ApplicationService is the service providing API methods for managing applications.
|
||||
"""ApplicationService is the service providing API methods for managing
|
||||
applications.
|
||||
"""
|
||||
|
||||
def Create(self, request, context):
|
||||
@ -832,7 +834,8 @@ def add_ApplicationServiceServicer_to_server(servicer, server):
|
||||
|
||||
# This class is part of an EXPERIMENTAL API.
|
||||
class ApplicationService(object):
|
||||
"""ApplicationService is the service providing API methods for managing applications.
|
||||
"""ApplicationService is the service providing API methods for managing
|
||||
applications.
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
|
1379
api/rust/proto/chirpstack/api/application.proto
vendored
1379
api/rust/proto/chirpstack/api/application.proto
vendored
File diff suppressed because it is too large
Load Diff
@ -1716,6 +1716,16 @@ impl ApplicationService for Application {
|
||||
)
|
||||
.await?;
|
||||
|
||||
if !req_int.event_prefix.is_empty()
|
||||
&& !regex::Regex::new(r"^[a-zA-Z0-9]+$")
|
||||
.unwrap()
|
||||
.is_match(&req_int.event_prefix)
|
||||
{
|
||||
return Err(Status::invalid_argument(
|
||||
"event_prefix may only contain A-Z, a-z and 0-9 characters",
|
||||
));
|
||||
}
|
||||
|
||||
let _ = application::create_integration(application::Integration {
|
||||
application_id: app_id,
|
||||
kind: application::IntegrationKind::Ifttt,
|
||||
@ -1726,6 +1736,8 @@ impl ApplicationService for Application {
|
||||
req_int.uplink_values.get(0).cloned().unwrap_or_default(),
|
||||
req_int.uplink_values.get(1).cloned().unwrap_or_default(),
|
||||
],
|
||||
arbitrary_json: req_int.arbitrary_json,
|
||||
event_prefix: req_int.event_prefix.clone(),
|
||||
},
|
||||
),
|
||||
..Default::default()
|
||||
@ -1766,6 +1778,8 @@ impl ApplicationService for Application {
|
||||
application_id: app_id.to_string(),
|
||||
key: conf.key.clone(),
|
||||
uplink_values: conf.uplink_values.to_vec(),
|
||||
arbitrary_json: conf.arbitrary_json,
|
||||
event_prefix: conf.event_prefix.clone(),
|
||||
}),
|
||||
});
|
||||
resp.metadata_mut()
|
||||
@ -1806,6 +1820,8 @@ impl ApplicationService for Application {
|
||||
req_int.uplink_values.get(0).cloned().unwrap_or_default(),
|
||||
req_int.uplink_values.get(1).cloned().unwrap_or_default(),
|
||||
],
|
||||
arbitrary_json: req_int.arbitrary_json,
|
||||
event_prefix: req_int.event_prefix.clone(),
|
||||
},
|
||||
),
|
||||
..Default::default()
|
||||
@ -3353,6 +3369,8 @@ pub mod test {
|
||||
application_id: app.id.to_string(),
|
||||
key: "verysecret".into(),
|
||||
uplink_values: vec!["value_1".into(), "value_2".into()],
|
||||
arbitrary_json: false,
|
||||
event_prefix: "foo".to_string(),
|
||||
}),
|
||||
},
|
||||
);
|
||||
@ -3372,6 +3390,8 @@ pub mod test {
|
||||
application_id: app.id.to_string(),
|
||||
key: "verysecret".into(),
|
||||
uplink_values: vec!["value_1".into(), "value_2".into()],
|
||||
arbitrary_json: false,
|
||||
event_prefix: "foo".to_string(),
|
||||
}),
|
||||
get_resp.integration
|
||||
);
|
||||
@ -3384,6 +3404,8 @@ pub mod test {
|
||||
application_id: app.id.to_string(),
|
||||
key: "verysecrettoo".into(),
|
||||
uplink_values: vec!["value_4".into(), "value_5".into()],
|
||||
arbitrary_json: true,
|
||||
event_prefix: "bar".to_string(),
|
||||
}),
|
||||
},
|
||||
);
|
||||
@ -3403,6 +3425,8 @@ pub mod test {
|
||||
application_id: app.id.to_string(),
|
||||
key: "verysecrettoo".into(),
|
||||
uplink_values: vec!["value_4".into(), "value_5".into()],
|
||||
arbitrary_json: true,
|
||||
event_prefix: "bar".to_string(),
|
||||
}),
|
||||
get_resp.integration
|
||||
);
|
||||
|
@ -27,6 +27,8 @@ pub struct Integration {
|
||||
key: String,
|
||||
uplink_values: [String; 2],
|
||||
server: String,
|
||||
arbitrary_json: bool,
|
||||
event_prefix: String,
|
||||
}
|
||||
|
||||
impl Integration {
|
||||
@ -37,11 +39,30 @@ impl Integration {
|
||||
key: conf.key.clone(),
|
||||
uplink_values: conf.uplink_values.clone(),
|
||||
server: "https://maker.ifttt.com".to_string(),
|
||||
arbitrary_json: conf.arbitrary_json,
|
||||
event_prefix: conf.event_prefix.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
async fn post(&self, event: &str, v: Values) -> Result<()> {
|
||||
let url = format!("{}/trigger/{}/with/key/{}", self.server, event, self.key);
|
||||
async fn post<T>(&self, event: &str, v: &T) -> Result<()>
|
||||
where
|
||||
T: Serialize,
|
||||
{
|
||||
let event = if self.event_prefix.is_empty() {
|
||||
event.to_string()
|
||||
} else {
|
||||
format!("{}_{}", self.event_prefix, event)
|
||||
};
|
||||
|
||||
let url = if self.arbitrary_json {
|
||||
format!(
|
||||
"{}/trigger/{}/json/with/key/{}",
|
||||
self.server, event, self.key
|
||||
)
|
||||
} else {
|
||||
format!("{}/trigger/{}/with/key/{}", self.server, event, self.key)
|
||||
};
|
||||
|
||||
let client = Client::builder().timeout(Duration::from_secs(5)).build()?;
|
||||
let mut headers = HeaderMap::new();
|
||||
headers.insert(CONTENT_TYPE, "application/json".parse().unwrap());
|
||||
@ -65,6 +86,10 @@ impl IntegrationTrait for Integration {
|
||||
_vars: &HashMap<String, String>,
|
||||
pl: &integration::UplinkEvent,
|
||||
) -> Result<()> {
|
||||
if self.arbitrary_json {
|
||||
return self.post("up", pl).await;
|
||||
}
|
||||
|
||||
let data_measurements: HashMap<String, pbjson_types::value::Kind> = match &pl.object {
|
||||
None => {
|
||||
trace!("object is None, nothing to send");
|
||||
@ -91,7 +116,7 @@ impl IntegrationTrait for Integration {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
self.post("up", v).await
|
||||
self.post("up", &v).await
|
||||
}
|
||||
|
||||
async fn join_event(
|
||||
@ -170,13 +195,15 @@ pub mod test {
|
||||
use httpmock::prelude::*;
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_ifttt() {
|
||||
async fn test_ifttt_no_prefix() {
|
||||
let server = MockServer::start();
|
||||
|
||||
let i = Integration {
|
||||
key: "verysecret".into(),
|
||||
uplink_values: ["temp".to_string(), "door_open".to_string()],
|
||||
server: server.url(""),
|
||||
arbitrary_json: false,
|
||||
event_prefix: "".into(),
|
||||
};
|
||||
|
||||
// uplink event
|
||||
@ -228,4 +255,121 @@ pub mod test {
|
||||
mock.assert();
|
||||
mock.delete();
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_ifttt_prefix() {
|
||||
let server = MockServer::start();
|
||||
|
||||
let i = Integration {
|
||||
key: "verysecret".into(),
|
||||
uplink_values: ["temp".to_string(), "door_open".to_string()],
|
||||
server: server.url(""),
|
||||
arbitrary_json: false,
|
||||
event_prefix: "weatherstation".into(),
|
||||
};
|
||||
|
||||
// uplink event
|
||||
let pl = integration::UplinkEvent {
|
||||
device_info: Some(integration::DeviceInfo {
|
||||
dev_eui: "0102030405060708".to_string(),
|
||||
..Default::default()
|
||||
}),
|
||||
object: Some(pbjson_types::Struct {
|
||||
fields: [
|
||||
(
|
||||
"temp".to_string(),
|
||||
pbjson_types::Value {
|
||||
kind: Some(pbjson_types::value::Kind::NumberValue(23.5)),
|
||||
},
|
||||
),
|
||||
(
|
||||
"door_open".to_string(),
|
||||
pbjson_types::Value {
|
||||
kind: Some(pbjson_types::value::Kind::StringValue(
|
||||
"closed".to_string(),
|
||||
)),
|
||||
},
|
||||
),
|
||||
]
|
||||
.iter()
|
||||
.cloned()
|
||||
.collect(),
|
||||
}),
|
||||
..Default::default()
|
||||
};
|
||||
let mut mock = server.mock(|when, then| {
|
||||
when.method(POST)
|
||||
.path("/trigger/weatherstation_up/with/key/verysecret")
|
||||
.header("Content-Type", "application/json")
|
||||
.body(
|
||||
serde_json::to_string(&Values {
|
||||
value1: "0102030405060708".to_string(),
|
||||
value2: "23.5".to_string(),
|
||||
value3: "closed".to_string(),
|
||||
})
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
then.status(200);
|
||||
});
|
||||
|
||||
i.uplink_event(&HashMap::new(), &pl).await.unwrap();
|
||||
mock.assert();
|
||||
mock.delete();
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_ifttt_arbitrary_json() {
|
||||
let server = MockServer::start();
|
||||
|
||||
let i = Integration {
|
||||
key: "verysecret".into(),
|
||||
uplink_values: ["temp".to_string(), "door_open".to_string()],
|
||||
server: server.url(""),
|
||||
arbitrary_json: true,
|
||||
event_prefix: "".into(),
|
||||
};
|
||||
|
||||
// uplink event
|
||||
let pl = integration::UplinkEvent {
|
||||
device_info: Some(integration::DeviceInfo {
|
||||
dev_eui: "0102030405060708".to_string(),
|
||||
..Default::default()
|
||||
}),
|
||||
object: Some(pbjson_types::Struct {
|
||||
fields: [
|
||||
(
|
||||
"temp".to_string(),
|
||||
pbjson_types::Value {
|
||||
kind: Some(pbjson_types::value::Kind::NumberValue(23.5)),
|
||||
},
|
||||
),
|
||||
(
|
||||
"door_open".to_string(),
|
||||
pbjson_types::Value {
|
||||
kind: Some(pbjson_types::value::Kind::StringValue(
|
||||
"closed".to_string(),
|
||||
)),
|
||||
},
|
||||
),
|
||||
]
|
||||
.iter()
|
||||
.cloned()
|
||||
.collect(),
|
||||
}),
|
||||
..Default::default()
|
||||
};
|
||||
let mut mock = server.mock(|when, then| {
|
||||
when.method(POST)
|
||||
.path("/trigger/up/json/with/key/verysecret")
|
||||
.header("Content-Type", "application/json")
|
||||
.body(serde_json::to_string(&pl).unwrap());
|
||||
|
||||
then.status(200);
|
||||
});
|
||||
|
||||
i.uplink_event(&HashMap::new(), &pl).await.unwrap();
|
||||
mock.assert();
|
||||
mock.delete();
|
||||
}
|
||||
}
|
||||
|
@ -252,10 +252,13 @@ pub struct PilotThingsConfiguration {
|
||||
pub token: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||
#[serde(default)]
|
||||
pub struct IftttConfiguration {
|
||||
pub key: String,
|
||||
pub uplink_values: [String; 2], // The first value is reserved for the DevEUI
|
||||
pub arbitrary_json: bool,
|
||||
pub event_prefix: String,
|
||||
}
|
||||
|
||||
#[derive(Clone, Queryable, Insertable, PartialEq, Eq, Debug)]
|
||||
|
@ -1,6 +1,6 @@
|
||||
import React, { Component } from "react";
|
||||
|
||||
import { Form, Input, AutoComplete, Button } from "antd";
|
||||
import { Form, Input, AutoComplete, Button, Row, Col, Switch } from "antd";
|
||||
|
||||
import { IftttIntegration } from "@chirpstack/chirpstack-api-grpc-web/api/application_pb";
|
||||
|
||||
@ -10,18 +10,46 @@ interface IProps {
|
||||
onFinish: (obj: IftttIntegration) => void;
|
||||
}
|
||||
|
||||
class IftttIntegrationForm extends Component<IProps> {
|
||||
interface IState {
|
||||
arbitraryJson: boolean;
|
||||
}
|
||||
|
||||
class IftttIntegrationForm extends Component<IProps, IState> {
|
||||
constructor(props: IProps) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
arbitraryJson: false,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const v = this.props.initialValues;
|
||||
|
||||
this.setState({
|
||||
arbitraryJson: v.getArbitraryJson(),
|
||||
});
|
||||
}
|
||||
|
||||
onFinish = (values: IftttIntegration.AsObject) => {
|
||||
const v = Object.assign(this.props.initialValues.toObject(), values);
|
||||
let i = new IftttIntegration();
|
||||
|
||||
i.setApplicationId(v.applicationId);
|
||||
i.setKey(v.key);
|
||||
i.setEventPrefix(v.eventPrefix);
|
||||
i.setArbitraryJson(v.arbitraryJson);
|
||||
i.setUplinkValuesList(v.uplinkValuesList);
|
||||
|
||||
this.props.onFinish(i);
|
||||
};
|
||||
|
||||
onArbitraryJsonChange = (checked: boolean) => {
|
||||
this.setState({
|
||||
arbitraryJson: checked,
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
const options: {
|
||||
value: string;
|
||||
@ -39,21 +67,45 @@ class IftttIntegrationForm extends Component<IProps> {
|
||||
>
|
||||
<Input.Password />
|
||||
</Form.Item>
|
||||
<Form.List name="uplinkValuesList">
|
||||
<Row gutter={24}>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="Event prefix"
|
||||
name="eventPrefix"
|
||||
rules={[{ pattern: /[A-Za-z0-9]+/, message: "Only use A-Z, a-z and 0-9 characters" }]}
|
||||
tooltip="The prefix will be added to the Webhook event, e.g. if set an uplink will be published as PREFIX_up instead of up."
|
||||
>
|
||||
<Input />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label="Publish as arbitrary JSON"
|
||||
name="arbitraryJson"
|
||||
valuePropName="checked"
|
||||
tooltip="If enabled, the event payload will be published as-is (arbitrary JSON payload instead of 3 JSON values format)."
|
||||
>
|
||||
<Switch onChange={this.onArbitraryJsonChange} />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
</Row>
|
||||
{!this.state.arbitraryJson && <Form.List name="uplinkValuesList">
|
||||
{fields => (
|
||||
<div>
|
||||
<Row gutter={24}>
|
||||
{fields.map((field, i) => (
|
||||
<Form.Item
|
||||
label={`Value ${i + 1} key`}
|
||||
{...field}
|
||||
tooltip="This must match the key in the decoded uplink payload. Nested keys are joined with a '_', array elements are indexed (starting at zero), e.g. 'sensor_0', 'sensor_1'. Auto-completion is based on measurements configuration in the device-profile(s) used within this application."
|
||||
>
|
||||
<AutoComplete options={options} />
|
||||
</Form.Item>
|
||||
<Col span={12}>
|
||||
<Form.Item
|
||||
label={`Value ${i + 1} key`}
|
||||
{...field}
|
||||
tooltip="This must match the key in the decoded uplink payload. Nested keys are joined with a '_', array elements are indexed (starting at zero), e.g. 'sensor_0', 'sensor_1'. Auto-completion is based on measurements configuration in the device-profile(s) used within this application."
|
||||
>
|
||||
<AutoComplete options={options} />
|
||||
</Form.Item>
|
||||
</Col>
|
||||
))}
|
||||
</div>
|
||||
</Row>
|
||||
)}
|
||||
</Form.List>
|
||||
</Form.List>}
|
||||
<Form.Item>
|
||||
<Button type="primary" htmlType="submit">
|
||||
Submit
|
||||
|
Loading…
x
Reference in New Issue
Block a user