Het viel me pas op dat mijn Roomba stofzuiger ongeveer 5 Watt staat te verslijten als deze opgeladen op zijn basis station staat. Dit is ongeveer 10 euro aan stroom verbruik per jaar voor niks.
Aangezien ik van het weekend eindelijk mijn razberry binnen had en ik nu aan de slag kon met mijn Greenwave stekkerblok kwam ik al snel op het idee om de Roomba hierop aan te sluiten en alleen stroom op de Roomba te zetten als dit nodig is.
De Roomba die ik heb heeft een eigen scheduler zodat deze automatisch gaat schoonmaken als ik niet thuis ben. Dus heb ik in Domoticz een tijdschakelaar gemaakt om ruim voor die tijd de Roomba van stroom te voorzien. Na een paar uur is er weer een tijdschakelaar om de roomba weer van de stroom te halen. Aangezien ik niet weet hoe lang het duurt is dit ook ruim gehouden.
Maar aangezien de Greenwave ook het stroomverbruik kan meten zou het ook mogelijk moeten zijn om te detecteren wat de roomba aan het doen is en hierop te reageren.
Na het doorspitten van de power usage log kwam ik erachter dat het basis stond minder dan 2 watt gebruikt als de roomba niet op het basis station staat en dus zijn ronde aan het doen is, rond de 5 watt als de roomba is opgeladen en wel op het basis station aanwezig is en over de 20 watt als deze aan het laden is.
En met deze informatie heb ik onderstaand script gemaakt. Het script houd de roomba in de gaten en schakelt de outlet uit op het moment dat de roomba volledig is opgeladen na zijn run.
Er dienen 3 instellingen te worden aangepast. het adres van de domoticz server, het idx nummer van de power outlet en het idx nummer van de verbruiksmeter van de outlet.
Optioneel kan nog de roombaProgram worden aangepast.
Dit zijn de verschillende stappen die de roomba moet doorlopen en die het script bij houd.
In dit geval wacht het script eerst totdat de roomba is opgeladen (2), vervolgens moet deze zijn run doen (0) en pas als de roomba opnieuw is opgeladen (2) dan eindigt het script (4) en word de schakelaar weer omgezet.
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| #!/usr/bin/python
# Title: roomba.py
# Author: Chopper_Rob
# Date: 10-03-2014
# Info: Monitors the Roomba power outlet to determine the roomba's state and switches the power outlet
# off when it detects that the roomba is back from it's run and is fully charged.
# Make sure to power on the outlet in domoticz before the Roomba starts it scheduled run.
# Version : 1.0
#
import sys
import datetime
import time
import os
import subprocess
import urllib2
import json
# Settings for the domoticz server
domoticzserver="192.168.0.1:8080"
roomba_usage_idx='1'
roomba_switch_idx='2'
# 0 Running
# 1 Charging
# 2 Charged
# 3 Send Start signal (Not yet implemented)
# 4 Poweroff Roomba and exit Program, this should be the last step in the program.
roombaProgram = ['2','0','2','4']
# DO NOT CHANGE BEYOND THIS LINE
domoticzurl = 'http://'+domoticzserver+'/json.htm?type=devices&filter=all&used=true&order=Name'
currentStep = 0
def powerUsage():
request = urllib2.Request(domoticzurl)
response = urllib2.urlopen(request)
json_object = json.loads(response.read())
if json_object["status"] == "OK":
for i, v in enumerate(json_object["result"]):
if json_object["result"][i]["idx"] == roomba_usage_idx and "Usage" in json_object["result"][i]["Type"] :
return float(json_object["result"][i]["Data"].replace (" Watt", ""))
while 1==1:
currentWatt = powerUsage()
if currentWatt < 2:
RoombaStatus = 0
print str(currentWatt)+" Watt, 0) Roomba is doing it's thing"
if currentWatt > 10:
RoombaStatus = 1
print str(currentWatt)+" Watt, 1) Roomba is home and charging"
if currentWatt >= 2 and currentWatt <= 10:
RoombaStatus = 2
print str(currentWatt)+" Watt, 2) Roomba is home and fully charged"
if RoombaStatus == int(roombaProgram[currentStep]):
currentStep = currentStep + 1
else:
print "Waiting for status " + str(roombaProgram[currentStep])
if int(roombaProgram[currentStep]) == 3:
print "Send start signal"
currentStep = currentStep + 1
if int(roombaProgram[currentStep]) == 4:
print "Poweroff Roomba outlet and exit program"
urllib2.urlopen("http://" + domoticzserver + "/json.htm?type=command¶m=switchlight&idx=" + roomba_switch_idx + "&switchcmd=Off&level=0")
sys.exit(0)
time.sleep(float(60)) |
In de toekomst wil ik status 3 nog implementeren, hiermee moet het mogelijk worden om doormiddel van een ir transmitter de roomba te starten. In dat geval hoeft de scheduler van de roomba niet meer te worden gebruikt en is het alleen nog maar nodig om de outlet aan te zetten om het hele proces te starten.
Maar aangezien ik nog geen ir transmitter heb zit het er nog niet in.