Page 1 of 1

Styra domoticz enheter från nexahome

Posted: Fri Mar 17, 2023 9:45 am
by XamDam
Om jag klistrar in denna url i en webläsare så tänder jag en lampa kopplad via z-wave i domoticz:

http://192.168.0.253:8080/json.htm?type ... itchcmd=On

och

http://192.168.0.253:8080/json.htm?type ... tchcmd=Off

släcker samma lampa.

Hur får jag det att funka från ett script i nexahome? Jag har ett tidigare script som tar in en fjärrkontroll för att sedan tända och släcka lampor som ser ut så här:

if (deviceIsOn("46") && !executedByCmd()) {
echo("Nu är det kväll");
deviceOn("203");
deviceOn("13");
deviceOn("33");
deviceOn("36");
deviceOn("37");
}

if (deviceIsOff("46") && !executedByCmd()) {
echo("Nu är det sovdags");
deviceOff("203");
deviceOff("13");
deviceOff("33");
deviceOff("36");
deviceOff("37");
}

Hur lägger man till den där jsonAPI grejen i scriptet.

Tack på förhand

Re: Styra domoticz enheter från nexahome

Posted: Fri Mar 17, 2023 9:45 am
by hekj
XamDam wrote:Om jag klistrar in denna url i en webläsare så tänder jag en lampa kopplad via z-wave i domoticz:

http://192.168.0.253:8080/json.htm?type ... itchcmd=On

och

http://192.168.0.253:8080/json.htm?type ... tchcmd=Off

släcker samma lampa.

Hur får jag det att funka från ett script i nexahome?
Hämta följande fil och lägg ner den i NexaHome foldern.
http://nexahome.se/BshAddOn.jar

Testa sedan att exekvera en bsh fil med följande innehåll.

turn_on_06.bsh

Code: Select all

addClassPath("C:/apps/nexahome/BshAddOn.jar");
cmd_on="http://192.168.0.253:8080/json.htm?type=command&param=switchlight&idx=06&switchcmd=On";
page = BshAddOn.fetchWebContent(cmd_on, null, null);
if (page != null) {
   echo(page);
}

Re: Styra domoticz enheter från nexahome

Posted: Fri Mar 17, 2023 9:45 am
by XamDam
Tack, detta verkar som om det funkar ok. Det enda kruxet verkar vara att i loggfilerna på Domoticz så verkar det som om det skickas uppemot 6 st tillslag vid varje tillfälle.
Så här ser switchloggen ut:
2016-02-08 15:59:21 On
2016-02-08 15:59:20 On
2016-02-08 15:59:19 On
2016-02-08 15:59:13 On
2016-02-08 15:59:12 On
2016-02-08 15:59:11 On
2016-02-08 09:16:04 On
2016-02-08 09:16:04 On
2016-02-08 09:16:04 On
2016-02-07 23:36:04 Off
2016-02-07 23:36:04 Off
2016-02-07 23:36:03 Off
2016-02-07 23:32:06 Off
2016-02-07 23:32:06 Off
2016-02-07 23:32:06 Off
2016-02-07 23:32:05 Off
2016-02-07 15:56:18 On
2016-02-07 15:56:18 On
2016-02-07 15:56:16 On
2016-02-07 15:56:13 On
2016-02-07 15:56:13 On
2016-02-07 15:56:11 On

Det jag gjort är att jag skapat ett antal dummymottagare i tellduscenter och styr dom med nexahome. När en lampa tänds så utförs följande script,

addClassPath("C:/nexahome/BshAddOn.jar");

echo("Script 53");

if (deviceIsOn("53") && !executedByCmd() ) {
echo("Nu är det kväll");
page = BshAddOn.fetchWebContent("http://192.168.0.253:8080/json.htm?type ... itchcmd=On", null, null);
}

if (deviceIsOff("53") && !executedByCmd()) {
echo("Nu är det sovdags");
page = BshAddOn.fetchWebContent("http://192.168.0.253:8080/json.htm?type ... tchcmd=Off", null, null);
}


Detta funkar men som sagt så verkar det som om det skickas cirka 6 ggr varje gång. Det är lika på alla mina 14 mottagare.

