Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:solar_inverters:sma

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
hardware:channels:solar_inverters:sma [2020/09/27 16:20] – 2. versuch Markus mauwjohardware:channels:solar_inverters:sma [2020/12/18 13:30] (aktuell) – [SMA Sunny Boy] wasserma
Zeile 1262: Zeile 1262:
  
 </code> </code>
 +
 +===== SMA Sunny Boy =====
 +Den SMA Sunny Boy kann man per URL auslesen, dazu muss man die Default seite von dem Sunny Boy freischalten, so dass man auch online login die Daten sehen kann.
 +Dann kann man per request die JSON daten abfragen.
 +
 +http://sunnyboyurl/dyn/getDashValues.json
 +json response example:
 +<code>
 +...
 +"6100_40263F00": {
 +"1": [
 +{
 +"val": 1488
 +}
 +]
 +},
 +...
 +</code>
 +
 +Hierzu ein python script, dass den aktullen Wert in eine Datei schreibt, die wir dann mit dem vzlogger auslesen können:
 +
 +<code>
 +import requests
 +import time
 +import logging
 +import argparse
 +
 +
 +logging.basicConfig(
 +    level=logging.INFO,
 +    format="%(asctime)s  [%(name)-12.12s] [%(threadName)-12.12s] [%(levelname)-5.5s]  %(message)s",
 +    handlers=[logging.StreamHandler()],
 +)
 +
 +sma_host = : str = None
 +out_put_file  : str = None
 +
 +def pullData():
 +    try:
 +        data = requests.get(
 +            "http://" + sma_host + "/dyn/getDashValues.json", timeout=5
 +        ).json()
 +        value = data["result"]["012F-730C09D7"]["6100_40263F00"]["1"][0]["val"]
 +        logging.debug(data)
 +        if value:
 +            return value
 +    except Exception as e:
 +        logging.error("Unexpected error: {}".format(e))
 +    return -1
 +
 +
 +def main():
 +    while True:
 +        value = pullData()
 +        if value != -1:
 +            if out_put_file:
 +                f = open(out_put_file, "w")
 +                f.write(str(value))
 +                f.close()
 +            else:
 +                print(value)
 +        time.sleep(5)
 +
 +
 +if __name__ == "__main__":
 +    print("SMA sunny boy file writer logger v0.1")
 +    parser = argparse.ArgumentParser()
 +    parser.add_argument("--sma", "-s", type=str, help="sma sunny boy host name")
 +    parser.add_argument("--out", "-o", type=str, help="output file name is not set sysout is used")
 +    args = parser.parse_args()
 +
 +    if not args.sma:
 +        print("missing sma host name parameter")
 +        exit(-1)
 +
 +    #global sma_host
 +    
 +    sma_host = args.sma
 +    print("connect to sma host: " + sma_host)
 +
 +    if args.out:
 +        out_put_file = args.out
 +        print("use output file: " + out_put_file)
 +    else:
 +        print("output file not set use sysout")
 +        
 +
 +    main()
 +
 +</code>
 +
 +
 +vzlogger.conf file meter:
 +
 +<code>
 + {
 +      "enabled": true,
 +      "allowskip": false,
 +      "aggtime": 300,
 +      "channels": [
 +        {
 +          "api": "volkszaehler",
 +          "uuid": "60964f00-9f85-11ea-8200-37539aba2eb7",
 +          "identifier": "",
 +          "middleware": "http://localhost/middleware.php",
 +          "aggmode": "AVG",
 +          "duplicates": 0
 +        }
 +      ],
 +      "protocol": "file",
 +      "path": "/home/pi/sma/sma.log",
 +      "rewind": true
 +    }
 +    </code>
hardware/channels/solar_inverters/sma.1601216448.txt.gz · Zuletzt geändert: 2020/09/27 16:20 von mauwjo