# API Dokumentation # Allgemeines ## Revision History
Name | Datum | Grund für Änderungen |
---|---|---|
Jakob Hütter | 24.02.2025 | Erstellung der Dokumentation |
Jede Antwort die nicht valid = '1' enthält, kann als fehlerhaft gewertet werden
## **Verfügbare API-Endpunkte** ### **1. Allgemeine Funktionen** 1. [`getApiKey(email,pass)` ](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getapikey) 2. [`getSmartDogs(apikey)`](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getsmartdogs) ### **2. Photovoltaik-Daten** 1. [`getInverters(apikey, PowerDogID)`](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getinverters) 2. [`getStringData(apikey,SensorID,StringNum,UTC_TIMESTAMP_FROM,UTC_TIMESTAMP_TO)` ](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getstringdata) 3. [`getPhotovoltaicBorders(apikey,PowerDogID,month,year)` ](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getphotovoltaicborders) 4. [`getStringDayData(apikey,SensorID,StringNum,day_from,day_to,month,year)` ](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getstringdaydata) 5. [`getStringMonthData(apikey,SensorID,StringNum,month_from,month_to,year)` ](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getstringmonthdata) 6. [`getStringYearData(apikey,SensorID,StringNum,year_from,year_to)`](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getstringyeardata) ### **3. Sensor-Daten** 1. [`getSensors(apikey,PowerDogID)` ](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getsensors) 2. [`getSensorData(apikey,SensorID,UTC_TIMESTAMP_FROM,UTC_TIMESTAMP_TO)`](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getsensordata) ### **4. Zähler-Daten** 1. [`getCounters(apikey,PowerDogID)` ](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getcounters) 2. [`getCounterData(apikey,SensorID,UTC_TIMESTAMP_FROM,UTC_TIMESTAMP_TO)`](https://anleitung.smart-dog.eu/books/api-dokumentation/page/getcounterdata) ## **Antwortformat und Fehler** #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # Allgemeine API-Aufrufe getApiKey getSmartDogs # getApiKey **Beschreibung:** Erstellt einen API-Schlüssel für einen Benutzer basierend auf seiner E-Mail-Adresse und seinem Passwort. Der API-Schlüssel wird für alle weiteren Anfragen zur Authentifizierung verwendet. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `email` (string) – E-Mail-Adresse des Benutzers (wird in Kleinbuchstaben umgewandelt) - `pass` (string) – Passwort des Benutzers (wird als MD5-Hash verarbeitet) #### Beispielanfrage: ```json { "action": "getApiKey", "email": "testkunde@eco-data.de", "pass": "test" } ``` #### Beispielantwort: ```json { "valid": 1, "apikey": "6641d282073d76b625987af5141d3e2a" } ``` #### Beschreibung der Antwortparameter: - `valid` (number) – Status der Anfrage; `1` bedeutet Erfolg, `0` bedeutet Fehler. - `apikey` (string) – Generierter API-Schlüssel für den Benutzer. Dieser Schlüssel sollte sicher gespeichert und für zukünftige API-Aufrufe verwendet werden. #### Hinweise: - Der **API-Key** bleibt gültig, bis der Benutzer seine E-Mail-Adresse ändert. - Die API speichert Passwörter nicht im Klartext, sondern verarbeitet sie als **MD5-Hash**. - Der API-Key ersetzt die Login-Daten und sollte sicher gespeichert werden. #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # getSmartDogs **Beschreibung:** Gibt eine Liste der registrierten SmartDog-Geräte des Benutzers zurück. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers #### Beispielanfrage: ```json { "action": "getSmartDogs", "apikey": "90f47b75edc159ba8333a16ef37bd431" } ``` #### Beispielantwort: ```json { "valid": 1, "powerdogs": [ { "id": 11, "name": "Familie Hütter", "description": "Anlage Familie Hütter", "address_city": "Braunau", "address_country": "AUT" } ] } ``` #### Beschreibung der Antwortparameter: - `valid` (number) – Status der Anfrage; `1` bedeutet Erfolg - `powerdogs` (array) – Liste der registrierten SmartDog-Geräte. - `id` (int) – Eindeutige Kennung des Geräts. - `name` (string) – Name des SmartDog-Geräts. - `description` (string) – Beschreibung oder Zusatzinformation zum Gerät. - `address_city` (string) – Stadt, in der das Gerät lokalisiert ist. - `address_country` (string) – Ländercode des Gerätestandorts. #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # Photovoltaik-Daten # getInverters **Beschreibung:** Ruft eine Liste der Wechselrichter (Inverters) für das angegebene SmartDog-Gerät ab. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers - `PowerDogID` (number) – Eindeutige Kennung des SmartDog-Geräts #### Beispielanfrage: ```json { "action": "getInverters", "apikey": "6641d282073d76b625987af5141d3e2a", "PowerDogID": "36789" } ``` #### Beispielantwort: ```json { "valid": 1, "inverters": { "B1_A2": { "BUS": 1, "ADDRESS": 2, "Manufactor": "sma", "Modulfield": "1", "Modulfield_Name": "Haus1", "Monitoring": "on", "Capacity": "3000", "SerialNo": "2000049568", "Type": "WR25-014", "Strings": "1", "desc": "SMA", "StringList": { "1": { "STRING": 1, "Capacity": "3000" } }, "id": "551902" }, "B8_A1": { "BUS": 8, "ADDRESS": 1, "Manufactor": "sma", "Modulfield": "2", "Modulfield_Name": "Garage", "Monitoring": "on", "Capacity": "2000", "SerialNo": "1930203053", "Type": "SB2.0", "Strings": "1", "desc": "SMA Bus8", "StringList": { "1": { "STRING": 1, "Capacity": "2000" } }, "id": "551903" } }, "id": 36789 } ``` #### Beschreibung der Antwortparameter: - **valid** (number): Status der API-Anfrage. Ein Wert von `1` signalisiert, dass der Aufruf erfolgreich war. - **inverters** (object): Ein Objekt, das die Wechselrichter (Inverters) enthält. Jeder Schlüssel in diesem Objekt (z. B. `B1_A2`, `B8_A1`) repräsentiert einen spezifischen Wechselrichter. Für jeden Wechselrichter gelten folgende Parameter: - **BUS** (number): Die Busnummer, die dem Wechselrichter zugeordnet ist. - **ADDRESS** (number): Die Adresse des Wechselrichters im jeweiligen Bus. - **Manufactor** (string): Der Hersteller des Wechselrichters (z. B. "sma"). - **Modulfield** (string): Eine Kennzeichnung oder Identifikation des Modulfelds. - **Modulfield_Name** (string): Der Name des Modulfelds, beispielsweise "Haus1" oder "Garage". - **Monitoring** (string): Der Überwachungsstatus des Wechselrichters (z. B. "on"). - **Capacity** (string): Die Kapazität des Wechselrichters, in Watt angegeben. - **SerialNo** (string): Die Seriennummer des Wechselrichters. - **Type** (string): Die Modellbezeichnung oder der Typ des Wechselrichters. - **Strings** (string): Die Anzahl der zugeordneten Strings (Photovoltaik-Stränge). - **desc** (string): Eine zusätzliche Beschreibung oder ein Hinweis zum Wechselrichter. - **StringList** (object): Ein Objekt, das detaillierte Informationen zu den einzelnen Strings enthält. Jeder Schlüssel repräsentiert eine String-Nummer. - **STRING** (number): Die Nummer des Strings. - **Capacity** (string): Die Kapazität des jeweiligen Strings in Watt. - **id** (string): Die eindeutige Kennung des Wechselrichters. - **id** (number): Die eindeutige Kennung des übergeordneten Geräts (z. B. des SmartDog-Geräts), zu dem die Wechselrichter gehören. #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # getStringData **Beschreibung:** Ruft Daten eines spezifischen Strings (Photovoltaik-Daten) für einen Sensor im angegebenen Zeitraum ab. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers - `SensorID` (number) – Eindeutige Kennung des Sensors - `StringNum` (number) – Nummer des Strings (Photovoltaik-String) - `UTC_TIMESTAMP_FROM` (number) – Startzeitpunkt im UTC-Timestamp-Format - `UTC_TIMESTAMP_TO` (number) – Endzeitpunkt im UTC-Timestamp-Format #### Beispielanfrage: ```json { "action": "getStringData", "apikey": "6641d282073d76b625987af5141d3e2a", "SensorID": "551902", "StringNum": "1", "UTC_TIMESTAMP_FROM": "1739867939", "UTC_TIMESTAMP_TO": "1739877939" } ``` #### Beispielantwort: ```json { "sensor_id": 551902, "string_num": 1, "valid": 1, "test": "bcde", "datasets": { "1739868002.000000": { "PAC": "844", "PDC": "907", "UDC": "358", "TEMPERATURE": "29", "TIMESTAMP_LOCAL": 1739871602, "TIMESTAMP_UTC": "1739868002.000000" }, "1739868302.000000": { "PAC": "878", "PDC": "944", "UDC": "359", "TEMPERATURE": "31", "TIMESTAMP_LOCAL": 1739871902, "TIMESTAMP_UTC": "1739868302.000000" } } } ``` #### Beschreibung der Antwortparameter: - **sensor_id** (number): Die eindeutige ID des Sensors, für den die Daten abgefragt wurden. - **string_num** (number): Die Nummer des angeforderten Photovoltaik-Strings. - **valid** (number): Gibt an, ob die Anfrage erfolgreich war (`1` = Erfolg, `0` = Fehler). - **test** (string): Testwert oder Debug-Information (kann variieren). - **datasets** (object): Ein Objekt mit den Zeitstempeln als Schlüssel, das Messwerte zu jedem Zeitpunkt enthält. - **PAC** (string): Wechselstromleistung (AC) in Watt. - **PDC** (string): Gleichstromleistung (DC) in Watt. - **UDC** (string): Gleichspannung in Volt. - **TEMPERATURE** (string): Temperatur in Grad Celsius. - **TIMESTAMP_LOCAL** (number): Zeitstempel in der lokalen Zeitzone. - **TIMESTAMP_UTC** (string): Zeitstempel im UTC-Format. --- #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # getPhotovoltaicBorders **Beschreibung:** Ruft die früheste und späteste Erzeugungszeit eines bestimmten Wechselrichter-Strings für einen angegebenen Monat und ein Jahr ab. Diese Funktion wird verwendet, um die Start- und Endzeiten des Tagesdiagramms zu bestimmen. Es werden alle verwendeten Wechselrichter analysiert, um die kleinste und größte Zeit zu finden. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers, aus `getApiKey()` - `PowerDogID` (number) – Eindeutige Kennung des PowerDog-Geräts, aus `getPowerDogs()` - `month` (number) – Angeforderter Monat als Ganzzahl (1-12) - `year` (number) – Angefordertes Jahr als Ganzzahl #### Beispielanfrage: ```json { "action": "getPhotovoltaicBorders", "apikey": "90f47b75edc159ba8333a16ef37bd431", "PowerDogID": 11, "month": 1, "year": 2013 } ``` #### Beispielantwort: ```json { "valid": 1, "borders": { "min": "7", "max": "17" } } ``` #### Beschreibung der Antwortparameter: - **valid** (number): Gibt an, ob die Anfrage erfolgreich war (`1` = Erfolg, `0` = Fehler). - **borders** (object): Enthält die früheste und späteste Erzeugungszeit in Stunden (24h-Format) für den angefragten Monat. - **min** (string): Die früheste Startzeit (Stunde), zu der im angegebenen Monat Strom erzeugt wurde. - **max** (string): Die späteste Endzeit (Stunde), zu der im angegebenen Monat Strom erzeugt wurde. --- #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # getStringDayData **Beschreibung:** Ruft die Tageserzeugungsdaten eines spezifischen Strings für einen Sensor über einen angegebenen Zeitraum ab. Diese Funktion liefert tägliche Verbrauchs- und Leistungswerte für einen bestimmten Wechselrichter-String. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers, aus `getApiKey()` - `SensorID` (number) – Eindeutige Kennung des Sensors (Wechselrichter-ID), aus `getInverters()` - `StringNum` (number) – String-ID (normalerweise 1-3), MMP-Tracker-ID, aus `StringList` in `getInverters()` - `day_from` (number) – Starttag der Abfrage (1-31) - `day_to` (number) – Endtag der Abfrage (1-31) - `month` (number) – Angefragter Monat als Ganzzahl (1-12) - `year` (number) – Angefragtes Jahr als Ganzzahl #### Beispielanfrage: ```json { "action": "getStringDayData", "apikey": "6641d282073d76b625987af5141d3e2a", "SensorID": "551902", "StringNum": "1", "day_from": "1", "day_to": "12", "month": "1", "year": "2024" } ``` #### Beispielantwort: ```json { "sensor_id": 551902, "string_num": 1, "valid": 1, "datasets": { "2024-1-01": { "WH": "4160", "PAC_MAX": "1189", "DAY": "01", "MONTH": 1, "YEAR": 2024 }, "2024-1-02": { "WH": "348", "PAC_MAX": "173", "DAY": "02", "MONTH": 1, "YEAR": 2024 }, "2024-1-03": { "WH": "2204", "PAC_MAX": "897", "DAY": "03", "MONTH": 1, "YEAR": 2024 } } } ``` #### Beschreibung der Antwortparameter: - **sensor_id** (number): Eindeutige Kennung des Sensors, für den die Daten abgefragt wurden. - **string_num** (number): Die Nummer des Photovoltaik-Strings. - **valid** (number): Gibt an, ob die Anfrage erfolgreich war (`1` = Erfolg, `0` = Fehler). - **datasets** (object): Enthält Tageswerte für den angeforderten Zeitraum. Jeder Schlüssel repräsentiert ein Datum (`YYYY-MM-DD`). - **WH** (string): Gesamtenergieerzeugung des Tages in Wattstunden (Wh). - **PAC_MAX** (string): Maximale Wechselstromleistung (AC) des Tages in Watt. - **DAY** (string): Der Tag innerhalb des abgefragten Zeitraums. - **MONTH** (number): Der Monat der Messung. - **YEAR** (number): Das Jahr der Messung. --- #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # getStringMonthData **Beschreibung:** Ruft die monatlichen Erzeugungsdaten eines bestimmten Wechselrichter-Strings für einen angegebenen Zeitraum ab. Diese Funktion liefert monatliche Verbrauchs- und Leistungswerte für einen bestimmten Wechselrichter-String. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers, aus `getApiKey()` - `SensorID` (number) – Eindeutige Kennung des Sensors (Wechselrichter-ID), aus `getInverters()` - `StringNum` (number) – String-ID (normalerweise 1-3), MMP-Tracker-ID, aus `StringList` in `getInverters()` - `month_from` (number) – Startmonat der Abfrage (1-12) - `month_to` (number) – Endmonat der Abfrage (1-12) - `year` (number) – Angefragtes Jahr als Ganzzahl #### Beispielanfrage: ```json { "action": "getStringMonthData", "apikey": "6641d282073d76b625987af5141d3e2a", "SensorID": "551902", "StringNum": "1", "month_from": "1", "month_to": "12", "year": "2023" } ``` #### Beispielantwort: ```json { "sensor_id": 551902, "string_num": 1, "valid": 1, "datasets": { "2023-01": { "WH": "55147", "MONTH": "01", "YEAR": 2023 }, "2023-02": { "WH": "146404", "MONTH": "02", "YEAR": 2023 }, "2023-03": { "WH": "233747", "MONTH": "03", "YEAR": 2023 } } } ``` #### Beschreibung der Antwortparameter: - **sensor_id** (number): Eindeutige Kennung des Sensors, für den die Daten abgefragt wurden. - **string_num** (number): Die Nummer des Photovoltaik-Strings. - **valid** (number): Gibt an, ob die Anfrage erfolgreich war (`1` = Erfolg, `0` = Fehler). - **datasets** (object): Enthält monatliche Erzeugungswerte für den angeforderten Zeitraum. Jeder Schlüssel repräsentiert ein Monat (`YYYY-MM`). - **WH** (string): Gesamtenergieerzeugung des Monats in Wattstunden (Wh). - **MONTH** (string): Der Monat der Messung. - **YEAR** (number): Das Jahr der Messung. --- #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # getStringYearData **Beschreibung:** Ruft die jährlichen Erzeugungsdaten eines bestimmten Wechselrichter-Strings für einen angegebenen Zeitraum ab. Diese Funktion liefert Jahresverbrauchs- und Leistungswerte für einen bestimmten Wechselrichter-String. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers, aus `getApiKey()` - `SensorID` (number) – Eindeutige Kennung des Sensors (Wechselrichter-ID), aus `getInverters()` - `StringNum` (number) – String-ID (normalerweise 1-3), MMP-Tracker-ID, aus `StringList` in `getInverters()` - `year_from` (number) – Startjahr der Abfrage (z. B. 2010) - `year_to` (number) – Endjahr der Abfrage (z. B. aktuelles Jahr) #### Beispielanfrage: ```json { "action": "getStringYearData", "apikey": "6641d282073d76b625987af5141d3e2a", "SensorID": "551902", "StringNum": "1", "year_from": "2022", "year_to": "2023" } ``` #### Beispielantwort: ```json { "sensor_id": 551902, "string_num": 1, "valid": 1, "datasets": { "2022": { "WH": "3205440", "YEAR": "2022" }, "2023": { "WH": "3066610", "YEAR": "2023" } } } ``` #### Beschreibung der Antwortparameter: - **sensor_id** (number): Eindeutige Kennung des Sensors, für den die Daten abgefragt wurden. - **string_num** (number): Die Nummer des Photovoltaik-Strings. - **valid** (number): Gibt an, ob die Anfrage erfolgreich war (`1` = Erfolg, `0` = Fehler). - **datasets** (object): Enthält jährliche Erzeugungswerte für den angeforderten Zeitraum. Jeder Schlüssel repräsentiert ein Jahr (`YYYY`). - **WH** (string): Gesamtenergieerzeugung des Jahres in Wattstunden (Wh). - **YEAR** (string): Das Jahr der Messung. #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # Sensordaten getSensors getSensorData # getSensors **Beschreibung:** Ruft eine Liste aller Sensoren und deren Informationen für ein bestimmtes PowerDog-Gerät ab. Diese Funktion gibt detaillierte Sensordaten zurück, darunter Typ, Name und Messbereich. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers, aus `getApiKey()` - `PowerDogID` (number) – Eindeutige Kennung des PowerDog-Geräts, aus `getPowerDogs()` #### Beispielanfrage: ```json { "action": "getSensors", "apikey": "6641d282073d76b625987af5141d3e2a", "PowerDogID": "36789" } ``` #### Beispielantwort: ```json { "valid": 1, "sensors": { "onewire_1494659203": { "KEY": "onewire_1494659203", "Type": "Temperature", "Max": "100", "Name": "boilertemp", "id": "551929" }, "adcsensor_1522075451": { "KEY": "adcsensor_1522075451", "Type": "Global_Radiation", "Max": "1200", "Name": "radiation", "id": "551931" } }, "id": 36789 } ``` #### Beschreibung der Antwortparameter: - **valid** (number): Gibt an, ob die Anfrage erfolgreich war (`1` = Erfolg, `0` = Fehler). - **sensors** (object): Ein Objekt, das eine Liste aller Sensoren enthält. Jeder Sensor hat eine eindeutige **KEY**-ID. - **KEY** (string): Eindeutige Kennung des Sensors. - **Type** (string): Typ des Sensors, z. B. `Temperature`, `Voltage`, `Energy`. - **Max** (string): Maximale Messkapazität des Sensors. - **Name** (string): Name des Sensors. - **id** (string): Interne ID des Sensors. - **id** (number): Eindeutige Kennung des PowerDog-Geräts, zu dem die Sensoren gehören. #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # getSensorData **Beschreibung:** Ruft Sensordaten oder Zählerdaten für einen bestimmten Zeitraum ab. Die Werte werden in 5-Minuten-Intervallen geliefert. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers, aus `getApiKey()` - `SensorID` (number) – Eindeutige Kennung des Sensors/Zählers, aus `getSensors()` oder `getCounters()` - `UTC_TIMESTAMP_FROM` (number) – Startzeitpunkt im UTC-Timestamp-Format - `UTC_TIMESTAMP_TO` (number) – Endzeitpunkt im UTC-Timestamp-Format #### Beispielanfrage: ```json { "action": "getSensorData", "apikey": "6641d282073d76b625987af5141d3e2a", "SensorID": "551941", "UTC_TIMESTAMP_FROM": "1739867939", "UTC_TIMESTAMP_TO": "1739877939" } ``` #### Beispielantwort: ```json { "sensor_id": 551941, "valid": 1, "datasets": { "1739868002": { "DATA": "251", "TIMESTAMP_UTC": 1739868002, "TIMESTAMP_LOCAL": 1739871602 }, "1739868302": { "DATA": "257", "TIMESTAMP_UTC": 1739868302, "TIMESTAMP_LOCAL": 1739871902 } } ``` #### Beschreibung der Antwortparameter: - **sensor_id** (number): Eindeutige Kennung des Sensors oder Zählers, für den die Daten abgefragt wurden. - **valid** (number): Gibt an, ob die Anfrage erfolgreich war (`1` = Erfolg, `0` = Fehler). - **datasets** (object): Enthält die aufgezeichneten Messwerte im 5-Minuten-Intervall. Jeder Schlüssel stellt einen UTC-Timestamp dar. - **DATA** (string): Messwert des Sensors oder Zählers. - **TIMESTAMP_UTC** (int): Zeitstempel der Messung im UTC-Format. - **TIMESTAMP_LOCAL** (int): Zeitstempel der Messung in der lokalen Zeitzone. --- #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # Zählerdaten getCounters getCounterData # getCounters **Beschreibung:** Ruft eine Liste aller Zähler und deren Informationen für ein bestimmtes PowerDog-Gerät ab. Diese Funktion gibt detaillierte Informationen zu den angeschlossenen Energiezählern zurück. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers, aus `getApiKey()` - `PowerDogID` (number) – Eindeutige Kennung des PowerDog-Geräts, aus `getPowerDogs()` #### Beispielanfrage: ```json { "action": "getCounters", "apikey": "6641d282073d76b625987af5141d3e2a", "PowerDogID": "36789" } ``` #### Beispielantwort: ```json { "valid": 1, "counters": { "pv_global_1499321681": { "KEY": "pv_global_1499321681", "Type": "Energy", "Max": 5000, "Name": "PV", "Hardware": "pv_global", "Medium": "ELECTRIC", "id": "551904" }, "buscounter_1579943663": { "KEY": "buscounter_1579943663", "Type": "Energy", "Max": "5000", "Name": "GRIDIN", "Hardware": "buscounter", "Medium": "ELECTRIC", "id": "551911" } }, "id": 36789 } ``` #### Beschreibung der Antwortparameter: - **valid** (number): Gibt an, ob die Anfrage erfolgreich war (`1` = Erfolg, nicht vorhanden = Fehler). - **counters** (object): Ein Objekt, das eine Liste aller Zähler enthält. Jeder Zähler hat eine eindeutige **KEY**-ID. - **KEY** (string): Eindeutige Kennung des Zählers. - **Type** (string): Typ des Zählers, z. B. `Energy`. - **Max** (number): Maximale Messkapazität des Zählers. - **Name** (string): Name des Zählers. - **Hardware** (string): Bezeichnung der Zählerhardware. - **Medium** (string): Medium des Zählers (z. B. `ELECTRIC`, `MBUS_HEATMETER`). - **id** (string): Interne ID des Zählers. - **id** (number): Eindeutige Kennung des PowerDog-Geräts, zu dem die Zähler gehören. # getCounterData **Beschreibung:** Ruft Zählerdaten (Counter Data) oder Sensordaten für einen bestimmten Zeitraum ab. Die Werte werden in 5-Minuten-Intervallen bereitgestellt. **Endpunkt:** `/api` **Methode:** `POST` #### Parameter: - `apikey` (string) – API-Schlüssel des Benutzers, aus `getApiKey()` - `SensorID` (number) – Eindeutige Kennung des Sensors/Zählers, aus `getSensors()` oder `getCounters()` - `UTC_TIMESTAMP_FROM` (number) – Startzeitpunkt im UTC-Timestamp-Format - `UTC_TIMESTAMP_TO` (number) – Endzeitpunkt im UTC-Timestamp-Format #### Beispielanfrage: ```json { "action": "getCounterData", "apikey": "6641d282073d76b625987af5141d3e2a", "SensorID": "551907", "UTC_TIMESTAMP_FROM": "1739867939", "UTC_TIMESTAMP_TO": "1739877939" } ``` #### Beispielantwort: ```json { "sensor_id": 551907, "valid": 1, "datasets": { "1739868002": { "DATA": "1165", "TIMESTAMP_UTC": 1739868002, "TIMESTAMP_LOCAL": 1739871602 }, "1739868302": { "DATA": "1428", "TIMESTAMP_UTC": 1739868302, "TIMESTAMP_LOCAL": 1739871902 }, } } ``` #### Beschreibung der Antwortparameter: - **sensor_id** (number): Eindeutige Kennung des Zählers oder Sensors, für den die Daten abgefragt wurden. - **valid** (number): Gibt an, ob die Anfrage erfolgreich war (`1` = Erfolg, `0` = Fehler). - **datasets** (object): Enthält die aufgezeichneten Messwerte im 5-Minuten-Intervall. Jeder Schlüssel stellt einen UTC-Timestamp dar. - **DATA** (string): Erfasster Messwert des Zählers oder Sensors. - **TIMESTAMP_UTC** (int): Zeitstempel der Messung im UTC-Format. - **TIMESTAMP_LOCAL** (int): Zeitstempel der Messung in der lokalen Zeitzone. #### Nähere Informationen zu Antwortformat und Fehlermeldungen: [Antwortformat und Fehler](https://anleitung.smart-dog.eu/books/api-dokumentation/chapter/antwortformat-und-fehler) # Antwortformat und Fehler Alle API-Antworten werden im JSON-Format zurückgegeben. Fehler folgen einem konsistenten Schema mit: error_code (Numerischer Fehlercode) error_message (Beschreibung des Fehlers) # Antwortformat und Fehler ## **1. Erfolgreiche Antwort (Correct Response)** Ein erfolgreicher API-Aufruf liefert eine **JSON-Antwort** mit den abgefragten Daten. Das folgende Beispiel zeigt eine Antwort für die Abfrage von PowerDog-Geräten eines bestimmten Eigentümers. ```json { "query": "SELECT * FROM powerdog WHERE pdowner=29812;", "valid": 1, "powerdogs": [ { "timezone": "Europe/Vienna", "id": "36789", "name": "Testanlage4Hütter", "description": "", "address_zip": "5280", "address_city": "Braunau am Inn", "address_country": "AUT", "address_street": "Mozartstraße", "address_no": "33", "longitude": "13.04096985", "latitude": "48.24743652", "published": "0", "owner": "29812", "uid": "PD2402-0019", "server_id": "31" }, { "timezone": "Etc/GMT+0", "id": "37641", "name": "TestGerät", "description": null, "address_zip": "", "address_city": "", "address_country": null, "address_street": "", "address_no": "", "longitude": null, "latitude": null, "published": null, "owner": "29812", "uid": "0815", "server_id": "101" }, { "timezone": "Europe/Vienna", "id": "38586", "name": "Testanlage5Hütter cm4s", "description": null, "address_zip": "", "address_city": "", "address_country": null, "address_street": "", "address_no": "", "longitude": null, "latitude": null, "published": "0", "owner": "29812", "uid": "PD2502-0033", "server_id": "31" } ] } ``` ### **Erklärung der Felder** - **`query`**: Die SQL-Abfrage, die der API-Server ausgeführt hat. - **`valid`**: Gibt an, ob die Anfrage gültig war (`1` = gültig, wenn nicht vorhanden = ungültig) - **`powerdogs`**: Liste der PowerDog-Geräte --- ## **2. Fehlerhafte Antwort (Faulty Response)** Falls eine Anfrage fehlschlägt, gibt die API eine **Fehlermeldung** mit einem Fehlercode zurück. ```json { "faultString": "Authentication failed", "faultCode": 100 } ``` ### **Fehlermeldungen und Codes** | Fehlercode | Beschreibung | |------------|--------------------------------------------------------------------| | `100` | Authentifizierung fehlgeschlagen (z. B. ungültiger `apikey`). | | `101` | Keine Rechte auf den SmartDog der angegebenen ID | | `102` | Kann keine Verbindung zur Datenbank herstellen | | `103` | Datenbankanfrage fehlerhaft | | `104` | Fehlende Parameter | Falls eine API-Anfrage fehlschlägt, sollte überprüft werden: 1. Ob der **`apikey`** korrekt ist. 2. Ob alle benötigten **Parameter** vorhanden sind. 3. Ob die Werte in der **richtigen Form** übergeben wurden.Jede Antwort die nicht valid = '1' enthält, kann als fehlerhaft gewertet werden
--- ## **3. Zusätzliche Hinweise** - Alle API-Antworten werden im **JSON-Format** zurückgegeben. - Fehlermeldungen enthalten eine **`faultString`**-Beschreibung und einen **`faultCode`** zur schnellen Identifikation des Problems. - Erfolgreiche Antworten enthalten immer das Feld **`valid: 1`**, während fehlerhafte Antworten eine **`faultString`**-Nachricht enthalten. --- **© 2025 PowerDog API – Alle Rechte vorbehalten** # API-Nutzung & Beispiele # Javascript - Beispielhafte Anfrage **Beschreibung:** Diese JavaScript-Funktion ruft Sensordaten von der **SmartDog API v2** ab. Die API liefert Sensordaten für einen bestimmten Zeitraum im JSON-Format zurück. **Programmiersprache:** JavaScript (async/await) **API-URL:** `https://apiv2.smart-dog.eu/index.php` --- ### **Code:** ```javascript async function getSensorData() { const url = "https://apiv2.smart-dog.eu/index.php"; const requestData = { action: "getSensorData", apikey: "6641d282073d76b625987af5141d3e2a", SensorID: "551941", UTC_TIMESTAMP_FROM: "1739867939", UTC_TIMESTAMP_TO: "1739877939" }; try { const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(requestData) }); if (!response.ok) { throw new Error(`HTTP-Fehler! Status: ${response.status}`); } const data = await response.json(); document.getElementById("sensorOutput").textContent = JSON.stringify(data, null, 2); } catch (error) { console.error("Fehler beim Abrufen der Sensordaten:", error); document.getElementById("sensorOutput").textContent = "Fehler beim Abrufen der Daten."; } } ``` --- ### **Beschreibung der Funktion:** 1. **API-Request vorbereiten:** - Erstellt eine Anfrage an die API mit den Parametern: - `action`: `"getSensorData"` - `apikey`: `"6641d282073d76b625987af5141d3e2a"` - `SensorID`: `"551941"` - `UTC_TIMESTAMP_FROM`: `"1739867939"` - `UTC_TIMESTAMP_TO`: `"1739877939"` 2. **Daten abrufen mit `fetch()`:** - Sendet die Anfrage per `POST`-Methode an die API. - Setzt den `Content-Type`-Header auf `"application/json"`. - Wandelt das `requestData`-Objekt in JSON um und sendet es als `body`. 3. **Fehlermanagement:** - Falls der Server keine gültige Antwort sendet (`!response.ok`), wird eine `Error`-Exception geworfen. - Falls ein Fehler auftritt, wird dieser in der Konsole (`console.error`) ausgegeben und eine Fehlermeldung im HTML-Element mit der ID `"sensorOutput"` angezeigt. --- ### **Beispiel für eine erfolgreiche API-Antwort:** ```json { "sensor_id": 551941, "valid": 1, "datasets": { "1739868002": { "DATA": "251", "TIMESTAMP_UTC": 1739868002, "TIMESTAMP_LOCAL": 1739871602 }, "1739868302": { "DATA": "257", "TIMESTAMP_UTC": 1739868302, "TIMESTAMP_LOCAL": 1739871902 } } } ``` --- # Php - Beispielhafte Anfrage **Beschreibung:** Dieses PHP-Skript ruft Sensordaten von der **SmartDog API v2** ab. Die API liefert Sensordaten für einen bestimmten Zeitraum im JSON-Format zurück. **Programmiersprache:** PHP **API-URL:** `https://apiv2.smart-dog.eu/index.php` --- ### **Code:** ```php "getSensorData", "apikey" => "6641d282073d76b625987af5141d3e2a", "SensorID" => "551941", "UTC_TIMESTAMP_FROM" => "1739867939", "UTC_TIMESTAMP_TO" => "1739877939" ]; $options = [ "http" => [ "header" => "Content-Type: application/json\r\n", "method" => "POST", "content" => json_encode($requestData) ] ]; $context = stream_context_create($options); $response = file_get_contents($url, false, $context); if ($response === FALSE) { die("Fehler beim Abrufen der Sensordaten"); } $data = json_decode($response, true); echo "" . print_r($data, true) . ""; } getSensorData(); ?> ``` --- ### **Beschreibung der Funktion:** 1. **API-Request vorbereiten:** - Erstellt eine Anfrage an die API mit den Parametern: - `action`: `"getSensorData"` - `apikey`: `"6641d282073d76b625987af5141d3e2a"` - `SensorID`: `"551941"` - `UTC_TIMESTAMP_FROM`: `"1739867939"` - `UTC_TIMESTAMP_TO`: `"1739877939"` 2. **Datenabruf mit `file_get_contents()`:** - Sendet eine `POST`-Anfrage mit JSON-Daten an die API. - Nutzt `stream_context_create()` zum Setzen der `Content-Type`-Header. - Falls die Antwort fehlschlägt (`FALSE`), gibt das Skript eine Fehlermeldung aus. 3. **Antwortverarbeitung:** - Dekodiert die JSON-Antwort mit `json_decode()`. - Gibt die Sensordaten formatiert (`print_r()`) als HTML-`
`-Block aus. --- ### **Beispiel für eine erfolgreiche API-Antwort:** ```json { "sensor_id": 551941, "valid": 1, "datasets": { 1739868002.000000: { "DATA": "251", "TIMESTAMP_UTC": 1739868002, "TIMESTAMP_LOCAL": 1739871602 }, 1739868302.000000: { "DATA": "257", "TIMESTAMP_UTC": "1739868302.000000", "TIMESTAMP_LOCAL": 1739871902 } } } ``` --- ### **Alternative mit cURL (empfohlen für größere API-Anfragen):** ```php "getSensorData", "apikey" => "6641d282073d76b625987af5141d3e2a", "SensorID" => "551941", "UTC_TIMESTAMP_FROM" => "1739867939", "UTC_TIMESTAMP_TO" => "1739877939" ]; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestData)); $response = curl_exec($ch); if (curl_errno($ch)) { die("Fehler beim Abrufen der Sensordaten: " . curl_error($ch)); } curl_close($ch); $data = json_decode($response, true); echo "" . print_r($data, true) . ""; } getSensorData(); ?> ``` Diese Variante verwendet `cURL`, was für größere API-Anfragen besser geeignet ist. --- ### **Einsatz in einer HTML-Seite:** ```html ``` Beim Klicken auf den Button `"Sensordaten abrufen"` wird die PHP-Funktion ausgeführt, und die Daten erscheinen im ``-Tag. ``` # Windows Terminal - Beispielhafte Anfrage **Beschreibung:** Dieser `cURL`-Befehl sendet eine `POST`-Anfrage an die **SmartDog API v2**, um Sensordaten für einen bestimmten Zeitraum abzurufen. **Tool:** cURL **API-URL:** `https://apiv2.smart-dog.eu/index.php` **Methode:** `POST` --- ### **Code:** ```sh curl -X POST "https://apiv2.smart-dog.eu/index.php" \ -H "Content-Type: application/json" \ -d '{ "action": "getSensorData", "apikey": "6641d282073d76b625987af5141d3e2a", "SensorID": "551941", "UTC_TIMESTAMP_FROM": "1739867939", "UTC_TIMESTAMP_TO": "1739877939" }' ``` --- ### **Beschreibung der Parameter:** - `-X POST` → Die Anfrage wird per `POST`-Methode gesendet. - `-H "Content-Type: application/json"` → Setzt den Header auf JSON-Daten. - `-d '{...}'` → Enthält die zu sendenden JSON-Daten. --- ### **Beispiel für eine erfolgreiche API-Antwort:** ```json { "sensor_id": 551941, "valid": 1, "datasets": { "1739868002": { "DATA": "251", "TIMESTAMP_UTC": 1739868002, "TIMESTAMP_LOCAL": 1739871602 }, "1739868302": { "DATA": "257", "TIMESTAMP_UTC": 1739868302, "TIMESTAMP_LOCAL": 1739871902 } } } ``` --- ### **Alternative mit Ausgabe in einer Datei:** Falls du die Antwort direkt in einer Datei speichern möchtest: ```sh curl -X POST "https://apiv2.smart-dog.eu/index.php" \ -H "Content-Type: application/json" \ -d '{ "action": "getSensorData", "apikey": "6641d282073d76b625987af5141d3e2a", "SensorID": "551941", "UTC_TIMESTAMP_FROM": "1739867939", "UTC_TIMESTAMP_TO": "1739877939" }' > response.json ``` Die Antwort wird dann in `response.json` gespeichert.