dude! check out what i missed>
The sensor responds with 2 data bytes (MSB first) and 1 CRC byte for each of the two preprocessed
air quality signals in the order CO2eq (ppm) and TVOC (ppb). For the first 15s after the “sgp30_iaq_init” command the sensor is
in an initialization phase during which a “sgp30_measure_iaq” command returns fixed values of 400 ppm CO2eq and 0 ppb
TVOC.
so we cant send the sgp30_iaq_init before every measurement command, or it just resets the 15s of giving that static value. thats why we were seeing those same values over and over.
If i send the init and then wait
I2C> [0xB0 0x20 0x03 0x0E] D:1000
I2C START
TX: 0xB0 ACK 0x20 ACK 0x03 ACK 0x0E ACK
I2C STOP
Delay: 1000ms
I see the mA’s start to fluctuate but still get 
I2C> [0xB0 0x20 0x08 0xE4] D:23 [0xB1 r:6]
I2C START
TX: 0xB0 ACK 0x20 ACK 0x08 ACK 0xE4 ACK
I2C STOP
Delay: 23ms
I2C START
TX: 0xB1 ACK
RX: 0x01 ACK 0x90 ACK 0x4C ACK 0x00 ACK 0x00 ACK 0x81 NACK
I2C STOP
which would be what the datasheet said about the 400ppm static value.
so
[relo@killengn sgp30]$ echo $(( (0x01 << 8) | 0x90 ))
400
and other is obviously 0. checksums are correct as well.
But then if i wait >15s check this out!
without alcohol swab near it
I2C> [0xB0 0x20 0x08 0xE4] D:23 [0xB1 r:6]
I2C START
TX: 0xB0 ACK 0x20 ACK 0x08 ACK 0xE4 ACK
I2C STOP
Delay: 23ms
I2C START
TX: 0xB1 ACK
RX: **0x01 ACK 0xCE ACK** 0x2D ACK 0x00 ACK 0x00 ACK 0x81 NACK
I2C STOP
which is
[relo@killengn sgp30]$ echo $(( (0x01 << 8) | 0xCE ))
462
^co2
and 0 for TVOC ( ACK 0x00 ACK 0x00 ACK 0x81 ) 0x81 being the CRC for 0x00.
[relo@killengn sgp30]$ python3 sgp30_crc.py 0x00 0x81
–
now with soaked alcohol swabsuper close to the hot plate MOX sensor
I2C> [0xB0 0x20 0x08 0xE4] D:23 [0xB1 r:6]
I2C START
TX: 0xB0 ACK 0x20 ACK 0x08 ACK 0xE4 ACK
I2C STOP
Delay: 23ms
I2C START
TX: 0xB1 ACK
RX: 0xDF ACK 0xF2 ACK **0x3C ACK 0xEA ACK** 0x60 ACK 0xA2 NACK
I2C STOP
I2C>
which just so happens to be the friggin max reading for 60000ppb for the TVOC sensor
[relo@killengn sgp30]$ echo $(( (0xEA << 8) | 0x60 ))
60000
–
thank you so much. this was a great learning experience.
couple of bonus questions about buspirate cli i thought of when doing this
1.) is there a way to turn off verbosity of the transmission side, and only get the read? not super important but when running it tons of times when i might only want to show the command and what im trying to read, for copy and paste purposes.
2.) how can i print out values such as the mA. it shows it super pretty on the buspirate and in the CLI of course, but was just wondering if i could simply echo the current value of stuff
3.) can i do arithmetic and bitwise arithmetic in BP? like how i was using echo or printf in bash
thanks so much ian