Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import appdaemon.plugins.mqtt.mqttapi as mqtt
- class MqttEventListener(mqtt.Mqtt):
- def initialize(self):
- self.mqtt_subscribe("valetudo/rockrobo/map_data", namespace=mqtt)
- self.listen_event(self.updatemap, namespace=mqtt)
- def test(self, event_name, data, *args, **kwargs):
- self.log(event_name)
- def updatemap(self, event_name, data, *args, **kwargs):
- def floor(point, paddingX, paddingY, width):
- return [((point[0] - paddingX) * 4), ((point[1] - paddingY) * 4),(((point[0] - paddingX) * 4) + width), (((point[1] - paddingY) * 4) + width)]
- img = Image.new('RGBA', (1280, 1280))
- imgmap = Image.open('/config/img/vacuummap.svg.png')
- draw = ImageDraw.Draw(img)
- # Load vacuum JSON data
- pathpoint = []
- # Calculate padding
- minX = (min(data['image']['pixels']['floor'], key = lambda t: t[0]))[0] - 20
- minY = (min(data['image']['pixels']['floor'], key = lambda t: t[1]))[1] - 20
- # Draw floor
- for point in data['image']['pixels']['floor']:
- draw.ellipse(floor(point,minX,minY,4), fill=(0, 118, 255, 200))
- for point in data['image']['pixels']['obstacle_strong']:
- draw.ellipse(floor(point,minX,minY,3), fill=(82, 174, 255, 200))
- # Draw path
- for path in data['path']['points']:
- pathpoint.append((math.floor((path[0]/50 - data['image']['position']['left'] - minX) * 4), math.floor((path[1]/50 - data['image']['position']['top'] - minY) * 4)))
- draw.line(pathpoint, fill=(255, 255, 255, 255), width=1)
- # Draw robot
- robot = (math.floor((data['robot'][0]/50 - data['image']['position']['left'] - minX) * 4), math.floor((data['robot'][1]/50 - data['image']['position']['top'] - minY) * 4))
- draw.ellipse([robot[0]-15,robot[1]-15,(robot[0]+15),(robot[1]+15)], fill=(255, 255, 255, 255), outline=(0,0,0,255), width=3)
- img.paste(imgmap, (minX+15, minY+15), imgmap)
- img.save("/config/img/vacuummap.png", "PNG")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement