Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Coap support #2

Open
michalboronski opened this issue May 4, 2020 · 1 comment
Open

Add Coap support #2

michalboronski opened this issue May 4, 2020 · 1 comment
Labels
enhancement New feature or request

Comments

@michalboronski
Copy link
Owner

No description provided.

@timbuktu-t
Copy link

timbuktu-t commented May 5, 2020

Hi @michalboronski,
below you find the requested debug log. I did not want to show my ip, device and product id on a public forum, so the log entries are anonymized. Since the actual flow might be hard to discern in the sample code, here´s what I found out so far:

Client and device start by synchronizing their message ids. The client sends a coap POST with the client message id to /sys/dev/sync, the device responds with the devicemessage id. A message id is a 32-bit, 8-hexdigit (uppercase) value and is probably used to detect packages that are received out of sequence (this is udp after all). The device seems to start with a random or time-based value, the client is free to chose whatever he wants.

Before each message is sent, the sender increments his message id, where 0xFFFFFFFF+1 simply wraps to 0x00000000. A message is a variable-length, hexdigit, uppercase string, consisting of the 8-digit message id, the encrypted content and a sha-256 checksum of both. Encryption is done using AES/CBC/PKCS7Padding (for Oracle/OpenJDK you have to use AES/CBC/PKCS5Padding though). For the encryption key an MD5 of the string "JiangPan" plus the hexadecimal message id (as UTF-8) is calculated and converted to 32 uppercase hexdigits (again, as UTF-8). The first 16 bytes is the encryption key, the second 16 bytes is the IV.

To receive status information, the client sends a coap OBSERVE to /sys/dev/status. The device will then continue to send status messages to the client for as long as the client acknowledges them (this happens automatically for Eclipse Californium). My AC3829/10 sends a status message every 1-3 seconds with longer pauses when udp packages need to be retransmitted, but this seems to vary between devices. Some people in the forum reported to receive only one status message during the ten seconds the sampe program runs. The device sends status messages even when powered off.

To issue a command to the device, the following string needs to be sent as a message using coap POST to /sys/dev/control:

{"state":{"desired":{"CommandType":"app","DeviceId":"DEVICEID","EnduserId":"USERID","CHANNEL":"STATE"}}}

where
DEVICEID is the DeviceId return from status observations
USERID does not really make a difference, one could e.g. use "OpenHAB"
CHANNEL is the channel whose state should be changed, e.g. "pwr" for power
STATE is the state to change to, e.g. "0" to power off the device

When the command failed the response is {"status":"failed"}.
When the command succeeded the response is {"status":"success"}.

I hope this helps. Good luck! :-)

