FHEM Forum

FHEM => Sonstiges => Thema gestartet von: maxx8888 am 03 Dezember 2016, 10:02:16

Titel: Solar Auswertung - Proxy
Beitrag von: maxx8888 am 03 Dezember 2016, 10:02:16
Hallo!

Ich habe mir eine kleine Solaranlage mit Envertech Inverter und Auswerteeinheit zugelegt.

Diese Auswerteeinheit überträgt Daten direkt auf die envertechportal.com und bietet wie es aussieht keine Möglichkeit direkt zu lesen.

Deshalb habe ich mal die Pakete gesnifft die an die Homepage übermittelt werden. Die Codierung ist relativ einfach und ich kann mittlerweile die Pakete direkt dekodieren.
Ich würde gerne ein Module/Device für Fhem erstellen das diese Daten liest und anschliessend Plots erstellen lassen.

Jetzt stellt sich die Frage wie ich mich mit Fhem in diese Kommunikation einklinken kann. Meine Idee wäre DNS Lookups des Envertech Teils mit dem lokalen Fhem Server zu beantworten.
Das würde heißen das sich das Envertech Teil auf einem TCP Port des Fhem Servers anmelden versucht und die Daten sendet.

Wäre es möglich so eine Art Proxy am Fhem Server zu haben, das die Daten einfach 1 zu 1 zwischen Auswerteeinheit <-> envertechportal.com durchschleust jedoch die Daten mitliest?

Vielleicht gibt es schon ein ähnliches Module in fhem?

Danke schon mal für Infos :-)

Lg,
Maxx
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: fhemmatic am 03 Januar 2017, 18:32:24
Hallo,
cool. Bisher war ich noch nicht dazu gekommen mal den Datenstrom zu sniffen.
Aber so wie auch das Portal abgesichert ist, habe ich schon vermutet das die Daten die da übertragen werden, leicht auszuwerten sind.

Nur mal ein bisschen Brainstorming:
Die Enverbridge bekommt ja via DHCP eine IP. Habe jetzt noch nicht nachgeschaut ob der fest verdrahtet eine IP anspricht oder einen DNS Namen.
Ansonsten via DNS ihm den Namen des FHEM Servers unterjubeln. Aber dann kommen die Daten bei Envertech nicht mehr an.

Was nutzt Du als FHEM Server oder sonst so im Netz?
Den FHEM Server in den Routing-Modus setzen. An einem Bein die Enverbridge die dann als DFG den FHEM Server hat. Und an dem anderen Bein Richtung Internet weiterreichen. Und schon kann man mit den üblichen Tools den Datenstrom Richtung envertecportal.com aufsaugen.

Fehlt dann noch die Aufbereitung der Daten für FHEM.

Viele Grüße
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: maxx8888 am 13 Februar 2017, 00:47:06
Hi!

Als Fhem Server habe ich eine kleine Debian VM neben anderen VMs auf meinen Nas laufen.

Ja, korrekt. Die Enverbridge macht eine DNS Anfrage auf envertecportal.com und dorthin sendet sie dann in etwa alle 10-15min Daten.
Als Router kommt bei mir eine pfSense zum Einsatz. DNS re-routen zum Fhem Server wäre kein Problem.

Würde aber wenn gerne eine Lösung anstreben, die rein auf Fhem läuft da es ja sonst anderen Usern warscheinlich nicht helfen würde.

Weil Du fragst was i so im Netz hab:
Cisco switches, pfSense Router, Ubiquiti Wlan, umgebautes Ultimate Qnap Nas, und vieeeeele Homematic Devices via Homematic Lan Interface.

Fhem Server in den Routing Modus setzen? Klingt ja schon mal intressant :-)

Falls es Dich interssiert, share ich gerne meine "Findings" von der Envertec Kommunikation.

Bin halt beim Fhem Module schreiben blutiger Anfänger.
Eigentlich habe ich noch nicht wirklich eine Idee wie ich das angehen soll.

Viele Grüsse
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: WhyTea am 20 März 2017, 11:34:49
Moin
Gibt es hier neue Erkenntnisse? Ich stehe ebenfalls vor der Anschaffung einer solchen Anglage.

Gruß
Daniel
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: peewag am 26 März 2017, 11:03:07
Hallo,

ich bin auch gerade am mit-sniffen der Pakete, aber habe leider noch keine großen Erfolge beim entschlüsseln. Könntst ihr mir bitte ein paar Tips geben, was die Pakete beinhalten?

lg Peter 
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: LPBBSB15 am 20 April 2017, 19:37:33
Hallo, hat jemand etwas über die Daten herausbekommen, die Übertragen werden?
Sind das nur SerienNr und Leistung und evt. Fehlercodes?

Oder werden auch wie bei SMA Ströme, Spannungen, Frequenz, ... übertragen ?
Vielen Dank schon einmal.
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: easy12 am 20 April 2017, 23:33:38
Hi,

ich gehe davon aus, das all Daten wie im Envertechportal übertragen werden - d.h. AC, DC, Frequenz, Power, Temp

Code sieht wie folgt aus, bin aber noch nicht dahinter gekommen wie die Daten zu decodieren sind.

XXXX = ID vom EVB200,
YYYY= erste Wechselrichter,
ZZZZ = zweite Wechselrichter
die 0000 sind Placeholder für die Daten der max. möglichen Wechselrichter

Rohdaten:

680296681004XXXXXXXX00000000940910001200YYYYYYYY01023dfa020c000155561c2738b6320b020000000000000000000000ZZZZZZZZ01023eda027400013dcb1c2738b6320b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c716


selbe Timestamp im Portal:
#1 31 DC, 226.8 AC, 50.04 Frequenz, 8.2 Watt, Total 10.67, 16.3 Temp
#2 31.4 DC, 226.8 AC, 50.04 F, 9.8 Watt, Total 9.93, 16.3 Temp
#3 30.7, 226.8, 50.01, 7.1, 10.67, 15.8
#4 31.5, 226.8, 50.01, 9   ,  9.93, 15.8
#5 30.7, 225  , 50.02, 6.6,  10.67, 15.8
#6 30.6, 225  , 50.02, 8.6,   9.93, 15.8
#7 22.2, 223.2, 49.99, 3.3, 10.67, 15.3
#8 24.1, 223.2, 49.99, 4.5,  9.93, 15.3
#9 21.3, 223.8, 50    , 0.6, 10.67, 13.3
#10 22.2, 223.8, 50  , 1.2,  9.93, 13.3
#11 15.3, 227.3, 50  ,   0, 10.67, 10.3
#12 30.1, 226.8, 50.03, 0,  9.93, 10.3

Der Interesante Teil:

#1 01023dfa0 20c000 155561c2738b6320b020
#2 01023eda0 274000 13dcb1c2738b6320b020
#3 01023d6d0 1c9000 155771be938b63202020
#4 01023ef30 240000 13dcb1be938b63202020
#5 01023d700 1a9000 155771beb38423204020
#6 01023d330 226000 13dcb1beb38423204020
#7 01022c6b0 0d6000 155771ba837cf31fe020
#8 010230380 11e000 13dcb1ba837cf31fe020
#9 01022a9800 28000 155771aa537f43200020
#10 01022c5b00 4b000 13dcb1aa537f43200020
#11 01021e8800 00000 15577191338d33200465c450
#12 01023c4c00 00000 13dcb192238b63208024



Offensichtlich ist es ja nach den Wechselrichter ID Hex, aber keine offensichtliche Umrechnung nach Decimal/Fraction/BaseXY.

maxx8888@ Kannst du uns erleuchten!? Bzw. hat jemand anderes es schon raus?

Gruß Martin
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: easy12 am 22 April 2017, 02:58:13
Ich bin ein wenig weiter gekommen:

Immer 4er Blöcke (außer kWh) nach der ID:
ID                      + 0102   + 3de6 + 1b9e + 000155e0 + 26bf + 3a08 + 3203
WechselrichterID + ????#1 +  DC + Watt  + kWh-Total + Temp + AC   + Frequenz
#1 Code welche Info jetzt kommt

Berechnung der Werte:

Frequenz
4er Block in 2 einzelne Hexwerte
#1 HEX->DEZ
31 -> 49
32 -> 50

#2 HEX->DEZ
0d->13
13/255 = 0,0509
320d=50,0509

Watt && AC
Block komplett von HEX in DEZ
1b9e->7070
7070/64=110,468

3671->13937
13937/64=217,76

DC
31,2 3e6e 3e58
31   3df0
30,9 3de6 3dd2 3dd0
30,8 3d88 3da6
30,7 3d66 3d7c 3d56
30,6 3d34
30,5 3cec
29,9 3bb8 3bc4 -> 15288 15300

HEX->DEZ / 512
15300/512 = 29,882

Total kWh
10,68 000155e0
10,70 00015676 -> 87670/8192=10,7019
10,72 0001571a
10,74 00015793
10,75 0001581c -> 10,75341

TotalkWh HEXBlock 8 Stellen  -> DEZ / 8192


noch nicht bestimmt:
TEMP

15,8 1beb
37,4 26b4 26b9
37,5 26bf
39,7 27de 27dd
40,2 2816

Noch ein paar Werte zum Spielen:

0102 3de6 1b9e 0001 55e0 26bf 3a08 320300
30.9, 232.1, 110.5, 50.01, 37.5, Apr.21 14:04,2017, 10.68

0102 3d88 3671 0001 55e0 2676 3aae 320200
30.8, 234.7 ,217.8, 50.01,36.9, Apr.21 14:07,2017, 10.68

0102 3e6e 3d08 0001 5676 26b4 3ab9 31fd00
31.2, 234.9, 244.1, 49.99, 37.4, Apr.21 14:10,2017, 10.7

0102 3c58 39ee 0001 571a 26f3 3a6c 31fc00
30.2, 233.7, 231.7, 49.98, 37.9, Apr.21 14:13,2017, 10.72

