Logic Machine Forum
Script for changing and adapting the data type of objects - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: Script for changing and adapting the data type of objects (/showthread.php?tid=3198)



Script for changing and adapting the data type of objects - epps - 27.02.2021

Hello LogicMachine Forum,

i have create a Script that changing and adapting the data types of all objects. Its a great time saver for me, so i want to share it with you. I hope you enjoy it.
The only Problem is, i write this script in german, may you have to change it a little bit.

Please comment if it works for you or if you have suggestions for improvement




Code:
--[[Script zum automatischen Anpassen der Gruppenadressen -- Version 4.3
  Der Script wird als zyklischer Script gestartet und deaktiviert sich nach einem Durchlauf selbst.


  Datentypen die Angepasst werden sollen
  Von: ]]
Datentyp1 = 1                 --bool
Datentyp2 = 3                 --no Control
Datentyp3 = 5                 --1Byte
Datentyp4 = 9                 --2Byte

--Nach:
Datentypneu1 = 1001         --schalten
Datentypneu2 = 3007         --dimmen
Datentypneu3 = 5001         --prozent
Datentypneu4 = 9             --2Byte Gleitkomma

ausnahme1 = 'szen'             --Ausnahmen für die Umwandlung (alles was im Namen szen enthält z.B. "Szenennebenstelle")
ausnahme2 = 'Szen'
ausnahme3 = 'art%s*seq'     --Ausnahmen für die Umwandlung (alles was im Namen art Seq enthält z.B. "Start Sequenz")
ausnahme4 = 'art%s*Seq'
ausnahme5 = 'etriebs%s*mod' --Ausnahmen für die Umwandlung (alles was im Namen art etriebs mod enthält z.B. "Heizung Betriebsmodus")
ausnahme6 = 'etriebs%s*Mod'
ausnahme7 = 'modus'            --Ausnahmen für die Umwandlung (alles was im Namen art etriebs modus enthält z.B. "Lüftung - Modus 1")
ausnahme8 = 'Modus'
ausnahme9 = '%s*mode'
ausnahme10 = '%s*Mode'
ausnahme11 = 'etrieb'         --Ausnahmen für die Umwandlung (alles was im Namen etrieb  enthält z.B. "Heizung Betriebvorwahl")

temp1 = 'temp'                 --Formatanpassung Temperatur (alles was im Namen temp enthält z.B. "Aussentemperatur" wird die Einheit "°C" angefuegt)
temp2 = 'Temp'                 --Formatanpassung Temperatur
wind1 = 'windgesch'             --Formatanpassung Windgeschwindigkeit (alles was im Namen windgesch enthält z.B. "Windgeschwindigkeit" wird die Einheit "m/s" angefuegt)
wind2 = 'Windgesch'         --Formatanpassung Windgeschwindigkeit
hell1 = 'helligke'             --Formatanpassung Helligkeit (alles was im Namen helligke enthält z.B. "Helligkeit Aussen" wird die Einheit "lux" angefuegt)
hell2 = 'Helligke'             --Formatanpassung Helligkeit


--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- Ab hier nichts mehr Verändern!
-- by Simon Epp
--++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

--##############################################################################################################
--Datenanpassung
--##############################################################################################################

angepassteobjekte = 0
durchlauf = 1

--++++++++++++++++++++++++++++++
--Suchen der Objekte
--++++++++++++++++++++++++++++++

tabelle1 = grp.dpt(Datentyp1,true)
tabelle2 = grp.dpt(Datentyp2,true)
tabelle3 = grp.dpt(Datentyp3,true)
tabelle4 = grp.dpt(Datentyp4,true)

anzahl1 = table.maxn(tabelle1)
anzahl2 = table.maxn(tabelle2)
anzahl3 = table.maxn(tabelle3)
anzahl4 = table.maxn(tabelle4)

repeat --Wiederholen bis alle Datentypen angepasst wurden.
 
