diff --git a/.github/catalog/models.json b/.github/catalog/models.json index 960b72a..6c25a9c 100644 --- a/.github/catalog/models.json +++ b/.github/catalog/models.json @@ -1 +1 @@ -{"ok":true,"data":{"models":[{"type":"ECT02","name":"LetPot ECT"},{"type":"ISE03","name":"LetPot ISE D1"},{"type":"ISE05","name":"LetPot ISE D2"},{"type":"ISE06","name":"LetPot ISE D3"},{"type":"LPH27","name":"LetPot LPH-SE"},{"type":"LPH31","name":"LetPot LPH-SE"},{"type":"LPH32","name":"LetPot LPH-SE"},{"type":"LPH33","name":"LetPot LPH-SE"},{"type":"LPH37","name":"LetPot LPH-SE"},{"type":"LPH60","name":"LetPot LPH-Max"},{"type":"LPH61","name":"LetPot LPH-Max"},{"type":"LPH62","name":"LetPot LPH-Max"},{"type":"LPH63","name":"LetPot LPH-Max"},{"type":"LPH64","name":"LetPot LPH-Max"},{"type":"LPH65","name":"LetPot LPH-Max"}]}} \ No newline at end of file +{"ok":true,"data":{"models":[{"type":"ECT02","name":"LetPot ECT"},{"type":"IGS01","name":"LetPot LPH-Pro"},{"type":"ISE03","name":"LetPot ISE D1"},{"type":"ISE05","name":"LetPot ISE D2"},{"type":"ISE06","name":"LetPot ISE D3"},{"type":"LCH10","name":"LetPot LPH-Elite"},{"type":"LPH11","name":"LetPot LPH-Mini"},{"type":"LPH21","name":"LetPot LPH-Air"},{"type":"LPH22","name":"LetPot LPH-Air"},{"type":"LPH27","name":"LetPot LPH-SE"},{"type":"LPH31","name":"LetPot LPH-SE"},{"type":"LPH32","name":"LetPot LPH-SE"},{"type":"LPH33","name":"LetPot LPH-SE"},{"type":"LPH37","name":"LetPot LPH-SE"},{"type":"LPH39","name":"LetPot LPH-Mini"},{"type":"LPH42","name":"LetPot LPH-Lite"},{"type":"LPH60","name":"LetPot LPH-Max"},{"type":"LPH61","name":"LetPot LPH-Max"},{"type":"LPH62","name":"LetPot LPH-Max"},{"type":"LPH63","name":"LetPot LPH-Max"},{"type":"LPH64","name":"LetPot LPH-Max"},{"type":"LPH65","name":"LetPot LPH-Max"}]}} \ No newline at end of file diff --git a/.github/catalog/models/IGS01.json b/.github/catalog/models/IGS01.json new file mode 100644 index 0000000..911b74b --- /dev/null +++ b/.github/catalog/models/IGS01.json @@ -0,0 +1 @@ +{"ok":true,"data":{"type":"IGS01","catalogVersion":"0.3.0","dataPoints":[{"key":"network_status","dataType":"number","mode":"ro","label":"Network Status"},{"key":"system_status","dataType":"number","mode":"ro","label":"System Status"},{"key":"main_switch","dataType":"boolean","mode":"rw","label":"Power Switch"},{"key":"pump_switch","dataType":"boolean","mode":"rw","label":"Pump Switch"},{"key":"light_mode","dataType":"enum","mode":"rw","label":"Light Mode","options":[{"value":0,"label":"Fruiting"},{"value":1,"label":"Leafy Greens"}]},{"key":"planting_days","dataType":"number","mode":"rw","min":0,"max":999,"step":1,"label":"Planting Days"},{"key":"light_on_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light On Hour"},{"key":"light_on_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light On Minute"},{"key":"light_off_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light Off Hour"},{"key":"light_off_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light Off Minute"},{"key":"command_result","dataType":"number","mode":"ro","label":"Command Result"}],"components":[{"id":"light_schedule","kind":"schedule","dps":{"onHour":"light_on_hour","onMinute":"light_on_minute","offHour":"light_off_hour","offMinute":"light_off_minute"}}],"name":"LetPot LPH-Pro","statusCodes":[{"code":1,"severity":"error","label":"Low Water / Low Nutrient"}]}} \ No newline at end of file diff --git a/.github/catalog/models/ISE06.json b/.github/catalog/models/ISE06.json index 3f9138d..a1ba723 100644 --- a/.github/catalog/models/ISE06.json +++ b/.github/catalog/models/ISE06.json @@ -1 +1 @@ -{"ok":true,"data":{"type":"ISE06","catalogVersion":"0.3.0","dataPoints":[{"key":"network_status","dataType":"number","mode":"ro","label":"Network Status"},{"key":"system_status","dataType":"number","mode":"ro","label":"System Status"},{"key":"pump_status","dataType":"boolean","mode":"ro","label":"Pump Status"},{"key":"pump_trigger","dataType":"enum","mode":"ro","label":"Pump Trigger","options":[{"value":0,"label":"Off"},{"value":1,"label":"Button"},{"value":2,"label":"APP"},{"value":3,"label":"Auto Cycle"}]},{"key":"manual_pump_minutes","dataType":"number","mode":"ro","label":"Manual Pump Time"},{"key":"remaining_seconds","dataType":"number","mode":"ro","label":"Remaining Seconds"},{"key":"cycle_switch","dataType":"boolean","mode":"rw","label":"Cycle Switch"},{"key":"cycle_period","dataType":"number","mode":"rw","min":0,"max":9999,"step":1,"label":"Cycle Period (hours)"},{"key":"cycle_pump_minutes","dataType":"number","mode":"rw","min":1,"max":9999,"step":1,"label":"Cycle Pump Time (min)"},{"key":"cycle_water_mode","dataType":"enum","mode":"rw","label":"Cycle Water Mode","options":[{"value":0,"label":"Continuous"},{"value":1,"label":"Intermittent"}]},{"key":"intermittent_work_secs","dataType":"number","mode":"rw","min":1,"max":9999,"step":1,"label":"Work Duration (s)"},{"key":"intermittent_rest_secs","dataType":"number","mode":"rw","min":1,"max":9999,"step":1,"label":"Rest Duration (s)"},{"key":"single_pump_switch","dataType":"boolean","mode":"wo","label":"Single Pump"},{"key":"single_pump_minutes","dataType":"number","mode":"rw","min":0,"max":9999,"step":1,"label":"Single Pump Time (min)"},{"key":"last_pump_reason","dataType":"number","mode":"ro","label":"Last Pump Reason"},{"key":"last_pump_ago","dataType":"number","mode":"ro","label":"Last Pump Ago (s)"},{"key":"next_pump_in","dataType":"number","mode":"ro","label":"Next Pump In (s)"},{"key":"pause_remaining_mins","dataType":"number","mode":"ro","label":"Pause Remaining (min)"},{"key":"skip_water_hours","dataType":"number","mode":"wo","min":0,"max":255,"step":1,"unit":"hour","label":"Skip Watering"},{"key":"command_result","dataType":"number","mode":"ro","label":"Command Result"}],"components":[],"name":"LetPot ISE D3","statusCodes":[{"code":1,"severity":"error","label":"Tank Empty"},{"code":2,"severity":"error","label":"Pipe Blocked"}]}} \ No newline at end of file +{"ok":true,"data":{"type":"ISE06","catalogVersion":"0.3.0","dataPoints":[{"key":"network_status","dataType":"number","mode":"ro","label":"Network Status"},{"key":"system_status","dataType":"number","mode":"ro","label":"System Status"},{"key":"pump_status","dataType":"boolean","mode":"ro","label":"Pump Status"},{"key":"pump_trigger","dataType":"enum","mode":"ro","label":"Pump Trigger","options":[{"value":0,"label":"Off"},{"value":1,"label":"Button"},{"value":2,"label":"APP"},{"value":3,"label":"Auto Cycle"}]},{"key":"manual_pump_minutes","dataType":"number","mode":"ro","label":"Manual Pump Time"},{"key":"remaining_seconds","dataType":"number","mode":"ro","label":"Remaining Seconds"},{"key":"cycle_switch","dataType":"boolean","mode":"rw","label":"Cycle Switch"},{"key":"cycle_period","dataType":"number","mode":"rw","min":0,"max":9999,"step":1,"label":"Cycle Period (hours)"},{"key":"cycle_pump_minutes","dataType":"number","mode":"rw","min":1,"max":9999,"step":1,"label":"Cycle Pump Time (min)"},{"key":"cycle_water_mode","dataType":"enum","mode":"rw","label":"Cycle Water Mode","options":[{"value":0,"label":"Continuous"},{"value":1,"label":"Intermittent"}]},{"key":"intermittent_work_secs","dataType":"number","mode":"rw","min":1,"max":9999,"step":1,"label":"Work Duration (s)"},{"key":"intermittent_rest_secs","dataType":"number","mode":"rw","min":1,"max":9999,"step":1,"label":"Rest Duration (s)"},{"key":"single_pump_switch","dataType":"boolean","mode":"wo","label":"Single Pump"},{"key":"single_pump_minutes","dataType":"number","mode":"rw","min":0,"max":9999,"step":1,"label":"Single Pump Time (min)"},{"key":"last_pump_reason","dataType":"number","mode":"ro","label":"Last Pump Reason"},{"key":"last_pump_ago","dataType":"number","mode":"ro","label":"Last Pump Ago (s)"},{"key":"next_pump_in","dataType":"number","mode":"ro","label":"Next Pump In (s)"},{"key":"pause_remaining_mins","dataType":"number","mode":"ro","label":"Pause Remaining (min)"},{"key":"skip_water_hours","dataType":"number","mode":"wo","min":0,"max":72,"step":1,"unit":"hour","label":"Skip Watering"},{"key":"command_result","dataType":"number","mode":"ro","label":"Command Result"}],"components":[],"name":"LetPot ISE D3","statusCodes":[{"code":1,"severity":"error","label":"Tank Empty"},{"code":2,"severity":"error","label":"Pipe Blocked"}]}} \ No newline at end of file diff --git a/.github/catalog/models/LCH10.json b/.github/catalog/models/LCH10.json new file mode 100644 index 0000000..ae8ef3e --- /dev/null +++ b/.github/catalog/models/LCH10.json @@ -0,0 +1 @@ +{"ok":true,"data":{"type":"LCH10","catalogVersion":"0.3.0","dataPoints":[{"key":"network_status","dataType":"number","mode":"ro","label":"Network Status"},{"key":"system_status","dataType":"number","mode":"ro","label":"System Status"},{"key":"main_switch","dataType":"boolean","mode":"rw","label":"Power Switch"},{"key":"pump_switch","dataType":"boolean","mode":"rw","label":"Pump Switch"},{"key":"light_mode","dataType":"enum","mode":"rw","label":"Light Mode","options":[{"value":0,"label":"Fruiting"},{"value":1,"label":"Leafy Greens"}]},{"key":"planting_days","dataType":"number","mode":"rw","min":0,"max":999,"step":1,"label":"Planting Days"},{"key":"light_on_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light On Hour"},{"key":"light_on_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light On Minute"},{"key":"light_off_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light Off Hour"},{"key":"light_off_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light Off Minute"},{"key":"brightness","dataType":"enum","mode":"rw","label":"Brightness","options":[{"value":1000,"label":"High"},{"value":500,"label":"Low"}]},{"key":"buzzer_switch","dataType":"boolean","mode":"rw","label":"Alarm Sound"},{"key":"pump_status","dataType":"enum","mode":"ro","label":"Pump Status","options":[{"value":0,"label":"Resting"},{"value":1,"label":"Running"}]},{"key":"light_status","dataType":"enum","mode":"ro","label":"Light Status","options":[{"value":0,"label":"Off"},{"value":1,"label":"On"}]},{"key":"command_result","dataType":"number","mode":"ro","label":"Command Result"}],"components":[{"id":"light_schedule","kind":"schedule","dps":{"onHour":"light_on_hour","onMinute":"light_on_minute","offHour":"light_off_hour","offMinute":"light_off_minute"}}],"name":"LetPot LPH-Elite","statusCodes":[{"code":1,"severity":"error","label":"Low Water / Low Nutrient"},{"code":2,"severity":"error","label":"Pump Fault"}]}} \ No newline at end of file diff --git a/.github/catalog/models/LPH11.json b/.github/catalog/models/LPH11.json new file mode 100644 index 0000000..ebf38bb --- /dev/null +++ b/.github/catalog/models/LPH11.json @@ -0,0 +1 @@ +{"ok":true,"data":{"type":"LPH11","catalogVersion":"0.3.0","dataPoints":[{"key":"network_status","dataType":"number","mode":"ro","label":"Network Status"},{"key":"system_status","dataType":"number","mode":"ro","label":"System Status"},{"key":"main_switch","dataType":"boolean","mode":"rw","label":"Power Switch"},{"key":"pump_switch","dataType":"boolean","mode":"rw","label":"Pump Switch"},{"key":"light_mode","dataType":"enum","mode":"rw","label":"Light Mode","options":[{"value":0,"label":"Fruiting"},{"value":1,"label":"Leafy Greens"}]},{"key":"planting_days","dataType":"number","mode":"rw","min":0,"max":999,"step":1,"label":"Planting Days"},{"key":"light_on_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light On Hour"},{"key":"light_on_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light On Minute"},{"key":"light_off_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light Off Hour"},{"key":"light_off_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light Off Minute"},{"key":"buzzer_switch","dataType":"boolean","mode":"rw","label":"Alarm Sound"},{"key":"pump_status","dataType":"enum","mode":"ro","label":"Pump Status","options":[{"value":0,"label":"Resting"},{"value":1,"label":"Running"}]},{"key":"light_status","dataType":"enum","mode":"ro","label":"Light Status","options":[{"value":0,"label":"Off"},{"value":1,"label":"On"}]},{"key":"command_result","dataType":"number","mode":"ro","label":"Command Result"}],"components":[{"id":"light_schedule","kind":"schedule","dps":{"onHour":"light_on_hour","onMinute":"light_on_minute","offHour":"light_off_hour","offMinute":"light_off_minute"}}],"name":"LetPot LPH-Mini","statusCodes":[{"code":1,"severity":"error","label":"Low Water / Low Nutrient"},{"code":2,"severity":"error","label":"Pump Fault"}]}} \ No newline at end of file diff --git a/.github/catalog/models/LPH21.json b/.github/catalog/models/LPH21.json new file mode 100644 index 0000000..6dc0f77 --- /dev/null +++ b/.github/catalog/models/LPH21.json @@ -0,0 +1 @@ +{"ok":true,"data":{"type":"LPH21","catalogVersion":"0.3.0","dataPoints":[{"key":"network_status","dataType":"number","mode":"ro","label":"Network Status"},{"key":"system_status","dataType":"number","mode":"ro","label":"System Status"},{"key":"main_switch","dataType":"boolean","mode":"rw","label":"Power Switch"},{"key":"pump_switch","dataType":"boolean","mode":"rw","label":"Pump Switch"},{"key":"light_mode","dataType":"enum","mode":"rw","label":"Light Mode","options":[{"value":0,"label":"Fruiting"},{"value":1,"label":"Leafy Greens"}]},{"key":"planting_days","dataType":"number","mode":"rw","min":0,"max":999,"step":1,"label":"Planting Days"},{"key":"light_on_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light On Hour"},{"key":"light_on_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light On Minute"},{"key":"light_off_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light Off Hour"},{"key":"light_off_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light Off Minute"},{"key":"brightness","dataType":"enum","mode":"rw","label":"Brightness","options":[{"value":1000,"label":"High"},{"value":500,"label":"Low"}]},{"key":"buzzer_switch","dataType":"boolean","mode":"rw","label":"Alarm Sound"},{"key":"pump_status","dataType":"enum","mode":"ro","label":"Pump Status","options":[{"value":0,"label":"Resting"},{"value":1,"label":"Running"}]},{"key":"light_status","dataType":"enum","mode":"ro","label":"Light Status","options":[{"value":0,"label":"Off"},{"value":1,"label":"On"}]},{"key":"command_result","dataType":"number","mode":"ro","label":"Command Result"}],"components":[{"id":"light_schedule","kind":"schedule","dps":{"onHour":"light_on_hour","onMinute":"light_on_minute","offHour":"light_off_hour","offMinute":"light_off_minute"}}],"name":"LetPot LPH-Air","statusCodes":[{"code":1,"severity":"error","label":"Low Water / Low Nutrient"},{"code":2,"severity":"error","label":"Pump Fault"}]}} \ No newline at end of file diff --git a/.github/catalog/models/LPH22.json b/.github/catalog/models/LPH22.json new file mode 100644 index 0000000..a1cc629 --- /dev/null +++ b/.github/catalog/models/LPH22.json @@ -0,0 +1 @@ +{"ok":true,"data":{"type":"LPH22","catalogVersion":"0.3.0","dataPoints":[{"key":"network_status","dataType":"number","mode":"ro","label":"Network Status"},{"key":"system_status","dataType":"number","mode":"ro","label":"System Status"},{"key":"main_switch","dataType":"boolean","mode":"rw","label":"Power Switch"},{"key":"pump_switch","dataType":"boolean","mode":"rw","label":"Pump Switch"},{"key":"light_mode","dataType":"enum","mode":"rw","label":"Light Mode","options":[{"value":0,"label":"Fruiting"},{"value":1,"label":"Leafy Greens"}]},{"key":"planting_days","dataType":"number","mode":"rw","min":0,"max":999,"step":1,"label":"Planting Days"},{"key":"light_on_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light On Hour"},{"key":"light_on_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light On Minute"},{"key":"light_off_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light Off Hour"},{"key":"light_off_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light Off Minute"},{"key":"brightness","dataType":"enum","mode":"rw","label":"Brightness","options":[{"value":1000,"label":"High"},{"value":500,"label":"Low"}]},{"key":"buzzer_switch","dataType":"boolean","mode":"rw","label":"Alarm Sound"},{"key":"pump_status","dataType":"enum","mode":"ro","label":"Pump Status","options":[{"value":0,"label":"Resting"},{"value":1,"label":"Running"}]},{"key":"light_status","dataType":"enum","mode":"ro","label":"Light Status","options":[{"value":0,"label":"Off"},{"value":1,"label":"On"}]},{"key":"command_result","dataType":"number","mode":"ro","label":"Command Result"}],"components":[{"id":"light_schedule","kind":"schedule","dps":{"onHour":"light_on_hour","onMinute":"light_on_minute","offHour":"light_off_hour","offMinute":"light_off_minute"}}],"name":"LetPot LPH-Air","statusCodes":[{"code":1,"severity":"error","label":"Low Water / Low Nutrient"},{"code":2,"severity":"error","label":"Pump Fault"}]}} \ No newline at end of file diff --git a/.github/catalog/models/LPH39.json b/.github/catalog/models/LPH39.json new file mode 100644 index 0000000..47041a5 --- /dev/null +++ b/.github/catalog/models/LPH39.json @@ -0,0 +1 @@ +{"ok":true,"data":{"type":"LPH39","catalogVersion":"0.3.0","dataPoints":[{"key":"network_status","dataType":"number","mode":"ro","label":"Network Status"},{"key":"system_status","dataType":"number","mode":"ro","label":"System Status"},{"key":"main_switch","dataType":"boolean","mode":"rw","label":"Power Switch"},{"key":"pump_switch","dataType":"boolean","mode":"rw","label":"Pump Switch"},{"key":"light_mode","dataType":"enum","mode":"rw","label":"Light Mode","options":[{"value":0,"label":"Fruiting"},{"value":1,"label":"Leafy Greens"}]},{"key":"planting_days","dataType":"number","mode":"rw","min":0,"max":999,"step":1,"label":"Planting Days"},{"key":"light_on_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light On Hour"},{"key":"light_on_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light On Minute"},{"key":"light_off_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light Off Hour"},{"key":"light_off_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light Off Minute"},{"key":"buzzer_switch","dataType":"boolean","mode":"rw","label":"Alarm Sound"},{"key":"command_result","dataType":"number","mode":"ro","label":"Command Result"}],"components":[{"id":"light_schedule","kind":"schedule","dps":{"onHour":"light_on_hour","onMinute":"light_on_minute","offHour":"light_off_hour","offMinute":"light_off_minute"}}],"name":"LetPot LPH-Mini","statusCodes":[{"code":1,"severity":"error","label":"Low Water / Low Nutrient"}]}} \ No newline at end of file diff --git a/.github/catalog/models/LPH42.json b/.github/catalog/models/LPH42.json new file mode 100644 index 0000000..56661ec --- /dev/null +++ b/.github/catalog/models/LPH42.json @@ -0,0 +1 @@ +{"ok":true,"data":{"type":"LPH42","catalogVersion":"0.3.0","dataPoints":[{"key":"network_status","dataType":"number","mode":"ro","label":"Network Status"},{"key":"system_status","dataType":"number","mode":"ro","label":"System Status"},{"key":"main_switch","dataType":"boolean","mode":"rw","label":"Power Switch"},{"key":"pump_switch","dataType":"boolean","mode":"rw","label":"Pump Switch"},{"key":"light_mode","dataType":"enum","mode":"rw","label":"Light Mode","options":[{"value":0,"label":"Fruiting"},{"value":1,"label":"Leafy Greens"}]},{"key":"planting_days","dataType":"number","mode":"rw","min":0,"max":999,"step":1,"label":"Planting Days"},{"key":"light_on_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light On Hour"},{"key":"light_on_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light On Minute"},{"key":"light_off_hour","dataType":"number","mode":"rw","min":0,"max":23,"step":1,"label":"Light Off Hour"},{"key":"light_off_minute","dataType":"number","mode":"rw","min":0,"max":59,"step":1,"label":"Light Off Minute"},{"key":"brightness","dataType":"enum","mode":"rw","label":"Brightness","options":[{"value":1000,"label":"High"},{"value":500,"label":"Low"}]},{"key":"buzzer_switch","dataType":"boolean","mode":"rw","label":"Alarm Sound"},{"key":"pump_status","dataType":"enum","mode":"ro","label":"Pump Status","options":[{"value":0,"label":"Resting"},{"value":1,"label":"Running"}]},{"key":"light_status","dataType":"enum","mode":"ro","label":"Light Status","options":[{"value":0,"label":"Off"},{"value":1,"label":"On"}]},{"key":"command_result","dataType":"number","mode":"ro","label":"Command Result"}],"components":[{"id":"light_schedule","kind":"schedule","dps":{"onHour":"light_on_hour","onMinute":"light_on_minute","offHour":"light_off_hour","offMinute":"light_off_minute"}}],"name":"LetPot LPH-Lite","statusCodes":[{"code":1,"severity":"error","label":"Low Water / Low Nutrient"},{"code":2,"severity":"error","label":"Pump Fault"}]}} \ No newline at end of file