diff --git a/CMakeLists.txt b/CMakeLists.txt
index 96c755bad5b9cee3d30ba8714a772008502ef5ed..1987450e7ed2fede863b9a58b8bb5e53bd76049d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -34,6 +34,7 @@ include_directories(src/smart_grid)
 add_executable(smart_grid.exe
     src/smg_server.cpp
     src/smart_grid/SmartGridModell.cpp
+    src/smart_grid/StateLogger.cpp
     src/i2c/Node.cpp
     src/com/Socket.cpp
     src/com/Protocol.cpp
diff --git a/src/observ/ObserverPattern.hpp b/src/observ/ObserverPattern.hpp
index fe79426d4d7a5b9373a73e4a42ff70d37b3cb34a..300d8292182874b5c51e6c65a4101cb01375092e 100644
--- a/src/observ/ObserverPattern.hpp
+++ b/src/observ/ObserverPattern.hpp
@@ -14,22 +14,23 @@ public:
     virtual void update(const T &subject) = 0;
 };
 
-template<typename T>
+template<typename Observer, typename Value>
 class Subject
 {
 public:
     virtual ~Subject() = default;
-    void attach(std::shared_ptr<IObserver<T>> observer){
+    void attach(std::shared_ptr<Observer> observer){
         m_observers.push_back(observer);
     }
 
-    void notify() const{
-        for (auto &observer : m_observers){
-            observer.update(this);
+protected:
+    void notify(const Value &value) const{
+        for (auto observer : m_observers){
+            observer->update(value);
         }
     }
 private:
-    std::vector<std::shared_ptr<IObserver<T>>> m_observers;
+    std::vector<std::shared_ptr<Observer>> m_observers;
 };
 
 #endif
\ No newline at end of file
diff --git a/src/smart_grid/ModelState.cpp b/src/smart_grid/ModelState.cpp
index 6e5bf829f21da4058dfdba892496d867f927fb95..3bcd87c43575175a878fd3fb825acbe722171ab6 100644
--- a/src/smart_grid/ModelState.cpp
+++ b/src/smart_grid/ModelState.cpp
@@ -114,4 +114,5 @@ void ModelState::next_hour()
     update_power_production();
     update_modell();
     print_states();
+    notify(*this);
 }
\ No newline at end of file
diff --git a/src/smart_grid/ModelState.hpp b/src/smart_grid/ModelState.hpp
index 70269324603161beef214a11cd4b90fcb49b676d..5e72dd03a34526a591e4d2f7ae53cef7bc092d4a 100644
--- a/src/smart_grid/ModelState.hpp
+++ b/src/smart_grid/ModelState.hpp
@@ -11,6 +11,7 @@
 #include "SmartGridModell.hpp"
 
 #include "ObserverPattern.hpp"
+#include "StateLogger.hpp"
 struct MaxPower
 {
     static constexpr double village = 600;
@@ -58,13 +59,17 @@ struct PowerUsage
 };
 
 
-class ModelState : Subject<ModelState>
+class StateLogger;
+class ModelState : Subject<StateLogger, ModelState>
 {
 public:
     ModelState(SmartGridModell &modell);
     void next_hour();
     double excess_power();
 
+    PowerProduction getPowerProduction() const {return m_production;}
+    PowerUsage getPowerUsage() const {return m_usage;}
+
 private:
     void update_time();
     void update_sun();
diff --git a/src/smart_grid/StateLogger.cpp b/src/smart_grid/StateLogger.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2aee2ea8d4f259f84cb5406da2c02e8473ff330d
--- /dev/null
+++ b/src/smart_grid/StateLogger.cpp
@@ -0,0 +1,8 @@
+///
+
+#include "StateLogger.hpp"
+
+void StateLogger::update(const ModelState &model)
+{
+    spdlog::debug("Clean solar power: {}", model.getPowerProduction().renewable.solar);
+}
\ No newline at end of file
diff --git a/src/smart_grid/StateLogger.hpp b/src/smart_grid/StateLogger.hpp
index 2ab362f9d1e8ee0f2a43b9517eccccadc7bb9ed6..96ded4065194c8ca621ca23f60e7c6ffd66ce811 100644
--- a/src/smart_grid/StateLogger.hpp
+++ b/src/smart_grid/StateLogger.hpp
@@ -6,6 +6,7 @@
 #include "ModelState.hpp"
 #include "ObserverPattern.hpp"
 
+class ModelState;
 class StateLogger : IObserver<ModelState>
 {
 public: