I'll admit that I had to lookup MQTT (here is an Arduino MQTT example, so the ESP8266 would be able to it as well).
Reading more on your project, cannot help getting a little excited as well, since it has Arduino written all over it (where I write Arduino, read "ESP8266" haha).
I'd use one of these very affordable DS18B20 temperature sensors (see my little project), one for outside and one for in the hive. This way you get the most reliable data. Most online services, tend to be a little off compared to the actual temperature in your own backyard.
Additionally, I've ran into free services that just disappeared over time or became commercial - a reason why I'd rather do everything myself 😉 ...
Not sure if the weather there is comparable to Wisconsin, but most winters tend to be quite sunny (good for solar).
With car batteries I'd be worried, as with any battery, that they will drain too fast when temperatures outside are too low.
Then again: it's not like I have a better solution for it. Car batteries should be able to power Arduino's and ESP8266's real easy since the barely use any power.
Indeed back to the original question 😉
So I never used Python with the ESP8266 - I use plain Arduino C code, which is quite easy and doesn't require any kind of firmware flashing 😊
On that note: I'm not a big Python fan myself - it has it's (limited) purpose. But yes issues like that would ruin the motivation for sure for me as well ...
Well, as far as the config gos, I do not see anything there that would cause this issue.
When you connect to "modem2" (assuming this is you modem/router) with your PC, can you login and see what IP addresses have been handed out or what IP range is being used?
I still find it quite odd that your Pi is getting a public IP address, AND that 3 Pi's get the same IP address.
I would assume you did not have any additional config info that potentially would set the IP address to a static address right?
(Your modem does not happen to be set in some sorts of bridged mode right?)