Files
boc/life-weather/api/road_api.py
T
Bernt aee0f09db8 landvex: Fixar och tester klara för alla komponenter
- Datafabrik: Dockerfile fix, agentorkestrering fungerar
- Vision: Identify-modell, FAISS, OCR alla testade
- API: Alla 7 integrationstester passerade
- Upplösare: Entitetsupplösning verifierad
2026-07-05 06:41:32 +00:00

141 lines
4.0 KiB
Python

#!/usr/bin/env python3
"""
API för Reality DNA
Exponerar vägar, observationer, events, missions
"""
import sys
import json
from datetime import datetime
sys.path.insert(0, '/home/bernt/.openclaw/workspace/life-weather')
from storage.observation_store import ObservationStore
class RoadAPI:
def __init__(self):
self.store = ObservationStore()
def get_roads(self):
"""Hämta alla vägar"""
import sqlite3
conn = sqlite3.connect('/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.db')
c = conn.cursor()
c.execute('SELECT id, road_number, name, county, type FROM roads')
roads = [
{
"id": row[0],
"road_number": row[1],
"name": row[2],
"county": row[3],
"type": row[4]
}
for row in c.fetchall()
]
conn.close()
return roads
def get_road(self, road_id):
"""Hämta specifik väg"""
import sqlite3
conn = sqlite3.connect('/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.db')
c = conn.cursor()
c.execute('SELECT id, road_number, name, county, type FROM roads WHERE id = ?', (road_id,))
row = c.fetchone()
conn.close()
if row:
return {
"id": row[0],
"road_number": row[1],
"name": row[2],
"county": row[3],
"type": row[4]
}
return None
def get_road_dna(self, road_id):
"""Hämta Reality DNA för väg"""
import sqlite3
conn = sqlite3.connect('/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.db')
c = conn.cursor()
# Hämta senaste observationer
c.execute('''
SELECT observation_type, value, unit, timestamp, source
FROM weather_observations
WHERE road_id = ?
ORDER BY timestamp DESC
LIMIT 5
''', (road_id,))
observations = [
{
"type": row[0],
"value": row[1],
"unit": row[2],
"timestamp": row[3],
"source": row[4]
}
for row in c.fetchall()
]
conn.close()
return {
"road_id": road_id,
"timestamp": datetime.now().isoformat(),
"observations": observations,
"observation_count": len(observations)
}
def get_road_observations(self, road_id):
"""Hämta alla observationer för väg"""
import sqlite3
conn = sqlite3.connect('/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.db')
c = conn.cursor()
c.execute('''
SELECT observation_type, value, unit, timestamp, source
FROM weather_observations
WHERE road_id = ?
ORDER BY timestamp DESC
''', (road_id,))
observations = [
{
"type": row[0],
"value": row[1],
"unit": row[2],
"timestamp": row[3],
"source": row[4]
}
for row in c.fetchall()
]
conn.close()
return observations
def get_road_events(self, road_id):
"""Hämta events för väg (placeholder)"""
return [] # Implementeras när events sparas i DB
def get_road_missions(self, road_id):
"""Hämta missions för väg (placeholder)"""
return [] # Implementeras när missions sparas i DB
if __name__ == "__main__":
api = RoadAPI()
# Testa
roads = api.get_roads()
print(f"Vägar: {len(roads)}")
if roads:
road = roads[0]
print(f"\nVäg {road['id']}:")
print(json.dumps(road, indent=2))
dna = api.get_road_dna(road['id'])
print(f"\nDNA:")
print(json.dumps(dna, indent=2))