Hi,
für JVC Projektoren gabs ja auch eine entsprechende Anleitung im Nachbarthread.
Da hier sicher auch der ein oder andere SONY Beamer Besitzer vertreten ist, hier mal eine Anleitung zur Integration in FHEM.
1. Ein Dummy Device anlegen, in meinem Fall ist der Name SONYHW65
2. Ein at erstellen was in regelmässigen Intervallen ein Shell-Script ausführt um die Daten zu aktualisieren.
Wer mag kann die Benamung so belassen oder nach seinen Bedürfnissen/Modellnummer frei wählen.
define SONYHW65_Update at +*00:02:00 { fhem("setreading SONYHW65_Update myReading ".`cat /opt/fhem/hw65.txt`) ;; { system("/opt/fhem/SonyBeamerStatus.sh") } }
Das "at" führt alle 2 Minuten ein Update auf das Reading "myReading" aus im Device SONYHW65_Update mit dem Inhalt aus der Text-Datei /opt/fhem/hw65.txt. Ebenfalls führt es ein Shell-Script aus welches die hw65.txt mit Daten vom Projektor füllt!
So sehen Shellscript und hw65.txt Datei aus:
root@HOME:/opt/fhem# more SonyBeamerStatus.sh
#!/bin/sh
HOST='192.168.1.100 53595'
CMD='power_status ?'
CMD2='modelname ?'
CMD3='filter_status ?'
CMD4='input ?'
CMD5='timer ?'
CMD6='serialnum ?'
CMD7='picture_mode ?'
(
echo open "$HOST"
sleep 1
echo "$CMD"
sleep 1
echo "$CMD2"
sleep 1
echo "$CMD3"
sleep 1
echo "$CMD4"
sleep 1
echo "$CMD5"
sleep 1
echo "$CMD6"
sleep 1
echo "$CMD7"
sleep 1
echo "^]"
) | telnet | tee /opt/fhem/hw65.txt
Alles anzeigen
telnet> Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.
NOKEY
"standby"
"VPL-HW65ES"
"normal"
"hdmi1"
[{"operation":136},{"light_src":133},{"prev_light_src":0}]
"5005154"
dazu dann noch einen notify, damit die Formatierung in FHEM stimmt.
Erst grob definieren:
und dann die Definition ändern:
SONYHW65_Update:myReading:.* {
ReadingsVal("SONYHW65_Update","myReading","") =~ /\"(.*)\"\n\"(.*)\"\n\"(.*)\"\n\"(.*)\"\n\[(.*)]\n\"(.*)\"\n(\"(.*)\"|err_inactive)/;
fhem("setreading SONYHW65 power_status ". $1);;
fhem("setreading SONYHW65 model_name ". $2);;
fhem("setreading SONYHW65 filter_status ". $3);;
fhem("setreading SONYHW65 input_source ". $4);;
fhem("setreading SONYHW65 serial_number ". $6);;
my $picturemode = $8;
if ($7 eq 'err_inactive'){
$picturemode = 'err_inactive';
}
Alles anzeigen
So würde das ganze dann im Dummy Device in FHEM ausschauen:
Internals:
FUUID 612cefe4-f33f-c18f-5c32-ae9f8e3edf0fa646
NAME SONYHW65
NR 384
STATE off
TYPE dummy
READINGS:
2021-09-06 14:17:41 filter_status normal
2021-09-06 14:17:41 input_source hdmi1
2021-09-06 14:17:41 model_name VPL-HW65ES
2021-09-06 14:17:41 picture_mode user
2021-09-06 14:17:41 power_status on
2021-09-06 14:17:41 serial_number 5005154
2021-09-06 13:45:41 state on
2021-09-06 14:17:41 timer_light_current 145
2021-09-06 14:17:41 timer_light_previous 0
2021-09-06 14:17:41 timer_operation 148
Alles anzeigen
3. benötigen wir noch einen notify um A) den Projektor via FHEM zu schalten und den Status zwischen manueller Bedienung und FHEM "möglichst synchron" zu halten.
erstmal grob definieren:
und dann so anpassen dass je nach Status entsprechend geschaltet und gewaltet wird.
Achtet darauf die Device-Namen entsprechend Euren Geräten/Namen anzupassen, falls Ihr es nicht stumpf so übernommen habt!
(SONYHW65:power_status:.(standby|on))|(SONYHW65:state:.(on|off)) {
#SONYHW65:state -> represents the status of the FHEM-dummy
#SONYHW65:power_status -> represents the status of projector itself (hanging in the basement)
#Log 3, "2- SONYHW65_notify: attr: '$EVTPART0' val: '$EVTPART1'.";;
if ($EVTPART0 eq "power_status:"){
#set dummy status according to projector
my $dummyDeviceState = ReadingsVal("SONYHW65","state","");;
if ($EVTPART1 eq "standby"){
if ($dummyDeviceState eq "on"){
#Log 3, "SONYHW65_notify: set dummy device to 'off' because beamer is currently in standby and dummy device status is currently 'on'";;
fhem("setreading SONYHW65 state off");;
}
else {
#Log 3, "SONYHW65_notify: nothing to do as beamer is currently in standby and dummy device status is already 'off'";;
}
}
else {
if ($dummyDeviceState eq "off"){
#Log 3, "SONYHW65_notify: set dummy device to 'on' because beamer is currently running and dummy device status is currently 'off'";;
fhem("setreading SONYHW65 state on");;
}
else {
#Log 3, "SONYHW65_notify: nothing to do as beamer is currently running and dummy device status is already 'on'";;
}
}
}
if ($EVTPART0 eq "state:"){
#setting up projector according to FHEM-Dummy
my $projectorPowerState = ReadingsVal("SONYHW65","power_status","");;
if ($EVTPART1 eq "on"){
if ($projectorPowerState eq "standby"){
#Log 3, "SONYHW65_notify: start beamer because it is currently in standby and dummy device has switchted to 'on'";;
system("/opt/fhem/SonyBeamerOn.sh");;
}
else {
#Log 3, "SONYHW65_notify: nothing to do as beamer is already running and dummy device has switched to 'on'";;
}
}
else {##dummy switched to off
if ($projectorPowerState eq "on"){
#Log 3, "SONYHW65_notify: shutdown beamer because it is currently running and dummy device has switchted to 'off'";;
system("/opt/fhem/SonyBeamerOff.sh");;
}
else {
#Log 3, "SONYHW65_notify: nothing to do as beamer is already switched off and dummy device has switched to 'off'";;
}
}
}
}
Alles anzeigen
Zum Auslesen und schalten benötigt Ihr noch die kleinen Shell-Scripte die ich hier mal angehängt habe. Nicht vergessen die Dateiendung von .txt zu .sh ändern!
Rüberkopieren nach /opt/fhem/ und ausführbar machen via:
Damit sollte es auch schon laufen. In den Shell-Scripten bitte auch entsprechend IPs, Dateinamen und Pfade Euren Bedürfnissen anpassen.
Funktioniert bisher einwandfrei. Ich bin mir auch ziemlich sicher dass dies vielleicht sehr viel einfacher möglich wäre, vielleicht via eigenem Modul oder vlt sind meine notifier auch zu aufwändig erstellt, aber besser kann ich es Stand heute nicht ;)
Verbesserungsvorschläge sind aber sehr gerne willkommen und Ihr könnt den ganzen Kram natürlich komplett ändern/anpassen/weitergeben etc.
Viele Grüße
Christian