Python, email temperature

Mitya Sirenef msirenef at lightbird.net
Sun Dec 23 12:23:24 EST 2012


On 12/23/2012 08:46 AM, KarlE wrote:
> On Saturday, December 22, 2012 9:36:41 PM UTC+1, KarlE wrote:
>> Hi!
>>
>>
>>
>> Im totally new to Python, and im using it on my Raspberry pi. I found a program that sends an email, and one that checks the temperature of my CPU, but i cant seem to combine the to into the funktion that i want, sending me the CPU temp via Email.
>>
>>
>>
>> The two programs work very well on their own, but this doesnt work.
>>
>>
>>
>> this works: server.sendmail(fromaddr, toaddrs, msg)
>>
>> but this doesnt: server.sendmail(fromaddr, toaddrs, cpu_temperature)
>>
>>
>>
>> despite the command "print cputemp" working in the same program.
>>
>>
>>
>> When i run the program i get the error:
>>
>>
>>
>> Traceback (most recent call last):
>>
>>    File "sendcpu.py", line 36, in <module>
>>
>>      msg = cpu_temperature
>>
>> NameError: name 'cpu_temperature' is not defined
>>
>>
>>
>> Does anyone know why the program claims that cpu_temperature isnt defined, when it is?
>>
>>
>>
>> Thanx!
>>
>>
>>
>> //Alexander
> Ok, im back with a little more understanding of python! I got the program working, every time my Raspberry Pi reboots i get an Email containing information about the boot and the CPU temperature.
>
> The issue now is that there seems to be a limitation to how long the message string can be, about 32 letters. The code below works well, but when i add more letters to the string "ord" and pass about 32 in size the email comes through emptpy...
>
> I cant find any information about limitations to strings in Python, or the email module. can anyone give me a pointer?
>
> (the code lines my appear with different tabbings due to beeing copied from my raspberry pi with Putty, but this is not an issue, all the lines are on the same tab)
>
> #!/usr/bin/env python
> from __future__ import division
> from subprocess import PIPE, Popen
> import psutil
> import smtplib
>
> def get_cpu_temperature():
>      process = Popen(['vcgencmd', 'measure_temp'], stdout=PIPE)
>      output, _error = process.communicate()
>      return float(output[output.index('=') + 1:output.rindex("'")])
>
>
> def main():
>      cpu_temperature = get_cpu_temperature()
>      cpu_usage = psutil.cpu_percent()
>
>      ram = psutil.phymem_usage()
>      ram_percent_used = ram.percent
>
>      disk = psutil.disk_usage('/')
>      disk_percent_used = disk.percent
>
>      print 'CPU temperature: ', cpu_temperature
>
>      fromaddr = 'xxx'
>      toaddrs  = 'xxx'
>      username = 'xxx'
>      password = 'xxx'
>
>      ord = "Subject: Pi Boot, CPU: " + str(cpu_temperature)
>
>      print len(ord)
>      server = smtplib.SMTP('smtp.gmail.com:587')
>      server.starttls()
>      server.login(username,password)
>      server.sendmail(fromaddr, toaddrs, ord)
>      server.quit()
>
> main()
>

I'm not sure if Raspberry Pi has it, but usually you want to
use the email module, as in example on this page:

http://docs.python.org/2/library/email-examples.html#email-examples

I think what happens is that because your message starts
with 'Subject:', it's interpreted as subject header instead of
an email. You can try adding two newlines after Subject:,
that might help... but using email module is best if possible.

  -m

-- 
Lark's Tongue Guide to Python: http://lightbird.net/larks/




More information about the Python-list mailing list