TapHome

OpenHolidays API

Packet Parser → HTTP
Eingereicht von
Zuletzt aktualisiert: 03. 2026

Die OpenHolidays API ist eine kostenlose Open-Source REST API, die Daten zu gesetzlichen Feiertagen und Schulferien für über 35 Länder bereitstellt. TapHome verbindet sich über HTTPS mit diesem Cloud-Dienst mithilfe eines PacketParser HTTP-Templates — eine Authentifizierung oder ein API-Schlüssel ist nicht erforderlich.

Das Template stellt drei schreibgeschützte boolesche Geräte bereit: eines für Feiertage, eines für Schulferien und eines für Wochenenden. Diese können in TapHome smart rules verwendet werden, um Heizungspläne, Alarmmodi, Lichtszenen oder jede andere Automatisierung daran anzupassen, ob heute ein Arbeitstag ist oder nicht.

Das Template wurde von ToBo, einem Community-Beitragenden, erstellt.

Konfiguration

Beim Import des Templates sind zwei Parameter erforderlich:

  • Country — ISO 3166-1 Alpha-2-Ländercode (z. B. SK für Slowakei, DE für Deutschland, CZ für Tschechien). Die vollständige Liste der unterstützten Länder ist unter https://openholidaysapi.org/Countries verfügbar.
  • Region — ISO 3166-2 Unterteilungscode (z. B. SK-BC für die Region Banská Bystrica, DE-BY für Bayern). Die Liste der Unterteilungen für ein bestimmtes Land ist unter https://openholidaysapi.org/Subdivisions?countryIsoCode={CountryCode} verfügbar.

Beide Parameter werden als Module Variables in TapHome gespeichert und können nach dem Import ohne erneuten Import des Templates geändert werden.

Viele Länder haben regionsspezifische Feiertage. Wenn die Feiertagserkennung falsch erscheint, überprüfen Sie, ob der Unterteilungscode der richtigen Region entspricht — nicht nur dem Ländercode.

Gerätefunktionen

Feiertagserkennung

Das Gerät Feiertag fragt den Endpoint GET /PublicHolidays einmal pro Stunde ab. Es sendet das heutige Datum zusammen mit den konfigurierten Länder- und Regionscodes. Wenn die API einen Feiertagseintrag für dieses Datum zurückgibt, zeigt das Gerät Yes an; andernfalls zeigt es No an.

Schulferien-Erkennung

Das Gerät Schulferien funktioniert genauso, fragt aber den Endpoint GET /SchoolHolidays ab. Es erkennt, ob der heutige Tag in einen Schulferienabschnitt für das konfigurierte Land und die Region fällt.

Die Verfügbarkeit von Schulferiendaten variiert je nach Land. Einige Länder haben eine eingeschränkte Abdeckung der Unterteilungen — prüfen Sie die API-Dokumentation, um zu verifizieren, dass Ihre Region unterstützt wird.

Wochenenderkennung

Das Gerät Wochenende ruft die API nicht auf. Es nutzt die lokale TapHome-Funktion NOW().DAYOFWEEK, um festzustellen, ob heute Samstag (Tag 6) oder Sonntag (Tag 0) ist. Dieses Gerät funktioniert unabhängig von der API und benötigt keine Internetverbindung.

Weitere Funktionen

Die OpenHolidays API stellt auch Endpoints für die Abfrage von Feiertagen nach einem bestimmten Datum über alle Länder hinweg bereit (/PublicHolidaysByDate, /SchoolHolidaysByDate), die Auflistung unterstützter Länder und regionaler Unterteilungen sowie Statistiken über verfügbare Datenbereiche. Diese können in einem zukünftigen Template-Update ergänzt werden.

Fehlerbehebung

Feiertagserkennung liefert falsche Ergebnisse
  1. Überprüfen Sie, ob der Ländercode korrekt ist — verwenden Sie den Endpoint /Countries, um die Liste der unterstützten Länder zu überprüfen
  2. Überprüfen Sie den Regionscode (Unterteilung) — einige Feiertage sind regionsspezifisch und werden mit einem falschen Unterteilungscode nicht angezeigt
  3. Prüfen Sie die API direkt im Browser: https://openholidaysapi.org/PublicHolidays?countryIsoCode=SK&subdivisionCode=SK-BC&validFrom=2026-01-01&validTo=2026-01-01 — ersetzen Sie Datum und Codes durch Ihre Werte
  4. Wenn die API ein leeres Array [] für ein Datum zurückgibt, das ein Feiertag sein sollte, sind die Daten für dieses Land oder Jahr möglicherweise noch nicht verfügbar
