franzjosef 1 Geschrieben 15. Dezember 2019 Melden Teilen Geschrieben 15. Dezember 2019 Hallo zusammen, wie ich schonmal in einem anderen Fall geschrieben habe bin ich leider kein Skript-Profi. Ich habe hier einen PV-Wechselrichter von Fronius deren Daten ich per JSON auslesen kann. Der direkte HTTP Aufruf via http://192.168.178.60/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData spuckt mit nachfolgenden Content aus: { "Body" : { "Data" : { "DAY_ENERGY" : { "Unit" : "Wh", "Value" : 1138.5 }, "DeviceStatus" : { "ErrorCode" : 0, "LEDColor" : 2, "LEDState" : 0, "MgmtTimerRemainingTime" : -1, "StateToReset" : false, "StatusCode" : 7 }, "FAC" : { "Unit" : "Hz", "Value" : 49.979999999999997 }, "IAC" : { "Unit" : "A", "Value" : 2.98 }, "IDC" : { "Unit" : "A", "Value" : 1.49 }, "PAC" : { "Unit" : "W", "Value" : 674 }, "TOTAL_ENERGY" : { "Unit" : "Wh", "Value" : 154984 }, "UAC" : { "Unit" : "V", "Value" : 225.5 }, "UDC" : { "Unit" : "V", "Value" : 491.5 }, "YEAR_ENERGY" : { "Unit" : "Wh", "Value" : 154984.29999999999 } } }, "Head" : { "RequestArguments" : { "DataCollection" : "CommonInverterData", "DeviceClass" : "Inverter", "DeviceId" : "1", "Scope" : "Device" }, "Status" : { "Code" : 0, "Reason" : "", "UserMessage" : "" }, "Timestamp" : "2019-12-15T12:03:57+01:00" } } Über das zugehörige Handbuch habe ich keine Lösung gefunden einen Einzelwert direkt abzufragen. Interessant wäre diese Ausgabe zu reduzieren bzw. benötige ich lediglich den Wert von "PAC", also in diesem Fall 674 was der aktuellen Leistung entspricht. Die Einheit benötige ich auch nicht. Dieser Wert müsste dann in die Windows Registry geschrieben werden. Das Ganze würde ich in Zeitabständen von 60 Sekunden laufen lassen. Vielen Dank für Tipps und Ratschläge! Zitieren Link zu diesem Kommentar
testperson 1.707 Geschrieben 15. Dezember 2019 Melden Teilen Geschrieben 15. Dezember 2019 Hi, dann hol den Content doch einfach mal per Invoke-WebRequest und wandel das Ergibnis von JSON (ConvertFrom-Json) um: $jContent = (Invoke-WebRequest http://192.168.178.60/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData).Content $Content = ConvertFrom-Json $jContent Gruß Jan Zitieren Link zu diesem Kommentar
franzjosef 1 Geschrieben 15. Dezember 2019 Autor Melden Teilen Geschrieben 15. Dezember 2019 $json=Invoke-WebRequest "http://192.168.178.60/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData" $aktuelleleistung=$json|ConvertFrom-Json |select " Body" -ExpandProperty "Body" | select "Data" -ExpandProperty "Data" | select "PAC" -ExpandProperty "PAC" | select "Value" -ExpandProperty "Value" Set-ItemProperty -Path “HKCU:\Software\FinalWire\AIDA64\ImportValues” DW1 -Value $aktuelleleistung –Force exit Mit diesem Skript ist mir gelungen wonach ich gesucht habt. Vielen Dank! Zitieren Link zu diesem Kommentar
daabm 1.366 Geschrieben 16. Dezember 2019 Melden Teilen Geschrieben 16. Dezember 2019 Nur so als Anregung: Powershell ist vollständig objektorientiert, das geht auch so: $aktuelleleistung = ( ConvertFrom-Json -InputObject $json ).Body.Data.PAC.Value Damit ersparst Dir die vielen Selects Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.