diff --git a/components/main/einausgaenge/DigitalInputs.tsx b/components/main/einausgaenge/DigitalInputs.tsx index 4753e57..02e72a8 100644 --- a/components/main/einausgaenge/DigitalInputs.tsx +++ b/components/main/einausgaenge/DigitalInputs.tsx @@ -43,11 +43,12 @@ export default function DigitalInputs({ openInputModal, inputRange }: Props) { {input.status ? ( - - ) : ( + ) : ( + )} + {input.label} + state.digitalInputsSlice.inputs.find( + (input) => input.id === Number(selectedInput.id) + ) + ); + + const [invertiert, setInvertiert] = useState(false); + const isDev = process.env.NODE_ENV === "development"; + + useEffect(() => { + if (selectedInput) { + if (isDev) { + const saved = localStorage.getItem(`invertierung_${selectedInput.id}`); + if (saved !== null) { + setInvertiert(parseInt(saved) === 1); + } else { + setInvertiert(selectedInput.invertierung); + } + } else { + setInvertiert(selectedInput.invertierung); + } + } + }, [selectedInput, isDev]); + if (!isOpen || !selectedInput) return null; + const handleInvertierungToggle = async () => { + const neueInvertierung = !invertiert; + + if (process.env.NODE_ENV === "development") { + dispatch( + updateInvertierung({ + id: Number(selectedInput.id), + invertierung: neueInvertierung, + }) + ); + + setInvertiert(neueInvertierung); + } else { + const url = `/CPL?/CPL/SERVICE/empty.acp&DEI${selectedInput.id}=${ + neueInvertierung ? 1 : 0 + }`; + try { + const response = await fetch(url); + if (!response.ok) throw new Error("Fehler beim Senden der Anfrage"); + + dispatch( + updateInvertierung({ + id: Number(selectedInput.id), + invertierung: neueInvertierung, + }) + ); + setInvertiert(neueInvertierung); + } catch (error) { + console.error("Invertierung fehlgeschlagen:", error); + alert("Invertierung konnte nicht geändert werden."); + } + } + }; + //--------------------------------- + + useEffect(() => { + if (reduxInput) { + setInvertiert(reduxInput.invertierung); + } + }, [reduxInput]); + + //--------------------------------- return (
-

+

Details für Eingang {selectedInput.id}

Status:
-
{selectedInput.status === "active" ? "Aktiv" : "Inaktiv"}
+
+ Status: +
+
+ {reduxInput?.status ? "Inaktiv" : "Aktiv"} +
Beschreibung: @@ -26,10 +104,16 @@ export default function InputModal({ selectedInput, closeInputModal, isOpen }) {
{selectedInput.name}
-
+
Invertierung: + {invertiert ? "Ein" : "Aus"} +
-
{selectedInput.invertierung ? "Ein" : "Aus"}
Filterzeit: @@ -56,9 +140,10 @@ export default function InputModal({ selectedInput, closeInputModal, isOpen }) {
{selectedInput.eingangOffline ? "Offline" : "Online"}
+ diff --git a/config/webVersion.ts b/config/webVersion.ts index 5b92307..e010e91 100644 --- a/config/webVersion.ts +++ b/config/webVersion.ts @@ -6,5 +6,5 @@ 2: Patch oder Hotfix (Bugfixes oder kleine Änderungen). */ -const webVersion = "1.6.208"; +const webVersion = "1.6.209"; export default webVersion; diff --git a/public/CPL/SERVICE/de.js b/public/CPL/SERVICE/de.js index 09d6d67..5b70fea 100644 --- a/public/CPL/SERVICE/de.js +++ b/public/CPL/SERVICE/de.js @@ -32,4 +32,9 @@ var de=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; var counter=[0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000]; var flutter=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; +var de=[1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; +var counter=[0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000]; +var flutter=[0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000]; + + */ \ No newline at end of file diff --git a/public/CPLmockData/SERVICE/de.js b/public/CPLmockData/SERVICE/de.js index bf33d38..e29eed4 100644 --- a/public/CPLmockData/SERVICE/de.js +++ b/public/CPLmockData/SERVICE/de.js @@ -1,8 +1,23 @@ // public/CPLmockData/SERVICE/de.js var win_de_state = [ + 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, +]; +// Invertierung -> DEIxx xx = Nr Eingang 1-32 + +var win_de_invert = [ 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]; +/* +✅ Logik für Farbe abhängig von Status + Invertierung: +Anzeige ist rot wenn Status=1 ist. Die Farbe ist nicht abhängig von der Invertierung. +Status Invertierung Anzeige +1 1 🔴 rot +1 0 🔴 rot +0 1 ✅ grün +0 0 ✅ grün +*/ var win_de_label = [ "DE1", "DE2", diff --git a/redux/slices/digitalInputsSlice.ts b/redux/slices/digitalInputsSlice.ts index 70c88d6..4367d9c 100644 --- a/redux/slices/digitalInputsSlice.ts +++ b/redux/slices/digitalInputsSlice.ts @@ -7,6 +7,7 @@ interface DigitalInput { status: boolean; counter: number; flutter: number; + invertierung: boolean; } interface DigitalInputsState { @@ -34,8 +35,19 @@ const digitalInputsSlice = createSlice({ input.status = status; } }, + updateInvertierung: ( + state, + action: PayloadAction<{ id: number; invertierung: boolean }> + ) => { + const { id, invertierung } = action.payload; + const input = state.inputs.find((input) => input.id === id); + if (input) { + input.invertierung = invertierung; + } + }, }, }); -export const { setInputs, updateInputStatus } = digitalInputsSlice.actions; +export const { setInputs, updateInputStatus, updateInvertierung } = + digitalInputsSlice.actions; export default digitalInputsSlice.reducer; diff --git a/services/fetchDigitaleEingaenge.ts b/services/fetchDigitaleEingaenge.ts index 1ad85e7..4c27a3e 100644 --- a/services/fetchDigitaleEingaenge.ts +++ b/services/fetchDigitaleEingaenge.ts @@ -33,6 +33,7 @@ export const fetchDigitaleEingaenge = async () => { status: status === 1, counter: win.win_counter?.[index] || 0, flutter: win.win_flutter?.[index] || 0, + invertierung: win.win_de_invert?.[index] === 1, }) );