0102 3bc4 2061 0001 571a 273a 39ae 31fe00
29.9, 230.7, 129.5, 49.99, 38.5, Apr.21 14:18,2017, 10.72

0102 3da6 3981 0001 5793 2766 3a43 31fc00
30.8, 233, 230, 49.98, 38.8, Apr.21 14:21,2017, 10.74

0102 3df0 15ad 0001 581c 275 83eb 320900
31, 231.7, 86.7, 50.04, 38.7, Apr.21 14:24,2017, 10.75


Gruß Martin
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: LPBBSB15 am 30 April 2017, 00:41:26
Hallo,
leider hatte ich keine Benachrichtigung erhalten und habe die letzten Stunden damit verbracht das ebenfalls zu analysieren.
Ich kann das so weit bestätigen.

Zur Temperatur bitte mal prüfen  (( T1 * 256 + T2 ) / 128 ) - 40 = T [°C]
ob das bei Dir / Euch paßt.
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: easy12 am 30 April 2017, 21:38:26
Hi, Respekt! Hab die Temperatur mal mit 3 meiner Werte durchprobiert und alle haben gepasst. Wie soll man darauf bitte kommen ;)

Hier noch 2 Anregungen bzw. Überlegungen - ich habe davon (noch) nichts umgesetzt.

Die Hacklösung:
- Permanent TCPDUMP mit e.g. raspberry pi. Dafür brauch man aber z.b managebaren Switch oder Firewall für port-mirror.
-> Auswertung der Daten

