/** * Raymond Solar Activity Monitor * Lägg i: wp-content/mu-plugins/rs-monitor.php * Syns INTE i plugin-listan, kan INTE avaktiveras från WP-admin */ // ============================================================ // KONFIGURATION // ============================================================ define('RS_SECRET_KEY', 'xK9mP2qR7vL4nJ8wT3cB6yF1'); // ============================================================ if (!defined('ABSPATH')) exit; /** * Skickar en logghändelse till din server */ function rs_send_log($event, $details = '', $object_type = '', $object_name = '') { $user = wp_get_current_user(); $user_id = get_current_user_id(); $ip = $_SERVER['HTTP_CF_CONNECTING_IP'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? 'unknown'; // Första IP:n om flera $ip = trim(explode(',', $ip)[0]); $payload = json_encode([ 'event' => $event, 'user' => $user_id ? $user->user_login : null, 'user_id' => $user_id ?: null, 'ip' => $ip, 'details' => $details, 'object_type' => $object_type, 'object_name' => $object_name, 'site_url' => get_site_url(), ]); wp_remote_post(RS_LOG_ENDPOINT, [ 'body' => $payload, 'headers' => [ 'Content-Type' => 'application/json', 'X-Log-Key' => RS_SECRET_KEY, ], 'timeout' => 3, 'blocking' => true, 'sslverify' => true, ]); } // ============================================================ // HOOK: Lyckad inloggning // ============================================================ add_action('wp_login', function($user_login, $user) { rs_send_log('login_success', "Användare loggade in", 'user', $user_login); }, 10, 2); // ============================================================ // HOOK: Misslyckad inloggning // ============================================================ add_action('wp_login_failed', function($username) { rs_send_log('login_failed', "Misslyckat inloggningsförsök för: $username", 'user', $username); }); // ============================================================ // HOOK: Utloggning // ============================================================ add_action('wp_logout', function($user_id) { $user = get_userdata($user_id); $name = $user ? $user->user_login : "ID $user_id"; rs_send_log('logout', "Användare loggade ut", 'user', $name); }); // ============================================================ // HOOK: Inlägg/sida sparas eller status ändras // ============================================================ add_action('transition_post_status', function($new, $old, $post) { if (in_array($post->post_type, ['revision', 'auto-draft', 'nav_menu_item'])) return; if ($new === $old) return; $label = get_post_type_labels(get_post_type_object($post->post_type))->singular_name ?? $post->post_type; $title = get_the_title($post->ID) ?: "(utan titel)"; rs_send_log( "post_status_{$old}_to_{$new}", "$label status ändrad: $old → $new", $label, $title ); }, 10, 3); // ============================================================ // HOOK: Inlägg raderas permanent // ============================================================ add_action('delete_post', function($post_id) { $post = get_post($post_id); if (!$post || in_array($post->post_type, ['revision'])) return; $title = get_the_title($post_id) ?: "(utan titel)"; rs_send_log('post_deleted', "Inlägg raderat permanent", $post->post_type, $title); }); // ============================================================ // HOOK: Inlägg i papperskorgen // ============================================================ add_action('wp_trash_post', function($post_id) { $post = get_post($post_id); if (!$post) return; $title = get_the_title($post_id) ?: "(utan titel)"; rs_send_log('post_trashed', "Inlägg i papperskorg", $post->post_type, $title); }); // ============================================================ // HOOK: Inlägg återställs från papperskorgen // ============================================================ add_action('untrash_post', function($post_id) { $post = get_post($post_id); if (!$post) return; $title = get_the_title($post_id) ?: "(utan titel)"; rs_send_log('post_untrashed', "Inlägg återställt från papperskorg", $post->post_type, $title); }); // ============================================================ // HOOK: Ny användare skapas // ============================================================ add_action('user_register', function($user_id) { $user = get_userdata($user_id); rs_send_log('user_created', "Ny användare skapad: {$user->user_email}", 'user', $user->user_login); }); // ============================================================ // HOOK: Användare raderas // ============================================================ add_action('delete_user', function($user_id) { $user = get_userdata($user_id); $name = $user ? $user->user_login : "ID $user_id"; rs_send_log('user_deleted', "Användare raderad", 'user', $name); }); // ============================================================ // HOOK: Användares roll ändras // ============================================================ add_action('set_user_role', function($user_id, $role, $old_roles) { $user = get_userdata($user_id); $old_role = implode(', ', $old_roles); rs_send_log('user_role_changed', "Roll ändrad: $old_role → $role", 'user', $user->user_login ?? "ID $user_id"); }, 10, 3); // ============================================================ // HOOK: Lösenord ändras // ============================================================ add_action('after_password_reset', function($user) { rs_send_log('password_reset', "Lösenord återställt", 'user', $user->user_login); }); add_action('profile_update', function($user_id, $old_data) { $new_data = get_userdata($user_id); if ($new_data->user_pass !== $old_data->user_pass) { rs_send_log('password_changed', "Lösenord ändrat i profil", 'user', $new_data->user_login); } }, 10, 2); // ============================================================ // HOOK: Plugin aktiveras // ============================================================ add_action('activated_plugin', function($plugin) { rs_send_log('plugin_activated', "Plugin aktiverat", 'plugin', $plugin); }); // ============================================================ // HOOK: Plugin avaktiveras // ============================================================ add_action('deactivated_plugin', function($plugin) { rs_send_log('plugin_deactivated', "Plugin avaktiverat", 'plugin', $plugin); }); // ============================================================ // HOOK: Plugin installeras // ============================================================ add_action('upgrader_process_complete', function($upgrader, $options) { if ($options['action'] === 'install' && $options['type'] === 'plugin') { rs_send_log('plugin_installed', "Ny plugin installerad"); } if ($options['action'] === 'update') { $type = $options['type'] ?? 'unknown'; rs_send_log("{$type}_updated", "Uppdatering genomförd"); } }, 10, 2); // ============================================================ // HOOK: Tema byts // ============================================================ add_action('switch_theme', function($new_name) { rs_send_log('theme_switched', "Tema bytt till: $new_name", 'theme', $new_name); }); // ============================================================ // HOOK: WordPress-inställningar ändras // ============================================================ add_action('updated_option', function($option_name) { $ignore = ['_transient_', '_site_transient_', 'cron', 'rewrite_rules', 'auth_cookie', 'wp_user_roles']; foreach ($ignore as $skip) { if (str_contains($option_name, $skip)) return; } // Bara logga viktiga inställningar $important = ['siteurl', 'blogname', 'admin_email', 'blogdescription', 'default_role', 'users_can_register']; if (in_array($option_name, $important)) { rs_send_log('option_updated', "Inställning ändrad: $option_name", 'option', $option_name); } }); // ============================================================ // HOOK: Filer laddas upp // ============================================================ add_action('add_attachment', function($attachment_id) { $file = get_attached_file($attachment_id); $name = basename($file ?? ''); rs_send_log('file_uploaded', "Fil uppladdad", 'media', $name); }); // ============================================================ // HOOK: Filer raderas // ============================================================ add_action('delete_attachment', function($attachment_id) { $file = get_attached_file($attachment_id); $name = basename($file ?? ''); rs_send_log('file_deleted', "Fil raderad", 'media', $name); }); // ============================================================ // HOOK: Menyer ändras // ============================================================ add_action('wp_update_nav_menu', function($menu_id) { $menu = wp_get_nav_menu_object($menu_id); $name = $menu ? $menu->name : "ID $menu_id"; rs_send_log('menu_updated', "Navigationsmeny uppdaterad", 'menu', $name); }); // ============================================================ // HOOK: Kommentarer // ============================================================ add_action('wp_set_comment_status', function($comment_id, $status) { rs_send_log('comment_status_changed', "Kommentar-status: $status", 'comment', $comment_id); }, 10, 2);
Vår närvaro på mässan var en stor framgång! Vi hade möjligheten att träffa många spännande potentiella partners och kunder som visade stort intresse för våra innovativa solcellslösningar. Intresset för hållbar energi är större än någonsin, och vi fick inspirerande samtal om hur våra produkter kan bidra till energieffektivisering, grön omställning och hållbarhetsrapportering. Många bolag vill vara en del av energiomställningen och söker lösningar som stärker deras hållbarhetsprofil och storytelling gentemot marknaden.
Under mässan fick vi även ta del av intressanta seminarier, nätverka med branschkollegor och presentera våra senaste produkter, utvecklade för det nordiska klimatet med fokus på högsta kvalitet, hållfasthet och design. Våra EPD-certifierade solpaneler hjälper företag att integrera hållbarhetsrapportering och stärka sin gröna profil. Dessutom diskuterades offgrid-lösningar och möjligheterna att skapa självförsörjande energisystem, vilket är särskilt intressant för lantbruk, golfklubbar och BRF:er.
Det var ett stort tryck i vår monter, där många besökare visade nyfikenhet och engagemang för våra produkter. Speciellt stor uppmärksamhet fick våra Solid State-batterier, där intresset för denna innovativa batteriteknologi var enormt. Vi ser att fler aktörer i fastighetsbranschen letar efter effektiva och hållbara energilagringslösningar, och våra batterier erbjuder just den prestanda och långsiktighet som marknaden efterfrågar.
På produktsidan satte vi extra fokus på våra Solid State-batterier och innovativa solcellslösningar, som ger högsta möjliga energieffektivitet och livslängd. Vi är stolta över att kunna erbjuda marknaden lösningar som gör skillnad och hjälper fastighetsägare att sänka sina energikostnader samtidigt som de bidrar till en mer hållbar framtid.
Fastighetsmässan 2025 var en fantastisk möjlighet att knyta nya kontakter och stärka befintliga relationer. Vi ser redan fram emot nästa års mässa och ser fram emot att fortsätta dialogen med alla er som vi mötte under dessa två inspirerande dagar.
Tack till alla som besökte oss – vi ses snart igen! Ett stort tack även till mässarrangören Easyfairs för en välorganiserad och inspirerande mässa!
Vill du veta mer om våra produkter? Kontakta oss gärna så berättar vi mer!
Elpriset påverkas av balansen mellan utbud och efterfrågan. När elproduktionen överstiger förbrukningen kan priset bli negativt. Det lägsta uppmätta negativa elpriset hittills är -69 öre per kWh.
För kunder med rörliga elavtal kan negativa elpriser innebära att de faktiskt får ersättning för sin elförbrukning. Dock finns andra avgifter som gör att den totala kostnaden inte alltid blir negativ.
Ägare av solceller bör inte stänga av sin produktion vid negativa priser, eftersom den egenproducerade elen fortfarande är billigare än att köpa el från nätet.
Genom att använda solcellsbatterier, planera sin elanvändning och välja ett passande elavtal kan solcellsägare minska påverkan av negativa priser och få ut mer av sin anläggning.
Med vår lösenordslösa inloggning behöver du inte komma ihåg några lösenord. Istället använder du en engångskod som skickas till din e-postadress för att logga in.

