Skip to content

Commit

Permalink
- **NEW**: MQTT Config Tab on device config page #101
Browse files Browse the repository at this point in the history
  - ENHANCEMENT: Only changed config values will be send to the device
  • Loading branch information
reloxx13 committed Jun 24, 2018
1 parent b3bd2b5 commit ad543aa
Show file tree
Hide file tree
Showing 18 changed files with 1,446 additions and 101 deletions.
7 changes: 5 additions & 2 deletions CHANGELOG.md
@@ -1,8 +1,11 @@
# CHANGELOG


## Upcoming
MINOR: style show more btn responsive #145
## Upcoming 1.3.0
- **NEW**: MQTT Config Tab on device config page #101
- ENHANCEMENT: Only changed config values will be send to the device
- MINOR: style show more btn responsive #145


## v1.2.1
**HOTFIX**: Fix edit device #147
Expand Down
190 changes: 190 additions & 0 deletions tasmoadmin/includes/Sonoff.php
Expand Up @@ -194,6 +194,132 @@ public function getNTPStatus( $device ) {
return $status;
}

/**
* @param $ip
*
* @return mixed
*/
public function getFullTopic( $device ) {
$cmnd = "FullTopic";


$status = $this->doRequest( $device, $cmnd );

return $status->FullTopic;
}

/**
* @param $ip
*
* @return mixed
*/
public function getSwitchTopic( $device ) {
$cmnd = "SwitchTopic";


$status = $this->doRequest( $device, $cmnd );

return $status->SwitchTopic;
}

/**
* @param $ip
*
* @return mixed
*/
public function getMqttRetry( $device ) {
$cmnd = "MqttRetry";


$status = $this->doRequest( $device, $cmnd );

return $status->MqttRetry;
}

/**
* @param $ip
*
* @return mixed
*/
public function getTelePeriod( $device ) {
$cmnd = "TelePeriod";


$status = $this->doRequest( $device, $cmnd );

return $status->TelePeriod;
}

/**
* @param $ip
*
* @return mixed
*/
public function getSensorRetain( $device ) {
$cmnd = "SensorRetain";


$status = $this->doRequest( $device, $cmnd );

return $status->SensorRetain;
}

/**
* @param $ip
*
* @return mixed
*/
public function getMqttFingerprint( $device ) {
$cmnd = "MqttFingerprint";


$status = $this->doRequest( $device, $cmnd );

if( empty( $status->MqttFingerprint ) ) {
return "";
}

return $status->MqttFingerprint;
}

/**
* @param $ip
*
* @return mixed
*/
public function getPrefixe( $device ) {
$cmnds = [ "Prefix1", "Prefix2", "Prefix3" ];

$status = new stdClass();
foreach( $cmnds as $cmnd ) {
$tmp = $this->doRequest( $device, $cmnd );
$status->$cmnd = $tmp->$cmnd;
}

unset( $tmp );

return $status;
}

/**
* @param $ip
*
* @return mixed
*/
public function getStateTexts( $device ) {
$cmnds = [ "StateText1", "StateText2", "StateText3", "StateText4" ];

$status = new stdClass();
foreach( $cmnds as $cmnd ) {
$tmp = $this->doRequest( $device, $cmnd );
$status->$cmnd = $tmp->$cmnd;
}

unset( $tmp );

return $status;
}

