Ich bräuchte mal eine Idee...
Bei mir werkelt seit kurzen eine PV mit einem FoxEss T6G3 Wechselrichter. An die Aktualwerte komme ich mit Einsatz eines Shelly 3em pro, an die Daten des Zählers mit einem USB Lesekopf.
Aus Neugierde und zu Statistikzwecken würde ich gerne noch ein paar innere Werte des Wechselrichters auslesen. Dies muss nicht real time sein, dazu wie gesagt gibts den Shelly und die anderen Messstellen.
Weil die Daten nur Neugierdezwecken dienen wollte ich auf Modbusaufbau verzichten. Es gäbe zwar die Möglichkeit über die FoxExx Cloud an die Daten zu kommen, nur gibts da weder bei IObroker einen Adapter noch hier im Forum Scriptschnitzel.
Deshalb nun meine Frage:
gegeben: Raspberrymatik in aktueller Firmware
IOBroker mit aktuellem stable release
gesucht: Ansatz wie ich auf RMatik oder dem IoBroker ohne grossen Aufwand an die Daten komme, Ansatz reicht, dann probiere ich mich auch selber daran
vorhanden:
API Dokumentation: https://www.foxesscloud.com/public/i18n ... ument.html
für HA findet man auch ein Beispiel, aber dies auch in Python
In Python3 wie in dem beispiel hab ichs mit wildem Probieren hinbekommen, Portierungsversuch nach HMScript oder Javascript war eher Desaster
nicht gesucht:
die üblichen kostenintensiven Werbeposts und kostenpflichtigen Produktvorschläge. Ich meissel eher die Wände auf und installiere Gaslampen als das zu verwenden.
Extra farblich markiert
Thnx, Roland
Wechselrichter Fox-Ess T6G3 einbinden
Moderator: Co-Administratoren
-
- Beiträge: 9771
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 707 Mal
- Danksagung erhalten: 1647 Mal
Re: Wechselrichter Fox-Ess T6G3 einbinden
Wenn es eine API gibt, die durch Aufruf einer URL ein JSON liefert, dann kann dir das Skript in meiner Signatur weiterhelfen.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
- Black
- Beiträge: 5527
- Registriert: 12.09.2015, 22:31
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Wegberg
- Hat sich bedankt: 432 Mal
- Danksagung erhalten: 1093 Mal
- Kontaktdaten:
Re: Wechselrichter Fox-Ess T6G3 einbinden
Hi Roland, die API gibt es und sie liefert auch ein JSON zurück.
Ich würde da an deiner Stelle bei den Systemgegebenheiten (RMatik und IOBroker) das Vorhaben auf dem IOBroker realisieren.
Grund: DU willst die Daten nur zur Info haben, keine direkten Schaltvorgänge aufgrund des Ergebnisses. ALso braucht die CCU sich darum nicht zu kümmern, da sie mit den Daten primär nix tut.
Wodran hats bei dir denn gehangen ?
Wenn ich mirs angucke, Get device real-time data , daten eines Inverters holen, so ergibt sich bei mir folgende Logik
deine URL ist in dem Fall: 'https://www.foxesscloud.com' + '/op/v0/device/real/query', die du ansprechen musst
dazu kommt, dass du dir einen header bauen musst:
The name of the parameter Parameter value Required or not Example Remark
Content-Type application/json Yes
token Yes Generate apikey from the API management function of the platform
signature Yes Signature rule: Encrypt the string url + "\r\n" + token + "\r\n" + timestamp with md5
timestamp Yes Current timestamp
lang Yes en Language ich würd hier aber de nehmen !
die requires brauchts:
Dann brauchts was für den Header
GetAuth kannst du als function auch gebrauchen für weitere Api Aufrufe
und an die Device Daten sollte es dann so gehen: Wichtig, den body brauchts die Inverterseriennummer
du hast 1440 API Aufrufe pro tag, da die cloud aber nur alle x minuten aktualisiert und nachts der WR eh schlafen geht kannst das auch so machen
apikey etc sollte klar sein, lang ist die sprache, path der cload Abfrage Pfad
Viel Spass beim Ausprobieren, Black
Ich würde da an deiner Stelle bei den Systemgegebenheiten (RMatik und IOBroker) das Vorhaben auf dem IOBroker realisieren.
Grund: DU willst die Daten nur zur Info haben, keine direkten Schaltvorgänge aufgrund des Ergebnisses. ALso braucht die CCU sich darum nicht zu kümmern, da sie mit den Daten primär nix tut.
Wodran hats bei dir denn gehangen ?
Wenn ich mirs angucke, Get device real-time data , daten eines Inverters holen, so ergibt sich bei mir folgende Logik
deine URL ist in dem Fall: 'https://www.foxesscloud.com' + '/op/v0/device/real/query', die du ansprechen musst
dazu kommt, dass du dir einen header bauen musst:
The name of the parameter Parameter value Required or not Example Remark
Content-Type application/json Yes
token Yes Generate apikey from the API management function of the platform
signature Yes Signature rule: Encrypt the string url + "\r\n" + token + "\r\n" + timestamp with md5
timestamp Yes Current timestamp
lang Yes en Language ich würd hier aber de nehmen !
die requires brauchts:
Code: Alles auswählen
var md5=require ('js-md5')
var request= require ('request')
var domain= 'https://www.foxesscloud.com'
Code: Alles auswählen
function GetAuth (token,path,lang) {
let timestamp= Date.now()
let signature= path+"\\r\\n"+token+"\\r\\n"+timestamp.toString()
let a={"Content-Type":"application/json", token: apikey,lang: lang,"timestamp": timestamp.toString(),"signature":md5(signature),"User-Agent": userAgent}
return a
}
und an die Device Daten sollte es dann so gehen: Wichtig, den body brauchts die Inverterseriennummer
Code: Alles auswählen
function device_realquery (SerNr) {
let x=''
const options= {url: domain+path_real_query,
method: 'POST',
headers: GetAuth (apikey,path_real_query,lang),
body: '{"sn": "'+SerNr+'", "variables": []}'
}
// log (options)
request(options, function(error, response, body) {
// real daten
try {
var jdev= JSON.parse (body)
// Hier darfst du dich dann austoben, ab hier ist es ein JSON
}
catch (error) {
log ("war nix")
}
})
}
Code: Alles auswählen
schedule('*/2 * * * *', () => {
if (isAstroDay()) {
device_realquery('DeineWRSeriennummer')
log ("triggered")
}
});
Viel Spass beim Ausprobieren, Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg
Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann
Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W
technical contribution against annoying advertising
-
- Beiträge: 78
- Registriert: 24.07.2020, 10:48
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 37 Mal
- Danksagung erhalten: 41 Mal
Re: Wechselrichter Fox-Ess T6G3 einbinden
Vielen Dank @Black
hat so funktioniert.
Meine eigenen Versuche scheiterten beim Zusammensetzen des Headers. Eigentlich total einfach, wenn man dein Beispiel sieht. Aber man muss drauf kommen (oder halt wissen wies geht).
Läuft seit einer Woche zuverlässig.
Danke, Roland
Tip an Anwender, die es in IObroker nachprogggen wollen. js-md5 in dem entsprechenden javascript adapter als node modul angeben, sonst wundert man sich, warum das require nur Fehler wirft.
hat so funktioniert.
Meine eigenen Versuche scheiterten beim Zusammensetzen des Headers. Eigentlich total einfach, wenn man dein Beispiel sieht. Aber man muss drauf kommen (oder halt wissen wies geht).
Läuft seit einer Woche zuverlässig.
Danke, Roland
Tip an Anwender, die es in IObroker nachprogggen wollen. js-md5 in dem entsprechenden javascript adapter als node modul angeben, sonst wundert man sich, warum das require nur Fehler wirft.