2020-05-05 08:29:34,733 [main] INFO  philipsair.PhilipsAir - initializing
2020-05-05 08:29:34,741 [main] INFO  philipsair.PhilipsAir - synchronizing with coap://1.2.3.4:5683/sys/dev/sync
2020-05-05 08:29:34,763 [main] INFO  org.eclipse.californium.core.network.config.NetworkConfig - loading properties from file C:\...\Californium.properties
2020-05-05 08:29:34,876 [main] INFO  org.eclipse.californium.core.network.RandomTokenGenerator - using tokens of 8 bytes in length
2020-05-05 08:29:34,887 [main] INFO  org.eclipse.californium.core.network.CoapEndpoint - coap CoapEndpoint uses udp plain
2020-05-05 08:29:34,915 [main] INFO  org.eclipse.californium.core.network.stack.BlockwiseLayer - BlockwiseLayer uses MAX_MESSAGE_SIZE=1024, PREFERRED_BLOCK_SIZE=512, BLOCKWISE_STATUS_LIFETIME=300000, MAX_RESOURCE_BODY_SIZE=8192, BLOCKWISE_STRICT_BLOCK2_OPTION=false
2020-05-05 08:29:34,943 [main] INFO  org.eclipse.californium.core.network.stack.ReliabilityLayer - ReliabilityLayer uses ACK_TIMEOUT=2000, ACK_RANDOM_FACTOR=1.5, and ACK_TIMEOUT_SCALE=2.0 as default
2020-05-05 08:29:34,946 [main] INFO  org.eclipse.californium.core.network.CoapEndpoint - coap Endpoint [coap://0.0.0.0:0] requires an executor to start, using default single-threaded daemon executor
2020-05-05 08:29:34,982 [main] INFO  org.eclipse.californium.elements.UDPConnector - UDPConnector starts up 8 sender threads and 8 receiver threads
2020-05-05 08:29:35,013 [main] INFO  org.eclipse.californium.elements.UDPConnector - UDPConnector listening on 0.0.0.0/0.0.0.0:59316, recv buf = 65536, send buf = 65536, recv packet size = 2048
2020-05-05 08:29:35,013 [main] INFO  org.eclipse.californium.core.network.CoapEndpoint - coap Started endpoint at coap://0.0.0.0:59316
2020-05-05 08:29:35,014 [main] INFO  org.eclipse.californium.core.network.EndpointManager - created implicit endpoint coap://0.0.0.0:59316 for coap
2020-05-05 08:29:35,063 [main] INFO  philipsair.PhilipsAir - synchronized with client id 4DA584EB and server id 55075021
2020-05-05 08:29:35,072 [main] INFO  philipsair.PhilipsAir - observing coap://1.2.3.4:5683/sys/dev/status
2020-05-05 08:29:35,128 [:CoapEndpoint-UDP-0.0.0.0:0#1] DEBUG philipsair.PhilipsAir - received encrypted observation 4DA584EC5506AF1A6BD638B1B6BA3B0D89450FBF4E9933746FD68C192E11C25131F25CC504D0CC75AD6AF6537A11682E67AED69A35F14726285F118B5E31BCADD0EDFB1FA0EB67977680523F15E9DCDC65A87816E95F893E64948A756E27D058F8690F08013BAA7D82B1F9B4DBF831073FDA364E24109BB4B07DB9F3A78CEE4A76F907946FAEFAF127265DAD229BE0DE86DE0A7BD318CFE1AA6695B24A81A1C094B2658F3BD34F765E21754E1785561C7BB252ED332470A8A79BAD1DE148BC125ECC369E02756DF3D9C1F7602261393E56EC965ADFC79A9569628682EA079D9CD12EE564FF0F82DB6D8A2BB90C5CF8569A1DBFB479650E526E3355A23324F9FF22E9344B7FB99CC2B8329E4654408A5375B366EC316BBBEB8BADC3CBEDB7533FBA6735BBD7DD169C058103ABA489580F0C5F334B1A5EAB47EB4AE8B36DCAF1C7022DCD298056D4261EEF1CB87CEE0906DD08D6A46B06CB750C9CB55420A31136B3EC7A3A6FB3F14643BCDC44B7127A5F39FEC4C7BE7D4FC0F119D0BFBB0A94EC8A8095DD7987AC0DC945F19DEB39487D9125A9D26B303B65380A260D54A222A801AC6246EFA5A38131109546D0F3213AFCEA732B8D23455F136539A1F331E40B76D413335A34368FE040C5D1AABA94CC6C5E295EED103D635BA2F59F63F5F2DDE532EA99A50ADF12612B6DFC5BB8BB3619B887468D3F7F1AEC0A7FFA090D646AB24752FA8C13339E3AA1770BCE4419EEE8232A5CE9FC68EC4D63FDFF2741F877344FB70A9F9F28AEDABB1EFDAF6C6BCA7407246359CB8C64E3DBF42F26C1F8EE8D325F72D86E5BBD29A622AC16A1810F7627942723494D6C3BFEAB4AC4319F0312AAD36A5E5652E3F244C2EF4516769361853F086BB0B5C6F20D3ED53A470A4C9CFA4982
2020-05-05 08:29:35,138 [:CoapEndpoint-UDP-0.0.0.0:0#1] DEBUG philipsair.PhilipsAir - received observation {"state":{"reported":{"name":"Oben","type":"AC3829","modelid":"AC3829/10","swversion":"1.4.0","DeviceVersion":"1.4.0","om":"s","pwr":"1","cl":false,"aqil":0,"uil":"0","dt":0,"dtrs":0,"mode":"S","func":"PH","rhset":60,"rh":45,"temp":25,"pm25":1,"iaql":1,"aqit":10,"ddp":"0","rddp":"0","err":49408,"wl":0,"fltt1":"A3","fltt2":"C7","fltsts0":56,"fltsts1":4136,"fltsts2":4136,"wicksts":4136,"ota":"ck","Runtime":250955711,"WifiVersion":"AWS_Philips_AIR@54.2","ProductId":"0123456789abcdef0123456789abcdef","DeviceId":"0123456789abcdef0123456789abcdef","StatusType":"localcontrol","ConnectType":"Localcontrol"}}}
2020-05-05 08:29:37,538 [:CoapEndpoint-UDP-0.0.0.0:0#1] DEBUG philipsair.PhilipsAir - received encrypted observation 4DA584ED6071CA03C0203C8E0261BC991B933DB1B2857C1A437CD5EA57FB209464445D1D52A2179AC112A050FBBF2057E3A8F7B16D959C6C46E6EAE1DE3D6E372509F14543F1BD121AB36A066A71F982EB2DC27C2112DDF2D8217F2B7728F65401FB4B4D23BD4B454912C94DCA8038C3D23A56C21CAA084567A1B722FA11F6EC6938053506131FAEF82FC077B2D070FBBEA5F8486E789AB922C9440C80512A38CAB2B267F6DE511573727D42188608B8FDFEF9671C696438C86932485555E6EA97EEA60A89D07163A668838DEB67D4491B1DD4802CAED54B0BEE08C277E4F5BE1C7E77B88C99C5F8D769EDEE8158B9AB7718CA575B4B35F19F76114295E96771569A38DE7D7FC5D7C696E00D62DD7F52200EC77F9D33C23A4BF80FB7F49AE91225B8DF789CFB622AA796B69E7646D5097BF1FE8E27E863B8CDF4ED371183F3CA478EBA880CD6E0DF1F12FB00E025CF6F0D1386FA729DC10B9AD9B6D08387739617010D66582651E4243AC88708DE5C30F77124B42DC18F3CD9563A108E9A1EDD7E4CA89D6E07C4E9AB5B517250BE1933555197AFBB11048A1954AD3F8533C25A2BC5E7762499282A0E2257E1FA8E4870FD73082D5C4743C06F7D3A7174D4E9B40D5B5F5DD1CC3851E32B15A80AA690730DF9CFE0092383590549DC19981371E1E99D791F7CCA8B3A872A036411990413DE28D6C788ACBD53AB544D648B15CFBE9DE8AE4D54E529E8D4AD6E9CF16A771E5A21A2115758F692EF92AEBDDA27CAC3447C528FA682B42389571A4DE393F7299DCCC903C65DE96B7A02F528D513966AA7D56D3029E0CA8BA7577E7CB384CC26A1FDD81C5DC9530E3AE91F7C7DB3D27B4399EBA4CFF029B602D090BD009B24E32CFC899B0FFC050AE04F555CD485712A436C9AEA
2020-05-05 08:29:37,569 [:CoapEndpoint-UDP-0.0.0.0:0#1] DEBUG philipsair.PhilipsAir - received observation {"state":{"reported":{"name":"Oben","type":"AC3829","modelid":"AC3829/10","swversion":"1.4.0","DeviceVersion":"1.4.0","om":"s","pwr":"1","cl":false,"aqil":0,"uil":"0","dt":0,"dtrs":0,"mode":"S","func":"PH","rhset":60,"rh":46,"temp":25,"pm25":1,"iaql":1,"aqit":10,"ddp":"0","rddp":"0","err":49408,"wl":0,"fltt1":"A3","fltt2":"C7","fltsts0":56,"fltsts1":4136,"fltsts2":4136,"wicksts":4136,"ota":"ck","Runtime":250958208,"WifiVersion":"AWS_Philips_AIR@54.2","ProductId":"0123456789abcdef0123456789abcdef","DeviceId":"0123456789abcdef0123456789abcdef","StatusType":"localcontrol","ConnectType":"Localcontrol"}}}
2020-05-05 08:29:38,578 [:CoapEndpoint-UDP-0.0.0.0:0#1] DEBUG philipsair.PhilipsAir - received encrypted observation 4DA584EE71E3832AC7A8174BF9145BFCB6F1A9270056DBC6C0BA4FC8B6D7477ADD168C5B307A8D405FF994350827C362DA7C6C7C58F9EDB887E8B672E30E77272A2C028B78781CFADCC5D5767ACB530D736346109FCFB1EBC57F01AFEBD090FD142E3504842A7D84CDDF77CBA92C72BC5CDAD929D38C313FA3A369F92E144B23D37E0B7987374D2518253E181EFDF6D0642793FFAA5FECB01A6780C50B7858400392699F7D29125BDF8F1020031426A4333B000B023BF5505CE19F2005656CD659CDEE6FFDC34E5069CD1E36775ACC58DB802B8632A59A746D57E8CC0A35D7E6023BDB592E03B7E2EB5B77B0D91C5882608593D480028AC50AA057DA9E71D2AA91EF0F7C1230DD6005AD20077C5BA94417AF25834AB3B133FF28C4865FA2F1BBC332B9970DA2C15D0C97C64DDD0B1B42D7D389B8A5040354B503707878A2153C1E6DDE30EF24E950F8E152C779D8E2C465DA8CC76AB9A73AFE7D6F74394034503666FB1BE7C7A152573607B93D3E53518A55F7699C303684A79375C1917C195A084599C398E69E937E7FFDA75F07913FF2A805BBE74CF9B4B179241F5D28C4EACE6FFE5D8DDF6125A50FB0FD51BF66DCEFA3EFE2CC218688820BE18420D7A663BEE99B3902547CADA124B577044B1E48F0EACCBE474AB329FF5AD87DA4D468B41D10639220C38D993ED9DFE7484B4F782FBBA62C5EB57A867344F990DE7C4C986FA2067D258522DA64FBE2DAEADAE4585968A6879F453736E35D6DC52D0D8B1A6224FD2DAB52F300606B0E4E2DACDAA55A9B9BD9E3CE1B42A673D7D57F01464871F32A3E4A580341AEF42E278A783E5959D504CFBDBDC77CC3033E3B5011AA0E0C77F5DE8A8998DFD374D6DBC3012C99BA9CB000E30FCBF8E7E8D97D5CC878FC773479FC
2020-05-05 08:29:38,606 [:CoapEndpoint-UDP-0.0.0.0:0#1] DEBUG philipsair.PhilipsAir - received observation {"state":{"reported":{"name":"Oben","type":"AC3829","modelid":"AC3829/10","swversion":"1.4.0","DeviceVersion":"1.4.0","om":"s","pwr":"1","cl":false,"aqil":0,"uil":"0","dt":0,"dtrs":0,"mode":"S","func":"PH","rhset":60,"rh":45,"temp":25,"pm25":1,"iaql":1,"aqit":10,"ddp":"0","rddp":"0","err":49408,"wl":0,"fltt1":"A3","fltt2":"C7","fltsts0":56,"fltsts1":4136,"fltsts2":4136,"wicksts":4136,"ota":"ck","Runtime":250959275,"WifiVersion":"AWS_Philips_AIR@54.2","ProductId":"0123456789abcdef0123456789abcdef","DeviceId":"0123456789abcdef0123456789abcdef","StatusType":"localcontrol","ConnectType":"Localcontrol"}}}
2020-05-05 08:29:39,620 [:CoapEndpoint-UDP-0.0.0.0:0#1] DEBUG philipsair.PhilipsAir - received encrypted observation 4DA584EF4AC41C136120835CC58F501444A0A5170300D6887C1CC007FD2616BF7AEEB019E5EA020E7A4D7B7C671373CE26CDFCC2FD4873F62D380D16B329F124D8519F76D2043AF5B2A1881DA3329013A36597BCB16E432D3FB20E2B0F5DC3BA19B25916AE09FDF95F84138197D37AAAAA05B8063AD7BB1AA9FC609C7EE1212393AA5DE3250F8C7C0024554D72C803696E6E3BEAD38FF7E12A91B3BA924CD68876E8750952473483CB3BE8DD305B3CFBC796EF66A8178F24CEB0BEE7B6FD17B5D405420E4E6FEB9F48CD46F6C3564D8668192D69CF99B473739697184766F0142D3465CB16E0BD98BB92EC9E722A09572683AF0397B9B04C91B402D9EC17077457EAFD70A81ACBC7E313D1D3580153EC20D3C964F870D5A21BD80B4B6D12F3E9268CCC6D615024F2B9FCB110CAAA4BEA951503A9C0D8B2B348888BBB315ED4A866C39919B089E7BB4E734FCD3EDB4563076EF15170A14D186236A57E03F41F86F45589766EE485C39E052E1BDF38A2668BC700DE1919D344DDEEB63F1C1D8032BC911CD7D958000B4C16DCB3D954D1FBCF1A48A8F1191CBD330CDADBFEA5B152A9F83484A5FF0DBAF799110CEAE622765126C2E4DE4A0C484956D995B70F95DEAF388435330EA82C4FB60B06170330C1DF133E755AF61CA4C2271E81F979242ABF66491A3110129E20E99D1315A7569A258534AB26828BD4D59DF3499134CC8A101EADC6AADE878A5ADBDC17C28E070D28E63678C4EC4DCD5CBD05591EF32D893B8B6E16823CA6B522B2661A53D61F3F9B5F23C321F66EDE8A26916BA785464F331FF844D67935CA2F836CBC8801C2BADBEC84229816DD34D6EA53DC759A33986D7253F91CEC3ACEF09C2DF8C35E9E0019275B25FA0B897B19BCE0E7B79C164A4DBE292B
2020-05-05 08:29:39,621 [:CoapEndpoint-UDP-0.0.0.0:0#1] DEBUG philipsair.PhilipsAir - received observation {"state":{"reported":{"name":"Oben","type":"AC3829","modelid":"AC3829/10","swversion":"1.4.0","DeviceVersion":"1.4.0","om":"s","pwr":"1","cl":false,"aqil":0,"uil":"0","dt":0,"dtrs":0,"mode":"S","func":"PH","rhset":60,"rh":46,"temp":25,"pm25":1,"iaql":1,"aqit":10,"ddp":"0","rddp":"0","err":49408,"wl":0,"fltt1":"A3","fltt2":"C7","fltsts0":56,"fltsts1":4136,"fltsts2":4136,"wicksts":4136,"ota":"ck","Runtime":250960342,"WifiVersion":"AWS_Philips_AIR@54.2","ProductId":"0123456789abcdef0123456789abcdef","DeviceId":"0123456789abcdef0123456789abcdef","StatusType":"localcontrol","ConnectType":"Localcontrol"}}}
2020-05-05 08:29:40,664 [:CoapEndpoint-UDP-0.0.0.0:0#1] DEBUG philipsair.PhilipsAir - received encrypted observation 4DA584F0604C7A68FD49EAA7E50CB7FBA5EA4A82AC27644A3C0974B8081C05D7B4CAC25113A73FFF31976CFCA2E5557F2A72952773F373CA9A55FB96F70243ABBA4D5609175F567DEB5742019569739D89846C1A60C320A3A9EE9AFB8EF2EF7A4FF816E6611D8E8B13FD579A3AFDD636B14162B78FF55D85E96AA72C050EDEB67BEB93D861FA74FA3E2BECE1CC1074CA55A7F525D8BA57D42E11BF69CAF5DEE19D6A82C1BC697C8962384A41AC69297C13D4D4A04E0E0711605C0DCE0CEE55BAC42F5DCA5394FCC9B1E7E8DB0D206656B37C73023AF5D3B7D0A413C35D0299EEF4C4ED89321999E4980B01ACDF165EB6D75618A20AB4464B224851A875708F41AE75927103829C0BB4EDC927F2158B82D39BBF0AFDB04FEEA528B0D4DF192FDDB4015F9841C72E990E4EC0C95CA7700C943E0A4460AC3D9BDCF1763516804CB204601EE478CF373D09DF791298FD75E030B81A9D513DBF63F26E34B78F9420E22D4E296BEBFAA70CBD9F55EB36EF6667BA57D299F344525AEBB550163B5BDECC326598106A4D02B61CE845B63E07DA5C94F3876AFD92C3743CB474E94B173593C396C1C7252724DD700BAA0F71B635BA7257E15291879F1843D9ED74B48C7DA2F1F0CAC8B14D8755F5261C98CA3B9669B95A22F1EF29A24843EC7DA391706E1C0205037ACA4373E2310B5D6C9916A2BCB3A7C088B0E43442F45103B978D3D39E12A8527155361C6CB5CC22275479C674E864780B367EC0C7C3CEA02FC0AD9EAC6893DE54189FBCEA9562252B5CA32DCA9D72D9C8C8E62022238C4757D402D2C9F52566F10DBE2D0EF487BD3E28322976A4669820D3EE600371015177691A01A15F11B6AFC0F623750E2944C623270EC3395B6D1D9F7108CF81D4C1F4F7BCB9CD8473BB99
2020-05-05 08:29:40,701 [:CoapEndpoint-UDP-0.0.0.0:0#1] DEBUG philipsair.PhilipsAir - received observation {"state":{"reported":{"name":"Oben","type":"AC3829","modelid":"AC3829/10","swversion":"1.4.0","DeviceVersion":"1.4.0","om":"s","pwr":"1","cl":false,"aqil":0,"uil":"0","dt":0,"dtrs":0,"mode":"S","func":"PH","rhset":60,"rh":45,"temp":25,"pm25":2,"iaql":1,"aqit":10,"ddp":"0","rddp":"0","err":49408,"wl":0,"fltt1":"A3","fltt2":"C7","fltsts0":56,"fltsts1":4136,"fltsts2":4136,"wicksts":4136,"ota":"ck","Runtime":250961411,"WifiVersion":"AWS_Philips_AIR@54.2","ProductId":"0123456789abcdef0123456789abcdef","DeviceId":"0123456789abcdef0123456789abcdef","StatusType":"localcontrol","ConnectType":"Localcontrol"}}}
2020-05-05 08:29:45,075 [main] INFO  philipsair.PhilipsAir - disposing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants