mwittig / node-fronius-solar

Access PV live logs using the Fronius Solar API
MIT License
40 stars 9 forks source link

andere abfrage #1

Closed madison2007 closed 8 years ago

madison2007 commented 8 years ago

hi,

wie groß wäre der Aufwand "ip-adresse/components/5/0/?print=names" als abfrage einzupflegen? b.z.w. was müsste alles geändert werden? damit würde man auch den Eigenverbrauch und die Einspeisung ermitteln können, vorrausgesetzt man hat einen Smartmeter.

lg M

mwittig commented 8 years ago

Hi,

Also das wäre keine grosse Sache, aber stehe momentan etwas auf dem Schlauch: Gehört die Abfrage zur Fronius Solar API oder handelt es sich um einen anderen Service?

madison2007 commented 8 years ago

Gehört auch zur Abfrage von Fronius API. die Ausgabe sieht so aus:

{
    "Head" : {
        "RequestArguments" : {
            "resource" : "5\/0\/",
            "print" : "names"
        },
        "Status" : {
            "Code" : 0,
            "Reason" : "",
            "UserMessage" : "",
            "ErrorDetail" : {
                "Nodes" : []
            }
        },
        "Timestamp" : "2016-02-25T11:23:46+01:00"
    },
    "Body" : {
        "Data" : {
            "TimeStamp" : {
                "value" : 1456395825,
                "unit" : "sec"
            },
            "Enable" : {
                "value" : 1,
                "unit" : "1"
            },
            "Visible" : {
                "value" : 1,
                "unit" : "1"
            },
            "Power_P_Generate" : {
                "value" : 629,
                "unit" : "W"
            },
            "Power_P_Load" : {
                "value" : -2883.25,
                "unit" : "W"
            },
            "Power_P_Grid" : {
                "value" : 2254.25,
                "unit" : "W"
            },
            "Power_Akku_Sum" : {
                "value" : null,
                "unit" : "W"
            },
            "Power_PV_Sum" : {
                "value" : 629,
                "unit" : "W"
            },
            "Relative_Current_SelfConsumption" : {
                "value" : 100,
                "unit" : "%"
            },
            "Relative_Current_Autonomy" : {
                "value" : 21.815659,
                "unit" : "%"
            },
            "Power_P_SelfConsumption" : {
                "value" : -629,
                "unit" : "W"
            }
        }
    }
}
mwittig commented 8 years ago

Das sieht interessant aus! Ich kenne bisher nur die Fronius Solar API V1 - darin konnte ich aber den o.g. Query nicht finden. Ich bräuchte also bitte noch genauere Angaben zum Gerät. Evntl gibt es ja noch eine neuere Version der API ...

madison2007 commented 8 years ago

Der Wechselrichter ist ein Fronius Symo 5.0-3-M Bj. 2015 mit Integriertem Datenlogger und installiertem Smartmeter von Fronius. Den Query hab ich auch zufällig im Internet gefunden als ich mit FHEM herumgespielt habe. Mit diesen Daten wäre es einfacher Geräte per Überschuß zu schalten/steuern.

mwittig commented 8 years ago

Ah, ok. Ich denke, dass ich den Thread gefunden habe: http://forum.fhem.de/index.php?topic=24614.15

Es handelt sich anscheinend um eine nicht dokumentierte Dienstfunktion des Datenlogger, der im Symo integriert ist. Also ich intgeriere dass gerne, es wir aber schon ein paar Tage dauern und Du musst dann das Versuchskaninchen spielen :)

madison2007 commented 8 years ago

Das wäre toll! Wenn du mir erklärst was ich machen muss kann ich es gerne probieren!

madison2007 commented 8 years ago

gibts schon neuigkeiten?

mwittig commented 8 years ago

Leider nein. Ich was das ganze WE unterwegs. Ich schaue es mir in den kommenden Tagen an.

mwittig commented 8 years ago

Hi, ich habe mal den ersten Wurf implementiert. Bitte probiere es mal aus.

Der Code ist aber noch nicht als npm package veröffentlicht. Du müsstest also bitte das git repository klonen. Wenn Du diesbezüglich weitere Informationen brauchst, sag einfach Bescheid und ich helfe Dir gerne weiter.

mwittig commented 8 years ago

@madison2007 Hattest Du den neuen Call schon ausprobiert? (siehe example.js)