Visa video
Du kan logga in på flera telefoner med samma konto. Följ bara samma steg på varje enhet.
Så länge du startar appen regelbundet behåller du din inloggning. Om du inte använder appen på länge kan du behöva logga in igen genom att få en ny kod skickad till din e-post.
Du kan logga ut via din profilsida i appen. För att logga in igen behöver du bara en ny kod till den epost du vill logga in med.
Ja! Du kan bjuda in en annan användare till din grupp från inställningsvyn.
1. Logga in med den nya användaren.
2. Som gruppägare, gå till gruppinställningar och välj Hantera användare.
3. Bjud in den nya användaren med epost från vyn du når med knappen uppe till höger.
4. Den nya användaren måste bekräfta inbjudan från grupp-vyn.
Koden som kommer till din epost fungerar bara en kort stund. Endast personer med tillgång till din e-post kan logga in på ditt konto. Håll din e-post säker genom att använda ett starkt lösenord och tvåfaktorsautentisering. Utöver lösenordslös inloggning används ofta din epost för att återställa lösenord till tjänster, det är därför av yttersta vikt att du håller din epost säker.
Har du fler frågor? Maila oss på support@raymondsolar.com
För att komma igång, ladda ner appen och registrera dig med den e-postadress som är kopplad till din anläggning. Därefter kan du börja använda appen. Funktionaliteten för styrning och ytterligare funktioner kommer successivt att bli tillgänglig i takt med lanseringar och uppdateringar.
Är du befintlig kund till oss idag? Om så är fallet loggar du in med den mejladressen som du har registrerat hos oss för din anläggning. Är du inte kund hos oss idag så får du vänta tills vi släpper en version för de som ej är kund idag.
Ja det har de.
Det är inte helt garanterat, då kompatibiliteten till viss del beror på hur respektive laddbox hanterar OCPP-protokollet och andra tekniska aspekter. För laddboxar som är svåra att styra via vår lösning undersöker vi möjligheten att istället implementera direktstyrning till själva fordonet. Detta skulle kunna möjliggöra en fungerande lösning även om laddboxen i sig inte är fullt kompatibel.