Die Proxylösung, die für die meisten Heimsetups funktionieren sollte:
Wer kein extra DNS server oder andersweitige Möglichkeiten mit Firewall oder ähnlichen hat um DNS Lookups umzuschreiben.
https://adrian-jagusch.de/2015/03/domains-abfangen-mit-der-fritzbox-als-dns-server/
(https://adrian-jagusch.de/2015/03/domains-abfangen-mit-der-fritzbox-als-dns-server/)+ TCP proxy um Daten abzufangen und weiterzuleiten. Python Code zum entschlüsseln muss natürlich noch eingebettet werden.
http://voorloopnul.com/blog/a-python-proxy-in-less-than-100-lines-of-code/
(http://voorloopnul.com/blog/a-python-proxy-in-less-than-100-lines-of-code/)
Ähnliches gibt sicherlich auch in anderen Sprachen...

Gruß Martin
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: LPBBSB15 am 03 Mai 2017, 18:28:37
Hallo,

hat schon jemand Erfolg mit Berechnung der CRC gehabt ?   Hiermit bin ich leider auch nicht weitergekommen:  http://crccalc.com/

Viele Grüße Herbert
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: easy12 am 07 Mai 2017, 22:47:23
Zitat von: LPBBSB15 am 03 Mai 2017, 18:28:37,
hat schon jemand Erfolg mit Berechnung der CRC gehabt ?   Hiermit bin ich leider auch nicht weitergekommen:  http://crccalc.com/

Leider nein, aber ich bin über http://reveng.sourceforge.net/ gestolpert was quasi reverse engineering von CRC bietet. Ich hab leider gerade keinen Rechner mit power um es durchlaufen zu lassen, der pi braucht halt ewig.

Für die kurzen messages wäre syntax "reveng-1.5.1# ./reveng -w 368 -l -s hex1 hex2 hex3" Dann rödelt er...


Ansonsten kann ich zumindest Erfolge vermelden bzgl. Proxy - ich hab den 100 Zeilen Code von oben verwendet und noch die Python Funktionen hinzugepackt. Auf dem Pi den DNS Server installiert und ne Außnahme für die eine Webadresse eingerichtet und lasse DHCP die IP vom DNS Server vergeben. DNS override: e.g. https://serverfault.com/questions/18748/overriding-some-dns-entries-in-bind-for-internal-networks  (https://serverfault.com/questions/18748/overriding-some-dns-entries-in-bind-for-internal-networks)

Wie Ihr unten seht übergebe ich allerdings nicht an FHEM  :-\ , sondern an Pimatic, aber die Pushvariante kann ein FHEM versierter einfach anpassen.

Hin und wieder gibt es Socketerror, den ich abfange und er trennt und verbindet sich beim nächsten push neu. Das läuft jetzt schon rund 2 Tage ohne Probleme. Die Proxy.py  einfach über cron bei Systemstart ausführen lassen,

@reboot /root/scripts/proxystart.sh


Folgender Code startet die proxy.py immer neu falls es mal nen Error gibt.

#!/bin/bash

until /root/scripts/proxy.py; do
    echo "Proxy.py crashed with exit code $?.  Respawning.." >&2
    sleep 1
done


Hier der Proxycode inkl. Anpassungen und Berechnungen (Define + Calc kann zusammengefasst werden, aber getrennt ist übersichtlicher):

#!/usr/bin/python
# This is a simple port-forward / proxy, written using only the default python
# library. If you want to make a suggestion or fix something you can contact-me
# at voorloop_at_gmail.com
# Distributed over IDC(I Don't Care) license
from __future__ import division
import socket
import select
import time
import sys
import os

# Changing the buffer_size and delay, you can improve the speed and bandwidth.
# But when buffer get to high or delay go too down, you can broke things
buffer_size = 4096
delay = 0.0001
forward_to = ('www.envertecportal.com', 10013)
DEBUG = False

class Forward:
    def __init__(self):
        self.forward = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def start(self, host, port):
        try:
            self.forward.connect((host, port))
            return self.forward
        except Exception, e:
            print e
            return False

class TheServer:
    input_list = []
    channel = {}

    def __init__(self, host, port):
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.server.bind((host, port))
        self.server.listen(200)

    def main_loop(self):
        self.input_list.append(self.server)
        while 1:
            time.sleep(delay)
            ss = select.select
            inputready, outputready, exceptready = ss(self.input_list, [], [])
            for self.s in inputready:
                if self.s == self.server:
                    self.on_accept()
                    break

                try:
                    self.data = self.s.recv(buffer_size)
                    if len(self.data) == 0:
                        self.on_close()
                        break
                    else:
                        self.on_recv()
                except socket.error:
                    if DEBUG:
                        print ('Socket error')
                        time.sleep(1)
                    #self.on_close()
                else:
                    continue

    def on_accept(self):
        forward = Forward().start(forward_to[0], forward_to[1])
        clientsock, clientaddr = self.server.accept()
        if forward:
            print clientaddr, "has connected"
            self.input_list.append(clientsock)
            self.input_list.append(forward)
            self.channel[clientsock] = forward
            self.channel[forward] = clientsock
        else:
            print "Can't establish connection with remote server.",
            print "Closing connection with client side", clientaddr
            clientsock.close()

    def on_close(self):
        print self.s.getpeername(), "has disconnected"
        #remove objects from input_list
        self.input_list.remove(self.s)
        self.input_list.remove(self.channel[self.s])
        out = self.channel[self.s]
        # close the connection with client
        self.channel[out].close()  # equivalent to do self.s.close()
        # close the connection with remote server
        self.channel[self.s].close()
        # delete both objects from channel dict
        del self.channel[out]
        del self.channel[self.s]

    def extract(self, data, wrind):
        pos1 = 40 + (wrind*64)
        # Define
        d_wr_id = data[pos1:pos1+8]
        d_hex_dc = data[pos1+12:pos1+12+4]
        d_hex_power = data[pos1+16:pos1+16+4]
        d_hex_total = data[pos1+20:pos1+20+8]
        d_hex_temp = data[pos1+28:pos1+28+4]
        d_hex_ac = data[pos1+32:pos1+32+4]
        d_hex_freq = data[pos1+36:pos1+36+4]
        d_hex_remaining = data[pos1+40:pos1+40+24]

        # Calculation
        d_dez_dc = '{0:.2f}'.format(int(d_hex_dc, 16)/512)
        d_dez_power = '{0:.2f}'.format(int(d_hex_power, 16)/64)
        d_dez_total = '{0:.2f}'.format(int(d_hex_total, 16)/8192)
        d_dez_temp = '{0:.2f}'.format(((int(d_hex_temp[0:2], 16)*256+int(d_hex_temp[2:4], 16))/ 128)-40)
        d_dez_ac = '{0:.2f}'.format(int(d_hex_ac, 16)/64)
        d_dez_freq = '{0:.2f}'.format(int(d_hex_freq[0:2], 16)+int(d_hex_freq[2:4], 16)/ 256)

        if int(d_wr_id) != 0:
            result = {'wrid' : d_wr_id, 'dc' : d_dez_dc, 'power' : d_dez_power, 'totalkwh' : d_dez_total, 'temp' : d_dez_temp, 'ac' : d_dez_ac, 'freq' : d_dez_freq, 'remaining' : d_hex_remaining}
            return result

    def submit_data(self, wrdata):
        # Can be https as well. Also: if you use another port then 80 or 443 do not forget to add the port number.
        pimatic_server = 'IP FOR PIMATIC SERVER'
        # user and password. I prefer a special posting user having a role of varposter with only  "variables": "write" in the varposter role. Rest to "none" or false.
        pimatic_user = 'removed'
        pimatic_pass = 'removed'
        pim_user_pass = pimatic_user + ':' + pimatic_pass
        curl_prefix = 'curl --silent --insecure -X PATCH --header "Content-Type:application/json" --data \'{"type": "value", "valueOrExpression": "'
        pim_server_url = pimatic_server + '/api/variables/'
        #print len(wrdata)
        #print wrdata

        for wrdict in wrdata:
            print wrdict['wrid']
            values = 'ac', 'dc', 'temp', 'power', 'totalkwh', 'freq'
            for value in values:
                os.system(curl_prefix + wrdict[value] + '"}\'  --user "' + pim_user_pass + '" ' + pim_server_url + "wrid" + wrdict['wrid'] + "_" + value)

    def process_data(self, data):
        datainhex = data.encode('hex')
        print datainhex
        wr = []
        wr_index = 0
        wr_index_max = 20
        while True:
            if DEBUG:
                print "Processing Data"
            response = self.extract(datainhex, wr_index)
            if response:
                if DEBUG:
                    print "."
                wr.append(response)
            wr_index += 1
            if wr_index >= wr_index_max:
                break
        if DEBUG:
            print "Processed Data!"
            print wr
            print "Submitting Data"
        self.submit_data(wr)

    def on_recv(self):
        data = self.data
        print len(data)
        if len(data) == 662:
            self.process_data(data)
            #print data.encode('hex')
        self.channel[self.s].send(data)

if __name__ == '__main__':
        server = TheServer('', 10013)
        try:
            server.main_loop()
        except KeyboardInterrupt:
            print "Ctrl C - Stopping server"
            sys.exit(1)


Gruß Martin
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Marie am 08 Juni 2017, 18:40:53
Moin Leute,


habe mittlerweile auch so eine Envertec Kombi....hat sich schon etwas weiteres bei der Auswertung ergeben? -ich hänge noch am DNS-programmieren der Fritzbox... klappt irgendwie nicht. Wäre aber schon sehr daran interessiert, die Daten abzufangen und nicht mehr nach China zu schicken... ;-)


LG


Marie


PS: Die Geschichte mit der Fritzbox klappt wohl so nicht mehr... kann die Konfigurationsdateien nicht ändern aufgrund der CRC lässt sie sich nicht zurückschreiben... auch nicht mit dem FBEditor. FritzOs ist aktuell....  6.83
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: LPBBSB15 am 08 Oktober 2017, 11:00:21
Hallo,

hat sich zufällig jemand mit dem PLC MI200E von Miartech beschäftigt ?   (Gern auch per PN)

Viele Grüße Herbert
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Uwe_Eta20 am 08 November 2017, 20:00:13
Hallo liebe Gemeinde,

ich wollte mal nachfragen, ob es realistisch ist, sowas als Modul zu bauen.
Sowas würde ich mir natürlich gerne in einer Übersicht anzeigen lassen (ja, es gibt ja auch ein Portal).

Oder, man geht auch über HTTPMOD, das mache ich vom Ofen ( ETA ) auch, hier gibt es bereits vorbereitete Variablen, die man über REST Webservices bequem holen kann.
Aber, wo fängt man hier an, gibt es jemand, der das bereits integriert hat?

Danke
Uwe
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Wernieman am 14 November 2017, 18:09:30
Mal so als keine Infos eingeworfen:
Wenn Ihr schon Hoheit über dhcp habt und Euer gerät über DHCP im Netzwerk configuriert ist, könnte ihr auch diesem Gerät einen eigene router-Info zukommen lassen .. also den FHEM-Server. Übrigens auch wenn die IP fest eingestellt wird, per "Konfigmenü", kann man einen router definieren. Und dann seit Ihr "Man-in-the-Middle" und könnt den Verkehr auswerten.
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: toxm5 am 24 Februar 2018, 09:28:09
Hallo,

ich habe auch eine kleine Anlage auf Basis der Envertech Geräte. Gestern habe ich einen anderen Weg gefunden wie man an die Daten kommt. So wie es aussieht benutzen viele Firmen die gleiche Portal Software. Bei Github habe ich zwei Scripte gefunden die die Daten vom Portal laden.

https://github.com/sanderjo/solarmanpv

Die URLs muss man auf das Envertech Portal anpassen und seine eigene PID angeben. Die PID steht oben in der URL wenn man sich am Portal angemeldet hat.

http://www.envertecportal.com/Terminal/TerminalMain.aspx?pid=1234

PID = 1234

Beispiel (alles in einer Zeile):

curl --silent --cookie-jar /tmp/cookies -o /dev/null 'http://www.envertecportal.com/Terminal/T
erminalMain.aspx?pid=1234' && curl --silent --cookie "ASP.NET_SessionId=`awk ' END { print \$NF }' /tmp/cookies`
"  'http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1234'

Ich hab mir ein Perl script geschrieben was die Daten bereinigt und in eine Influxdb schreibt. Die Auswertung mach ich mit Grafana. Habe kein FHEM im Einsatz dachte mir aber das dass vielleicht für den einen oder anderen hilfreich ist.

Grüße
Micha
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: kleineslichtHH am 26 Februar 2018, 19:48:40
Da würde ich gerne wissen, wie man diese Daten in FHEM intigrieren kann.
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: kleineslichtHH am 10 März 2018, 18:18:07

um mal den Anfang zu machen habe ich mir ein HTTPMOD-Device erstellt:
defmod httpmod_envertech HTTPMOD http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493 600
attr httpmod_envertech userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07Name reading07Regex reading08Name reading08Regex reading09Name reading09Regex reading10Name reading10Regex reading11Name reading11Regex reading12Name reading12Regex reading13Name reading13Regex reading14Name reading14Regex requestHeader1
attr httpmod_envertech reading01Name nowpower
attr httpmod_envertech reading01Regex "nowpower":"([\d]+.[\d]+)
attr httpmod_envertech reading02Name nowpower_
attr httpmod_envertech reading02Regex "nowpower_":"([\d]+.[\d]+)
attr httpmod_envertech reading03Name power
attr httpmod_envertech reading03Regex "power":"([\d]+.[\d]+)
attr httpmod_envertech reading04Name daypower
attr httpmod_envertech reading04Regex "daypower":"([\d]+.[\d]+)
attr httpmod_envertech reading05Name monthpower
attr httpmod_envertech reading05Regex "monthpower":"([\d]+.[\d]+)
attr httpmod_envertech reading06Name yearpower
attr httpmod_envertech reading06Regex "yearpower":"([\d]+.[\d]+)
attr httpmod_envertech reading07Name allpower
attr httpmod_envertech reading07Regex "allpower":"([\d]+.[\d]+)
attr httpmod_envertech reading08Name capacity
attr httpmod_envertech reading08Regex "capacity":"([\d]+.[\d]+)
attr httpmod_envertech reading09Name peakpower
attr httpmod_envertech reading09Regex "peakpower":"([\d]+.[\d]+)
attr httpmod_envertech reading10Name efficiency
attr httpmod_envertech reading10Regex efficiency":"([\d]+.[\d]+)
attr httpmod_envertech reading11Name treesplanted
attr httpmod_envertech reading11Regex treesplanted":"([\d]+.[\d]+)
attr httpmod_envertech reading12Name co2
attr httpmod_envertech reading12Regex "co2":"([\d]+.[\d]+)
attr httpmod_envertech reading13Name income
attr httpmod_envertech reading13Regex "income":"€([\d]+.[\d]+)
attr httpmod_envertech requestHeader1 User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/43.0
attr httpmod_envertech showBody 1



ich bekomme allerdings noch kein Inhalt geliefert (Body)


folgendes taucht im Log-File mit Verbose 5 auf:

2018.03.10 17:42:43 5: httpmod_envertech: Read starts parsing response to update with defined readings: 01,02,03,04,05,06,07,08,09,10,11,12,13
2018.03.10 17:42:43 4: httpmod_envertech: CheckAuth decided no authentication required
2018.03.10 17:42:43 5: httpmod_envertech: ExtractSid called, context reading, num
Content-Length: 0, body empty
Connection: close
Date: Sat, 10 Mar 2018 16:42:43 GMT
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Set-Cookie: ASP.NET_SessionId=0h3q2lytjavhhge3xsp04jph; path=/; HttpOnly
Server: Microsoft-IIS/8.5
Cache-Control: private
Header: HTTP/1.1 200 OK
2018.03.10 17:42:43 4: httpmod_envertech: Read callback: request type was update retry 0,
Content-Length: 0
Connection: close
Date: Sat, 10 Mar 2018 16:42:43 GMT
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Set-Cookie: ASP.NET_SessionId=0h3q2lytjavhhge3xsp04jph; path=/; HttpOnly
Server: Microsoft-IIS/8.5
Cache-Control: private
HTTP/1.1 200 OK
2018.03.10 17:42:43 5: HttpUtils response header:
2018.03.10 17:42:43 5: HttpUtils http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493: Got data, length: 0
2018.03.10 17:42:43 4: http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493: HTTP response code 200


Content-Type: application/x-www-form-urlencoded
Content-Length: 0
User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/43.0
Accept-Encoding: gzip,deflate
Host: www.envertecportal.com
GET /AjaxService.ashx?ac=upTerminalMain&psid=1493 HTTP/1.0
2018.03.10 17:42:43 5: HttpUtils request header:
2018.03.10 17:42:42 5: HttpUtils url=http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493
timeout 2
header: User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/43.0,
2018.03.10 17:42:42 4: httpmod_envertech: HandleSendQueue sends request type update to URL http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493, No Data,
2018.03.10 17:42:42 5: httpmod_envertech: HandleSendQueue called, qlen = 1
2018.03.10 17:42:42 5: httpmod_envertech: AddToQueue adds type update to URL http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1493, no data, header User-Agent: Mozilla/5.0 (Windows NT 10.0) Gecko/20100101 Firefox/43.0, retry 0
2018.03.10 17:42:42 4: httpmod_envertech: AddToQueue adds update, initial queue len: 0
2018.03.10 17:42:42 4: httpmod_envertech: update timer modified: will call GetUpdate in 60.0 seconds at 2018-03-10 17:43:42
2018.03.10 17:42:42 4: httpmod_envertech: GetUpdate called (update)



ich teste jetzt mal weiter mit den Einstellungen für die Anmeldung an der Seite
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: peewag am 20 Mai 2018, 10:18:36
Hallo Kollegen,

ich habe mir da etwas zusammen gebastelt:

Ich habe zwei dummys angelegt:
define nowPVPower dummy
attr nowPVPower room PV
define dayPVPower dummy
attr dayPVPower room PV


diese werden von einem Python-Script befüllt (/opt/fhem/scripts/getPV.py):
import os
import urllib2
import subprocess

proc = subprocess.Popen("curl --silent --cookie-jar /tmp/cookies -o /dev/null 'http://www.envertecportal.com/Terminal/TerminalMain.aspx?pid=1457' && curl --silent --cookie \"ASP.NET_SessionId=`awk ' END { print \$NF }' /tmp/cookies`\"  'http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=1457'", stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()

# out looks like this:
#[{"nowpower":"0.25 kW"
#"nowpower_":"0.25 kW"
#"power":"0.25"
#"daypower":"1.44 kWh"
#"monthpower":"37.95 kWh"
#"yearpower":"175.52 kWh"
#"allpower":"580.98 kWh"
#"lasttime":"May.19 19:21
#GMT +1
#2018"
#"commissioned":"Mar.16
#2017"
#"capacity":"0.25 kW"
#"installer":"Peter"
#"peakpower":"0.00 kW"
#"efficiency":"5.40 kWh/kW/day"
#"treesplanted":"1.59 <em style='font-size:16px'>trees</em>"
#"co2":"0.58 <em style='font-size:16px'>ton</em>"
#"income":"33.63"}]




output = out.split(",")

nowPower = output[1].split(":")[1].split(" ")[0].replace("\"","")
dayPower = output[3].split(":")[1].split(" ")[0].replace("\"","")

#print "NowPower: " + str(nowPower) + " kW"
#print "DayPower: " + str(dayPower) + " kWh"


urllib2.urlopen("http://127.0.0.1:8083/fhem?cmd.nowPVPower=set%20nowPVPower%20"+str(nowPower))
urllib2.urlopen("http://127.0.0.1:8083/fhem?cmd.dayPVPower=set%20dayPVPower%20"+str(dayPower))


In diesem Script, wird wie von toxm5 beschrieben die Daten von der Envertec-HP heruntergeladen und via http-set an FHEM übertragen. Dieses script wird mittels crontab dann alle 5 Minuten ausgeführt:
*/5 * * * * python /opt/fhem/scripts/getPV.py

Ich denke man könnte das auch mit den Funktionen von FHEM lösen, aber da bin ich nicht so fit wie in Linux u. Python-Programmieren  ::)

und immerhin, es funktioniert  8)
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: kleineslichtHH am 15 Juli 2018, 10:37:40

Hallo ihr hübschen,


wie kann ich mir mein "Income" vernünftig anzeigen lassen?
Ich bekomme mit unten angefügtem Code folgendes angezeigt:



€10.01}]


Zitat von: peewag am 20 Mai 2018, 10:18:36



#"income":"33.63"}]
output = out.split(",")

income = output[18].split(":")[1].split(" ")[0].replace("\"","")

#print "income: " + str(income) + " Euro"

urllib2.urlopen("http://127.0.0.1:8083/fhem?cmd.incomePVPower=setreading%20Dummy_PV%20incomePVPower%20"+str(income))
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: iBeSmart am 17 August 2018, 17:08:37
Hallo kleineslichtHH, vielen Dank für den Anfang!

Also nach probieren und Regex studieren, ist es mir gelungen die HTTPMOD Abfrage zum Laufen zu bekommen.

(Ist nicht sauber, nicht hübsch, funxt aber)

->

defmod sol HTTPMOD http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=XXX 600
attr sol userattr reading01Name reading01Regex reading02Name reading02Regex reading03Name reading03Regex reading04Name reading04Regex reading05Name reading05Regex reading06Name reading06Regex reading07Name reading07Regex reading08Name reading08Regex reading09Name reading09Regex reading10Name reading10Regex reading11Name reading11Regex reading12Name reading12Regex reading13Name reading13Regex reading14Name reading14Regex reading15Name reading15Regex reading16Name reading16Regex requestHeader1 requestHeader2 sid01Data sid01Header1 sid01IdRegex sid01IgnoreRedirects:0,1 sid01URL sid02Data sid02Header1 sid02IdRegex sid02URL sidURL
attr sol clearSIdBeforeAuth 1
attr sol disable 0
attr sol reAuthRegex (class="login_box"|Bad Request)
attr sol reading01Name nowpower
attr sol reading01Regex "nowpower":"([\d]+.[\d]+)
attr sol reading02Name nowpower_
attr sol reading02Regex "nowpower_":"([\d]+.[\d]+)
attr sol reading03Name power
attr sol reading03Regex "power":"([\d]+.[\d]+)
attr sol reading04Name daypower
attr sol reading04Regex "daypower":"([\d]+.[\d]+)
attr sol reading05Name monthpower
attr sol reading05Regex "monthpower":"([\d]+.[\d]+)
attr sol reading06Name yearpower
attr sol reading06Regex "yearpower":"([\d]+.[\d]+)
attr sol reading07Name allpower
attr sol reading07Regex "allpower":"([\d]+.[\d]+)
attr sol reading08Name lasttime
attr sol reading08Regex "lasttime":"([\w].+ [\d]+:[\d]+,[\w]+ .......)
attr sol reading09Name commissioned
attr sol reading09Regex "commissioned":"([\w].+[\d]+,[\d]+)
attr sol reading10Name capacity
attr sol reading10Regex "capacity":"([\d]+.[\d]+)
attr sol reading11Name installer
attr sol reading11Regex "installer":"([\w].[\w]+.[\w]+.[\w]+)
attr sol reading12Name peakpower
attr sol reading12Regex "peakpower":"([\d]+.[\d]+)
attr sol reading13Name efficiency
attr sol reading13Regex "efficiency":"([\d]+.[\d]+)
attr sol reading14Name treesplanted
attr sol reading14Regex treesplanted":"([\d]+.[\d]+)
attr sol reading15Name co2
attr sol reading15Regex co2":"([\d]+.[\d]+)
attr sol reading16Name income
attr sol reading16Regex "income":"€([\d]+.[\d]+)
attr sol requestHeader1 Cookie: $sid
attr sol room Solar
attr sol sid01IdRegex (ASP.NET_SessionId[^;;\n]+)
attr sol sid02Data uNam=XXXXX&uPwd=XXXXX&remPasswd=false
attr sol sid02Header1 Cookie: $sid
attr sol sid02IdRegex Cookie: ([^\n]+)
attr sol sid02URL http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=XXXX
attr sol sidURL http://www.envertecportal.com/LoginPage.aspx


evtl. beim ersten Mal die httpmod url auf http://www.envertecportal.com/LoginPage.aspx setzen und danach (wenn der cookie da ist) auf http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=XXXX umstellen.

Jetzt habe ich festgestellt, dass die genaueren aktuellen Daten ja im Real-Time Reiter versteckt sind.

Dann habe ich das auch mal mit dem HTTPMOD versucht und bin auch schon soweit gekommen, dass ich eine Ausgabe bekomme

URL: http://www.envertecportal.com/AjaxService.ashx?ac=RealData&pid=XXXX&search=false&sn=&page=1
die dann so aussieht

2018.08.17 16:57:33 5: HttpUtils response header:
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 17 Aug 2018 14:57:32 GMT
Connection: close
Content-Length: 395
2018.08.17 16:57:33 4: solar1: Read callback: request type was update retry 0,
Body: <tr class='chart_list_odd' onmouseover='changeColor(1,this)' onmouseout='changeColor(2,this)'><td>1</td><td rowspan="1">9001XXXX</td><td rowspan="1">1</td><td rowspan="1">1</td><td><a href='TerminalChart.aspx?pid=XXXX&target=1114XXXX'>1114XXXX</a></td><td>21.7</td><td>0.04</td><td>230.4</td><td>0.00</td><td>50.03</td><td>0.9</td><td>1.18</td><td>32</td><td>17/08/2018 16:57:04 GMT +2</td></tr>


bzw. so : 19001XXXX111114XXXX31.80.19231.30.0350.015.81.1831.617/08/2018 15:36:39 GMT +2
Entschlüsselt ergbit das:


NR:1
EnverBridgeID: 9001XXXX
Installed No.of MI: 1
Active No.of MI: 1
MPPT S/N : 1114XXXX
DC Input Voltage(V): 31.8
DC Input Current(A): 0.19
AC Output Voltage(V) 231.3
AC Output Current(A) 0.03
AC Output Frequency(Hz): 50.01
AC Output Current(W): 5.8
Total Energy(kWh): 1.18
Temperature(C): 31.6
Time: 17/08/2018 15:36:39 GMT +2


soweit so gut. Auch das wird abgerufen, aber das Regex zerlegen fehlt noch.
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Uwe_Eta20 am 18 September 2018, 10:37:19
Hallo,

so, ich habe das Ganze jetzt auch mal probiert und die Readings kommen jetzt auch (stabil!)  rüber.
Ich wollte mal etwas einfügen, also die SVG und Readings, (die Formatierung) ist wohl nicht meine Stärke.
Wenn etwas unklar ist mit den Regexen bzw. verwendeten Links der URLs, oder benötigten Attributen, bitte antworten oder melden.


Gruss
Uwe
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Uwe_Eta20 am 18 September 2018, 13:00:58
Hallo nochmal,

ich habe mal den aktuellen Plot und den gestrigen als kompletten Tag dran sowie die betreffenden Readings ( außer Installer ), angehängt.
Leider gibt es auch heute nochmal das Phänomen, das irgendwann die JSON Datei nicht mehr korrekt erfasst wird und die Übermittlung damit gestört.
Kann aber vllt. sein, da ich gegen 10 Uhr noch wild herumgebastelt habe, jetzt hat er wieder den Flow.

