Advertisement
Guest User

PaPiRus MQTT OpenHAB Display

a guest
Nov 21st, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.13 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import os
  5. import sys
  6. import paho.mqtt.client as mqtt
  7. import time
  8. from datetime import datetime
  9. from papirus import Papirus
  10. from PIL import Image
  11. from PIL import ImageDraw
  12. from PIL import ImageFont
  13. import argparse
  14.  
  15. user = os.getuid()
  16. if user != 0:
  17. print "Please run script as root"
  18. sys.exit()
  19.  
  20. papirus = Papirus()
  21. papirus.clear()
  22.  
  23. power = "0"
  24. consumption = "0"
  25. temperature = "0"
  26. humidity = "0"
  27. temperature2 = "0"
  28. humidity2 = "0"
  29. download = "0"
  30. upload = "0"
  31. power_prev = "0"
  32. consumption_prev = "0"
  33. temperature_prev = "0"
  34. humidity_prev = "0"
  35. temperature2_prev = "0"
  36. humidity2_prev = "0"
  37. download_prev = "0"
  38. upload_prev = "0"
  39. previous_second = 0
  40.  
  41. def on_connect(client, userdata, flags, rc):
  42. print("Connected with result code "+str(rc))
  43. # Subscribing in on_connect means that if we lose connection
  44. # and reconnect then subscriptions will be renewed
  45. client.subscribe([("openhab/epaper/power", 2), ("openhab/epaper/consumption", 2), ("openhab/epaper/temperature_indoor", 2), ("openhab/epaper/humidity_indoor", 2), ("openhab/epaper/temperature_outdoor", 2), ("openhab/epaper/humidity_outdoor", 2), ("openhab/epaper/download", 2), ("openhab/epaper/upload", 2)])
  46.  
  47.  
  48.  
  49. def on_message(mqtt, obj, msg):
  50. global power, consumption, temperature, humidity, temperature2, humidity2, download, upload, power_prev, consumption_prev, temperature_prev, humidity_prev, temperature2_prev, humidity2_prev, download_prev, upload_prev
  51.  
  52. if msg.topic == "openhab/epaper/power":
  53. power = str(int(float(msg.payload)))
  54. if msg.topic == "openhab/epaper/consumption":
  55. consumption = str(round(float(msg.payload), 3)).replace('.', ',')
  56. if msg.topic == "openhab/epaper/temperature_indoor":
  57. temperature = str(round(float(msg.payload), 1)).replace('.', ',')
  58. if msg.topic == "openhab/epaper/humidity_indoor":
  59. humidity = str(round(float(msg.payload), 1)).replace('.', ',')
  60. if msg.topic == "openhab/epaper/temperature_outdoor":
  61. temperature2 = str(round(float(msg.payload), 1)).replace('.', ',')
  62. if msg.topic == "openhab/epaper/humidity_outdoor":
  63. humidity2 = str(round(float(msg.payload), 1)).replace('.', ',')
  64. if msg.topic == "openhab/epaper/download":
  65. download = str(round(float(msg.payload), 1)).replace('.', ',')
  66. if msg.topic == "openhab/epaper/upload":
  67. upload = str(round(float(msg.payload), 1)).replace('.', ',')
  68.  
  69. if power != power_prev:
  70. power_prev = power
  71. display_data()
  72. if consumption != consumption_prev:
  73. consumption_prev = consumption
  74. display_data()
  75. if temperature != temperature_prev:
  76. temperature_prev = temperature
  77. display_data()
  78. if humidity != humidity_prev:
  79. humidity_prev = humidity
  80. display_data()
  81. if temperature2 != temperature2_prev:
  82. temperature2_prev = temperature2
  83. display_data()
  84. if humidity2 != humidity2_prev:
  85. humidity2_prev = humidity2
  86. display_data()
  87. if download != download_prev:
  88. download_prev = download
  89. display_data()
  90. if upload != upload_prev:
  91. upload_prev = upload
  92. display_data()
  93.  
  94.  
  95. def display_data():
  96. global power, consumption, temperature, humidity, temperature2, humidity2, download, upload, previous_second
  97.  
  98. now = datetime.today()
  99.  
  100. image = Image.new('1', papirus.size, 1)
  101. draw = ImageDraw.Draw(image)
  102.  
  103. font_path = "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"
  104. font_title = ImageFont.truetype(font_path, 17)
  105. font_values = ImageFont.truetype(font_path, 15)
  106.  
  107. draw.text( (0, 0), "Smarthome ", font=font_title, fill=0)
  108. draw.text( (125, 0), (datetime.now().strftime("%H:%M")) + " Uhr", font=font_title, fill=0)
  109. draw.text( (0, 20), "Strom", font=font_values, fill=0)
  110. draw.text( (65, 20), power + " W ", font=font_values, fill=0)
  111. draw.text( (125, 20), consumption + " kWh", font=font_values, fill=0)
  112. draw.text( (0, 40), "Klima", font=font_values, fill=0)
  113. draw.text( (65, 40), temperature + " \xb0C ", font=font_values, fill=0)
  114. draw.text( (125, 40), humidity + " % RH", font=font_values, fill=0)
  115. draw.text( (0, 60), "Wetter", font=font_values, fill=0)
  116. draw.text( (65, 60), temperature2 + " \xb0C ", font=font_values, fill=0)
  117. draw.text( (125, 60), humidity2 + " % RH", font=font_values, fill=0)
  118. draw.text( (0, 80), "Internet", font=font_values, fill=0)
  119. draw.text( (65, 80), download + " DL", font=font_values, fill=0)
  120. draw.text( (125, 80), upload + " UL", font=font_values, fill=0)
  121. papirus.display(image)
  122.  
  123. if now.second < previous_second:
  124. papirus.update()
  125. else:
  126. papirus.partial_update()
  127. previous_second = now.second
  128.  
  129. client = mqtt.Client()
  130. client.username_pw_set(username="epaper", password="epaper")
  131. client.on_connect = on_connect
  132. client.on_message = on_message
  133. client.connect("mqtt", 1883, 60)
  134.  
  135.  
  136. # Blocking call that processes network traffic, dispatches callbacks
  137. # and handles reconnecting
  138. # Other loop*() fucntions are available that give a threaded interface
  139. # and a manual interface
  140.  
  141. try:
  142. client.loop_forever()
  143.  
  144. # deal with ^C
  145.  
  146. except KeyboardInterrupt:
  147. print("\ninterrupted!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement