import smbus
from datetime import datetime

class DS3231:
    def __init__(self, bus=1, address=0x68):
        self.bus = smbus.SMBus(bus)
        self.address = address

    def _bcd_to_dec(self, bcd):
        return (bcd // 16) * 10 + (bcd % 16)

    def _dec_to_bcd(self, dec):
        return (dec // 10) * 16 + (dec % 10)

    def read_time(self):
        data = self.bus.read_i2c_block_data(self.address, 0x00, 7)
        second = self._bcd_to_dec(data[0])
        minute = self._bcd_to_dec(data[1])
        hour = self._bcd_to_dec(data[2])
        day = self._bcd_to_dec(data[4])
        month = self._bcd_to_dec(data[5] & 0x1F)
        year = self._bcd_to_dec(data[6]) + 2000
        return datetime(year, month, day, hour, minute, second)

    def write_time(self, dt):
        self.bus.write_i2c_block_data(self.address, 0x00, [
            self._dec_to_bcd(dt.second),
            self._dec_to_bcd(dt.minute),
            self._dec_to_bcd(dt.hour),
            self._dec_to_bcd(dt.isoweekday()),
            self._dec_to_bcd(dt.day),
            self._dec_to_bcd(dt.month),
            self._dec_to_bcd(dt.year - 2000)
        ])
