Specification
- Skill ID
- personamanagmentlayer/pcl/automotive-expert
- Publisher
- personamanagmentlayer
- Repository
- pcl
- Installs
- 0
- Files
- 2
- Synced
- Sep 23, 2026
How to use it
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
personamanagmentlayer/pcl/automotive-expertInstalls these files- SKILL.md
- references/FLEET_MANAGEMENT_SYSTEM.md
What this skill tells the agent
Automotive Expert
Expert guidance for automotive systems, connected vehicles, fleet management, telematics, advanced driver assistance systems (ADAS), and automotive software development.
Core Concepts
Automotive Systems
- Telematics and fleet management
- Connected car platforms
- Advanced Driver Assistance Systems (ADAS)
- Electric Vehicle (EV) management
- Vehicle-to-Everything (V2X) communication
- Infotainment systems
- Diagnostic systems (OBD-II)
Technologies
- CAN bus and automotive networks
- AUTOSAR architecture
- Over-the-air (OTA) updates
- Autonomous driving systems
- Battery management systems
- Computer vision for ADAS
- Edge computing in vehicles
Standards and Protocols
- ISO 26262 (functional safety)
- AUTOSAR (automotive software architecture)
- J1939 (heavy-duty vehicle communication)
- UDS (Unified Diagnostic Services)
- SOME/IP (service-oriented middleware)
- MQTT for telematics
- CAN, LIN, FlexRay protocols
Connected Vehicle Platform
@dataclass
class VehicleTelemetry:
"""Real-time vehicle telemetry data"""
vehicle_id: str
timestamp: datetime
location: tuple
speed_kmh: float
rpm: int
engine_temp_c: float
battery_voltage: float
fuel_level_percent: float
odometer_km: int
dtc_codes: List[str] # Diagnostic Trouble Codes
class ConnectedVehiclePlatform:
"""Connected car platform with OTA updates"""
def __init__(self):
self.vehicles = {}
self.telemetry_buffer = []
self.ota_updates = {}
def process_telemetry(self, telemetry: VehicleTelemetry) -> dict:
"""Process incoming telemetry data"""
self.telemetry_buffer.append(telemetry)
# Analyze telemetry for anomalies
alerts = []
# Check engine temperature
if telemetry.engine_temp_c > 110:
alerts.append({
'type': 'high_engine_temp',
'severity': 'warning',
'value': telemetry.engine_temp_c,
'message': 'Engine temperature above normal'
})
# Check battery voltage
if telemetry.battery_voltage < 12.0:
alerts.append({
'type': 'low_battery',
'severity': 'warning',
'value': telemetry.battery_voltage,
'message': 'Battery voltage low'
})
# Check for diagnostic trouble codes
if telemetry.dtc_codes:
alerts.append({
'type': 'dtc_codes',
'severity': 'critical',
'codes': telemetry.dtc_codes,
'message': f'{len(telemetry.dtc_codes)} diagnostic code(s) detected'
})
# Check for harsh driving
if len(self.telemetry_buffer) >= 2:
prev = self.telemetry_buffer[-2]
if telemetry.vehicle_id == prev.vehicle_id:
time_diff = (telemetry.timestamp - prev.timestamp).total_seconds()
if time_diff > 0:
acceleration = (telemetry.speed_kmh - prev.speed_kmh) / time_diff
if abs(acceleration) > 5: # > 5 km/h per second
alerts.append({
'type': 'harsh_driving',
'severity': 'info',
'acceleration': acceleration,
'message': 'Harsh acceleration/braking detected'
})
return {
'vehicle_id': telemetry.vehicle_id,
'timestamp': telemetry.timestamp.isoformat(),
'alerts': alerts,
'health_score': self._calculate_vehicle_health(telemetry)
}
def deploy_ota_update(self,
vehicle_ids: List[str],
update_package: dict) -> dict:
"""Deploy over-the-air software update"""
update_id = self._generate_update_id()
ota_update = {
'update_id': update_id,
'version': update_package['version'],
'description': update_package['description'],
'package_size_mb': update_package['size_mb'],
'target_vehicles': vehicle_ids,
'deployed_at': datetime.now(),
'status_by_vehicle': {}
}
for vehicle_id in vehicle_ids:
# Schedule update for vehicle
ota_update['status_by_vehicle'][vehicle_id] = {
'status': 'scheduled',
'download_progress': 0,
'install_progress': 0
}
self.ota_updates[update_id] = ota_update
return {
'update_id': update_id,
'vehicles_targeted': len(vehicle_ids),
'estimated_completion': 'Within 48 hours'
}
def diagnose_vehicle(self, vehicle_id: str, dtc_codes: List[str]) -> dict:
"""Diagnose vehicle issues from DTC codes"""
diagnoses = []
for code in dtc_codes:
diagnosis = self._lookup_dtc_code(code)
diagnoses.append(diagnosis)
# Calculate severity
max_severity = max(d['severity'] for d in diagnoses)
return {
'vehicle_id': vehicle_id,
'dtc_codes': dtc_codes,
'diagnoses': diagnoses,
'overall_severity': max_severity,
'service_recommended': max_severity in ['high', 'critical']
}
def _calculate_vehicle_health(self, telemetry: VehicleTelemetry) -> float:
"""Calculate overall vehicle health score"""
score = 100.0
# Engine temperature
if telemetry.engine_temp_c > 110:
score -= 15
elif telemetry.engine_temp_c > 100:
score -= 5
# Battery voltage
if telemetry.battery_voltage < 11.5:
score -= 20
elif telemetry.battery_voltage < 12.0:
score -= 10
# DTC codes
score -= len(telemetry.dtc_codes) * 15
return max(0.0, score)
def _lookup_dtc_code(self, code: str) -> dict:
"""Lookup diagnostic trouble code"""
# Simplified DTC lookup
# In production, would use comprehensive OBD-II code database
dtc_database = {
'P0171': {
'description': 'System Too Lean (Bank 1)',
'severity': 'medium',
'possible_causes': ['Vacuum leak', 'Faulty MAF sensor', 'Fuel filter clogged']
},
'P0300': {
'description': 'Random/Multiple Cylinder Misfire Detected',
'severity': 'high',
'possible_causes': ['Faulty spark plugs', 'Ignition coil failure', 'Fuel injector issue']
}
}
return dtc_database.get(code, {
'description': f'Unknown code: {code}',
'severity': 'medium',
'possible_causes': ['Requires diagnostic scan']
})
def _generate_update_id(self) -> str:
import uuid
return f"OTA-{uuid.uuid4().hex[:8].upper()}"Electric Vehicle Management
class ElectricVehicleManagement:
"""EV-specific management functions"""
def __init__(self):
self.charging_stations = {}
self.charging_sessions = []
def calculate_range(self,
battery_capacity_kwh: float,
battery_soc_percent: float,
consumption_kwh_per_km: float) -> dict:
"""Calculate remaining range for EV"""
available_energy = battery_capacity_kwh * (battery_soc_percent / 100)
range_km = available_energy / consumption_kwh_per_km
# Adjust for temperature (simplified)
# Cold weather reduces range by up to 40%
temperature_factor = 0.8 # Assume moderate conditions
adjusted_range = range_km * temperature_factor
return {
'nominal_range_km': range_km,
'adjusted_range_km': adjusted_range,More from personamanagmentlayer
Use this skill in a project
Open any RiverX project, search the Skills panel for personamanagmentlayer/pcl/automotive-expert, and install it in one click.
