<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def create(self, port, value, timestamp=None):
 """Post a new reading to a timeseries. A reading is comprised of a `port`, a `value` and a timestamp. A port is like a tag for the given reading and gives an indication of the meaning of the value. The value of the reading can be any valid json value. The timestamp is considered the time the reading was taken, as opposed to the `created` time of the data-point which represents when the data-point was stored in the Helium API. If the timestamp is not given the server will construct a timestemp upon receiving the new reading. Args: port(string):
 The port to use for the new data-point value: The value for the new data-point Keyword Args: timestamp(:class:`datetime`):
 An optional :class:`datetime` object """

        session = self._session
        datapoint_class = self._datapoint_class
        attributes = {
            'port': port,
            'value': value,
        }
        if timestamp is not None:
            attributes['timestamp'] = to_iso_date(timestamp)
        attributes = build_request_body('data-point', None,
                                        attributes=attributes)

        def _process(json):
            data = json.get('data')
            return datapoint_class(data, session)
        return session.post(self._base_url, CB.json(201, _process),
                            json=attributes)