Gerät zeigt Fehler (NaN)

Wenn die API nicht erreichbar ist (Netzwerkproblem, DNS-Fehler oder API-Ausfall), gibt das Template NaN mit dem HTTP-Statuscode in der Fehlermeldung zurück. Die OpenHolidays API ist ein Community-Projekt ohne SLA — die aktuelle Verfügbarkeit können Sie auf der Statusseite unter https://openpotato.github.io/uptime/ überprüfen.

Die OpenHolidays API ist ein von der Community gepflegtes Open-Data-Projekt. Obwohl sie zuverlässig verfügbar ist, gibt es keine Verfügbarkeitsgarantie. Für geschäftskritische Automatisierungen sollten Sie eine Fallback-Regel hinzufügen, die den Fehlerzustand elegant behandelt.

Verfügbare Geräte

OpenHolidays Modul
Benutzerdefinierte Variablen
Country (string)ISO 3166-1 alpha-2 country code (e.g. SK, DE, CZ)
Full list at openholidaysapi.org/Countries
Region (string)ISO 3166-2 subdivision code (e.g. SK-BC, DE-BY)
List at openholidaysapi.org/Subdivisions?countryIsoCode={CountryCode}
Feiertag Schalter Nur lesen

Fragt die OpenHolidays API einmal pro Stunde ab — Ja, wenn heute ein Feiertag für das konfigurierte Land und die Region ist, sonst Nein

boolean json_path
Werte / Zustände: Yes · No

Feiertag

Schaltzustand lesen
var dt := NOW();
var date := dt.YEAR + "-" + dt.MONTH + "-" + dt.DAY;
var req:= "PublicHolidays?countryIsoCode=" + Country + "&subdivisionCode=" + Region + "&validFrom="+date + "&validTo="+date;
var response := SENDHTTPREQUEST(req);

if response.IsSuccess
  var content := response.Content;
  var isHoliday := PARSEJSON( content, "[0].temporalScope", 1);
  if isHoliday != null
    return(1);
  else
    return(0);
  end
else
  adderror(response.StatusCode + " (" + response.ReasonPhrase + ")");
  return(NaN);
end
Schulferien Schalter Nur lesen

Fragt die OpenHolidays API einmal pro Stunde ab — Ja, wenn heute in die Schulferien für das konfigurierte Land und die Region fällt, sonst Nein

boolean json_path
Werte / Zustände: Yes · No

Schulferien

Schaltzustand lesen
var dt := NOW();
var date := dt.YEAR + "-" + dt.MONTH + "-" + dt.DAY;
var req:= "SchoolHolidays?countryIsoCode=" + Country + "&subdivisionCode=" + Region + "&validFrom="+date + "&validTo="+date;
var response := SENDHTTPREQUEST(req);

if response.IsSuccess
  var content := response.Content;
  var isHoliday := PARSEJSON( content, "[0].temporalScope", 1);
  if isHoliday != null
    return(1);
  else
    return(0);
  end
else
  adderror(response.StatusCode + " (" + response.ReasonPhrase + ")");
  return(NaN);
end
Wochenende Schalter Nur lesen

Lokale Berechnung — Ja am Samstag und Sonntag, Nein an Werktagen. Verwendet nicht die API.

boolean
Werte / Zustände: Yes · No

Wochenende

Schaltzustand lesen
var dt := NOW();
return(dt.DAYOFWEEK = 0 or dt.DAYOFWEEK = 6);
Verbindung: Packet Parser → HTTP
Mögliche Verbesserungen (7)
  • Public Holidays By Date — Returns all public holidays across all countries for a single date — alternative to country-scoped query
  • School Holidays By Date — Returns all school holidays across all countries for a single date
  • Supported Countries — List of 35+ supported countries — useful for configuration but not a sensor
  • Regional Subdivisions — List of regional divisions for a country — useful for configuration
  • Public Holiday Data Range — Date range of available public holiday data for a country
  • School Holiday Data Range — Date range of available school holiday data for a country
  • Holiday Groups — Non-geographic holiday groupings (language zones, school types) for a country

Quellen