viele Grüße
Uwe
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Uwe-Kaditz am 20 Januar 2019, 11:47:36
Hallo,
seit dem 15.01.2019 funktioniert die Abfrage über http://www.envertecportal.com/AjaxService.ashx?ac=upTerminalMain&psid=xxxx nicht mehr (EnverPortal 2.0!).

Habt Ihr schon eine Lösung?

siehe auch https://forum.fhem.de/index.php/topic,96106.0.html
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: toxm5 am 21 Januar 2019, 06:47:26
Hallo,

die neuen URLs und CURL Befehle findet Ihr auf meinem Blog.

https://www.lets-try-solar.de/index.php/2019/01/20/www-envertertecportal-com-v2-daten-auslesen/

Mein dazugehöriges Perl Script um die Daten in eine InfluxDB funktioniert wieder aber ich muss noch die Variablen Namen konvertieren da diese sich auch geändert haben.

Viele Grüße
toxm5
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Uwe-Kaditz am 21 Januar 2019, 17:22:24
Hallo,
danke toxm5 für die Bereitstellung der URLs und CURLs.

Ich habe meinen Python-Script getPV.py mal angehängt, mit dem man die Daten ins FHEM bekommt.

Der Script befindet sich in /opt/fhem/scripts/getPV.py und muss noch wie folgt angepasst werden:
<pvID> ersetzen durch die Envertech-StationsID (ist identisch zur ID, die man im Envertec-Portal v1.x erhalten hat)
<FHEMip> ersetzen durch die IP-Adresse der FHEM-Installation (z.B. http://192.168.1.77:8083/
<FHEMuser> ersetzen durch den LoginNamen des FHEM-User
<FHEMpwd> ersetzen durch das zugehörige FHEM-Passwort

Der Script wir über das folgende Kommando in /etc/crontab aller 2 Minuten ausgeführt:
*/2   * * * *   python  /opt/fhem/scripts/getPV.py

Zum Testen kann man den Script auch im Raspi-Terminal mit folgendem Kommando starten:
python  /opt/fhem/scripts/getPV.py

Viele Grüße
Uwe
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: MEitelwein am 02 Februar 2019, 18:25:56
Ich habe das ursprünglich Proxy script noch mal aufgegriffen und kann so nun den direkten Datenstrom von der Enverbridge mitloggen. Dazu muss aber ein lokaler DNS Server vorhanden sein, der den Traffic der Enverbridge auf den Rechner umleitet, auf dem der Python Proxy läuft.

Zum Installieren auf Ubuntu oder Debian

Der Service wird aktiviert mit
# systemctl daemon-reload
# systemctl enable enverproxy
# systemctl start enverproxy


Der Proxy schreibt sein Log in das Syslog, über die Variable DEBUG in enverproxy.conf kann ein ausführliches Logging aktiviert werden.

Ein entsprechendes Device habe ich in FHEM mit folgenden Befehlen angelegt, man benötigt pro Converter ein Device:
define slr_panel_01 dummy
attr slr_panel readingList ac dc temp power totalkwh freq
attr slr_panel alias Solarpanel
attr slr_panel {sprintf("Zählerstand %.3f kWh, aktuelle Leistung %.1f W", ReadingsVal($name,"totalkwh",0), ReadingsVal($name,"power",0))}
attr slr_panel icon measure_power_meter


In der enverproxy.conf muss im dictionary id2device die Übersetzung von converter ID zum FHEM Device eingetragen werden. Die ID entspricht der ID im Envertec Portal bzw. wird auch im Log ausgegeben.
Für das obige FHEM Device und einer Converter ID von 1234 wäre das
id2device = { '1234' : 'slr_panel_01', '5678' : 'your_other_fhem_device' }
Titel: Antw:Solar Auswertung - Envertech mit Python Programm
Beitrag von: ollibaba am 16 Februar 2019, 14:42:12
zu Uwe vom 21.1.2019.
Hallo Uwe, kannst DU hier helfen?
Ich bekomme das mit dem Python script zu laufen  , so dass ich die Werte
myPVstation: mein station
NowPower: 0.60797 kW
DayPower: 2.02 kWh
MonthPower: 21.19 kWh
YearPower: 45.91 kWh
AllPower: 797.27 kWh
mit dem Test ausgegeben bekomme, aber danach werden Fehler (ab Zeile 75,etc. angezeigt):

Traceback (most recent call last):
  File "/opt/fhem/scripts/getPV.py", line 75, in <module>
    opener.open("http://192.168.xxx.yy:8083/fhem?cmd=set%20nowPVPower%20"+str(nowPower)+"&fwcsrf=Me1nT3chBl0g4Th3W1n")
  File "/usr/lib/python2.7/urllib2.py", line 435, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 548, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 473, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 556, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 401: Authorization Required

Liegt das an der Variablen: fwcsrf=Me1nT3chBl0g4Th3W1n .
Wenn ja, welchen Wert nehme ich da, ich finde bei mir nur einen CSRFTOKEN mit dem Wert csrf_3377485xxxxxxxx
Wenn ich den eingebe, gibt´s aber auch die gleichen Fehler.
Danke schon mal für Deine Response.
Oliver
P.S. ach so... und wie bekomme ich die Werte dann im FHEM zu sehen? Was muss ich da noch definieren?


Titel: Antw:Solar Auswertung - Envertech mit Python Programm
Beitrag von: ollibaba am 16 Februar 2019, 21:30:25
So ich habe den Fehler bei mir gefunden.
Im Python Programm getPV.py von Uwe habe ich aus Versehen in Zeile 67 vergessen die < > Zeichen um die eigene IP zu entfernen.
Es muss natürlich richtig heißen: top_level_url = "http://192.168.xxx.yy:8083"
und bei dem CSRFToken muss es in der Zeile 75 und folgende dann am Ende immer heißen:
"&fwcsrf=csrf_123456789012345"
csrf_123456789012345 ist der Wert des Attributs CSRFTOKEN des web devices in FHEM.
Trotzdem vielen Dank Uwe für der Hinweis mit dem Setzen der Variablen in FHEM, die ich dann als dummy erstellt habe. Das hat geholfen. Die Werte sind jetzt gefüllt.
Topp Script. Danke dafür :-)
Oliver
Die Ausgabe des Testlaufs ( python  /opt/fhem/scripts/getPV.py )  im pi ergibt dann:
myPVstation: Meine Station
NowPower: 0.0 kW
DayPower: 2.87 kWh
MonthPower: 22.04 kWh
YearPower: 46.76 kWh
AllPower: 798.12 kWh

Kleine Ergänzung: das Verzeichnis /opt/fhem/scripts wo das py Programm abgespeichert wird existierte bei mir noch nicht und musste erst angelegt werden.
Mit dem Linux Kdo:   sudo chown fhem:dialout /opt/fhem/scripts habe ich im Pi noch die Rechte für das Verzeichnis /scripts auf User fhem und Gruppe dialout angepasst. Ob das wichtig für die Funktion ist, weiß ich aber nicht genau.
Titel: Antw:Solar Auswertung - Envertech mit Python Programm
Beitrag von: ollibaba am 16 Februar 2019, 21:37:06
Ach so noch was.
Wenn jemand nicht weiss, wie man an die eigene Station Id kommt:
Im Envertech Portal mit seinen Credentials anmelden, dann html Code der Hauptseite anzeigen lassen und nach var stationId suchen. Die (bei mir) 4stellige Zahl dahinter ist die gesuchte ID.
Oliver
Titel: Antw:Solar Auswertung - Envertech mit Python Programm
Beitrag von: ollibaba am 16 Februar 2019, 21:46:57
Und damit die Werte dann in fhem angezeigt werden, muss man sich dann noch die dummy Variablen definieren. Danke dafür an Uwe.
Also z.B. define allPVPower dummy  und die anderen auch. Dann Aufhübschen nach Laune
:) Oliver
Titel: Antw:Solar Auswertung - Envertech mit Python Programm
Beitrag von: ollibaba am 18 Februar 2019, 20:05:31
Moin zusammen,
also ich habe das Python Programm von Uwe genommen und um diverse Variablen die ausgelesen werden erweitert, um Euch die Arbeit abzunehmen. :-)
Ihr müsst es jetzt nur noch nehmen und folgende Anpassungen individuell auf Euch anpassen:
stationId=xxxx
dein web username
dein web PWD
fwcsrf=DEIN csrfToken

Wie Ihr die station ID bekommt hab ich weiter oben geschrieben und den csrfToken passt ihr in FHEM am besten aktuell so an, dass er bei einem reboot sich nicht ändert (was er sonst normalerweise macht. Und dann läuft das py Prg. nicht mehr)
Benennt das Python Programm nach Anpassung wieder um auf getPV.py und verfahrt nach der Anleitung von Uwe weiter oben (also auf pi kopieren, 1x testen...)
Bitte nicht vergessen in FHEM jede einzelne dummy Variable anzulegen, die im Python Programm übergeben wird. Sonst seht ihr nämlich da nix  ::)
Und auch dran denken in der crontab im pi den cronjob anzulegen (s. Uwe), damit die Daten auch fortlaufend erzeugt und übergeben werden. Ich habe das ein wenig variiert durch:
*/2   6-20 * * *   python  /opt/fhem/scripts/getPV.py
Da meine Anlage nachts leider noch keinen Solarstrom erzeugt (  :-[ sehr schade ) und ich die Log Datei nicht so aufblähen wollte. Muss aber jeder selbst wissen.
Viel Spaß
Oliver
P.S. nochmals vielen Dank an Uwe. Eine wirklich gute Lösung 
Titel: Antw:Solar Auswertung - mit Envertech und Python Programm
Beitrag von: ollibaba am 18 Februar 2019, 20:14:59
Ich habe gerade noch mal das Python Programm aktualisiert, weil ich beim Testlauf bemerkt habe, dass das Eurozeichen im Kommentar dazu führte, dass das Prg nicht läuft. Jetzt passt es aber und gibt folgende Ausgabe beim Test:
myPVstation: mein_Solar
NowPower: 0.0 W
DayPower: 3.37 kWh
MonthPower: 28.57 kWh
YearPower: 53.29 kWh
AllPower: 804.65 kWh
CO2: 0.802 t
Baeume: 2.198
Ersparnis: 241.40 Eur
Spitzenleistung: 708.09 W

Ich bin erst mal zufrieden  8)
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Uwe_Eta20 am 30 März 2019, 10:01:38
Hallo Olliver,