madison2007 commented 8 years ago

Hi , Bin noch bis Freitag im urlaub. Kann es mir erst ansehen wenn ich zu hause bin. Sonnige grüße von den seychellen

mwittig commented 8 years ago

^^ Du Glücklicher! Schöne Urlaubstage noch!

madison2007 commented 8 years ago

Danke! Vielleicht kannst mir in der Zwischenzeit schildern was ich zum testen machen muss.

Lg

madison2007 commented 8 years ago

"Der Code ist aber noch nicht als npm package veröffentlicht. Du müsstest also bitte das git repository klonen. " wie mache ich das?

mwittig commented 8 years ago

Ich habe ein neues Package gebaut. --> 0.0.5 Ich denke, dass es ist einfacher :) Beispielcode findest Du in der example.js oder auch im README

In welchem Kontext willst Du das Package eigentlich einsetzen?

madison2007 commented 8 years ago

bin da noch ein neuling auf dem gebiet und steh im moment etwas auf der leitung ;-) was muss ich mit dem package jetzt machen und was muss ich mit dem beispielcode machen? sorry für meine dummen fragen ;-)

mwittig commented 8 years ago

Oha, hast Du noch nichts mit Node gemacht? Ich versuche hier mal die Super-Kurzanleitung: 1) Nodejs installieren - enthält node (zur Ausführung von JS-Programmen) und npm (Paket-Manager). Siehe https://nodejs.org/en/, nimm dort die LTS-Version. 2) Wenn der Rotz installiert ist, öffnest Du eine Command Shell. Darin sollte das Kommando "npm" ausführbar sein. Falls nicht, stimmt etwas mit den Systempfaden nicht. 3) Paket installieren npm install node-fronius-solar 4) Jetzt hast Du im aktuellen Verzeichnis ein Verzeichnis "node-fronius-solar". Darin liegt dann die Datei "example.js". Diese Datei musst Du noch editieren um die IP-Adresse anzupassen 5) cd node-fronius-solar, dann examples.js ausführen node example.js

madison2007 commented 8 years ago

node hatte ich schon installiert, aber sonst habe ich noch nicht wirklich viel damit gemacht. bei der ausführung kommt der fehler:

root@smart-home:/home/pi/pimatic-app/node_modules/pimatic-fronius-solar/node_modules/node-fronius-solar# node example.js

/home/pi/pimatic-app/node_modules/pimatic-fronius-solar/node_modules/node-fronius-solar/example.js:2
..    util = require('util'),
^
SyntaxError: Unexpected token .
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3
madison2007 commented 8 years ago

ich hatte vorher schon das node-fronius-solar installiert. sollte ich das vorher löschen oder kann man es darüber installieren?

madison2007 commented 8 years ago

habe das paket jetz ganz neu installiert. bei node example.js kommt:

root@smart-home:/home/pi/pimatic-app/node_modules/node-fronius-solar# node example.js
{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }
{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }
mwittig commented 8 years ago

Sorry, Du musst auch den Port ändern. Vermutlich auf 80!

https://github.com/mwittig/node-fronius-solar/blob/master/example.js#L4-L5

madison2007 commented 8 years ago

die abfrage per node klappt soweit.

root@smart-home:/home/pi/pimatic-app/node_modules/node-fronius-solar# node example.js
{ Head:
   { RequestArguments:
      { DataCollection: 'CommonInverterData',
        DeviceClass: 'Inverter',
        DeviceId: '1',
        Scope: 'Device' },
     Status:
      { Code: 0,
        Reason: '',
        UserMessage: '' },
     Timestamp: '2016-03-21T12:30:27+01:00' },
  Body:
   { Data:
      { DAY_ENERGY: { Value: 7489, Unit: 'Wh' },
        FAC: { Value: 49.95, Unit: 'Hz' },
        IAC: { Value: 7.12, Unit: 'A' },
        IDC: { Value: 5.88, Unit: 'A' },
        PAC: { Value: 1686, Unit: 'W' },
        TOTAL_ENERGY: { Value: 525892, Unit: 'Wh' },
        UAC: { Value: 233.3, Unit: 'V' },
        UDC: { Value: 293.9, Unit: 'V' },
        YEAR_ENERGY: { Value: 478714, Unit: 'Wh' },
        DeviceStatus:
         { StatusCode: 7,
           MgmtTimerRemainingTime: -1,
           ErrorCode: 0,
           LEDColor: 2,
           LEDState: 0,
           StateToReset: false } } } }
