Zipato TagReader Status-Sync bei externem Aktivieren

Hallo zusammen,

ich habe nun endlich das Upgrade auf 4.120 gemacht und es läuft. Leider funktioniert der Sync des Tagreaders nicht, wenn man anderweitig Schar/Unscharf schaltet.
Ich habe diesen Script benutzt:

–[[
%% properties
%% events
%% globals
–]]

local rfidID = 106
local setstatus = true

function setStatus(deviceId, newstatus)
local dev = api.get(’/devices/’ … deviceId)
– false=home; true=away
dev.properties.value = newstatus
if (newstatus) then
print(‘Status für Modul-ID ’ …deviceId… ’ gesetzt. Neuer Status: Away’)
else
print(‘Status für Modul-ID ’ …deviceId… ’ gesetzt. Neuer Status: Home’)
end
api.put(’/devices/’ … deviceId, dev)

end

setStatus(rfidID,setstatus)

Ich habe die Aufweckzeit des Readers zum Testen mal auf 60 gesetzt. Wenn ich den Reader nun mit einem Chip scharf schalte, gehen alle Kontakte auf scharf und der Reader ist rot. Alles ok. Auch meine LED-Steuerung (scharf rot/unscharf grün) funktioniert.
Wenn ich aber nun z.B. mit dem Alarmpanel auf unscharf schalte und warte, bis das Aufwecksignal an den Reader gegangen ist (Übertragung ok), dann bleibt der Reader in der Weboberfläche rot und ich muß ihn extra per Home + Chip unscharf schalten. Mit einem Handy habe ich es noch nicht getestet, wird aber wohl genauso sein.

Starte ich die Szene manuell, kommt im Debug auch z. B. aktueller Status Away.

Habe ich irgendetwas falsch gemacht oder gibt es mittlerweile eine Lösung dafür?
Ich hoffe, ihr könnt mir helfen.
Gruß

Hi,

deine Szene wird nicht getriggert, wodurch auch nichts an den RFID-Reader übergeben wird.

Gruß

Hallo boomx,

danke für die Rückinfo. D.h., was fehlt da noch im Script? Bin leider noch nicht so firm und hatte das Script aus dem Beitrag https://www.siio.de/rfid-pad_sync_api/
Kannst Du mir helfen, was ich noch eintragen muss?
Vielen Dank im Voraus.
Gruß

Du musst dir überlegen, wodurch du das Skript starten lassen willst. Entweder über eine andere Szene, welche den Status des RFID-Tags abfragt oder direkt die Szene über einen Trigger starten. Dabei würde sich natürlich der RFID-Reader anbieten.

Gruß

Hallo boomx,

ich würde die Szene lieber separat laufen lassen. Dann müsste das als eigenständige Szene also so aussehen?
–[[
%% properties
106 value
%% events
%% globals
–]]

local rfidID = 106
local setstatus = true

function setStatus(deviceId, newstatus)
local dev = api.get(‚/devices/‘ … deviceId)
— false=home; true=away
dev.properties.value = newstatus
if (newstatus) then
print(‚Status für Modul-ID ‚ …deviceId… ‚ gesetzt. Neuer Status: Away‘)
else
print(‚Status für Modul-ID ‚ …deviceId… ‚ gesetzt. Neuer Status: Home‘)
end
api.put(‚/devices/‘ … deviceId, dev)

end

setStatus(rfidID,setstatus)

Durch was wird denn erkannt, dass anderweitig z.B. unscharf geschalten wurde, da ja in Zeile 9 bei setstatus immer = true steht? Bloß für mich zum Verständnis. Wie gesagt, ich bin da noch nicht so firm.
Vielen Dank für Deine Rückinfo.
Gruß

Hi,

da hast du Recht. Der Status wird anhand der Variablen setstatus gesetzt. Hier kannst du natürlich auch den Wert des RFID-Tags eintragen, dann wird immer der entsprechende Wert gesetzt.

Gruß

Hallo boomx,

nee, das Skript funktioniert leider nicht. Ich habe die Aufwachzeit des Reader zum Testen wieder auf 60s gesetzt und hatte in der o.g. Sync-Szene 4 Instanzen eingestellt. Danach konnte ich den Tagreader gar nicht mehr scharfschalten und es kam bei allen mit dem Reader verknüpften Szenen (Tagreader, Alarmpanel, Sync-Tagreader) die Fehlermeldung “zu viele Instanzen”. Also Instanzen auf 1 geändert, nun konnte ich wieder scharfschalten.
Aber nach Scharfschalten mit Tagreader und danach Unscharfschalten über das Alarmpanel änderte sich der Staus des Tagreaders nicht, auch wenn nach den 60s Übertragung ok bei ihm angezeigt wurde. Wenn ich die Szene manuell starte, kommt im Debug auch immer Tagreader scharf. Neuer Staus Away. Funktioniert das Script immer nur in eine Richtung (also wenn lokal setstatus = true - dann macht das Script immer nur Scharf?)? Es soll ja eigentlich den aktuellen Status erkennen und an den Tagreader weitergeben (also wenn scharf und durch extern unscharf dann werde unscharf und umgekehrt). Es gibt im System übrigens eine Variable PresentState, die sich auch mit dem Status ändert (Home oder Away). die wurde wahrscheinlich durch das Tagreaderscript angelegt. Außerdem gibt es auch noch eine Variable rfid_alarm die auf 1 steht, sich aber bei Scharf/Unscharf nicht ändert. Wodurch die angelegt wurde und zu was die gut ist - keine Ahnung.
Habe ich irgendwo einen Denkfehler oder woran kann es liegen, dass es nicht funktioniert? Kannst Du mir für diese Funktion ein Script bauen?
Ich weiß nicht mehr weiter und bitte um Unterstützung.
Vielen Dank im Voraus!
Gruß

Hi,

hab doch oben geschrieben, dass das Skript immer nur einen Wert setzt. Damit diese synchron gehalten werden, müsstest du den Status des Tagreades auslesen und in die Variable setstatus schreiben. rfid_alarm sollte grundsätzlich auf 0 stehen, ansonsten werden die Skripte wahrscheinlich nicht richtig ausgeführt. Du solltest mal deine ganze Konfig checken, hier scheint es bei dir Probleme zu geben.

Gruß

Hallo boomx,

danke für Deine Info, bin lange nicht zum Testen gekommen. Ich werde mal die Variable rfid_alarm auf 0 umstellen, wenn das so sein soll. Ich weiß nicht, wodurch sich das eingestellt hat, es funktioniert ja ansonsten alles (scharf/unscharfschalten mit Tag, Alarmierung usw,). Nur mit der Sync beim Tagreader eben leider nicht.
Mal ganz blöd gefragt: Könnte man nicht zwei Szenen wie oben beschrieben einrichten. In einer gibt man an setstatus = false (home) und in der zweiten sagt man setstatus = true (away). Und dann trägt man im Tagreaderscript bei Funktion bei unscharf starte die erste Szene und bei scharf starte die zweite Szene ein. Würde dann nicht automatisch die entsprechende Szene ausgeführt und dem Tagreader der entsprechende Status übermittelt?
Weil sich eben der Status im Syncscript nicht automatisch ändert.

Ich hoffe, ich nerve nicht, aber das ist das Letzte, was noch nicht klappt und das muss ich unbedingt hinbekommen.
Vielen Dank schon mal im Voraus.
Gruß

Hi,

ja, das würde funktionieren. Musst dann nur den Trigger in der Szene entfernen.

Gruß