Efter att jag och flera andra undrat hur man plockar data från serieporten på Siemens SPC gjorde jag ett försök. Här är resultatet som blev betydligt bättre än jag hoppats på.

Läsa ut status från Siemens SPC via serieporten

1. Ladda hem PDF:en http://www.bewator.com/products/res...63xx_Installation_Configuration_Manual_sv.pdf

På sidan 214 finns en tabell på hur kabeln ska vara kopplad. Väldigt enkelt att få till.

KabelTabell.png
Inloggade ser högupplösta bilder
Skapa konto
Gratis och tar endast 30 sekunder


2. Koppla in kabeln mellan centralen och datorn. I mitt fall kopplar jag in kablen i en Vmware ESX-host som sedan skickar in serieporten i en VM.

3. Gå in i installatörsläge i centralen och gå till fliken kommunikation. Konfigurera serieport 2 enligt nedan.

KomSPC.png
Inloggade ser högupplösta bilder
Skapa konto
Gratis och tar endast 30 sekunder


Porten kommer nu spotta ur sig allt som händer i centralen. Ex pålarmning, avlarmning, inloggning osv. Klassisk funktion till ex skrivare i högsäkerhetsobjekt.

4. Tanka hem putty.exe och starta programmet.
Fyll i den COM-port du använder och sedan Speed: 115200 (samma som du angav i centralen).

Putty1.exe.png

5. Prova nu att larma på ett område. Om allt funkar som det ska så bör du få upp nåt liknande.

Putty2.exe.png

Mitt ursprungliga mål med detta var att få Switchking att fatta att larmet är påslaget. Detta genom en datakälla som läser en textfil med innehållet ”Till” eller ”Från”.

Då jag kör allt i Windows och mest ”kodar” Powershell fick det bli just Powershell.

Bifogat script läser från COM1, skriver ut resultatet på skärmen samt loggar allt till en textfil. När ett specifikt område slås till eller från skrivs också en textfil ut med texten ”Till” eller ”Från”

Då jag inte fick till Encodingen från serieporten så fick det bli efterbearbetning med -replace.