public function toggle( $device ) {
$cmnd = "Status 0";

Expand Down Expand Up @@ -677,6 +803,70 @@ public function search( $urls = [] ) {

return $result;
}

public function decodeOptions( $options ) {
if( empty( $options ) ) {
return FALSE;
}
$a_setoption = [
//Sonoff-Tasmota\tools\decode-status.py
"Save power state and use after restart",
"Restrict button actions to single, double and hold",
"Show value units in JSON messages",
"MQTT enabled",
"Respond as Command topic instead of RESULT",
"MQTT retain on Power",
"MQTT retain on Button",
"MQTT retain on Switch",
"Convert temperature to Fahrenheit",
"MQTT retain on Sensor",
"MQTT retained LWT to OFFLINE when topic changes",
"Swap Single and Double press Button",
"Do not use flash page rotate",
"Button single press only",
"Power interlock mode",
"Do not allow PWM control",
"Reverse clock",
"Allow entry of decimal color values",
"CO2 color to light signal",
"HASS discovery",
"Do not control Power with Dimmer",
"Energy monitoring while powered off",
"MQTT serial",
"Rules",
"Rules once mode",
"KNX",
"Use Power device index on single relay devices",
"KNX enhancement",
"",
"",
"",
"",
];

if( is_array( $options ) ) {
$options = $options[ 0 ];
}

$decodedOptopns = new stdClass();

$options = intval( $options, 16 );
for( $i = 0; $i < count( $a_setoption ); $i++ ) {
$optionV = ( $options >> $i ) & 1;
$SetOPtion = "SetOption".$i;
$decodedOptopns->$SetOPtion = new stdClass();
$decodedOptopns->$SetOPtion->desc = $a_setoption[ $i ];
$decodedOptopns->$SetOPtion->value = $optionV;
// $decodedOptopns[ $i ] = [
// "desc" => $a_setoption[ $i ],
// "value" => $optionV,
// ];
// debug( $a_setoption[ $i ]." => ".$optionV );
}


return $decodedOptopns;
}
}


3 changes: 1 addition & 2 deletions tasmoadmin/includes/header.php
Expand Up @@ -112,10 +112,9 @@
<link href='<?php echo _RESOURCESURL_; ?>js/jquery-ui/jquery-ui-1.12.1.custom/jquery-ui<?php echo $min; ?>.css'
rel='stylesheet'>

