Ich würde das gerne komplett in Redmatic übernehmen.
Das Auslesen des XML-Files habe ich hinbekommen.
Ich habe aber keine wirkliche Ahnung, wie ich das TCL-Script in Java umsetze.<xml><data>AA5555AA056B11110F2201030086021002120133020301CF00E400230046012B006B017501C701C40964003102000000000000000000003700000000000000CC000000646464000000000000640000CF12C32400007608190E01010103040000000202020000CD30000075140C04159B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</data>
</xml>
Code: Alles auswählen
load tclrega.so
# tcl-Script für Homematic CCU2
# Auslesen der Daten der Solvis-Heizung
# Autor: Wolfgang Roller
# Stand: 14.04.2015
# Zusammenfassung der todos:
# 1) Im tcl-Skript (in der url) Solvisadresse ip-Adresse eintragen
# 2) Die Url aus dem Skript erst im Browser testen, ob die korrekte Antwort geliefert wird
# http://solvisuser:password@ip_der_solvisremote/sc2_val.xml)
# Über die Seite ../sc2_val.xml werden die aktuellen Daten der Solvisheizung geliefert.
# 3) Alle Variablen von Hand in der homematic definieren
# 4) Im Addons-Verzeichnis ein Verzeichnis anlegen; hier: "solvis"
# 5) Skript als .tcl in oben angelegtes Verzeichnis kopieren (per FTP-Client z.B. FileZilla)
# 6) Periodischen Aufruf des Skripts (anhand Trigger) in der gewohnten Art anlegen.
# => Ein Programm welches einen Temperatur-Sensor abfragt und eine Systemvariable ansteuert. So erhälst du alle 120-180 Sekunden ein Intervall.
# Programm Inhalt:
# Wenn:
# Gerät - Temperatursensor - Wertebereich größer -20°C - auslösen auf Aktualisierung
# Dann:
# Systemvariable - Trigger - Wert: Trigger
# Statt deines Zeitmoduls nimmst du dann die Systemvariable "Trigger" und wählst dort "auslösen auf Aktualisierung".
# Empfehlung von ELV:
# kurze zyklische Auslöse-Intervalle sollten nach Möglichkeit vermieden werden.
# Wir raten ebenfalls zur Antriggerung über die Aktualisierung von Temperatursensoren oder Helligkeitssensoren.
# Somit entlasten Sie die Zentrale und erreichen ein zyklischen Auslösen der Programme und Scripte.
proc hexinzahl {x} {
# procedure wandelt einstellige Hexadezimalzahl in Dezimalzahl um
switch $x {
F {set x 15}
E {set x 14}
D {set x 13}
C {set x 12}
B {set x 11}
A {set x 10}
default {set x $x}
}
return $x
}
proc wertergebnis {y} {
# procedur liefert den Dezimalwert der eingelieferten zweizeichigen Hexadezimalzahl zurück.
# hierbei werden die erten beiden Hex-Ziffernb mit den letzten beiden vertauscht.
# procedur ruft zur Übersetzung einzahliger Hexadezimalzahlen die procedure hexinzahl () auf
set ergebnis [expr (([hexinzahl [string index $y 2]] * 4096) + ([hexinzahl [string index $y 3]] * 256) + ([hexinzahl [string index $y 0]] * 16) + ([hexinzahl [string index $y 1]]))]
return $ergebnis
}
proc ausein {x} {
# procedur liefert den Dezimalwert der eingelieferten zweizeichigen Hexadezimalzahl zurück
# procedur ruft zur Übersetzung einzahliger Hexadezimalzahlen die procedure hexinzahl () auf
set ergebnis [expr ((([hexinzahl [string index $x 0]] * 16) + [hexinzahl [string index $x 1]]) / 20)]
return $ergebnis
}
# Variablen:
#
# Header: Pos 11 - 22
# Uhrzeit: Pos 23 - 28
# Anlagentyp: Pos 29 - 32 AtoH
# Systemnummer: Pos 33 - 36 AtoH
# S1v Solvis-Warmwasserpuffer Pos 37 - 40 AtoH value/10 [°C]
# S2v Solvis-Warmwassertemp Pos 41 - 44 AtoH value/10 [°C]
# S3v Solvis-Speicherreferenz Pos 45 - 48 AtoH value/10 [°C]
# S4v Solvis-Heizungspuffer_oben Pos 49 - 52 AtoH value/10 [°C]
# S5v Solar-Vorlauf Pos 53 - 56
# S6v Solar-Rücklauf Pos 57 - 60
# S7v Solar-Solardruck Pos 61 - 64
# S8v Solar-Kollektortemp Pos 65 - 68 AtoH value/10 [°C]
# S9v Solvis-Heizungspuffer_unten Pos 69 - 72 AtoH value/10 [°C]
# S10v Solvis-Außentemp Pos 73 - 76 AtoH value/10 [°C]
# S11v Solvis-Zirkulationstemp Pos 77 - 80 AtoH value/10 [°C]
# S12v Solvis-Heizungs-Vorlauftemp Pos 81 - 84 AtoH value/10 [°C]
# S13v Solvis-Heizungs-Vorlauftemp_HK2 Pos 85 - 88 AtoH value/10 [°C]
# S14v unbelegt Pos 89 - 92
# S15v unbelegt Pos 93 - 96
# S16v Solvis-Heizungs-Vorlauftemp_HK3 Pos 97 - 100 AtoH value/10 [°C]
# S18v Durchfluss Pos 101 - 104 AtoH [l/h]
# S17v Solar-Durchfluss Pos 105 - 108 AtoH value/10 [l/h]
# AnalogIn1 Pos 109 - 112
# AnalogIn2 Pos 113 - 116
# AnalogIn3 Pos 117 - 120
# AnalogOut1 Pos 121 - 124
# AnalogOut2 Pos 125 - 128
# AnalogOut3 Pos 129 - 132
# AnalogOut4 Pos 133 - 136
# RF1 Raumfühler1 Pos 137 - 140 AtoH value/10 [°C]
# (RF2 Raumfühler2 Pos 141 - 144 AtoH value/10 [°C])
# (RF3 Raumfühler3 Pos 145 - 148 AtoH value/10 [°C])
# A1v Solar-Zirkulationspumpe Pos 141 - 142 0=AUS; 1=EIN
# A2v Solvis- Pos 143 - 144 0=AUS; 1=EIN
# A3v Solvis-HK1-Pumpe Pos 145 - 146 0=AUS; 1=EIN
# A4v Solvis-HK2-Pumpe Pos 147 - 148 0=AUS; 1=EIN
# A5v Solvis-HK3-Pumpe Pos 149 - 150 0=AUS; 1=EIN
# A6v Solvis- Pos 151 - 152 0=AUS; 1=EIN
# A7v unbelegt Pos 153 - 154
# A8v Solvis-HK1Misch_auf Pos 155 - 156 0=AUS; 1=EIN
# A9v Solvis-HK1Misch_zu Pos 157 - 158 0=AUS; 1=EIN
# A10v Solvis-HK2Misch_auf Pos 159 - 160 0=AUS; 1=EIN
# A11v Solvis-HK2Misch_zu Pos 161 - 162 0=AUS; 1=EIN
# A12v Solvis-Brenner Pos 163 - 164 0=AUS; 1=EIN
# A13v unbelegt Pos 165 - 166
# A14v Solvis-Entstörung Pos 167 - 168 0=AUS; <>0=EIN
# Werte überspringen Pos 169 - 184
# SEv Solarertrag Pos 185 - 189 AtoH [kWh]
# Werte überspringen Pos 190 - 219
# SLv Solarleistung Pos 220 - 223 AtoH value/10 [kW]
# *** HIER die URL von Solvis-Remote eintragen
set url http://xxxx:xxx@192.168.xxx.xx/sc2_val.xml
exec /usr/bin/wget -q -O /usr/local/addons/solvis/solvisaktuell.xml $url
# Öffnen der Datei und Zuordnung zur Variablemn $input
set f [open "/usr/local/addons/solvis/solvisaktuell.xml"]
set input [read $f]
close $f
# Verarbeitung
set S1v [expr ([wertergebnis [string range $input 37 40]] + 0.1) /10 - 0.01]
#S1v Solvis-Warmwasserpuffer
set S2v [expr ([wertergebnis [string range $input 41 44]] + 0.1) /10 - 0.01]
#S2v Solvis-Warmwassertemp
set S3v [expr ([wertergebnis [string range $input 45 48]] + 0.1) /10 - 0.01]
#S3v Solvis-Speicherreferenz
set S4v [expr ([wertergebnis [string range $input 49 52]] + 0.1) /10 - 0.01]
#S4v Solvis-Heizungspuffer_oben
set S5v [expr ([wertergebnis [string range $input 53 56]] + 0.1) /10 - 0.01]
#S5v Solar-Vorlauf2
set S6v [expr ([wertergebnis [string range $input 57 60]] + 0.1) /10 - 0.01]
#S6v Solar-Rücklauf
set S7v [expr ([wertergebnis [string range $input 61 64]] + 0.1) /10 - 0.01]
#S7v Solar-Vorlauf1
set S8v [expr ([wertergebnis [string range $input 65 68]] + 0.1) /10 - 0.01]
#S8v Solar-Kollektortemp
set S9v [expr ([wertergebnis [string range $input 69 72]] + 0.1) /10 - 0.01]
#S9v Solvis-Heizungspuffer_unten
set S10v [expr ([wertergebnis [string range $input 73 76]] + 0.1) /10 - 0.01]
#S10v Solvis-Außentemp
set S11v [expr ([wertergebnis [string range $input 77 80]] + 0.1) /10 - 0.01]
#S11v Solvis-Zirkulationstemp
set S12v [expr ([wertergebnis [string range $input 81 84]] + 0.1) /10 - 0.01]
#S12v Solvis-Heizungs-Vorlauftemp_HK1
set S13v [expr ([wertergebnis [string range $input 85 88]] + 0.1) /10 - 0.01]
#S13v Solvis-Heizungs-Vorlauftemp_HK2
#set S14v [expr ([wertergebnis [string range $input 89 92]] + 0.1) /10 - 0.01]
#unbenutzt
set S15v [expr ([wertergebnis [string range $input 93 96]] + 0.1) /10 - 0.01]
#Solvis-Kaltwassertemperatur: $S15v
set S16v [expr ([wertergebnis [string range $input 97 100]] + 0.1) /10 - 0.01]
#S16v Solvis-Heizungs-Vorlauftemp_HK3
set S17v [wertergebnis [string range $input 105 108]]
#S17v Solar-Durchfluss
set S18v [wertergebnis [string range $input 101 104]]
#S18v Solvis-Warmwasser_Durchfluss
set AI1 [wertergebnis [string range $input 109 112]]
#puts "AI1: $AI1 - ([string range $input 109 112])"
set AI2 [wertergebnis [string range $input 113 116]]
#puts "AI2: $AI2 - ([string range $input 113 116])"
set AI3 [wertergebnis [string range $input 117 120]]
#puts "AI3: $AI3 - ([string range $input 117 120])"
set AO1 [wertergebnis [string range $input 121 124]]
#AO1 Solvis-Brenner
set AO2 [wertergebnis [string range $input 125 128]]
#AO2 Solvis-Warmwasserpumpe
set AO3 [wertergebnis [string range $input 129 132]]
#puts "AO3 : $AO3 - ([string range $input 129 132])"
set AO4 [wertergebnis [string range $input 133 136]]
#puts "AO4: $AO4 - ([string range $input 133 136])"
set RF1 [expr ([wertergebnis [string range $input 137 140]] + 0.1) /10 - 0.01]
#puts "RF1 Raumfühler1: $RF1 - ([string range $input 137 140])"
#set RF2 [expr ([wertergebnis [string range $input 141 144]] + 0.1) /10 - 0.01]
#RF2 Raumfühler2
#set RF3 [expr ([wertergebnis [string range $input 145 148]] + 0.1) /10 - 0.01]
#RF3 Raumfühler3
set A1v [ausein [string range $input 141 142]]
#A1v Solvis-Zirkulationspumpe
set A2v [ausein [string range $input 143 144]]
#A2v unbenutzt
set A3v [ausein [string range $input 145 146]]
#A3v Solvis-HK1-Pumpe
set A4v [ausein [string range $input 147 148]]
#A4v Solvis-HK2-Pumpe
set A5v [ausein [string range $input 149 150]]
#A5v Solvis-HK3-Pumpe
set A6v [ausein [string range $input 151 152]]
#A6v HK3_Mischer_auf
set A7v [ausein [string range $input 153 154]]
#A7v HK3_Mischer_zu
set A8v [ausein [string range $input 155 156]]
#A8v HK1_Mischer_auf
set A9v [ausein [string range $input 157 158]]
#A9v HK1_Mischer_zu
set A10v [ausein [string range $input 159 160]]
#A10v HK2_Mischer_auf
set A11v [ausein [string range $input 161 162]]
#A11v HK2_Mischer_zu
set A12v [ausein [string range $input 163 164]]
#A12v Solvis-Brenner
set A13v [ausein [string range $input 165 166]]
#puts "A13v: $A13v - ([string range $input 165 166])"
#set A14v [ausein [string range $input 167 168]]
#A14v Solvis-Entstörung - nicht genutzt
set SEv [wertergebnis [string range $input 185 188]]
#puts "SEv Solarertrag: $SEv - ([string range $input 185 188])"
set SLv [expr ([wertergebnis [string range $input 220 223]] + 0.1) /10 - 0.01]
#SLv Solarthermie-Leistung
set SLv1 [expr ([wertergebnis [string range $input 224 227]] + 0.1) /10 - 0.01]
set SLv2 [expr ([wertergebnis [string range $input 228 231]] + 0.1) /10 - 0.01]
set SLv3 [expr ([wertergebnis [string range $input 232 235]] + 0.1) /10 - 0.01]
# Umlaute korrigieren
# set ReGaHss variables
set rega_cmd ""
append rega_cmd "dom.GetObject('Solvis-Warmwasserpuffer').State($S1v);"
append rega_cmd "dom.GetObject('Solvis-Warmwassertemp').State($S2v);"
append rega_cmd "dom.GetObject('Solvis-Speicherreferenz').State($S3v);"
append rega_cmd "dom.GetObject('Solvis-Heizungspuffer_oben').State($S4v);"
append rega_cmd "dom.GetObject('Solar-Vorlauf2').State($S5v);"
append rega_cmd "dom.GetObject('Solar-Ruecklauf').State($S6v);"
append rega_cmd "dom.GetObject('Solar-Vorlauf1').State($S7v);"
append rega_cmd "dom.GetObject('Solar-Kollektortemp').State($S8v);"
append rega_cmd "dom.GetObject('Solvis-Heizungspuffer_unten').State($S9v);"
append rega_cmd "if ($S10v >100.0) {dom.GetObject('Solvis-Aussentemp').State($S10v - 6553.5);} else {dom.GetObject('Solvis-Aussentemp').State($S10v);}"
#append rega_cmd "dom.GetObject('Solvis-Aussentemp').State($S10v);"
append rega_cmd "dom.GetObject('Solvis-Zirkulationstemp').State($S11v);"
append rega_cmd "dom.GetObject('Solvis-Heizungs-Vorlauftemp_HK1').State($S12v);"
append rega_cmd "dom.GetObject('Solvis-Heizungs-Vorlauftemp_HK2').State($S13v);"
#append rega_cmd "dom.GetObject('Solvis-Entstoerung').State($A14v);"
append rega_cmd "dom.GetObject('Solvis-Kaltwassertemperatur').State($S15v);"
append rega_cmd "dom.GetObject('Solvis-Heizungs-Vorlauftemp_HK3').State($S16v);"
append rega_cmd "dom.GetObject('Solar-Durchfluss').State($S17v);"
append rega_cmd "dom.GetObject('Solvis-Warmwasser_Durchfluss').State($S18v);"
append rega_cmd "dom.GetObject('Solvis-RF3').State($RF1);"
append rega_cmd "dom.GetObject('Solar-Ertrag').State($SEv);"
append rega_cmd "dom.GetObject('Solarthermie-Leistung').State($AI2);"
append rega_cmd "dom.GetObject('Solvis-Zirkulationspumpe').State($A1v);"
append rega_cmd "dom.GetObject('Solvis-HK1-Pumpe').State($A3v);"
append rega_cmd "dom.GetObject('Solvis-HK2-Pumpe').State($A4v);"
append rega_cmd "dom.GetObject('Solvis-HK3-Pumpe').State($A5v);"
append rega_cmd "dom.GetObject('Solvis-HK3_Mischer_auf').State($A6v);"
append rega_cmd "dom.GetObject('Solvis-HK3_Mischer_zu').State($A7v);"
append rega_cmd "dom.GetObject('Solvis-HK1_Mischer_auf').State($A8v);"
append rega_cmd "dom.GetObject('Solvis-HK1_Mischer_zu').State($A9v);"
append rega_cmd "dom.GetObject('Solvis-HK2_Mischer_auf').State($A10v);"
append rega_cmd "dom.GetObject('Solvis-HK2_Mischer_zu').State($A11v);"
append rega_cmd "dom.GetObject('Solvis-Brenner').State($AO1);"
append rega_cmd "dom.GetObject('Solvis-Warmwasserpumpe').State($AO2);"
#Korrektur Variable Außentemperatur bei Werten unter null
#var temp = dom.GetObject('Solvis-Aussentemp');
#if (temp>=3276.8) {temp=temp - 6553.5;};
#dom.GetObject('Solvis-Aussentemp').State(temp);
rega_script $rega_cmd
Danke vorab für jeden Tipp.
K-H