Cls
#Logfile for continuos logging
$Logfile = "C:\SPC\SPCLogfile.txt"
#Statusfile where to see alarm status
$SPCStatusFile = "C:\SPC\SPCStatusFile.txt"
$Port = New-Object System.IO.Ports.SerialPort COM1,115200,None,8,one
$Port.Encoding = [System.Text.Encoding]::"UTF8"
#Check if port is open
If ($Port.IsOpen -eq $false)
{$Port.Open()}
#Loop
Do {
#Reading serial port
$Log = $($Port.ReadLine())
#Replacing bad characters
$Log = ($Log | % {$_ `
-replace 'Omr�de','Omrade' `
-replace 'Anv�ndare','Anvandare' `
-replace 'Fr�nkoppling','Frankoppling' `
-replace '�r','ar' `
-replace 'Installat�rsl�ge','Installatorslage' `
-replace 'Installatarsl�ge','Installatorslage' `
-replace 'upph�vt','upphavt' `
-replace '�ppning','oppning' `
-replace 'godk�nd','godkand' `
-replace 'Darr','Dorr' `
-replace 'l�st','last' `
-replace 'normall�ge','normallage' `
-replace '�terst�ll','Aterstall' `
-replace 'Man�verpaneler','Manoverpaneler' `
})
#Writing to logfile
Add-Content $Logfile $Log
#Writing to powershell window
Write-Host $Log
#Call for another script for further processing (optional)
#Invoke-Expression -Command "C:\SPC\Powershell\Events.ps1"
#Basic function
#Trigger för Armed
If ($Log -like "*Omrade 1 Huset Tillk.*")
{
Write-Host "Tillkopplat."
"Till" | Out-File $SPCStatusFile
}
#Trigger for Disarmed
ElseIf ($Log -like "*Omrade 1 Huset Frankoppling*")
{
Write-Host "Frånkopplat"
"Från" | Out-File $SPCStatusFile
}
}
#Loop in eternity
Until ($NeverEnd -eq 0)


Ett tips är att öppna filen i Windows Powershell ISE så blir färgkodningen riktig och allt blir enklare att följa.

6. Scriptet körs sedan som en Schedule Task i Windows vilken gör att allt kan köras i bakgrunden när ingen är inloggad.

7. Här är hur jag konfigurerade Task Scheduler.

SchTask1.PNG
Inloggade ser högupplösta bilder
Skapa konto
Gratis och tar endast 30 sekunder

Här väljer jag användaren SYSTEM

SchTaskAction.PNG
Inloggade ser högupplösta bilder
Skapa konto
Gratis och tar endast 30 sekunder

Add argument: -file C:\SPC\Powershell\SPCSerial.ps1

SchTaskTrigger.PNG
Inloggade ser högupplösta bilder
Skapa konto
Gratis och tar endast 30 sekunder


I Switchking har jag en datakälla som läser filen C:\SPC\SPCStatusFile.txt (angiven i scriptet ovan)

SK.png

När man väl fått till detta är det bara fantasin som sätter gränserna.
Ett exempel.
I scriptet som anges med Invoke-Expression -Command "C:\SPC\Powershell\Events.ps1" kan man trigga på en specific loghändelse och skicka mail. Ex barnen larmar av huset efter skolan osv eller att skicka mail när larmet drar igång.

Exempel på Events.ps1
#Checking for event, variable $Log is taken from caller script
If ($Log -like "*Omrade 1 Huset Frankoppling av Anvandare 1 Kalle*")
{
$SmtpServer = "smtp-server som du anger"
$EmailFrom = "SPC@doman.se"
$MailAdress = "kalle@doman.se"
$Encoding = [System.Text.Encoding]::UTF8
Send-MailMessage -SmtpServer $SmtpServer -From $EmailFrom -To $MailAdress -Subject "SPC Event" -BodyAsHtml -Body $Log -Encoding $Encoding
}

Lycka till!
 
  • Gilla
llehs och 4 till
  • Laddar…
Helt fantastiskt Pewh!! Jag tar av mig hatten och bugar djupt! Jag fick hem min 5320 igår och ska börja bygga nu till helgen. Jag vägrade köpa GSM-modulen just för att tekniknörden i mig bestämt hävdade att data ju uppenbarligen skickas via serieport och/eller RJ45.

Jag hade en tanke att labba med detta när jag väl är igång. Klurade på att sätta en Rasberry PI för att läsa ut händelseloggen och trigga mail.

Jag ber att få återkomma med kvalificerade frågor när jag lyckats driftsätta systemet och börjat leka.

Återigen, tack för att du tagit dig tid att dokumentera och dela med dig!!

// Azkel
 
Spännande, det där måste jag också labba med nån gång!
Känns som att omvägen med replace måste gå att ordna på ett bättre sätt, men har tyvärr inga tips på rak arm. Gissar dock att problemet ligger i raden med port encoding, att det ska vara ex iso8859 istället, men det har du kanske redan testat.
 
fredrik.johansson skrev:
Spännande, det där måste jag också labba med nån gång!
Känns som att omvägen med replace måste gå att ordna på ett bättre sätt, men har tyvärr inga tips på rak arm. Gissar dock att problemet ligger i raden med port encoding, att det ska vara ex iso8859 istället, men det har du kanske redan testat.
Jo jag har testat med is08859-1 och Windows-1252 men inte fått till syntaxen riktigt. Vet dock inte ens om det är möjligt.
 
Jag antar att detta bara fungerar på SPC 5XXX, eller går X10 porten på SPC4320 att använda?
 
JakeMan skrev:
Jag antar att detta bara fungerar på SPC 5XXX, eller går X10 porten på SPC4320 att använda?
Glädjedödare!;) Jo det verkar stämma, tittar man i manualen så har mitt 4320 bara en rs232 för X10, medan 5000-serien har 2 x rs232, varav nr 2 är avsedd för extern kommunikation.

Dock kan man nog använda X10-porten för liknande funktion, men mjukvarmässigt blir det ju lite annorlunda och man får i så fall emulera en X10-mottagare.
 
Antar att det inte går att få ut löpande triggade detektorer osv. även när det är avklarat?
 
phl skrev:
Antar att det inte går att få ut löpande triggade detektorer osv. även när det är avklarat?
Om du bockar i "Logg" som attribut på önskad sektion så loggas även detta till serieporten.
 
Se där, tack för infon!
 
fredrik.johansson skrev:
Glädjedödare!;) Jo det verkar stämma, tittar man i manualen så har mitt 4320 bara en rs232 för X10, medan 5000-serien har 2 x rs232, varav nr 2 är avsedd för extern kommunikation.

Dock kan man nog använda X10-porten för liknande funktion, men mjukvarmässigt blir det ju lite annorlunda och man får i så fall emulera en X10-mottagare.
Inte min mening alls att vara glödjedödare:), ska strax till att koppla in mitt SPC4320 så detta hade varit trevligt:p. Någon som har en aning om hur X10 utgången skulle kunna användas? Själv har jag aldrig pysslat med X10 enheter. Skulle man kunna koppla den till en Arduino för att kunna läsa av händelser? Vad skulle behövas för det tro
 
JakeMan skrev:
Inte min mening alls att vara glödjedödare:), ska strax till att koppla in mitt SPC4320 så detta hade varit trevligt:p. Någon som har en aning om hur X10 utgången skulle kunna användas? Själv har jag aldrig pysslat med X10 enheter. Skulle man kunna koppla den till en Arduino för att kunna läsa av händelser? Vad skulle behövas för det tro
I princip kan du låta larmet slå på/slå av olika enheter via X10-porten, bara man vet hur den ska kommunicera. Siemens har lagt ner allt stöd för X10, men det finns fortfarande kvar i admin.gränssnittet. Så jag antar att kan ni bara ta reda på det den skickar ut så ska man väl kunna styra en massa enheter beroende på en speciell händelse i larmet, t.ex. att en dörr öppnas eller liknande.
Det finns 16 st X10 "enheter" i admin., kanske går att lägga till fler eller så men så ser det ut i min 4320 i alla fall ...
 
En lite uppdatering. Har nu lyckats få till encodingen korrekt. Nu funkar alltså åäö utan -replace

Cls
#Logfile for continuos logging
$Logfile = "C:\SPC\SPCLogfile.txt"
#Statusfile where to see alarm status
$SPCStatusFile = "C:\SPC\SPCStatusFile.txt"
$Port = New-Object System.IO.Ports.SerialPort COM1,115200,None,8,one
$Port.Encoding = [System.Text.Encoding]::"Default"
#Check if port is open
If ($Port.IsOpen -eq $false)
{$Port.Open()}
#Loop
Do {
#Reading serial port
$Log = $($Port.ReadLine())
#Replacing bad characters
#Writing to logfile
Add-Content $Logfile $Log
#Writing to powershell window
Write-Host $Log
#Call for another script for further processing (optional)
#Invoke-Expression -Command "C:\SPC\Powershell\Events.ps1"
#Basic function
#Trigger för Armed
If ($Log -like "*Omrade 1 Huset Tillk.*")
{
Write-Host "Tillkopplat."
"Till" | Out-File $SPCStatusFile
}
#Trigger for Disarmed
ElseIf ($Log -like "*Omrade 1 Huset Frankoppling*")
{
Write-Host "Frånkopplat"
"Från" | Out-File $SPCStatusFile
}
}
#Loop in eternity
Until ($NeverEnd -eq 0)
 
Vi vill skicka notiser för ämnen du bevakar och händelser som berör dig.