<link href="<?php echo _RESOURCESURL_; ?>css/fontawesome/css/all.css?<?php echo $cacheTag; ?>"
<link href="<?php echo _RESOURCESURL_; ?>css/fontawesome/css/all.css?<?php echo $cacheTag; ?>" rel="stylesheet">
<link href="<?php echo _RESOURCESURL_; ?>css/tablesaw/tablesaw.css" rel="stylesheet">
<link href="<?php echo _RESOURCESURL_; ?>css/tablesaw/tablesaw.stackonly.css" rel="stylesheet">
rel="stylesheet">
<link href='<?php echo _RESOURCESURL_; ?>css/animate.css?<?php echo $cacheTag; ?>' rel='stylesheet'>
<link href='<?php echo _RESOURCESURL_; ?>css/style.css?<?php echo $cacheTag; ?>' rel='stylesheet'>
<link href='<?php echo _RESOURCESURL_; ?>css/mobile.css?<?php echo $cacheTag; ?>' rel='stylesheet'>
Expand Down
8 changes: 7 additions & 1 deletion tasmoadmin/includes/top.php
Expand Up @@ -100,7 +100,7 @@ function __( $string, $category = NULL, $args = NULL ) {
$translated = @__L::$txt( $args );

if( $translated == "" ) {
$translated = $txt;
$translated = $category."::".$string;
// $myfile = fopen( _LANGDIR_."lang_new.ini", "a" ) or die( "Unable to open file!" );
// fwrite( $myfile, $txt."\n" );
// fclose( $myfile );
Expand Down Expand Up @@ -137,3 +137,9 @@ function __( $string, $category = NULL, $args = NULL ) {
die();
}
}

function debug( $data ) {
echo "<pre style='background-color: black; color:green; max-height: 300px; margin:0px; padding: 0px; font-size: 12px;'>";
print_r( $data ); // or var_dump($data);
echo "</pre>";
}
57 changes: 56 additions & 1 deletion tasmoadmin/lang/lang_de.ini
Expand Up @@ -30,7 +30,6 @@ SITE_SELFUPDATE = "SelfUpdate"
START = "Start"
DEVICES_AUTOSCAN = "AutoScan"


[NAVI]
STARTPAGE = "Start"
STARTPAGE_TOOLTIP = "Startseite"
Expand Down Expand Up @@ -180,6 +179,62 @@ CONFIG_AP1 = "AP1"
CONFIG_AP2 = "AP2"
DEVICE = "Modul"

TAB_HL_MQTT = "MQTT"
CONFIG_HL = "Konfiguration"
MQTT_ENABLED = "MQTT aktiviert"
MQTT_HOST = "MQTT Host"
MQTT_HOST_HELP = "Addresse des MQTT Servers (max. 32 Zeichen)"
MQTT_PORT = "MQTT Port"
MQTT_PORT_HELP = "Port Nummer des MQTT Servers (min. 2, max. 32766)"
MQTT_CLIENT = "MQTT Client Name"
MQTT_CLIENT_HELP = "MQTT Name des Moduls (max. 32 Zeichen)"
MQTTFINGERPRINT = "MQTT Fingerprint (nur TLS!)"
MQTTFINGERPRINT_HELP = "20 Leerzeichen Seperierte Bytes (max. 59 Zeichen)"
MQTT_USER = "MQTT Login Benutzername"
MQTT_USER_HELP = "(max. 32 Zeichen, 0 = kein Benutzername)"
MQTT_PASSWORD = "MQTT Login Passwort"
MQTT_PASSWORD_HELP = "(max. 32 Zeichen, 0 = kein Passwort)"
TOPIC = "MQTT Topic"
TOPIC_HELP = "Setzt MQTT UND Button Topic! (max. 32 Zeichen)"
FULLTOPIC = "MQTT FullTopic"
FULLTOPIC_HELP = "(max. 100 Zeichen)"
GROUPTOPIC = "Group Topic"
GROUPTOPIC_HELP = "(max. 32 Zeichen)"
BUTTONTOPIC = "Button Topic"
BUTTONTOPIC_HELP = "(0 = deakivieren, 1 = wie Topic, max. 32 Zeichen)"
SWITCHTOPIC = "Switch Topic"
SWITCHTOPIC_HELP = "(0 = deakivieren, 1 = wie Topic, max. 32 Zeichen)"
MQTTRETRY = "MQTT Retry Timer in Sekunden"
MQTTRETRY_HELP = "MQTT Verbindung wiederversuch Timer (10 bis 32000)"
TELEPERIOD = "TelePeriod in Sekunden"
TELEPERIOD_HELP = "Abstand wann Telemetry an den Server Daten gesendet werden (10 bis 32000, 0 = aus)"
PREFIX1 = "Prefix 1: Befehl"
PREFIX1_HELP = "MQTT Befehl Prefix (max. 10 Zeichen)"
PREFIX2 = "Prefix 2: Status"
PREFIX2_HELP = "MQTT Status Prefix (max. 10 Zeichen)"
PREFIX3 = "Prefix 3: Telemetry"
PREFIX3_HELP = "MQTT Telemetry Prefix (max. 10 Zeichen)"
STATUSTEXT1 = "Status Text: Aus"
STATUSTEXT1_HELP = "(max. 10 Zeichen)"
STATUSTEXT2 = "Status Text: An"
STATUSTEXT2_HELP = "(max. 10 Zeichen)"
STATUSTEXT3 = "Status Text: Schalten"
STATUSTEXT3_HELP = "(max. 10 Zeichen)"
STATUSTEXT4 = "Status Text: Halt"
STATUSTEXT4_HELP = "(max. 10 Zeichen)"
BUTTONRETAIN = "Retain: Button"
BUTTONRETAIN_HELP = ""
POWERRETAIN = "Retain: Power"
POWERRETAIN_HELP = ""
SENSORRETAIN = "Retain: Sensor"
SENSORRETAIN_HELP = ""
SETOPTION2 = "SetOption2: Einheiten"
SETOPTION2_HELP = "Füge Einheit zur Message hinzu"
SETOPTION4 = "SetOption4: Antwort als"
SETOPTION4_HELP = "( Aus = RESULT Topic, An = Befehl Topic)"
SETOPTION10 = "SetOption10: LWT Aktion bei Topic Änderung"
SETOPTION10_HELP = "( Aus = Drop, An = Offline)"


[DEVICE_UPDATE]
UPLOAD_DESCRIPTION = "Bitte wähle eine MINIMAL und dann die normale Firmware
Expand Down
57 changes: 56 additions & 1 deletion tasmoadmin/lang/lang_en.ini
Expand Up @@ -180,7 +180,62 @@ CONFIG_USE_AP = "Use AccessPoint"
CONFIG_AP1 = "AP1"
CONFIG_AP2 = "AP2"
DEVICE = "Device"

CONFIG_HL = "Configuration"

TAB_HL_MQTT = "MQTT"
MQTT_ENABLED = "Enable MQTT"
MQTT_HOST = "MQTT Host"
MQTT_HOST_HELP = "Set MQTT host (max. 32 chars)"
MQTT_PORT = "MQTT Port"
MQTT_PORT_HELP = "MQTT port between (min. 2, max. 32766)"
MQTT_CLIENT = "MQTT Client Name"
MQTT_CLIENT_HELP = "MQTT Name of the Device (max. 32 chars)"
MQTTFINGERPRINT = "MQTT Fingerprint (TLS only!)"
MQTTFINGERPRINT_HELP = "TLS fingerprint as 20 space separated bytes (max. 59 chars)"
MQTT_USER = "MQTT Login Username"
MQTT_USER_HELP = "(max. 32 chars, 0 = disable Username)"
MQTT_PASSWORD = "MQTT Login Password"
MQTT_PASSWORD_HELP = "(max. 32 chars, 0 = disable Password)"
TOPIC = "MQTT Topic"
TOPIC_HELP = "Set MQTT AND Button Topic! (max. 32 chars)"
FULLTOPIC = "MQTT FullTopic"
FULLTOPIC_HELP = "(max. 100 chars)"
GROUPTOPIC = "Group Topic"
GROUPTOPIC_HELP = "(max. 32 chars)"
BUTTONTOPIC = "Button Topic"
BUTTONTOPIC_HELP = "(0 = disable, 1 = same as topic, max. 32 chars)"
SWITCHTOPIC = "Switch Topic"
SWITCHTOPIC_HELP = "(0 = disable, 1 = same as topic, max. 32 chars)"
MQTTRETRY = "MQTT Retry Timer in seconds"
MQTTRETRY_HELP = "Set MQTT connection retry timer (10 to 32000)"
TELEPERIOD = "TelePeriod in seconds"
TELEPERIOD_HELP = "Telemetry Period messages send (10 to 32000, 0 = off)"
PREFIX1 = "Prefix 1: Command"
PREFIX1_HELP = "MQTT Command Prefix (max. 10 chars)"
PREFIX2 = "Prefix 2: State"
PREFIX2_HELP = "MQTT State Prefix (max. 10 chars)"
PREFIX3 = "Prefix 3: Telemetry"
PREFIX3_HELP = "MQTT Telemetry Prefix (max. 10 chars)"
STATUSTEXT1 = "State Text: Off"
STATUSTEXT1_HELP = "(max. 10 chars)"
STATUSTEXT2 = "State Text: On"
STATUSTEXT2_HELP = "(max. 10 chars)"
STATUSTEXT3 = "State Text: Toggle"
STATUSTEXT3_HELP = "(max. 10 chars)"
STATUSTEXT4 = "State Text: Hold"
STATUSTEXT4_HELP = "(max. 10 chars)"
BUTTONRETAIN = "Retain: Button"
BUTTONRETAIN_HELP = ""
POWERRETAIN = "Retain: Power"
POWERRETAIN_HELP = ""
SENSORRETAIN = "Retain: Sensor"
SENSORRETAIN_HELP = ""
SETOPTION2 = "SetOption2: Units"
SETOPTION2_HELP = "Add units to messages"
SETOPTION4 = "SetOption4: MQTT response state as"
SETOPTION4_HELP = "( Off = RESULT Topic, On = Command Topic)"
SETOPTION10 = "SetOption10: LWT action when changing topic"
SETOPTION10_HELP = "( Off = Drop, On = Offline)"

[DEVICE_UPDATE]
UPLOAD_DESCRIPTION = "Please choose the minimal and full firmware.
Expand Down

0 comments on commit ad543aa

Please sign in to comment.