Backup & Restore von Kalibrierungseinstellungen bei Konsolen die die http/JSON-API unterstützen

Für Geräte von froggit
Antworten
Benutzeravatar
olicat
Offline
Beiträge: 2029
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 28 mal
Danksagung erhalten: 414 mal
Kontaktdaten:

Backup & Restore von Kalibrierungseinstellungen bei Konsolen die die http/JSON-API unterstützen

#1

Beitrag von olicat »

Hi!

Da es teilweise (hier nicht!) wieder einmal Probleme mit bei einem Firmware-Update überschriebenen bzw. verlorenen Einstellungen für die Kalibrierung gab, hier eine Lösung, mit der man sich das vielleicht etwas vereinfachen kann.
Sicherlich ist das nichts für den Allgemeinnutzer - es zeigt aber eben auch ein paar Möglichkeiten, die zu eigenen Entwicklungen anregen können. Außer üblichen Linux-Tools sind keine weiteren Voraussetzungen nötig. Auch die Installation von FOSHKplugin ist nicht erforderlich.

Die mit GW1100 und GW2000 eingeführte http/JSON-API ist sehr vielseitig einsetzbar. Hier und dort hatte ich bereits ein paar Hinweise zu den Möglichkeiten der leider (bisher) doch nur wenig dokumentierten Schnittstelle gegeben.
Man kann jedoch nicht nur die Echtzeitdaten darüber abfragen sondern auch Änderungen an den Einstellungen vornehmen.
Grundlage ist JSON, dass über http/GET gelesen und http/POST geschrieben wird.

Die Arbeitsweise hier bei einem Firmware-Update ist folgendermaßen:

1. Backup der Kalibrierungsdaten in ein Verzeichnis "before"
2. Firmware-Update durchführen
3. erneutes Backup der Kalibrierungsdaten in ein Verzeichnis "after"
4. Vergleich der Verzeichnisse "before" und "after"
5. bei eklatanten Unterschieden von "before" und "after" die Daten aus "before" wieder in die Konsole schreiben

Da es sich bei den erzeugten Dateien um ASCII-Dateien handelt, lassen sich die enthaltenen Werte bei Bedarf problemlos mit einem Text-Editor ändern. Das sollte jedoch nur in Ausnahmefällen nötig sein.

Das Script FOSHKbackup.sh läuft nur unter Linux als Konsolen-Applikation - es ließe sich aber auch relativ leicht nach Windows portieren:

Code: Alles auswählen

#!/bin/bash
# script to save all calibration data to files
# parameters are job (backup/restore/compare) and target directory/filename or before/after directories
# Phantasoft, Oliver Engel - 27.01.2024

# define the address of weather station console
ipaddr=192.168.15.167

# #############################################
# dont change below
allGets=(get_calibration_data get_rain_totals get_sensors_info get_piezo_rain get_units_info get_cli_co2 get_cli_multiCh get_cli_pm25 get_cli_soilad get_cli_wh34)

echo
echo Phantasoft FOSHKbackup v0.1
echo
if [ $# -lt 1 ]; then
  echo "backup/restore/compare calibration data of FOSHK weather station supporting http/JSON-API"
  echo
  echo "usage:"
  echo
  echo "$0 backup [path]     - path defaults to current directory"
  echo "$0 restore config    - config file is mandatory"
  echo "$0 compare dir1 dir2 - compare all files of dir1 with files in dir2"
else
  job=`echo "$1" | tr a-z A-Z`
  if [ "${job}" == "BACKUP" ]; then
    path=$2
    if [ "$path" != "" ]; then mkdir -p ${path}; fi
    echo "save calibration data for station ${ipaddr}"
    for cmd in ${allGets[@]}; do
      curl -s http://${ipaddr}/${cmd} -o ${path}${cmd}.config
      echo wrote data to ${path}${cmd}.config
    done
  elif [ "${job}" == "RESTORE" ]; then
    file=$2
    if [ "${file}" == "" ]; then
      echo "you have to specify the config file to restore!"
    else
      cmd=${file##*/}
      cmd=`echo ${cmd%.config}|sed "s/get_/set_/g"`
      echo "restoring ${file} as ${cmd}"
      curl -d "@${file}" -X POST http://${ipaddr}/${cmd}
      echo
    fi
  elif [ "${job}" == "COMPARE" ]; then
    before=$2
    after=$3
    if [ "$after" == "" ]; then
      echo "you have to specify the directory to compare!"
    else
      echo "changes between files in ${before} and ${after}:"
      diff --unified=0 -r ${before} ${after}
    fi
  fi
fi
echo
Zur "Installation" (es muss nicht wirklich installiert werden) reicht es, mit einem Text-Editor die hier anthaltenen Zeilen in eine Datei FOSHKbackup.sh einzufügen und die IP-Adresse unter "ipaddr" anzupassen. Dort muss natürlich die IP-Adresse der eigenen Konsole eingetragen werden.
Nach dem Abspeichern der neu erzeugten Datei sind nun noch Ausführungsrechte zum Starten des Scriptes zu vergeben:

Code: Alles auswählen

chown ug+x FOSHKbackup.sh
Ein Start des Scripts ohne Parameter zeigt eine Hilfestellung an.
Ansonsten kann es mit den "richtigen" Parametern sofort genutzt werden.

Der oben erwähnte Arbeitsablauf in Kommandos ist dann:

1. ./FOSHKbackup.sh backup before/
2. Firmware-Update durchführen
3. ./FOSHKbackup.sh backup after/
4. ./FOSHKbackup.sh compare before/ after/
5. ./FOSHKbackup.sh restore before/get_calibration_data.config

Natürlich kann man auch mit Screenshots arbeiten - so habe ich das bisher ja auch gemacht.
Da die verschiedenen Kalibrier- und Regendaten jedoch auf verschiedenen Seiten stehen, reicht EIN Screenshot leider nicht aus. Und ablesen und ggf. manuell ändern müsste man ja auch. Bei den Regendaten kommt erschwerend hinzu, dass diese dynamisch sind und man daher eigentlich jeweils vor dem Firmware-Update ein aktuellen Screenshot machen müsste.
Und auch evtl. geänderte Rücksetzzeiten für die Regenberechnung (00:00 Uhr, Montag, Januar) fallen so SOFORT auf. Zusätzlich sollte sich mit diesem Tool ein Gerät auch "clonen" lassen - etwa wenn ein defektes Gerät ausgetauscht werden muss.
Der Aufwand zur Konfiguration reduziert sich dadurch erheblich.

Schließlich möchte ich die http/JSON-API noch etwas bekannter machen - damit lassen sich nämlich recht schnell und ziemlich einfach eigene Anwendungen entwickeln.

Vielleicht hilft es ja jemanden ...
Schoenen Sonntag!

Oliver
Antworten