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.
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.
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).
5. Prova nu att larma på ett område. Om allt funkar som det ska så bör du få upp nåt liknande.
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.
Här väljer jag användaren SYSTEM
Add argument: -file C:\SPC\Powershell\SPCSerial.ps1
I Switchking har jag en datakälla som läser filen C:\SPC\SPCStatusFile.txt (angiven i scriptet ovan)
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!
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.
Inloggade ser högupplösta bilder
Logga in
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.
Inloggade ser högupplösta bilder
Logga in
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).
5. Prova nu att larma på ett område. Om allt funkar som det ska så bör du få upp nåt liknande.
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.
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
Här väljer jag användaren SYSTEM
Inloggade ser högupplösta bilder
Logga in
Skapa konto
Gratis och tar endast 30 sekunder
Add argument: -file C:\SPC\Powershell\SPCSerial.ps1
Inloggade ser högupplösta bilder
Logga in
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)
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!
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
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
Husägare
· Skåne
· 1 471 inlägg
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.
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.fredrik.johansson skrev:
Husägare
· Skåne
· 1 471 inlägg
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.JakeMan skrev:
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. 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 trofredrik.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.
Medlem
· Västernorrland
· 521 inlägg
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.JakeMan skrev:Inte min mening alls att vara glödjedödare, ska strax till att koppla in mitt SPC4320 så detta hade varit trevligt. 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
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)
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)
Liknande trådar
-
Sms-inaränning för Siemens spck 420
Villalarm & Hemautomation -
tas bort. löst... Siemens SPC 4300 - Kunde ej ansluta till central
Villalarm & Hemautomation -
Säljes - Inbrottslarmcentral SPC siemens 4320 + tillbehör Stockholm
Säljes, Uthyres & Skänkes -
Tips: Billiga Siemens Entro + SPC-prylar
Villalarm & Hemautomation -
Prisjämförelse larmsystem Siemens SPC vs Z-Wave
Villalarm & Hemautomation