Mischtabelle / 2-Takt-Mix Rechner

Hi zusammen,

nach meinem viel beachteten Taschenrechnerskript gleich noch eins hinterher :banghead:

Habe es endlich geschafft meinen kleinen Schatz/Trabi auszumotten. Leider hatte der Benzinhahn ein Leck und ich musste gleich mal tanken :frowning: Als Zweitakter brauch er aber immer im richtigen Mischungsverhältnis sein Zweitaktöl :confused:

Damit ich beim nächsten mal nicht an der Tankstelle den Taschenrechner bemühen muss, habe ich mal ein kleines Skript geschrieben das für die üblichen Mischungsverhältnisse die notwendige Ölmenge errechnet!

Tuk Tuk
Pitti


<?
################################################################################
# Scriptbezeichnung: Other.MixingCalculator.ips.php
# Version: 1.2.20180729
# Author:  Heiko Wilknitz (@Pitti)
#
# Mischtabelle Benzin / Zweitakt-Öl
# =================================
#
# Dieses Skript errechnet in Abhängikeit der Bezinmenge und des gewählten 
# Mischungsverhältnisses wieviel Zweitaktöl zugegeben werden muss.
#
# Installation:
# -------------
#
# Dieses Skript richtet automatisch alle nötigen Objekte bei manueller
# Ausführung ein. Eine weitere manuelle Ausführung setzt alle benötigten Objekte
# wieder auf den Ausgangszustand.
#
# - Neues Skript erstellen
# - Diesen PHP-Code hineinkopieren
# - Abschnitt 'Konfiguration' den eigenen Gegebenheiten anpassen 
# - Skript Abspeichern
# - Skript Ausführen
# - Erzeugt Variablen ins Webfront hängen!
#
# ------------------------------ Konfiguration ---------------------------------
#
# Benzinmenge je nach Tankvolumen anpassen
#
$min 		= 1;		// von 1 Liter
$max 		= 26; 	// bis 26 Liter (Trabi kann nicht mehr tanken ;-) 
$step 	= 1;  	// ein Liter schritten
$suffix 	= " l";	// l = Liter
#
# Mischungsverhältnisse, kann man auch erweitern oder reduzieren 
#
$mix = array(
	array(18,  "1:18",  "", 0x0000FF),
	array(25,  "1:25",  "", 0x0000FF),
	array(30,  "1:30",  "", 0x0000FF),
	array(33,  "1:33",  "", 0x0000FF),
	array(40,  "1:40",  "", 0x0000FF),
	array(50,  "1:50",  "", 0x0000FF),
	array(60,  "1:60",  "", 0x0000FF),
	array(75,  "1:75",  "", 0x0000FF),
	array(80,  "1:80",  "", 0x0000FF),
	array(100, "1:100", "", 0x0000FF)
);
#
################################################################################

// INSTALLATION
if ($_IPS['SENDER']=='Execute') {
	$pos = 0;
	// Benzinmenge
	$vpn = "Mix.Petrol";
	$vid = CreateVariableByName($_IPS['SELF'], "Benzinmenge", 1);
	CreateProfileInteger($vpn, 'Gauge', '', $suffix, $min, $max, $step, 0, NULL);
	IPS_SetVariableCustomProfile($vid, $vpn);
	IPS_SetVariableCustomAction($vid, $_IPS['SELF']);
	IPS_SetPosition($vid, $pos++);
	SetValue($vid, $max);	
	// Mischungsverhältnis
	$vpn = "Mix.Ratio";
	$vid = CreateVariableByName($_IPS['SELF'], "Mischungsverhältnis", 1);
	CreateProfileInteger($vpn, 'Climate', '', '', 0, 0, 0, 0, $mix);
	IPS_SetVariableCustomProfile($vid, $vpn);
	IPS_SetVariableCustomAction($vid, $_IPS['SELF']);
	IPS_SetPosition($vid, $pos++);
	SetValue($vid, $mix[0][0]);
	// Zweitaktoel
	$vpn = "Mix.Oil";
	$vid = CreateVariableByName($_IPS['SELF'], "Notwendige Ölmenge", 1);
	CreateProfileInteger($vpn, 'Drops', '', ' ml', 0, 0, 0, 0, NULL);
	IPS_SetVariableCustomProfile($vid, $vpn);
	IPS_SetPosition($vid, $pos++);
}
// AKTION VIA WEBFRONT
else if($_IPS['SENDER'] == "WebFront") {
	// Speichern
	SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
	// Daten holen 
	$vid = CreateVariableByName($_IPS['SELF'], "Benzinmenge", 1);
	$petrol = GetValue($vid);
	$vid = CreateVariableByName($_IPS['SELF'], "Mischungsverhältnis", 1);
	$ratio = GetValue($vid);
	$vid = CreateVariableByName($_IPS['SELF'], "Notwendige Ölmenge", 1);
	// Rechnen
	SetValue($vid, (1000*$petrol)/$ratio);
}

# -------------------------------- FUNKTIONEN ----------------------------------

// Erzeugt eine Variable unterhalb {id} mit dem Namen {name} vom Typ [type}
// Existiert die Variable schon wird diese zurückgeliefert.
// Types: 0 = Boolean, 1 = Integer, 2 = Float, 3 = String
function CreateVariableByName($id, $name, $type) 
{
	$vid = @IPS_GetVariableIDByName($name, $id); 
	if($vid===false) {
		$vid = IPS_CreateVariable($type); 
		IPS_SetParent($vid, $id); 
		IPS_SetName($vid, $name); 
	}
	return $vid; 
}

// Erzeugt ein Variablenprofil vom Typ {type} mit Name n{name} 
function CreateProfile($name, $type)
{
	if(!IPS_VariableProfileExists($name)) {
		IPS_CreateVariableProfile($name, $type);
	}
	else {
	$profile = IPS_GetVariableProfile($name);
		if($profile['ProfileType'] != $type)
			throw new Exception("Variable profile type does not match for profile ".$name);
	}
}

// Erzeugt ein Integer-Variablenprofil
function CreateProfileInteger($name, $icon, $prefix, $suffix, $minvalue, $maxvalue, $step, $digits, $asso = NULL)
{
	CreateProfile($name, 1);
	IPS_SetVariableProfileIcon($name, $icon);
	IPS_SetVariableProfileText($name, $prefix, $suffix);
	IPS_SetVariableProfileDigits($name, $digits);
	
	if(($asso !== NULL) && (sizeof($asso) !== 0)){
		$minvalue = 0;
		$maxvalue = 0;
	} 
	IPS_SetVariableProfileValues($name, $minvalue, $maxvalue, $step);
	
	if(($asso !== NULL) && (sizeof($asso) !== 0)){
		foreach($asso as $ass) {
			IPS_SetVariableProfileAssociation($name, $ass[0], $ass[1], $ass[2], $ass[3]);
		}
	}
}
?>