--+++++++++++++++++++++++++++++++++++++++++++++++++++++++
--Auswahl der Datentypen die angepasst werden sollen
--+++++++++++++++++++++++++++++++++++++++++++++++++++++++

  if (anzahl1 > 0) then
    tabelleadressen = tabelle1
    datentypneu = Datentypneu1
    anzahl = anzahl1
    anzahl1 = 0
    goto Datenformate
  else
    if (anzahl2 > 0) then
      tabelleadressen = tabelle2
      datentypneu = Datentypneu2
      anzahl = anzahl2
      anzahl2 = 0
      goto Datenformate
    else
      if (anzahl3 > 0) then
        tabelleadressen = tabelle3
        datentypneu = Datentypneu3
        anzahl = anzahl3
        anzahl3 = 0
        goto Datenformate
      else
        if (anzahl4 > 0) then
          tabelleadressen = tabelle4
          datentypneu = Datentypneu4
          anzahl = anzahl4
          anzahl4 = 0
          goto Datenformate
        else
          storage.set('Automatisch_angepasste_Objekte',angepassteobjekte)
          durchlauf = 0
          goto Endedatenanpassung
        end
      end
    end
  end
 
  --+++++++++++++++++++++++++++++++++++++++++++++
  --Datenformate
  --+++++++++++++++++++++++++++++++++++++++++++++
  ::Datenformate::
 
   repeat
    alteadresse = tabelleadressen[anzahl].address --Holen der bestehenden Gruppenadressen.
   
  formatstandart = {
    datatype = datentypneu,
    address = alteadresse,
      comment = 'Datentyp automatisch angepasst'
  }

  formattemperatur = {
    datatype = 9001,
    address = alteadresse,
    units = ' °C',
    comment = 'Datentyp automatisch angepasst, Einheit automatisch ergaenzt.'
  }

  formathelligkeit = {
    datatype = datentypneu,
    address = alteadresse,
    units = ' lux',
    comment = 'Datentyp automatisch angepasst, Einheit automatisch ergaenzt.'
  }

  formatwindgeschwindigkeit = {
    datatype = datentypneu,
    address = alteadresse,
    units = ' m/s',
    comment = 'Datentyp automatisch angepasst, Einheit automatisch ergaenzt.'
  }

    --++++++++++++++++++++++++++++++++++++++++++
    --Überprüfen der Ausnahmen
    --++++++++++++++++++++++++++++++++++++++++++
    a1 = string.find(tabelleadressen[anzahl].name,ausnahme1)
    a2 = string.find(tabelleadressen[anzahl].name,ausnahme2)
    a3 = string.find(tabelleadressen[anzahl].name,ausnahme3)
    a4 = string.find(tabelleadressen[anzahl].name,ausnahme4)
    a5 = string.find(tabelleadressen[anzahl].name,ausnahme5)
    a6 = string.find(tabelleadressen[anzahl].name,ausnahme6)
    a7 = string.find(tabelleadressen[anzahl].name,ausnahme7)
    a8 = string.find(tabelleadressen[anzahl].name,ausnahme8)
    a9 = string.find(tabelleadressen[anzahl].name,ausnahme9)
    a10 = string.find(tabelleadressen[anzahl].name,ausnahme10)
    a11 = string.find(tabelleadressen[anzahl].name,ausnahme11)
 
    if ( a1 == nil and a2 == nil and a3 == nil and a4 == nil and a5 == nil and a6 == nil and a7 == nil and a8 == nil and a9 == nil and a10 == nil and a11 == nil )then
      anpassung = true
    else
      anpassung = false
    end
   
    --++++++++++++++++++++++++++++++++++++++++++
    --Überprüfen der Formate
    --++++++++++++++++++++++++++++++++++++++++++
    ft1 = string.find(tabelleadressen[anzahl].name,temp1)
    ft2 = string.find(tabelleadressen[anzahl].name,temp2)
    fh1 = string.find(tabelleadressen[anzahl].name,hell1)
    fh2 = string.find(tabelleadressen[anzahl].name,hell2)
    fw1 = string.find(tabelleadressen[anzahl].name,wind1)
    fw2 = string.find(tabelleadressen[anzahl].name,wind2)
   
    if ((ft1 ~= nil or ft2 ~= nil) and datentypneu == Datentypneu4) then
      format = formattemperatur
    else
      if ((fh1 ~= nil or fh2 ~= nil) and datentypneu == Datentypneu4) then
        format = formathelligkeit
      else
        if ((fw1 ~= nil or fw2 ~= nil) and datentypneu == Datentypneu4) then
          format = formatwindgeschwindigkeit
        else
          format = formatstandart
        end
      end
    end
   
    --++++++++++++++++++++++++++++++++++++++++++++
    --Anpassung
    --++++++++++++++++++++++++++++++++++++++++++++
    if anpassung then
     
      grp.create(format)--Anpassung der Datentypen nach dem gewählten Format.
      anzahl = anzahl -1
      angepassteobjekte = angepassteobjekte +1
    else
      anzahl = anzahl -1
      angepassteobjekte = angepassteobjekte +1
    end
     
  until (anzahl == 0)

 
 
  ::Endedatenanpassung::
 
until (durchlauf == 0)

--######################################################################################################
--Datenanpassung Ende
--######################################################################################################
script.disable(_SCRIPTNAME)