Skripte & Variablen verbinden

Moin Moin,

ich bin neu im IP-Symcon Universum.
Habe lange viele gelesen und habe mir eine Basic Licence zugelegt und
teste nun meinen Testaufbau.

Nun stehe ich etwas auf dem Schlauch, habe schon versucht über die Suchfunktion einige Hilfe zu finden aber irgendwie
nicht das ich brauche oder ich verstehe das noch nicht :banghead:

Ich versuche nun ein Multiroom Audio System aufzubauen.
Meine Insperation Multiroom Audio mit dem XAP800
ist das.
Habe alles soweit aufgebaut und kann auch über fest eingestelle Variablen Quelle wechseln
und das Volumen ändern.

Mein Fragen :

Wie kann ich in der WebFront jetzt die Variablen aus dem Skript verbinden und diese auch Bedienbar machen.
Volumen ist bei mir immer nur Anzeigbar nicht bedienbar.
Die Anwahl der Quellen soll über drei Kategorieren erfolgen:

  • Büro : Squezz 1 / Squezz 2 / TV / AUS
  • Schlafzimmer : Squezz 1 / Squezz 2 / TV / AUS
  • Badezimmer: Squezz 1 / Squezz 2 / TV / AUS

Vielleicht kann mir dort einer eine Hilfe Stellung geben.

Zu mir ich bin Industrie Programmieren kenne mich mit S7 , Codesys und Grundsyntax von C++ aus aber in PHP bin ich ziemlicher Neuling.

Vielen dank im Voraus.

Suche mal nach Variablenprofil und Aktionsskript :slight_smile:

paresy

Bin nun ein ganes Stück weitergekommen.
Habe bloß noch ein kleines Problem, Ich bekomme beim Anklicken in der Webfront ein Fehlermeldung.
Im Log in der Verwaltungskonsolte steht nix.

Ob ich jetzt alles richtig verwendet habe ist die andere Frage.

Aber es klappt erstmal schon mal ziemlich gut :smiley:

Ein schönes Wochenende

Ich weis ja nicht wie Du genau die Squeezebox steuerst. Aber wenn Du das Squeezebox Modul nutzen solltest, ist es zielführender einfach einen Link auf die Variable zu setzten die Du an der Stelle im Webfront angezeigt haben willst, das spart Dir Arbeit und verbraucht auch nicht zusätzlich Variablen.

also die Squezzbox läufen derzeit jeweils zwei Raspberry pi.
Der Audioausgang geht dann auf eine Audiomatrix XAP800 von Genter.
DIe Matrix steuer ich über RS232.
In dem einen Bild sieht man das ich für die einzelnen Räume die Quellen wählen kann.
Die Steuerung der Squezzbox läuft über eine seperaten Webfrontseite.
Es funktioniert auch alles soweit, wie ich mir das Vorstelle.
Problem ist nur das ich wie in Bild 1 zu sehen die Skriptausgabe (Fehler) immmer in der Webfront angezeit bekomme.

Habe für die Anwahl im Hauptskript der Matirx eine Aktion eingefüht die mir die Variable übergibt und dann die nötige Funktion aufruft.

:slight_smile:

So bin jetzt ein ganzes Stück weitergekommen, danke schon mal für die Infos.

Nun stehe ich vor neuen Problemen:

Wie ich im ersten Beitrag geschrieben habe, gibt es eine Anwahl der Quellen in der Webfront. Die Squezzeboxen laufen über das Modul von Null-Chan.
Nun habe ich auch eine Steuerung über externe Taster integriert, d.h. ich habe Gira 6-Fach Taster angeschlossen an einer Wagoeingangskarte und LED´s der Taster an einer DO.
Das Programm im Codesys ist alles soweit fertig und läuft auch.
Nun hatte ich bis jetzt alles in einem großen Skript gepackt, welches ich auch erstmal zyklisch durchlaufen lassen habe mit einem Zeitintervall von 1 sec.
Das hat leider zur Folge das ich die Taster länger drücken muss damit ich auch direkt den Durchlauf des Skriptes erwische.

Vielleicht gibt es dort elegante Wege das ich aus beiden Richtungen, also bei Änderungen im Webfront und durch Änderungen in der Wago ein Skript starten kann.

Bei Unverständlichkeit oder Codeeinsicht, bitte melden :smiley:

Und sonst einen schönen Start ins Wochenende


Nun hatte ich bis jetzt alles in einem großen Skript gepackt, welches ich auch erstmal zyklisch durchlaufen lassen habe mit einem Zeitintervall von 1 sec. Das hat leider zur Folge das ich die Taster länger drücken muss damit ich auch direkt den Durchlauf des Skriptes erwische.

Regel Nummer 1 in IP-Symcon: Niemals Skripte zyklisch laufen lassen um irgendetwas auf einen Status abzufragen.

Wir haben für sowas „Ausgelöste Ereignissen“. Du kannst dein Skript einfach starten, sobald du den Taster drückst.

paresy

Das zyklische durchlaufen mache ich auch nur in der Testphase, in der ich viele Probiere und öfter mal variablen geändert habe.
Bin auch im Gedanken dabei die Skripte aufzuteilen und habe es auch schon als Ereignisse an einen Taster eingebunden.
Nun wird aber in dem Skript auch noch Variablen gesetzt bzw. rückgesetzt wenn ich z.b. Pause am Squezzeplayer setzt um das an den Tastern zur Anzeige zu bringen.

