Announcement

Collapse
No announcement yet.

Decoding PlugInData

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Decoding PlugInData

    In a typical HomeSeer Z-Wave device, there are many named values stored in the PlugExtraData object. An example is shown below.

    Some of the named keys are encoded objects of some sort, e.g. the "scene" value.

    To decode these strings one has to know what type of object was serialized.

    Is this documented anywhere?

    If not, do any of you know any of the object types? I'm writing a little plug-in sandbox app to help me compare one device to another and I'd like to be able to compare the meaningful data in these encrypted strings also.

    Thanks,

    Brad



    PlugExtraData : ------ HomeSeer.PluginSdk.Devices.PlugExtraData (Start) ------
    NamedCount : 39
    NamedKeys["basictype"] : 4
    NamedKeys["capability"] : 211
    NamedKeys["ccbasic"] : False
    NamedKeys["ccs_scale"] : 0
    NamedKeys["ccs_subtype"] : 0
    NamedKeys["ccs_type"] : 0
    NamedKeys["classes_controlled"] : "gg=="
    NamedKeys["classes_present"] : True
    NamedKeys["classes_supported"] : "XoVZhnJwWnMlICcsK3o="
    NamedKeys["commandclass"] : 37
    NamedKeys["commandclass_instance"] : -1
    NamedKeys["commandclass_version"] : 2
    NamedKeys["generictype"] : 16
    NamedKeys["gotccversion"] : False
    NamedKeys["homeid"] : F8B2DF26
    NamedKeys["manufacturer_id"] : 29
    NamedKeys["manufacturer_prod_id"] : 1
    NamedKeys["manufacturer_prod_type"] : 13825
    NamedKeys["multi_instance_info"] : "AAEAAAD/////AQAAAAAAAAAMAgAAAEFIU1BJX1pXYXZlLCBWZXJzaW9uPTMuMC4yLjAsIEN1 bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAwDAAAAP0hTWldM aWIsIFZlcnNpb249Ni4wLjUyLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGlj S2V5VG9rZW49bnVsbAUBAAAAJ0hTUElfWldhdmUuQ2xhc3NfTm9PYmZ1c2Nh dGlvbitNSVBhY2tldAIAAAAETUlDQwlNSUNDQ291bnQEACFaZW5zeXMuWldh dmUuQ29tbWFuZENsYXNzZXMrVHlwZXMDAAAAAgIAAAAF/P///yFaZW5zeXMuWldhdmUuQ29tbWFuZENsYXNzZXMrVHlwZXMBAAAAB3ZhbHVlX 18AAgMAAAAAAAs="
    NamedKeys["node_id"] : 15
    NamedKeys["node_version_app"] : 1.15
    NamedKeys["node_version_appstring"] : 1.15
    NamedKeys["node_version_firm_sub_0"] : 0
    NamedKeys["node_version_firm_sub_1"] : 0
    NamedKeys["node_version_firm_sub_2"] : 0
    NamedKeys["node_version_hardware"] : 255
    NamedKeys["node_version_libtype"] : 3
    NamedKeys["node_version_zwave"] : 4.33
    NamedKeys["pollchanges"] : "AAEAAAD/////AQAAAAAAAAAMAgAAAEFIU1BJX1pXYXZlLCBWZXJzaW9uPTMuMC4yLjAsIEN1 bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAQBAAAAkQFTeXN0 ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW0hTUElfWldhdmUuQ2xh c3NfTm9PYmZ1c2NhdGlvbitQb2xsQ2hhbmdlLCBIU1BJX1pXYXZlLCBWZXJz aW9uPTMuMC4yLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49 bnVsbF1dAwAAAAZfaXRlbXMFX3NpemUIX3ZlcnNpb24EAAArSFNQSV9aV2F2 ZS5DbGFzc19Ob09iZnVzY2F0aW9uK1BvbGxDaGFuZ2VbXQIAAAAICAkDAAAA AAAAAAAAAAAHAwAAAAABAAAAAAAAAAQpSFNQSV9aV2F2ZS5DbGFzc19Ob09i ZnVzY2F0aW9uK1BvbGxDaGFuZ2UCAAAACw=="
    NamedKeys["pollrate"] : 0
    NamedKeys["relationship"] : 3
    NamedKeys["scene"] : "AAEAAAD/////AQAAAAAAAAAMAgAAAEFIU1BJX1pXYXZlLCBWZXJzaW9uPTMuMC4yLjAsIEN1 bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAFUhTUElf WldhdmUuY2xzWldTY2VuZQgAAAALbXZhcl9Ib21lSUQHY29sRGF0YQ1tdmFy U2NlbmVOYW1lCFJhbXBSYXRlCUluY2x1ZGVIUwtBc3BpcmVTY2VuZQlIb21l U2NlbmUMSW5Db250cm9sbGVyBwMBAAAAAAACHFN5c3RlbS5Db2xsZWN0aW9u cy5BcnJheUxpc3QIAQgIAQIAAAAJAwAAAAkEAAAABgUAAAAOTWFudWFsU2Nl bmVfNDAAAAAAAAAAAAAAAAAAAA8DAAAABAAAAAL4st8mBAQAAAAcU3lzdGVt LkNvbGxlY3Rpb25zLkFycmF5TGlzdAMAAAAGX2l0ZW1zBV9zaXplCF92ZXJz aW9uBQAACAgJBgAAAAAAAAAAAAAAEAYAAAAAAAAACw=="
    NamedKeys["scene_button"] : 0
    NamedKeys["secure_classes_present"] : False
    NamedKeys["security"] : 156
    NamedKeys["specifictype"] : 1
    NamedKeys["v4_resave"] : True
    NamedKeys["wakeup_support"] : "AAEAAAD/////AQAAAAAAAAAMAgAAAEFIU1BJX1pXYXZlLCBWZXJzaW9uPTMuMC4yLjAsIEN1 bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAMEhTUElf WldhdmUuWldfQ29uc3RhbnRzRW51bXMrc3RyV2FrZVVwX1N1cHBvcnRlZAYA AAAMTWluaW11bV9UaW1lDE1heGltdW1fVGltZQxEZWZhdWx0X1RpbWUNSW50 ZXJ2YWxfVGltZQlWYWxpZERhdGEHVmVyc2lvbgAAAAAAAAgICAgBAgIAAAAA AAAAAAAAAAAAAAAAAAAAAAAL"
    NamedKeys["zwplusinfo"] : "AAEAAAD/////AQAAAAAAAAAMAgAAAEFIU1BJX1pXYXZlLCBWZXJzaW9uPTMuMC4yLjAsIEN1 bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAALEhTUElf WldhdmUuQ2xhc3NfTm9PYmZ1c2NhdGlvbitaV2F2ZVBsdXNJbmZvCAAAAAta V1BfVmVyc2lvbg1aV1BfUm9sZV9UeXBlDVpXUF9Ob2RlX1R5cGUWWldQX0lu c3RhbGxlcl9JY29uX01TQhZaV1BfSW5zdGFsbGVyX0ljb25fTFNCEVpXUF9V c2VyX0ljb25fTVNCEVpXUF9Vc2VyX0ljb25fTFNCD1BvcHVsYXRlZF9WYWxp ZAAAAAAAAAAAAgICAgICAgECAAAAAQUABwAHAAEL"
    UnNamed :
    UnNamedCount : 0
    ------ HomeSeer.PluginSdk.Devices.PlugExtraData (End) --------


    #2
    Base64Encoded?
    stefxx

    Comment


      #3
      Originally posted by stefxx View Post
      Base64Encoded?
      I had briefly tried Base64 decoding before, but not spent much time on it. Since you mentioned it, I spent some more time on it. It does seem to be a Base64 encoded string, but it has some binary bytes as well as ASCII bytes.

      Also, the Base64 string that are values of named properties in the PlugExtraData.NamedKeys array seem to have double quote characters appended to the start and end of the string.

      Below I show the NamedKeys values for one of my Z-Wave devices. Fore each named keys that appears to be Base64 encoded, I show the raw string (straight from NamedKeys) and then on the next line I show the (somewhat) decoded string, decoded with the following code:

      else if (keyValue.StartsWith(""AAEAAAD"))
      {
      // This value is Base64 encoded
      // ----------------------------
      try
      {
      // Remove the starting and ending " characters
      // -------------------------------------------
      string encodedString = keyValue.Substring(1, keyValue.Length - 2);
      byte[] data = Convert.FromBase64String(encodedString);
      string decodedString = Encoding.UTF8.GetString(data);

      StringBuilder s = new StringBuilder();

      // Before trying to display the decoded string, change any
      // control characters (non-printable binary values) to '~'
      // -------------------------------------------------------
      foreach (char c in decodedString)
      {
      if (char.IsControl(c))
      {
      s.Append('~');
      }
      else
      {
      s.Append(c);
      }
      }
      keyValue = keyValue + newline + s.ToString();
      }
      catch (Exception ex)
      {
      keyValue = keyValue + newline + ex.ToString();
      }
      }

      The output is shown in the attached results.txt file. Hard to read I know, but note that each decoded Base64 property appears to perhaps be an encoded object that is somehow related to the HSPI_ZWave module version 3.0.2.0.

      Any ideas?



      Attached Files

      Comment


        #4
        Not sure. I guess it is binary, converted to BASE64 so it can be stored without issues.
        stefxx

        Comment

        Working...
        X