Sensor Value och egna sensorer

Moderators: hekj, Telldus

Post Reply
dagalufh
Posts: 12
Joined: Fri Mar 17, 2023 9:45 am

Sensor Value och egna sensorer

Post by dagalufh »

Hej

Jag tänkte försöka mig på att skapa en egen sensor för väderinformation. Likt den som används för motorvärmare fast jag är mer ute efter hur vädret är.
Jag har byggt i både PHP och i vbscript som parsar en xml sida och får fram om det är molnigt, regn, sol eller så beroende på vad jag vill ha för utskrift.
(Det är byggt i både PHP och VBScript just nu då jag har stört kunskaper inom PHP och då är enklast visualisera där :))

Det jag nu funderar på är hur tusan ska man få "sensor path" att köra önskat script eller ens en bat fil och fånga dess utskrift och lagra det i "sensor value"?

Någon som vet hur man till en enkel början bara får en echo från en bat fil att hamna i sensor value? Möjligheterna som detta skulle ge är enorma.
Då skulle det gå att ha en on formula som är = regn # 00:50 t.ex. för att tända lampor 50 tidigare om det är regn ute..

Tack på förhand
Mikael
dagalufh
Posts: 12
Joined: Fri Mar 17, 2023 9:45 am

Re: Sensor Value och egna sensorer

Post by dagalufh »

Fick svar från Henrik via mail om att NexaHome vill ha rena siffror som svar från eventuella bat filer.

Så jag modifierade det hela till såhär:
SensorTest.Bat:

Code: Select all

@echo off
h:\php\php.exe h:\php\scripts\getWeather.php
getWeather.php:

Code: Select all

$FileHandle = fopen("http://weather.yahooapis.com/forecastrss?w=904567","r");
$FileContent = stream_get_contents($FileHandle);
fclose($FileHandle);

$StartValue = strpos($FileContent, "<yweather:condition");
$EndValue = strpos($FileContent, "/>", $StartValue);
$CurrentWeather = strtolower(substr($FileContent, $StartValue, ($EndValue-$StartValue)+2));

// Go through a elseif and return proper keyword.
if (strpos($CurrentWeather, "cloudy") !== false) {
	echo "1";
} elseif (strpos($CurrentWeather, "sunny") !== false) { 
	echo "2";
} else {
	echo "0";
}

Ovan fungerar felfritt! Så nu har jag i formeln i NexaHome:
"= 1 # 00:15"

Funktionen på enheten i eventlistan är "Sensor-".


Så nu finns det här ifall någon annan är intresserad...
dagalufh
Posts: 12
Joined: Fri Mar 17, 2023 9:45 am

Re: Sensor Value och egna sensorer

Post by dagalufh »

Nästa del i detta...

Någon som vet ifall det går att få det såhär:
Tiden för ett event ska styras av sunset och sunrise.
Då är det ju Function Sunset-/+ och Sunrise-/+.
Men går det att få dessa tider justerade baserat på sensor formula?

Jag vill alltså ha två funktioner på en event, att den först hämtar tiden från sunset/sunrise, och sedan kollar mot sensor path/sensor on/off formula.

Går detta?
hekj
Posts: 992
Joined: Fri Mar 17, 2023 9:45 am
Location: Stockholm
Contact:

Re: Sensor Value och egna sensorer

Post by hekj »

dagalufh wrote:Nästa del i detta...

Någon som vet ifall det går att få det såhär:
Tiden för ett event ska styras av sunset och sunrise.
Då är det ju Function Sunset-/+ och Sunrise-/+.
Men går det att få dessa tider justerade baserat på sensor formula?

Jag vill alltså ha två funktioner på en event, att den först hämtar tiden från sunset/sunrise, och sedan kollar mot sensor path/sensor on/off formula.

Går detta?
Du skulle kunna uppdatera NexaHome attribut från ditt php script, i följande tråd så finns det beskrivet hur man gör för att exekvera bsh kommandon via url.

Styra "mode" med fjärrkontroll
http://www.telldus.com/forum/viewtopic.php?f=23&t=4191

Skriv in dina nya attribut i Attributes fältet (Config fliken).

Code: Select all

Regn, Mulet, Molnigt, Soligt
Lägg därefter in events med Function Sunset-/+ och Sunrise-/+ som du villkorar genom att välja ett attribut i '+ Mode/Attr' fältet.
dagalufh
Posts: 12
Joined: Fri Mar 17, 2023 9:45 am

Re: Sensor Value och egna sensorer

Post by dagalufh »

Nu har jag suttit en stund och kikat på detta. Tror att jag fått ordning på det.

Mitt tillvägagångssätt:
Del 1:
Uppdaterade till version 3.7 av NexaHome. :)

Sedan ändrade jag det PHP script som jag använde ovan.
Tillägg på det är:

Code: Select all

if (strpos($CurrentWeather, "Cloudy")) {
	echo "1";
	$FileHandle2 = fopen('http://'.$Serveradress.'/nexahome/?bsh=attribute(%22Molnigt:set%22)',"r");
	$FileContent2 = stream_get_contents($FileHandle2);
	fclose($FileHandle2);
} else {
	echo "0";
	$FileHandle2 = fopen('http://'.$Serveradress.'/nexahome/?bsh=attribute(%22Molnigt:clear%22)',"r");
	$FileContent2 = stream_get_contents($FileHandle2);
	fclose($FileHandle2);
}
Sen i config som Henrik skrivit, lade jag in Molnigt som attribut.
Fick skapa upp en Dummy Sensor med ett event som har sensor som funktion, detta för att kunna ha sensor path kopplat till bat-filen som kör ovan phpscript. (Säkert onödigt långsökt men det är så jag kunde lösa det iallafall så bat-filen körs regelbundet och håller aktivt attribut korrekt.)

På enheterna som jag vill styra:

Två events per handling. Två på, två av.

Code: Select all

device	cmd	HH	MM	function	+ Mode/Attr	- Mode/Attr
1-1		På	01	00	sunset-	Molnigt
1-1		På	00	00	sunset+				Molnigt
1-1		Av	01	00	sunrise+	Molnigt
1-1		Av	00	00	sunrise-				Molnigt
Så rad 1 sätter på-tid en timma före solnedgång OM php scriptet har kört Molnigt:set.
rad 3 sätter av tid till en timma efter soluppgång OM php scriptet har kört Molnigt:set
Är det Molnigt:set så är de andra avaktiverade genom Mode inställning.

Och tvärtom i alla andra väderförhållanden i dagsläget. Ska ju såklart lägga in så det täcker in de väderleker jag önskar och nu när grunden är igång, är det löjligt enkelt att lägga till flera Attribut som kan styras via PHP script.

TACK Henrik till denna lösning, som det ser ut nu verkar det fungera klockrent.


Någon som har några synpunkter på detta? Finns det smidigare sätt eller verkar det bra?
Post Reply