??:????? AI ?????
??????????,??????????????? App ??????? PDF ?..????,????????????OpenClaw ?????????????,?? AI ???????????????????? OpenClaw ?????????????
????????
????????????????????:
- ????:?? Apple Health?Google Fit?Garmin ??? API ?????????????
- ????:???????????????,????????
- ????:?? OCR ?? PDF ????,?????????????
- ????:?? cron ????,??????????????
??????????
2.1 Apple Health ????
Apple Health ???? XML ???????,?????? OpenClaw ??????????:
// skills/health-tracker/apple-health.js
const fs = require('fs');
const xml2js = require('xml2js');
async function parseAppleHealth(filePath) {
const xmlData = fs.readFileSync(filePath, 'utf8');
const result = await xml2js.parseStringPromise(xmlData);
const records = result.HealthData.Record;
const stepsData = records.filter(r => r.$.type === 'HKQuantityTypeIdentifierStepCount');
const heartRateData = records.filter(r => r.$.type === 'HKQuantityTypeIdentifierHeartRate');
return { steps: stepsData, heartRate: heartRateData };
}
2.2 Google Fit API ??
Google Fit ?????? REST API,??????????:
{
"skills": {
"google-fit": {
"enabled": true,
"config": {
"clientId": "your_client_id",
"clientSecret": "your_client_secret",
"refreshToken": "your_refresh_token",
"dataSources": [
"derived:com.google.step_count.delta",
"derived:com.google.heart_rate.bpm",
"derived:com.google.sleep.segment"
]
}
}
}
}
// ??????
async function getTodaySteps(accessToken) {
const today = new Date();
const startOfDay = new Date(today.setHours(0, 0, 0, 0)).getTime();
const response = await fetch(
`https://www.googleapis.com/fitness/v1/users/me/dataSources/derived:com.google.step_count.delta/datasets/${startOfDay}`,
{ headers: { Authorization: 'Bearer ' + accessToken } }
);
const data = await response.json();
return data.point?.reduce((sum, p) => sum + parseInt(p.value[0].intVal), 0) || 0;
}
???????????
3.1 ??????
?? OpenClaw ??????????? API,??????????:
// skills/health-tracker/food-tracker.js
module.exports = {
async analyzeFoodImage(imagePath) {
// ?????? API(? Google Vision ?????)
const nutritionData = await recognizeFood(imagePath);
return {
foodName: nutritionData.name,
calories: nutritionData.calories,
protein: nutritionData.protein,
carbs: nutritionData.carbohydrates,
fat: nutritionData.fat,
// ??????
advice: this.generateAdvice(nutritionData)
};
},
generateAdvice(data) {
const advice = [];
if (data.calories > 800) advice.push('?? ??????,????????');
if (data.protein < 10) advice.push('?? ???????,??????????');
if (data.carbohydrates > 100) advice.push('?? ???????,??????');
return advice.join(';');
}
};
3.2 ??????
????,OpenClaw ????????????:
??:????????
??:?? ??????:
?? ??:???? + ?? + ??(? 450 kcal)
?? ??:?????(? 780 kcal)
?? ??:?????(? 350 kcal)
? ??:?? 30g(? 180 kcal)
??:1760 kcal(?? 2000 kcal)
???:98g ? ??
?????:210g ?? ??
??:65g ? ??
?? ??:?????30??,??????????
??????????
????????? PDF ??,?????????OpenClaw ??:
- ?? PDF ??????????
- ??????(?????????????)
- ???????,??????
- ???????????
// skills/health-tracker/report-analyzer.js
module.exports = {
async analyzeReport(pdfPath) {
const text = await extractTextFromPDF(pdfPath);
const indicators = this.extractIndicators(text);
const trends = await this.compareWithHistory(indicators);
return {
summary: this.generateSummary(indicators, trends),
alerts: this.getAlerts(indicators),
recommendations: this.getRecommendations(indicators, trends)
};
},
getAlerts(indicators) {
const alerts = [];
if (indicators.bloodPressure.systolic > 140) {
alerts.push('?? ?????(' + indicators.bloodPressure.systolic + 'mmHg),????????');
}
if (indicators.fastingGlucose > 6.1) {
alerts.push('?? ??????(' + indicators.fastingGlucose + 'mmol/L),????????');
}
return alerts;
}
};
???????????
?? OpenClaw ? cron ????,??????????:
{
"cron": [
{
"id": "water-reminder",
"schedule": "0 9-18 * * *",
"task": "???????",
"message": "?? ????!???? 3 ?,?? 8 ??"
},
{
"id": "stand-reminder",
"schedule": "0 10,14,16 * * 1-5",
"task": "????",
"message": "?? ????1???,????5???!"
},
{
"id": "sleep-reminder",
"schedule": "0 22 * * *",
"task": "????",
"message": "?? ??10??,??????????!"
},
{
"id": "weekly-report",
"schedule": "0 8 * * 1",
"task": "????????",
"actions": [
"??????????????",
"??????",
"????????"
]
}
]
}
???????
- ????:???????????,??????
- ????:????????????
- ????:??????????????????
- ????:??????????,??????????
??
?? OpenClaw,????????????????????????????????,??????????,?????????,?? AI ??????????????,???????????????,??????????
