Skip to content

Instantly share code, notes, and snippets.

@jerefrer
Created October 2, 2015 08:46
Show Gist options
  • Save jerefrer/03c9985e95ac6d81b3b4 to your computer and use it in GitHub Desktop.
Save jerefrer/03c9985e95ac6d81b3b4 to your computer and use it in GitHub Desktop.

Revisions

  1. jerefrer created this gist Oct 2, 2015.
    28 changes: 28 additions & 0 deletions data.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,28 @@
    $ > data = "45973294435a352c55d6cbf0"
    => "45973294435a352c55d6cbf0"
    $ > bytes = data.scan(/../).map(&:hex)
    => [69, 151, 50, 148, 67, 90, 53, 44, 85, 214, 203, 240]
    $ > bytes[8].to_f / 2 - 27
    => 15.5 # Température
    $ > bytes[9].to_f / 50
    => 4.28 # Voltage batterie

    # Jusqu'ici tout va bien

    # ===================================

    # Tentative de calcul du CRC

    $ > crc1 = bytes[0, 10].reduce(:+) # Méthode fonctionnelle donnant un résultat identique à votre boucle
    => 971
    $ > crc2 = 10 * bytes[9] # Méthode donnant un résultat identique à votre boucle
    => 2140
    $ > crc1 != bytes[10]
    => true # Evidémment, comment un seul byte pourrait être au dessus de 255 ?
    $ > crc2 != bytes[11]
    => true # Evidémment, comment un seul byte pourrait être au dessus de 255 ?

    # J'imagine qu'ici il doit y avoir un calcul binaire quelconque qui entre en jeu,
    # seulement de votre code je n'arrive pas à comprendre la logique.
    # De plus votre code indique "if ((CRC1 != the_byte[10]) & (CRC2 != the_byte[11]))"
    # Avec un seul & au lieu de &&. Est-ce volontaire ?