According to datasheet you can span point calibrate the MH-Z19B CO2 sensor. https://www.winsen-sensor.com/d/files/infrared-gas-sensor/mh-z19b-co2-ver1_0.pdf
E.g. with 0xFF 0x01 0x88 0x07 0xD0 0x00 0x00 0x00 0xA0 you should calbrate it to 2000 ppm. According to manual there is no return value issuing this command. However sensor returns your spanpoint as CO2 value. Afterwards requesting CO2 value it is still the old value.
Also using https://github.com/UedaTakeyuki/mh-z19 and executing
sudo python3 -m mh_z19 --span_point_calibration 2000 sensor still returns old value.
Caution: This script changes access rights of your serialport even as normal user. You can run this script once without root rights. Subsequent calls will fail without root rights. Reboot to get your serial port rights back.
Zeropoint calibration (setting CO2 level to 400 ppm works), however for that you have to take the sensor outside and leave it there for at least 20 minutes. It can take hours after window open until CO2 level inside is reduced to 400ppm. This maybe possible in summer, but not really in winter. So span point calibration would be a really useful feature. That also the reason that you should disable automatic calibration. With ABC on the sensor sets the lowest measured CO2 value in the last 24 hours to 400.
Update: Zeropoint calibration lasted a few hours, then the sensor reported implausible values. I brought the sensor outside again, calibrated it via setting "HD" Pin to ground for about one minute (7 seconds are enough according to datasheet). Then inside CO2 values were much too high. After that I issued again a spanpoint calibration command with CO2 level from another CO2 sensor. Now values are plausible. So spanpoint calibration seems to be the second point of some kind of two point calibration. Based on my experiences I recommend not to play around with this command. Only zeropoint calibration should be done from time to time.