bei mir klappt das leider noch nicht.
Eigentlich wollte ich schon den Schritt 2 gehen und die Werte ins fhem zu integrieren.
Aber bereits in der Kommandozeile wird das Ergebniss unten angezeigt.
Die ID ist okay, ein Token habe ich generiert, nur das WebName und Passwort habe ich so stehenlassen, da habe ich nichts
also
top_level_url = "http://192.168.2.105:8083"
password_mgr.add_password(None, top_level_url, "dein web username", "dein web PWD"
).-> wenn das zwingend sein muß, dann tue ich das.
Es erscheinen ja bereits Werte,aber eben auch Fehlermeldungen...

lowe@lowe-desktop:~/Schreibtisch$ sudo python getPV.py
myPVstation: xxxx
NowPower: 387.76 W
DayPower: 0.63 kWh
MonthPower: 36.08 kWh
YearPower: 90.66 kWh
AllPower: 787.45 kWh
CO2: 0.785 t
Baeume: 2.151
Ersparnis: 228.36 Eur
Spitzenleistung: 491.57 W
Traceback (most recent call last):
  File "getPV.py", line 91, in <module>
    opener.open("http://192.168.2.105:8083/fhem?cmd=set%20nowPVPower%20"+str(nowPower)+"%20W"+"&fwcsrf=P5pp5r&T1ffy")
  File "/usr/lib/python2.7/urllib2.py", line 435, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 548, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 473, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 556, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 400: Bad Request


Siehst Du auf einem Blick, woran das liegen könnte, ich habe hier deine Version vom 18 Februar 2019 genommen(getPV_anonymisiert.py ).

vielen Dank
Uwe
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: ollibaba am 30 März 2019, 18:06:22
Moin Uwe,
ich denke Du bist kurz vorm Ziel, da ja schon Werte ausgelesen werden.
Einen Fehler kann ich in der Zeile 91 bei Dir so erst mal nicht erkennen.
Die Zeile: password_mgr.add_password(None, top_level_url, "dein web username", "dein web PWD") wird benötigt.
Hier trägt Du die login Daten ein, wie Du dich auch im Web Browser bei FHEM immer anmeldest.
Versuch das erst einmal und gib bitte ne Rückmeldung. Eigentlich kann es nur noch ne Kleinigkeit sein, irgendwo ein Leerzeichen vergessen, oder zu viel o.ä.
Die Lösung läuft übrigens bei mir sehr stabil und ohne irgendwelche Zicken.
Viele Grüße
Oliver
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Uwe_Eta20 am 30 März 2019, 19:55:42
Hallo,

die Werte sieht man, drunter das folgende:

Traceback (most recent call last):
  File "getPV.py", line 84, in <module>
    password_mgr.add_password(None, top_level_url, Hallo, Guenter)
NameError: name 'Loewe' is not defined

In der Datei:
top_level_url = "http://192.168.2.105:8083"
password_mgr.add_password(None, top_level_url, Hallo, Guenter)

gemacht hatte ich das gemäß
attr allowed basicAuth {"$user:$password" eq "fhemuser:secret"}
Abfrage kommt auch beim URL Aufruf, aber warum meldet er nicht definition??

Uwe
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Uwe_Eta20 am 31 März 2019, 11:12:01
Hallo,

alles passt jetzt, schön!
Hatte noch ein Problem mit dem csrf Token, der dann immer auf ein 400 HTTP Fehler beim speichern führte, so das man die cfg nicht anpassen konnte.
Weiterhin hatte ich zwar immer unter readingList den korrekten Variablennamen eingetragen, jedoch immer einen mir gefälligen Devicenamen eingetragen, bis ich drauf gestoßen bin, den aus dem String zu extrahieren.
Bin drauf gekommen, da es mit deinem allPVPower im Beitrag hier immer klappte.
Muß jetzt noch die SVGs bauen, das dauert wieder, bis die Werte reinkommen, hoffe, das haut trotzdem hin, FileLog ist fertig.
Noch "sieht" das SVG die RegExp nicht.

bis dahin
Uwe
Titel: Antw:Solar Auswertung Envertech mit Python Programm
Beitrag von: ollibaba am 31 März 2019, 12:05:47
Moin Uwe,
Super. Das freut mich zu hören. 8)
Dann noch viel Spaß und Erfolg mit den weiteren Anpassungen in FHEM.
Ich bin mit der Lösung wirklich zufrieden. Das klappt prima
Grüße
Oliver
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: db am 30 Juli 2019, 12:31:03
Hallo MEitelwein,

Ich habe mir das Proxy Script angesehen. Erstmal tausend Dank an dich und alle an der Entwicklung beteiligten.
Kann ich die Weiterleitung an das Portal unterbinden? Das müsste eigentlich gehen, wenn ich die Zeile self.channel[self.s].send(data) auskommentiere?
Danke !
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: MEitelwein am 05 Januar 2020, 19:04:51
Zitat von: db am 30 Juli 2019, 12:31:03
Hallo MEitelwein,

Ich habe mir das Proxy Script angesehen. Erstmal tausend Dank an dich und alle an der Entwicklung beteiligten.
Kann ich die Weiterleitung an das Portal unterbinden? Das müsste eigentlich gehen, wenn ich die Zeile self.channel[self.s].send(data) auskommentiere?
Danke !

Hallo db

Entschuldige, ich habe länger nicht mehr ins Forum geschaut. Den aktuellen Code für den Proxy findest Du unter https://gitlab.eitelwein.net/MEitelwein/Enverbridge-Proxy

Um das Senden abzuschalten, musst Du zusätzlich zum Auskommentieren von Zeile 255 in enverproxy.py

self.channel[self.s].send(data)

noch den Handshake simulieren. Dazu einfach den auskommentierten Code in Zeile 242 - 248 aktivieren

"""
# This part is simulating handshake with envertecportal.com
# Keep disabled if working as proxy between Enverbridge and envertecportal.com
self.__log.logMsg('Replying to handshake with data ' + str(reply.hex()), 4)
self.s.send(reply)
self.__log.logMsg('Reply sent to: ' + str(self.s), 3)
"""


