NEWS
Rest-API adapter configuration für API Powerdog
-
Guten Tag, hat schon jemand Daten über die API vom Powerdog (ecodata) erfolgreich in iobroker integriert? Gibt es hier eine gute Anleitung? Der Powerdog Adpater funktioniert leider nicht. Vielen Dank.
-
@ht22 Hab mal einige Infos zusammen gestellt, keine Ahnung ob es hilft. Hab selber kein power-dog.
https://api.power-dog.eu/generator/https://api.power-dog.eu/documentation/
https://forum.iobroker.net/topic/10985/gelöst-mit-iobroker-daten-von-powerdog-auslesen
Script Beispiel ungetestet
Voraussetzung: xmlrpc in javascript Modul eintragen
Was kommt in der console?
const xmlrpc = require('xmlrpc'); // Konfigurationsvariablen für PowerDog const powerDogIp = '192.168.0.100'; // IP-Adresse des PowerDog-Geräts const powerDogPort = 20000; // Portnummer const apiKey = 'DEIN_API_KEY'; // Dein API-Schlüssel // Erstelle den XML-RPC-Client const client = xmlrpc.createClient({ host: powerDogIp, port: powerDogPort, path: '/' }); // Funktion zum Auslesen und Speichern von Daten function fetchPowerDogData(method, namespace) { client.methodCall(method, [apiKey], function (error, response) { if (error) { log(`Fehler beim Abrufen der ${namespace}-Daten: ${error}`, 'error'); } else if (response && response.Reply) { const data = response.Reply; log(`${namespace}-Daten erhalten: ${JSON.stringify(data)}`, 'info'); // Daten im ioBroker speichern /* for (const key in data) { if (data.hasOwnProperty(key)) { const obj = data[key]; if (typeof obj === 'object') { for (const subKey in obj) { if (obj.hasOwnProperty(subKey)) { const value = obj[subKey]; const id = `${namespace}.${key}.${subKey}`; // Objekt erstellen, falls es nicht existiert //createState(id, value, { name: subKey, type: typeof value, role: 'state' }); // Wert setzen //setState(id, value, true); } } } } } */ } else { log(`Keine ${namespace}-Daten erhalten.`, 'warn'); } }); } // PowerDog-Informationen abrufen fetchPowerDogData('getPowerDogInfo', 'Info'); // Sensor-Daten abrufen fetchPowerDogData('getSensors', 'Sensors'); // Zähler-Daten abrufen fetchPowerDogData('getCounters', 'Counters');
-
@ht22 said in Rest-API adapter configuration für API Powerdog:
Der Powerdog Adpater funktioniert leider nicht. Vielen Dank.
Das braucht dich aber nicht zu wundern.
Wenn du den Adapter meinst: https://github.com/JoeDev002/iobroker.powerdog - der ist nicht im Repository. Wohl aus gutem Grund, Und seit Jahren nicht aktualisisert.
Ganz generell gilt:
Von direkten Installation von GitHub - insbesondere auf produktiven Systemen - wird explizit abgeraten.
GitHub Versionen können sich jederzeit (auch kurzfristig) ändern und durchaus auch in sich inkonsistent und fehlerhaft sein. Versionsangaben von GitHub Installationen sind Schall und Rauch da die Versionsnummer zumindest bei Verwendung der standardmäßigen Umgebung erst im Zuge der Releaseerstellung geändert wird.
Auf explizite Aufforderung durch den Entwickler kann eine GitHub Installation zur Fehlereingrenzung oder zum Test neuer Funktionalität - unter Inkaufnahme des erhöhten Risikos - natürlich erfolgen.
Adapter die nur via GitHub oder npm (also NICHT aus einem der beiden Repositories) installierbar sind sind mit erhöhter Vorsicht zu betrachten. Hier sollte der Entwickler drum ersucht werden eine Aufnahme in die Repositories zu veranlassen indem z.B. ein Issue im Adapterrepository erstellt wird.
Und falls es irgendwie unklar ist:
ioBroker unterstützt folgende Arten von Installation:
-
aus dem STABLE Repository
Das sind Adapter Releases die keine groben Fehler aufweisen (sollten). Natürlich kann es auch dort Fehler geben, die Behebung davon obliegt dem jeweiligen Dev und kann ggF auch dauern.
-
aus dem LATEST Repository
Das sind Adapter Releases die neu erstellt wurden und nur rudimentär getestet sind - oft auch als BETA Releases bezeichnet. Releases aus dem LATEST sind primär für unsere zahlreichen freiwilligen Tester gedacht. BETA / LATEST Releases können durchaus Fehler aufweisen - auch wenn ich davon ausgehe dass jeder aintainer dies zu vermeiden versucht. Vom Einsatz auf produktiven Systemen wird abgeraten außer man braucht irgenein neues Feature (z.B. neues Gerät) unbedingt. Hier muss dann jeder Entscheiden was ihm wichtig ist.
-
direkt von GITHUB
Von Installationen direkt aus Giuthub wird definitiv abgeraten außer auf Anweisung des Maintainers und für den Fall dass man gemeinsam mit diesem etwas testen will. Details siehe oben.
-
direkt von npm
Diese Installation kann erforderlich sein, wenn man eine bestimmte Version installieren möchte / muss. Im Normalfall sollte man direkte npm Installationen ebenso meiden wie direkte GitHub Installationen - ausgenommen um z.B. zu einer bekannten Version downzugraden - obwohl hier wenigstens ein definierter Stand garantiert ist.
Adapter die NUR via npm und/oder nur via GitHub installierbar sind sollte man meiden - diese wurden nicht mal einem rudimentären Review unterzogen und sollten mit dem Attribut "vollständig auf eigenes Risiko verwenden" installiert werden. Hier empfiehlt es sich den Developer zu ersuchen eine Aufnahme in die Repos zu veranlassen. Wenn dieser darauf nicht reagiert sollte man von einer eher kurzen und unklaren Lebensdauer des Adapters ausgehen. Support meiner-/unsererseits für solche Adapter ist mit sicherheit minimalistisch.
@mcm1957
CommentLeave a comment
Footer
-
-
@mcu Vielen Dank für die Antwort. Leider scheitere ich schon an dem ersten Schritt. Was ist gemeint mit "Voraussetzung: xmlrpc in javascript Modul eintragen" ? Den Code gebe ich dann im unter Scripte JS ein. Folgender Fehlercode:"
Javascript.0 19:42:52.101 error script.js.Powerdog: Error: Cannot find module '@iobroker-javascript.0/xmlrpc'
javascript.0 19:42:52.105 error at script.js.Powerdog:2:16
javascript.0 19:42:52.106 error at script.js.Powerdog:69:3
javascript.0 19:42:52.122 error script.js.Powerdog: TypeError: Cannot read properties of undefined (reading 'createClient')
javascript.0 19:42:52.124 error at script.js.Powerdog:12:23
javascript.0 19:42:52.124 error at script.js.Powerdog:69:3 -
@ht22
javascript Instanz Einstellungen öffnen -> Zusätzliche NPM Module anklicken und xmlrpx eintragen
-> Speichern und schliessen klicken -
@mcu
Vielen vielen Dank. Das scheint wohl zu funktionieren. Leider bin ich absolut nicht fit im script. Es scheint zu funktionieren nur leider habe ich keine Ahnung wie ich diese werte dann in Variablen bekomme um sie weiter zu verwenden und wo in dem iobroker Baum ich diese Daten dann finden kann. Wäre über Unterstützung sehr dankbar, da ich eigentlich nur einen einzelnen Zählerwert noch benötige aus dem Powerdog.
javascript.0 10:49:55.952 info Start JavaScript script.js.Powerdog (Javascript/js)
javascript.0 10:49:56.041 info script.js.Powerdog: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
javascript.0 10:49:56.064 info script.js.Powerdog: Info-Daten erhalten: {}
javascript.0 10:49:56.078 info script.js.Powerdog: Sensors-Daten erhalten: {}
javascript.0 10:49:56.079 info script.js.Powerdog: Counters-Daten erhalten: {} -
@ht22 Es kommen aber keine Daten. Welcher Port ist denn im Adapter eingegeben, auch 20000?
Log immer in Code-Tags -> </> anklicken und dann einfügen
javascript.0 10:49:55.952 info Start JavaScript script.js.Powerdog (Javascript/js) javascript.0 10:49:56.041 info script.js.Powerdog: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions javascript.0 10:49:56.064 info script.js.Powerdog: Info-Daten erhalten: {} javascript.0 10:49:56.078 info script.js.Powerdog: Sensors-Daten erhalten: {} javascript.0 10:49:56.079 info script.js.Powerdog: Counters-Daten erhalten: {}
const xmlrpc = require('xmlrpc'); // Konfigurationsvariablen für PowerDog const powerDogIp = '192.168.0.100'; // IP-Adresse des PowerDog-Geräts const powerDogPort = 20000; // Portnummer const apiKey = 'DEIN_API_KEY'; // Dein API-Schlüssel // Erstelle den XML-RPC-Client const client = xmlrpc.createClient({ host: powerDogIp, port: powerDogPort, path: '/' }); // Funktion zum Auslesen und Speichern von Daten function fetchPowerDogData(method, namespace) { client.methodCall(method, [apiKey], function(error, obj, reply) { if (error) { log(`Fehler beim Abrufen der ${namespace}-Daten: ${error}`, 'error'); } else { console.log(obj) } }); } // PowerDog-Informationen abrufen fetchPowerDogData('getPowerDogInfo', 'Info'); // Sensor-Daten abrufen fetchPowerDogData('getSensors', 'Sensors'); // Zähler-Daten abrufen fetchPowerDogData('getCounters', 'Counters');
Nimm mal erst dies Programm
-
@mcu
Danke. Leider kommt jetzt ein Fehler mit dem Passwort. Was hattest du gemeint bezüglich Port im Adapter? In welchem Adapter müsste der Port eingetragen werden. Bitte entschuldige die vielen Fragen, aber habe da leider gar keine Ahnung.1/5/2025, 7:30:36 PM.384 [info ]: javascript.0 (1854) Start JavaScript script.js.Powerdog (Javascript/js) 1/5/2025, 7:30:36 PM.447 [info ]: javascript.0 (1854) script.js.Powerdog: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 1/5/2025, 7:30:36 PM.470 [info ]: javascript.0 (1854) script.js.Powerdog: { ErrorCode: 401, ErrorString: 'Invalid Password', Reply: {} } 1/5/2025, 7:30:36 PM.473 [info ]: javascript.0 (1854) script.js.Powerdog: { ErrorCode: 401, ErrorString: 'Invalid Password', Reply: {} } 1/5/2025, 7:30:36 PM.481 [info ]: javascript.0 (1854) script.js.Powerdog: { ErrorCode: 401, ErrorString: 'Invalid Password', Reply: {} }
-
@mcu ```
Wenn ich einen anderen Port verwende (habe in einem Beitrag auch etwas von 80 gefunden) kommt folgende Fehlermeldung.1/5/2025, 7:46:30 PM.130 [info ]: javascript.0 (1854) Stopping script script.js.Powerdog 1/5/2025, 7:46:31 PM.863 [info ]: javascript.0 (1854) Start JavaScript script.js.Powerdog (Javascript/js) 1/5/2025, 7:46:31 PM.882 [info ]: javascript.0 (1854) script.js.Powerdog: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 1/5/2025, 7:46:31 PM.894 [error]: javascript.0 (1854) script.js.Powerdog: Fehler beim Abrufen der Sensors-Daten: Error: Unknown XML-RPC tag 'TITLE' 1/5/2025, 7:46:31 PM.921 [error]: javascript.0 (1854) script.js.Powerdog: Fehler beim Abrufen der Info-Daten: Error: Unknown XML-RPC tag 'TITLE' 1/5/2025, 7:46:31 PM.944 [error]: javascript.0 (1854) script.js.Powerdog: Fehler beim Abrufen der Counters-Daten: Error: Unknown XML-RPC tag 'TITLE' 1/5/2025, 7:47:21 PM.471 [info ]: javascript.0 (1854) Stopping script script.js.Powerdog
-
@ht22 Und der Adapter sagt auch
Invalid Password
?
Ist der API-KEY noch gültig?
Dort wird es auch so gemacht https://github.com/JoeDev002/iobroker.powerdog/blob/master/main.js#L57