Das ist auf ähnliche Weise wie die die Schaltsteckdose in diesem Beispiel lösbar.
Nur wollen wir hier keine virtuelle Lichtklemme, sonderen eine virtuelle schwarze Klemme, um den scharf/nicht-scharf Status der Kamera zu schalten. Die Init-Message für das entsprechende scripted device (Vorgehen zum Anlegen von scripted devices siehe hier) sieht deshalb ein bisschen anders aus:
{
'message':'init',
'output':'basic', /* einfacher Ausgang */
'colorclass':8, /* universell verwendbar, Farbe einstellbar, in digitalSTROM: schwarze Joker-Klemme */
'group':8 /* standardmässig in Betriebsart Joker */
}
Die Implementation würde etwa wie folgt funktionieren, wobei ich mir nicht sicher bin, dass ich das richtige Attribut für's scharf/nicht-scharf-Schalten der Kamera herausgesucht habe, im Beispiel ist es jetzt audioalarmattr. Aber im Prinzip lässt sich so jede Einstellung der Kamera gemäss den Instar HTTP-API Angaben beeinflussen:
// hier muss die richtige IP-Adresse mit user:pw der Kamera eingetragen werden
var baseurl = "http://admin:instar@192.168.1.42"
// Meldungen vom System (hier: Änderung des Ausgangswerts) behandeln
on (message()) as m {
// wenn die Meldung den Kanal mit Index 0 (=Standard-Ausgang) betrifft...
if (m.message=="channel" && m.index==0) {
// Kamera scharfschalten wenn Wert > 50, sonst nicht-scharf
try {
var res = geturl(baseurl + format('/param.cgi?cmd=setaudioalarmattr&-enable=%d', if(m.value>50, 1, 0)), 5)
if (!isvalid(find(res, 'response="200"'))) {
throw(format("Unerwartete Kamera-Antwort: %s", res))
}
log("Kamera alarm geändert auf %d", m.value)
}
catch as e {
log(4, "Kamera-Befehl nicht ausgeführt: %s", e)
}
}
}
return true // es ist ok, dass das Script hier endet
Damit erscheint eine schwarze Ein/Aus-Schaltklemme im digitalSTROM, die nun den audioalarmattr-Parameter der Kamera umschalten kann.
Die Implementation fängt mit dem try { ... } catch as e { ... }
Verbindungs-Fehler ab, und checkt mit dem !isvalid(find(res, 'response="200"'))
ob die Kamera den Befehl verstanden hat.
Vor der Implementation des scripted device würde ich allerdings den Schaltbefehl direkt in einem Browser ausprobieren gemäss den Instar-Angaben, um sicher zu sein dass der Befehl an sich korrekt funktioniert. Besonders weil ich das obige Beispiel "auf dem trockenen" (ohne Kamera zum Testen) geschrieben habe.