1133 'milliseconds elapsed'
{ Head:
   { RequestArguments: { resource: '5/0/', print: 'names' },
     Status:
      { Code: 0,
        Reason: '',
        UserMessage: '',
        ErrorDetail: { Nodes: [] } },
     Timestamp: '2016-03-21T12:30:28+01:00' },
  Body:
   { Data:
      { TimeStamp: { value: 1458559826, unit: 'sec' },
        Enable: { value: 1, unit: '1' },
        Visible: { value: 1, unit: '1' },
        Power_P_Generate: { value: 1678, unit: 'W' },
        Power_P_Load: { value: -3473.91, unit: 'W' },
        Power_P_Grid: { value: 1795.91, unit: 'W' },
        Power_Akku_Sum: { value: null, unit: 'W' },
        Power_PV_Sum: { value: 1678, unit: 'W' },
        Relative_Current_SelfConsumption: { value: 100, unit: '%' },
        Relative_Current_Autonomy: { value: 48.302921, unit: '%' },
        Power_P_SelfConsumption: { value: -1678, unit: 'W' } } } }
1922 'milliseconds elapsed'
mwittig commented 8 years ago

Das sieht doch gut aus, oder? Nun ist die Frage wie Du die Daten verarbeiten willst?! Wenn es Dir hauptsächlich um die Abfrage der Daten via Web geht, solltest Du mal einen Blick auf "pimatic" werfen. Für pimatic habe ich auch einen Plugin geschrieben, allerdings müsste ich dies moch entsprechend um die neue Datenabfrage erweitern.

https://pimatic.org/ https://pimatic.org/plugins/pimatic-fronius-solar/

madison2007 commented 8 years ago

pimatic habe ich alles schon am laufen. mir würde es darum gehen das ich die daten wie im pimatic-fronius-solar weiter verarbeiten kann. nur eben mit der neuen abfrage. interessant wären die statistiken und das ich auf die daten rules anwenden kann damit ich bei überschuss verbraucher per z-wave schalten kann um den eigenverbrauch zu erhöhen. habe pimatic, fronius-solar und z-wave bereits alles installiert. nur kann man mit den aktuellen daten im fronius-solar nicht viel bez. eigenverbrauch anfangen. da wären die neuen daten hilfreicher!

mwittig commented 8 years ago

ok, das klingt spannend. Ich gebe Dir Bescheid wenn ich eine neue Version von pimatic-fronius-solar fertig habe, Das wir aber ein paar Tage dauern

madison2007 commented 8 years ago

ok, bin schon neugierig ob das so funktioniert wie ich mir das vorstelle ;-)

ikewestbrook commented 8 years ago

Würde mich ebenfalls interessieren!

mplessing commented 8 years ago

Hab grade mal die URL per Browser angetestet. Bei mir greift dabei die Passwort - Abfrage (htaccess, user, pass) des Webfrontend. Die ist zwar abschaltbar, aber... Den code habe ich noch nicht getestet.

madison2007 commented 8 years ago

Bei mir hängt der Fronius im internen netz, deshalb habe ich die Passwortabfrage abgedreht.

mwittig commented 8 years ago

@mplessing Markus, wenn Du Dich ein wenig mit REST auskennst und einen REST-Client zur Hand hast (z.B. Postman für Chrome) könntest Du bitte mal username/pasword als authorization header mitschicken. Der Server müsste dies akzeptieren, falls die Authorisierung via HTTP-BasicAuth erfolgt.

mwittig commented 8 years ago

Da fällt mir gerade ein, dass ich die Unterstützung für HTTP-BasicAuth bereits implementiert habe. Du könntest also auch mit "example.js" testen, wenn Du in den "options" noch "username" und "password" hinzufügst.

madison2007 commented 8 years ago

habe eben versucht das webfrontent mit user pw zu schützen. klappt bei mir aber nicht, kommt keine abfrage. kann sein das es da versionsbedingt unterschiede gibt. ich habe die version: Platinenversion 2.4D Softwareversion 3.4.2-1

madison2007 commented 8 years ago

@mplessing vielleicht kannst du es bei deinem fronius versuchen!

mplessing commented 8 years ago

Klar, ich schau mir das heute Abend an :)

