When reading into a %variable the sockread event is only retriggered if the receive queue contains a $crlf

You should use a while loop to fully read the buffer:

Code
on *:sockread:weather: {
  if ($sockerr) {
    echo -a Error.
    halt
  }
  else {
    var %temptext
    sockread -f %temptext
    while ($sockbr) {
      if (%temptext) { echo -ag %temptext }
      sockread -f %temptext
    }
  }
}