2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

49_SSCam: fixed the problem a recording may still stay active if

fhem will be restarted after a recording was triggered and
                  the recordtime wasn't be over,
                  Enhancement of readings.

git-svn-id: https://svn.fhem.de/fhem/trunk@10649 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2016-01-28 14:35:00 +00:00
parent 53551d573e
commit f41d22d78b
2 changed files with 57 additions and 14 deletions

View File

@ -1,5 +1,9 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- bugfix: 49_SSCam: fixed the problem a recording may still stay active if
fhem will be restarted after a recording was triggered and
the recordtime wasn't be over,
Enhancement of readings.
- change: 76_MSGMail: move email delivery from MSGMail_set to MSGMail_send - change: 76_MSGMail: move email delivery from MSGMail_set to MSGMail_send
to be usable from perl; use Blocking_Call to deliver email to be usable from perl; use Blocking_Call to deliver email
- change: 55_GDS.pm uses setKeyValue/getKeyValue for user credentials - change: 55_GDS.pm uses setKeyValue/getKeyValue for user credentials

View File

@ -27,6 +27,10 @@
########################################################################################################## ##########################################################################################################
# Versions History: # Versions History:
# #
# 1.9 28.01.2016 fixed the problem a recording may still stay active if fhem
# will be rebooted after a recording was triggered and
# the recordtime wasn't be over,
# Enhancement of readings.
# 1.8 25.01.2016 changed define in order to remove credentials from string, # 1.8 25.01.2016 changed define in order to remove credentials from string,
# added "set credentials" command to save username/password, # added "set credentials" command to save username/password,
# added Attribute "session" to make login-session selectable, # added Attribute "session" to make login-session selectable,
@ -77,8 +81,7 @@ sub SSCam_Initialize($) {
$hash->{UndefFn} = "SSCam_Undef"; $hash->{UndefFn} = "SSCam_Undef";
$hash->{SetFn} = "SSCam_Set"; $hash->{SetFn} = "SSCam_Set";
$hash->{GetFn} = "SSCam_Get"; $hash->{GetFn} = "SSCam_Get";
$hash->{AttrFn} = "SSCam_Attr"; $hash->{AttrFn} = "SSCam_Attr";
$hash->{AttrList} = $hash->{AttrList} =
"httptimeout ". "httptimeout ".
@ -87,9 +90,9 @@ sub SSCam_Initialize($) {
"rectime ". "rectime ".
"session:SurveillanceStation,DSM ". "session:SurveillanceStation,DSM ".
"webCmd ". "webCmd ".
$readingFnAttributes; $readingFnAttributes;
return undef; return undef;
} }
sub SSCam_Define { sub SSCam_Define {
@ -127,19 +130,17 @@ sub SSCam_Define {
$attr{$name}{webCmd} = "on:off:snap:enable:disable"; # initiale Webkommandos setzen $attr{$name}{webCmd} = "on:off:snap:enable:disable"; # initiale Webkommandos setzen
$hash->{HELPER}{ACTIVE} = "off"; # Funktionstoken "off", Funktionen können sofort starten $hash->{HELPER}{ACTIVE} = "off"; # Funktionstoken "off", Funktionen können sofort starten
$hash->{HELPER}{OLDVALPOLLNOLOGGING} = "0"; # Loggingfunktion für Polling ist an $hash->{HELPER}{OLDVALPOLLNOLOGGING} = "0"; # Loggingfunktion für Polling ist an
$hash->{STATE} = "initialized"; # Anfangsstatus der Geräte
$hash->{HELPER}{RECTIME_DEF} = "15"; # Standard für rectime setzen, überschreibbar durch Attribut "rectime" bzw. beim "set .. on-for-time" $hash->{HELPER}{RECTIME_DEF} = "15"; # Standard für rectime setzen, überschreibbar durch Attribut "rectime" bzw. beim "set .. on-for-time"
readingsSingleUpdate($hash,"Record","Stop",0); # Recordings laufen nicht
readingsSingleUpdate($hash,"Availability", "", 0); # Verfügbarkeit ist unbekannt readingsSingleUpdate($hash,"Availability", "", 0); # Verfügbarkeit ist unbekannt
readingsSingleUpdate($hash,"PollState","Inactive",0); # es ist keine Gerätepolling aktiv readingsSingleUpdate($hash,"PollState","Inactive",0); # es ist keine Gerätepolling aktiv
getcredentials($hash,1); # Credentials lesen und in RAM laden ($boot=1) getcredentials($hash,1); # Credentials lesen und in RAM laden ($boot=1)
RemoveInternalTimer($hash); # alle Timer löschen RemoveInternalTimer($hash); # alle Timer löschen
# Subroutine Watchdog-Timer starten (sollen Cam-Infos abgerufen werden ?), verzögerter zufälliger Start 0-60s # Subroutine Watchdog-Timer starten (sollen Cam-Infos abgerufen werden ?), verzögerter zufälliger Start 0-60s
InternalTimer(gettimeofday()+int(rand(60)), "watchdogpollcaminfo", $hash, 0); InternalTimer(gettimeofday()+int(rand(60)), "watchdogpollcaminfo", $hash, 0);
recstoponboot($hash); # check ob nach Reboot alle Recordings aus -> sonst stoppen
return undef; return undef;
} }
@ -243,8 +244,6 @@ sub SSCam_Set {
($success) = setcredentials($hash,$prop,$prop1); ($success) = setcredentials($hash,$prop,$prop1);
return $success ? "Username and Password saved successfully" : "Error while saving Username / Password - see logfile for details"; return $success ? "Username and Password saved successfully" : "Error while saving Username / Password - see logfile for details";
} }
} }
return undef; return undef;
} }
@ -273,11 +272,33 @@ sub SSCam_Get {
{ {
&getcaminfoall($hash); &getcaminfoall($hash);
} }
} }
return undef; return undef;
} }
######################################################################################
### check ob alle Recordings = Stop nach Reboot -> sonst stoppen
sub recstoponboot ($) {
my ($hash) = @_;
my $logstr;
if ($init_done == 1) {
if (ReadingsVal($hash->{NAME}, "Record", "Stop") eq "Start") {
# if ($hash->{STATE} eq "on") {
$logstr = "Recording of $hash->{CAMNAME} seems to be still active after FHEM restart - try to stop it now";
&printlog($hash,$logstr,"1");
&camstoprec($hash);
}
}
else {
InternalTimer(gettimeofday(), "recstoponboot", $hash, 0);
}
return undef;
}
###################################################################################### ######################################################################################
### Username / Paßwort speichern ### Username / Paßwort speichern
@ -1515,12 +1536,12 @@ sub camret_nonbl ($) {
if ($OpMode eq "Start") if ($OpMode eq "Start")
{ {
# bedingt Browseraktualisierung und Status der "Lampen"
$hash->{STATE} = "on"; $hash->{STATE} = "on";
# Setreading # Setreading
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
readingsBulkUpdate($hash,"Record","Start"); readingsBulkUpdate($hash,"Record","Start");
# readingsBulkUpdate($hash,"state","on");
readingsBulkUpdate($hash,"Errorcode","none"); readingsBulkUpdate($hash,"Errorcode","none");
readingsBulkUpdate($hash,"Error","none"); readingsBulkUpdate($hash,"Error","none");
readingsEndUpdate($hash, 1); readingsEndUpdate($hash, 1);
@ -1671,17 +1692,29 @@ sub camret_nonbl ($) {
else { else {
$camStatus = "other"; $camStatus = "other";
} }
my $recStatus = $data->{'data'}->{'cameras'}->[0]->{'recStatus'};
if ($recStatus ne "0") {
$recStatus = "Start";
}
else {
$recStatus = "Stop";
}
# Setreading # Setreading
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
readingsBulkUpdate($hash,"CamLiveMode",$camLiveMode); readingsBulkUpdate($hash,"CamLiveMode",$camLiveMode);
readingsBulkUpdate($hash,"CamModel",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camModel'});
readingsBulkUpdate($hash,"CamRecShare",$data->{'data'}->{'cameras'}->[0]->{'camRecShare'}); readingsBulkUpdate($hash,"CamRecShare",$data->{'data'}->{'cameras'}->[0]->{'camRecShare'});
readingsBulkUpdate($hash,"CamRecVolume",$data->{'data'}->{'cameras'}->[0]->{'camRecVolume'}); readingsBulkUpdate($hash,"CamRecVolume",$data->{'data'}->{'cameras'}->[0]->{'camRecVolume'});
readingsBulkUpdate($hash,"CamIP",$data->{'data'}->{'cameras'}->[0]->{'host'}); readingsBulkUpdate($hash,"CamIP",$data->{'data'}->{'cameras'}->[0]->{'host'});
readingsBulkUpdate($hash,"CamVendor",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camVendor'});
readingsBulkUpdate($hash,"CamPreRecTime",$data->{'data'}->{'cameras'}->[0]->{'detailInfo'}{'camPreRecTime'});
readingsBulkUpdate($hash,"CamPort",$data->{'data'}->{'cameras'}->[0]->{'port'}); readingsBulkUpdate($hash,"CamPort",$data->{'data'}->{'cameras'}->[0]->{'port'});
readingsBulkUpdate($hash,"Availability",$camStatus); readingsBulkUpdate($hash,"Availability",$camStatus);
readingsBulkUpdate($hash,"DeviceType",$deviceType); readingsBulkUpdate($hash,"DeviceType",$deviceType);
readingsBulkUpdate($hash,"LastUpdateTime",$update_time); readingsBulkUpdate($hash,"LastUpdateTime",$update_time);
readingsBulkUpdate($hash,"Record",$recStatus);
readingsBulkUpdate($hash,"UsedSpaceMB",$data->{'data'}->{'cameras'}->[0]->{'volume_space'}); readingsBulkUpdate($hash,"UsedSpaceMB",$data->{'data'}->{'cameras'}->[0]->{'volume_space'});
readingsBulkUpdate($hash,"Errorcode","none"); readingsBulkUpdate($hash,"Errorcode","none");
readingsBulkUpdate($hash,"Error","none"); readingsBulkUpdate($hash,"Error","none");
@ -2435,9 +2468,12 @@ return;
<tr><td><li>Availability</li> </td><td>- Availability of Camera (disabled, enabled, disconnected, other) </td></tr> <tr><td><li>Availability</li> </td><td>- Availability of Camera (disabled, enabled, disconnected, other) </td></tr>
<tr><td><li>CamIP</li> </td><td>- IP-Address of Camera </td></tr> <tr><td><li>CamIP</li> </td><td>- IP-Address of Camera </td></tr>
<tr><td><li>CamLiveMode</li> </td><td>- Source of Live-View (DS, Camera) </td></tr> <tr><td><li>CamLiveMode</li> </td><td>- Source of Live-View (DS, Camera) </td></tr>
<tr><td><li>CamModel</li> </td><td>- Model of camera </td></tr>
<tr><td><li>CamPort</li> </td><td>- IP-Port of Camera </td></tr> <tr><td><li>CamPort</li> </td><td>- IP-Port of Camera </td></tr>
<tr><td><li>CamPreRecTime</li> </td><td>- Duration of Pre-Recording (in seconds) adjusted in SVS </td></tr>
<tr><td><li>CamRecShare</li> </td><td>- shared folder on disk station for recordings </td></tr> <tr><td><li>CamRecShare</li> </td><td>- shared folder on disk station for recordings </td></tr>
<tr><td><li>CamRecVolume</li> </td><td>- Volume on disk station for recordings </td></tr> <tr><td><li>CamRecVolume</li> </td><td>- Volume on disk station for recordings </td></tr>
<tr><td><li>CamVendor</li> </td><td>- Identifier of camera producer </td></tr>
<tr><td><li>CapAudioOut</li> </td><td>- Capability to Audio Out over Surveillance Station (false/true) </td></tr> <tr><td><li>CapAudioOut</li> </td><td>- Capability to Audio Out over Surveillance Station (false/true) </td></tr>
<tr><td><li>CapChangeSpeed</li> </td><td>- Capability to various motion speed </td></tr> <tr><td><li>CapChangeSpeed</li> </td><td>- Capability to various motion speed </td></tr>
<tr><td><li>CapPTZAbs</li> </td><td>- Capability to perform absolute PTZ action </td></tr> <tr><td><li>CapPTZAbs</li> </td><td>- Capability to perform absolute PTZ action </td></tr>
@ -2793,9 +2829,12 @@ return;
<tr><td><li>Availability</li> </td><td>- Verfügbarkeit der Kamera (disabled, enabled, disconnected, other) </td></tr> <tr><td><li>Availability</li> </td><td>- Verfügbarkeit der Kamera (disabled, enabled, disconnected, other) </td></tr>
<tr><td><li>CamIP</li> </td><td>- IP-Adresse der Kamera </td></tr> <tr><td><li>CamIP</li> </td><td>- IP-Adresse der Kamera </td></tr>
<tr><td><li>CamLiveMode</li> </td><td>- Quelle für Live-Ansicht (DS, Camera) </td></tr> <tr><td><li>CamLiveMode</li> </td><td>- Quelle für Live-Ansicht (DS, Camera) </td></tr>
<tr><td><li>CamModel</li> </td><td>- Kameramodell </td></tr>
<tr><td><li>CamPort</li> </td><td>- IP-Port der Kamera </td></tr> <tr><td><li>CamPort</li> </td><td>- IP-Port der Kamera </td></tr>
<tr><td><li>CamPreRecTime</li> </td><td>- Dauer der der Voraufzeichnung in Sekunden (Einstellung in SVS) </td></tr>
<tr><td><li>CamRecShare</li> </td><td>- gemeinsamer Ordner auf der DS für Aufnahmen </td></tr> <tr><td><li>CamRecShare</li> </td><td>- gemeinsamer Ordner auf der DS für Aufnahmen </td></tr>
<tr><td><li>CamRecVolume</li> </td><td>- Volume auf der DS für Aufnahmen </td></tr> <tr><td><li>CamRecVolume</li> </td><td>- Volume auf der DS für Aufnahmen </td></tr>
<tr><td><li>CamVendor</li> </td><td>- Kamerahersteller Bezeichnung </td></tr>
<tr><td><li>CapAudioOut</li> </td><td>- Fähigkeit der Kamera zur Audioausgabe über Surveillance Station (false/true) </td></tr> <tr><td><li>CapAudioOut</li> </td><td>- Fähigkeit der Kamera zur Audioausgabe über Surveillance Station (false/true) </td></tr>
<tr><td><li>CapChangeSpeed</li> </td><td>- Fähigkeit der Kamera verschiedene Bewegungsgeschwindigkeiten auszuführen </td></tr> <tr><td><li>CapChangeSpeed</li> </td><td>- Fähigkeit der Kamera verschiedene Bewegungsgeschwindigkeiten auszuführen </td></tr>
<tr><td><li>CapPTZAbs</li> </td><td>- Fähigkeit der Kamera für absolute PTZ-Aktionen </td></tr> <tr><td><li>CapPTZAbs</li> </td><td>- Fähigkeit der Kamera für absolute PTZ-Aktionen </td></tr>
@ -2810,7 +2849,7 @@ return;
<tr><td><li>DeviceType</li> </td><td>- Kameratyp (Camera, Video_Server, PTZ, Fisheye) </td></tr> <tr><td><li>DeviceType</li> </td><td>- Kameratyp (Camera, Video_Server, PTZ, Fisheye) </td></tr>
<tr><td><li>Error</li> </td><td>- Meldungstext des letzten Fehlers </td></tr> <tr><td><li>Error</li> </td><td>- Meldungstext des letzten Fehlers </td></tr>
<tr><td><li>Errorcode</li> </td><td>- Fehlercode des letzten Fehlers </td></tr> <tr><td><li>Errorcode</li> </td><td>- Fehlercode des letzten Fehlers </td></tr>
<tr><td><li>LastUpdateTime</li> </td><td>- Datum / Zeit der letzten Aktualisierung der Kamera in der Surrveillance Station </td></tr> <tr><td><li>LastUpdateTime</li> </td><td>- Datum / Zeit der letzten Aktualisierung der Kamera in der Synology Surveillance Station </td></tr>
<tr><td><li>Patrols</li> </td><td>- in Surveillance Station voreingestellte Überwachungstouren (bei PTZ-Kameras) </td></tr> <tr><td><li>Patrols</li> </td><td>- in Surveillance Station voreingestellte Überwachungstouren (bei PTZ-Kameras) </td></tr>
<tr><td><li>PollState</li> </td><td>- zeigt den Status des automatischen Pollings an </td></tr> <tr><td><li>PollState</li> </td><td>- zeigt den Status des automatischen Pollings an </td></tr>
<tr><td><li>Presets</li> </td><td>- in Surveillance Station voreingestellte Positionen (bei PTZ-Kameras) </td></tr> <tr><td><li>Presets</li> </td><td>- in Surveillance Station voreingestellte Positionen (bei PTZ-Kameras) </td></tr>