mplessing commented 8 years ago

Hi, war leider zu spät dran - Sonne war schon weg und WR hatte sich schlafen gelegt. Das mit der Basic-Auth teste ich also morgen. Ich habe unterwegs im ChangeLog für meinen WR aber folgendes gesehen und gleich mal aufgerufen. Solar-API Doku auf Seite 37.

Enthält fast alles bis auf Selfconsumption und Authonomie. Die habe ich nirgends gefunden.

Neue Abfrage in der solar api ab Version 3.3.9-X: http://192.168.x.xxx/solar_api/v1/GetPowerFlowRealtimeData.fcgi

Die Abfrage läuft ohne Parameter und gibt bei mir das zurück (Ohne S0-Zähler am WR sind die Werte "null"):

{
    "Head" : {
        "RequestArguments" : {},
        "Status" : {
            "Code" : 0,
            "Reason" : "",
            "UserMessage" : ""
        },
        "Timestamp" : "2016-03-25T15:19:21+01:00"
    },
    "Body" : {
        "Data" : {
            "Site" : {
                "Mode" : "produce-only",
                "P_Grid" : null,
                "P_Load" : null,
                "P_Akku" : null,
                "P_PV" : 291,
                "E_Day" : 7653,
                "E_Year" : 841228,
                "E_Total" : 7978902
            },
            "Inverters" : {
                "1" : {
                    "DT" : 110,
                    "P" : 291
                }
            }
        }
    }
}
madison2007 commented 8 years ago

meiner sagt bei der Abfrage:

{
    "Head" : {
        "RequestArguments" : {},
        "Status" : {
            "Code" : 0,
            "Reason" : "",
            "UserMessage" : ""
        },
        "Timestamp" : "2016-03-26T08:06:19+01:00"
    },
    "Body" : {
        "Data" : {
            "Site" : {
                "Mode" : "meter",
                "P_Grid" : 647.46,
                "P_Load" : -915.46,
                "P_Akku" : null,
                "P_PV" : 268,
                "E_Day" : 399,
                "E_Year" : 533025,
                "E_Total" : 580203.0625,
                "Meter_Location" : "grid"
            },
            "Inverters" : {
                "1" : {
                    "DT" : 122,
                    "P" : 268
                }
            }
        }
    }
}
mplessing commented 8 years ago

@mwittig Hatte keinen Erfolg heute mit BasicAuth (username, password) in den options der example.js Was kann das noch für ein AuthTyp sein?

mplessing commented 8 years ago

Hallo nochmal, grade mit nem Sniffer geprüft, es wird ein Digest-Auth benutzt.

mwittig commented 8 years ago

Hi Markus, vielen Dank für die Rückmeldung! Ich habe mal eine experimentelle Unterstützung für Digest-Auth realisiert. Es wäre toll, wenn Du es mal ausprobieren könntest. Da ich noch kein Paket gebaut habe, muss Du es folgendermassen installieren:

# git muss installiert sein, `sudo apt-get install git-core
npm install mwittig/node-fronius-solar

Ich plane auch "GetPowerFlowRealtimeData.fcgi" zu unterstützen. Dieser Call scheint mir noch besser geeignet, da auch die akkumulierten Werte (Tag/Jahr/Total) der PV-Erzeugung zurückgegeben werden.

mwittig commented 8 years ago

Ich habe einen ersten Wurf für die Unterstützung von "ComponentsData" in Pimatic realisiert. Der Code ist aber noch nicht veröffentlicht, da ich noch diverse Tests durchführen muss und ich gerne noch das Thema "DigestAuth" klären würde. "GetPowerFlowRealtimeData" werde ich auf auch unterstützen.

Screenshot

Ihr werdet selber auf einfache Weise festlegen können, welche Attribute das Device haben soll. Wenn Ihr z.B. keine Batterie habt, könnt ihr "powerAkkuSum" weglassen. Zusätzlich könnt ihr natürlich mittels "xAttributeOptions" Attribute ausblenden, die nicht angezeigt werden sollen aber dennoch z.B. für Regeln verfügbar sein sollen.

