30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
from sqlalchemy import Column, Integer, Enum, Boolean, ForeignKey, CheckConstraint
|
|
from helix.constants.inverter_type import InverterType
|
|
from helix.models.sql.shared_sql_base import Base
|
|
|
|
|
|
class Inverter(Base):
|
|
__tablename__ = 'inverters'
|
|
id = Column(Integer, primary_key=True)
|
|
model = Column(Enum(*map(lambda x: str(x.value), InverterType.all()), name='invertertype'), nullable=False)
|
|
strings_per_inverter = Column(Integer, nullable=False)
|
|
sunshade = Column(Boolean)
|
|
dc_switch = Column(Boolean)
|
|
splice_box = Column(Boolean)
|
|
power_station_id = Column(Integer, ForeignKey('power_stations.id'))
|
|
standalone_inverter_id = Column(Integer, ForeignKey('standalone_inverters.id', ondelete='CASCADE'))
|
|
|
|
__table_args__ = (
|
|
CheckConstraint('(power_station_id IS NULL != standalone_inverter_id IS NULL)'),
|
|
)
|
|
|
|
def to_json(self):
|
|
inverter_type = InverterType.SMA if int(self.model) in InverterType.SMA.all() else InverterType.DELTA
|
|
return {
|
|
'model': inverter_type(int(self.model)),
|
|
'strings_per_inverter': self.strings_per_inverter,
|
|
'sunshade': self.sunshade,
|
|
'dc_switch': self.dc_switch,
|
|
'splice_box': self.splice_box,
|
|
}
|