Powershell Webbserver med SMS funktion

Powershell webbserver för att skicka sms och logga data.

Uppstart
När scriptet startas visas följande information i Powershell. dvs information om hur du anropar scriptet.

Jag har nu färdigställt V1.0 av scriptet jag själv kör för loggning och utskick av SMS. Det scriptet gör är att skapa en webbserver som tar emot och behandlar http kommandon. Detta gör att allt som kan surfa kan skicka information till webbservern.

Vi har även skrivit en större modul för att kunna scripta direkt mot Vera och Telldus Znet Lite

Bland annat har jag kompletterat min Vera Lite att skicka sms och logga information via den här webbservern. Jag har konfigurerat några av mina ESP8266 och Arduinos att skicka SMS via scriptet med.

Fördelen med detta är att jag nu har 100% kontroll och bestämmer precis vad som ska hända och när det ska hända.

Vad behöver man göra för att de ska fungera???  Starta ”PowerShell_ISE.exe” öppna scriptet och tryck på ”F5”

StartaScriptet
Detta är allt som behövs för att starta servern. Inget SMS modem behövs för att själva scriptet ska fungera. Det kan behöva göras ändringar i brandväggen på klienten.

 

Nuvarande version 1.0 släpptes 2016-04-06

  • Servern klarar att skicka sms med hjälp av 3g modem (Guide på modem konfiguration)
  • Loggning sker till en central fil samt separata filer
  • Uppläsning av loggfiler från hårddisken till klienter i tabellform.

Det går att ladda ner scriptet via våran GITHUB

3g modem som nyttjas för att skicka sms
3g modem som nyttjas för att skicka sms

Konfiguration

Börja med att ladda hem scriptet från våran GITHUB

skapa en mapp på lämpligt ställe och spara scriptet där. Skapa sedan en undermapp dit du vill att loggarna ska sparas.

Om det ännu inte kört några PowerShell script på datorn kan det behöva göras några ändringar för att tillåta detta.

Allt som behövs för att detta ska fungera är att skriva:

Set-ExecutionPolicy RemoteSigned

Raden ovan tillåter Powershell att köra script lokalt på klienten.

  • $port=54320   – Ange port du vill att din klient ska lyssna på.
  • $serverIP=”127.0.0.1” – Ange IP-adress du vill att klienten ska lyssna på.
  • $COMPort=”COM3”  – Ange vilken port du har SMS modemet på
  • $loggpath = ”C:\temp\Loggar”  – Ange vart du vill att alla loggar ska sparas.

Genom att ändra $verbosePreference till ”Continue” istället för ”SilentlyContinue” går det att få mer information.

# Parametrar
param ($port=54320,$serverIP="127.0.0.1",$ComPort="COM3",[int]$ModemSpeed=9600,$loggpath = "C:\Temp\Loggar")
$VerbosePreference = "silentlyContinue"

 

Brandväggsregler

Tänk på att servern där scriptet körs måste få ett undantag skapa i brandväggen.

Firewall
Genom att skriva ”firewall” i startfältet dyker följande ”Windows-brandväggen med avancerad säkerhet”
# Genom att köra följande rad i Powershell V5.0 eller nyare lägger du till ett undantag för porten du vill ha din server på. Tänk på att köra powershell.exe som administratör!
[int]$DinPort = 54320
[string]$RegelNamn = "Automatiserar-Webbserver"
New-NetFirewallRule -DisplayName $RegelNamn -Direction Inbound -LocalPort $DinPort -Protocol TCP -Action Allow

 

Logga data

För att logga data till webbservern behöver klienten skicka följande rad: ”http://DittIP:54320/?LOGGA/ValfriText/MinSensorNR4/27,5”

  • MinSensorNR4    : Detta är namnet på filen som kommer att skapas i loggmappen.  Samt namnet på sensorn i loggfilen.
  • 27,5   : Följande värde är bra ett exempel på vad som kan skickas in som värde.
LoggaDataTillServern
För att skicka data till Powershell Webbservern skriver följande: http://DittIP:54320/?LOGGA/ValfriText/MinSensorNR4/27,5 MinSensorNR4 = id som sensorn ska sparas till. 27,5 = värdet som ska loggas.

 

 

För att läsa informationen via http

Alla kommandon som skickas in till webbservern sparas i en filstruktur.

Följande filer har skapats av webbservern.
Följande filer har skapats av webbservern.
  • Data.log  – Innehåller informationen om alla ”sensorer” som sparats.
  • Scriptinfo.log – Innehåller all information om klienter som skickat kommandon.
  • Sensor1.log – Loggad information om en sensor kallad ”Sensor1
  • Sensor2.log – Loggad information om en sensor kallad ”Sensor2
  • AnnanSensor3.log – Loggad information om en sensor kallad ”AnnanSensor3

 

Kommandon som stöds som sista del i http kommandot:

  • Tabel
  • ALL
  • Last

Genom att skriva ”http://DittIP:54320/?readlog/Demo/DATA/tabel” laddas data in från filen ”Data.log”

ReadLogfile
Med ett http kommando går det nu att hämta all information från loggfilen.

För att enbart ladda information om Sensor2 skriver jag följande:

http://DittIP:54320/?readlog/Demo/Sensor2/tabel

för att enbart ladda information om en viss sensor anges detta i URL:en
för att enbart ladda information om en viss sensor anges detta i URL:en

För att läsa sista raden i en fil, exempelvis Data.log. skriver du följande rad:

  • http://DittIP:54320/?readlog/Demo/data/last
För att läsa den sista raden i en loggfil skriver du "LAST" i slutet istället för TABEL
För att läsa den sista raden i en loggfil skriver du ”LAST” i slutet istället för TABEL

Skicka SMS

För att skicka SMS med scriptet behöver du ett modem som klarar att skicka SMS. Jag använder ett Huawei E220 HSDPA modem. Välj motsvarande COM port som visas där i scriptets variabel

Huawei E220 HSDPA modem.
Huawei E220 HSDPA modem.
  • V1.0 – har problem att skicka ÖÄÅ i SMS, någon som har en bra idé på vad som kan tänkas lösa detta?
Om modemet inte svarar korrekt returneras ett "ERROR"
För att skicka SMS: ”Http://DITTIP:54320/?SMS/0701234567/demo” Om modemet inte svarar korrekt returneras ett ”ERROR”
Resultatet vid ett korrekt skickat SMS
Resultatet vid ett korrekt skickat SMS

 

Scene i Vera som skicka SMS vid Larm

För att skicka sms med en scene i vera behöver du bara köra följande rad:

luup.inet.wget("http://DittIP:54320/?SMS/0701234567/Larmet har triggat!")

 

Genom att skapa en scene i Vera som aktiveras när en dörr öppnas och systemet är Away eller Vacation skickas ett sms med Veras egna tjänst. Utöver det har jag även skapat lite LUUP kod som anropar Powershell webbservern.

Scene i vera som skickar sms när larmet aktiveras.
Scene i vera som skickar sms när larmet aktiveras.

Följande kod finns under ”Also, execute the following Luup code:

Luup koden som både skickar sms till två olika telefoner.
Luup koden som både skickar sms till två olika telefoner.

 

Om du väljer att spinna vidare på scriptet och dela det vidare, ge då cred till oss på www.automatiserar.se och länka till bloggen 🙂

 

[poll id=”17″]

Upptäcker du nått som inte fungerar eller har en bra idé på mer som scriptet borde klara skriv det i så fall!

// Ispep