...
FroniusComponentsData: {
    title: "Fronius GetComponentsData Device (using an undocumented API call of the PV data logger)"
    description: "Provides access to data of a Fronius Inverter supporting Solar API 1.1"
    type: "object"
    extensions: ["xLink", "xAttributeOptions"]
    properties:
      attributes:
        type: "array"
        default: ["powerGenerate", "powerLoad", "powerGrid", "powerAkkuSum", "powerPvSum", "relativeSelfConsumption", "relativeAutonomy", "powerSelfConsumption"]
        format: "table"
        items:
          type: "string"
...
    {
      "id": "fronius2",
      "class": "FroniusComponentsData",
      "name": "Fronius Inverter 2",
      "host": "localhost",
      "attributes": [
        "powerGenerate",
        "relativeSelfConsumption",
        "relativeAutonomy"
      ]
    },

Screenshot

mwittig commented 8 years ago

@mplessing "Es geht um GetPowerFlowRealtimeData". Hast Du einen Link auf die aktuelle API-Dokumentation? In der Version, die ich auf der Web-Site gefunden habe sind E_day, E_Month und E_Total nicht dokumentiert.

madison2007 commented 8 years ago

die auth kann ich leider nicht testen, egal was ich einstelle, bei mir kommt keine auth abfrage!

mplessing commented 8 years ago

Hallo Marcus,

ich habe ehrlich gesagt auch kein aktuelles Dokument gefunden, das diese Parameter enthält, sie sind aber offenbar bei beiden Testern vorhanden... kein Plan :D

Mit dem neuen modul bekomme ich gar keinen output und wenn ich consoleDebug forciere, sehe ich die params und dass er beim ersten Aufruf schon aussteigt. Der Zweite für "CommonInverterData" wird gar nicht mehr gemacht.

Beim test-server geht es problemlos. Bei Verbindung mit meinem Fronius nur, wenn ich den ersten Aufruf auskommentiere.

Der Digest-Auth scheint also zu funktionieren, aber scheinbar nicht mehr der reguläre solar_api call.

Grüße Markus

mwittig commented 8 years ago

Hi Markus, danke für die Info! Kann sein, dass die Digest-Auth nur für den undokumentierten Call notwendig ist, da der Call ein Bestandteil der WebAnwendung ist?! Die reguläre Solar-API funktionierte bei Dir doch auch vorher komplett ohne Authentisierung, oder? Die Solar-API enthält ja auch nichts zum Thema Authentisierung.

Also dann schreibe ich den Digest-Client so um, dass der Client den Service Call ohne Authensierung auufruft, falls der Server fpr den ersten HTTP-Request kein "Nonce" schickt. So müsste es mit beiden Services funktionieren.

mplessing commented 8 years ago

Genau, solar_api ist ohne auth, das andere ist irgendein anderer interner json-call. Ich denke auch, dass es in der vorgeschlagenen Weise gehen wird.

Grüße Markus

mwittig commented 8 years ago

Ok, ich habe die library mal entsprechend aktualisiert. Es wäre toll, wenn Du das noch mal bei Gelegenheit testen könntest. Du musst einfach noch mal "npm install mwittig/node-fronius-solar" ausführen um den aktuellen Stand zu bekommen.

mplessing commented 8 years ago

Grade getestet, sieht gut aus. Beide Aufrufe liefern Daten :)

Nur der Vollständigkeit halber: Platinenversion 2.2B Softwareversion 3.4.2-1

mwittig commented 8 years ago

Super! Danke fürs Ausprobieren! Ich werde dann noch "GetPowerFlowRealtimeData" integrieren und in paar Tagen eine neue Version des Plugin fertigstellen.

mwittig commented 8 years ago

Ich habe den aktuellen Stand released und auch das PimaticPlugin entsprechend erweitert. Details hierzu findet ihr im README. Vielen Dank für Eure Anregungen und die Unterstützung beim Testen. Ich wünsche Euch viel Spass beim Ausprobieren!

Für Probleme mit dem Pimatic Plugin benutzt bitte auch den Issue Tracker auf der Plugin-Projektseite. Wenn Euch das Plugin gefällt, würde ich mich natürlich auch über Eure "Sterne" auf der Plugin-Projektseite oder "Upvotes" im Forum freuen :)

mwittig commented 8 years ago

@madison2007 Hallo. Ich wollte mal hören, ob Du das Pimatic Plugin einsetzt und Regeln zur Eigenverbrauchsoptimierung nutzt. Wir haben hierzu eine Anfrage im Forum. https://forum.pimatic.org/topic/1760/fronius-inverter-connectivity