function Steuerung()
{
$var_in=GetValueInteger(44514 /*[Audiomatrix\Steuerung_Taster\Value]*/);
$bit=array();
for ($i=15;$i>=0;$i--)
{
	
	$bit[$i]=($var_in >> $i) & 1;
	
}

$IPS_Play=$bit[0];
$IPS_Pause=$bit[1];
$IPS_Zurueck=$bit[2]; 
$IPS_Vor=$bit[3];
$TA_Play=$bit[4];
$TA_Pause=$bit[5];
$TA_Vor=$bit[6];
$TA_Zurueck=$bit[7];

IF (GetValueInteger(57420 /*[Audiomatrix\Büro\Quelle_wählen]*/)==2)
{
	IF (GetValue(39199 /*[Timo Squezzebox\Timo\Status]*/)==2)
	{$IPS_Play=True;}
	else
	{$IPS_Play=False;}	
	if (GetValue(39199 /*[Timo Squezzebox\Timo\Status]*/)==3)
	{$IPS_Pause=True;}
	Else
	{$IPS_Pause=false;}
	if (GetValue(39199 /*[Timo Squezzebox\Timo\Status]*/)==0)
	{$IPS_Zurueck=True;}
	else
	{$IPS_Zurueck=false;}
	if (GetValue(39199 /*[Timo Squezzebox\Timo\Status]*/)==4)
	{$IPS_Vor=True;}
	else
	{$IPS_Vor=false;}

IF ($TA_Play == True)
{

SetValueInteger(39199 /*[Timo Squezzebox\Timo\Status]*/, 2);
}
IF ($TA_Pause == True)
{
SetValueInteger(39199 /*[Timo Squezzebox\Timo\Status]*/, 2);
}
IF ($TA_Vor == True)
{
SetValueString(34419 /*[Timo Squezzebox\Timo\BufferOUT]*/, "Next");

}
IF ($TA_Zurueck == True)
{
SetValueInteger(39199 /*[Timo Squezzebox\Timo\Status]*/, 4);
}
}


$bit[0]=$IPS_Play;
$bit[1]=$IPS_Pause;
$bit[2]=$IPS_Zurueck;
$bit[3]=$IPS_Vor;
$bit[4]=$TA_Play;
$bit[5]=$TA_Pause;
$bit[6]=$TA_Vor;
$bit[7]=$TA_Zurueck;

$var_in=0;

for ($i=0;$i<=15;$i++)
{
	
	$var_in += $bit[$i] << $i;
	
}

ModBus_WriteRegisterWord(14678 /*[Audiomatrix\Steuerung_Taster]*/, $var_in);

}

UPS…

da das war der Falsche Code…

function Steuerung()
{
$var_in=GetValueInteger(44514 /*[Audiomatrix\Steuerung_Taster\Value]*/);
$bit=array();
for ($i=15;$i>=0;$i--)
{
	
	$bit[$i]=($var_in >> $i) & 1;
	
}

$IPS_Play=$bit[0];
$IPS_Pause=$bit[1];
$IPS_Zurueck=$bit[2]; 
$IPS_Vor=$bit[3];
$TA_Play=$bit[4];
$TA_Pause=$bit[5];
$TA_Vor=$bit[6];
$TA_Zurueck=$bit[7];

{$IPS_Play=False;}	
{$IPS_Pause=false;}
{$IPS_Zurueck=false;}
{$IPS_Vor=false;}

IF (GetValueInteger(57420 /*[Audiomatrix\Büro\Quelle_wählen]*/)==2)
{
	IF (GetValue(39199 /*[Timo Squezzebox\Timo\Status]*/)==2)
	{$IPS_Play=True;}
	else
	{$IPS_Play=False;}	
	if (GetValue(39199 /*[Timo Squezzebox\Timo\Status]*/)==3)
	{$IPS_Pause=True;}
	Else
	{$IPS_Pause=false;}
	if (GetValue(39199 /*[Timo Squezzebox\Timo\Status]*/)==0)
	{$IPS_Zurueck=True;}
	else
	{$IPS_Zurueck=false;}
	if (GetValue(39199 /*[Timo Squezzebox\Timo\Status]*/)==4)
	{$IPS_Vor=True;}
	else
	{$IPS_Vor=false;}

IF ($TA_Play == True)
{
LSQ_Play(14308 /*[Timo Squezzebox\Timo]*/);
}
IF ($TA_Pause == True)
{
LSQ_Pause(14308 /*[Timo Squezzebox\Timo]*/);
}
IF ($TA_Vor == True)
{
LSQ_NextButton(14308 /*[Timo Squezzebox\Timo]*/);
}
IF ($TA_Zurueck == True)
{
LSQ_PreviousButton(14308 /*[Timo Squezzebox\Timo]*/);
}
}


$bit[0]=$IPS_Play;
$bit[1]=$IPS_Pause;
$bit[2]=$IPS_Zurueck;
$bit[3]=$IPS_Vor;
$bit[4]=$TA_Play;
$bit[5]=$TA_Pause;
$bit[6]=$TA_Vor;
$bit[7]=$TA_Zurueck;

$var_in=0;

for ($i=0;$i<=15;$i++)
{
	
	$var_in += $bit[$i] << $i;
	
}

ModBus_WriteRegisterWord(14678 /*[Audiomatrix\Steuerung_Taster]*/, $var_in);

}