Hallo,
ich versuche mich gerade an der Entwicklung meines ersten LBS. Dieser soll dazu dienen meinen Landroid Mährobotor auszulesen und um ihn zu starten bzw. zu stoppen. Mein Modell ist von 2017, somit ein älteres und ich kann, falls ich es richtig verstanden habe, die Landroid Bridge nicht nutzen.
Auslesen der Werte funktioniert, ich triggere hierfür den LBS am Eingang 1 minütlich.
Am Eingang 2 bzw. 3 möchte ich über eine 1 den Landroid starten oder stoppen.
Dies funktioniert soweit auch aber ich habe das Problem, dass die Eingänge, sobald ich sie mal mit 1 beschrieben habe ja auf diesem Wert bleiben. Sobald jetzt der minütliche Trigger kommt wird der Baustein wieder durchlaufen, es wird geprüft ob Eingang 2 bzw. 3 auf 1 steht und der Befehl wird gesendet. Sprich ich bin jetzt gerade in einer Schleife. Mein Landroid fährt los, bekommt den Stop-Befehl, bekommt wieder den Move-Befehl usw.
Wie kann ich in meinem LBS den Eingang wieder zurücksetzen? Bzw. wie kann das besser anstellen?
Ich habe den LBS mal angehängt. Wie gesagt, ist mein erster und auch nur eine erste schnelle Version von heute nachmittag.
Vielen Dank
Marcus
ich versuche mich gerade an der Entwicklung meines ersten LBS. Dieser soll dazu dienen meinen Landroid Mährobotor auszulesen und um ihn zu starten bzw. zu stoppen. Mein Modell ist von 2017, somit ein älteres und ich kann, falls ich es richtig verstanden habe, die Landroid Bridge nicht nutzen.
Auslesen der Werte funktioniert, ich triggere hierfür den LBS am Eingang 1 minütlich.
Am Eingang 2 bzw. 3 möchte ich über eine 1 den Landroid starten oder stoppen.
Dies funktioniert soweit auch aber ich habe das Problem, dass die Eingänge, sobald ich sie mal mit 1 beschrieben habe ja auf diesem Wert bleiben. Sobald jetzt der minütliche Trigger kommt wird der Baustein wieder durchlaufen, es wird geprüft ob Eingang 2 bzw. 3 auf 1 steht und der Befehl wird gesendet. Sprich ich bin jetzt gerade in einer Schleife. Mein Landroid fährt los, bekommt den Stop-Befehl, bekommt wieder den Move-Befehl usw.
Wie kann ich in meinem LBS den Eingang wieder zurücksetzen? Bzw. wie kann das besser anstellen?
Ich habe den LBS mal angehängt. Wie gesagt, ist mein erster und auch nur eine erste schnelle Version von heute nachmittag.
Vielen Dank
Marcus
PHP-Code:
<??>// @formatter:off
###[DEF]###
[name = Landroid Automower v0.1 ]
[e#1 = Trigger ]
[e#2 trigger = Start ]
[e#3 trigger = Stop ]
[e#4 = IP ]
[e#5 = User #init=admin]
[e#6 = PIN #init=0000]
[e#7 = Log level #init=8 ]
[a#1 = Status]
[a#2 = Batterie %]
[a#3 = Batterie Ladezustand]
[a#4 = Firmware Version]
[v#100 = 0.1 ]
[v#101 = 19000999 ]
[v#102 = Landroid Automower]
[v#103 = 0 ]
###[/DEF]###
###[HELP]###
Changelog:
==========
v0.1: Initial version
###[/HELP]###
// @formatter:on
###[LBS]###
<?php
function LB_LBSID($id) {
if ($E=getLogicEingangDataAll($id))
{
setLogicElementVar($id,103,$E[7]['value']); //set loglevel to #VAR 103
if ($E[1]['refresh']==1 || $E[2]['refresh']== 1 || $E[3]['refresh']==1)
{
callLogicFunctionExec(LBSID,$id);
}
}
}
?>
###[/LBS]###
###[EXEC]###
<?
define("LB_LBSID_STATE", 1);
define("LB_LBSID_BATTERYPERC", 2);
define("LB_LBSID_BATTERYCHARGERSTATE", 3);
define("LB_LBSID_FIRMWAREVERSION", 4);
require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
set_time_limit(3); //Script soll maximal 60 Sekunden laufen
sql_connect();
function logging($id,$msg, $var=NULL, $priority=8)
{
$E=getLogicEingangDataAll($id);
$logLevel = getLogicElementVar($id,103);
if (is_int($priority) && $priority<=$logLevel && $priority>0)
{
$logLevelNames = array('none','emerg','alert','crit','err','warning','notice','info','debug');
$version = getLogicElementVar($id,100);
$lbsNo = getLogicElementVar($id,101);
$logName = getLogicElementVar($id,102) . ' --- LBS'.$lbsNo;
strpos($_SERVER['SCRIPT_NAME'],$lbsNo) ? $scriptname='EXE'.$lbsNo : $scriptname = 'LBS'.$lbsNo;
writeToCustomLog($logName,str_pad($logLevelNames[$logLevel],7), $scriptname." [v$version]:\t".$msg);
if (is_object($var)) $var = get_object_vars($var); // transfer object into array
if (is_array($var)) // print out array
{
writeToCustomLog($logName,str_pad($logLevelNames[$logLevel],7), $scriptname." [v$version]:\t================ ARRAY/OBJECT START ================");
foreach ($var as $index => $line)
writeToCustomLog($logName,str_pad($logLevelNames[$logLevel],7), $scriptname." [v$version]:\t".$index." => ".$line);
writeToCustomLog($logName,str_pad($logLevelNames[$logLevel],7), $scriptname." [v$version]:\t================ ARRAY/OBJECT END ================");
}
}
}
function getValue($valueString, $searchString)
{
$startPos = strpos($valueString, $searchString) + strlen($searchString);
$endPos = strpos($valueString, ',', $startPos)-1;
$value = substr($valueString, $startPos, $endPos-$startPos);
return $value;
}
if ($E=logic_getInputs($id)) {
logging($id,"LBS started");
$ip = $E[4]['value'];
$user = $E[5]['value'];
$pin = $E[6]['value'];
$format = 'http://%s:%d@%s/jsondata.cgi';
$url = sprintf($format, $user, $pin, $ip);
if($E[1]['value'] == 1)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
// state
$stateSearchString = '"state":"';
$stateValue = getValue($data, $stateSearchString);
logging($id, "State: ". $stateValue, NULL, 8);
logic_setOutput( $id, LB_LBSID_STATE, $stateValue );
// perc_batt
$battPercSearchString = '"perc_batt":"';
$battPercValue = getValue($data, $battPercSearchString);
logging($id, "perc_batt: ". $battPercValue, NULL, 8);
logic_setOutput( $id, LB_LBSID_BATTERYPERC, $battPercValue );
// batteryChargerState
$batteryChargerStateSearchString = '"batteryChargerState":"';
$batteryChargerStateValue = getValue($data, $batteryChargerStateSearchString);
logging($id, "batteryChargerState: ". $batteryChargerStateValue, NULL, 8);
logic_setOutput( $id, LB_LBSID_BATTERYCHARGERSTATE, $batteryChargerStateValue );
// versione_fw
$firmwareVersionSearchString = '"versione_fw":"';
$firmwareVersionValue = getValue($data, $firmwareVersionSearchString);
logging($id, "versione_fw: ". $firmwareVersionValue, NULL, 8);
logic_setOutput( $id, LB_LBSID_FIRMWAREVERSION, $firmwareVersionValue );
}
if($E[2]['value'] == 1)
{
logging($id, "Start landroid automower");
$dataArray = array('data' => '[["settaggi",11,1]]');
$jsonData = http_build_query($dataArray);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $jsonData);
$result = curl_exec($ch);
}
if($E[3]['value'] == 1)
{
logging($id, "Stop landroid automower");
$dataArray = array('data' => '[["settaggi",12,1]]');
$jsonData = http_build_query($dataArray);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS, $jsonData);
$result = curl_exec($ch);
}
logging($id,"LBS stopped");
}
sql_disconnect();
?>
###[/EXEC]###
Kommentar