Tips och råd mottages tacksamt då jag gillar nexahome bättre än domoticz när det gäller dygnstimerfunktionerna.

Re: Styra domoticz enheter från nexahome

Posted: Fri Mar 17, 2023 9:45 am
by hekj
XamDam wrote:Tack, detta verkar som om det funkar ok. Det enda kruxet verkar vara att i loggfilerna på Domoticz så verkar det som om det skickas uppemot 6 st tillslag vid varje tillfälle.
...
Det jag gjort är att jag skapat ett antal dummymottagare i tellduscenter och styr dom med nexahome. När en lampa tänds så utförs följande script,

Code: Select all

addClassPath("C:/nexahome/BshAddOn.jar");

echo("Script 53");

if (deviceIsOn("53") && !executedByCmd() ) {
   echo("Nu är det kväll");
   page = BshAddOn.fetchWebContent("http://192.168.0.253:8080/json.htm?type=command&param=switchlight&idx=16&switchcmd=On", null, null);
}

if (deviceIsOff("53") && !executedByCmd()) {
   echo("Nu är det sovdags");
   page = BshAddOn.fetchWebContent("http://192.168.0.253:8080/json.htm?type=command&param=switchlight&idx=16&switchcmd=Off", null, null);
}

Detta funkar men som sagt så verkar det som om det skickas cirka 6 ggr varje gång. Det är lika på alla mina 14 mottagare.

Tips och råd mottages tacksamt då jag gillar nexahome bättre än domoticz när det gäller dygnstimerfunktionerna.
Kolla på nedanstående bsh script, jag har lagt in en utskrift av getExecutedBy() samt ändrat till executedByEvent().

Code: Select all

addClassPath("C:/nexahome/BshAddOn.jar");

echo("Script 53 " + getExecutedBy());

if (deviceIsOn("53") && executedByEvent()) {
   echo("Nu är det kväll");
   page = BshAddOn.fetchWebContent("http://192.168.0.253:8080/json.htm?type=command&param=switchlight&idx=16&switchcmd=On", null, null);
}

if (deviceIsOff("53") && executedByEvent()) {
   echo("Nu är det sovdags");
   page = BshAddOn.fetchWebContent("http://192.168.0.253:8080/json.htm?type=command&param=switchlight&idx=16&switchcmd=Off", null, null);
}

Re: Styra domoticz enheter från nexahome

Posted: Fri Mar 17, 2023 9:45 am
by XamDam
Jag fick lägga till kontroll på om jag styrde manuellt också så även ett klick skulle funka från gui. Nu funkar det och inga dubbletter av till och frånslag i loggfilerna på domoticz.

Finns det ytterligare metoder att använda i scripten förutom de som finns i manualen + dessa två i scripten?

Re: Styra domoticz enheter från nexahome

Posted: Fri Mar 17, 2023 9:45 am
by hekj
XamDam wrote:Jag fick lägga till kontroll på om jag styrde manuellt också så även ett klick skulle funka från gui. Nu funkar det och inga dubbletter av till och frånslag i loggfilerna på domoticz.

Finns det ytterligare metoder att använda i scripten förutom de som finns i manualen + dessa två i scripten?
String EXECUTED_BY_COMMAND = "C";
String EXECUTED_BY_EVENT = "E";
String EXECUTED_BY_TIMER = "T";
String EXECUTED_BY_UPDATE = "U";
String EXECUTED_BY_WEB = "W";
String EXECUTED_BY_BSH = "B";
String EXECUTED_BY_MENUITEM = "I";
String EXECUTED_BY_START = "S";
String EXECUTED_BY_MODE = "M";
String EXECUTED_BY_ATTRIBUTE = "A";
String EXECUTED_BY_EXCEPTION = "X";
String EXECUTED_BY_POWER = "P";

String executedBy = getExecutedBy();
echo(executedBy);

if (executedByCmd()) {
// do something
}

Det finns 6 st färdiga metoder:

executedByCmd()
executedByEvent()
executedByTimer()
executedByUpdate()
executedByBsh()
executedByWeb()