Um eine hohe Flexibilität zu erhalten, können in den `.json` Dateien bei den Kommandos [f-Strings](https://www.python.org/dev/peps/pep-0498/) verwendet werden. Somit kann man die zu sendenen Nachrichten sehr flexibel anpassen, formatieren oder sogar weitere Berechnungen anstellen.
### Beispiele
<details><summary>:memo: Eingehenden Wert in ohne Dezimalstellen senden</summary>
```python
"VOLT: {int(value)}"
```
</details>
<details><summary>:memo: Einen Wert als Hexadezimalzahl mit 2*4 Bit senden</summary>
```python
"VOLT: {value:02x}"
```
</details>
<details><summary>:memo: Einen Wert nur senden, wenn er unter einem Grenzwert liegt (Bsp.: unter 100)</summary>
```python
"VOLT: {value if value < 100 else 0}"
```
</details>
<details><summary>:memo: Nur 2 Dezimalstellen eines Wertes senden</summary>
:warning: Falls Strings innerhalb der Kommandos verwendet werden, müssen diese mit einzelnen Anführungszeichen angegeben werden (`SHIFT` + `#` = `'`)
# Aufbau
Eine Gerätekonfigurationsdatei ist wie folgt aufgebaut:
***name**: der Name des Geräts (nicht essenziell zur ausführung)
***desc**: eine Beschreibung des Geräts
***port_config**: die Konfiguration der seriellen Schnittstelle. Werte sind analog zu den von der [pySerial Bibliothek](https://pyserial.readthedocs.io/en/latest/pyserial_api.html#serial.Serial)
***baudrate**: die Baudrate als Zahl
***bytesize**: die Anzahl der Bytes pro Nachrichtenblock (`FIVEBITS`, `SIXBITS`, `SEVENBITS`, `EIGHTBITS`)
## name
der Name des Geräts (nicht essenziell zur Ausführung)
## desc
eine Beschreibung des Geräts
## port_config
die Konfiguration der seriellen Schnittstelle. Werte sind analog zu den von der [pySerial Bibliothek](https://pyserial.readthedocs.io/en/latest/pyserial_api.html#serial.Serial)
### baudrate
die Baudrate als Zahl
### bytesize
die Anzahl der Bytes pro Nachrichtenblock (`FIVEBITS`, `SIXBITS`, `SEVENBITS`, `EIGHTBITS`)
***parity**: die Parität (`PARITY_NONE`, `PARITY_EVEN`, `PARITY_ODD`, `PARITY_MARK`, `PARITY_SPACE`)
***stopbits**: die Anzahl der Stopbits por Nachrichtenblock (`STOPBITS_ONE`, `STOPBITS_ONE_POINT_FIVE`, `STOPBITS_TWO`)
***timeout**: der Lesetimeout in Sekunden (kann Dezimalzahl sein)
### stopbits
die Anzahl der Stopbits por Nachrichtenblock (`STOPBITS_ONE`, `STOPBITS_ONE_POINT_FIVE`, `STOPBITS_TWO`)
### timeout
der Lesetimeout in Sekunden (kann Dezimalzahl sein)
***commands**:
***general**: generelle Kommandos, wie z.B.: An- und Ausschalten
***enable**: Kommando um das Messen zu aktivieren oder deaktivieren
* :ballot_box_with_check: hier kann ein f-String verwendet werden. Der übergebene Wert `value` kann `True` oder `False` sein
* **set_mode**: Kommando um den Modus des Geräts zu verstellen
* :ballot_box_with_check: hier kann ein f-String verwendet werden. Der übergebene Wert `value` kann je nach Schrittkonfiguration `voltage`, `current`, `resistance` oder `power` sein.