# ============================================================================ # .env.deployed — a REDACTED snapshot of the .env actually running on the # robot at /opt/sanad_api_eng/.env (mode 600, root). # # This is the real deployed configuration, captured so the folder is a # complete record of what is live. THE TOKENS HAVE BEEN REMOVED: # # DEVICE_TOKEN=REPLACE_WITH_ECO_DEV_TOKEN <- was the working eco-dev token # SERVER_2_TOKEN= <- was already empty (eco 401s) # # Every other value is exactly what the live service is using. # # To rebuild the robot from this file: # scp agent/.env.deployed ubuntu@10.210.136.150:/tmp/.env # ssh ubuntu@10.210.136.150 'sudo install -m600 -o root -g root /tmp/.env \ # /opt/sanad_api_eng/.env && rm /tmp/.env' # # then put the real token back: # ssh ubuntu@10.210.136.150 "sudo sed -i \ # 's#^DEVICE_TOKEN=.*#DEVICE_TOKEN=#' /opt/sanad_api_eng/.env && \ # sudo systemctl restart sanad-api-eng" # ============================================================================ # sanad_api_eng — EngineAI PM01 (10.210.136.150). LIVE CONFIG. # Generated from .env.example; every value below was verified on this robot. # ── fleet servers (same payload to every enabled one) ──────────────────────── SERVER_URL=https://eco-dev.yslootahrobotics.com DEVICE_TOKEN=REPLACE_WITH_ECO_DEV_TOKEN SERVER_NAME=eco-dev SERVER_ENABLE=1 # eco (production) rejected the token above with 401 — identically to a garbage # token, so it is the app's auth layer, not a firewall. eco issues its own # tokens. Paste it below and set SERVER_2_ENABLE=1, then restart the service. SERVER_2_URL=https://eco.yslootahrobotics.com SERVER_2_TOKEN= SERVER_2_NAME=eco SERVER_2_ENABLE=0 SERVER_2_SHARE_TOKEN=0 # ── identity ───────────────────────────────────────────────────────────────── SN=PM01-1421326045624 ROBOT_NAME=pm01_150 ROBOT_BRAND=engineai ROBOT_TYPE=humanoid ROBOT_MODEL=pm01 ROBOT=sanad STORAGE_DATA_PATH=/home/ubuntu/sanad_t8/data # ── PM01 state source ──────────────────────────────────────────────────────── ENG_SOURCE=ros2 ENG_TOPIC_POWER=/hardware/power_info ENG_TYPE_POWER=interface_protocol/msg/PowerInfo ENG_TOPIC_MOTORS=/hardware/motor_debug ENG_TYPE_MOTORS=interface_protocol/msg/MotorDebug ENG_TOPIC_JOINTS=/hardware/joint_state ENG_TYPE_JOINTS=interface_protocol/msg/JointState ENG_TOPIC_MOTION=/motion/motion_state ENG_TYPE_MOTION=interface_protocol/msg/MotionState ENG_TOPIC_ODOM= ENG_TYPE_ODOM=nav_msgs/msg/Odometry ROS_DOMAIN_ID=69 ENG_ROS_QOS=best_effort ENG_JOINT_MIN_PERIOD=0.05 ENG_MOTOR_MIN_PERIOD=0.2 # ── field mapping ──────────────────────────────────────────────────────────── ENG_FIELD_SOC=percentage ENG_FIELD_VOLTAGE=voltage ENG_FIELD_CURRENT=current ENG_FIELD_CURRENT_LIMIT=current_limit ENG_FIELD_POWER_ERR=error_code ENG_FIELD_POWER_ENABLE=enable ENG_FIELD_TEMP= ENG_FIELD_SOH= ENG_FIELD_CYCLES= ENG_FIELD_TEMPS=motor_temperature ENG_FIELD_MOS_TEMPS=mos_temperature ENG_FIELD_MOTOR_ERR=error_code ENG_FIELD_MOTOR_OFFLINE=offline ENG_FIELD_VEL=velocity ENG_FIELD_MOTION=current_motion_task ENG_FIELD_TRANSITIONS=available_transition_motions ENG_FIELD_X=pose.pose.position.x ENG_FIELD_Y=pose.pose.position.y ENG_FIELD_FW= # ── unit conventions (measured on this robot) ──────────────────────────────── ENG_SOC_SCALE=percent ENG_CURRENT_SIGN=-1 ENG_VOLTAGE_SCALE=1 ENG_CURRENT_SCALE=1 # ── position (no odometry on the PM01 — reports null, never a fake origin) ─── ENG_POSITION_SOURCE=none ENG_POSITION_URL=http://127.0.0.1:8014/api/nav/status ENG_POSITION_FIELD_X=pose.x ENG_POSITION_FIELD_Y=pose.y ENG_POSITION_INTERVAL=2 ROSBRIDGE_URL=ws://127.0.0.1:9090 # ── identity / networking ──────────────────────────────────────────────────── MAC_INTERFACE=wlP1p1s0 # ── fault thresholds ───────────────────────────────────────────────────────── LOW_SOC=50 MOTOR_TEMP_MAX=85 MOS_TEMP_MAX=100 MOVING_VEL=0.15 # ── cadence / transport ────────────────────────────────────────────────────── POLL_INTERVAL=2 VERIFY_TLS=1 HTTP_TIMEOUT=30 TZ_OFFSET_HOURS=4 # ── map sync ───────────────────────────────────────────────────────────────── MAPS_DIR=/home/ubuntu/sanad_t8/data/maps EXTRA_MAP_DIRS= DATA_DIR=/home/ubuntu/sanad_t8/data STATE_DIR=/var/lib/sanad_api_eng MAP_SELECT=all MAP_UPLOAD_MODE=multipart MAP_POLL_INTERVAL=30 MAP_MAX_UPLOAD_MB=7 WEB_NAV3_URL= # ── logs + alerts ──────────────────────────────────────────────────────────── LOGS_INTERVAL=60 PROJECT_LOG_CONTAINER=auto PROJECT_LOG_PATH= PROJECT_LOG_LABEL= PROJECT_LOG_BACKFILL=100 ALERT_SCAN_INTERVAL=10 ALERT_LOG_COOLDOWN=300 # ── remote ─────────────────────────────────────────────────────────────────── REMOTE_ENABLE=1 REMOTE_PORTS=8014,8001,9002,9003,8000,8080 REMOTE_KIND=web REMOTE_INTERVAL=60 REMOTE_URL= REMOTE_HOST= SSH_REGISTER=1 SSH_USER=ubuntu SSH_PORT=22 # ── control (READ-ONLY) ────────────────────────────────────────────────────── CONTROL_STATUS_URL=http://127.0.0.1:8014/api/controller/status CONTROL_ENABLE=0 # raw subscriptions for the 500Hz/100Hz topics (see AGENT_README) ENG_RAW_SUBSCRIBE=1 ERROR_LOG_COOLDOWN=60