als Neuling hier im Forum eine kurze Intro zu mir und schon mal vorab vielen Dank für Eure Hilfe.
Ich nutze OH2 im Moment noch eher zum monitor'en meiner Dinge. Die große Automation kommt dann erst in ca. 1,5 Jahren, wenn wir im Haus sind. Jetzt kann ich mich erst mal mit den ganzen "Eigenheiten" von OH vertraut machen. Ich bin also eher ein Neuling auf dem Gebiet. Mir liegt auch eher die Hardware als die Software. In meinem Fall komme ich von C und verstehe mich eher auf Mikrcontroller-Programmierung und ich vermute, genau da mein Problem: Die Syntax... Zu meinem Problem, bzw was soll passieren?
Ich habe einen Media-Server laufen der Wassergekühlt im Wohnzimmer steht. Verbaut ist eine Aquacomputer Steuerung, die ich mit einem Shell-Script (funktionstüchtig) auslesen kann. Dazu übergebe ich an das Script Parameter und bekomme als return einen String, zb: "aquascript.sh sens_flow" liefert mir als Ergebnis "35,6l/h" usw.
Ziel soll sein, dass bei einem Versagen der Pumpe der Server automatisch herunter fährt. Für's Erste aber reicht mir eine Anzeige der zurückgegebenen Werte. Ich soll/möchte ja auch etwas lernen hier


Meine bisher am "besten" funktionierende Konfig:
aquaero.things
Code: Alles auswählen
Thing exec:command:Horst_aquaero [command="/home/everybody/aquacomputer/aerotools/aquascript.sh %2$s", interval=0, autorun=true]
Code: Alles auswählen
String Horst_fan_Radiator
String Horst_fan_Raidctrl
Switch Test
Switch Horst_aqua_state {channel="exec:command:Horst_aquaero:run"}
String Horst_aqua_Args {channel="exec:command:Horst_aquaero:input"}
String Horst_aqua_out {channel="exec:command:Horst_aquaero:output"}
Code: Alles auswählen
rule "refresh aquaero"
when
//every 10 seconds:
//Time cron "0/10 0 0 ? * * * "
//Test switch to trigger rule manually
Item Test changed from OFF to ON
then
//first paramter
Horst_aqua_Args.sendCommand("fan_radi")
while(Horst_aqua_state.state != OFF){
Thread::sleep(500)
}
Horst_fan_Radiator.postUpdate(Horst_aqua_out.state) as String
//next parameter
Horst_aqua_Args.sendCommand("fan_raid")
while(Horst_aqua_state.state != OFF){
Thread::sleep(500)
}
Horst_fan_Raidctrl.postUpdate(Horst_aqua_out.state) as String
//reset item Test:
while(Test.state != OFF){
Thread::sleep(500)
Test.sendCommand(OFF)
}
end
Code: Alles auswählen
Text label="Horst" icon=""{
Switch item=Test
Text item=Horst_aqua_out
Switch item=Horst_aqua_state
Text item=Horst_fan_Radiator //label="Lüfter Radiator"
Text item=Horst_fan_Raidctrl
}
Ich habe ein Item Test-Switch generiert um manuell triggern zu können. Später soll das ganze alle x Sekunden getriggert werden. Das geht soweit und ich kann mir im UI schön die Änderung der Werte anzeigen lassen. Allerdings wird das Script nur "gezündet" wenn sich der Wert Horst_aqua_out ändert. Von daher mein Versuch gleich zu Anfang zwei Paramter nacheinander zu übergeben. Da sehe ich auch die korrekte Anzeige im out-channel "Horst_aqua_out"
Wo scheitert es?
Ich möchte nun die Ausgabe Werte des Scripts auf verschiedene String-Items legen und mir diese entweder in der UI ansehen oder eben in einer anderen Rule (zwecks herunter fahren) weiter verarbeiten.
Was ist "so falsch" an dem Ausdruck
Code: Alles auswählen
Horst_fan_Raidctrl.postUpdate(Horst_aqua_out.state) as String
Ich hoffe sehr Ihr könnt hier etwas Licht ins Dunkel bringen und wünsche Euch ein schönes Wochenende.