ich hab das bisher über verknüpfungen in der Schnellstart-Leiste realisiert gehabt (Für jede Aktion ein separates Symbol) aber so ist das natürlich noch schöner.
Ich würde auch gerne Dimmer steuern, kenne mich mit AutoIt aber nicht aus. Bei meinem jetzigen versuch das umzuschreiben hapert es an der Abfrage und dem zurückgelieferten Level, worauf die fehlermeldung erscheint. Ist für Dich wahrscheinlich ne Kleinigkeit, oder?
Code: Alles auswählen
; =================== Mit altem Compiler compilieren, damit W98-kompatibel! =================================
; ===========================================================================================================
#NoTrayIcon
#include <Inet.au3>
#include <String.au3>
#include <Constants.au3>
$Prg = "TrayMatic 1.1"
$Meldung = ""
$Fehler = ""
If Not @Compiled Then
$INIDatei = "Dimmer.ini"
Else
If $CMDLine[0] <> 1 Then
$Meldung = "Richtiger Programm-Aufruf:" & @CRLF & @CRLF & "TrayMatic IniDatei.ini (ev. inkl. Pfad)"
$Meldung = $Meldung & @CRLF & @CRLF & "Beispiel: " & @CRLF & @CRLF & "TrayMatic Drucker.ini"
ExitFehler()
EndIf
$INIDatei = $CMDLine[1]
EndIf
If Not FileExists($INIDatei) Then
If FileExists($INIDatei & ".ini") Then
$INIDatei = $INIDatei & ".ini"
Else
$Meldung = 'INI-Datei "' & $INIDatei & '" nicht gefunden!'
ExitFehler()
EndIf
EndIf
; -------------------------------------- INI-Datei einlesen
$IPderCCU = IniRead($INIDatei,"Einstellungen","IPderCCU" ,"")
$ModulTyp = IniRead($INIDatei,"Einstellungen","ModulTyp" ,"LogVar")
$SerNr = IniRead($INIDatei,"Einstellungen","SerNr" ,"Anwesenheit")
$AktIntervall = IniRead($INIDatei,"Einstellungen","AktIntervall" ,10)
$SchaltenErlaubt = IniRead($INIDatei,"Einstellungen","SchaltenErlaubt" ,0)
$IconStart = IniRead($INIDatei,"Einstellungen","IconStart" ,"Stern.ico")
$IconTrue = IniRead($INIDatei,"Einstellungen","IconTrue" ,"Rot.ico")
$IconFalse = IniRead($INIDatei,"Einstellungen","IconFalse" ,"Gruen.ico")
$TipStart = IniRead($INIDatei,"Einstellungen","TipStart" ,"Keine Verbindung")
$TipTrue = IniRead($INIDatei,"Einstellungen","TipTrue" ,"")
$TipFalse = IniRead($INIDatei,"Einstellungen","TipFalse" ,"")
$MenuKurz = IniRead($INIDatei,"Einstellungen","MenuKurz" ,"")
$MenuLang = IniRead($INIDatei,"Einstellungen","MenuLang" ,"")
; -------------------------------------- Fehlerprüfungen
; IP-Adresse
If $IPderCCU == "" Then
$Meldung = 'In der INI-Datei "' & $INIDatei & '" keine IPderCCU gefunden!'
ExitFehler()
EndIf
If Not PruefIP($IPderCCU) Then
$Meldung = $IPderCCU & " ist keine gültige IP-Adresse!"
ExitFehler()
EndIf
; ModulTyp
If $ModulTyp = "LogVar" Or $ModulTyp = "SchalterFunk" Or $ModulTyp = "DimmerFunk" Or $ModulTyp = "SchalterWired" Or $ModulTyp = "VirtFBfunk" Or $ModulTyp = "VirtFBwired" Then
; Weiter
Else
$Meldung = '"' & $ModulTyp & '" ist kein gültiger Modultyp!'
ExitFehler()
EndIf
; Serien-Nummer
If StringLeft($ModulTyp,6) = "VirtFB" And Not StringIsDigit($SerNr) Then
$Meldung = "Bei Fernbedienungen nur die Kanal-Nummer eintragen!" & @CRLF & @CRLF
$Meldung = $Meldung & '"' & $SerNr & '" ist nicht gültig!'
ExitFehler()
EndIf
; Prüfung Serien-Nummer auf "Q" und ":" weggelassen!
; Aktualisierungsintervall
If Not StringIsDigit($AktIntervall) Then
If $AktIntervall == "" Then
$Meldung = "Der Aktualisierungsintervall muss in Sekunden angegeben werden!" & @CRLF & @CRLF
$Meldung = $Meldung & 'Sie haben hinter dem "=" nichts eingetragen!'
Else
$Meldung = "Der Aktualisierungsintervall muss in Sekunden angegeben werden!" & @CRLF & @CRLF
$Meldung = $Meldung & '"' & $AktIntervall & '" ist nicht gültig!'
EndIf
ExitFehler()
EndIf
; Schalten erlaubt
If $SchaltenErlaubt <> "0" And $SchaltenErlaubt <> "1" Then
If $SchaltenErlaubt == "" Then
$Meldung = 'Bei "SchaltenErlaubt" muss 1 oder 2 eingetragen werden!' & @CRLF & @CRLF
$Meldung = $Meldung & 'Sie haben hinter dem "=" nichts eingetragen!' & @CRLF & @CRLF
$Meldung = $Meldung & 'Soll Schalten nicht erlaubt sein, können Sie auch die Zeile löschen.'
Else
$Meldung = 'Bei "SchaltenErlaubt" muss 1 oder 2 eingetragen werden!' & @CRLF & @CRLF
$Meldung = $Meldung & $SchaltenErlaubt & " ist nicht gültig!"
EndIf
ExitFehler()
EndIf
; Icons
If Not FileExists($IconStart) Then
If $IconStart == "" Then
$Meldung = 'Sie haben unter "IconStart" hinter dem "=" nichts eingetragen!'
Else
$Meldung = 'Datei "' & $IconStart & '" nicht gefunden!'
EndIf
ExitFehler()
EndIf
If Not FileExists($IconTrue) And StringLeft($ModulTyp,6) <> "VirtFB" Then
If $IconTrue == "" Then
$Meldung = 'Sie haben unter "IconTrue" hinter dem "=" nichts eingetragen!'
Else
$Meldung = 'Datei "' & $IconTrue & '" nicht gefunden!'
EndIf
ExitFehler()
EndIf
If Not FileExists($IconFalse) And StringLeft($ModulTyp,6) <> "VirtFB" Then
If $IconFalse == "" Then
$Meldung = 'Sie haben unter "IconFalse" hinter dem "=" nichts eingetragen!'
Else
$Meldung = 'Datei "' & $IconFalse & '" nicht gefunden!'
EndIf
ExitFehler()
EndIf
; -------------------------------------- Ergänzungen
; Serien-Nummer
If StringLeft($ModulTyp,6) = "VirtFB" Then
While StringLen($SerNr) > 1 And StringLeft($SerNr,1) = "0"
$SerNr = StringTrimLeft($SerNr,1)
WEnd
EndIf
If $ModulTyp = "VirtFBfunk" Then
; unbedingt Gross-/Kleinschreibung beachten!
$SerNr = "BidCos-RF.BidCoS-RF:" & $SerNr
EndIf
If $ModulTyp = "VirtFBwired" Then
; unbedingt Gross-/Kleinschreibung beachten!
$SerNr = "BidCos-Wired.BidCoS-Wir:" & $SerNr
EndIf
;***********************************************************************************************************************************************
; Aktualisierungs-Intervall
If StringLeft($ModulTyp,6) = "VirtFB" Then
$AktIntervall = 1000
Else
If $AktIntervall < 1 Then
$AktIntervall = 1
EndIf
EndIf
; Tool-Tipp
If $TipStart == "" Then
$TipStart = " "
EndIf
If $TipTrue == "" Then
$TipTrue = " "
EndIf
If $TipFalse == "" Then
$TipFalse = " "
EndIf
If StringLeft($ModulTyp,6) = "VirtFB" Then
$TipTrue = $TipStart
$TipFalse = $TipStart
EndIf
; Tray-Menu
If $MenuKurz == "" Then
$MenuKurz = "kurzer Tastendruck"
EndIf
If $MenuLang == "" Then
$MenuLang = "langer Tastendruck"
EndIf
; Anweisung
$AnweisungAnfang = 'http://' & $IPderCCU & ':8181/Text.exe?Antwort=dom.GetObject("'
If $ModulTyp = "SchalterFunk" Then
$AnweisungAnfang = $AnweisungAnfang & 'BidCos-RF.' & $SerNr
EndIf
If $ModulTyp = "DimmerFunk" Then
$AnweisungAnfang = $AnweisungAnfang & 'BidCos-RF.' & $SerNr
EndIf
If $ModulTyp = "SchalterWired" Then
$AnweisungAnfang = $AnweisungAnfang & 'BidCos-Wired.' & $SerNr
EndIf
If StringLeft($ModulTyp,8) = "Schalter" Then
$AnweisungAbfrage = $AnweisungAnfang & '.STATE").Value();'
$AnweisungEIN = $AnweisungAnfang & '.STATE").State(1);'
$AnweisungAUS = $AnweisungAnfang & '.STATE").State(0);'
$Status = "unbekannt"
EndIf
If StringLeft($ModulTyp,6) = "Dimmer" Then
$AnweisungAbfrage = $AnweisungAnfang & '.LEVEL").Value();'
$AnweisungEIN = $AnweisungAnfang & '.LEVEL").Level(1.0);'
$AnweisungAUS = $AnweisungAnfang & '.LEVEL").Level(0.0);'
$Status = "unbekannt"
EndIf
If $ModulTyp = "LogVar" Then
$AnweisungAnfang = $AnweisungAnfang & $SerNr
$AnweisungAbfrage = $AnweisungAnfang & '").Value();'
$AnweisungEIN = $AnweisungAnfang & '").State(1);'
$AnweisungAUS = $AnweisungAnfang & '").State(0);'
$Status = "unbekannt"
EndIf
If StringLeft($ModulTyp,6) = "VirtFB" Then
$AnweisungAnfang = $AnweisungAnfang & $SerNr
$AnweisungAbfrage = $AnweisungAnfang & '.PRESS_SHORT").Value();'
EndIf
; Icons
If StringLeft($ModulTyp,6) = "VirtFB" Then
$IconTrue = $IconStart
$IconFalse = $IconStart
EndIf
; -------------------------------------- Tray
Opt("TrayMenuMode",1)
Opt("TrayOnEventMode",1)
TraySetIcon($IconStart)
TraySetToolTip($TipStart)
If StringLeft($ModulTyp,8) = "Schalter" Or StringLeft($ModulTyp,6) = "Dimmer" Or $ModulTyp = "LogVar" Then
If $SchaltenErlaubt = 1 Then
TraySetClick(8)
TraySetOnEvent($TRAY_EVENT_PRIMARYDOWN,"Umschalten")
Else
TraySetClick(9)
EndIf
EndIf
If StringLeft($ModulTyp,6) = "VirtFB" Then
TraySetClick(9)
$KurzItem = TrayCreateItem($MenuKurz)
$LangItem = TrayCreateItem($MenuLang)
TrayItemSetOnEvent($KurzItem,"TasteKurz" )
TrayItemSetOnEvent($LangItem,"TasteLang" )
EndIf
$FehlerItem = ""
$EndeItem = TrayCreateItem("Programm beenden")
TrayItemSetOnEvent($EndeItem,"OnAutoItExit" )
; -------------------------------------- Haupt-Schleife
; ---------------------------------------------------------------------------------------------------------------------------------------------
While 1
$Ergebnis = ""
$Zustand = ""
$Zaehler = 0
Aktualisieren()
; Nicht "Sleep($AktIntervall), damit nach jeder Tray-Menu-Aktion ein Aktualisieren erfolgt!
While $Zaehler < $AktIntervall
$Zaehler = $Zaehler + 1
Sleep(1000)
WEnd
WEnd
; ---------------------------------------------------------------------------------------------------------------------------------------------
Func Aktualisieren()
If Abfrage() Then
If $FehlerItem <> "" Then
TrayItemDelete($FehlerItem)
$FehlerItem = ""
EndIf
If $Zustand = "true" Then
TraySetIcon($IconTrue)
TraySetToolTip($TipTrue)
Else
TraySetIcon($IconFalse)
TraySetToolTip($TipFalse)
EndIf
Else
If $FehlerItem = "" Then
$FehlerItem = TrayCreateItem("Fehler anzeigen")
TrayItemSetOnEvent(-1,"FehlerAnzeige")
TraySetIcon($IconStart)
TraySetToolTip("Fehler!")
EndIf
EndIf
EndFunc
; --------------------------------------
Func Abfrage()
$Ergebnis = _InetGetSource($AnweisungAbfrage)
If Auswerten() Then
Return 1
Else
; 2. Versuch
$Warten = Random(500,2000,1)
Sleep($Warten)
$Ergebnis = _InetGetSource($AnweisungAbfrage)
If Auswerten() Then
Return 1
Else
Return 0
EndIf
EndIf
EndFunc
; --------------------------------------
Func Auswerten()
If StringInStr($Ergebnis,"Antwort") = 0 Then
$Fehler = "Keine Antwort der CCU!"
Return 0
EndIf
$ZustandsArray = _StringBetween($Ergebnis,"<Antwort>","</Antwort>")
$Zustand = $ZustandsArray[0]
If $Zustand = "true" Or $Zustand = "false" Then
Return 1
Else
$Fehler = 'Antwort der CCU: "' & $Zustand & '"'
Return 0
EndIf
EndFunc
; --------------------------------------
Func FehlerAnzeige()
MsgBox(0,$Prg,$Fehler)
EndFunc
; --------------------------------------
Func Umschalten()
; Sicherheitshalber
If $SchaltenErlaubt = 0 Then Return
$ZustandAlt = $Zustand
If $Zustand = "true" Then
$Ergebnis = _InetGetSource($AnweisungAUS)
Else
$Ergebnis = _InetGetSource($AnweisungEIN)
EndIf
Sleep(300)
Aktualisieren()
If $Zustand = $ZustandAlt Then
; damit das nächste Aktualisieren etwas verzögert erfolgt!
$Warten = Random(500,1000,1)
Sleep($Warten)
EndIf
$Zaehler = $AktIntervall + 1
EndFunc
; --------------------------------------
Func TasteKurz()
$Anweisung = $AnweisungAnfang & '.PRESS_SHORT").State(true);'
$Ergebnis = _InetGetSource($Anweisung)
If Auswerten() Then
TrayTip("",'"kurz" gesendet',1,17)
Sleep(1500)
TrayTip("","",1,17)
Else
TrayTip("","Fehler!",2,18)
Sleep(2500)
TrayTip("","",1,18)
EndIf
$Ergebnis = ""
$Zaehler = $AktIntervall + 1
EndFunc
; --------------------------------------
Func TasteLang()
$Anweisung = $AnweisungAnfang & '.PRESS_LONG").State(true);'
$Ergebnis = _InetGetSource($Anweisung)
If Auswerten() Then
TrayTip("",'"lang" gesendet',1,17)
Sleep(1500)
TrayTip("","",1,17)
Else
TrayTip("","Fehler!",2,18)
Sleep(2500)
TrayTip("","",1,18)
EndIf
$Ergebnis = ""
$Zaehler = $AktIntervall + 1
EndFunc
; --------------------------------------
Func PruefIP($Parameter)
$IPArray = StringSplit($Parameter,'.')
If $IPArray[0] <> 4 Then
Return 0
EndIf
; Führende Nullen entfernen:
While StringLen($IPArray[1]) > 1 And StringLeft($IPArray[1],1) = "0"
$IPArray[1] = StringTrimLeft($IPArray[1],1)
WEnd
While StringLen($IPArray[2]) > 1 And StringLeft($IPArray[2],1) = "0"
$IPArray[2] = StringTrimLeft($IPArray[2],1)
WEnd
While StringLen($IPArray[3]) > 1 And StringLeft($IPArray[3],1) = "0"
$IPArray[3] = StringTrimLeft($IPArray[3],1)
WEnd
While StringLen($IPArray[4]) > 1 And StringLeft($IPArray[4],1) = "0"
$IPArray[4] = StringTrimLeft($IPArray[4],1)
WEnd
If StringIsDigit($IPArray[1]) And StringIsDigit($IPArray[2]) And StringIsDigit($IPArray[3]) And StringIsDigit($IPArray[4]) Then
; Weiter
Else
Return 0
EndIf
If $IPArray[1] > 255 Or $IPArray[2] > 255 Or $IPArray[3] > 255 Or $IPArray[4] > 255 Then
Return 0
EndIf
; Alles OK!
$IPderCCU = $IPArray[1] & "." & $IPArray[2] & "." & $IPArray[3] & "." & $IPArray[4]
Return 1
EndFunc
; --------------------------------------
Func ExitFehler()
MsgBox(0,$Prg,$Meldung)
Exit
EndFunc
; --------------------------------------
Func OnAutoItExit()
Exit
EndFunc
; --------------------------------------