<?php

// Script zur Anzeige von Temperatur und Luftfeuchtigkeit auf dem 4x7 Display Bricklet
// Alle Bricklets sind Version 2.0
//
// Teile des Scriptes stammen aus der Tinkerforge-Doku, daher die Mehrsprachigkeit
//
// Wird dieses Script als Crontab, welches zu jeder vollen Minute ausgefuehrt wird, eingerichtet, 
// erfolgt die Anzeige beider Werte im 30sek-Wechsel.
//
// 07/2022 by Baddy0815

require_once('Tinkerforge/IPConnection.php');
require_once('Tinkerforge/BrickletSegmentDisplay4x7V2.php');
require_once('Tinkerforge/BrickletTemperatureV2.php');
require_once('Tinkerforge/BrickletHumidityV2.php');

use Tinkerforge\IPConnection;
use Tinkerforge\BrickletSegmentDisplay4x7V2;
use Tinkerforge\BrickletTemperatureV2;
use Tinkerforge\BrickletHumidityV2;

const HOST = '127.0.0.1';
const PORT = 4223;
const UID_DISP = 'XYZ'; // Change to your Segment Display 4x7 Bricklet UID
const UID_TEMP = 'ZYX'; // Change to your Temperature Bricklet UID
const UID_HUM = 'xYZ'; // Change XYZ to the UID of your Humidity Bricklet 2.0

$ipcon = new IPConnection(); // Create IP connection
$sd = new BrickletSegmentDisplay4x7V2(UID_DISP, $ipcon); // Create device object
$t = new BrickletTemperatureV2(UID_TEMP, $ipcon); // Create device object
$h = new BrickletHumidityV2(UID_HUM, $ipcon); // Create device object

$ipcon->connect(HOST, PORT); // Connect to brickd
// Don't use device before ipcon is connected

// Get current temperature (unit is °C/100)
$temperature = $t->getTemperature();

// Zerlege die ausgegebene Temperatur und setze Variablen
$DIGIT0 = $temperature/1000 % 10;
$DIGIT1 = $temperature/100 % 10;
$DIGIT2 = $temperature/10 % 10;

// Setze volle Helligkeit der Anzeige
$sd->setBrightness(7);

//Display leeren
$sd->setNumericValue(array(-1, -1, -1, -1));
$sd->setSelectedSegment(7, FALSE);
$sd->setSelectedSegment(15, FALSE);
$sd->setSelectedSegment(32, FALSE);
$sd->setSelectedSegment(33, FALSE);
$sd->setSelectedSegment(23, FALSE);
$sd->setSelectedSegment(31, FALSE);
$sd->setSelectedSegment(34, FALSE);

//Ziffern der Temperatur anzeigen
$sd->setNumericValue(array($DIGIT0, $DIGIT1, $DIGIT2, -1));

//Kurze Verzoegerung damit der vorherige Befehl sicher verarbeitet ist
usleep(250*1000);

//Punkt und Grad
$sd->setSelectedSegment(15, TRUE);
$sd->setSelectedSegment(24, TRUE);
$sd->setSelectedSegment(25, TRUE);
$sd->setSelectedSegment(29, TRUE);
$sd->setSelectedSegment(30, TRUE);

//Trennen
$ipcon->disconnect();

//30 Sek. Pause
usleep(30000000);

$ipcon->connect(HOST, PORT); // Connect to brickd
// Don't use device before ipcon is connected

$humidity = $h->getHumidity();

//Display leeren
$sd->setNumericValue(array(-1, -1, -1, -1));
$sd->setSelectedSegment(7, FALSE);
$sd->setSelectedSegment(15, FALSE);
$sd->setSelectedSegment(32, FALSE);
$sd->setSelectedSegment(33, FALSE);
$sd->setSelectedSegment(23, FALSE);
$sd->setSelectedSegment(31, FALSE);
$sd->setSelectedSegment(34, FALSE);

// Zerlege die ausgegebene Feuchtigkeit und setze Variablen
$DIGIT0 = $humidity/1000 % 10;
$DIGIT1 = $humidity/100 % 10;

$sd->setBrightness(7);

//Luftfeuchtigkeit anzeigen
$sd->setNumericValue(array(-1, -1, $DIGIT0, $DIGIT1));

//Kurze Verzoegerung damit der vorherige Befehl sicher verarbeitet ist
usleep(250*1000);

// ergänze LF
$sd->setSelectedSegment(3, TRUE);
$sd->setSelectedSegment(4, TRUE);
$sd->setSelectedSegment(5, TRUE);
$sd->setSelectedSegment(8, TRUE);
$sd->setSelectedSegment(12, TRUE);
$sd->setSelectedSegment(13, TRUE);
$sd->setSelectedSegment(14, TRUE);

$ipcon->disconnect();

?>
