ICM – Computer Science Major – Course unit on Interoperability of Data and Semantics and M1 Cyber Physical and Social Systems – Course unit on System Modeling

Institut Henri Fayol - MINES Saint-Étienne

Objectives and deliverable

You will gain experience through this practical work, where you need to demonstrate your know-how based on screenshots, documents, and programs.

The deadline for this practical work is 2025-11-14

submit your work as LASTNAME.zip to https://ecampus.emse.fr/mod/assign/view.php?id=34360 (expiration date/time: 2025-11-15 01:00 )

The zip should contain one directory per section below. Each directory must contain screenshots, documents, or the sources of a program, that together demonstrate you acquired each know-how listed in the corresponding section.

For this practical work it’s ok to use LLMs. Just make sure the output does what I ask !

Example: Sources of a program

If a Section 01 - xyz mentions:

Write a python script to…​

Your deliverable MUST contain a folder (named for ex. 01) with the sources of a simple script to do what is asked, and a README.md` with explanations for how to reproduce (what to install, what command to execute)

You SHOULD use any relevant existing libraries for addressing the problems, and you CAN use generative AI if appropriate.
Not a word document. Not a pdf document. Not a screenshot. No temporary files such as libraries or .venv folders.

Example: Videos or screenshots

If a Section 01 - xyz mentions:

Show me you can …​

Your deliverable MUST contain a folder (named for ex. 01) with a video or a sequence of screenshots that demonstrate you know how to do what is asked.

Not a word document. Not a pdf document. Compress your videos with ffmpeg (ask google or chatGPT)

Example: Documents

If a Section 01 - xyz mentions:

Write a document that …​

Your deliverable MUST contain a folder (named for ex. 01) with the sources of the document (valid, with the right extension, etc).

Not a word document. Not a pdf document. Not a screenshot.

01 - NodOn EnOcean device payload

NodOn is a French manufacturer specializing in smart home and building automation devices, particularly wireless actuators and sensors based on protocols such as EnOcean, Zigbee, and Z-Wave.

The EnOcean Micro Smart Plug is a Micro Smart Plug that communicates using the EnOcean radio protocol, enabling wireless control of electrical devices without requiring additional wiring.

EnOcean devices have a standardized interface and payload format by the name of a EnOcean Equipment Profile (EEP), specified by the EnOcean Alliance.

Technical Specification EnOcean Equipment Profiles V 3.1 may be useful for this question, together with the official EnOcean Equipment Profiles to find the specification of the one you’re looking for.

Implement a program that simulates interaction with the device, by taking as input or outputing a payload given as a string of bytes 0x0102030405…​. Any error shall be reported to the standard error. The program shall print the result to the standard output in JSON.

The device can switch ON/OFF only one electrical device. It can measure its consumption power/energy. It cannot dim the device. We only consider one channel: the input channel (from mains supply). Furthermore, we only need to support two commands:

  • CMD 0x1 - Actuator Set Output

  • CMD 0x7 - Actuator Measurement Response

For example:

$ python enocean.py decode 0x011F00 --format json
{"on": false}
$ python enocean.py set on
0x011F01
$ python enocean.py decode 0x077F0B74 --format json
{"value": 2932, "unit": "W"}
$ python enocean.py measure --unit W 2932
0x077F0B74
I’ll grade based on the result of some tests. two encoding, two decoding, two sorts of errors
I tried to solve this exercise with different LLMs, don’t trust their output! Read, understand, compare the answer to the spec, adapt. Try other unit tests.

02 - Open Data - CSV

Here are two CSV documents available on the French Open Data portal.

  1. Demonstrate that you can properly load this dataset into Excel or OpenOffice Calc, ensuring that each value is placed in its own cell.

  2. Compute the average of values in column CONC from this documents (even if the result has no practical meaning, the goal is to show technical mastery of basic operations).

  1. Demonstrate that you can properly load this dataset into Excel or OpenOffice Calc, ensuring again that each value is in its own cell.

  2. Compute the sum of values in the last column in this documents.

03 - GeoNames

GeoNames is a freely available geographical database that provides names and attributes of places all over the world. Its public dumps contain tab-separated text files with information ranging from countries and administrative divisions down to cities, villages, and even natural features. These datasets are widely used for location-based applications.

  1. Show me you know how to properly load the following document into Excel or OpenOffice Calc, with one value per cell: GeoName’s names for administrative subdivision. Columns: code, name, name ascii, geonameid

  2. By combining the file of step 1 with file country information, write a program that outputs a CSV document with columns: ISO code, country name, population, number of admin1 regions, number of admin2 regions.

  3. Write a program that gets for a given place in France given as argument, and using the GeoNames dump for France:

    • what is the closest farm (give the distance in kilometers)

    • what is the fipscode* display name and the second administrative division display name of the division where this place is located

    • what is the total population of the first administrative division where this place is (i.e., a state in the US, région in France)

    • what are the five closest cities, villages, etc., ordered by ascending distance from the location

04 - GitHub issues

Information about a GitHub project can be obtained from the GitHub JSON API at https://api.github.com/repos/{org}/{project}.

  • Show me you can validate your JSON documents online.

  • Show me you can prettify your JSON documents online.

  • Show me you use a text editor with syntax highlighting for JSON

  • Show me you can validate a JSON document in your text editor

  • Show me you can prettify (format) a JSON document in your text editor

Write a program that takes as input a string {org}/{project}, and outputs:

  • one big JSON document that concatenates all the issues (open and closed) in a single array.

  • Which issue was closed the fastest?

  • Which issue received the largest number of reactions?

  • Get the top 5 users by number of issues they created + number of issues they closed

  • For each possible type of reaction, get the top 5 users by number of this reaction they added on issues

I don’t want pull requests. I want open and closed issues. I want them all.

GitHub enforces some API rate limits. Create a personal token and include it in the header of your API calls.