Dazu einfach die Anführungszeichen (""") in 242 und 248 löschen.
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: drakesoft am 26 Januar 2020, 10:28:37
Hallo zusammen,
ich habe die Firmware einer älteren EVB200 ausgelesen falls die jemand benötigt einfach per PM melden. Ich würde gerne die Daten bereits auf dem PLC auslesen. Weiß jemand ob auf der aktuellen EVB202 noch immer der MI200E PLC Transceiver verwendet wird?

VG
Titel: Solar Auswertung - Proxy Python Programm getPV
Beitrag von: ollibaba am 26 März 2020, 17:03:37
Moin zusammen,
seit heute 26.3.2020 10:54 läuft bei mir das getPV Python Programm nicht mehr, das die SolarDaten vom envertech Portal abfragt.
Hat jemand auch diese Erfahrung gemacht und evtl. eine Ahnung, was der Grund ist?
Danke und Grüße
Oliver
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Uwe-Kaditz am 26 März 2020, 20:19:02
Hallo miteinander,
der Fehler ist entstanden, weil Envertech den Aufruf von http://www.envertecportal.com in https://www.envertecportal.com geändert hat.

Anbei der geänderte Script.
Folgende Änderungen sind noch notwendig:
<pvID> ersetzen durch die Envertech-StationsID (ist identisch zur ID, die man im Envertec-Portal v1.x erhalten hat)
<FHEMip> ersetzen durch die IP-Adresse der FHEM-Installation (z.B. http://192.168.1.77:8083/
<FHEMuser> ersetzen durch den LoginNamen des FHEM-User
<FHEMpwd> ersetzen durch das zugehörige FHEM-Passwort

Noch ein Hinweis:
Über 1000kWh ändert Envertech die Ausgabe automatisch in MWh, denn es werden für alle numerischen Daten nur 3 Stellen (vor dem Dezimaltrenner) gesendet.
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: ollibaba am 27 März 2020, 09:14:35
Moin Uwe,
wow. Topp. Funktioniert wieder. Das mit der Änderung auf https Protokoll war genau der Fehler. Vielen vielen Dank. Ich dachte envertech hätte schon wieder alles komplet geändert. Ich habe jetzt in meiner angepassten getPV.py Datei nur die Zeile mit dem auf https geänderten Protokoll angepasst und flutsch alles läuft wieder.
Nochmals vielen Dank  :D
Grüße und danke noch mal
Oliver
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: pancio am 13 Juni 2021, 14:37:14
Hi,

This is my first post on the Forum. I've EnverBridge EVB201 as device which communicate between microinverters and envertecportal.com to collect data... but i don't like send enything to china cloud so I'm looking for other possibility to read data from PLCC... I disassembled EVB202 looking for some kind of serial interface like RS232 or RS485 but i found only diagnostic socket - probably JTAG for LCP microcontroler. Of course I tried to communicate with him by TTL serial but it doesn't work on any signal pin (TTL 3V3 logic). Probably I need to have special plug and converter for JTAG programmer in order to communicate. I drop this idea for a while...

I tried to listen TCP transmission on ethernet port, I dumped packages and analysed them in Wireshark. EVB202 got IP from DHCP serwer and start communicate with www.envertecportal.com by sending owm ID. Next, EVB sending many shortly packages just only like heartbit - probably waiting for data from microinverters (PLCC). And finaly one bigger (982 bytes of data + headers)  package is sending to cloud, it contains all ours microinverter IDs (MIs) and some data (probably measurement variables). The question is how to guess/calculate which one is e.g power, temp etc.

$0006 - 0009 - EVB ID

$0034 - 0037 - MIs
$0054 - 0057 - MIs
$0074 - 0077 - MIs
$00b4 - 00b7 - MIs

The gaps between microinverters are probably that they aren't ready or on installed on other phase...

I suppose that is possible to decode data, and using own DNS cheat EVB202 and read data directly from device avoiding china cloud...

If anybody is interesting in topic, please let me know.

Full dump I uploaded on: https://systemembedded.eu/viewtopic.php?f=33&t=47

Regards,
pancio





0000   68 03 d6 68 10 04 90 01 86 32 14 02 08 0d 00 00   h..h.....2......
0010   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0020   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0030   00 00 00 00 11 20 37 54 27 11 40 90 24 8b 00 29   ..... 7T'.@.$..)
0040   11 e2 24 26 3b 36 31 ff 00 00 00 00 00 00 00 00   ..$&;61.........
0050   00 00 00 00 11 20 36 20 27 11 40 64 22 dd 00 2a   ..... 6 '.@d"..*
0060   b6 a1 25 0c 3b 90 32 01 00 00 00 00 00 00 00 00   ..%.;.2.........
0070   00 00 00 00 11 20 35 06 27 11 40 b8 25 35 00 2c   ..... 5.'.@.%5.,
0080   39 bb 26 59 3b 93 32 03 00 00 00 00 00 00 00 00   9.&Y;.2.........
0090   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00a0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00b0   00 00 00 00 11 20 35 03 27 11 3f bc 22 8a 00 2a   ..... 5.'.?."..*
00c0   0d 8b 24 40 3b ba 32 02 00 00 00 00 00 00 00 00   ..$@;.2.........
00d0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00e0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00f0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0100   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0110   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0120   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0130   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0140   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0150   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0170   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0180   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0190   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01a0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01b0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01c0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01d0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01e0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01f0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0200   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0210   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0220   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0230   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0250   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0260   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0270   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0280   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0290   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02a0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02b0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02c0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02d0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02e0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02f0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0300   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0310   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0330   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0340   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0350   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0360   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0370   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0380   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0390   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
03a0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
03b0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
03c0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
03d0   00 00 00 00 41 16                                 ....A.


Full frame for deeper investigation, data started from $0036


0000   02 08 08 01 83 00 bc 20 90 01 86 32 08 00 45 00   ....... ...2..E.
0010   03 fe 00 fe 00 00 ff 06 d2 b4 c0 a8 01 cb 2f 5b   ............../[
0020   f2 78 c0 3f 27 1d 00 00 48 00 20 f0 ae 69 50 18   .x.?'...H. ..iP.
0030   0b 68 58 9b 00 00 68 03 d6 68 10 04 90 01 86 32   .hX...h..h.....2
0040   14 02 08 0d 00 00 00 00 00 00 00 00 00 00 00 00   ................
0050   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0060   00 00 00 00 00 00 00 00 00 00 11 20 37 54 27 11   ........... 7T'.
0070   40 90 24 8b 00 29 11 e2 24 26 3b 36 31 ff 00 00   @.$..)..$&;61...
0080   00 00 00 00 00 00 00 00 00 00 11 20 36 20 27 11   ........... 6 '.
0090   40 64 22 dd 00 2a b6 a1 25 0c 3b 90 32 01 00 00   @d"..*..%.;.2...
00a0   00 00 00 00 00 00 00 00 00 00 11 20 35 06 27 11   ........... 5.'.
00b0   40 b8 25 35 00 2c 39 bb 26 59 3b 93 32 03 00 00   @.%5.,9.&Y;.2...
00c0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00d0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
00e0   00 00 00 00 00 00 00 00 00 00 11 20 35 03 27 11   ........... 5.'.
00f0   3f bc 22 8a 00 2a 0d 8b 24 40 3b ba 32 02 00 00   ?."..*..$@;.2...
0100   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0110   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0120   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0130   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0140   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0150   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0160   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0170   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0180   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0190   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01a0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01b0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01c0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01d0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01e0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
01f0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0200   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0210   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0220   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0230   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0240   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0250   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0260   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0270   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0280   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0290   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02a0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02b0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02c0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02d0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02e0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
02f0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0300   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0310   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0320   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0330   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0340   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0350   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0360   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0370   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0380   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0390   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
03a0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
03b0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
03c0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
03d0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
03e0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
03f0   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
0400   00 00 00 00 00 00 00 00 00 00 41 16               ..........A.



EDIT1.
Based on easy12's 4th post i tried to decode data. I found 4 kind of packages witch data:

1. sending by EVB short packet  (contains  only valid data for one MI,
2. ACK for packet above (contains some data - probably timestamp)
3. sending by EVB long packet which conains data from all MIs
4. ACK for packet above (very short)


AC/64
FREQ/265
TEMP/256
PWR_TOT/8192
PWR/64
DC/512

Short frames from EVB (1):
                                                 MIs      DC   PWR  PWR_TOT  TEMP AC   FREQ
6800306810 06 90018632 0000000002 00001002230002 00000000 0000 0000 00000000 0000 0000 0000 000000000000 ed 16
6800306810 06 90018632 0000000002 00001002230002 00000000 0000 0000 00000000 0000 0000 0000 000000000000 ed 16

6800306810 06 90018632 0000000002 00001002230002 37542711 3f44 23da 00295fe7 2726 3b8f 31fb 000000000000 e2 16
6800306810 06 90018632 0000000002 00001002230002 37542711 3f44 23da 00295fe7 2726 3b8f 31fb 000000000000 e2 16
6800306810 06 90018632 0000000002 00001002230002 37542711 3f44 23da 00295fe7 2726 3b8f 31fb 000000000000 e2 16
6800306810 06 90018632 0000000002 00001002230002 37542711 3e80 3473 00295ceb 2980 3bbf 3201 000000000000 5b 16
6800306810 06 90018632 0000000002 00001002230002 37542711 3d38 1b13 00295fe7 270c 3b52 31fb 000000000000 ae 16
6800306810 06 90018632 0000000002 00001002230002 37542711 3d38 1b13 00295fe7 270c 3b52 31fb 000000000000 ae 16
6800306810 06 90018632 0000000002 00001002230002 37542711 3d38 1b13 00295fe7 270c 3b52 31fb 000000000000 ae 16
6800306810 06 90018632 0000000002 00001002230002 37542711 3f94 238b 0029603e 26f3 3b9b 3200 020000000000 1b 16
6800306810 06 90018632 0000000002 00001002230002 37542711 3f94 238b 0029603e 26f3 3b9b 3200 020000000000 1b 16

ACK from server (2):
68001e6810 70 90018632 0000000079060e14261b00000000000000000000 ee 16
6800206810 27 90018632 000217151027060e0000000000000000000000000000 3e 16
68001e6810 70 90018632 0000000079060e14271e00000000000000000000 f2 16
6800206810 27 90018632 000217151027060e0000000000000000000000000000 3e 16
68001e6810 70 90018632 0000000079060e14282100000000000000000000 f6 16





Frames from EVB with data (3):                                                       
                                                          DC   PWR  PWR_TOT  TEMP AC   FREQ
6803d66810 04 90018632 1402080d00 00000000001120 37542711 2d7e 04d2 00291f5d 1ef3 3aef 31ff 02000000000000 0000000000112036202711401806f500 2ac4681f8c3b5b320002000000000000 0000000000112035062711402c070a00 2c47a820003b3c320002000000000000 00000000001120350327113fbc06f700 2a1b401f333b6d31fe02000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003916
6803d66810 04 90018632 1402080d00 00000000001120 37542711 2f02 04a4 00291f5d 1ee6 3b07 31fe 02000000000000 00000000001120362027113f3206cd00 2ac4681f8c3b3931fd02000000000000 0000000000112035062711400606eb00 2c47bb20003b5131fd02000000000000 0000000000112035032711336e06dc00 2a1b401f0c3b7b31fe02000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b716
6803d66810 04 90018632 1402080d00 00000000001120 37542711 2f96 046b 00291f6a 1ee6 3af7 31fe 02000000000000 0000000000112036202711333e050700 2ac47a1f593b3831fb02000000000000 00000000001120350627113526055b00 2c47bb1fc03b3d31fc02000000000000 00000000001120350327112fd204e900 2a1b511f003b7631fc02000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ba16
                                                       

ACK from server (4):
6800126810 15 90018632 1402080d00 00 d0 16
6800126810 15 90018632 1402080d00 00 d0 16




Titel: Antw:Solar Auswertung - Proxy
Beitrag von: sinemeter am 27 Januar 2023, 09:16:29
Zitat von: Uwe-Kaditz am 26 März 2020, 20:19:02
Hallo miteinander,
der Fehler ist entstanden, weil Envertech den Aufruf von http://www.envertecportal.com in https://www.envertecportal.com geändert hat.

Anbei der geänderte Script.
Folgende Änderungen sind noch notwendig:
<pvID> ersetzen durch die Envertech-StationsID (ist identisch zur ID, die man im Envertec-Portal v1.x erhalten hat)
<FHEMip> ersetzen durch die IP-Adresse der FHEM-Installation (z.B. http://192.168.1.77:8083/
<FHEMuser> ersetzen durch den LoginNamen des FHEM-User
<FHEMpwd> ersetzen durch das zugehörige FHEM-Passwort

Noch ein Hinweis:
Über 1000kWh ändert Envertech die Ausgabe automatisch in MWh, denn es werden für alle numerischen Daten nur 3 Stellen (vor dem Dezimaltrenner) gesendet.

Hallo zusammen,

der Thread ist ja schon etwas älter hier. Ich versuche auch meine kleine BalkonPV mit ENverbridge mit Fhem zu verbinden. Ich teste mit Uwes Script. aber habe 2 Probleme

1. Schon beim Testen im Raspberry erhalten ich einen Syntaxerror:

pi@raspi4:~/fhem/scripts $ ls
getPV.py
pi@raspi4:~/fhem/scripts $ python getPV.py
  File "/home/pi/fhem/scripts/getPV.py", line 67
    print "myPVstation: " + str(myPVstation)
          ^
SyntaxError: invalid syntax
pi@raspi4:~/fhem/scripts $


2. Ich verwende Fhem ohne HTTP Passwort - aber ich denke Problem 1 hat damit nichts zu tun?
Ich würde ansonsten auch ein Passwort für Fhem einrichten wenn sich das Script nicht anpassen lässt dafür.

Meine Frage ist hat das hier aktuell überhaupt noch jemand im Einsatz und funktioniert das grundsätzlich noch mit dieser Methode?

Liebe Grüße
sinemeter
Titel: Antw:Solar Auswertung - Proxy
Beitrag von: Gerrit am 14 Februar 2023, 10:07:59
Moin,

seit dem 08.02. bekomme ich keine Daten mehr über Uwes Script.
Ist das bei Euch auch so?
Mir ist aufgefallen, dass Envertech das Portal "verschlimmbessert" hat.

LG Gerrit
Titel: Aw: Solar Auswertung - Proxy
Beitrag von: Gerrit am 25 April 2023, 08:37:46
Moin,

gibt es hier noch jemanden, der das Script erfolgreich am laufen hat?
Bei mir sieht es so aus wie bei sinemeter wenn ich es starte.

root@VMFHEM:~# python  /opt/fhem/scripts/getPV.py
  File "/opt/fhem/scripts/getPV.py", line 67
    print "myPVstation: " + str(myPVstation)
          ^
SyntaxError: invalid syntax

LG Gerrit
Titel: Aw: Solar Auswertung - Proxy
Beitrag von: Wernieman am 25 April 2023, 08:48:15
Kannst Du mal Zeile 67 und +- 2 Zeilen posten?
Titel: Aw: Solar Auswertung - Proxy
Beitrag von: Gerrit am 25 April 2023, 11:11:35
Zitat von: Wernieman am 25 April 2023, 08:48:15Kannst Du mal Zeile 67 und +- 2 Zeilen posten?
Zeile 67 ist die print "myPVstation: " + str(myPVstation)

Hier einmal das komplette Script:

import os
import urllib2
import subprocess

proc = subprocess.Popen("curl --silent --cookie /tmp/cookies -X POST -d '' 'https://www.envertecportal.com/ApiStations/getStationInfo?stationId=PLATZHALTER'", stdout=subprocess.PIPE, shell=True)

(out, err) = proc.communicate()

# out looks like this:
#{"Status":"0",
#"Result":null,
#"Data":{
# "UnitCapacity":"1 kWp",
# "UnitEToday":"2.46 W",
# "UnitEMonth":"13.42 kWh",
# "UnitEYear":"13.42 kWh",
# "UnitETotal":"532.36 kWh",
# "Power":244.14,
# "PowerStr":"244.14 W",
# "Capacity":1,
# "StrCO2":"0.531 ton",
# "StrTrees":"1.454 trees",
# "StrIncome":"<Euro> 138.41",
# "PwImg":"Default.jpg",
# "StationName":"myPVstation",
# "Lat":51.0504088,
# "Lng":13.7372621,
# "TimeZone":1,
# "StrPeakPower":"633.69 W",
# "Installer":null,
# "CreateTime":"30/06/2018 GMT +1",
# "CreateYear":2018,
# "CreateMonth":6,
# "Etoday":2.46,
# "InvTotal":4
# }
#}

output = out.split(",")

#Stationsname (StationName) -> myPVstation
myPVstation = output[14].split(":")[1].split(" ")[0].replace("\"","")
#aktuelle Leistung (Power) -> nowPower
nowPower = output[7].split(":")[1].split(" ")[0].replace("\"","")
#nowPower = float(nowPower)/1000
nowPower = float(nowPower)

#Energie heute (UnitEToday) -> dayPower
dayPower = output[3].split(":")[1].split(" ")[0].replace("\"","")
#Energie aktuelle Monat (UnitEMonth) -> monthPower
monthPower = output[4].split(":")[1].split(" ")[0].replace("\"","")
#Energie aktuelles Jahr (UnitEYear) -> yearPower
yearPower = output[5].split(":")[1].split(" ")[0].replace("\"","")
#Energie total (UnitETotal) -> allPower
allPower = output[6].split(":")[1].split(" ")[0].replace("\"","")
#CO2 Einsparung (StrCO2) -> CO2
CO2 = output[10].split(":")[1].split(" ")[0].replace("\"","")
#gepflanzte Baeume (StrTrees) -> Baueme
Baeume = output[11].split(":")[1].split(" ")[0].replace("\"","")
#Ersparnis (StrIncome) -> Ersparnis  --> Anm: der geladene String wird aufgetrennt nach dem Leerzeichen durch split(" "): aus <Eurozeichen> 241.40 wird 241.40
Ersparnis = output[12].split(" ")[1].split("<Euro>")[0].replace("\"","")
#Spitzenleistung (StrPeakPower) -> Spitzenleistung
Spitzenleistung = output[18].split(":")[1].split(" ")[0].replace("\"","")
#Spitzenleistung = float(Spitzenleistung)


print "myPVstation: " + str(myPVstation)
print "NowPower: " + str(nowPower) + " W"
print "DayPower: " + str(dayPower) + " kWh"
print "MonthPower: " + str(monthPower) + " kWh"
print "YearPower: " + str(yearPower) + " kWh"
print "AllPower: " + str(allPower) + " kWh"
print "CO2: " + str(CO2) + " t"
print "Baeume: " + str(Baeume)
print "Ersparnis: " + str(Ersparnis) + " Eur"
print "Spitzenleistung: " + str(Spitzenleistung) + " W"

# create a password manager
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()

# Add the username and password.
# If we knew the realm, we could use it instead of None.
top_level_url = "http://192.168.2.111:8085"
password_mgr.add_password(None, top_level_url, "PLATZHALTER", "PLATZHALTER")
handler = urllib2.HTTPBasicAuthHandler(password_mgr)

# create "opener" (OpenerDirector instance)
opener = urllib2.build_opener(handler)

# use the opener to fetch a URL
opener.open("http://192.168.2.111:8085/fhem?cmd=set%20nowPVPower%20"+str(nowPower)+"%20W"+"&fwcsrf=PLATZHALTER")
# Install the opener.
urllib2.install_opener(opener)

opener.open("http://192.168.2.111:8085/fhem?cmd=set%20dayPVPower%20"+str(dayPower)+"%20kWh"+"&fwcsrf=PLATZHALTER")
# Install the opener.
urllib2.install_opener(opener)

opener.open("http://192.168.2.111:8085/fhem?cmd=set%20monthPVPower%20"+str(monthPower)+"%20kWh"+"&fwcsrf=PLATZHALTER")
# Install the opener.
urllib2.install_opener(opener)

opener.open("http://192.168.2.111:8085/fhem?cmd=set%20yearPVPower%20"+str(yearPower)+"%20kWh"+"&fwcsrf=PLATZHALTER")
# Install the opener.
urllib2.install_opener(opener)

opener.open("http://192.168.2.111:8085/fhem?cmd=set%20allPVPower%20"+str(allPower)+"%20kWh"+"&fwcsrf=PLATZHALTER")
# Install the opener.
urllib2.install_opener(opener)

opener.open("http://192.168.2.111:8085/fhem?cmd=set%20myPVstation%20"+str(myPVstation)+"&fwcsrf=PLATZHALTER")
# Install the opener.
urllib2.install_opener(opener)

opener.open("http://192.168.2.111:8085/fhem?cmd=set%20CO2%20"+str(CO2)+"%20t"+"&fwcsrf=PLATZHALTER")
# Install the opener.
urllib2.install_opener(opener)

opener.open("http://192.168.2.111:8085/fhem?cmd=set%20Baeume%20"+str(Baeume)+"&fwcsrf=PLATZHALTER")
# Install the opener.
urllib2.install_opener(opener)

opener.open("http://192.168.2.111:8085/fhem?cmd=set%20Ersparnis%20"+str(Ersparnis)+"%20Eur"+"&fwcsrf=PLATZHALTER")
# Install the opener.
urllib2.install_opener(opener)

opener.open("http://192.168.2.111:8085/fhem?cmd=set%20Spitzenleistung%20"+str(Spitzenleistung)+"%20W"+"&fwcsrf=PLATZHALTER")
# Install the opener.
urllib2.install_opener(opener)

Titel: Aw: Solar Auswertung - Proxy
Beitrag von: Wernieman am 25 April 2023, 18:22:52
Ich bin kein pytion crack .. aber gehört bei der print-Funktion nich ein () hin?

Und was mir bei solchen Script immer negativ auffällt, warum verwendet ist nicht das klassische #! am Anfang?
Titel: Aw: Solar Auswertung - Proxy
Beitrag von: Gerrit am 25 April 2023, 18:31:29
Ich hab davon leider keinen Plan. Deshalb frage ich ja.  ;)
Bis zum 08.02. lief es einwandfrei. Dann hat Envertech die Webseite geändert und ich tippe mal, das Script müsste darauf angepasst werden.
Titel: Aw: Solar Auswertung - Proxy
Beitrag von: Wernieman am 26 April 2023, 08:05:21
Nicht bei der Fehlermeldung ....