Add files via upload
This commit is contained in:
parent
d41f3085e6
commit
3f84d6d3a2
6 changed files with 432 additions and 0 deletions
260
.images/CreateMySQLDB_no_drop.sql
Normal file
260
.images/CreateMySQLDB_no_drop.sql
Normal file
|
@ -0,0 +1,260 @@
|
|||
|
||||
|
||||
USE SBFspot;
|
||||
|
||||
CREATE Table Config (
|
||||
`Key` varchar(32),
|
||||
`Value` varchar(200),
|
||||
PRIMARY KEY (`Key`)
|
||||
);
|
||||
|
||||
INSERT INTO Config VALUES('SchemaVersion','2');
|
||||
|
||||
CREATE Table Inverters (
|
||||
Serial int unsigned NOT NULL,
|
||||
Name varchar(32),
|
||||
Type varchar(32),
|
||||
SW_Version varchar(32),
|
||||
TimeStamp int,
|
||||
TotalPac int,
|
||||
EToday bigint,
|
||||
ETotal bigint,
|
||||
OperatingTime double,
|
||||
FeedInTime double,
|
||||
Status varchar(10),
|
||||
GridRelay varchar(10),
|
||||
Temperature float,
|
||||
PRIMARY KEY (Serial)
|
||||
);
|
||||
|
||||
CREATE View vwInverters AS
|
||||
Select Serial,
|
||||
Name,Type,SW_Version,
|
||||
From_UnixTime(TimeStamp) AS TimeStamp,
|
||||
TotalPac,
|
||||
EToday,ETotal,
|
||||
OperatingTime,FeedInTime,
|
||||
Status,GridRelay,
|
||||
Temperature
|
||||
FROM Inverters;
|
||||
|
||||
CREATE Table SpotData (
|
||||
TimeStamp int NOT NULL,
|
||||
Serial int unsigned NOT NULL,
|
||||
Pdc1 int, Pdc2 int,
|
||||
Idc1 float, Idc2 float,
|
||||
Udc1 float, Udc2 float,
|
||||
Pac1 int, Pac2 int, Pac3 int,
|
||||
Iac1 float, Iac2 float, Iac3 float,
|
||||
Uac1 float, Uac2 float, Uac3 float,
|
||||
EToday bigint, ETotal bigint,
|
||||
Frequency float,
|
||||
OperatingTime double,
|
||||
FeedInTime double,
|
||||
BT_Signal float,
|
||||
Status varchar(10),
|
||||
GridRelay varchar(10),
|
||||
Temperature float,
|
||||
PRIMARY KEY (TimeStamp, Serial)
|
||||
);
|
||||
|
||||
-- Fix 02-MAY-2016 See Issue 150
|
||||
CREATE View vwSpotData AS
|
||||
Select From_UnixTime(Dat.TimeStamp) AS TimeStamp,
|
||||
From_UnixTime(CASE WHEN (Dat.TimeStamp % 300) < 150
|
||||
THEN Dat.TimeStamp - (Dat.TimeStamp % 300)
|
||||
ELSE Dat.TimeStamp - (Dat.TimeStamp % 300) + 300
|
||||
END) AS Nearest5min,
|
||||
Inv.Name,
|
||||
Inv.Type,
|
||||
Dat.Serial,
|
||||
Pdc1, Pdc2,
|
||||
Idc1, Idc2,
|
||||
Udc1, Udc2,
|
||||
Pac1, Pac2, Pac3,
|
||||
Iac1, Iac2, Iac3,
|
||||
Uac1, Uac2, Uac3,
|
||||
Pdc1+Pdc2 AS PdcTot,
|
||||
Pac1+Pac2+Pac3 AS PacTot,
|
||||
CASE WHEN Pdc1+Pdc2 = 0 THEN
|
||||
0
|
||||
ELSE
|
||||
CASE WHEN Pdc1+Pdc2>Pac1+Pac2+Pac3 THEN
|
||||
ROUND((Pac1+Pac2+Pac3)/(Pdc1+Pdc2)*100,1)
|
||||
ELSE
|
||||
100.0
|
||||
END
|
||||
END AS Efficiency,
|
||||
Dat.EToday,
|
||||
Dat.ETotal,
|
||||
Frequency,
|
||||
Dat.OperatingTime,
|
||||
Dat.FeedInTime,
|
||||
ROUND(BT_Signal,1) AS BT_Signal,
|
||||
Dat.Status,
|
||||
Dat.GridRelay,
|
||||
ROUND(Dat.Temperature,1) AS Temperature
|
||||
FROM SpotData Dat
|
||||
INNER JOIN Inverters Inv ON Dat.Serial=Inv.Serial;
|
||||
|
||||
CREATE Table DayData (
|
||||
TimeStamp int NOT NULL,
|
||||
Serial int unsigned NOT NULL,
|
||||
TotalYield bigint,
|
||||
Power bigint,
|
||||
PVoutput int(1),
|
||||
PRIMARY KEY (TimeStamp, Serial)
|
||||
);
|
||||
|
||||
CREATE View vwDayData AS
|
||||
select From_UnixTime(Dat.TimeStamp) AS TimeStamp,
|
||||
Inv.Name, Inv.Type, Dat.Serial,
|
||||
TotalYield,
|
||||
Power,
|
||||
PVOutput FROM DayData Dat
|
||||
INNER JOIN Inverters Inv ON Dat.Serial=Inv.Serial
|
||||
ORDER BY Dat.Timestamp Desc;
|
||||
|
||||
CREATE Table MonthData (
|
||||
TimeStamp int NOT NULL,
|
||||
Serial int unsigned NOT NULL,
|
||||
TotalYield bigint,
|
||||
DayYield bigint,
|
||||
PRIMARY KEY (TimeStamp, Serial)
|
||||
);
|
||||
|
||||
CREATE View vwMonthData AS
|
||||
select convert_tz(from_unixtime(Dat.TimeStamp), 'SYSTEM', '+00:00') AS TimeStamp,
|
||||
Inv.Name, Inv.Type, Dat.Serial,
|
||||
TotalYield, DayYield FROM MonthData Dat
|
||||
INNER JOIN Inverters Inv ON Dat.Serial=Inv.Serial
|
||||
ORDER BY Dat.Timestamp Desc;
|
||||
|
||||
CREATE Table EventData (
|
||||
EntryID int unsigned,
|
||||
TimeStamp int NOT NULL,
|
||||
Serial int unsigned NOT NULL,
|
||||
SusyID smallint unsigned,
|
||||
EventCode int unsigned,
|
||||
EventType varchar(32),
|
||||
Category varchar(32),
|
||||
EventGroup varchar(32),
|
||||
Tag varchar(200),
|
||||
OldValue varchar(64),
|
||||
NewValue varchar(64),
|
||||
UserGroup varchar(10),
|
||||
PRIMARY KEY (Serial, EntryID)
|
||||
);
|
||||
|
||||
CREATE View vwEventData AS
|
||||
select From_UnixTime(Dat.TimeStamp) AS TimeStamp,
|
||||
Inv.Name, Inv.Type, Dat.Serial,
|
||||
SusyID, EntryID,
|
||||
EventCode, EventType,
|
||||
Category, EventGroup, Tag,
|
||||
OldValue, NewValue,
|
||||
UserGroup FROM EventData Dat
|
||||
INNER JOIN Inverters Inv ON Dat.Serial=Inv.Serial
|
||||
ORDER BY EntryID Desc;
|
||||
|
||||
CREATE Table Consumption (
|
||||
TimeStamp int NOT NULL,
|
||||
EnergyUsed int,
|
||||
PowerUsed int,
|
||||
PRIMARY KEY (TimeStamp)
|
||||
);
|
||||
|
||||
CREATE VIEW vwConsumption AS
|
||||
SELECT From_UnixTime(TimeStamp) As Timestamp,
|
||||
From_UnixTime(CASE WHEN (TimeStamp % 300) < 150
|
||||
THEN TimeStamp - (TimeStamp % 300)
|
||||
ELSE TimeStamp - (TimeStamp % 300) + 300
|
||||
END) AS Nearest5min,
|
||||
EnergyUsed,
|
||||
PowerUsed
|
||||
FROM Consumption;
|
||||
|
||||
-- Fix 02-MAY-2016 See Issue 150
|
||||
CREATE VIEW vwAvgConsumption AS
|
||||
SELECT Nearest5min,
|
||||
cast(avg(EnergyUsed) As decimal(9)) As EnergyUsed,
|
||||
cast(avg(PowerUsed) As decimal(9)) As PowerUsed
|
||||
FROM vwConsumption
|
||||
GROUP BY Nearest5Min;
|
||||
|
||||
CREATE VIEW vwAvgSpotData AS
|
||||
SELECT nearest5min,
|
||||
serial,
|
||||
cast(avg(Pdc1) as decimal(9)) AS Pdc1,
|
||||
cast(avg(Pdc2) as decimal(9)) AS Pdc2,
|
||||
cast(avg(Idc1) as decimal(9,3)) AS Idc1,
|
||||
cast(avg(Idc2) as decimal(9,3)) AS Idc2,
|
||||
cast(avg(Udc1) as decimal(9,2)) AS Udc1,
|
||||
cast(avg(Udc2) as decimal(9,2)) AS Udc2,
|
||||
cast(avg(Pac1) as decimal(9)) AS Pac1,
|
||||
cast(avg(Pac2) as decimal(9)) AS Pac2,
|
||||
cast(avg(Pac3) as decimal(9)) AS Pac3,
|
||||
cast(avg(Iac1) as decimal(9,3)) AS Iac1,
|
||||
cast(avg(Iac2) as decimal(9,3)) AS Iac2,
|
||||
cast(avg(Iac3) as decimal(9,3)) AS Iac3,
|
||||
cast(avg(Uac1) as decimal(9,2)) AS Uac1,
|
||||
cast(avg(Uac2) as decimal(9,2)) AS Uac2,
|
||||
cast(avg(Uac3) as decimal(9,2)) AS Uac3,
|
||||
cast(avg(Temperature) as decimal(9,2)) AS Temperature
|
||||
FROM vwSpotData
|
||||
GROUP BY serial, nearest5min;
|
||||
|
||||
CREATE VIEW vwPvoData AS
|
||||
SELECT dd.Timestamp,
|
||||
dd.Name,
|
||||
dd.Type,
|
||||
dd.Serial,
|
||||
dd.TotalYield AS V1,
|
||||
dd.Power AS V2,
|
||||
cons.EnergyUsed AS V3,
|
||||
cons.PowerUsed AS V4,
|
||||
spot.Temperature AS V5,
|
||||
spot.Uac1 AS V6,
|
||||
NULL AS V7,
|
||||
NULL AS V8,
|
||||
NULL AS V9,
|
||||
NULL AS V10,
|
||||
NULL AS V11,
|
||||
NULL AS V12,
|
||||
dd.PVoutput
|
||||
FROM vwDayData AS dd
|
||||
LEFT JOIN vwAvgSpotData AS spot
|
||||
ON dd.Serial = spot.Serial AND dd.Timestamp = spot.Nearest5min
|
||||
LEFT JOIN vwAvgConsumption AS cons
|
||||
ON dd.Timestamp = cons.Nearest5min
|
||||
ORDER BY dd.Timestamp DESC;
|
||||
|
||||
-- Fix 09-JAN-2017 See Issue 54: SQL Support for battery inverters
|
||||
CREATE TABLE SpotDataX (
|
||||
`TimeStamp` int NOT NULL,
|
||||
`Serial` int unsigned NOT NULL,
|
||||
`Key` int NOT NULL,
|
||||
`Value` int,
|
||||
PRIMARY KEY (
|
||||
`TimeStamp` ASC,
|
||||
`Serial` ASC,
|
||||
`Key`
|
||||
)
|
||||
);
|
||||
|
||||
DROP VIEW IF EXISTS vwBatteryData;
|
||||
|
||||
CREATE VIEW vwBatteryData AS
|
||||
SELECT FROM_UNIXTIME(sdx.`TimeStamp` - (sdx.`TimeStamp` % 300)) AS `5min`,
|
||||
sdx.`Serial`,
|
||||
inv.`Name`,
|
||||
AVG(CASE WHEN `Key` = 10586 THEN `Value` END) AS ChaStatus,
|
||||
AVG(CASE WHEN `Key` = 18779 THEN CAST(`Value` AS DECIMAL(10,1)) / 10 END) AS Temperature,
|
||||
AVG(CASE WHEN `Key` = 18781 THEN CAST(`Value` AS DECIMAL(10,3)) / 1000 END) AS ChaCurrent,
|
||||
AVG(CASE WHEN `Key` = 18780 THEN CAST(`Value` AS DECIMAL(10,2)) / 100 END) AS ChaVoltage,
|
||||
AVG(CASE WHEN `Key` = 17974 THEN `Value` END) AS GridMsTotWOut,
|
||||
AVG(CASE WHEN `Key` = 17975 THEN `Value` END) AS GridMsTotWIn
|
||||
FROM SpotDataX AS sdx
|
||||
INNER JOIN
|
||||
Inverters AS inv ON sdx.Serial = inv.`Serial`
|
||||
GROUP BY `5min`;
|
48
.images/Example_Config.yaml
Normal file
48
.images/Example_Config.yaml
Normal file
|
@ -0,0 +1,48 @@
|
|||
BTAddress: 00:00:00:00:00:00
|
||||
Password: Your_Sunny_Explorer_Password
|
||||
MIS_Enabled: 0
|
||||
Plantname: YourPlantname
|
||||
OutputPath: /data/sbfspot/%Y
|
||||
OutputPathEvents: /data/sbfspot/%Y/events
|
||||
Latitude: null
|
||||
Longitude: null
|
||||
CalculateMissingSpotValues: 1
|
||||
DateTimeFormat: '%d/%m/%Y %H:%M:%S'
|
||||
DateFormat: '%d/%m/%Y'
|
||||
DecimalPoint: comma
|
||||
TimeFormat: '%H:%M:%S'
|
||||
SynchTime: 7
|
||||
SynchTimeLow: 1
|
||||
SynchTimeHigh: 3600
|
||||
SunRSOffset: 900
|
||||
Locale: en-US
|
||||
Timezone: YourCountry/YourCity
|
||||
BTConnectRetries: 10
|
||||
CSV_Export: 0
|
||||
CSV_ExtendedHeader: 1
|
||||
CSV_Header: 1
|
||||
CSV_SaveZeroPower: 1
|
||||
CSV_Delimiter: semicolon
|
||||
CSV_Spot_TimeSource: Inverter
|
||||
CSV_Spot_WebboxHeader: 0
|
||||
SQL_Database: SBFspot
|
||||
SQL_Hostname: Your_MariaDB_Host (usually your homeassistant hostname or IP)
|
||||
SQL_Port: '3306'
|
||||
SQL_Username: sbfspot
|
||||
SQL_Password: Your_MariaDB_Password
|
||||
MQTT_Publisher: /usr/bin/mosquitto_pub
|
||||
MQTT_Host: Your_MariaDB_Host (usually your homeassistant hostname or IP)
|
||||
MQTT_Port: '1883'
|
||||
MQTT_Username": !secret mqtt_user,
|
||||
MQTT_Password": !secret mqtt_pass,
|
||||
MQTT_Topic: homeassistant/sbfspot_{plantname}/sbfspot_{serial}
|
||||
MQTT_ItemFormat: '"{key}": {value}'
|
||||
MQTT_ItemDelimiter: comma
|
||||
MQTT_PublisherArgs: '-h Your_MQTT_Hostname -u Your_MQTT_Username -P Your_MQTT_password -t {topic} -m "{{message}}" -d -r'
|
||||
MQTT_Data: >-
|
||||
Timestamp,SunRise,SunSet,InvSerial,InvName,InvTime,InvStatus,InvTemperature,InvGridRelay,EToday,ETotal,PACTot,UDC1,UDC2,IDC1,IDC2,PDC1,PDC2
|
||||
LogDir: /data/sbfspot/log
|
||||
LogLevel: info
|
||||
PVoutput_SID: '00000000000:11111' #Your_Inverter_Serial:Your_PVoutput_SID
|
||||
PVoutput_Key: Your_PVoutput_API_key
|
||||
MQTT_ENABLE: '1'
|
BIN
.images/Example_config_png.PNG
Normal file
BIN
.images/Example_config_png.PNG
Normal file
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
BIN
.images/MariaDB setup.PNG
Normal file
BIN
.images/MariaDB setup.PNG
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
124
.images/sbfspot_sensors.yaml
Normal file
124
.images/sbfspot_sensors.yaml
Normal file
|
@ -0,0 +1,124 @@
|
|||
sensor:
|
||||
- platform: mqtt
|
||||
name: "SMA Output"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.status }}'
|
||||
json_attributes_topic: "sbfspot"
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA Sunny Boy"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.InvName }}'
|
||||
icon: "mdi:flash"
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA TimeStamp"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.Timestamp }}'
|
||||
icon: "mdi:clock"
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA Sun Rise"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.SunRise }}'
|
||||
icon: "mdi:weather-sunny"
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA Sun Set"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.SunSet }}'
|
||||
icon: "mdi:weather-sunset-down"
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA Running Temp"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.InvTemperature }}'
|
||||
unit_of_measurement: "°C"
|
||||
icon: "mdi:coolant-temperature"
|
||||
device_class: temperature
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA Status"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.InvStatus }}'
|
||||
icon: "mdi:flash"
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA Grid Relay"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.InvGridRelay }}'
|
||||
icon: "mdi:electric-switch"
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA Daily Energy"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.EToday }}'
|
||||
unit_of_measurement: "kWh"
|
||||
icon: "mdi:solar-power"
|
||||
device_class: energy
|
||||
state_class: total_increasing
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA Total Energy"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.ETotal }}'
|
||||
unit_of_measurement: "kWh"
|
||||
device_class: energy
|
||||
state_class: total_increasing
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA Power AC"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.PACTot }}'
|
||||
unit_of_measurement: "W"
|
||||
icon: "mdi:flash"
|
||||
device_class: power
|
||||
state_class: measurement
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA DC Array"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.UDC1 }}'
|
||||
unit_of_measurement: "Volts"
|
||||
icon: "mdi:solar-panel-large"
|
||||
device_class: voltage
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA DC Array2"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.UDC2 }}'
|
||||
unit_of_measurement: "Volts"
|
||||
icon: "mdi:solar-panel"
|
||||
device_class: voltage
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA DC Array"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.IDC1 }}'
|
||||
unit_of_measurement: "Amps"
|
||||
icon: "mdi:solar-panel-large"
|
||||
device_class: current
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA DC Array2"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.IDC2 }}'
|
||||
unit_of_measurement: "Amps"
|
||||
icon: "mdi:solar-panel"
|
||||
device_class: current
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA DC Array"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.PDC1 }}'
|
||||
unit_of_measurement: "Watts"
|
||||
icon: "mdi:solar-panel-large"
|
||||
device_class: power
|
||||
|
||||
- platform: mqtt
|
||||
name: "SMA DC Array2"
|
||||
state_topic: "homeassistant/sbfspot_YOUR_PLANT_NAME/sbfspot_YOUR_INVERTER_SERIAL"
|
||||
value_template: '{{ value_json.PDC2 }}'
|
||||
unit_of_measurement: "Watts"
|
||||
icon: "mdi:solar-panel"
|
||||
device_class: power
|
BIN
.images/screenshot.png
Normal file
BIN
.images/screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
Loading…
Add table
Add a link
Reference in a new issue