DigitalSignage/models/dss_geraetetypen.py

170 lines
9.5 KiB
Python

import ast
import datetime
import json
import re
import uuid
import logging
import base64
import subprocess
import tempfile
import easywebdav
import os
import os.path
from odoo import api, fields, models, _
from odoo import tools
from odoo.exceptions import ValidationError
from datetime import date
from datetime import datetime
from dateutil.relativedelta import relativedelta
from pyffmpeg import FFmpeg
from tuya_iot import TuyaOpenAPI, TUYA_LOGGER
from tuya_connector import TuyaOpenAPI, TUYA_LOGGER
import sys
TUYA_LOGGER.setLevel(logging.DEBUG)
_logger = logging.getLogger(__name__)
class dssgeraetetypen(models.Model):
_name = "dss.geraetetypen"
_description = "DigitalSignage Geraetetypen"
_inherit = ['mail.thread','mail.activity.mixin']
_rec_name = "geraetename"
geraetename = fields.Char('Geraetename', required=True)
uuid = fields.Char(default=lambda self: self._default_uuid(), required=True, readonly=True, copy=False, string='UUID')
geraetetyp = fields.Selection([('SYS','Systemgerät'), ('STE','Steuergerät'), ('DIV','Anderes'), ('ANZ','Anzeigegerät'), ('PLY','Abspielgerät')],tracking=True)
# grundsystem = fields.Many2one('dss.systemtypen', string="Gerät ist nutzbar für",tracking=True)
grundsystem = fields.Many2many('dss.systemtypen', string="Gerät ist nutzbar für",tracking=True)
grundsystem_kennung = fields.Char(string='Kennung', related='grundsystem.kennung',tracking=True)
standort = fields.Char('Hauptstandort des Gerätes',tracking=True)
farbe = fields.Char('Grundfarbe',tracking=True)
has_heizung = fields.Boolean('Mit Heizsystem',tracking=True)
has_klima = fields.Boolean('Mit Klimasystem',tracking=True)
has_fan = fields.Boolean('Mit Ventiltorensystem',tracking=True)
has_tuya = fields.Boolean('Mit Tuyasteuerung',tracking=True)
stromzaehler = fields.Many2one('dss.geraetetypen',tracking=True)
stromverbrauch_avg = fields.Integer('Stromverbrauch AVG in W',tracking=True)
osvorhanden = fields.Boolean('Mit Betriebssystem',tracking=True)
osname = fields.Char('Betriebssystem',tracking=True)
ostyp = fields.Selection([('Win','Windows'), ('Lin','Linux'), ('And','Android'),('Ras','Raspberry PI'),('Non','Keines bekannt'),('Div','Anderes')],tracking=True);
lcd_ausrichtung = fields.Selection([('quer','Horizontal/Querformat'), ('hoch','Vertikal/Hochformat'),('Divers','Andere Art')],'LCD Ausrichtung',tracking=True);
lcd_touch = fields.Boolean('Touchsystem',tracking=True)
lcd_montage = fields.Selection([('WAN','Wandmontage'), ('FUS','Standfuss rollbar'), ('FI1','Boden verankert 1 Fuss'),('FI2','Boden verankert 2 Füsse'),('FIX','Bodenverankert Blockfuss'),('XXX','Sonstige')],'Montage/Befestigung',tracking=True);
lcd_montage_sonstige = fields.Char('Sonstige Montageart',tracking=True)
lcd_size = fields.Selection([('42','42 Zoll'), ('55','55 Zoll'), ('65','65 Zoll'),('75','75 Zoll'),('10','10.x Zoll'),('00','Sonstige')],'LCD Größe',tracking=True);
lcd_size_sonstige = fields.Char('LCD Sondergröße',tracking=True)
led_geraetetyp = fields.Selection([('MOD','LED Modul'),('NET','Netzgerät'), ('REC','Receiving Karte'), ('STE','Steuerkarte'),('LFT','Lüftertyp')],tracking=True)
led_module_pixelpitch = fields.Float('Modulpixelpitch',tracking=True)
led_module_breite = fields.Integer('Modulbreite mm',tracking=True)
led_module_hoehe = fields.Integer('Modulhoehe mm',tracking=True)
led_module_pixel_breite = fields.Integer('Modulbreite px',tracking=True)
led_module_pixel_hoehe = fields.Integer('Modulhoehe px',tracking=True)
led_module_system = fields.Selection([('FIX1','Fix Verschraubt'), ('MAG1','Magnetisch haltend'), ('RIG1','Imbus Veriegelt (vorn)'),('SONS','Sonstige')],'Modul Montage/Befestigung',tracking=True);
led_module_system_sonstige = fields.Char('Modulbefestigung Sonstige',tracking=True)
led_module_kennung = fields.Char('Modulbezeichnung',tracking=True)
led_module_serial = fields.Char('Modulseriennummer',tracking=True)
led_module_vendor = fields.Many2one('res.partner','Modul Hersteller',tracking=True)
led_receivingcard_vendor = fields.Many2one('res.partner','Receivingcard Hersteller')
led_receivingcard_kennung = fields.Char('Receivingcardtyp')
led_netzteil_typ = fields.Selection([('SNT','Schaltnetzteil'), ('STN','Steckernetzteil'), ('HNT','Hutschienennetzteil'),('INT','Internes Netzteil')],'Netzteil Bauart',tracking=True);
led_netzteil_vendor = fields.Many2one('res.partner','Netzteil Hersteller',tracking=True)
led_netzteil_kennung = fields.Char('Netzteilkennung',tracking=True)
led_netzteil_spannung = fields.Char('Netzteil Spannung V',tracking=True)
led_netzteil_leistung = fields.Char('Netzteil Leistung W',tracking=True)
lcd_montage = fields.Selection([('WAN','Wandmontage'), ('FUS','Standfuss rollbar'), ('FI1','Boden verankert 1 Fuss'),('FI2','Boden verankert 2 Füsse'),('FIX','Bodenverankert Blockfuss'),('XXX','Sonstige')],'Montage/Befestigung',tracking=True);
lcd_montage_sonstige = fields.Char('Sonstige Montageart',tracking=True)
hw_anzeige = fields.Many2one('dss.geraetetypen',domain="[('geraetetyp','=','ANZ')]",tracking=True)
hw_steuerung = fields.Many2one('dss.geraetetypen',domain="['&',('geraetetyp','=','STE'),('grundsystem_kennung','=','LED')]",tracking=True)
hw_player = fields.Many2one('dss.geraetetypen',domain="[('geraetetyp','=','PLY')]",tracking=True)
hw_umwelt = fields.Many2one('dss.geraetetypen',domain="['|',('geraetetyp','=','SYS'),('geraetetyp','=','DIV')]",tracking=True)
zusatz_integrationen = fields.Many2one('dss.geraetetypen',tracking=True)
zusatz_zubehoer = fields.Char('Sonstiges Zubehör',tracking=True)
tuya_Geraete_uid = fields.Char('Tuya Geräte UID',tracking=True)
tuya_Geraete_id = fields.Char('Tuya Geräte ID', tracking=True)
tuya_can_switch = fields.Boolean('Tuya mit Schalter',tracking=True)
tuya_has_powervalue = fields.Boolean('Tuya mit Stromzähler',tracking=True)
tuya_last_totalpower = fields.Char('Stromzähler Gesamt',tracking=True,readonly=True)
tuya_last_lastpower = fields.Char('Stromzähler Aktuell',tracking=True,readonly=True)
tuya_last_switchstate = fields.Char('Schalter Aktuell ',tracking=True,readonly=True)
@api.model
def _default_uuid(self):
return str(uuid.uuid4())
@api.depends('grundsystem')
def _compute_grundsystem_kennung(self):
for syst in self:
if syst.grundsystem:
syst.grundsystem_kennung = syst.grundsystem.kennung
def get_value_from_tuyaresult(self,dataset,valuename):
result=''
_logger.info('Resultanfrage:' + str(dataset)+' Feld : '+str(valuename))
for singlepart in dataset:
if singlepart:
if (singlepart['code'] == valuename):
result = singlepart['value']
break
return result
def pyaction_tuya_readout(self):
_logger.info('Tuya Schaltanfrage : Endpoint - ' + str(dssSettings._get_settingvalue(self,'tuya_endpoint')) + ' AccessID ' + str(dssSettings._get_settingvalue(self,'tuya_access_id')) + ' AccessKEY ' + str(dssSettings._get_settingvalue(self,'tuya_access_key')))
openapi = TuyaOpenAPI(dssSettings._get_settingvalue(self,'tuya_endpoint'),dssSettings._get_settingvalue(self,'tuya_access_id'),dssSettings._get_settingvalue(self,'tuya_access_key'))
openapi.connect()
switchcode = eval('True')
commands = {'commands':[{'code':'switch','value': switchcode}]}
# result = openapi.post('/v1.0/iot-03/devices/{}/commands'.format(self.tuya_Geraete_id),commands)
result = openapi.get('/v1.0/iot-03/devices/{}/status'.format(self.tuya_Geraete_id))
_logger.info('Erfolg ? :' + str(result['success']))
success = result['success']
if success:
_logger.info('Erfolgreiche Anfrage :' + str(result['result']))
if self.tuya_has_powervalue:
self.tuya_last_totalpower = self.get_value_from_tuyaresult(result['result'],'forward_energy_total')
self.tuya_last_lastpower = self.get_value_from_tuyaresult(result['result'],'phase_a')
if self.tuya_can_switch:
self.tuya_last_switchstate = self.get_value_from_tuyaresult(result['result'],'switch')
else:
_logger.info('Fehlerhafte Anfrage :' + str(result['msg']))
def pyaction_tuya_switch(self):
_logger.info('Tuya Schaltanfrage : Endpoint - ' + str(
dssSettings._get_settingvalue(self, 'tuya_endpoint')) + ' AccessID ' + str(
dssSettings._get_settingvalue(self, 'tuya_access_id')) + ' AccessKEY ' + str(
dssSettings._get_settingvalue(self, 'tuya_access_key')))
openapi = TuyaOpenAPI(dssSettings._get_settingvalue(self, 'tuya_endpoint'),
dssSettings._get_settingvalue(self, 'tuya_access_id'),
dssSettings._get_settingvalue(self, 'tuya_access_key'))
openapi.connect()
commands = {'commands': [{'code': 'switch', 'value': not self.tuya_last_switchstate}]}
# result = openapi.post('/v1.0/iot-03/devices/{}/commands'.format(self.tuya_Geraete_id),commands)
result = openapi.post('/v1.0/iot-03/devices/{}/commands'.format(self.tuya_Geraete_id),commands)
_logger.info('Erfolg ? :' + str(result['success']))
success = result['success']
if success:
_logger.info('Erfolgreiche Anfrage :' + str(result['result']))
self.pyaction_tuya_readout()
else:
_logger.info('Fehlerhafte Anfrage :' + str(result['msg']))