├── .gitignore ├── Changelog_Archiv └── README.markdown ├── DEBUG └── .gitignore ├── Data ├── Entsorgung_2017.txt ├── Entsorgung_2018.txt ├── GBSave.txt └── PIR.txt ├── External ├── Aktor.h ├── Gruenbeck.h ├── LedMain.c ├── Makefile ├── MuellGui.h ├── WetterGui.h ├── dht.h ├── gruenSave.c └── weather │ ├── get_weather_data.h │ └── jsmn.h ├── Frame ├── DrawCorner.c ├── DrawImage.h ├── DrawLine.c ├── DrawNetImage.h ├── DrawSOC.c ├── DrawSkala.c ├── README.markdown ├── font_8x16.c ├── framebuffer.c ├── touch.c ├── touch.h └── touchtest.c ├── GuiMain.c ├── HMGui.h ├── Homematic ├── DATA-PV.hm ├── Display-S10.hm ├── README.markdown └── S10_min-maxSOC_V0.hm ├── Image ├── AktuellImage.ppm ├── Autarkie.ppm ├── BatImage.ppm ├── Batterie │ ├── Auto.ppm │ ├── BatterieLimits.ppm │ ├── Charge.ppm │ ├── Discharge.ppm │ ├── Ist.ppm │ ├── Manuell.ppm │ └── Soll.ppm ├── ChangeImage.ppm ├── Eigenstrom.ppm ├── EinstImage.ppm ├── EpReserve │ ├── Minus10000.ppm │ ├── Minus10000Off.ppm │ ├── Minus2000.ppm │ ├── Minus2000Off.ppm │ ├── Minus500.ppm │ ├── Minus500Off.ppm │ ├── NotRes.ppm │ ├── Plus10000.ppm │ ├── Plus10000Off.ppm │ ├── Plus2000.ppm │ ├── Plus2000Off.ppm │ ├── Plus500.ppm │ ├── Plus500Off.ppm │ ├── Set.ppm │ ├── Tracker1.ppm │ ├── Tracker2.ppm │ ├── maxsw.ppm │ ├── reservesw.ppm │ └── setsw.ppm ├── ExtImage.ppm ├── FunktionImage.ppm ├── GBImage.ppm ├── GB_Logo.ppm ├── GB_Prozent.ppm ├── HMImage.ppm ├── HistoryOff.ppm ├── HomeImage.ppm ├── IdleCharge.ppm ├── IdleDischarge.ppm ├── IdlePeriods.ppm ├── Info │ ├── DeratePercent.ppm │ ├── DeratePower.ppm │ ├── EmsState.ppm │ ├── EpState.ppm │ ├── InstPower.ppm │ ├── Seriennummer.ppm │ └── SwRelease.ppm ├── LangzeitImage.ppm ├── MonitorImage.ppm ├── Muell │ ├── bio.ppm │ ├── feiertag.ppm │ ├── frei.ppm │ ├── gelb.ppm │ ├── glas.ppm │ ├── metall.ppm │ ├── papier.ppm │ ├── rest.ppm │ └── schadstoff.ppm ├── MuellImage.ppm ├── NetImage.ppm ├── NetImageOff.ppm ├── PV_Modul_aktiv.ppm ├── PV_Modul_deaktiv.ppm ├── PviImage.ppm ├── S10Image.ppm ├── SmartImage.ppm ├── Switch │ ├── 0percent.ppm │ ├── 10percent.ppm │ ├── 1Ph.ppm │ ├── 20percent.ppm │ ├── 30percent.ppm │ ├── 3Ph.ppm │ ├── 40percent.ppm │ ├── 50percent.ppm │ ├── 60percent.ppm │ ├── 70percent.ppm │ ├── 80percent.ppm │ ├── 90percent.ppm │ ├── Halt.ppm │ ├── HaltOff.ppm │ ├── Minus.ppm │ ├── Minus10.ppm │ ├── Minus10Off.ppm │ ├── Minus2.ppm │ ├── Minus2Off.ppm │ ├── MinusOff.ppm │ ├── Off.ppm │ ├── On.ppm │ ├── Plus.ppm │ ├── Plus10.ppm │ ├── Plus10Off.ppm │ ├── Plus2.ppm │ ├── Plus2Off.ppm │ ├── PlusOff.ppm │ ├── Send.ppm │ ├── Stop.ppm │ ├── StopOff.ppm │ ├── Weiter.ppm │ └── WeiterOff.ppm ├── SystemInfo.ppm ├── Today.ppm ├── Wallbox.ppm ├── Wallbox │ ├── Autogr.ppm │ ├── Autoor.ppm │ ├── Autosw.ppm │ ├── Car.ppm │ ├── CarConnect.ppm │ ├── CarGrid.ppm │ ├── CarLocked.ppm │ ├── CarMix.ppm │ ├── CarSun.ppm │ ├── Current │ │ ├── 10A.ppm │ │ ├── 11A.ppm │ │ ├── 12A.ppm │ │ ├── 13A.ppm │ │ ├── 14A.ppm │ │ ├── 15A.ppm │ │ ├── 16A.ppm │ │ ├── 17A.ppm │ │ ├── 18A.ppm │ │ ├── 19A.ppm │ │ ├── 20A.ppm │ │ ├── 21A.ppm │ │ ├── 22A.ppm │ │ ├── 23A.ppm │ │ ├── 24A.ppm │ │ ├── 25A.ppm │ │ ├── 26A.ppm │ │ ├── 27A.ppm │ │ ├── 28A.ppm │ │ ├── 29A.ppm │ │ ├── 30A.ppm │ │ ├── 31A.ppm │ │ ├── 32A.ppm │ │ ├── 6A.ppm │ │ ├── 7A.ppm │ │ ├── 8A.ppm │ │ └── 9A.ppm │ ├── Mon_WbError.ppm │ ├── Mon_WbMixOff.ppm │ ├── Mon_WbMixOn.ppm │ ├── Mon_WbSunOff.ppm │ ├── Mon_WbSunOn.ppm │ ├── Netzbl.ppm │ ├── Solaror.ppm │ ├── Wallbox.ppm │ ├── WbError.ppm │ ├── WbMixOff.ppm │ ├── WbMixOn.ppm │ ├── WbSunOff.ppm │ └── WbSunOn.ppm ├── WallboxImage.ppm ├── Wetter │ ├── 01d.ppm │ ├── 01n.ppm │ ├── 02d.ppm │ ├── 02n.ppm │ ├── 03d.ppm │ ├── 03n.ppm │ ├── 04d.ppm │ ├── 04n.ppm │ ├── 09d.ppm │ ├── 09n.ppm │ ├── 10d.ppm │ ├── 10n.ppm │ ├── 11d.ppm │ ├── 11n.ppm │ ├── 13d.ppm │ ├── 13n.ppm │ ├── 50d.ppm │ └── 50n.ppm ├── WetterImage.ppm ├── Yesterday.ppm └── Zahlen │ ├── asw.ppm │ ├── dotsw.ppm │ ├── kwhsw.ppm │ ├── kwsw.ppm │ ├── lmOff.ppm │ ├── percentbl.ppm │ ├── percentsw.ppm │ ├── pf0.ppm │ ├── pf0n.ppm │ ├── pf1.ppm │ ├── pf1n.ppm │ ├── pf2.ppm │ ├── pf2n.ppm │ ├── pf3.ppm │ ├── pf3n.ppm │ ├── pvOff.ppm │ ├── vsw.ppm │ ├── wattbl.ppm │ ├── wattcy.ppm │ ├── wattgr.ppm │ ├── wattor.ppm │ ├── wattsw.ppm │ ├── white.ppm │ ├── whsw.ppm │ ├── wpsw.ppm │ ├── z0bl.ppm │ ├── z0cy.ppm │ ├── z0gr.ppm │ ├── z0or.ppm │ ├── z0sw.ppm │ ├── z1bl.ppm │ ├── z1cy.ppm │ ├── z1gr.ppm │ ├── z1or.ppm │ ├── z1sw.ppm │ ├── z2bl.ppm │ ├── z2cy.ppm │ ├── z2gr.ppm │ ├── z2or.ppm │ ├── z2sw.ppm │ ├── z3bl.ppm │ ├── z3cy.ppm │ ├── z3gr.ppm │ ├── z3or.ppm │ ├── z3sw.ppm │ ├── z4bl.ppm │ ├── z4cy.ppm │ ├── z4gr.ppm │ ├── z4or.ppm │ ├── z4sw.ppm │ ├── z5bl.ppm │ ├── z5cy.ppm │ ├── z5gr.ppm │ ├── z5or.ppm │ ├── z5sw.ppm │ ├── z6bl.ppm │ ├── z6cy.ppm │ ├── z6gr.ppm │ ├── z6or.ppm │ ├── z6sw.ppm │ ├── z7bl.ppm │ ├── z7cy.ppm │ ├── z7gr.ppm │ ├── z7or.ppm │ ├── z7sw.ppm │ ├── z8bl.ppm │ ├── z8cy.ppm │ ├── z8gr.ppm │ ├── z8or.ppm │ ├── z8sw.ppm │ ├── z9bl.ppm │ ├── z9cy.ppm │ ├── z9gr.ppm │ ├── z9or.ppm │ └── z9sw.ppm ├── Makefile ├── README.markdown ├── Rscp ├── AES.cpp ├── AES.h ├── RWData.h ├── RscpProtocol.cpp ├── RscpProtocol.h ├── RscpSet.cpp ├── RscpTags.h ├── RscpTypes.h ├── SocketConnection.cpp ├── SocketConnection.h ├── actionCheckHM.c └── actionCheckHM.h ├── RscpMain.cpp ├── S10history ├── Makefile ├── README.markdown ├── RscpReader.cpp ├── S10history.cpp ├── S10toMysql.pl └── examples │ ├── getYearperDay.sh │ └── getYearperMonth.sh ├── STEPBYSTEP.markdown ├── Watchdog.cpp ├── checkPara.h ├── copyPara.c ├── define.h ├── funktion.h ├── humans.txt ├── parameter.h.temp ├── parameterHM.h.temp ├── screenSave.c ├── screenSaveHM.c ├── sendEmail-v1.56 ├── README └── sendEmail ├── start.c └── stop.c /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .DS_Store 3 | 4 | .metadata/ 5 | RemoteSystemsTempFiles/.project 6 | parameter.h 7 | parameterHM.h 8 | define.h.gch 9 | -------------------------------------------------------------------------------- /DEBUG/.gitignore: -------------------------------------------------------------------------------- 1 | # Verzeichnis wird für die DEBUG Funktion benötigt 2 | * 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /Data/Entsorgung_2017.txt: -------------------------------------------------------------------------------- 1 | 2017 2 | gelb=GelberSack(gelb) 3 | bio=Biomüll(braun) 4 | papier=Papiermüll(blau) 5 | rest=Restmüll(schwarz) 6 | glas=Glassmüll(grün) 7 | metall=Metall(orange) 8 | schadstoff=Schadstoffmobil(rot) 9 | frei=keineTonne(grau) 10 | feiertag=Feiertag(Stern) 11 | 12 | Kalenderwoche Montag Tonne1 Tonne2 Dienstag Tonne1 Tonne2 Mittwoch Tonne1 Tonne2 Donnerstag Tonne1 Tonne2 Freitag Tonne1 Tonne2 Samstag Tonne1 Tonne2 Sonntag Tonne1 Tonne2 13 | KW01 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 14 | KW02 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 15 | KW03 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 16 | KW04 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 17 | KW05 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 18 | KW06 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 19 | KW07 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 20 | KW08 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 21 | KW09 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 22 | KW10 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 23 | KW11 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 24 | KW12 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 25 | KW13 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 26 | KW14 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 27 | KW15 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= feiertag frei Sat= frei frei Sun= frei frei 28 | KW16 Mon= feiertag frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 29 | KW17 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 30 | KW18 Mon= feiertag frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= papier frei Sat= rest frei Sun= frei frei 31 | KW19 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 32 | KW20 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 33 | KW21 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= feiertag frei Fri= frei frei Sat= frei frei Sun= frei frei 34 | KW22 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 35 | KW23 Mon= feiertag frei Tue= bio frei Wed= gelb frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 36 | KW24 Mon= frei frei Tue= frei frei Wed= frei frei Thu= feiertag frei Fri= frei frei Sat= frei frei Sun= frei frei 37 | KW25 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 38 | KW26 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= schadstoff frei Sun= frei frei 39 | KW27 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 40 | KW28 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 41 | KW29 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 42 | KW30 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 43 | KW31 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 44 | KW32 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 45 | KW33 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 46 | KW34 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 47 | KW35 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 48 | KW36 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 49 | KW37 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 50 | KW38 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 51 | KW39 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 52 | KW40 Mon= frei frei Tue= feiertag frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 53 | KW41 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 54 | KW42 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 55 | KW43 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 56 | KW44 Mon= frei frei Tue= feiertag frei Wed= feiertag frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 57 | KW45 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 58 | KW46 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 59 | KW47 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 60 | KW48 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 61 | KW49 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 62 | KW50 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= schadstoff frei Sun= frei frei 63 | KW51 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 64 | KW52 Mon= feiertag frei Tue= feiertag frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 65 | -------------------------------------------------------------------------------- /Data/Entsorgung_2018.txt: -------------------------------------------------------------------------------- 1 | 2018 2 | gelb=GelberSack(gelb) 3 | bio=Biomüll(braun) 4 | papier=Papiermüll(blau) 5 | rest=Restmüll(schwarz) 6 | glas=Glassmüll(grün) 7 | metall=Metall(orange) 8 | schadstoff=Schadstoffmobil(rot) 9 | frei=keineTonne(grau) 10 | feiertag=Feiertag(Stern) 11 | 12 | Kalenderwoche Montag Tonne1 Tonne2 Dienstag Tonne1 Tonne2 Mittwoch Tonne1 Tonne2 Donnerstag Tonne1 Tonne2 Freitag Tonne1 Tonne2 Samstag Tonne1 Tonne2 Sonntag Tonne1 Tonne2 13 | KW01 Mon= frei frei Tue= bio frei Wed= gelb frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 14 | KW02 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 15 | KW03 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 16 | KW04 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 17 | KW05 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 18 | KW06 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 19 | KW07 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 20 | KW08 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 21 | KW09 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 22 | KW10 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 23 | KW11 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 24 | KW12 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 25 | KW13 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= feiertag frei Sat= frei frei Sun= frei frei 26 | KW14 Mon= feiertag frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= papier frei Sat= rest frei Sun= frei frei 27 | KW15 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 28 | KW16 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 29 | KW17 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 30 | KW18 Mon= frei frei Tue= feiertag frei Wed= frei frei Thu= frei frei Fri= papier frei Sat= rest schadstoff Sun= frei frei 31 | KW19 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= feiertag frei Fri= frei frei Sat= frei frei Sun= frei frei 32 | KW20 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 33 | KW21 Mon= feiertag frei Tue= bio frei Wed= gelb frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 34 | KW22 Mon= frei frei Tue= frei frei Wed= frei frei Thu= feiertag frei Fri= papier frei Sat= rest frei Sun= frei frei 35 | KW23 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 36 | KW24 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 37 | KW25 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 38 | KW26 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 39 | KW27 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 40 | KW28 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 41 | KW29 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 42 | KW30 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 43 | KW31 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 44 | KW32 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 45 | KW33 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 46 | KW34 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 47 | KW35 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 48 | KW36 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 49 | KW37 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 50 | KW38 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 51 | KW39 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 52 | KW40 Mon= frei frei Tue= frei frei Wed= feiertag frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 53 | KW41 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 54 | KW42 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 55 | KW43 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 56 | KW44 Mon= frei frei Tue= frei frei Wed= frei frei Thu= feiertag frei Fri= frei frei Sat= schadstoff frei Sun= frei frei 57 | KW45 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 58 | KW46 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= frei frei Sun= frei frei 59 | KW47 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 60 | KW48 Mon= frei frei Tue= frei frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 61 | KW49 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 62 | KW50 Mon= frei frei Tue= frei frei Wed= frei frei Thu= papier frei Fri= rest frei Sat= schadstoff frei Sun= frei frei 63 | KW51 Mon= bio frei Tue= gelb frei Wed= frei frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 64 | KW52 Mon= frei frei Tue= feiertag frei Wed= feiertag frei Thu= frei frei Fri= frei frei Sat= frei frei Sun= frei frei 65 | -------------------------------------------------------------------------------- /Data/GBSave.txt: -------------------------------------------------------------------------------- 1 | 0 2 | 0 3 | 0 4 | -------------------------------------------------------------------------------- /Data/PIR.txt: -------------------------------------------------------------------------------- 1 | 0 2 | -------------------------------------------------------------------------------- /External/Makefile: -------------------------------------------------------------------------------- 1 | CXX ?=g++ 2 | CC ?=gcc 3 | ROOT_LM=LedMain 4 | 5 | all: $(ROOT_LM) 6 | 7 | $(ROOT_LM): clean 8 | $(CC) -O1 LedMain.c ../rpi_ws281x/mailbox.c ../rpi_ws281x/ws2811.c ../rpi_ws281x/pwm.c ../rpi_ws281x/pcm.c ../rpi_ws281x/dma.c ../rpi_ws281x/rpihw.c -o $@ 9 | 10 | clean: 11 | date 12 | -rm $(ROOT_LM) $(VECTOR) 13 | -------------------------------------------------------------------------------- /External/MuellGui.h: -------------------------------------------------------------------------------- 1 | #ifndef __MUELLGUI_H_ 2 | #define __MUELLGUI_H_ 3 | 4 | //KW aus Mülldatei einlesen 5 | int readMuellKW(int kw, char* jahr, char* kwLine, char* kwLine2) 6 | { 7 | char Path[128], read[256]; 8 | time_t timeStamp; 9 | struct tm *now; 10 | time( &timeStamp ); 11 | now = localtime( &timeStamp ); 12 | strftime (jahr,20,"%Y",now); 13 | snprintf(Path, (size_t)256, "/home/pi/E3dcGui/Data/Entsorgung_%s.txt", jahr); 14 | int line = kw + 12; 15 | int c; 16 | FILE *fp; 17 | fp = fopen(Path, "r"); 18 | if(fp == NULL) { 19 | printf("Datei %s konnte NICHT geoeffnet werden.\n", Path); 20 | return -1; 21 | } 22 | else { 23 | for( c = 1; c < 65; ++c ){ 24 | fgets(read,256,fp); 25 | if ( c == line){ 26 | snprintf (kwLine, (size_t)256, "%s", read); 27 | } 28 | if ( c == line+1){ 29 | snprintf (kwLine2, (size_t)256, "%s", read); 30 | return 1; 31 | } 32 | } 33 | fclose(fp); 34 | } 35 | return 1; 36 | } 37 | //Müllsymbole erstellen 38 | int drawMuell(int x, int y, char day1[64], char day2[64]) 39 | { 40 | char OUT[128], batch[256]; 41 | snprintf(OUT, (size_t)64, "Muell/%s", day1); 42 | DrawImage(OUT, x, y); 43 | if (strcmp ("frei",day2) == 0) 44 | return 1; 45 | else { 46 | snprintf(OUT, (size_t)64, "Muell/%s", day2); 47 | DrawImage(OUT, x-12, y+17); 48 | } 49 | return 1; 50 | } 51 | 52 | //Müll Grafik erstellen 53 | int makeMuellGui(int GuiTime, int counter) 54 | { 55 | char OUT[128], off[128], kwLine[256], kwLine2[256], jahrread[64], jahr[64]; 56 | char Mon1kw1[64], Tue1kw1[64], Wed1kw1[64], Thu1kw1[64], Fri1kw1[64], Sat1kw1[64], Sun1kw1[64]; 57 | char Mon2kw1[64], Tue2kw1[64], Wed2kw1[64], Thu2kw1[64], Fri2kw1[64], Sat2kw1[64], Sun2kw1[64]; 58 | char Mon1kw2[64], Tue1kw2[64], Wed1kw2[64], Thu1kw2[64], Fri1kw2[64], Sat1kw2[64], Sun1kw2[64]; 59 | char Mon2kw2[64], Tue2kw2[64], Wed2kw2[64], Thu2kw2[64], Fri2kw2[64], Sat2kw2[64], Sun2kw2[64]; 60 | //Read Daten Beginn (roter Punkt unten rechts) 61 | GuiTime = PiTime; 62 | if (counter == 0){ 63 | writeScreen(ScreenCounter, 60); 64 | drawMainScreen(); 65 | drawSquare(760,440,20,20,LIGHT_RED); 66 | drawCorner(760,440,20,20,WHITE); 67 | //Mülldatei einlesen für aktuelle KW 68 | time_t timeStamp; 69 | struct tm *now; 70 | time( &timeStamp ); 71 | now = localtime( &timeStamp ); 72 | strftime (OUT,100,"%V",now); 73 | int kw = atoi(OUT); 74 | readMuellKW(kw, jahr, kwLine, kwLine2); 75 | sscanf(kwLine, "%s Mon= %s %s Tue= %s %s Wed= %s %s Thu= %s %s Fri= %s %s Sat= %s %s Sun= %s %s", off, Mon1kw1, Mon2kw1, Tue1kw1, Tue2kw1, Wed1kw1, Wed2kw1, Thu1kw1, Thu2kw1, Fri1kw1, Fri2kw1, Sat1kw1, Sat2kw1, Sun1kw1, Sun2kw1); 76 | sscanf(kwLine2, "%s Mon= %s %s Tue= %s %s Wed= %s %s Thu= %s %s Fri= %s %s Sat= %s %s Sun= %s %s", off, Mon1kw2, Mon2kw2, Tue1kw2, Tue2kw2, Wed1kw2, Wed2kw2, Thu1kw2, Thu2kw2, Fri1kw2, Fri2kw2, Sat1kw2, Sat2kw2, Sun1kw2, Sun2kw2); 77 | int back = readMuellKW(-11, off, kwLine, off); 78 | sscanf(kwLine, "%s", jahrread); 79 | // Grafik für Current 80 | drawSquare(MuellS0-25,MuellZ0-10,720,220,GREY); 81 | drawCorner(MuellS0-25,MuellZ0-10,720,220,WHITE); 82 | drawSquare(MuellS0-22,MuellZ0-7,714,214,WHITE); 83 | drawCorner(MuellS0-22,MuellZ0-7,714,214,GREY); 84 | 85 | //Grafiken erstellen 86 | if (back == -1){ 87 | put_string(MuellS0, MuellZ0, "keine", RED); 88 | snprintf(OUT, (size_t)64, "Entsorgung_%s.txt", jahr); 89 | put_string(MuellS0, MuellZ0+16, OUT, RED); 90 | } 91 | else 92 | put_string(MuellS0, MuellZ0, jahr, GREEN); 93 | put_string(MuellS1-10, MuellZ0, "Montag", GREY); 94 | put_string(MuellS2-10, MuellZ0, "Dienstag", GREY); 95 | put_string(MuellS3-10, MuellZ0, "Mittwoch", GREY); 96 | put_string(MuellS4-10, MuellZ0, "Donnerstag", GREY); 97 | put_string(MuellS5-10, MuellZ0, "Freitag", GREY); 98 | put_string(MuellS6-10, MuellZ0, "Samstag", GREY); 99 | put_string(MuellS7-10, MuellZ0, "Sonntag", GREY); 100 | 101 | snprintf(OUT, (size_t)64, "KW %i", kw); 102 | put_string(MuellS0, MuellZ1+20, OUT, GREY); 103 | snprintf(OUT, (size_t)64, "KW %i", kw+1); 104 | put_string(MuellS0, MuellZ2+20, OUT, GREY); 105 | 106 | if (back == 1){ 107 | drawMuell(MuellS1, MuellZ1, Mon1kw1, Mon2kw1); 108 | drawMuell(MuellS2, MuellZ1, Tue1kw1, Tue2kw1); 109 | drawMuell(MuellS3, MuellZ1, Wed1kw1, Wed2kw1); 110 | drawMuell(MuellS4, MuellZ1, Thu1kw1, Thu2kw1); 111 | drawMuell(MuellS5, MuellZ1, Fri1kw1, Fri2kw1); 112 | drawMuell(MuellS6, MuellZ1, Sat1kw1, Sat2kw1); 113 | drawMuell(MuellS7, MuellZ1, Sun1kw1, Sun2kw1); 114 | 115 | drawMuell(MuellS1, MuellZ2, Mon1kw2, Mon2kw2); 116 | drawMuell(MuellS2, MuellZ2, Tue1kw2, Tue2kw2); 117 | drawMuell(MuellS3, MuellZ2, Wed1kw2, Wed2kw2); 118 | drawMuell(MuellS4, MuellZ2, Thu1kw2, Thu2kw2); 119 | drawMuell(MuellS5, MuellZ2, Fri1kw2, Fri2kw2); 120 | drawMuell(MuellS6, MuellZ2, Sat1kw2, Sat2kw2); 121 | drawMuell(MuellS7, MuellZ2, Sun1kw2, Sun2kw2); 122 | //ReadDaten grün 123 | drawSquare(760,440,20,20,GREEN); 124 | drawCorner(760,440,20,20,WHITE); 125 | } 126 | else { 127 | //ReadDaten orange 128 | drawSquareRGB(760,440,20,20,225,122,34); 129 | drawCorner(760,440,20,20,WHITE); 130 | } 131 | if (MuellLegende == 1){ 132 | drawMuell(40, MuellZ3, "bio", "frei"); 133 | put_string(40-10, MuellZ3+60, "Biom\201ll", GREY); 134 | drawMuell(115, MuellZ3, "papier", "frei"); 135 | put_string(115-6, MuellZ3+60, "Papier", GREY); 136 | put_string(115-6, MuellZ3+72, "Tonne", GREY); 137 | drawMuell(190, MuellZ3, "gelb", "frei"); 138 | put_string(190-6, MuellZ3+60, "Gelber", GREY); 139 | put_string(190-6, MuellZ3+72, " Sack", GREY); 140 | drawMuell(265, MuellZ3, "rest", "frei"); 141 | put_string(265-10, MuellZ3+60, "Restm\201ll", GREY); 142 | drawMuell(340, MuellZ3, "glas", "frei"); 143 | put_string(340, MuellZ3+60, "Glas", GREY); 144 | drawMuell(415, MuellZ3, "metall", "frei"); 145 | put_string(415-10, MuellZ3+60, "Metall", GREY); 146 | drawMuell(490, MuellZ3, "schadstoff", "frei"); 147 | put_string(490-20, MuellZ3+60, "Schadstoff", GREY); 148 | put_string(490-10, MuellZ3+72, " Mobil", GREY); 149 | drawMuell(565, MuellZ3, "frei", "frei"); 150 | put_string(565, MuellZ3+60, "keine", GREY); 151 | put_string(565, MuellZ3+72, "Tonne", GREY); 152 | drawMuell(640, MuellZ3, "feiertag", "frei"); 153 | put_string(640-14, MuellZ3+60, "Feiertag", GREY); 154 | drawMuell(715, MuellZ3-20, "bio", "gelb"); 155 | put_string(715-10, MuellZ3+60, "Beispiel", GREY); 156 | put_string(715-10, MuellZ3+72, "2 Tonnen", GREY); 157 | } 158 | } 159 | return GuiTime; 160 | 161 | } 162 | #endif // __MuellGui_H_ 163 | -------------------------------------------------------------------------------- /External/dht.h: -------------------------------------------------------------------------------- 1 | #ifndef __DHT11_H_ 2 | #define __DHT11_H_ 3 | 4 | /* 5 | Programmbasis http://www.uugear.com/portfolio/dht11-humidity-temperature-sensor-module/ 6 | * dht11.c is simple program read date from dht11 7 | */ 8 | 9 | #define MAXTIMINGS 85 10 | 11 | int dht_data[5] = { 0, 0, 0, 0, 0 }; 12 | 13 | int writeDHT11(int DHT11Position, int NewValue) 14 | { 15 | BitWrite("/mnt/RAMDisk/DHT11.txt", DHT11Position, NewValue, DHT11MAX); 16 | return 1; 17 | } 18 | int readDHT11(int DHT11Position) 19 | { 20 | int ret = BitRead("/mnt/RAMDisk/DHT11.txt", DHT11Position, DHT11MAX); 21 | return ret; 22 | } 23 | int makeDHT11() 24 | { 25 | BitMake("/mnt/RAMDisk/DHT11.txt", DHT11MAX); 26 | return 0; 27 | } 28 | 29 | int read_dht_data(int DHTPin, char* hum, char* temp) 30 | { 31 | if ( wiringPiSetup() == -1 ) 32 | return -1; 33 | 34 | uint8_t laststate = HIGH; 35 | uint8_t counter = 0; 36 | uint8_t j = 0, i; 37 | //float f; /* fahrenheit */ 38 | char OUT[56]; 39 | 40 | dht_data[0] = dht_data[1] = dht_data[2] = dht_data[3] = dht_data[4] = 0; 41 | 42 | /* pull pin down for 18 milliseconds */ 43 | pinMode( DHTPin, OUTPUT ); 44 | digitalWrite( DHTPin, LOW ); 45 | delay( 18 ); 46 | /* then pull it up for 40 microseconds */ 47 | digitalWrite( DHTPin, HIGH ); 48 | delayMicroseconds( 20 ); 49 | /* prepare to read the pin */ 50 | pinMode( DHTPin, INPUT ); 51 | //pullUpDnControl ( DHTPin, PUD_UP); 52 | /* detect change and read data */ 53 | for ( i = 0; i < MAXTIMINGS; i++ ) 54 | { 55 | counter = 0; 56 | while ( digitalRead( DHTPin ) == laststate ) 57 | { 58 | counter++; 59 | delayMicroseconds( 3 ); 60 | if ( counter == 255 ) 61 | { 62 | break; 63 | } 64 | } 65 | laststate = digitalRead( DHTPin ); 66 | 67 | if ( counter == 255 ) 68 | break; 69 | 70 | /* ignore first 3 transitions */ 71 | if ( (i >= 4) && (i % 2 == 0) ) 72 | { 73 | /* shove each bit into the storage bytes */ 74 | dht_data[j / 8] <<= 1; 75 | if ( counter > 16 ) 76 | dht_data[j / 8] |= 1; 77 | j++; 78 | } 79 | } 80 | 81 | /* check we read 40 bits (8bit x 5 ) + verify checksum in the last byte 82 | * print it out if data is good 83 | */ 84 | if ( (j >= 40) && 85 | (dht_data[4] == ( (dht_data[0] + dht_data[1] + dht_data[2] + dht_data[3]) & 0xFF) ) ) 86 | { 87 | float h = (float)((dht_data[0] << 8) + dht_data[1]) / 10; 88 | if ( h > 100 ) 89 | { 90 | h = dht_data[0]; // for DHT11 91 | } 92 | float c = (float)(((dht_data[2] & 0x7F) << 8) + dht_data[3]) / 10; 93 | if ( c > 125 ) 94 | { 95 | c = dht_data[2]; // for DHT11 96 | } 97 | if ( dht_data[2] & 0x80 ) 98 | { 99 | c = -c; 100 | } 101 | snprintf(hum, (size_t)56, "%.1f", h); 102 | snprintf(temp, (size_t)56, "%.1f", c); 103 | return 1; 104 | }else { 105 | //printf( "Data not good, skip\n" ); 106 | hum = 0; 107 | temp = 0; 108 | return 0; 109 | } 110 | } 111 | 112 | int saveDHT(int DHTUse, int DHTPosition, int DHTPin) 113 | { 114 | if (DHTUse == false) 115 | return 0; 116 | //printf( "Raspberry Pi wiringPi DHT11 Temperature Program\n" ); 117 | char read1[56], read2[56]; 118 | float humf = 0, tempf = 0; 119 | int ret; 120 | int i; 121 | 122 | for( i = 0; i < 10; ++i ) 123 | { 124 | ret = read_dht_data( DHTPin, read1, read2); 125 | float hum = atof(read1); 126 | float temp = atof(read2); 127 | writeDHT11(DHTPosition +2,ret); 128 | if(ret == 1){ 129 | printf( "Humidity = %.1f %% Temperature = %.1f *C \n", hum, temp); 130 | writeDHT11(DHTPosition,temp*10); 131 | writeDHT11(DHTPosition +1,hum*10); 132 | return ret; 133 | } 134 | else if (ret == -2) 135 | printf("wiringPi error\n"); 136 | else if (ret == -1) 137 | printf("DHT11 error\n" ); 138 | delay( 100 ); /* wait 1sec to refresh */ 139 | } 140 | return ret; 141 | } 142 | 143 | int drawDHTFrame(int DHTUse, char *designation, int Line) 144 | { 145 | char OUT[56]; 146 | drawSquare(45,Line-20,348,60,GREY); 147 | drawCorner(45,Line-20,348,60,WHITE); 148 | drawSquare(45+120,Line-17,225,54,WHITE); 149 | drawCorner(45+120,Line-17,225,54,GREY); 150 | put_string(45+6, Line+4, designation, WHITE); 151 | return 1; 152 | } 153 | int drawDHTState(int DHTUse, int DHTPin, int DHTPosition, char *DHTName, int Line, float offsetTemp) 154 | { 155 | char OUT[56]; 156 | if (DHTUse > 0){ 157 | float DHTTemp = readDHT11(DHTPosition)/10.0 + offsetTemp; 158 | float DHTHum = readDHT11(DHTPosition+1)/10.0; 159 | int DHTState = readDHT11(DHTPosition+2); 160 | if (DHTState == 1){ 161 | drawSquare(45+80, Line,20,20,LIGHT_GREEN); 162 | drawCorner(45+80, Line,20,20,GREY); 163 | } 164 | else { 165 | drawSquare(45+80, Line,20,20,LIGHT_RED); 166 | drawCorner(45+80, Line,20,20,GREY); 167 | } 168 | drawSquare(45+120,Line-17,225,54,WHITE); 169 | drawCorner(45+120,Line-17,225,54,GREY); 170 | put_string(205-30, Line-18, DHTName, GREY); 171 | snprintf (OUT, (size_t)100, "Temperatur %.1f %cC", DHTTemp, 248); 172 | put_string(205-30, Line-3, OUT, GREY); 173 | snprintf (OUT, (size_t)100, "Luftfeuchtigkeit %.1f %%", DHTHum); 174 | put_string(205-30, Line+12, OUT, GREY); 175 | } 176 | else { 177 | drawSquare(45+80, Line,20,20,LTGREY); 178 | drawCorner(45+80, Line,20,20,GREY); 179 | } 180 | return 1; 181 | } 182 | int makeDHTFrame() 183 | { 184 | if (useDHT == 1){ 185 | drawDHTFrame(DHT1Use, "Sensor 1", RP1); 186 | drawDHTFrame(DHT2Use, "Sensor 2", RP2); 187 | drawDHTFrame(DHT3Use, "Sensor 3", RP3); 188 | drawDHTFrame(DHT4Use, "Sensor 4", RP4); 189 | drawDHTFrame(DHT5Use, "Sensor 5", RP5); 190 | return 1; 191 | } 192 | return 0; 193 | } 194 | int makeDHTState() 195 | { 196 | if (useDHT == 1){ 197 | //Read Daten Beginn (roter Punkt unten rechts) 198 | drawSquare(760,440,20,20,LIGHT_RED); 199 | drawCorner(760,440,20,20,WHITE); 200 | saveDHT(DHT1Use, DHT1Position, DHT1Pin); 201 | drawDHTState(DHT1Use, DHT1Pin, DHT1Position, DHT1Name, RP1, DHT1_OFFSET_TEMP); 202 | saveDHT(DHT2Use, DHT2Position, DHT2Pin); 203 | drawDHTState(DHT2Use, DHT2Pin, DHT2Position, DHT2Name, RP2, DHT2_OFFSET_TEMP); 204 | saveDHT(DHT3Use, DHT3Position, DHT3Pin); 205 | drawDHTState(DHT3Use, DHT3Pin, DHT3Position, DHT3Name, RP3, DHT3_OFFSET_TEMP); 206 | saveDHT(DHT4Use, DHT4Position, DHT4Pin); 207 | drawDHTState(DHT4Use, DHT4Pin, DHT4Position, DHT4Name, RP4, DHT4_OFFSET_TEMP); 208 | saveDHT(DHT5Use, DHT5Position,DHT5Pin); 209 | drawDHTState(DHT5Use, DHT5Pin, DHT5Position, DHT5Name, RP5, DHT5_OFFSET_TEMP); 210 | //Read Daten Ende (grüner Punkt unten rechts) 211 | drawSquare(760,440,20,20,GREEN); 212 | drawCorner(760,440,20,20,WHITE); 213 | return 1; 214 | } 215 | return 0; 216 | } 217 | #endif // __DHT11_H_ 218 | -------------------------------------------------------------------------------- /External/gruenSave.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include "../checkPara.h" 12 | #include "../Frame/framebuffer.c" 13 | #include "../Frame/DrawImage.h" 14 | #include "../Frame/DrawCorner.c" 15 | #include "../funktion.h" 16 | #include "Gruenbeck.h" 17 | 18 | void readWriteSendGB(char *name, char *unit, char *para, int pos, int ise) 19 | { 20 | char value[128]; 21 | readGB(para, value); 22 | writeGruenRAM(pos, atof(value)); 23 | if (GruenbeckHM == 1 && ise > 0){ 24 | printsendHM(ise, value); 25 | } 26 | printf("\n%s: %s %s\n", name, value, unit); 27 | } 28 | void main() 29 | { 30 | //Parameter einbinden, checken oder default setzen 31 | checkDefinePara(0); 32 | 33 | char value[128]; 34 | readWriteSendGB("Verbrauch", "l", GB_CONSUMPTION, PosGB_CONSUMPTION, ISE_GB_CONSUMPTION); 35 | readWriteSendGB("Regenerationsschritt", " ", GB_CURRENT_REGENERATION, PosGB_CURRENT_REGENERATION, ISE_GB_CURRENT_REGENERATION); 36 | readWriteSendGB("Anlagenkapazitaet", "%", GB_PERCENT_REGENERATION, PosGB_PERCENT_REGENERATION, ISE_GB_PERCENT_REGENERATION); 37 | readWriteSendGB("Aktueller Druchfluss", "qm", GB_CURRENT_FLOW, PosGB_CURRENT_FLOW, ISE_GB_CURRENT_FLOW); 38 | readWriteSendGB("Restkapazitaet", "qm", GB_R_CAPACITY, PosGB_R_CAPACITY, ISE_GB_R_CAPACITY); 39 | readWriteSendGB("Letzte Regeneration vor", "Std", GB_LAST_REGENERATION, PosGB_LAST_REGENERATION, ISE_GB_LAST_REGENERATION); 40 | readWriteSendGB("Status letzte eMail", " ", GB_STATUS_EMAIL, PosGB_STATUS_EMAIL, ISE_GB_STATUS_EMAIL); 41 | snprintf(value, (size_t)8, "%i", OK); 42 | if (ISE_GB_PI_SEND_OK > 0){ 43 | printsendHM(ISE_GB_PI_SEND_OK, value); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /External/weather/get_weather_data.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Thanks to https://github.com/gabrieledarrigo/c-weather 3 | **/ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include "jsmn.h" 10 | 11 | #ifndef PARSED_JSON 12 | #define PARSED_JSON 13 | /** 14 | * A record that holds the parsed json. 15 | * @var int number_of_tokens The number of parsed tokens. 16 | * @var jsmntok_t * tokens The parsed tokens. 17 | **/ 18 | struct Parsed_Json { 19 | int number_of_tokens; 20 | jsmntok_t * tokens; 21 | }; 22 | #endif //PARSED_JSON 23 | 24 | #ifndef PARSE_JSON 25 | #define PARSE_JSON 26 | /** 27 | * Parse a json string with jsmn lib. 28 | * @see https://github.com/zserge/jsmn 29 | * for parsing implementation detail. 30 | * Return the parsed tokens. 31 | * 32 | * @param int number_of_tokens 33 | * @param char * data 34 | * @return jsmntok_t * tokens 35 | */ 36 | struct Parsed_Json parse_json(char * data, int number_of_tokens) { 37 | jsmn_parser parser; 38 | jsmn_init(&parser); 39 | struct Parsed_Json parsed; 40 | 41 | // Calculate the memory required for the tokens 42 | size_t size = sizeof(jsmntok_t) * number_of_tokens; 43 | jsmntok_t * tokens = malloc(size); 44 | 45 | int result = jsmn_parse(&parser, data, strlen(data), tokens, number_of_tokens); 46 | 47 | if (result < 0) { 48 | printf("Failed to parse JSON"); 49 | perror("Err"); 50 | exit(1); 51 | } 52 | 53 | if (tokens[0].type != JSMN_ARRAY && tokens[0].type != JSMN_OBJECT) { 54 | printf("The first element should be an array or an object"); 55 | exit(1); 56 | } 57 | 58 | parsed.number_of_tokens = result; 59 | parsed.tokens = tokens; 60 | 61 | return parsed; 62 | } 63 | #endif //PARSE_JSON 64 | 65 | 66 | #ifndef CHECK_JSON_STRING 67 | #define CHECK_JSON_STRING 68 | /** 69 | * Check if two string parsed from a jsmntok_t token are equal. 70 | * Return 0 if the string are equals, 0 otherwise 71 | * 72 | * @param char * to_search 73 | * @param char * string 74 | * @param jsmntok_t token 75 | * @return int 76 | */ 77 | int check_json_string(char * to_search, char * string, jsmntok_t token) { 78 | if (token.type == JSMN_STRING && strcmp(to_search, string) == 0) { 79 | return 0; 80 | } 81 | 82 | return -1; 83 | } 84 | #endif //CHECK_JSON_STRING 85 | 86 | #ifndef BUFFER 87 | #define BUFFER 88 | /** 89 | * A simple Buffer structure. 90 | * @var char * memory An array of chars containing the buffer data 91 | * @var size_t size Array fo chars size 92 | */ 93 | struct Buffer { 94 | char * memory; 95 | size_t size; 96 | }; 97 | #endif //BUFFER 98 | 99 | /** 100 | * Save the data from received from the server into a Buffer struct. 101 | * @see https://curl.haxx.se/libcurl/c/CURLOPT_WRITEDATA.html for the function signature. 102 | */ 103 | size_t write_to_buffer(void *data, size_t size, size_t nmemb, void *pointer) { 104 | size_t real_size = size * nmemb; 105 | 106 | // Cast the received pointer to the Buffer structured data. 107 | struct Buffer * buffer = (struct Buffer *) pointer; 108 | 109 | // Reallocate the memory for the Buffer char pointer 110 | buffer->memory = realloc(buffer->memory, buffer->size + real_size + 1); 111 | buffer->size += real_size; 112 | 113 | if (buffer->memory == NULL) { 114 | printf("Failed to allocate memory for the http get data"); 115 | return 1; 116 | } 117 | 118 | // Copy the fetched data to the Buffer char pointer 119 | memcpy(buffer->memory, data, real_size); 120 | buffer->memory[real_size] = '\0'; 121 | 122 | return real_size; 123 | }; 124 | 125 | /** 126 | * Retrieve the weather data from https://openweathermap.org/api 127 | * with an HTTP GET request. 128 | * Return an array of chars. 129 | * 130 | * @param char * city 131 | * @return char * buffer.memory 132 | */ 133 | char * getWeatherData() { 134 | curl_global_init(CURL_GLOBAL_ALL); 135 | 136 | // Build the url 137 | char base_url[256]; 138 | snprintf(base_url, (size_t)256, "https://api.openweathermap.org/data/2.5/onecall?lat=%s&lon=%s&exclude=minutely,hourly&appid=%s&units=metric", WEATHER_LAT, WEATHER_LON, WEATHER_KEY); 139 | char length = strlen(base_url); 140 | char * url = malloc(sizeof(char) * length + 1); 141 | memset(url, 0, length); 142 | 143 | strcat(url, base_url); 144 | //strcat(url, city); 145 | 146 | // Allocate an empty buffer that will hold the http get data 147 | struct Buffer buffer; 148 | buffer.memory = NULL; 149 | buffer.size = 0; 150 | 151 | CURL *handle; 152 | int result; 153 | handle = curl_easy_init(); 154 | 155 | // Set curl options 156 | curl_easy_setopt(handle, CURLOPT_URL, url); 157 | curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_to_buffer); 158 | curl_easy_setopt(handle, CURLOPT_WRITEDATA, (void *) &buffer); 159 | result = curl_easy_perform(handle); 160 | 161 | if (result != CURLE_OK) { 162 | printf("A problem occurred during the HTTP CALL to:\n\n%s\n\nWith the following error: %s\n\n", url, curl_easy_strerror(result)); 163 | exit(1); 164 | } 165 | 166 | free(handle); 167 | return buffer.memory; 168 | }; 169 | -------------------------------------------------------------------------------- /Frame/DrawCorner.c: -------------------------------------------------------------------------------- 1 | int drawCorner(int x, int y, int width, int height, int colidx) 2 | { 3 | drawSquare(x,y,1,1,colidx); 4 | drawSquare(x,y+1,1,1,colidx); 5 | drawSquare(x,y+2,1,1,colidx); 6 | drawSquare(x,y+3,1,1,colidx); 7 | drawSquare(x,y+4,1,1,colidx); 8 | drawSquare(x,y+5,1,1,colidx); 9 | drawSquare(x,y+6,1,1,colidx); 10 | drawSquare(x+1,y,1,1,colidx); 11 | drawSquare(x+1,y+1,1,1,colidx); 12 | drawSquare(x+1,y+2,1,1,colidx); 13 | drawSquare(x+1,y+3,1,1,colidx); 14 | drawSquare(x+1,y+4,1,1,colidx); 15 | drawSquare(x+2,y,1,1,colidx); 16 | drawSquare(x+2,y+1,1,1,colidx); 17 | drawSquare(x+2,y+2,1,1,colidx); 18 | drawSquare(x+3,y,1,1,colidx); 19 | drawSquare(x+3,y+1,1,1,colidx); 20 | drawSquare(x+4,y,1,1,colidx); 21 | drawSquare(x+4,y+1,1,1,colidx); 22 | drawSquare(x+5,y,1,1,colidx); 23 | drawSquare(x+6,y,1,1,colidx); 24 | 25 | drawSquare(x+ width-1,y,1,1,colidx); 26 | drawSquare(x+ width-1,y+1,1,1,colidx); 27 | drawSquare(x+ width-1,y+2,1,1,colidx); 28 | drawSquare(x+ width-1,y+3,1,1,colidx); 29 | drawSquare(x+ width-1,y+4,1,1,colidx); 30 | drawSquare(x+ width-1,y+5,1,1,colidx); 31 | drawSquare(x+ width-1,y+6,1,1,colidx); 32 | drawSquare(x+ width-2,y,1,1,colidx); 33 | drawSquare(x+ width-2,y+1,1,1,colidx); 34 | drawSquare(x+ width-2,y+2,1,1,colidx); 35 | drawSquare(x+ width-2,y+3,1,1,colidx); 36 | drawSquare(x+ width-2,y+4,1,1,colidx); 37 | drawSquare(x+ width-3,y,1,1,colidx); 38 | drawSquare(x+ width-3,y+1,1,1,colidx); 39 | drawSquare(x+ width-3,y+2,1,1,colidx); 40 | drawSquare(x+ width-4,y,1,1,colidx); 41 | drawSquare(x+ width-4,y+1,1,1,colidx); 42 | drawSquare(x+ width-5,y,1,1,colidx); 43 | drawSquare(x+ width-5,y+1,1,1,colidx); 44 | drawSquare(x+ width-6,y,1,1,colidx); 45 | drawSquare(x+ width-7,y,1,1,colidx); 46 | 47 | drawSquare(x,y+ height-1,1,1,colidx); 48 | drawSquare(x,y+ height-2,1,1,colidx); 49 | drawSquare(x,y+ height-3,1,1,colidx); 50 | drawSquare(x,y+ height-4,1,1,colidx); 51 | drawSquare(x,y+ height-5,1,1,colidx); 52 | drawSquare(x,y+ height-6,1,1,colidx); 53 | drawSquare(x,y+ height-7,1,1,colidx); 54 | drawSquare(x+1,y+ height-1,1,1,colidx); 55 | drawSquare(x+1,y+ height-2,1,1,colidx); 56 | drawSquare(x+1,y+ height-3,1,1,colidx); 57 | drawSquare(x+1,y+ height-4,1,1,colidx); 58 | drawSquare(x+1,y+ height-5,1,1,colidx); 59 | drawSquare(x+2,y+ height-1,1,1,colidx); 60 | drawSquare(x+2,y+ height-2,1,1,colidx); 61 | drawSquare(x+2,y+ height-3,1,1,colidx); 62 | drawSquare(x+3,y+ height-1,1,1,colidx); 63 | drawSquare(x+3,y+ height-2,1,1,colidx); 64 | drawSquare(x+4,y+ height-1,1,1,colidx); 65 | drawSquare(x+4,y+ height-2,1,1,colidx); 66 | drawSquare(x+5,y+ height-1,1,1,colidx); 67 | drawSquare(x+6,y+ height-1,1,1,colidx); 68 | 69 | drawSquare(x+ width-1,y+ height-1,1,1,colidx); 70 | drawSquare(x+ width-1,y+ height-2,1,1,colidx); 71 | drawSquare(x+ width-1,y+ height-3,1,1,colidx); 72 | drawSquare(x+ width-1,y+ height-4,1,1,colidx); 73 | drawSquare(x+ width-1,y+ height-5,1,1,colidx); 74 | drawSquare(x+ width-1,y+ height-6,1,1,colidx); 75 | drawSquare(x+ width-1,y+ height-7,1,1,colidx); 76 | drawSquare(x+ width-2,y+ height-1,1,1,colidx); 77 | drawSquare(x+ width-2,y+ height-2,1,1,colidx); 78 | drawSquare(x+ width-2,y+ height-3,1,1,colidx); 79 | drawSquare(x+ width-2,y+ height-4,1,1,colidx); 80 | drawSquare(x+ width-2,y+ height-5,1,1,colidx); 81 | drawSquare(x+ width-3,y+ height-1,1,1,colidx); 82 | drawSquare(x+ width-3,y+ height-2,1,1,colidx); 83 | drawSquare(x+ width-3,y+ height-3,1,1,colidx); 84 | drawSquare(x+ width-4,y+ height-1,1,1,colidx); 85 | drawSquare(x+ width-4,y+ height-2,1,1,colidx); 86 | drawSquare(x+ width-5,y+ height-1,1,1,colidx); 87 | drawSquare(x+ width-5,y+ height-2,1,1,colidx); 88 | drawSquare(x+ width-6,y+ height-1,1,1,colidx); 89 | drawSquare(x+ width-7,y+ height-1,1,1,colidx); 90 | return 1; 91 | } 92 | -------------------------------------------------------------------------------- /Frame/DrawImage.h: -------------------------------------------------------------------------------- 1 | /* 2 | gcc -g -o image image.c 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | // 'global' variables to store screen info 18 | int fbfd = 0; 19 | char *fbpI = 0; 20 | //long int page_size = 0; //Funktion scheint ungenutzt 21 | //int cur_page = 0; //var ist unbenutzt 22 | //struct fb_var_screeninfo orig_var; //in der framebuffer.c deklariert 23 | //struct fb_var_screeninfo vinfo; //in der framebuffer.c deklariert 24 | //struct fb_fix_screeninfo fix; //in der framebuffer.c deklariert 25 | //int kbfd = 0; //Funktion habe ich deaktiviert 26 | static struct fb_image image; 27 | 28 | int read_ppm(char *fpath, struct fb_image *image) { 29 | 30 | int errval = 0; 31 | FILE* fp = 0; 32 | int bytes_per_pixel = 2; // 16 bit 33 | 34 | fp = fopen(fpath, "r"); 35 | if (fp == 0) { 36 | errval = errno; 37 | fprintf(stderr, "Error opening file %i (errno=%d).\n", errval, errno); 38 | return errval; 39 | } 40 | 41 | char magic[2]; 42 | int width = -1; 43 | int height = -1; 44 | int depth = -1; 45 | 46 | if ( (fread(magic, 2, 1, fp) == 1) 47 | && (memcmp("P6", magic, 2) == 0) ) 48 | { 49 | //fprintf(stderr, "Got P6 ppm.\n"); 50 | 51 | if (fscanf(fp, "%d %d\n", &width, &height) == 2) { 52 | //fprintf(stderr, "w=%d, h=%d\n", width, height); 53 | } 54 | else { 55 | fprintf(stderr, "Read size failed.\n"); 56 | width = height = -1; 57 | errval = EINVAL; 58 | } 59 | 60 | if (fscanf(fp, "%d\n", &depth) == 1) { 61 | //fprintf(stderr, "d=%d\n", depth); 62 | } 63 | else 64 | { 65 | fprintf(stderr, "Read depth failed.\n"); 66 | depth = -1; 67 | errval = EINVAL; 68 | } 69 | 70 | if (depth != 255) { 71 | fprintf(stderr, "Only 255 depth supported.\n"); 72 | depth = -1; 73 | errval = EINVAL; 74 | } 75 | 76 | } 77 | else { 78 | fprintf(stderr, "Not a P6 ppm.\n"); 79 | errval = EINVAL; 80 | } 81 | 82 | if ( (width > -1) && (height > -1) && (depth = -1) ) { 83 | // header read ok 84 | 85 | image->dx = 0; 86 | image->dy = 0; 87 | image->width = width; 88 | image->height = height; 89 | image->fg_color = 0; 90 | image->bg_color = 0; 91 | image->depth = 16; 92 | 93 | // allocate memory 94 | image->data = malloc(width * height * bytes_per_pixel); 95 | if (image->data == 0) { 96 | fprintf(stderr, "Failed to allocate memory.\n"); 97 | errval = ENOMEM; 98 | } 99 | else { 100 | // read 101 | int ydraw; 102 | int xdraw; 103 | unsigned char rgb[3]; 104 | 105 | for (ydraw = 0; ydraw < height; ydraw++) { 106 | for (xdraw = 0; xdraw < width; xdraw++) { 107 | if (fread(rgb, 3, 1, fp) == 1) { 108 | unsigned char r = rgb[0]; 109 | unsigned char g = rgb[1]; 110 | unsigned char b = rgb[2]; 111 | unsigned short rgb565 = ((r >> 3) << 11) + ((g >> 2) << 5) + (b >> 3); 112 | // store pixel in memory 113 | unsigned int pix_offset = (ydraw * width + xdraw ) * bytes_per_pixel; 114 | *((unsigned short *)(image->data + pix_offset)) = rgb565; 115 | } 116 | else { 117 | errval = errno; 118 | fprintf(stderr, "Read data failed (errno=%d).\n", errval); 119 | break; 120 | } 121 | } 122 | if (errval != 0) 123 | break; 124 | } 125 | } 126 | } 127 | 128 | fclose(fp); 129 | 130 | return errval; 131 | } 132 | 133 | // draw 134 | void draw(struct fb_image *image, int posx, int posy) { 135 | int ydraw; 136 | int xdraw; 137 | for (ydraw = 0; ydraw < image->height; ydraw++) { 138 | for (xdraw = 0; xdraw < image->width; xdraw++) { 139 | // get pixel from image 140 | unsigned int img_pix_offset = (ydraw * image->width + xdraw) * 2; 141 | unsigned short c = *(unsigned short *)(image->data + img_pix_offset); 142 | // plot pixel to screen 143 | unsigned int fb_pix_offset = (xdraw + posx) * 2 + (ydraw + posy) * fix.line_length; 144 | *((unsigned short*)(fbpI + fb_pix_offset)) = c; 145 | } 146 | } 147 | } 148 | 149 | void cleanup() { 150 | // reset cursor 151 | /*if (kbfd >= 0) { 152 | ioctl(kbfd, KDSETMODE, KD_TEXT); 153 | close(kbfd); 154 | }*/ 155 | // unmap fb file from memory 156 | munmap(fbpI, fix.smem_len); 157 | // reset the display mode 158 | /*if (ioctl(fbfd, FBIOPUT_VSCREENINFO, &orig_var)){ 159 | printf("Error re-setting variable information.\n"); 160 | }*/ 161 | // close fb file 162 | close(fbfd); 163 | // free image data 164 | free((void *)image.data); 165 | } 166 | 167 | void sig_handler(int signo) { 168 | //cleanup(); //doppelte Freigabe des Speichers 169 | exit(signo); 170 | } 171 | int DrawImage(char* fileName, int posx, int posy) 172 | { 173 | // fill Path with File 174 | char Path[128]; 175 | snprintf (Path, (size_t)128, "/home/pi/E3dcGui/Image/%s.ppm", fileName); 176 | // read the image file 177 | int ret = read_ppm(Path, &image); 178 | if (ret != 0) { 179 | //printf("Reading image failed. errno = %i\n",ret); 180 | return ret; 181 | } 182 | 183 | // Open the file for reading and writing 184 | fbfd = open(framebuffer_File, O_RDWR); 185 | if (fbfd == -1) { 186 | //printf("Error: cannot open framebuffer device.\n"); 187 | return(1); 188 | } 189 | 190 | // set up signal handler to handle Ctrl+C 191 | signal(SIGINT, sig_handler); 192 | 193 | // Get variable screen information 194 | if (ioctl(fbfd, FBIOGET_VSCREENINFO, &var)){ 195 | //printf("Error reading variable information.\n"); 196 | } 197 | 198 | // Store for reset (copy var to var_orig) 199 | memcpy(&orig_var, &var, sizeof(struct fb_var_screeninfo)); 200 | 201 | // Get fixed screen information 202 | if (ioctl(fbfd, FBIOGET_FSCREENINFO, &fix)){ 203 | //printf("Error reading fixed information.\n"); 204 | } 205 | //page_size = fix.line_length * var.yres; 206 | 207 | // hide cursor 208 | /*kbfd = open("/dev/tty", O_WRONLY); 209 | if (kbfd >= 0) { 210 | ioctl(kbfd, KDSETMODE, KD_GRAPHICS); 211 | }*/ 212 | 213 | // map fb to user mem 214 | fbpI = (char*)mmap(0, 215 | fix.smem_len, 216 | PROT_READ | PROT_WRITE, 217 | MAP_SHARED, 218 | fbfd, 219 | 0); 220 | 221 | if ((intptr_t)fbpI == -1) { 222 | //printf("Failed to mmap.\n"); 223 | } 224 | else { 225 | // draw... 226 | draw(&image, posx, posy); 227 | //printf("Draw %s Ok\n",fileName); 228 | } 229 | cleanup(); 230 | return 0; 231 | } 232 | -------------------------------------------------------------------------------- /Frame/DrawNetImage.h: -------------------------------------------------------------------------------- 1 | #ifndef __DRAWNETIMAGE_H_ 2 | #define __DRAWNETIMAGE_H_ 3 | 4 | 5 | int DrawNetImage(int x, int y, int pmAktivPhases) 6 | { 7 | if (pmAktivPhases == 7) 8 | DrawImage("NetImage", x, y); 9 | else if (pmAktivPhases == 1){ 10 | DrawImage("NetImageOff", x, y); 11 | put_string(x+20, y+118, "L1", GREEN); 12 | put_string(x+50, y+118, "L2", RED); 13 | put_string(x+80, y+118, "L3", RED); 14 | } 15 | else if (pmAktivPhases == 2){ 16 | DrawImage("NetImageOff", x, y); 17 | put_string(x+20, y+118, "L1", RED); 18 | put_string(x+50, y+118, "L2", GREEN); 19 | put_string(x+80, y+118, "L3", RED); 20 | } 21 | else if (pmAktivPhases == 4){ 22 | DrawImage("NetImageOff", x, y); 23 | put_string(x+20, y+118, "L1", RED); 24 | put_string(x+50, y+118, "L2", RED); 25 | put_string(x+80, y+118, "L3", GREEN); 26 | } 27 | else if (pmAktivPhases == 3){ 28 | DrawImage("NetImageOff", x, y); 29 | put_string(x+20, y+118, "L1", GREEN); 30 | put_string(x+50, y+118, "L2", GREEN); 31 | put_string(x+80, y+118, "L3", RED); 32 | } 33 | else if (pmAktivPhases == 5){ 34 | DrawImage("NetImageOff", x, y); 35 | put_string(x+20, y+118, "L1", GREEN); 36 | put_string(x+50, y+118, "L2", RED); 37 | put_string(x+80, y+118, "L3", GREEN); 38 | } 39 | else if (pmAktivPhases == 6){ 40 | DrawImage("NetImageOff", x, y); 41 | put_string(x+20, y+118, "L1", RED); 42 | put_string(x+50, y+118, "L2", GREEN); 43 | put_string(x+80, y+118, "L3", GREEN); 44 | } 45 | else{ 46 | DrawImage("NetImageOff", x, y); 47 | put_string(x+20, y+118, "L1", RED); 48 | put_string(x+50, y+118, "L2", RED); 49 | put_string(x+80, y+118, "L3", RED); 50 | } 51 | } 52 | #endif // __DRAWNETIMAGE_H_ 53 | -------------------------------------------------------------------------------- /Frame/DrawSkala.c: -------------------------------------------------------------------------------- 1 | # include "/home/pi/E3dcGui/parameter.h" 2 | 3 | int skala() 4 | { 5 | int skalaLine2 = skalaLine * 2; 6 | int skalaLine3 = skalaLine * 3; 7 | int skalaLine4 = skalaLine * 4; 8 | int skalaLine5 = skalaLine * 5; 9 | int skalaLine6 = skalaLine * 6; 10 | double value = 330 / (double)PowerMax; 11 | drawSquare(15,430,769,1,LTGREY); 12 | drawSquareRGB(15, 430-(100*3.3), 769, 1, 0, 172, 0); 13 | drawSquareRGB(15, 430-(skalaLine*value), 769, 1, 200, 200, 200); 14 | if(skalaLine2 < PowerMax){ 15 | drawSquareRGB(15, 430-(skalaLine2*value), 769, 1, 200, 200, 200); 16 | } 17 | if(skalaLine3 < PowerMax){ 18 | drawSquareRGB(15, 430-(skalaLine3*value), 769, 1, 200, 200, 200); 19 | } 20 | if(skalaLine4 < PowerMax){ 21 | drawSquareRGB(15, 430-(skalaLine4*value), 769, 1, 200, 200, 200); 22 | } 23 | if(skalaLine5 < PowerMax){ 24 | drawSquareRGB(15, 430-(skalaLine5*value), 769, 1, 200, 200, 200); 25 | } 26 | if(skalaLine6 < PowerMax){ 27 | drawSquareRGB(15, 430-(skalaLine6*value), 769, 1, 200, 200, 200); 28 | } 29 | drawSquare(15,430,1,4,LTGREY); 30 | drawSquare(23,430,1,2,LTGREY); 31 | drawSquare(31,430,1,2,LTGREY); 32 | drawSquare(39,430,1,2,LTGREY); 33 | drawSquare(47,430,1,4,LTGREY); 34 | drawSquare(55,430,1,2,LTGREY); 35 | drawSquare(63,430,1,2,LTGREY); 36 | drawSquare(71,430,1,2,LTGREY); 37 | drawSquare(79,430,1,4,LTGREY); 38 | drawSquare(87,430,1,2,LTGREY); 39 | drawSquare(95,430,1,2,LTGREY); 40 | drawSquare(103,430,1,2,LTGREY); 41 | drawSquare(111,430,1,4,LTGREY); 42 | drawSquare(119,430,1,2,LTGREY); 43 | drawSquare(127,430,1,2,LTGREY); 44 | drawSquare(135,430,1,2,LTGREY); 45 | drawSquare(143,430,1,4,LTGREY); 46 | drawSquare(151,430,1,2,LTGREY); 47 | drawSquare(159,430,1,2,LTGREY); 48 | drawSquare(167,430,1,2,LTGREY); 49 | drawSquare(175,430,1,4,LTGREY); 50 | drawSquare(183,430,1,2,LTGREY); 51 | drawSquare(191,430,1,2,LTGREY); 52 | drawSquare(199,430,1,2,LTGREY); 53 | drawSquare(207,430,1,4,LTGREY); 54 | drawSquare(215,430,1,2,LTGREY); 55 | drawSquare(223,430,1,2,LTGREY); 56 | drawSquare(231,430,1,2,LTGREY); 57 | drawSquare(239,430,1,4,LTGREY); 58 | drawSquare(247,430,1,2,LTGREY); 59 | drawSquare(255,430,1,2,LTGREY); 60 | drawSquare(263,430,1,2,LTGREY); 61 | drawSquare(271,430,1,4,LTGREY); 62 | drawSquare(279,430,1,2,LTGREY); 63 | drawSquare(287,430,1,2,LTGREY); 64 | drawSquare(295,430,1,2,LTGREY); 65 | drawSquare(303,430,1,4,LTGREY); 66 | drawSquare(311,430,1,2,LTGREY); 67 | drawSquare(319,430,1,2,LTGREY); 68 | drawSquare(327,430,1,2,LTGREY); 69 | drawSquare(335,430,1,4,LTGREY); 70 | drawSquare(343,430,1,2,LTGREY); 71 | drawSquare(351,430,1,2,LTGREY); 72 | drawSquare(359,430,1,2,LTGREY); 73 | drawSquare(367,430,1,4,LTGREY); 74 | drawSquare(375,430,1,2,LTGREY); 75 | drawSquare(383,430,1,2,LTGREY); 76 | drawSquare(391,430,1,2,LTGREY); 77 | drawSquare(399,430,1,4,LTGREY); 78 | drawSquare(407,430,1,2,LTGREY); 79 | drawSquare(415,430,1,2,LTGREY); 80 | drawSquare(423,430,1,2,LTGREY); 81 | drawSquare(431,430,1,4,LTGREY); 82 | drawSquare(439,430,1,2,LTGREY); 83 | drawSquare(447,430,1,2,LTGREY); 84 | drawSquare(455,430,1,2,LTGREY); 85 | drawSquare(463,430,1,4,LTGREY); 86 | drawSquare(471,430,1,2,LTGREY); 87 | drawSquare(479,430,1,2,LTGREY); 88 | drawSquare(487,430,1,2,LTGREY); 89 | drawSquare(495,430,1,4,LTGREY); 90 | drawSquare(503,430,1,2,LTGREY); 91 | drawSquare(511,430,1,2,LTGREY); 92 | drawSquare(519,430,1,2,LTGREY); 93 | drawSquare(527,430,1,4,LTGREY); 94 | drawSquare(535,430,1,2,LTGREY); 95 | drawSquare(543,430,1,2,LTGREY); 96 | drawSquare(551,430,1,2,LTGREY); 97 | drawSquare(559,430,1,4,LTGREY); 98 | drawSquare(567,430,1,2,LTGREY); 99 | drawSquare(575,430,1,2,LTGREY); 100 | drawSquare(583,430,1,2,LTGREY); 101 | drawSquare(591,430,1,4,LTGREY); 102 | drawSquare(599,430,1,2,LTGREY); 103 | drawSquare(607,430,1,2,LTGREY); 104 | drawSquare(615,430,1,2,LTGREY); 105 | drawSquare(623,430,1,4,LTGREY); 106 | drawSquare(631,430,1,2,LTGREY); 107 | drawSquare(639,430,1,2,LTGREY); 108 | drawSquare(647,430,1,2,LTGREY); 109 | drawSquare(655,430,1,4,LTGREY); 110 | drawSquare(663,430,1,2,LTGREY); 111 | drawSquare(671,430,1,2,LTGREY); 112 | drawSquare(679,430,1,2,LTGREY); 113 | drawSquare(687,430,1,4,LTGREY); 114 | drawSquare(695,430,1,2,LTGREY); 115 | drawSquare(703,430,1,2,LTGREY); 116 | drawSquare(711,430,1,2,LTGREY); 117 | drawSquare(719,430,1,4,LTGREY); 118 | drawSquare(727,430,1,2,LTGREY); 119 | drawSquare(735,430,1,2,LTGREY); 120 | drawSquare(743,430,1,2,LTGREY); 121 | drawSquare(751,430,1,4,LTGREY); 122 | drawSquare(759,430,1,2,LTGREY); 123 | drawSquare(767,430,1,2,LTGREY); 124 | drawSquare(775,430,1,2,LTGREY); 125 | drawSquare(783,430,1,4,LTGREY); 126 | return 1; 127 | } 128 | -------------------------------------------------------------------------------- /Frame/README.markdown: -------------------------------------------------------------------------------- 1 | ## Touch Test 2 | 3 | Wird beim "make" von E3dcGui mit kompiliert. 4 | Aufgerufen wird es mit folgenden Befehlen: 5 | ```shell 6 | cd Frame 7 | ./touchtest 8 | ``` 9 | Alle vier Zahlen in den Ecken der Reihe nach anklicken. Wenn der Touch funktioniert, werden die Ecken grün. 10 | Wenn der Touch verstellt ist oder gar nicht funktioniert, sind im Eingabefenster die Tauchkoordinaten als Ausgabe zu sehen. 11 | Eine korrekte Ausgab sollte etwa so aussehen: 12 | ```shell 13 | Input device name: "FT5406 memory based driver" 14 | Supported events: 15 | Event type 0 (Sync) 16 | Event type 1 (Key) 17 | Event code 330 (Touch) 18 | Event type 3 (Absolute) 19 | Event code 0 (X) 20 | Value 797 21 | Min 0 22 | Max 800 23 | Event code 1 (Y) 24 | Value 25 25 | Min 0 26 | Max 480 27 | Event code 47 (?) 28 | Value 0 29 | Min 0 30 | Max 9 31 | Event code 53 (Position X) 32 | Value 0 33 | Min 0 34 | Max 800 35 | Event code 54 (Position Y) 36 | Value 0 37 | Min 0 38 | Max 480 39 | Event code 57 (Tracking ID) 40 | Value 0 41 | Min 0 42 | Max 65535 43 | Original 800x480, 16bpp 44 | Framebuffer /dev/fb0 resolution; 45 | 800x480, 16 bpp 46 | 47 | X Scale Factor = 1.000000 48 | Y Scale Factor = 1.000000 49 | scaledX = 1 / scaledY = 5 50 | scaledX = 2 / scaledY = 7 51 | scaledX = 3 / scaledY = 7 52 | scaledX = 6 / scaledY = 10 53 | Links Oben OK 54 | scaledX = 5 / scaledY = 10 55 | scaledX = 5 / scaledY = 10 56 | scaledX = 773 / scaledY = 16 57 | Rechts Oben OK 58 | scaledX = 774 / scaledY = 16 59 | scaledX = 772 / scaledY = 17 60 | scaledX = 778 / scaledY = 18 61 | scaledX = 799 / scaledY = 478 62 | Rechts Unten OK 63 | scaledX = 799 / scaledY = 478 64 | scaledX = 799 / scaledY = 478 65 | scaledX = 792 / scaledY = 478 66 | scaledX = 793 / scaledY = 478 67 | scaledX = 793 / scaledY = 478 68 | Links Unten OK 69 | scaledX = 9 / scaledY = 471 70 | scaledX = 10 / scaledY = 470 71 | scaledX = 8 / scaledY = 468 72 | scaledX = 8 / scaledY = 468 73 | scaledX = 385 / scaledY = 338 74 | Display OK 75 | ``` 76 | 77 | 09.11.2016 In die Reposity E3dcGui eingebunden 78 | -------------------------------------------------------------------------------- /Frame/framebuffer.c: -------------------------------------------------------------------------------- 1 | /* 2 | A simple program that demonstrates how to program for a 3 | touch screen. Specifically on the Raspberry Pi. 4 | This prgram can be used for most Linux based systems. 5 | For more details: www.marks-space.com 6 | 7 | Copyright (C) 2013 Mark Williams 8 | 9 | This library is free software; you can redistribute it and/or 10 | modify it under the terms of the GNU Library General Public 11 | License as published by the Free Software Foundation; either 12 | version 2 of the License, or (at your option) any later version. 13 | 14 | This library is distributed in the hope that it will be useful, 15 | but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 | Library General Public License for more details. 18 | 19 | You should have received a copy of the GNU Library General Public 20 | License along with this library; if not, write to the Free 21 | Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, 22 | MA 02111-1307, USA 23 | */ 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include "font_8x16.c" 29 | 30 | 31 | #define KNRM "\x1B[0m" 32 | #define KRED "\x1B[31m" 33 | #define KGRN "\x1B[32m" 34 | #define KYEL "\x1B[33m" 35 | #define KBLU "\x1B[34m" 36 | #define KMAG "\x1B[35m" 37 | #define KCYN "\x1B[36m" 38 | #define KWHT "\x1B[37m" 39 | 40 | static struct fb_fix_screeninfo fix; 41 | static struct fb_var_screeninfo orig_var; 42 | static struct fb_var_screeninfo var; 43 | char *fbp = 0; 44 | int fb=0; 45 | long int screensize = 0; 46 | 47 | 48 | 49 | // default framebuffer palette 50 | typedef enum { 51 | BLACK = 0, /* 0, 0, 0 */ 52 | BLUE = 1, /* 0, 0, 172 */ 53 | GREEN = 2, /* 0, 172, 0 */ 54 | CYAN = 3, /* 0, 172, 172 */ 55 | RED = 4, /* 172, 0, 0 */ 56 | PURPLE = 5, /* 172, 0, 172 */ 57 | ORANGE = 6, /* 172, 84, 0 */ 58 | LTGREY = 7, /* 172, 172, 172 */ 59 | GREY = 8, /* 84, 84, 84 */ 60 | LIGHT_BLUE = 9, /* 84, 84, 255 */ 61 | LIGHT_GREEN = 10, /* 84, 255, 84 */ 62 | LIGHT_CYAN = 11, /* 84, 255, 255 */ 63 | LIGHT_RED = 12, /* 255, 84, 84 */ 64 | LIGHT_PURPLE = 13, /* 255, 84, 255 */ 65 | YELLOW = 14, /* 255, 255, 84 */ 66 | DKYELLOW = 15, /* 172, 172, 84 */ 67 | WHITE = 16 /* 255, 255, 255 */ 68 | } COLOR_INDEX_T; 69 | static unsigned short def_r[] = 70 | { 0, 0, 0, 0, 172, 172, 172, 168, 71 | 84, 84, 84, 84, 255, 255, 255, 172, 255}; 72 | static unsigned short def_g[] = 73 | { 0, 0, 168, 168, 0, 0, 84, 168, 74 | 84, 84, 255, 255, 84, 84, 255, 172, 255}; 75 | static unsigned short def_b[] = 76 | { 0, 172, 0, 168, 0, 172, 0, 168, 77 | 84, 255, 84, 255, 84, 255, 84, 84, 255}; 78 | 79 | void put_pixel_16bpp(int x, int y, int r, int g, int b) 80 | { 81 | unsigned int pix_offset; 82 | unsigned short c; 83 | 84 | // calculate the pixel's byte offset inside the buffer 85 | pix_offset = x*2 + y * fix.line_length; 86 | 87 | //some magic to work out the color 88 | c = ((r / 8) << 11) + ((g / 4) << 5) + (b / 8); 89 | 90 | // write 'two bytes at once' 91 | *((unsigned short*)(fbp + pix_offset)) = c; 92 | return; 93 | } 94 | void drawSquare(int x, int y,int height, int width, int c) 95 | //void drawSquare(int x, int y) 96 | { 97 | // int height = 20; 98 | // int width = 20; 99 | int h = 0; 100 | int w = 0; 101 | for ( h = 0; h< height;h++) 102 | for ( w = 0; w< width;w++) 103 | put_pixel_16bpp( h+(x-2), w+(y-2) , def_r[c],def_g[c],def_b[c]); 104 | return; 105 | } 106 | 107 | void drawSquareRGB(int x, int y,int height, int width, int ro, int gr, int bl) 108 | { 109 | int h = 0; 110 | int w = 0; 111 | for ( h = 0; h< height;h++) 112 | for ( w = 0; w< width;w++) 113 | put_pixel_16bpp( h+(x-2), w+(y-2) , ro, gr, bl); 114 | return; 115 | } 116 | 117 | void put_char(int x, int y, int c, int ro, int gr, int bl) 118 | { 119 | int i,j,bits; 120 | for (i = 0; i < font_vga_8x16.height; i++) { 121 | bits = font_vga_8x16.data [font_vga_8x16.height * c + i]; 122 | for (j = 0; j < font_vga_8x16.width; j++, bits <<= 1) 123 | if (bits & 0x80){ 124 | put_pixel_16bpp(x+j, y+i, ro, gr, bl); 125 | } 126 | } 127 | return; 128 | } 129 | 130 | void put_string(int x, int y, char *s, int c) 131 | { 132 | int i; 133 | for (i = 0; *s; i++, x += font_vga_8x16.width, s++){ 134 | put_char (x, y, *s, def_r[c],def_g[c],def_b[c]); 135 | } 136 | return; 137 | } 138 | 139 | void put_stringRGB(int x, int y, char *s, int ro, int gr, int bl) 140 | { 141 | int i; 142 | for (i = 0; *s; i++, x += font_vga_8x16.width, s++) 143 | put_char (x, y, *s, ro, gr, bl); 144 | return; 145 | } 146 | void drawOutput (int x, int y, int width, int height, char *s, int c) 147 | { 148 | drawSquare(x, y-2,width,height+4,WHITE); 149 | put_string(x, y-2, s, c); 150 | return; 151 | } 152 | void drawOutputRGB (int x, int y, int width, int height, char *s, int ro, int gr, int bl) 153 | { 154 | drawSquare(x, y-2,width,height+4,WHITE); 155 | put_stringRGB(x, y-2, s, ro, gr, bl); 156 | return; 157 | } 158 | void drawColorOutput (int x, int y, int width, int height, char *s, int c, int bgc) 159 | { 160 | drawSquare(x, y-2,width,height+4,bgc); 161 | put_string(x, y-2, s, c); 162 | return; 163 | } 164 | 165 | void createButton(int x, int y, int w, int h, char *text, int backgroundColor, int foregroundColor) 166 | { 167 | //int size = sizeof(text); 168 | char *p = text; 169 | int length = 0; 170 | while(*(p+length)) 171 | length++; 172 | if((length*8)> (w-2)){ 173 | printf("####error,button too small for text####\n"); 174 | exit(1); 175 | } 176 | drawSquare(x-2,y-2,w+4,h+4,backgroundColor); 177 | drawSquare(x,y,w,h,foregroundColor); 178 | put_string(x+((w-(length*8))/2), y+((h-8)/2),text,WHITE); 179 | return; 180 | } 181 | 182 | int framebufferInitialize(int *xres, int *yres) 183 | { 184 | //char *fbdevice = "/dev/fb0" ; 185 | char *fbdevice = framebuffer_File ; 186 | 187 | fb = open(fbdevice, O_RDWR); 188 | if (fb == -1) { 189 | perror("open fbdevice"); 190 | return -1; 191 | } 192 | 193 | if (ioctl(fb, FBIOGET_FSCREENINFO, &fix) < 0) { 194 | perror("ioctl FBIOGET_FSCREENINFO"); 195 | close(fb); 196 | return -1; 197 | } 198 | 199 | if (ioctl(fb, FBIOGET_VSCREENINFO, &var) < 0) { 200 | perror("ioctl FBIOGET_VSCREENINFO"); 201 | close(fb); 202 | return -1; 203 | } 204 | 205 | printf("Original %dx%d, %dbpp\n", var.xres, var.yres, 206 | var.bits_per_pixel ); 207 | 208 | memcpy(&orig_var, &var, sizeof(struct fb_var_screeninfo)); 209 | 210 | 211 | 212 | printf("Framebuffer %s%s%s resolution;\n",KYEL, fbdevice, KWHT); 213 | 214 | printf("%dx%d, %d bpp\n\n\n", var.xres, var.yres, var.bits_per_pixel ); 215 | 216 | // map framebuffer to user memory 217 | screensize = fix.smem_len; 218 | fbp = (char*)mmap(0, 219 | screensize, 220 | PROT_READ | PROT_WRITE, 221 | MAP_SHARED, 222 | fb, 0); 223 | if ((intptr_t)fbp == -1) { 224 | printf("Failed to mmap.\n"); 225 | } 226 | 227 | *xres = var.xres; 228 | *yres = var.yres; 229 | 230 | //clear framebuffer 231 | int x, y; 232 | for (x = 0; x 25 | 26 | #define KWHT "\x1B[37m" 27 | #define KYEL "\x1B[33m" 28 | 29 | int fd; 30 | 31 | 32 | int openTouchScreen() 33 | { 34 | if ((fd = open(touch_File, O_RDONLY)) < 0) { 35 | return 1; 36 | } 37 | return 0; 38 | } 39 | 40 | 41 | void getTouchScreenDetails(int *screenXmin,int *screenXmax,int *screenYmin,int *screenYmax) 42 | { 43 | unsigned short id[4]; 44 | unsigned long bit[EV_MAX][NBITS(KEY_MAX)]; 45 | char name[256] = "Unknown"; 46 | int abs[6] = {0}; 47 | 48 | ioctl(fd, EVIOCGNAME(sizeof(name)), name); 49 | printf("Input device name: \"%s\"\n", name); 50 | 51 | memset(bit, 0, sizeof(bit)); 52 | ioctl(fd, EVIOCGBIT(0, EV_MAX), bit[0]); 53 | printf("Supported events:\n"); 54 | 55 | int i,j,k; 56 | for (i = 0; i < EV_MAX; i++) 57 | if (test_bit(i, bit[0])) { 58 | printf(" Event type %d (%s)\n", i, events[i] ? events[i] : "?"); 59 | if (!i) continue; 60 | ioctl(fd, EVIOCGBIT(i, KEY_MAX), bit[i]); 61 | for (j = 0; j < KEY_MAX; j++){ 62 | if (test_bit(j, bit[i])) { 63 | printf(" Event code %d (%s)\n", j, names[i] ? (names[i][j] ? names[i][j] : "?") : "?"); 64 | if (i == EV_ABS) { 65 | ioctl(fd, EVIOCGABS(j), abs); 66 | for (k = 0; k < 5; k++) 67 | if ((k < 3) || abs[k]){ 68 | printf(" %s %6d\n", absval[k], abs[k]); 69 | if (j == 0){ 70 | if (absval[k] == "Min ") *screenXmin = abs[k]; 71 | if (absval[k] == "Max ") *screenXmax = abs[k]; 72 | } 73 | if (j == 1){ 74 | if (absval[k] == "Min ") *screenYmin = abs[k]; 75 | if (absval[k] == "Max ") *screenYmax = abs[k]; 76 | } 77 | } 78 | } 79 | 80 | } 81 | } 82 | } 83 | } 84 | 85 | 86 | void getTouchSample(int *rawX, int *rawY, int *rawPressure) 87 | { 88 | int i; 89 | /* how many bytes were read */ 90 | size_t rb; 91 | /* the events (up to 64 at once) */ 92 | struct input_event ev[64]; 93 | 94 | rb=read(fd,ev,sizeof(struct input_event)*64); 95 | for (i = 0; i < (rb / sizeof(struct input_event)); i++){ 96 | if (ev[i].type == EV_SYN) 97 | printf("Event type is %s%s%s = Start of New Event\n",KYEL,events[ev[i].type],KWHT); 98 | 99 | else if (ev[i].type == EV_KEY && ev[i].code == 330 && ev[i].value == 1) 100 | printf("Event type is %s%s%s & Event code is %sTOUCH(330)%s & Event value is %s1%s = Touch Starting\n", KYEL,events[ev[i].type],KWHT,KYEL,KWHT,KYEL,KWHT); 101 | 102 | else if (ev[i].type == EV_KEY && ev[i].code == 330 && ev[i].value == 0) 103 | printf("Event type is %s%s%s & Event code is %sTOUCH(330)%s & Event value is %s0%s = Touch Finished\n", KYEL,events[ev[i].type],KWHT,KYEL,KWHT,KYEL,KWHT); 104 | 105 | else if (ev[i].type == EV_ABS && ev[i].code == 0 && ev[i].value > 0){ 106 | printf("Event type is %s%s%s & Event code is %sX(0)%s & Event value is %s%d%s\n", KYEL,events[ev[i].type],KWHT,KYEL,KWHT,KYEL,ev[i].value,KWHT); 107 | *rawX = ev[i].value; 108 | //*rawY = 4095 - ev[i].value; 109 | } 110 | else if (ev[i].type == EV_ABS && ev[i].code == 1 && ev[i].value > 0){ 111 | printf("Event type is %s%s%s & Event code is %sY(1)%s & Event value is %s%d%s\n", KYEL,events[ev[i].type],KWHT,KYEL,KWHT,KYEL,ev[i].value,KWHT); 112 | *rawY = ev[i].value; 113 | } 114 | else if (ev[i].type == EV_ABS && ev[i].code == 24 && ev[i].value > 0){ 115 | printf("Event type is %s%s%s & Event code is %sPressure(24)%s & Event value is %s%d%s\n", KYEL,events[ev[i].type],KWHT,KYEL,KWHT,KYEL,ev[i].value,KWHT); 116 | *rawPressure = ev[i].value; 117 | } 118 | 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /Frame/touchtest.c: -------------------------------------------------------------------------------- 1 | /* 2 | gcc -g -o touchtest touchtest.c 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include "../parameter.h" 14 | #include "touch.h" 15 | #include "touch.c" 16 | #include "framebuffer.c" 17 | 18 | #define BUTTON_ON 1 19 | #define BUTTON_OFF 0 20 | #define X 0 21 | #define Y 1 22 | #define W 2 23 | #define H 3 24 | 25 | void INThandler(int sig) 26 | { 27 | 28 | signal(sig, SIG_IGN); 29 | closeFramebuffer(); 30 | exit(0); 31 | } 32 | int mymillis() 33 | { 34 | struct timeval tv; 35 | gettimeofday(&tv, NULL); 36 | return (tv.tv_sec) * 1000 + (tv.tv_usec)/1000; 37 | } 38 | 39 | int main() 40 | { 41 | system("fbset -fb /dev/fb0 -depth 16"); //Umschalten auf 16Bit Display 42 | 43 | signal(SIGINT, INThandler); 44 | 45 | int xres,yres; 46 | 47 | int screenXmax, screenXmin; 48 | int screenYmax, screenYmin; 49 | 50 | float scaleXvalue, scaleYvalue; 51 | 52 | int rawX, rawY, rawPressure, scaledX, scaledY; 53 | 54 | if (openTouchScreen() == 1) 55 | perror("error opening touch screen"); 56 | 57 | getTouchScreenDetails(&screenXmin,&screenXmax,&screenYmin,&screenYmax); 58 | 59 | framebufferInitialize(&xres,&yres); 60 | 61 | scaleXvalue = ((float)screenXmax-screenXmin) / xres; 62 | printf ("X Scale Factor = %f\n", scaleXvalue); 63 | scaleYvalue = ((float)screenYmax-screenYmin) / yres; 64 | printf ("Y Scale Factor = %f\n", scaleYvalue); 65 | 66 | int buttonLO= BUTTON_OFF; 67 | int buttonTimerLO = mymillis(); 68 | int buttonCordsLO[4] = {4,4,30,30}; 69 | createButton(buttonCordsLO[X],buttonCordsLO[Y],buttonCordsLO[W],buttonCordsLO[H],"1",WHITE,GREY); 70 | int buttonRO= BUTTON_OFF; 71 | int buttonTimerRO = mymillis(); 72 | int buttonCordsRO[4] = {770,4,30,30}; 73 | createButton(buttonCordsRO[X],buttonCordsRO[Y],buttonCordsRO[W],buttonCordsRO[H],"2",GREY,BLACK); 74 | int buttonRU= BUTTON_OFF; 75 | int buttonTimerRU = mymillis(); 76 | int buttonCordsRU[4] = {770,450,30,30}; 77 | createButton(buttonCordsRU[X],buttonCordsRU[Y],buttonCordsRU[W],buttonCordsRU[H],"3",GREY,BLACK); 78 | int buttonLU= BUTTON_OFF; 79 | int buttonTimerLU = mymillis(); 80 | int buttonCordsLU[4] = {4,450,30,30}; 81 | createButton(buttonCordsLU[X],buttonCordsLU[Y],buttonCordsLU[W],buttonCordsLU[H],"4",GREY,BLACK); 82 | int buttonCordsM[4] = {300,210,200,60}; 83 | int buttonCordsM1[4] = {310,220,180,20}; 84 | int buttonCordsM2[4] = {310,240,180,20}; 85 | int buttonExit= BUTTON_OFF; 86 | int buttonTimerExit = mymillis(); 87 | int buttonCordsExit[4] = {350,310,100,40}; 88 | int buttonCordsOff[4] = {4,4,796,476}; 89 | drawSquare(2,2,796,476,WHITE); 90 | while(1){ 91 | getTouchSample(&rawX, &rawY, &rawPressure); 92 | scaledX = rawX/scaleXvalue; 93 | scaledY = rawY/scaleYvalue; 94 | printf("scaledX = %i / scaledY = %i\n", scaledX, scaledY); 95 | if((scaledX > buttonCordsLO[X] && scaledX < (buttonCordsLO[X]+buttonCordsLO[W])) && (scaledY > buttonCordsLO[Y] && scaledY < (buttonCordsLO[Y]+buttonCordsLO[H]))){ 96 | if (mymillis() - buttonTimerLO > 250) 97 | if(buttonLO){ 98 | buttonLO= BUTTON_OFF; 99 | buttonTimerLO = mymillis(); 100 | createButton(buttonCordsLO[X],buttonCordsLO[Y],buttonCordsLO[W],buttonCordsLO[H],"1",WHITE,GREY); 101 | createButton(buttonCordsRO[X],buttonCordsRO[Y],buttonCordsRO[W],buttonCordsRO[H],"2",GREY,BLACK); 102 | } 103 | else{ 104 | buttonLO= BUTTON_ON; 105 | buttonTimerLO = mymillis(); 106 | createButton(buttonCordsLO[X],buttonCordsLO[Y],buttonCordsLO[W],buttonCordsLO[H],"OK",WHITE,GREEN); 107 | createButton(buttonCordsRO[X],buttonCordsRO[Y],buttonCordsRO[W],buttonCordsRO[H],"2",WHITE,GREY); 108 | printf("Links Oben OK\n"); 109 | } 110 | } 111 | if(buttonLO == BUTTON_ON && (scaledX > buttonCordsRO[X] && scaledX < (buttonCordsRO[X]+buttonCordsRO[W])) && (scaledY > buttonCordsRO[Y] && scaledY < (buttonCordsRO[Y]+buttonCordsRO[H]))){ 112 | if (mymillis() - buttonTimerRO > 250) 113 | if(buttonRO){ 114 | buttonRO= BUTTON_OFF; 115 | buttonTimerRO = mymillis(); 116 | createButton(buttonCordsRO[X],buttonCordsRO[Y],buttonCordsRO[W],buttonCordsRO[H],"2",WHITE,GREY); 117 | createButton(buttonCordsRU[X],buttonCordsRU[Y],buttonCordsRU[W],buttonCordsRU[H],"3",GREY,BLACK); 118 | } 119 | else{ 120 | buttonRO= BUTTON_ON; 121 | buttonTimerRO = mymillis(); 122 | createButton(buttonCordsRO[X],buttonCordsRO[Y],buttonCordsRO[W],buttonCordsRO[H],"OK",WHITE,GREEN); 123 | createButton(buttonCordsRU[X],buttonCordsRU[Y],buttonCordsRU[W],buttonCordsRU[H],"3",WHITE,GREY); 124 | printf("Rechts Oben OK\n"); 125 | } 126 | } 127 | if(buttonLO == BUTTON_ON && buttonRO == BUTTON_ON && (scaledX > buttonCordsRU[X] && scaledX < (buttonCordsRU[X]+buttonCordsRU[W])) && (scaledY > buttonCordsRU[Y] && scaledY < (buttonCordsRU[Y]+buttonCordsRU[H]))){ 128 | if (mymillis() - buttonTimerRU > 250) 129 | if(buttonRU){ 130 | buttonRU= BUTTON_OFF; 131 | buttonTimerRU = mymillis(); 132 | createButton(buttonCordsRU[X],buttonCordsRU[Y],buttonCordsRU[W],buttonCordsRU[H],"3",WHITE,GREY); 133 | createButton(buttonCordsLU[X],buttonCordsLU[Y],buttonCordsLU[W],buttonCordsLU[H],"4",GREY,BLACK); 134 | } 135 | else{ 136 | buttonRU= BUTTON_ON; 137 | buttonTimerRU = mymillis(); 138 | createButton(buttonCordsRU[X],buttonCordsRU[Y],buttonCordsRU[W],buttonCordsRU[H],"OK",WHITE,GREEN); 139 | createButton(buttonCordsLU[X],buttonCordsLU[Y],buttonCordsLU[W],buttonCordsLU[H],"4",WHITE,GREY); 140 | printf("Rechts Unten OK\n"); 141 | } 142 | } 143 | if(buttonLO == BUTTON_ON && buttonRO == BUTTON_ON && buttonRU == BUTTON_ON && (scaledX > buttonCordsLU[X] && scaledX < (buttonCordsLU[X]+buttonCordsLU[W])) && (scaledY > buttonCordsLU[Y] && scaledY < (buttonCordsLU[Y]+buttonCordsLU[H]))){ 144 | if (mymillis() - buttonTimerLU > 250) 145 | if(buttonLU){ 146 | buttonLU= BUTTON_OFF; 147 | buttonTimerLU = mymillis(); 148 | createButton(buttonCordsLU[X],buttonCordsLU[Y],buttonCordsLU[W],buttonCordsLU[H],"4",WHITE,GREY); 149 | } 150 | else{ 151 | buttonLU= BUTTON_ON; 152 | buttonTimerLU = mymillis(); 153 | createButton(buttonCordsLU[X],buttonCordsLU[Y],buttonCordsLU[W],buttonCordsLU[H],"OK",WHITE,GREEN); 154 | createButton(buttonCordsM[X],buttonCordsM[Y],buttonCordsM[W],buttonCordsM[H],"",WHITE,GREEN); 155 | createButton(buttonCordsM1[X],buttonCordsM1[Y],buttonCordsM1[W],buttonCordsM1[H],"Hallo!",GREEN,GREEN); 156 | createButton(buttonCordsM2[X],buttonCordsM2[Y],buttonCordsM2[W],buttonCordsM2[H],"Dein Display ist OK!",GREEN,GREEN); 157 | createButton(buttonCordsExit[X],buttonCordsExit[Y],buttonCordsExit[W],buttonCordsExit[H],"EXIT",WHITE,RED); 158 | printf("Links Unten OK\n"); 159 | } 160 | } 161 | if((scaledX > buttonCordsExit[X] && scaledX < (buttonCordsExit[X]+buttonCordsExit[W])) && (scaledY > buttonCordsExit[Y] && scaledY < (buttonCordsExit[Y]+buttonCordsExit[H]))){ 162 | if (mymillis() - buttonTimerExit > 250) 163 | if(buttonExit){ 164 | buttonExit= BUTTON_OFF; 165 | buttonTimerExit = mymillis(); 166 | } 167 | else{ 168 | buttonExit= BUTTON_ON; 169 | buttonTimerExit = mymillis(); 170 | createButton(buttonCordsExit[X],buttonCordsExit[Y],buttonCordsExit[W],buttonCordsExit[H],"EXIT",WHITE,GREEN); 171 | printf("Display OK\n"); 172 | sleep(1); 173 | createButton(buttonCordsOff[X],buttonCordsOff[Y],buttonCordsOff[W],buttonCordsOff[H],"",BLACK,BLACK); 174 | return 0; 175 | } 176 | } 177 | 178 | } //while 179 | } //main 180 | -------------------------------------------------------------------------------- /Homematic/DATA-PV.hm: -------------------------------------------------------------------------------- 1 | string vDatum = system.Date("%d.%m.%Y").ToString(); 2 | string vZeit = system.Date("%H:%M").ToString(); 3 | string vTimestamp = system.Date("%F %T").ToString(); 4 | var v001= dom.GetObject("S10_PV-MAX"); 5 | var v002= dom.GetObject("S10_PV-MAX-YDay"); 6 | var v003= dom.GetObject("S10_SOC-MAX"); 7 | var v004= dom.GetObject("S10_SOC-MAX-YDay"); 8 | var v009= dom.GetObject("S10_SOC-MIN"); 9 | var v010= dom.GetObject("S10_SOC-MIN-YDay"); 10 | !Res3 11 | !Res4 12 | var v005 = v001.Value(); 13 | var v006 = v002.Value(); 14 | var v007 = v003.Value(); 15 | var v008 = v004.Value(); 16 | var v011 = v009.Value(); 17 | var v012 = v010.Value(); 18 | 19 | string stdout; 20 | string cmd; 21 | string datei = "data2016-PV-002.csv"; 22 | string datatext; 23 | datatext = vDatum # ";" # vZeit # ";" # vTimestamp # ";" # v005.ToString(0) # ";" # v006.ToString(0) # ";" # v007.ToString(1) # ";" # v008.ToString(1) # ";" # v011.ToString(1) # ";" # v008.ToString(1) # ";" # "---" # ";" # "---"; 24 | 25 | cmd = "echo \"" #datatext #"\" >> /media/sd-mmcblk0/DATA/" #datei; 26 | dom.GetObject("CUxD.CUX2801001:13.CMD_EXEC").State(cmd); 27 | 28 | v002.Variable(v001.Value()); 29 | v004.Variable(v003.Value()); 30 | v010.Variable(v009.Value()); 31 | v001.Variable("0"); 32 | v003.Variable("0"); 33 | v009.Variable("100"); 34 | -------------------------------------------------------------------------------- /Homematic/Display-S10.hm: -------------------------------------------------------------------------------- 1 | !! Script für die Anzeige der S10 Daten auf einen Display "HM-Dis-WM55" von Homematic 2 | 3 | !! Universalprogramm zum Füllen 4 | !! Version 1.0 5 | !! Grund-Script von 6 | !! (c) DrTob, optimized by thkl 7 | 8 | !! Das Script holt sich jetzt die Seriennummer des Displays selbst aus der Auslösebedinung des Programms 9 | 10 | ! Farben 11 | ! 0x80 weiß 12 | ! 0x81 rot 13 | ! 0x82 orange 14 | ! 0x83 gelb 15 | ! 0x84 gruen 16 | ! 0x85 blau 17 | 18 | ! Symbole 19 | ! 0x80 AUS 20 | ! 0x81 EIN 21 | ! 0x82 OFFEN 22 | ! 0x83 geschlossen 23 | ! 0x84 fehler 24 | ! 0x85 alles ok 25 | ! 0x86 information 26 | ! 0x87 neue nachricht 27 | ! 0x88 servicemeldung 28 | ! 0x89 Signal grün 29 | ! 0x8A Signal gelb 30 | ! 0x8B Signal rot 31 | 32 | var S10EPP = dom.GetObject("S10_EMS_POWER_PV").State(); 33 | var S10EPB = dom.GetObject("S10_EMS_POWER_BAT").State(); 34 | var S10EPG = dom.GetObject("S10_EMS_POWER_GRID").State(); 35 | var S10EPH = dom.GetObject("S10_EMS_POWER_HOME").State(); 36 | var S10SOC = dom.GetObject("S10_BAT_SOC").State(); 37 | time RSCPTime = dom.GetObject("S10_RSCP_Time").ToTime(); 38 | string RSCPTimeStamp = RSCPTime.ToTime(); 39 | time vTime = system.Date("%Y-%m-%d %H:%M:%S").ToTime(); 40 | string vTimeInteger = vTime.ToInteger(); 41 | 42 | string zeile1 = "PV"#" "# S10EPP.ToString(0); 43 | string color1 = "0x80"; 44 | if (S10EPP > 200) {color1 = "0x83";} 45 | string icon1 = ""; 46 | 47 | string zeile2 = "GRID"#" "# S10EPG.ToString(0); 48 | string color2 = "0x80"; 49 | if (S10EPG < 15) {color2 = "0x84";} 50 | if (S10EPG > 15) {color2 = "0x82";} 51 | if (S10EPG < -20) {color2 = "0x85";} 52 | string icon2 = ""; 53 | 54 | string zeile3 = "HOME"#" "# S10EPH.ToString(0); 55 | string color3 = "0x80"; 56 | string icon3 = ""; 57 | 58 | string zeile4 = "BAT"#" "# S10EPB.ToString(0); 59 | string color4 = "0x80"; 60 | string icon4 = ""; 61 | 62 | string zeile5 = "SOC"#" "# S10SOC.ToString(1); 63 | string color5 = "0x80"; 64 | string icon5 = ""; 65 | 66 | string zeile6 = RSCPTimeStamp.Format("%d.%m. %H:%M"); 67 | string color6 = "0x80"; 68 | var khp = vTimeInteger.ToInteger() - RSCPTimeStamp.ToInteger(); 69 | if (khp < 120) {color6 = "0x84";} 70 | if (khp > 360) {color6 = "0x81";} 71 | string icon6 = ""; 72 | 73 | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 74 | ! System Routine nicht bearbeiten ! 75 | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 76 | 77 | string splitter="|"; 78 | string msgBuffer = zeile1 # splitter # color1 # splitter # icon1 # "\t"; 79 | msgBuffer = msgBuffer # zeile2 # splitter # color2 # splitter # icon2 # "\t"; 80 | msgBuffer = msgBuffer # zeile3 # splitter # color3 # splitter # icon3 # "\t"; 81 | msgBuffer = msgBuffer # zeile4 # splitter # color4 # splitter # icon4 # "\t"; 82 | msgBuffer = msgBuffer # zeile5 # splitter # color5 # splitter # icon5 # "\t"; 83 | msgBuffer = msgBuffer # zeile6 # splitter # color6 # splitter # icon6; 84 | 85 | string substitutions = "A,0x41\tB,0x42\tC,0x43\tD,0x44\tE,0x45\tF,0x46\tG,0x47\tH,0x48\tI,0x49\tJ,0x4A\tK,0x4B\tL,0x4C\tM,0x4D\tN,0x4E\tO,0x4F\tP,0x50\tQ,0x51\tR,0x52\tS,0x53\tT,0x54\tU,0x55\tV,0x56\tW,0x57\tX,0x58\tY,0x59\tZ,0x5A"; 86 | substitutions = substitutions # "\ta,0x61\tb,0x62\tc,0x63\td,0x64\te,0x65\tf,0x66\tg,0x67\th,0x68\ti,0x69\tj,0x6A\tk,0x6B\tl,0x6C\tm,0x6D\tn,0x6E\to,0x6F\tp,0x70\tq,0x71\tr,0x72\ts,0x73\tt,0x74\tu,0x75\tv,0x76\tw,0x77\tx,0x78\ty,0x79\tz,0x7A"; 87 | substitutions = substitutions # "\t0,0x30\t1,0x31\t2,0x32\t3,0x33\t4,0x34\t5,0x35\t6,0x36\t7,0x37\t8,0x38\t9,0x39\t ,0x20\t!,0x21\t\",0x22\t%,0x25\t&,0x26\t=,0x27\t(,0x28\t),0x29\t*,0x2A\t+,0x2B\t,,0x2C\t-,0x2D\t.,0x2E\t/,0x2F"; 88 | substitutions = substitutions # "\tÄ,0x5B\tÖ,0x23\tÜ,0x24\tä,0x7B\tö,0x7C\tü,0x7D\tß,0x5F\t:,0x3A\t;,0x3B\t@,0x40\t>,0x3E"; 89 | 90 | string bufferLine; 91 | string substEntry; 92 | integer i; 93 | string char; 94 | string line; 95 | string icon; 96 | 97 | string command = "0x02"; 98 | foreach(bufferLine, msgBuffer) { 99 | line = bufferLine.StrValueByIndex(splitter, 0); 100 | icon = bufferLine.StrValueByIndex(splitter, 2); 101 | if ((line <> "") || (icon <> "")) { 102 | command = command # ",0x12"; 103 | if ((line.Substr(0,2) == "0x") && (line.Length() == 4)) { 104 | command = command # "," # line; 105 | i = 12; 106 | } 107 | else { 108 | i = 0; 109 | } 110 | while ((i < line.Length()) && (i < 12)) { 111 | char = line.Substr(i, 1); 112 | foreach(substEntry, substitutions){ 113 | if (char == substEntry.Substr(0,1)){command = command # substEntry.Substr(1,5);} 114 | } 115 | i = i + 1; 116 | } 117 | command = command # ",0x11," # bufferLine.StrValueByIndex(splitter, 1); 118 | if (icon <> "") { 119 | command = command # ",0x13," # icon; 120 | } 121 | } 122 | command = command # ",0x0A"; 123 | } 124 | command = command # ",0x03"; 125 | 126 | dom.GetObject("BidCos-RF." # dom.GetObject("$src$").Name().StrValueByIndex(".",1) # ".SUBMIT").State(command); 127 | -------------------------------------------------------------------------------- /Homematic/S10_min-maxSOC_V0.hm: -------------------------------------------------------------------------------- 1 | var source = dom.GetObject("$src$"); 2 | var v104 = dom.GetObject("S10_BAT_SOC"); 3 | 4 | var v103 = dom.GetObject("S10_SOC-MAX"); 5 | if (source) 6 | { 7 | if (source.Value() > v103.Variable()) 8 | { 9 | v103.Variable(source.Value()); 10 | } 11 | } 12 | else 13 | { 14 | v103.Variable(v104.Value()); 15 | } 16 | 17 | var v109 = dom.GetObject("S10_SOC-MIN"); 18 | if (source) 19 | { 20 | if (source.Value() < v109.Variable()) 21 | { 22 | v109.Variable(source.Value()); 23 | } 24 | } 25 | else 26 | { 27 | v109.Variable(v104.Value()); 28 | } 29 | -------------------------------------------------------------------------------- /Image/AktuellImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/AktuellImage.ppm -------------------------------------------------------------------------------- /Image/Autarkie.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Autarkie.ppm -------------------------------------------------------------------------------- /Image/BatImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/BatImage.ppm -------------------------------------------------------------------------------- /Image/Batterie/Auto.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Batterie/Auto.ppm -------------------------------------------------------------------------------- /Image/Batterie/BatterieLimits.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Batterie/BatterieLimits.ppm -------------------------------------------------------------------------------- /Image/Batterie/Charge.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Batterie/Charge.ppm -------------------------------------------------------------------------------- /Image/Batterie/Discharge.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Batterie/Discharge.ppm -------------------------------------------------------------------------------- /Image/Batterie/Ist.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Batterie/Ist.ppm -------------------------------------------------------------------------------- /Image/Batterie/Manuell.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Batterie/Manuell.ppm -------------------------------------------------------------------------------- /Image/Batterie/Soll.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Batterie/Soll.ppm -------------------------------------------------------------------------------- /Image/ChangeImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/ChangeImage.ppm -------------------------------------------------------------------------------- /Image/Eigenstrom.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Eigenstrom.ppm -------------------------------------------------------------------------------- /Image/EinstImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EinstImage.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Minus10000.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Minus10000.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Minus10000Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Minus10000Off.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Minus2000.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Minus2000.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Minus2000Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Minus2000Off.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Minus500.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Minus500.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Minus500Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Minus500Off.ppm -------------------------------------------------------------------------------- /Image/EpReserve/NotRes.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/NotRes.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Plus10000.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Plus10000.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Plus10000Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Plus10000Off.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Plus2000.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Plus2000.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Plus2000Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Plus2000Off.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Plus500.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Plus500.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Plus500Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Plus500Off.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Set.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Set.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Tracker1.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Tracker1.ppm -------------------------------------------------------------------------------- /Image/EpReserve/Tracker2.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/Tracker2.ppm -------------------------------------------------------------------------------- /Image/EpReserve/maxsw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/maxsw.ppm -------------------------------------------------------------------------------- /Image/EpReserve/reservesw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/reservesw.ppm -------------------------------------------------------------------------------- /Image/EpReserve/setsw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/EpReserve/setsw.ppm -------------------------------------------------------------------------------- /Image/ExtImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/ExtImage.ppm -------------------------------------------------------------------------------- /Image/FunktionImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/FunktionImage.ppm -------------------------------------------------------------------------------- /Image/GBImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/GBImage.ppm -------------------------------------------------------------------------------- /Image/GB_Logo.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/GB_Logo.ppm -------------------------------------------------------------------------------- /Image/GB_Prozent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/GB_Prozent.ppm -------------------------------------------------------------------------------- /Image/HMImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/HMImage.ppm -------------------------------------------------------------------------------- /Image/HistoryOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/HistoryOff.ppm -------------------------------------------------------------------------------- /Image/HomeImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/HomeImage.ppm -------------------------------------------------------------------------------- /Image/IdleCharge.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/IdleCharge.ppm -------------------------------------------------------------------------------- /Image/IdleDischarge.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/IdleDischarge.ppm -------------------------------------------------------------------------------- /Image/IdlePeriods.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/IdlePeriods.ppm -------------------------------------------------------------------------------- /Image/Info/DeratePercent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Info/DeratePercent.ppm -------------------------------------------------------------------------------- /Image/Info/DeratePower.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Info/DeratePower.ppm -------------------------------------------------------------------------------- /Image/Info/EmsState.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Info/EmsState.ppm -------------------------------------------------------------------------------- /Image/Info/EpState.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Info/EpState.ppm -------------------------------------------------------------------------------- /Image/Info/InstPower.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Info/InstPower.ppm -------------------------------------------------------------------------------- /Image/Info/Seriennummer.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Info/Seriennummer.ppm -------------------------------------------------------------------------------- /Image/Info/SwRelease.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Info/SwRelease.ppm -------------------------------------------------------------------------------- /Image/LangzeitImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/LangzeitImage.ppm -------------------------------------------------------------------------------- /Image/MonitorImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/MonitorImage.ppm -------------------------------------------------------------------------------- /Image/Muell/bio.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Muell/bio.ppm -------------------------------------------------------------------------------- /Image/Muell/feiertag.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Muell/feiertag.ppm -------------------------------------------------------------------------------- /Image/Muell/frei.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Muell/frei.ppm -------------------------------------------------------------------------------- /Image/Muell/gelb.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Muell/gelb.ppm -------------------------------------------------------------------------------- /Image/Muell/glas.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Muell/glas.ppm -------------------------------------------------------------------------------- /Image/Muell/metall.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Muell/metall.ppm -------------------------------------------------------------------------------- /Image/Muell/papier.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Muell/papier.ppm -------------------------------------------------------------------------------- /Image/Muell/rest.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Muell/rest.ppm -------------------------------------------------------------------------------- /Image/Muell/schadstoff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Muell/schadstoff.ppm -------------------------------------------------------------------------------- /Image/MuellImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/MuellImage.ppm -------------------------------------------------------------------------------- /Image/NetImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/NetImage.ppm -------------------------------------------------------------------------------- /Image/NetImageOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/NetImageOff.ppm -------------------------------------------------------------------------------- /Image/PV_Modul_aktiv.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/PV_Modul_aktiv.ppm -------------------------------------------------------------------------------- /Image/PV_Modul_deaktiv.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/PV_Modul_deaktiv.ppm -------------------------------------------------------------------------------- /Image/PviImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/PviImage.ppm -------------------------------------------------------------------------------- /Image/S10Image.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/S10Image.ppm -------------------------------------------------------------------------------- /Image/SmartImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/SmartImage.ppm -------------------------------------------------------------------------------- /Image/Switch/0percent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/0percent.ppm -------------------------------------------------------------------------------- /Image/Switch/10percent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/10percent.ppm -------------------------------------------------------------------------------- /Image/Switch/1Ph.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/1Ph.ppm -------------------------------------------------------------------------------- /Image/Switch/20percent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/20percent.ppm -------------------------------------------------------------------------------- /Image/Switch/30percent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/30percent.ppm -------------------------------------------------------------------------------- /Image/Switch/3Ph.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/3Ph.ppm -------------------------------------------------------------------------------- /Image/Switch/40percent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/40percent.ppm -------------------------------------------------------------------------------- /Image/Switch/50percent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/50percent.ppm -------------------------------------------------------------------------------- /Image/Switch/60percent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/60percent.ppm -------------------------------------------------------------------------------- /Image/Switch/70percent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/70percent.ppm -------------------------------------------------------------------------------- /Image/Switch/80percent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/80percent.ppm -------------------------------------------------------------------------------- /Image/Switch/90percent.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/90percent.ppm -------------------------------------------------------------------------------- /Image/Switch/Halt.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Halt.ppm -------------------------------------------------------------------------------- /Image/Switch/HaltOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/HaltOff.ppm -------------------------------------------------------------------------------- /Image/Switch/Minus.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Minus.ppm -------------------------------------------------------------------------------- /Image/Switch/Minus10.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Minus10.ppm -------------------------------------------------------------------------------- /Image/Switch/Minus10Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Minus10Off.ppm -------------------------------------------------------------------------------- /Image/Switch/Minus2.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Minus2.ppm -------------------------------------------------------------------------------- /Image/Switch/Minus2Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Minus2Off.ppm -------------------------------------------------------------------------------- /Image/Switch/MinusOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/MinusOff.ppm -------------------------------------------------------------------------------- /Image/Switch/Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Off.ppm -------------------------------------------------------------------------------- /Image/Switch/On.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/On.ppm -------------------------------------------------------------------------------- /Image/Switch/Plus.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Plus.ppm -------------------------------------------------------------------------------- /Image/Switch/Plus10.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Plus10.ppm -------------------------------------------------------------------------------- /Image/Switch/Plus10Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Plus10Off.ppm -------------------------------------------------------------------------------- /Image/Switch/Plus2.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Plus2.ppm -------------------------------------------------------------------------------- /Image/Switch/Plus2Off.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Plus2Off.ppm -------------------------------------------------------------------------------- /Image/Switch/PlusOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/PlusOff.ppm -------------------------------------------------------------------------------- /Image/Switch/Send.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Send.ppm -------------------------------------------------------------------------------- /Image/Switch/Stop.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Stop.ppm -------------------------------------------------------------------------------- /Image/Switch/StopOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/StopOff.ppm -------------------------------------------------------------------------------- /Image/Switch/Weiter.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/Weiter.ppm -------------------------------------------------------------------------------- /Image/Switch/WeiterOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Switch/WeiterOff.ppm -------------------------------------------------------------------------------- /Image/SystemInfo.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/SystemInfo.ppm -------------------------------------------------------------------------------- /Image/Today.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Today.ppm -------------------------------------------------------------------------------- /Image/Wallbox.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Autogr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Autogr.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Autoor.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Autoor.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Autosw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Autosw.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Car.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Car.ppm -------------------------------------------------------------------------------- /Image/Wallbox/CarConnect.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/CarConnect.ppm -------------------------------------------------------------------------------- /Image/Wallbox/CarGrid.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/CarGrid.ppm -------------------------------------------------------------------------------- /Image/Wallbox/CarLocked.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/CarLocked.ppm -------------------------------------------------------------------------------- /Image/Wallbox/CarMix.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/CarMix.ppm -------------------------------------------------------------------------------- /Image/Wallbox/CarSun.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/CarSun.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/10A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/10A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/11A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/11A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/12A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/12A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/13A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/13A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/14A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/14A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/15A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/15A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/16A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/16A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/17A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/17A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/18A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/18A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/19A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/19A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/20A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/20A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/21A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/21A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/22A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/22A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/23A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/23A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/24A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/24A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/25A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/25A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/26A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/26A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/27A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/27A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/28A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/28A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/29A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/29A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/30A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/30A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/31A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/31A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/32A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/32A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/6A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/6A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/7A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/7A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/8A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/8A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Current/9A.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Current/9A.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Mon_WbError.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Mon_WbError.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Mon_WbMixOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Mon_WbMixOff.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Mon_WbMixOn.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Mon_WbMixOn.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Mon_WbSunOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Mon_WbSunOff.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Mon_WbSunOn.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Mon_WbSunOn.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Netzbl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Netzbl.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Solaror.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Solaror.ppm -------------------------------------------------------------------------------- /Image/Wallbox/Wallbox.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/Wallbox.ppm -------------------------------------------------------------------------------- /Image/Wallbox/WbError.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/WbError.ppm -------------------------------------------------------------------------------- /Image/Wallbox/WbMixOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/WbMixOff.ppm -------------------------------------------------------------------------------- /Image/Wallbox/WbMixOn.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/WbMixOn.ppm -------------------------------------------------------------------------------- /Image/Wallbox/WbSunOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/WbSunOff.ppm -------------------------------------------------------------------------------- /Image/Wallbox/WbSunOn.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wallbox/WbSunOn.ppm -------------------------------------------------------------------------------- /Image/WallboxImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/WallboxImage.ppm -------------------------------------------------------------------------------- /Image/Wetter/01d.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/01d.ppm -------------------------------------------------------------------------------- /Image/Wetter/01n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/01n.ppm -------------------------------------------------------------------------------- /Image/Wetter/02d.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/02d.ppm -------------------------------------------------------------------------------- /Image/Wetter/02n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/02n.ppm -------------------------------------------------------------------------------- /Image/Wetter/03d.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/03d.ppm -------------------------------------------------------------------------------- /Image/Wetter/03n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/03n.ppm -------------------------------------------------------------------------------- /Image/Wetter/04d.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/04d.ppm -------------------------------------------------------------------------------- /Image/Wetter/04n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/04n.ppm -------------------------------------------------------------------------------- /Image/Wetter/09d.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/09d.ppm -------------------------------------------------------------------------------- /Image/Wetter/09n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/09n.ppm -------------------------------------------------------------------------------- /Image/Wetter/10d.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/10d.ppm -------------------------------------------------------------------------------- /Image/Wetter/10n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/10n.ppm -------------------------------------------------------------------------------- /Image/Wetter/11d.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/11d.ppm -------------------------------------------------------------------------------- /Image/Wetter/11n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/11n.ppm -------------------------------------------------------------------------------- /Image/Wetter/13d.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/13d.ppm -------------------------------------------------------------------------------- /Image/Wetter/13n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/13n.ppm -------------------------------------------------------------------------------- /Image/Wetter/50d.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/50d.ppm -------------------------------------------------------------------------------- /Image/Wetter/50n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Wetter/50n.ppm -------------------------------------------------------------------------------- /Image/WetterImage.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/WetterImage.ppm -------------------------------------------------------------------------------- /Image/Yesterday.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Yesterday.ppm -------------------------------------------------------------------------------- /Image/Zahlen/asw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/asw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/dotsw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/dotsw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/kwhsw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/kwhsw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/kwsw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/kwsw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/lmOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/lmOff.ppm -------------------------------------------------------------------------------- /Image/Zahlen/percentbl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/percentbl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/percentsw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/percentsw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/pf0.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/pf0.ppm -------------------------------------------------------------------------------- /Image/Zahlen/pf0n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/pf0n.ppm -------------------------------------------------------------------------------- /Image/Zahlen/pf1.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/pf1.ppm -------------------------------------------------------------------------------- /Image/Zahlen/pf1n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/pf1n.ppm -------------------------------------------------------------------------------- /Image/Zahlen/pf2.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/pf2.ppm -------------------------------------------------------------------------------- /Image/Zahlen/pf2n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/pf2n.ppm -------------------------------------------------------------------------------- /Image/Zahlen/pf3.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/pf3.ppm -------------------------------------------------------------------------------- /Image/Zahlen/pf3n.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/pf3n.ppm -------------------------------------------------------------------------------- /Image/Zahlen/pvOff.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/pvOff.ppm -------------------------------------------------------------------------------- /Image/Zahlen/vsw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/vsw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/wattbl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/wattbl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/wattcy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/wattcy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/wattgr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/wattgr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/wattor.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/wattor.ppm -------------------------------------------------------------------------------- /Image/Zahlen/wattsw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/wattsw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/white.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/white.ppm -------------------------------------------------------------------------------- /Image/Zahlen/whsw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/whsw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/wpsw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/wpsw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z0bl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z0bl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z0cy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z0cy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z0gr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z0gr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z0or.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z0or.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z0sw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z0sw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z1bl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z1bl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z1cy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z1cy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z1gr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z1gr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z1or.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z1or.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z1sw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z1sw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z2bl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z2bl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z2cy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z2cy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z2gr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z2gr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z2or.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z2or.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z2sw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z2sw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z3bl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z3bl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z3cy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z3cy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z3gr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z3gr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z3or.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z3or.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z3sw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z3sw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z4bl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z4bl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z4cy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z4cy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z4gr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z4gr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z4or.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z4or.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z4sw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z4sw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z5bl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z5bl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z5cy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z5cy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z5gr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z5gr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z5or.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z5or.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z5sw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z5sw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z6bl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z6bl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z6cy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z6cy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z6gr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z6gr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z6or.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z6or.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z6sw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z6sw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z7bl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z7bl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z7cy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z7cy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z7gr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z7gr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z7or.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z7or.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z7sw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z7sw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z8bl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z8bl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z8cy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z8cy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z8gr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z8gr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z8or.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z8or.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z8sw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z8sw.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z9bl.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z9bl.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z9cy.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z9cy.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z9gr.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z9gr.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z9or.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z9or.ppm -------------------------------------------------------------------------------- /Image/Zahlen/z9sw.ppm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nischram/E3dcGui/55a80d778367eed02b0176f80dbf721f1751ae95/Image/Zahlen/z9sw.ppm -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | CXX ?=g++ 2 | CC ?=gcc 3 | ROOT_CP=copyPara 4 | ROOT_WD=watchdog 5 | ROOT_SS=screenSave 6 | ROOT_SSHM=screenSaveHM 7 | ROOT_GM=GuiMain 8 | ROOT_GB=External/gruenSave 9 | ROOT_START=start 10 | ROOT_STOP=stop 11 | ROOT_RM=RscpMain 12 | ROOT_RSET=Rscp/RscpSet 13 | ROOT_ACCK=Rscp/actionCheckHM 14 | ROOT_HISTORY=S10history/S10history 15 | ROOT_LM=External/LedMain 16 | ROOT_TT=Frame/touchtest 17 | 18 | all: $(ROOT_CP) $(ROOT_WD) $(ROOT_SS) $(ROOT_SSHM) $(ROOT_GM) $(ROOT_START) $(ROOT_STOP) $(ROOT_RM) $(ROOT_RSET) $(ROOT_HISTORY) 19 | 20 | $(ROOT_CP): cleanCP 21 | $(CC) -O1 copyPara.c -o $@ 22 | $(ROOT_WD): cleanWD 23 | $(CXX) -O1 Watchdog.cpp -o $@ 24 | $(ROOT_SS): cleanSS 25 | $(CC) -O1 screenSave.c -o $@ 26 | $(ROOT_SSHM): cleanSSHM 27 | $(CC) -O1 screenSaveHM.c -o $@ -lwiringPi 28 | $(ROOT_GM): cleanGM 29 | $(CC) -O1 GuiMain.c -lcurl -o $@ -lwiringPi 30 | $(ROOT_GB): cleanGB 31 | $(CC) -O1 External/gruenSave.c -o $@ 32 | $(ROOT_START): cleanSTART 33 | $(CC) -O1 start.c -o $@ 34 | $(ROOT_STOP): cleanSTOP 35 | $(CC) -O1 stop.c -o $@ 36 | $(ROOT_RM): cleanRM 37 | $(CXX) -O3 RscpMain.cpp Rscp/RscpProtocol.cpp Rscp/AES.cpp Rscp/SocketConnection.cpp -o $@ 38 | $(ROOT_RSET): cleanRSet 39 | $(CXX) -O3 Rscp/RscpSet.cpp Rscp/RscpProtocol.cpp Rscp/AES.cpp Rscp/SocketConnection.cpp -o $@ 40 | $(ROOT_ACCK): cleanACCK 41 | $(CC) -O1 Rscp/actionCheckHM.c -o $@ 42 | $(ROOT_HISTORY): cleanHISTORY 43 | $(CXX) -O3 S10history/S10history.cpp S10history/RscpReader.cpp Rscp/RscpProtocol.cpp Rscp/AES.cpp Rscp/SocketConnection.cpp -o $@ 44 | $(ROOT_LM): cleanLM 45 | $(CC) -O1 External/LedMain.c rpi_ws281x/mailbox.c rpi_ws281x/ws2811.c rpi_ws281x/pwm.c rpi_ws281x/pcm.c rpi_ws281x/dma.c rpi_ws281x/rpihw.c -o $@ -lwiringPi 46 | $(ROOT_TT): cleanTT 47 | $(CC) -O1 Frame/touchtest.c -o $@ 48 | 49 | cleanCP: 50 | -rm $(ROOT_CP) $(VECTOR) 51 | cleanWD: 52 | -rm $(ROOT_WD) $(VECTOR) 53 | cleanSS: 54 | -rm $(ROOT_SS) $(VECTOR) 55 | cleanSSHM: 56 | -rm $(ROOT_SSHM) $(VECTOR) 57 | cleanGM: 58 | -rm $(ROOT_GM) $(VECTOR) 59 | cleanGB: 60 | -rm $(ROOT_GB) $(VECTOR) 61 | cleanSTART: 62 | -rm $(ROOT_START) $(VECTOR) 63 | cleanSTOP: 64 | -rm $(ROOT_STOP) $(VECTOR) 65 | cleanRM: 66 | -rm $(ROOT_RM) $(VECTOR) 67 | cleanRSet: 68 | -rm $(ROOT_RSET) $(VECTOR) 69 | cleanACCK: 70 | -rm $(ROOT_ACCK) $(VECTOR) 71 | cleanHISTORY: 72 | -rm $(ROOT_HISTORY) $(VECTOR) 73 | cleanLM: 74 | -rm $(ROOT_LM) $(VECTOR) 75 | cleanTT: 76 | -rm $(ROOT_TT) $(VECTOR) 77 | -------------------------------------------------------------------------------- /Rscp/AES.h: -------------------------------------------------------------------------------- 1 | /* AES - Advanced Encryption Standard 2 | 3 | source version 1.0, June, 2005 4 | 5 | Copyright (C) 2000-2005 Chris Lomont 6 | 7 | This software is provided 'as-is', without any express or implied 8 | warranty. In no event will the author be held liable for any damages 9 | arising from the use of this software. 10 | 11 | Permission is granted to anyone to use this software for any purpose, 12 | including commercial applications, and to alter it and redistribute it 13 | freely, subject to the following restrictions: 14 | 15 | 1. The origin of this software must not be misrepresented; you must not 16 | claim that you wrote the original software. If you use this software 17 | in a product, an acknowledgment in the product documentation would be 18 | appreciated but is not required. 19 | 2. Altered source versions must be plainly marked as such, and must not be 20 | misrepresented as being the original software. 21 | 3. This notice may not be removed or altered from any source distribution. 22 | 23 | Chris Lomont 24 | chris@lomont.org 25 | 26 | The AES Standard is maintained by NIST 27 | http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf 28 | 29 | This legalese is patterned after the zlib compression library 30 | */ 31 | 32 | // headed to implement Advanced Encryption Standard - Rijndael2 33 | #ifndef _AES_H 34 | #define _AES_H 35 | 36 | #include 37 | 38 | /* USAGE: 39 | 1. Create a AES class (or more as necessary) 40 | 2. Call class method SetParameters 41 | 3. To encrypt, call method StartEncryption with the key, and then 42 | call method Encrypt with enough space to store the proper size blocks. 43 | 4. To decrypt, call method StartDecryption with the key, and then 44 | call method Decrypt with enough space to store the proper size blocks. 45 | 46 | Alternatively, you can call EncryptBlock and DecryptBlock block to process blocksize 47 | (default to 16 bytes) bytes at a time. It is recommended to use the Encrypt function 48 | for multiple block encryption since it uses chaining modes that make the overall 49 | stream much more secure than the default block based encryption, which by default would 50 | be mode ECB. 51 | 52 | EXAMPLE: want to encrypt 37 bytes of data with 192 bit key, which will use 3 16 byte blocks 53 | AES aes; 54 | aes.SetParameters(192); 55 | aes.StartEncryption(key); 56 | aes.Encrypt(data,output,3); // note data and output must be at least 48 bytes! 57 | */ 58 | 59 | #define ROUNDUP(x, y) (((x) + (y-1)) & ~(y-1)) 60 | #define ROUNDDOWN(x, y) ((x) & ~(y-1)) 61 | 62 | // todo - replace all types with u1byte, u4byte, etc 63 | 64 | class AES 65 | { 66 | public: 67 | // the constructor - makes sure local things are initialized 68 | // it if fails, throws the string "Tables failed to initialize" 69 | AES(void); 70 | 71 | // multiple block encryption/decryption modes 72 | // See http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation 73 | enum BlockMode { 74 | ECB = 0, // Electronic CodeBook - each block independent, weak 75 | CBC = 1 // Cipher Block Chaining - most secure 76 | // todo - CFB = 2, // Cipher FeedBack - secure 77 | // todo - OFB = 3, // Output FeedBack - secure 78 | // todo - CTR = 4, // Counter - allows midstream decryption, somewhat secure 79 | // todo - EAX = 5, - http://www.cs.berkeley.edu/~daw/papers/eprint-short-ae.pdf 80 | // todo - GCM = 6, - http://www.cryptobarn.com/papers/gcm-spec.pdf 81 | }; 82 | 83 | // block and key size are in bits, legal values are 128, 192, and 256 independently. 84 | // NOTE: the AES standard only uses a blocksize of 128, so we default to that 85 | void SetParameters(int keylength, int blocklength = 128); 86 | void SetIV(const unsigned char * ucIV, unsigned int iIVsize); 87 | 88 | // call this before any encryption with the key to use 89 | void StartEncryption(const unsigned char * key); 90 | // encrypt a single block (default 128 bits, or unsigned char[16]) of data 91 | void EncryptBlock(const unsigned char * datain, unsigned char * dataout); 92 | // Call this to encrypt any length data. Note the size is in BLOCKS, so you must 93 | // have enough space in datain and dataout to accomodate this. Pad your data before 94 | // calling, preferably using the padding methods listed below. 95 | // Decryption must use the same mode as the encryption. 96 | void Encrypt(const unsigned char * datain, unsigned char * dataout, uint32_t numBlocks, BlockMode mode = CBC); 97 | 98 | // call this before any decryption with the key to use 99 | void StartDecryption(const unsigned char * key); 100 | // decrypt a single block (default 128 bits, or unsigned char[16]) of data 101 | void DecryptBlock(const unsigned char * datain, unsigned char * dataout); 102 | // Call this to decrypt any length data. Note the size is in BLOCKS, so you must 103 | // have enough space in datain and dataout to accomodate this. Pad your data before 104 | // calling, preferably using the padding methods listed below. You must know the desired 105 | // length of the output data, since all the blocks are returned decrypted. 106 | // Encryption must use the same mode as the decryption. 107 | void Decrypt(const unsigned char * datain, unsigned char * dataout, uint32_t numBlocks, BlockMode mode = CBC); 108 | 109 | private: 110 | 111 | int32_t Nb,Nk; // block and key length / 32, should be 4,6,or 8 112 | int32_t Nr; // number of rounds 113 | 114 | unsigned char W[4*8*15]; // the expanded key 115 | unsigned char iv[32]; // initial value which is incremented 116 | 117 | // Key expansion code - makes local copy 118 | void KeyExpansion(const unsigned char * key); 119 | 120 | }; // class AES 121 | 122 | 123 | /* PADDING: 124 | The AES (Rijndael) encryption algorithm pads encrypted data to a multiple of 16 bytes by default. 125 | Other blocksizes are similar. Methods: 126 | 1. RFC 1423 padding scheme: 127 | Each padding byte is set to the number of padding bytes. If the data is already a multiple 128 | of 16 bytes, 16 additional bytes are added, each having the value 0x10. 129 | 2. FIPS81 (Federal Information Processing Standards 81): 130 | The last byte contains the number of padding bytes, including itself, 131 | and the other padding bytes are set to random values. 132 | 3. Each padding byte is set to a random value. The decryptor must know how many bytes are in the original unencrypted data. 133 | */ 134 | 135 | /* TODO 136 | The Encrypt() function is used to encrypt larger blocks of data. The block size has to be a multiple of the method's block size. 137 | This function can operate in the following modes: ECB, CBC or CFB. ECB mode is not using chaining. If the same block is encrypted 138 | twice with the same key, the resulting ciphertext blocks are the same. In CBC mode, a ciphertext block is obtained by first XORing 139 | the plaintext block with the previous ciphertext block, and encrypting the resulting value. In CFB mode, a ciphertext block is 140 | obtained by encrypting the previous ciphertext block and XORing the resulting value with the plaintext. The operation mode is 141 | specified in the iMode parameter with ECB being the default value. 142 | 143 | */ 144 | 145 | #endif // _AES_H 146 | -------------------------------------------------------------------------------- /Rscp/RscpTypes.h: -------------------------------------------------------------------------------- 1 | #ifndef __RSCP_TYPES_H_ 2 | #define __RSCP_TYPES_H_ 3 | 4 | #include 5 | #include 6 | 7 | #define RSCP_MAX_FRAME_LENGTH (sizeof(SRscpFrameHeader) + 0xFFFF + sizeof(SRscpFrame::CRC)) 8 | 9 | namespace RSCP { 10 | const uint16_t MAGIC = 0xDCE3; 11 | const uint8_t VERSION = 0x01; 12 | 13 | enum eRscpTagTypes { 14 | eRequest = 0, 15 | eResponse = 1 16 | }; 17 | 18 | enum eRscpDataType { 19 | eTypeNone = 0, 20 | eTypeBool = 1, 21 | eTypeChar8 = 2, 22 | eTypeUChar8 = 3, 23 | eTypeInt16 = 4, 24 | eTypeUInt16 = 5, 25 | eTypeInt32 = 6, 26 | eTypeUInt32 = 7, 27 | eTypeInt64 = 8, 28 | eTypeUInt64 = 9, 29 | eTypeFloat32 = 10, 30 | eTypeDouble64 = 11, 31 | eTypeBitfield = 12, 32 | eTypeString = 13, 33 | eTypeContainer = 14, 34 | eTypeTimestamp = 15, 35 | eTypeByteArray = 16, 36 | eTypeError = 255 37 | }; 38 | 39 | enum eRscpReturnCodes { 40 | OK = 0, 41 | ERR_INVALID_INPUT = -1, 42 | ERR_NO_MEMORY = -2, 43 | ERR_INVALID_MAGIC = -3, 44 | ERR_PROT_VERSION_MISMATCH = -4, 45 | ERR_INVALID_FRAME_LENGTH = -5, 46 | ERR_INVALID_CRC = -6, 47 | ERR_DATA_LIMIT_EXCEEDED = -7 48 | }; 49 | } 50 | 51 | enum eRscpErrorCodes { 52 | RSCP_ERR_NOT_HANDLED = 0x01, 53 | RSCP_ERR_ACCESS_DENIED = 0x02, 54 | RSCP_ERR_FORMAT = 0x03, 55 | RSCP_ERR_AGAIN = 0x04, 56 | RSCP_ERR_OUT_OF_BOUNDS = 0x05, 57 | RSCP_ERR_NOT_AVAILABLE = 0x06, 58 | RSCP_ERR_UNKNOWN_TAG = 0x07, 59 | RSCP_ERR_ALREADY_IN_USE = 0x08 60 | }; 61 | 62 | union SRscpControl { 63 | struct { 64 | uint8_t reserved_2 : 8; 65 | uint8_t version : 4; 66 | uint8_t crc : 1; 67 | uint8_t reserved_1 : 3; 68 | } bits; 69 | uint16_t value; 70 | } __attribute__((packed)); 71 | 72 | struct SRscpTimestamp { 73 | uint64_t seconds; 74 | uint32_t nanoseconds; 75 | } __attribute__((packed)); 76 | 77 | typedef uint32_t SRscpTag; 78 | 79 | struct SRscpValue { 80 | union { 81 | struct { 82 | #ifdef __BIG_ENDIAN__ 83 | uint8_t nameSpace : 8; 84 | uint8_t tagType : 1; 85 | uint32_t tagSpace : 23; 86 | #else 87 | uint32_t tagSpace : 23; 88 | uint8_t tagType : 1; 89 | uint8_t nameSpace : 8; 90 | #endif 91 | } tagbits; 92 | SRscpTag tag; 93 | }; 94 | uint8_t dataType; 95 | uint16_t length; 96 | uint8_t* data; 97 | } __attribute__((packed)); 98 | 99 | struct SRscpFrameHeader { 100 | uint16_t magic; 101 | SRscpControl ctrl; 102 | SRscpTimestamp timestamp; 103 | uint16_t dataLength; 104 | } __attribute__((packed)); 105 | 106 | struct SRscpFrame { 107 | SRscpFrameHeader header; 108 | std::vector data; 109 | uint32_t CRC; 110 | }; 111 | 112 | struct SRscpFrameBuffer { 113 | uint8_t *data; 114 | uint32_t dataLength; 115 | }; 116 | 117 | 118 | #endif 119 | -------------------------------------------------------------------------------- /Rscp/SocketConnection.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | /* 14 | * This is a very simple example client socket connection. 15 | * This implementation is limited to Linux (POSIX) sockets only. 16 | * A Microsoft Windows implementation is not supplied in this example. 17 | */ 18 | 19 | int SocketConnect(const char *cpIpAddress, int iPort) { 20 | 21 | unsigned char ucBuffer[sizeof(struct in6_addr)]; 22 | 23 | if(inet_pton(AF_INET, cpIpAddress, ucBuffer) <= 0) { 24 | printf("IP address %s cannot be converted.\n", cpIpAddress); 25 | return -1; 26 | } 27 | 28 | struct sockaddr_in server_addr; 29 | memset(&server_addr, 0, sizeof(server_addr)); 30 | server_addr.sin_family = AF_INET; 31 | server_addr.sin_port = htons(iPort); 32 | server_addr.sin_addr = *((struct in_addr *) ucBuffer); 33 | 34 | int iSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 35 | if(iSocket < 0) { 36 | printf("Cannot create socket. Error %i errno %i.\n", iSocket, errno); 37 | return iSocket; 38 | } 39 | 40 | // 3 secs receive timeout setup 41 | struct timeval tv; 42 | tv.tv_sec = 10; // normal = 3 43 | tv.tv_usec = 0; 44 | setsockopt(iSocket, SOL_SOCKET, SO_RCVTIMEO, (struct timeval *) &tv, sizeof(struct timeval)); 45 | // send time out should never occur on normal OS configurations but just in case set the timeout to 5 seconds 46 | tv.tv_sec = 5; 47 | tv.tv_usec = 0; 48 | setsockopt(iSocket, SOL_SOCKET, SO_SNDTIMEO, (struct timeval *) &tv, sizeof(struct timeval)); 49 | 50 | int enable = 1; 51 | setsockopt(iSocket, IPPROTO_TCP, TCP_NODELAY, (char *) &enable, sizeof(enable)); 52 | 53 | 54 | // wait 3 seconds for connection to get ready 55 | int iRetries = 3; 56 | if(connect(iSocket, (struct sockaddr *) &server_addr, sizeof(struct sockaddr)) < 0) { 57 | printf("Cannot connect to server. errno %i.\n", errno); 58 | close(iSocket); 59 | return -1; 60 | } 61 | 62 | return iSocket; 63 | } 64 | 65 | void SocketClose(int iSocket) 66 | { 67 | // sanity check 68 | if(iSocket >= 0) { 69 | shutdown(iSocket, SHUT_RD); 70 | close(iSocket); 71 | } 72 | } 73 | 74 | int SocketSendData(int iSocket, const unsigned char * ucBuffer, int iLength) 75 | { 76 | // sanity check 77 | if(iSocket < 0) { 78 | return iSocket; 79 | } 80 | 81 | int iSentBytes = 0; 82 | while(iLength) 83 | { 84 | int result = send(iSocket, ucBuffer, iLength, 0); 85 | if(result <= 0) { 86 | return -1; 87 | } 88 | iSentBytes += result; 89 | ucBuffer += result; 90 | iLength -= result; 91 | } 92 | return iSentBytes; 93 | } 94 | 95 | int SocketRecvData(int iSocket, unsigned char * ucBuffer, int iLength) 96 | { 97 | // sanity check 98 | if(iSocket < 0) { 99 | return iSocket; 100 | } 101 | 102 | return recv(iSocket, ucBuffer, iLength, 0); 103 | } 104 | -------------------------------------------------------------------------------- /Rscp/SocketConnection.h: -------------------------------------------------------------------------------- 1 | #ifndef __SOCKET_CONNECTION_H_ 2 | #define __SOCKET_CONNECTION_H_ 3 | 4 | /* 5 | * This is a very simple example client socket connection. 6 | * Plain functions are used in this example instead of a well formed C++ class. 7 | * This should not be used as "the correct" way of doing TCP connection but it is sufficient for this example 8 | * and the demonstration of the RSCP protocol which is not limited to TCP or Ethernet at all. 9 | */ 10 | 11 | int SocketConnect(const char *cpIpAddress, int iPort); 12 | void SocketClose(int iSocket); 13 | int SocketSendData(int iSocket, const unsigned char * ucBuffer, int iLength); 14 | int SocketRecvData(int iSocket, unsigned char * ucBuffer, int iLength); 15 | 16 | 17 | #endif // __SOCKET_CONNECTION_H_ 18 | -------------------------------------------------------------------------------- /Rscp/actionCheckHM.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include "../checkPara.h" 17 | #include "../Frame/touch.h" 18 | #include "../Frame/touch.c" 19 | #include "../Frame/framebuffer.c" 20 | #include "../Frame/DrawSkala.c" 21 | #include "../Frame/DrawLine.c" 22 | #include "../Frame/DrawSOC.c" 23 | #include "../Frame/DrawImage.h" 24 | #include "../Frame/DrawNetImage.h" 25 | #include "../Frame/DrawCorner.c" 26 | #include "../funktion.h" 27 | #include "actionCheckHM.h" 28 | 29 | //#################################### 30 | int main(){ 31 | //Parameter einbinden, checken oder default setzen 32 | checkDefinePara(0); 33 | 34 | char OUT[128]; 35 | 36 | //#################################################### 37 | //Wallbox or EP-Reserve HM read and senden 38 | if(WALLBOX_ACTION == 1 || EP_RESERVE_ACTION == 1){ 39 | while(1){ 40 | actionCheckAll(); 41 | sleep(HM_Intervall); 42 | } 43 | } 44 | } 45 | // /home/pi/E3dcGui/Rscp/RscpSet -wb -sonne 8 -BtCno -BbCyes -swPh 46 | // /home/pi/E3dcGui/Rscp/RscpSet -ep 10000 3230 // Testaufruf. Dieser Aufruf schreibt 3230W in EP. 47 | -------------------------------------------------------------------------------- /Rscp/actionCheckHM.h: -------------------------------------------------------------------------------- 1 | char SEND_OUT[128]; 2 | 3 | int wallboxAction(){ 4 | if(WALLBOX_ACTION == 1){ 5 | char wallboxSendNow[20], wallboxSendMode[20], wallboxSendCurrent[20], wallboxSendBtC[20], wallboxSendBbC[20], wallboxSendStop[20], wallboxSendPhC[20]; 6 | char WbMode[24],WbBtC[24],WbBbC[24],WbSet[24]; 7 | int WbCurrent, wallboxSendTime = 0; 8 | // Wallbox read and senden 9 | read_HM(ISE_WB_SEND_NOW, 4, wallboxSendNow); 10 | if (strcmp ("true",wallboxSendNow) == 0){ 11 | read_HM(ISE_WB_SEND_MODE, 4, wallboxSendMode); 12 | read_HM(ISE_WB_SEND_CURRENT, 2, wallboxSendCurrent); 13 | read_HM(ISE_WB_SEND_BTC, 4, wallboxSendBtC); 14 | read_HM(ISE_WB_SEND_BBC, 4, wallboxSendBbC); 15 | read_HM(ISE_WB_SEND_STOP, 4, wallboxSendStop); 16 | read_HM(ISE_WB_SEND_PH_CHANGE, 4, wallboxSendPhC); 17 | if(strcmp ("true",wallboxSendMode) == 0) snprintf (WbMode, (size_t)128, "-sonne"); 18 | else snprintf (WbMode, (size_t)128, "-mix"); 19 | WbCurrent = atoi(wallboxSendCurrent); 20 | if(strcmp ("true",wallboxSendBtC) == 0) snprintf (WbBtC, (size_t)128, "-BtCyes"); 21 | else snprintf (WbBtC, (size_t)128, "-BtCno"); 22 | if(strcmp ("true",wallboxSendBbC) == 0) snprintf (WbBbC, (size_t)128, "-BbCyes"); 23 | else snprintf (WbBbC, (size_t)128, "-BbCno"); 24 | if(strcmp ("true",wallboxSendStop) == 0) snprintf (WbSet, (size_t)128, "-stop"); 25 | else if(strcmp ("true",wallboxSendPhC) == 0) snprintf (WbSet, (size_t)128, "-swPh"); 26 | else snprintf (WbSet, (size_t)128, "-no"); 27 | snprintf (SEND_OUT, (size_t)128, "/home/pi/E3dcGui/Rscp/RscpSet -wb %s %i %s &", WbMode, WbCurrent, WbSet); 28 | //printf("%s\n", SEND_OUT); 29 | system(SEND_OUT); 30 | sleep(1); 31 | snprintf (SEND_OUT, (size_t)128, "/home/pi/E3dcGui/Rscp/RscpSet -wbEMS %s %s &", WbBtC, WbBbC); 32 | //printf("%s\n", SEND_OUT); 33 | system(SEND_OUT); 34 | printsendHM(ISE_WB_SEND_NOW, "false"); 35 | printsendHM(ISE_WB_SEND_STOP, "false"); 36 | printsendHM(ISE_WB_SEND_PH_CHANGE, "false"); 37 | } 38 | } 39 | } 40 | int epReserveAction(){ 41 | if(EP_RESERVE_ACTION == 1){ 42 | char epreserveSendNow[20], hmSendEmergencyPowerSize[20]; 43 | int S10CurrentBatEmergencyPowerSize; 44 | // EP-Reserve read and senden 45 | read_HM(ISE_EP_RESERVE_SEND_NOW, 4, epreserveSendNow); 46 | if (strcmp ("true",epreserveSendNow) == 0){ 47 | read_HM(ISE_EP_RESERVE_SET_W, 4, hmSendEmergencyPowerSize); 48 | S10CurrentBatEmergencyPowerSize = (int)(atof(hmSendEmergencyPowerSize) * 1000); // Umrechnung von kW in W 49 | snprintf (SEND_OUT, (size_t)128, "/home/pi/E3dcGui/Rscp/RscpSet -ep %i %i", readRscp(PosEpReservMaxW), S10CurrentBatEmergencyPowerSize); 50 | //printf("%s\n", SEND_OUT); 51 | system(SEND_OUT); 52 | printsendHM(ISE_EP_RESERVE_SEND_NOW, "false"); 53 | } 54 | } 55 | } 56 | int batterylimitsAction(){ 57 | if(BATTERYLIMIT_ACTION == 1){ 58 | char blSendNow[20], blSendMode[20], blSendCharge[20], blSendDischarge[20]; 59 | char blMode[24]; 60 | int blCharge, blDischarge; 61 | // Battery-Limits read and senden 62 | read_HM(ISE_BL_SEND_NOW, 4, blSendNow); 63 | if (strcmp ("true",blSendNow) == 0){ 64 | read_HM(ISE_BL_SEND_MODE, 4, blSendMode); 65 | read_HM(ISE_BL_SEND_CHARGE, 4, blSendCharge); 66 | read_HM(ISE_BL_SEND_DISCHARGE, 4, blSendDischarge); 67 | if(strcmp ("true",blSendMode) == 0) snprintf (blMode, (size_t)128, "-blYes"); 68 | else snprintf (blMode, (size_t)128, "-blNo"); 69 | blCharge = atof(blSendCharge)*1000; 70 | blDischarge = atof(blSendDischarge)*1000; 71 | snprintf (SEND_OUT, (size_t)128, "/home/pi/E3dcGui/Rscp/RscpSet -bl %s %i %i &", blMode, blCharge, blDischarge); 72 | //printf("%s\n", SEND_OUT); 73 | system(SEND_OUT); 74 | printsendHM(ISE_BL_SEND_NOW, "false"); 75 | } 76 | } 77 | } 78 | int powersaveAction(){ 79 | if(POWERSAVE_ACTION == 1){ 80 | char psSendNow[20], psSendMode[20]; 81 | char psMode[24]; 82 | // Battery-Limits read and senden 83 | read_HM(ISE_PS_SEND_NOW, 4, psSendNow); 84 | if (strcmp ("true",psSendNow) == 0){ 85 | read_HM(ISE_PS_SEND_MODE, 4, psSendMode); 86 | if(strcmp ("true",psSendMode) == 0) snprintf (psMode, (size_t)128, "-psYes"); 87 | else snprintf (psMode, (size_t)128, "-psNo"); 88 | snprintf (SEND_OUT, (size_t)128, "/home/pi/E3dcGui/Rscp/RscpSet -ps %s &", psMode); 89 | //printf("%s\n", SEND_OUT); 90 | system(SEND_OUT); 91 | printsendHM(ISE_PS_SEND_NOW, "false"); 92 | } 93 | } 94 | } 95 | int weatherRegAction(){ 96 | if(WEATHER_REG_ACTION == 1){ 97 | char wrSendNow[20], wrSendMode[20]; 98 | char wrMode[24]; 99 | // Weather regulated power read and send 100 | read_HM(ISE_WR_SEND_NOW, 4, wrSendNow); 101 | if (strcmp ("true",wrSendNow) == 0){ 102 | read_HM(ISE_WR_SEND_MODE, 4, wrSendMode); 103 | if(strcmp ("true",wrSendMode) == 0) snprintf (wrMode, (size_t)128, "-wrYes"); 104 | else snprintf (wrMode, (size_t)128, "-wrNo"); 105 | snprintf (SEND_OUT, (size_t)128, "/home/pi/E3dcGui/Rscp/RscpSet -wr %s &", wrMode); 106 | //printf("%s\n", SEND_OUT); 107 | system(SEND_OUT); 108 | printsendHM(ISE_WR_SEND_NOW, "false"); 109 | } 110 | } 111 | } 112 | int actionCheckAll(){ 113 | // Wallbox read and senden 114 | wallboxAction(); 115 | // EP-Reserve read and senden 116 | epReserveAction(); 117 | // Battery-Limits read and senden 118 | batterylimitsAction(); 119 | // Weather regulated power read and send 120 | weatherRegAction(); 121 | } 122 | // /home/pi/E3dcGui/Rscp/RscpSet -wb -sonne 8 -BtCno -BbCyes -swPh 123 | // /home/pi/E3dcGui/Rscp/RscpSet -ep 10000 3230 // Testaufruf. Dieser Aufruf schreibt 3230W in EP. 124 | -------------------------------------------------------------------------------- /S10history/Makefile: -------------------------------------------------------------------------------- 1 | CXX=/usr/bin/g++ 2 | ROOT_VALUE=S10history 3 | 4 | all: $(ROOT_VALUE) 5 | 6 | $(ROOT_VALUE): clean 7 | $(CXX) S10history.cpp RscpReader.cpp ../Rscp/RscpProtocol.cpp ../Rscp/AES.cpp ../Rscp/SocketConnection.cpp ../Rscp/RWData.cpp -o $@ 8 | 9 | 10 | clean: 11 | -rm $(ROOT_VALUE) $(VECTOR) 12 | -------------------------------------------------------------------------------- /S10history/README.markdown: -------------------------------------------------------------------------------- 1 | # S10history 2 | 3 | Dieses Programme habe ich mit freundlicher Erlaubniss von [RalfJL](https://github.com/RalfJL/S10history) übernommen. 4 | 5 | Damit dieses Programm direkt mit meiner Software zusammenarbeitet, habe ich ein paar anpassungen vorgenommen: 6 | * User, PW, AES, IP und Port werden aus der parameter.h eingelesen. 7 | * -T und -Y für today und yesterday eingefügt, damit die Werte gespeichert werden um auf der E3dcGui anzuzeigen. 8 | * Alle Abfragen dauerhaft mit dem UTC schalter versehen, ohne Schalter sind alle Werte falsch. 9 | * rLog komplett entfert. 10 | * examples/getYearperX.sh angepasst. 11 | * Anleitung angepasst. 12 | 13 | Noch nicht getestet: 14 | * Ich habe das Perl Programm S10toMysql.pl noch nicht getestet. Es könnten Probleme auftreten, bezüglich der Änderungen User, PW, AES, IP und Port 15 | 16 | Hier jetzt die Anleitung von RalfJL und an dieser Stelle einen herzlichen Dank für das Programm! 17 | 18 | # From RalfJL 19 | This program reads historical data from a S10 solar power station 20 | manufactured by [E3DC](http://www.e3dc.com) and prints it 21 | to standard output. 22 | 23 | Reports include: 24 | * Energy that was feed to the battery 25 | * Energy taken from battery 26 | * Energy produced by solar panels 27 | * Energy feed to the power grid 28 | * Energy taken from the power grid 29 | * Energy consumed by your house 30 | 31 | ## Features 32 | * Read the sum of a Day, Month, Year 33 | * For Day you can also list an average power (not energy) per 15 minutes 34 | * For Month you can also list a daily energy report 35 | * CSV output for better parsing 36 | * PERL program to feed the output to a Mysql database 37 | * Scripts that show some usage 38 | 39 | ## Usage 40 | Reading one paticular day (2017-02-17):
41 | `S10history -y 2017 -m 2 -d 17` 42 | 43 | Read only the sum of that day:
44 | `S10history -y 2017 -m 2 -d 17 -b` 45 | 46 | Read the sum of yesterday:
47 | `S10history -d -1 -b` 48 | 49 | Read the Month and all days of that month:
50 | `S10history -y 2017 -m 2` 51 | 52 | Read the sum of one year:
53 | `S10history -y 2016` 54 | 55 | Put all days of one year into a Mysql database (please fill the scripts with your values):
56 | `examples/getYearperDay.sh 2016 > Year2016perDay.txt` # reads all days to file
57 | `./S10toMysql.pl -dbname=myDBName -user=mySQLUser -password=PWofSQLuser Year2016perDay.txt`
58 | use the file to fill the database 59 | 60 | ## History 61 | 07.2017 added switch so that UTC can be used instead of local TZ 62 | S10 uses UTC only for time; did not really help with accuracy 63 | 02.2017 Initial version 64 | 65 | ## Credits 66 | All credits go to E3DC for providing the RSCP protocol and demo that this program is based on 67 | -------------------------------------------------------------------------------- /S10history/S10history.cpp: -------------------------------------------------------------------------------- 1 | //============================================================================ 2 | // Name : S10history.cpp 3 | // Author : Ralf Lehmann 4 | // Copyright : Ralf Lehmann 02.2017 5 | // Version : 1.0 6 | // Description : Reads historical data from a s10 solar power station (E3DC) 7 | // This program is free software: you can redistribute it and/or modify 8 | // it under the terms of the GNU General Public License as published by 9 | // the Free Software Foundation, either version 3 of the License, or 10 | // (at your option) any later version. 11 | // 12 | // This program is distributed in the hope that it will be useful, 13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | // GNU General Public License for more details. 16 | // 17 | // You should have received a copy of the GNU General Public License 18 | // along with this program. If not, see . 19 | //============================================================================ 20 | 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | //using namespace rlog; 29 | using namespace std; 30 | 31 | #define REPORT_YEAR 1 32 | #define REPORT_MONTH 2 33 | #define REPORT_DAY 4 34 | #define today 1 35 | #define yesterday 2 36 | 37 | 38 | char *progname; 39 | 40 | int usage(const char *errstr) { 41 | cerr << errstr << endl; 42 | cerr << "This program reads historical data from a E3DC/S10 and prints it" << endl; 43 | cerr << "[-y year] [-m month] -d day prints data of the given day; details every 15 minutes" << endl; 44 | cerr << "[-y year] -m month prints data of the given month; details once per day" << endl; 45 | cerr << "-y year print the sum of the given year, no details" << endl; 46 | cerr << "Options:" << endl; 47 | cerr << "--version version string" << endl; 48 | cerr << "--help this message" << endl; 49 | cerr << "--brief brief report; sum only" << endl; 50 | cerr << "--year num year > 2014; current year if not present" << endl; 51 | cerr << "--month -+num month; current month if not present" << endl; 52 | cerr << "--day +-num day; current day if not present" << endl; 53 | cerr << "--today report today and save to use in E3dcGui/GuiMain" << endl; 54 | cerr << "--yesterday report yesterday and save to use in E3dcGui/GuiMain" << endl; 55 | 56 | return 1; 57 | } 58 | 59 | int main(int argc, char *argv[]) { 60 | progname = argv[0]; // save program name 61 | 62 | time_t rawtime; // used for time calculation 63 | time(&rawtime); // get current time to complete time arguments 64 | //struct tm *l = localtime(&rawtime); 65 | struct tm *l = gmtime(&rawtime); 66 | 67 | if (l->tm_isdst >= 0) { 68 | l->tm_isdst = -1; // DST is not used by S10; do not interpret it 69 | } 70 | //use UTC to report 71 | char text[16]; 72 | snprintf (text, (size_t)16, "TZ=UTC"); 73 | putenv(text); 74 | 75 | // report type 76 | int report_type = 0; // 1=year; 2=month, 4=day; 0=current day; 5=last 77 | bool brief = false; // brief means only sum container to report 78 | int writedata = 0; // if use 'D' or 'Y' to write data 79 | // option struct 80 | const struct option longopts[] = { 81 | { "version", no_argument, 0, 'v' }, 82 | { "year", required_argument, 0, 'y' }, 83 | { "month", required_argument, 0, 'm' }, 84 | { "day", required_argument, 0, 'd' }, 85 | { "help", no_argument, 0, 'h' }, 86 | { "brief", no_argument, 0, 'b' }, 87 | { "yesterday", no_argument, 0, 'Y' }, 88 | { "today", no_argument, 0, 'T' }, 89 | }; 90 | 91 | // process arguments 92 | int index; 93 | int iarg = 0; 94 | long y, m, d = 0; 95 | 96 | // turn off getopt error message 97 | // opterr=1; 98 | while (iarg != -1) { 99 | iarg = getopt_long(argc, argv, "vhYTy:m:d:d:b", longopts, &index); 100 | switch (iarg) { 101 | case 'h': 102 | return usage(""); 103 | break; 104 | case 'v': 105 | printf("version 1.0"); 106 | return 0; 107 | break; 108 | case 'b': 109 | brief = true; 110 | break; 111 | case 'y': 112 | y = atol(optarg); 113 | if (y < 2012 || y > 2032) { 114 | return usage("ERROR: Invalid year"); 115 | } 116 | l->tm_year = y - 1900; 117 | if (report_type & REPORT_YEAR) { 118 | return usage("ERROR: only one year please"); 119 | } 120 | report_type |= REPORT_YEAR; 121 | break; 122 | 123 | case 'm': 124 | m = atol(optarg); 125 | if (m < 1 || m > 12) { 126 | return usage("ERROR: invalid month"); 127 | } 128 | l->tm_mon = m - 1; 129 | if (report_type & REPORT_MONTH) { 130 | return usage("ERROR: only one month please"); 131 | } 132 | report_type |= REPORT_MONTH; 133 | break; 134 | 135 | case 'd': 136 | d = atoi(optarg); 137 | if (d < 0) { 138 | l->tm_mday += d; 139 | } else { 140 | l->tm_mday = d; 141 | } 142 | rawtime = mktime(l); 143 | if (report_type & REPORT_DAY) { 144 | return usage("ERROR: only one day please"); 145 | } 146 | report_type |= REPORT_DAY; 147 | break; 148 | 149 | case 'T': 150 | l->tm_mday; 151 | rawtime = mktime(l); 152 | report_type |= REPORT_DAY; 153 | writedata = today; 154 | brief = true; 155 | break; 156 | 157 | case 'Y': 158 | l->tm_mday += -1; 159 | rawtime = mktime(l); 160 | report_type |= REPORT_DAY; 161 | writedata = yesterday; 162 | brief = true; 163 | break; 164 | } 165 | } 166 | 167 | // check time 168 | l->tm_sec = l->tm_min = l->tm_hour = 0; 169 | rawtime = mktime(l); 170 | time_t now; 171 | time(&now); 172 | if (rawtime >= now) { 173 | return usage("ERROR: report date is in the future"); 174 | } 175 | 176 | extern int RscpReader_Day(struct tm *l, bool brief, int writedata); 177 | extern int RscpReader_Month(struct tm *l, bool brief, int writedata); 178 | extern int RscpReader_Year(struct tm *l, bool brief, int writedata); 179 | int (*report_func)(struct tm *, bool brief, int writedata) = RscpReader_Day; 180 | 181 | // check report span 182 | if (report_type == 0) { 183 | report_type |= REPORT_DAY; 184 | } 185 | switch (report_type) { 186 | case 1: 187 | l->tm_mday = 1; 188 | l->tm_mon = 0; 189 | printf("Reporting one year "); 190 | report_func = &RscpReader_Year; 191 | break; 192 | case 2: 193 | case 3: 194 | l->tm_mday = 1; 195 | printf("Reporting one month "); 196 | report_func = &RscpReader_Month; 197 | break; 198 | case 4: 199 | case 5: 200 | case 6: 201 | case 7: 202 | printf("Reporting one day "); 203 | report_func = &RscpReader_Day; 204 | break; 205 | 206 | } 207 | printf("Report starts: %s", asctime(l)); 208 | return (*report_func)(l, brief, writedata); 209 | return 0; 210 | } 211 | -------------------------------------------------------------------------------- /S10history/S10toMysql.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/perl -w 2 | # Author : Ralf Lehmann 3 | # Version : 1.0 4 | # Copyright : Ralf Lehmann 02.2071 5 | # Description : Reads historical data from s10history generated files and stores it in mysql 6 | # 7 | # This program is free software: you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation, either version 3 of the License, or 10 | # (at your option) any later version. 11 | # 12 | # This program is distributed in the hope that it will be useful, 13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | # GNU General Public License for more details. 16 | # 17 | # You should have received a copy of the GNU General Public License 18 | # along with this program. If not, see . 19 | 20 | 21 | use strict; 22 | use warnings; 23 | use Getopt::Long; 24 | 25 | use DBI; 26 | 27 | # globals 28 | my $debug; 29 | 30 | my $usage; 31 | my $dbname; 32 | my $dbusername; 33 | my $dbpassword; 34 | my $dbh; 35 | 36 | # table names and definitions 37 | my $table_day = "day"; 38 | my $table_month = "month"; 39 | my $table_year = "year"; 40 | my $table_default_col = "date date"; 41 | 42 | sub usage($) { 43 | my $e = shift; 44 | print <<"EOT"; 45 | $e 46 | Usage : $0 [Options] -dbname=DB -user=DBuser -password=DBpassword [CSV-files] 47 | Read in CSV files and put into database. 48 | CSV-file format is from S10reader 49 | -password password|ENV-variable password can be in ENV-variable 50 | 51 | Options: 52 | -debug add debug information 53 | EOT 54 | exit 1; 55 | } 56 | 57 | # 58 | # db functions 59 | # 60 | sub create_table($) { 61 | my $t = shift; 62 | $dbh->do("CREATE TABLE $t (date date PRIMARY KEY)") 63 | || die("ERROR: can't create table $t"); 64 | } 65 | 66 | sub check_tables() { 67 | foreach my $t ( $table_day, $table_month, $table_year ) { 68 | my $sth = $dbh->table_info( undef, undef, $t, 'TABLE' ); 69 | $sth->execute 70 | || die("ERROR: executing table_info for table $t"); 71 | my @info = $sth->fetchrow_array; 72 | my $exists = scalar @info; 73 | if ( !$exists ) { 74 | create_table($t); 75 | } 76 | } 77 | } 78 | 79 | sub check_db_cols($$) { 80 | my $line = shift; 81 | my $table = shift; 82 | chomp($line); 83 | print STDERR "DEBUG: Checking db cols with \"$line\"\n" if $debug; 84 | 85 | # get cols 86 | $line =~ m/.*-head[:]*\s+(.*)/; 87 | my @line = split( /[;,]/, $1 ); 88 | 89 | foreach my $i (@line) { 90 | print STDERR "DEBUG: checking table \"$table\" for column: \"$i\"\n" 91 | if $debug; 92 | my $sth = $dbh->column_info( undef, undef, $table, $i ); 93 | my @info = $sth->fetchall_arrayref; 94 | if ( defined $info[0][0] ) { 95 | print STDERR "DEBUG: col $i exists\n" if $debug; 96 | } 97 | else { 98 | my $type = "double"; 99 | if ( $i eq "date" ) { 100 | $type = "date"; 101 | } 102 | $dbh->do("ALTER TABLE $table ADD $i $type ") 103 | || die "ERROR : unable to alter table $table; 104 | $DBI::errstr "; 105 | print STDERR "DEBUG: creating column $i \n" if $debug; 106 | } 107 | } 108 | } 109 | 110 | # 111 | # read in function 112 | # 113 | sub read_file($) { 114 | my $in = shift; 115 | my @headline; 116 | my $col; 117 | my $table; 118 | while (<$in>) { 119 | my $line = $_; 120 | chomp($line); 121 | print STDERR "DEBUG: Reading : $line\n" if $debug; 122 | if ( !/CSV/ ) { # only use lines that contain CSV data 123 | next; 124 | } 125 | if (/CSV-head/i) { 126 | 127 | # determine which table to use 128 | if (/month/i) { 129 | $table = $table_month; 130 | } 131 | if (/day/i) { 132 | $table = $table_day; 133 | } 134 | if (/year/i) { 135 | $table = $table_year; 136 | } 137 | if ( !defined $table ) { 138 | print STDERR 139 | "ERROR: check_db_table can't determin table to check; Line: \"$_\""; 140 | exit 1; 141 | } 142 | check_db_cols( $_, $table ); 143 | $line =~ m/.*-head[:]\s+(.*)/; 144 | @headline = split( /[;,]/, $1 ); 145 | $col = join( ", ", @headline ); 146 | next; 147 | } 148 | 149 | # data line 150 | if ( !defined $headline[0] ) { 151 | die "ERROR: CSV-head line missing"; 152 | } 153 | if ( !( $line =~ m/.*-CSV[:]?\s+(.*)/ ) ) { 154 | warn "WARNING: illegal line \"$line\""; 155 | next; 156 | } 157 | my @line = split( /[;,]/, $1 ); 158 | $line[0] = "FROM_UNIXTIME($line[0])"; 159 | my $values = join( ", ", @line ); 160 | 161 | # check headline and this line 162 | if ( $#headline != $#line ) { 163 | warn "WARNING: line does not match headline: \"$line\""; 164 | next; 165 | } 166 | my $insert = "INSERT into $table ($col) VALUES($values)"; 167 | print STDERR "DEBUG: \"$insert\"\n" if $debug; 168 | $dbh->do($insert) or warn "WARNING: \"$insert\"; $DBI::errstr"; 169 | } 170 | } 171 | 172 | # 173 | # this is main 174 | # 175 | 176 | GetOptions( 177 | "dbname=s" => \$dbname, # name of the database 178 | "user=s" => \$dbusername, # login name 179 | "password=s" => \$dbpassword, 180 | "help" => \$usage, 181 | "debug" => \$debug, 182 | ) or die("ERROR in command line arguments"); 183 | 184 | usage("") if $usage; 185 | usage("ERROR: dbname, user and password are mandatory") 186 | if ( !defined $dbname 187 | || !defined $dbusername 188 | || !defined $dbpassword ); 189 | 190 | # check if user password is in ENV variable 191 | if ( defined $dbpassword ) { 192 | if ( defined $ENV{$dbpassword} ) { 193 | $dbpassword = $ENV{$dbpassword}; 194 | } 195 | } 196 | 197 | $dbh = DBI->connect( "DBI:mysql:$dbname", $dbusername, $dbpassword ) 198 | || die("Could not connect to database: $DBI::errstr"); 199 | 200 | # check if tables exist 201 | check_tables(); 202 | 203 | # check for CSV files 204 | if ( $#ARGV < 0 ) { 205 | print STDERR "DEBUG: Reading from STDIN\n" if $debug; 206 | 207 | # read from STDIN 208 | read_file(*STDIN); 209 | } 210 | else { 211 | while ( $#ARGV >= 0 ) { 212 | my $f = shift @ARGV; 213 | print STDERR "DEBUG: Parsing file: $f\n" if $debug; 214 | my $in; 215 | open( $in, "<", $f ) or die("ERROR: can't open file $f"); 216 | read_file($in); 217 | } 218 | } 219 | 220 | # finish 221 | $dbh->disconnect() 222 | || die("ERROR: disconnecting from database"); 223 | 224 | -------------------------------------------------------------------------------- /S10history/examples/getYearperDay.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | # 3 | # get the sum of all days of one year from S10 solar power station 4 | # you can redirect that output to a file and use S10toMysql.pl to 5 | # read all those values to a mysql database 6 | # 7 | # Copyright Ralf Lehmann 8 | # 02.2017 - initial version 9 | # 09.2017 - Issue #20 (Nischram) 10 | # 11 | # This program is free software: you can redistribute it and/or modify 12 | # it under the terms of the GNU General Public License as published by 13 | # the Free Software Foundation, either version 3 of the License, or 14 | # (at your option) any later version. 15 | # 16 | # This program is distributed in the hope that it will be useful, 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | # GNU General Public License for more details. 20 | # 21 | # You should have received a copy of the GNU General Public License 22 | # along with this program. If not, see . 23 | # 24 | PROG=../S10history 25 | 26 | #alias errecho='>&2 echo' 27 | errecho(){ 28 | >&2 echo $* 29 | } 30 | 31 | usage() 32 | { 33 | >&2 cat << EOT 34 | usage $0 year 35 | year > 2011 36 | EOT 37 | exit 1 38 | } 39 | 40 | if [ $# -ne 1 ] || [ "$1" -le "2011" ]; then 41 | errecho "ERROR: Invalid year as argument" 42 | usage 43 | fi 44 | 45 | if [ ! -e $PROG ]; then 46 | errecho "ERROR: can't find S10reader program \"$PROG\"" 47 | exit 1 48 | fi 49 | 50 | # check if program is ok, user and name is correct, by calling the whole year 51 | if ! $PROG -y $1; then 52 | errecho "ERROR: program $PROG returns errors" 53 | exit 1 54 | fi 55 | 56 | i=1 57 | while [ $i -le 366 ]; do 58 | #echo "$i"; 59 | j=4; 60 | while ! $PROG -y $1 -m 1 -b -d $i ; do 61 | errecho "WARNING: retrying connection" 62 | sleep 10; 63 | let j=$j-1 64 | if [ $j -le 0 ]; then 65 | errecho "ERROR: to many connection failiures" 66 | exit 1 67 | fi 68 | done 69 | let i=$i+1 70 | done 71 | -------------------------------------------------------------------------------- /S10history/examples/getYearperMonth.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | # 3 | # get the sum of all months of one year from S10 solar power station 4 | # you can redirect that output to a file and use S10toMysql.pl to 5 | # read all those values to a mysql database 6 | # 7 | # Copyright Ralf Lehmann 8 | # 02.2017 - initial version 9 | # 09.2017 - Issue #20 (Nischram) 10 | # 11 | # This program is free software: you can redistribute it and/or modify 12 | # it under the terms of the GNU General Public License as published by 13 | # the Free Software Foundation, either version 3 of the License, or 14 | # (at your option) any later version. 15 | # 16 | # This program is distributed in the hope that it will be useful, 17 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | # GNU General Public License for more details. 20 | # 21 | # You should have received a copy of the GNU General Public License 22 | # along with this program. If not, see . 23 | # 24 | PROG=../S10history 25 | 26 | #alias errecho='>&2 echo' 27 | errecho(){ 28 | >&2 echo $* 29 | } 30 | 31 | usage() 32 | { 33 | >&2 cat << EOT 34 | usage $0 year 35 | year > 2011 36 | EOT 37 | exit 1 38 | } 39 | 40 | if [ $# -ne 1 ] || [ "$1" -le "2011" ]; then 41 | errecho "ERROR: Invalid year as argument" 42 | usage 43 | fi 44 | 45 | if [ ! -e $PROG ]; then 46 | errecho "ERROR: can't find S10reader program \"$PROG\"" 47 | exit 1 48 | fi 49 | 50 | # check if program is ok, user and name is correct, by calling the whole year 51 | if ! $PROG -y $1; then 52 | errecho "ERROR: program $PROG returns errors" 53 | exit 1 54 | fi 55 | 56 | i=1 57 | while [ $i -le 12 ]; do 58 | #echo "$i"; 59 | j=2 60 | while ! $PROG -y $1 -m $i -b ; do 61 | errecho "WARNING: connection failed; retry" 62 | sleep 20 63 | let j=$j-1 64 | if [ $j -le 0 ]; then 65 | errecho "ERROR: too many retries; giving up" 66 | exit 1 67 | fi 68 | done 69 | let i=$i+1 70 | done 71 | -------------------------------------------------------------------------------- /STEPBYSTEP.markdown: -------------------------------------------------------------------------------- 1 | # E3DC to HomeMatic mit GUI 2 | Stand: V1.42 27.08.2017 3 | 4 | ## Schritt für Schritt 5 | Link für Link 6 | 7 | #### Kaufen 8 | [Material](https://github.com/nischram/E3dcGui#material) 9 | [1437995-62](https://www.conrad.de/de/raspberry-pi-3-model-b-starter-set-1-gb-noobs-inkl-betriebssystem-noobs-inkl-gehaeuse-inkl-netzteil-inkl-software-1437995.html) 10 | 11 | #### Raspbain Donwnload 12 | [Raspbain](https://www.raspberrypi.org/downloads/raspbian/) 13 | 14 | #### Image entpacken 15 | [Anleitung](https://www.raspberrypi.org/documentation/installation/installing-images/README.md) 16 | 17 | #### Image auf SD-Karte 18 | [Anleitung MacOS](https://www.raspberrypi.org/documentation/installation/installing-images/mac.md) 19 | 20 | #### Montage 21 | [Montageanleitung](https://thepihut.com/blogs/raspberry-pi-tutorials/45295044-raspberry-pi-7-touch-screen-assembly-guide) 22 | 23 | #### Rasbain einrichten 24 | [Erstinbetriebnahme](https://raspberry.tips/raspberrypi-einsteiger/raspberry-pi-einsteiger-guide-konfigurieren-teil-3/) 25 | 26 | #### SSH-Verbindung 27 | [Anleitung via Windows Putty](https://tutorials-raspberrypi.de/raspberry-pi-ssh-windows-zugriff-putty/) 28 | [Aleitung via MAC](https://www.raspberrypi.org/documentation/remote-access/ssh/unix.md) 29 | 30 | #### Bildschirm drehen 31 | [RPI 7" Touch 180 Grad gedreht](https://www.raspberrypi.org/forums/viewtopic.php?t=121662#p821060) 32 | Alternativ wenn der Tocuh nicht mitdrehen soll: 33 | [Bildschirm-Anzeige drehen](https://tutorials-raspberrypi.de/tipps-tricks-faq-zum-offiziellen-7-raspberry-pi-touchscreen/#drehen) 34 | 35 | #### StartX deaktivieren 36 | [Desktop deaktivieren](https://github.com/nischram/E3dcGui/wiki/Pi-Funktionen-deaktivieren) 37 | 38 | #### Pi Bildschirmschoner deaktivieren 39 | [Wichtig Pi Bildschirmschoner deaktivieren](https://github.com/nischram/E3dcGui/wiki/Pi-Funktionen-deaktivieren) 40 | 41 | #### LED-Statusanzeige 42 | [https://github.com/jgarff/rpi_ws281x](https://github.com/jgarff/rpi_ws281x) 43 | 44 | #### Uhrzeit automatisch einstellen 45 | [Github Anleitung](https://github.com/nischram/E3dcGui#aktuelle-uhrzeit-aus-dem-internet-holen) 46 | [Aktuelle Uhrzeit aus dem Internet holen](http://logicals.at/de/forum/raspberry-pi/48-aktuelle-uhrzeit-aus-dem-internet-holen) 47 | 48 | #### RAMDisk einrichten 49 | [RAMDisk einrichten](https://github.com/nischram/E3dcGui/wiki/RAMDisk) 50 | 51 | #### WiringPi installieren 52 | [WiringPi installieren](https://tutorials-raspberrypi.de/wiringpi-installieren-pinbelegung) 53 | 54 | #### XMLLINT für die Grünbeck Abfrage installieren 55 | [XMLLINT installieren](https://jahansyed.co.uk/2016/04/22/how-to-install-xmllint-in-ubuntu/) 56 | 57 | #### PIR-Sensor anschließen (optional) 58 | [Bewegungsmelder](https://github.com/nischram/E3dcGui/wiki/Bewegungsmelder) 59 | [PIR-Sensor anschließen](https://tutorials-raspberrypi.de/raspberry-pi-bewegungsmelder-sensor-pir) 60 | 61 | #### Vorbereitung am S10 62 | [RSCP-Passwort setzen](https://github.com/nischram/E3dcGui#am-s10) 63 | 64 | #### E3dcGui kopieren 65 | [Applikation auf den Raspberry kopieren](https://github.com/nischram/E3dcGui#applikation-auf-den-raspberry-kopieren) 66 | 67 | #### Applikation konfigurieren 68 | [Einstellungen vornehmen](https://github.com/nischram/E3dcGui#einstellungen-vornehmen) 69 | 70 | #### sendEmail einrichten 71 | [sendEmail einrichten](https://github.com/nischram/E3dcGui/wiki/EMail-Tool) 72 | 73 | #### Applikation kompilieren 74 | [Kompilieren](https://github.com/nischram/E3dcGui#applikation-kompilieren) 75 | 76 | #### Autostart der Applikation 77 | [Applikation in Crontab aufnehmen](https://github.com/nischram/E3dcGui#autostart-der-applikation-durch-crontab-job) 78 | 79 | #### Raspberry Pi neu starten 80 | [Reboot Pi](https://github.com/nischram/E3dcGui#raspberry-pi-neu-starten) 81 | 82 | #### Display bedienen 83 | [Display bedienen](https://github.com/nischram/E3dcGui#display-bedienen) 84 | 85 | #### HomeMatic einrichten 86 | [Werte in der HomeMatic nutzen](https://github.com/nischram/E3dcGui/tree/master/Homematic) 87 | -------------------------------------------------------------------------------- /copyPara.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include "checkPara.h" 10 | 11 | int main(int argc, char *argv[]) 12 | { 13 | char c, d; 14 | 15 | if( access( "/home/pi/E3dcGui/parameter.h", F_OK ) != -1){ 16 | printf("Datei parameter.h ist vorhanden.\n"); 17 | } 18 | else{ 19 | printf("Fehler: parameter.h ist nicht vorhanden.\n Du musst die Datei erstellen.\n"); 20 | printf("Oder soll jetzt kopiert werden? [j/n] :"); 21 | c = getchar(); 22 | getchar(); 23 | if(c == 'j' || c == 'J' || c == 'y' || c == 'Y'){ 24 | system("cp parameter.h.temp parameter.h"); 25 | printf("Die Datei wurde aus der 'parameter.h.temp' kopiert\n und kann nun bearbeitet werden.\n"); 26 | } 27 | else { 28 | printf("Du musst nun die Datei selber erstelln,\n z.B. mit 'cp parameter.h.temp parameter.h'\n"); 29 | } 30 | } 31 | 32 | if( access( "/home/pi/E3dcGui/parameterHM.h", F_OK ) != -1){ 33 | printf("Datei parameterHM.h ist vorhanden.\n"); 34 | } 35 | else{ 36 | printf("Fehler: parameterHM.h ist nicht vorhanden.\n Du musst die Datei erstellen.\n"); 37 | printf("Oder soll jetzt kopiert werden? [j/n] :"); 38 | d = getchar(); 39 | if(d == 'j' || d == 'J' || d == 'y' || d == 'Y'){ 40 | system("cp parameterHM.h.temp parameterHM.h"); 41 | printf("Die Datei wurde aus der 'parameterHM.h.temp' kopiert\n und kann nun bearbeitet werden.\n"); 42 | } 43 | else { 44 | printf("Du musst nun die Datei selber erstelln,\n z.B. mit 'cp parameterHM.h.temp parameterHM.h'\n"); 45 | } 46 | } 47 | checkDefine(1); 48 | } 49 | -------------------------------------------------------------------------------- /humans.txt: -------------------------------------------------------------------------------- 1 | /* OWNER */ 2 | 3 | Nischram 4 | GitHub Profile: https://github.com/nischram 5 | Location: Germany 6 | 7 | /* CONTRIBUTORS */ 8 | 9 | Nischram 10 | GitHub Profile: https://github.com/nischram 11 | Location: Germany 12 | -------------------------------------------------------------------------------- /parameterHM.h.temp: -------------------------------------------------------------------------------- 1 | #ifndef __PARAMETERHM_H_ 2 | #define __PARAMETERHM_H_ 3 | /* 4 | Wenn das Display für HM Daten genutzt wird 5 | aber die ISE_ID noch nicht angepasst sind, 6 | wird es zu langen wartezeiten beim lesen der 7 | Daten (read_HM) kommen. Damit diese Wartezeiten 8 | unterbunden werden, alle ISE_ID auf "0" setzen! 9 | Es kann aber zu darstellungsfehler kommen. 10 | */ 11 | // Weitere Parameter zur Homematic bitte in der HMparameter.h definieren 12 | #define HM_Sonderdarstellung 0 //z.B. für Sonnenaufgang etc. 13 | 14 | //http://192.168.178.yyy/addons/hq/ui/#tabVariables //Link um mit de HQ WebUi die Variable auszulesen 15 | //Definition der ISE_ID von der Variablen und Geräten der Homematic 16 | /* Beispiel: 17 | #define ISE_UnixTime 43674 18 | */ 19 | #define ISE_UnixTime 0 //10 Zeichen 20 | #define ISE_TimestampHM 0 //16 Zeichen 21 | #define ISE_HMCPU 0 //Alle ohne Info mit 4 Zeichen 22 | #define ISE_HMupTage 0 23 | #define ISE_HMupStd 0 24 | #define ISE_AussenTemp 0 25 | #define ISE_AussenHum 0 //2 Zeichen 26 | #define ISE_AussenRegen 0 //1 Zeichen 27 | #define ISE_VerschlussGe 0 28 | #define ISE_VerschlussEG 0 29 | #define ISE_VerschlussOG 0 30 | #define ISE_VerschlussDG 0 31 | #define ISE_VerschlussGa 0 32 | #define ISE_VerschlussKel 0 33 | #define ISE_Kellertuer 0 34 | #define ISE_Heizung 0 35 | #define ISE_HeizungState 0 36 | #define ISE_pumpensumpf 0 37 | #define ISE_Markise 0 38 | #define ISE_Brunnen 0 39 | #define ISE_MacSchrank 0 40 | #define ISE_MacSchrankValue 0 41 | #define ISE_Sonnenaufgang 0 //5 Zeichen 42 | #define ISE_Sonnenuntergang 0 //5 Zeichen 43 | #define ISE_Vollmond 0 //10 Zeichen 44 | //Erdgeschoss 45 | #define ISE_EGWTemp 0 46 | #define ISE_EGKFli 0 47 | #define ISE_EGKFre 0 48 | #define ISE_EGWFli 0 49 | #define ISE_EGWFre 0 50 | #define ISE_EGSSt 0 51 | #define ISE_EGWCF 0 52 | #define ISE_EGKJalli 0 53 | #define ISE_EGKJalre 0 54 | #define ISE_EGWJal 0 55 | #define ISE_EGSJal 0 56 | #define ISE_EGWCJal 0 57 | //Obergeschoss 58 | #define ISE_OGParty 0 59 | #define ISE_Send_OGPARTY 0 60 | #define ISE_OGKTemp 0 61 | #define ISE_OGWTemp 0 62 | #define ISE_OGBTemp 0 63 | #define ISE_OGKSpul 0 64 | #define ISE_Send_OGKSpul 0 65 | #define ISE_OGKFli 0 66 | #define ISE_OGKFre 0 67 | #define ISE_OGWSt 0 68 | #define ISE_OGWBt 0 69 | #define ISE_OGBF 0 70 | #define ISE_OGKJalli 0 71 | #define ISE_OGKJalre 0 72 | #define ISE_OGWJalSt 0 73 | #define ISE_OGWJalBt 0 74 | #define ISE_OGBJal 0 75 | #define ISE_OGEJal 0 76 | //Dachgeschoss 77 | #define ISE_DGSTemp 0 78 | #define ISE_DGSFli 0 79 | #define ISE_DGSFre 0 80 | #define ISE_DGTF 0 81 | //Garage 82 | #define ISE_GarageTemp 0 83 | #define ISE_Garagentor 0 84 | #define ISE_Garagentuerh 0 85 | #define ISE_Garagentuerv 0 86 | #define ISE_OGWLicht 0 87 | //Ende ISE_ID's 88 | 89 | //Homematic Position der Spalten für die HM-Elemente auf dem Display 90 | #define S0 40 91 | #define S1 120 92 | #define S2 200 93 | #define S3 280 94 | #define S4 360 95 | #define S5 450 96 | #define S6 530 97 | #define S7 610 98 | #define S8 690 99 | //Homematic Position der Reihen für die HM-Elemente auf dem Display 100 | #define R1 110 101 | #define R2 180 102 | #define R3 250 103 | #define R4 320 104 | #define R5 390 105 | //Homematic Fensterbreite /halbe Breite 106 | #define Fw 50 107 | #define Fhw 25 108 | 109 | //####################################### 110 | #endif // __PARAMETERHM_H_ 111 | -------------------------------------------------------------------------------- /sendEmail-v1.56/README: -------------------------------------------------------------------------------- 1 | sendEmail - Send email from a console near you! 2 | Written by: Brandon Zehm 3 | http://caspian.dotconf.net/ 4 | http://www.tsheets.com/ 5 | 6 | 7 | 8 | ------------------ 9 | What is sendEmail? 10 | ------------------ 11 | 12 | SendEmail is a lightweight, completly command line based, SMTP email agent. 13 | If you have the need to send email from the command line, this tool is perfect. 14 | It was designed to be used in bash scripts, Perl programs, and web sites, but 15 | it is also quite useful in many other contexts. SendEmail is written in Perl 16 | and is unique in that it requires NO SPECIAL MODULES. It has an intuitive and 17 | flexible set of command-line options, making it very easy to learn and use. 18 | 19 | 20 | 21 | 22 | ------------------ 23 | Installation 24 | ------------------ 25 | 26 | SendEmail is a perl script/program, and only needs to be copied to a directory 27 | in your path to make it accessible. Most likely the following steps will 28 | be sufficient: 29 | 30 | 1) Extract the package 31 | tar -zxvf sendEmail-v1.XX.tar.gz 32 | 33 | 2) Copy the sendEmail script to /usr/local/bin 34 | cp -a sendEmail-v1.XX/sendEmail /usr/local/bin 35 | 36 | 3) Make sure its executable 37 | chmod +x /usr/local/bin/sendEmail 38 | 39 | 4) Run it 40 | sendEmail 41 | or 42 | /usr/local/bin/sendEmail 43 | 44 | NOTES: 45 | * Running sendEmail without any arguments will produce a usage summary. 46 | * SendEmail is written in Perl, so no compilation is needed. 47 | * On a Unix/Linux OS if your perl binary is not installed at /usr/bin/perl 48 | you may need to edit the first line of the script accordingly. 49 | 50 | 51 | 52 | 53 | 54 | 55 | --------------- 56 | Usage Overview 57 | --------------- 58 | 59 | sendEmail-1.56 by Brandon Zehm 60 | 61 | Synopsis: sendEmail -f ADDRESS [options] 62 | 63 | Required: 64 | -f ADDRESS from (sender) email address 65 | * At least one recipient required via -t, -cc, or -bcc 66 | * Message body required via -m, STDIN, or -o message-file=FILE 67 | 68 | Common: 69 | -t ADDRESS [ADDR ...] to email address(es) 70 | -u SUBJECT message subject 71 | -m MESSAGE message body 72 | -s SERVER[:PORT] smtp mail relay, default is localhost:25 73 | 74 | Optional: 75 | -a FILE [FILE ...] file attachment(s) 76 | -cc ADDRESS [ADDR ...] cc email address(es) 77 | -bcc ADDRESS [ADDR ...] bcc email address(es) 78 | -xu USERNAME username for SMTP authentication 79 | -xp PASSWORD password for SMTP authentication 80 | 81 | Paranormal: 82 | -b BINDADDR[:PORT] local host bind address 83 | -l LOGFILE log to the specified file 84 | -v verbosity, use multiple times for greater effect 85 | -q be quiet (i.e. no STDOUT output) 86 | -o NAME=VALUE advanced options, for details try: --help misc 87 | -o message-content-type= 88 | -o message-file=FILE -o message-format=raw 89 | -o message-header=HEADER -o message-charset=CHARSET 90 | -o reply-to=ADDRESS -o timeout=SECONDS 91 | -o username=USERNAME -o password=PASSWORD 92 | -o tls= -o fqdn=FQDN 93 | 94 | Help: 95 | --help the helpful overview you're reading now 96 | --help addressing explain addressing and related options 97 | --help message explain message body input and related options 98 | --help networking explain -s, -b, etc 99 | --help output explain logging and other output options 100 | --help misc explain -o options, TLS, SMTP auth, and more 101 | 102 | 103 | 104 | --------------- 105 | Examples 106 | --------------- 107 | 108 | Simple Email: 109 | sendEmail -f me@gmail.com \ 110 | -t friend@yahoo.com \ 111 | -s smtp.gmail.com:587 \ 112 | -xu me@gmail.com \ 113 | -xp MY-PASSWORD \ 114 | -u "Test email" \ 115 | -m "Hi buddy, this is a test email." 116 | 117 | Sending to mutiple people: 118 | sendEmail -f myaddress@isp.net \ 119 | -t "Scott Thomas " jason@isp.net renee@isp.net \ 120 | -s relay.isp.net \ 121 | -u "Test email" \ 122 | -m "Hi guys, this is a test email." 123 | 124 | Sending to multiple people using cc and bcc recipients: 125 | (notice the different way I specified multiple To recipients, you can do this for cc and bcc as well) 126 | sendEmail -f myaddress@isp.net \ 127 | -t scott@isp.net;jason@isp.net;renee@isp.net \ 128 | -cc jennifer@isp.net paul@isp.net jeremiah@isp.net \ 129 | -bcc troy@isp.net miranda@isp.net jay@isp.net \ 130 | -s relay.isp.net \ 131 | -u "Test email with cc and bcc recipients" \ 132 | -m "Hi guys, this is a test email." 133 | 134 | 135 | Sending to multiple people with multiple attachments: 136 | sendEmail -f myaddress@isp.net \ 137 | -t jason@isp.net \ 138 | -cc jennifer@isp.net paul@isp.net jeremiah@isp.net \ 139 | -s relay.isp.net \ 140 | -u "Test email with cc and bcc recipients" \ 141 | -m "Hi guys, this is a test email." \ 142 | -a /mnt/storage/document.sxw "/root/My Documents/Work Schedule.kwd" 143 | 144 | 145 | Sending an email with the contents of a file as the message body: 146 | cat /tmp/file.txt | sendEmail -f myaddress@isp.net \ 147 | -t jason@isp.net \ 148 | -s relay.isp.net \ 149 | -u "Test email with contents of file" 150 | 151 | 152 | Sending an email with the contents of a file as the message body (method 2): 153 | sendEmail -f myaddress@isp.net \ 154 | -t jason@isp.net \ 155 | -s relay.isp.net \ 156 | -o message-file=/tmp/file.txt \ 157 | -u "Test email with contents of file" 158 | 159 | 160 | Sending an html email: (make sure your html file has at the beginning) 161 | cat /tmp/file.html | sendEmail -f myaddress@isp.net \ 162 | -t jason@isp.net \ 163 | -s relay.isp.net \ 164 | -u "Test email with html content" 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | ------------ 175 | Contributors 176 | ------------ 177 | 178 | Many thanks go to the people who have submitted ideas and patches. 179 | I know I've forgotten to mention everyone who's helped with sendEmail, 180 | but here is a small list. Please let me know if you feel your name 181 | should be here! 182 | 183 | v1.56 184 | - Several people submitted fixes for the authentication bug. 185 | Thanks to all of you for nagging me to get this release out! 186 | 187 | Simon Matter (v1.55) 188 | - Local bind address patch 189 | 190 | CBL Team and Chris Peay (v1.55) 191 | - Bug reports about sendEmail causing people get blacklisted. 192 | 193 | Jared Cheney (v1.42) 194 | - More bare LF bug fixes and bare period encoding. 195 | - Mime encoding patch 196 | 197 | Buddy Nahay (v1.41) 198 | - Bare LF bug report 199 | 200 | John Rouillard (v1.41) 201 | - html detection bug report 202 | 203 | Reidar Johansen (v1.40) 204 | - Added support for HTML email 205 | - Created a function called tz_offset that determines the local timezone 206 | - Many other fixes and suggestions 207 | 208 | Paul Kreiner (v1.40) 209 | - Submitted a patch that forces the timestamp string to always follow 210 | the HH:MM:SS convention required by the RFCs. 211 | 212 | Al Danial 213 | - Found and reported a logging/typo/attachment issue in v1.32 214 | 215 | Svante Gerhard 216 | - Found and reported the file attachment/padding issue in v1.31 217 | 218 | Charles Leeds 219 | - Put together all the original file attachment code and got me 220 | on the path to v1.3x 221 | - Provided the compiled Windows executable version of sendEmail 222 | for a LONG time. I really appreciate your help! 223 | 224 | Nick Pasich 225 | - Passing the email message via STDIN 226 | - Multiple recpients 227 | - Log file option 228 | - Quiet option 229 | - Cc option 230 | - Lots of other suggestions and code 231 | 232 | Richard Duim 233 | - For mime/content-type/attachment suggestions 234 | 235 | Ulisses Montenegro 236 | - First one to report problems with bare LF's on qmail servers 237 | 238 | Michael Santy 239 | - Reported problems with various SMTP servers and helped me fix a few 240 | fairly serious problems. 241 | 242 | Many other people have submitted bug reports and helped to make sendEmail 243 | what it is today, and my best regards go out to all those .. complainers ;-) 244 | 245 | -------------------------------------------------------------------------------- /start.c: -------------------------------------------------------------------------------- 1 | /* 2 | gcc -g -o start start.c 3 | */ 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include "checkPara.h" 14 | #include "Frame/touch.h" 15 | #include "Frame/touch.c" 16 | #include "Frame/framebuffer.c" 17 | #include "Frame/DrawCorner.c" 18 | #include "Frame/DrawImage.h" 19 | #include "funktion.h" 20 | 21 | int main() 22 | { 23 | //Parameter einbinden, checken oder default setzen 24 | checkDefinePara(1); 25 | 26 | sleep(2); 27 | if(GUI == 1){ 28 | if(E3DC_S10 ==1){ 29 | system("/home/pi/E3dcGui/RscpMain &"); 30 | } 31 | if (E3DC_LED == 1){ 32 | system("sudo /home/pi/E3dcGui/External/LedMain &"); 33 | } 34 | if (Homematic_GUI == 1){ 35 | system("/home/pi/E3dcGui/screenSave &"); 36 | system("/home/pi/E3dcGui/screenSaveHM &"); 37 | } 38 | else 39 | system("/home/pi/E3dcGui/screenSave &"); 40 | sleep (4); 41 | system("/home/pi/E3dcGui/GuiMain &"); 42 | system("/home/pi/E3dcGui/watchdog &"); 43 | } 44 | else{ 45 | system("/home/pi/E3dcGui/RscpMain &"); 46 | system("/home/pi/E3dcGui/watchdog &"); 47 | if(WALLBOX_ACTION == 1 || EP_RESERVE_ACTION == 1 || BATTERYLIMIT_ACTION == 1 || POWERSAVE_ACTION == 1 || WEATHER_REG_ACTION == 1){ 48 | system("/home/pi/E3dcGui/Rscp/actionCheckHM &"); 49 | } 50 | if (E3DC_LED == 1){ 51 | system("sudo /home/pi/E3dcGui/External/LedMain &"); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /stop.c: -------------------------------------------------------------------------------- 1 | /* 2 | gcc -g -o stop stop.c 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include "checkPara.h" 15 | #include "Frame/touch.h" 16 | #include "Frame/touch.c" 17 | #include "Frame/framebuffer.c" 18 | #include "Frame/DrawCorner.c" 19 | #include "Frame/DrawImage.h" 20 | #include "funktion.h" 21 | 22 | int main() 23 | { 24 | //Parameter einbinden, checken oder default setzen 25 | checkDefinePara(0); 26 | 27 | signal(SIGINT, INThandler); 28 | 29 | int xres,yres,x; 30 | 31 | int screenXmax, screenXmin; 32 | int screenYmax, screenYmin; 33 | 34 | float scaleXvalue, scaleYvalue; 35 | 36 | int rawX, rawY, rawPressure, scaledX, scaledY; 37 | 38 | if (openTouchScreen() == 1) 39 | perror("error opening touch screen"); 40 | 41 | getTouchScreenDetails(&screenXmin,&screenXmax,&screenYmin,&screenYmax); 42 | 43 | framebufferInitialize(&xres,&yres); 44 | 45 | scaleXvalue = ((float)screenXmax-screenXmin) / xres; 46 | printf ("X Scale Factor = %f\n", scaleXvalue); 47 | scaleYvalue = ((float)screenYmax-screenYmin) / yres; 48 | printf ("Y Scale Factor = %f\n", scaleYvalue); 49 | 50 | killall(); 51 | screenOn(); 52 | drawSquare(360,3,440,240,BLACK); 53 | system("setterm -cursor on"); 54 | if(pidCheck("screenSaveHM") != 0) system("killall -9 screenSaveHM"); 55 | if(pidCheck("screenSave") != 0) system("killall -9 screenSave"); 56 | } 57 | --------------------------------------------------------------------------------